Incantation 0.10.6 for Forge 1.20.1
Curse Maven Snippet
What's new
0.10.6
Everything since 0.10.5.
Two bugs from the CurseForge comments and one found on the way to the second. The first two are the same unpleasant kind: the mod heard you and then quietly did the wrong thing about it — once by refusing a repeat, once by casting on a guess it had not finished checking.
Fixed
Some spells could only be cast once. Say a spell, and saying it again did nothing — no cast, and nothing in the Live Monitor either, as though the microphone had stopped working. Saying a different spell first brought it back, and everything looked fine in the Test Arena. Three symptoms, one cause.
The mod counts utterances so it can tell "the recogniser is still chewing on the word I just said" apart from "the player said it again", and it only counted a new one when the recogniser produced a running guess before its final answer. It does not always produce one. With a short spell name the speech engine often keeps its running guess empty and commits everything at the end, so the mod saw a single answer with nothing before it. Two of those in a row left the counter frozen, and from then on every repeat of that spell was treated as an echo of the first — for as long as you kept saying it. Saying a different spell reset the comparison, which is the workaround the reporter found on their own.
An utterance is finished when the recogniser gives its final answer, so anything after that is the next one. That is now what the mod counts, and a spell can be cast as many times in a row as you can say it.
The silence was a second bug on top of the first. A suppressed repeat wrote nothing anywhere, so
there was no way to tell it apart from a dead microphone — which is exactly how it was reported.
The Live Monitor now shows (repeat too soon) for a repeat that lands inside the echo window, one
line per utterance. The Test Arena looked healthy throughout because it stops at "a menu is open"
before it ever reaches the echo check. Thanks to tomasek1a for a report that described all
three symptoms precisely enough to find the cause from.
Invisibility could be cast from words that sound nothing like it. The recogniser is only ever allowed to hear spell names, so when it hears something else it picks the closest name it knows — and a long name is the natural magnet, because it can absorb the most audio. The mod then cast on the recogniser's running guess, before the final answer, and that path had no check on it at all: the confidence setting only ever applied to the final result.
Two things changed. Every match now has to have been spoken for long enough to plausibly be
that phrase — 25 ms per letter by default (minMsPerLetter; "heal" 100 ms, "invisibility"
300 ms), measured from the recogniser's own word timings. Real spell names measure roughly
50-120 ms per letter; short one-syllable names like "shield" are the tightest, around 40, which is
why the default sits well under that rather than close to it. A running guess that comes up short
is not cast — the final answer decides, and nothing is held waiting for more audio. Only when the
completed word still comes up short does it get rejected, shown as (too short 150ms < 300ms) in
the Live Monitor. And perSpellMinConfidence now has teeth: a spell listed there never casts from
a running guess. It waits for the complete utterance and is judged at its own threshold, so
irons_spellbooks:invisibility=0.7 is the knob for a spell that keeps getting force-fitted. That
costs a listed spell the wait for its final answer — about half a second after you stop speaking,
and it waits for you to stop, so say a listed spell on its own rather than in the middle of a
sentence. Everything not listed still casts the instant it is recognised. Reported against
Invisibility — thank you.
The recogniser drops the first word, and the mod now recognises what is left. Say "fireball"
and the speech engine sometimes reports only ball; "star fall" comes back as fall, "heat surge"
as surge. Those casts simply did not happen — the mod looked for a spell called "ball", found
none, and said nothing. Worse, surge was close enough in sound to Scorch that it cast Scorch
instead, and hole had been quietly reaching Heal the same way for as long as both have existed.
The answer was always sitting in the list of phrases the recogniser was told to listen for. If what
it heard is the end of exactly one of those phrases, that is the spell you meant, and it now casts.
Only the end of a phrase, and only when exactly one matches: bolt still does nothing, because
Fire Bolt, Guiding Bolt and Lightning Bolt all end that way and guessing between them would be
worse than asking you to say it again.
Calibrating your voice works on a quiet microphone. The microphone check set its noise gate from an average that included your own speech, which estimates the room badly — and on a quiet setup it landed below the room's own hum. Room noise then crossed the gate, got counted as words, and dragged the measurement down until the check refused its own result every single time. The player it happened to could never finish calibrating, so the whole whisper-to-shout range was out of reach for them. It now measures the room first and judges both the gate and the result against that, and it will not raise the gate past the words it just heard you say.
Sound-alike matching now requires the two words to be about the same length. Found while chasing that report, and not its cause — across every Iron's Spells phrase nothing shares Invisibility's sound-alike code, so that path could not have produced it — but a real weakness on its own. The comparison that turns "fire boltz" back into "fire bolt" reduces any word to four characters: a first letter and three consonant sounds. For a short name that is most of the word; for a long one it is almost none of it, and everything past the fourth character was simply not compared. Genuine near-misses are a character or two apart and still match; a word half the length of the spell name no longer does.
Voice casts were missing the levels your affinity items give you. Iron's Spells adds spell
levels for the affinity gear you are wearing — a fire affinity ring casts your Fireball a level
above the one inscribed on your spellbook — and clicking has always counted them. Speaking did not.
Fireball inscribed at level 3, with that ring on, went off at 4 when you clicked it and at 3 when
you said it, so on a default server a spoken cast was quietly weaker than the same click: the one
thing the voice level system is supposed to guarantee never happens. The mod now works the level out
exactly the way a click does, so your affinity bonus — and any change an addon mod makes to a
spell's level — counts for a spoken cast too. That level is the floor everything else builds on:
voiceLevelBonus adds on top of it, and the mana you are charged is what the same click would have
charged, not a point more.
Voice volume scaling now earns the voice level bonus instead of shrinking your spellbook.
voiceVolumeScaling used to promise "whisper for level 1, shout for your spellbook's level," and
in practice every spoken cast came out at level 1 however loudly you said it, because the volume
was being read after you had already stopped talking. It now means something better. The level your
item itself would cast at — the spellbook, the imbued item or the scroll, affinity bonus included
(level 1 under FREE) — is always the floor; a voice cast never lands below it. voiceLevelBonus (or
a player's playerAdvantages level) is the most a spoken cast can add on top, and with
voiceVolumeScaling on, how much of it you earn depends on how loudly you said the spell: your
normal speaking voice earns about half, a raised voice all of it, a whisper none. The bonus always
lands on a whole level, never a fraction of one. Loudness is judged against your own voice, one
spoken word at a time: run Config → More… → Calibrate mic once — say four or five spell names at
your normal volume, with a short pause between them — and the mod remembers how loud one word from
you sounds. It used to compare a single spoken word against the loudest stretch of the whole
five-second recording, which sits above any ordinary word however evenly you spoke, so normal speech
was scored as a whisper and most of the bonus could not be earned at all. It now measures the words
in the recording the same way a cast measures the one you just said. Until you calibrate, a voice
cast earns the middle of the bonus rather than none of it. The extra levels are still charged at the
spell's ordinary mana cost. A spell repeated with the quick-recast key repeats at the loudness it
was originally said, and a queued spell fires at the loudness of the words that queued it. With the
option off, every spoken cast gets the full bonus, as before.
Also
Two server options that were never announced. They went into 0.10.5 without a changelog line, which is why people have been asking for them in the comments since:
incantationOnly—FIRST_CASTmakes each spell voice-cast once before it can be clicked, so learning the incantation unlocks it;ALWAYSmeans spells can only ever be spoken. Off by default. Players without the mod on their client are exempt rather than locked out.voiceVolumeScaling— scales the voice level bonus by how loudly you speak, as described above. Off by default, and it does nothing unlessvoiceLevelBonus(or aplayerAdvantageslevel) is above 0.
Both live in config/voicespells-server.toml.
The store pages said Iron's Spells 'n Spellbooks was a required dependency. It never has been: the mod loads and behaves sanely without it, finds no spells, and casts nothing, which is the designed outcome and the reason addon spell mods work with no code of their own. Both pages now say optional, so a launcher will stop insisting on it.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include