If you like Spelling, please consider giving it a good rating.
(If you use Spelling frequently and feel comfortable with its use, please check out the comments section, as I have a request.)
Spelling Introduction
Spelling, what's it good for? Brightening up spell-casting, ability use, and even item use with some emotive and text-based fun, that's what!
I created this mod because I found that I liked having my character saying things when I cast/used stuff, but generally it was either too spammy or it made my macros too big, so I needed a solution... and thus I made this mod.
An amusing example would be to consider a Mage's spells, what if said Mage could pose dramatically and yell each spell in a terrible Dragonball-Z-like way? A practical example could be Entangling Roots or some other Crowd Control system, when you get it off you could let your raid/party know. You could even tie it to healing spells, applying poisons, or if you're feeling crazy... you could even tie it in with summoning out a mini-pet.
There are many uses for Spelling, and they're all handled through the chat command /spelling. I warn you though, there's no GUI here, so this isn't for the faint of heart. But what I can say is that the level of customisation and granularity that Spelling provides makes up for it.
Spelling Instructions
/spelling help
There is a form of in-game help, but more it's really just a reminder of what each of the commands do. It can be triggered by using the help command, it can also be triggered by typing /spelling with nothing else.
The help print also states whether the mod is enabled or disabled.
/spelling add [...]
This is where the customisation element of Spelling is handled, and though the use of it might be confusing at first, it's all there to help you create the kind of reaction you want and empower the player. Each command is separated by the # symbol, it's done this way so that you only need to type one line to get it all in.
/spelling add boomfire # moonfire # applied # say # 1 # Moonfire!
That's an example of how it works, and you can refer back to that as I explain what each of the arguments do.
Arg 1: Unique Identifier
Spelling is able to use multiple entries for each entity (an entity being what I call a spell cast, aura cast, item use, spell cast fail, aura removal, et cetera), but to be able to do that it needs to be able to distinguish entry A from entry B, a unique identifier is needed to do this. So if you wanted two entries for a spell, you could simply supply a unique identifier for each...
/spelling add starfire1 # starfire # [...]
/spelling add starfire2 # starfire # [...]
/spelling add starfire3 # starfire # [...]
It doesn't have to be numbered like that, in fact you can use any identifier you want, as long as they're all different. Another use for the identifier is if you ever need to remove an entry (I'll cover this later), so it's best to keep the identifiers as simple as you can.
Arg 2: Spell Name or ID
For this arg the spell you wish spelling to react to must be entered, the spell can be entirely lower case, higher case, correct case or whatever you like, as long as the spelling of it is correct.
/spelling add myid # myspell # [...]
You can also use the spell ID. This might be necessary for spells that apply multiple buffs whilst keeping the spell name the same. One example of this is Invisibility, when the spell is first cast a buff named Invisibility is applied, but when the invisibility actually kicks in, another buff named Invisibility is applied again. The only way around this is to use the ID of the spell.
/spelling add myid # id:66 # [...] (First ID of Invisibility.)
/spelling add myid # id:32612 # [...] (Second ID of Invisibility.)
If you're not sure what the IDs are, you can use Spelling's own in-built debugging command. The debug command will be covered later in these instructions.
Please note that Spelling isn't limited to just spells, in fact you could use it with items, or other abilities. As long as it's something that shows up in the Combat Log, it'll work. I even use Spelling to have some text fired when I summon out my Worg Pup.
Arg 3: State
This is--err...--arguably the most complex of all the args. The state implies the state the combat log throws in relation to a spell, item, or ability.
/spelling add tranq # tranquility # spell_heal # [...]
/spelling add mark1 # mark of the wild # success # [...]
/spelling add hold # entangling roots # applied # [...]
/spelling add mark2 # mark of the wild # removed # [...]
/spelling add baaa # polymorph # missed # [...]
/spelling add goose # mongoose bite # missed # [...]
These are a few examples, but the states used by spells can be quite different. Often, many abilities, items, and spells will have their own particular and quirky state use, so you'll have to possibly use the debugging tool to find out which is best for the spell/ability/item you're trying to set up. There's a section below though on the use of states, and I've tried my best to suggest the best courses of action there, so that might be a good read too if you're new to Spelling.
Arg 4: Channel
This arg implies the output channel that spelling will send to. This can be say, raid, party, or whatever you'd like.
/spelling add catform # cat form # applied # emote # 1 # lets out a feral mrowl as his form shifts to that of a Lion.
The above example uses the emote channel, so that if you have a Druid and they shift to Cat, they'll do the emote: Name lets out a feral mrowl as his form shifts to that of a Lion.
The channels are basically the ones you've come to know from WoW, so usually if you can prefix it (such as /say, /party, /guild), you can use it as a channel.
There are times though where you might want to specify that you'd like to check whether you're in a raid and send there, and then check whether you're in a party and send there, and if you're in neither you might not want the Spelling to fire at all.
/spelling add myid # myspell # mystate # channel1 channel2 [...] # [...]
Spelling can take multiple channels and run these checks for you.
/spelling add myid # myspell # mystate # raid party none # [...]
In this example, Spelling first checks to see if the player is in a raid, and if so the output is sent there, then it checks to see if the player is in a party, and the output is sent there, otherwise the spelling won't fire at all.
/spelling add myid # myspell # mystate # party say # [...]
In this instance, Spelling will check if the player is in a party and send the output there, if not it'll send the output through say.
Arg 5: Chance
As a Druid, I'm more than well aware that some abilities are as spammy as hell. Rogues should know this too. But that shouldn't stop us from being able to use Spelling, and without spamming our fellow adventurers into oblivion! To this end, chance allows you to set a chance number for your spell.
The chance is 1 in ?, so if you were to specify 5 it has a 1 in 5 times chance of firing. This is done by doing a randomisation between 1 and your number, if the randomisation matches your number, then the Spelling is fired. If the chance number is 1 then the Spelling will always fire.
/spelling mangler # mangle (cat) # applied # emote # 5 # [...]
Here we see that the mangle (cat) ability has been set so that it has only a 1 in 5 chance of firing.
Arg 6: The Output Text
This is where the fun begins!
/spelling add yoink # pickpocket # success # say # 1 # Yoink!
That's just one example, and the text can be anything you'd like. I've covered earlier how channels can be tied into this, so that you can send text to any channel you like. This is where the customisation of Spelling really shines.
/spelling add nobaaame # polymorph # missed # say # 1 # It would appear that HITNAME doesn't care to be a Sheep, and that's their loss if you ask me. It's a wonderful experience, I say.
There are various elements that can also be tied in with the output text, such as HITNAME in that example. I'll cover these below. The gist of it though is that anything you can get your character saying or doing whatever you like, it really is all up to you.
Output Element: HITNAME
This might imply that you'll need a target in order to use HITNAME, but that's not the case. Providing your spell actually lands on a unit (as opposed to being an area of effect) it'll work. This is because the unit it falls on is known as the destination unit, and any spell or ability that lands on a unit will consider that unit as the destination unit.
For example, if you were to buff Peon with Mark of the Wild, Peon would be considered the destination unit, even if you don't have them targeted.
The same goes for healing spells, abilities, and even item-based abilities that land on a unit. If however HITNAME is used in a spell that doesn't have a destination unit, then HITNAME will simply come back out as <no destination unit>. I've done this so it'll be more simple to quickly spot what can use HITNAME without a lot of debugging.
Output Element: PETHITNAME
You might want to add Spelling items for your Hunter pet, you can do that...
/spelling add growler # growl # success # say # 1 # My pet has successfully growled PETHITNAME!
Basically, the idea is that it works exactly the same as HITNAME, but in this case it'll check for an ability on your pet, and your pet's destination unit.
Output Element: SOURCE
In some cases, you might want to add Spelling entries for things that were cast on you, rather than things you cast. For example, if someone casts a debuff on you, you might want to use Spelling to inform your raid/party.
/spelling add mime # silence # applied # say # 1 # SOURCE is trying to cas--mmh mmf mrrh mmgggrffle mrraaggh... *waves his arms wildly!*
In this example, Spelling is setup to output a say line when the player has silence cast on them, SOURCE will be replaced by the name of the person or mob who cast it on them. This can also be used for heals and buffs to thank people if you like, so it isn't limited to just debuffs.
Output Element: PLAYERISDEST
Unlike the other elements, this one is replaced by nothing, so if you have 'This text.PLAYERISDEST' it becomes simply 'This text.' That means you can put this element anywhere. The point of this element is to allow a Spelling to be fired if the destination of a spell is the same name as the player, hopefully this will be a useful tool to those who have dual-part buffs.
Output Element: IGNOREREQS
This one is simple, it means only that Spelling reacts if a spell is fired, and it makes Spelling not care who the source is, and who the dest is. If IGNOREREQS is supplied, then the only thing Spelling worries about is that the spell is right, and the state is right. Like PLAYERISDEST, IGNOREREQS is simply stripped from the entry as soon as it's been checked.
/spelling list
If you want a list of all the entries you've made to spelling, this is the command to use.
Spelling List: [unique id] text
That's the output format, the unique identifier is highlighted to make it easier to spot the one you're looking for, if you're seeking a certain entry to delete/edit.
If you want to be able to see just one entry or a grouup of entries, you can supply queries to list.
/spelling list firstspelling secondspelling thirdspelling [...]
This will build and display a list of only the specific Spellings you want to see. This is handy if you want to make a quick change to a Spelling because that way you can see what you have already (and Spellings can be re-added without the need to remove them, providing you keep the identifier the same.
Finally, you can do a partial match for entries. Let's say that for your Druid character, you base all your Spelling entries on a class-abilityname basis (such as druid-growl), you could then list them by using: /spelling list druid
/spelling remove [...]
This command is used to delete Spelling entries based on their unique identifiers. If you're not sure of the unique identifier you used, you can use list to check all the entries.
/spelling toggle
This will enable/disable Spelling's functionality. There are times when Spelling would likely get in the way, such as if a player's at a Battleground. So it's good to be able to tell Spelling to shut up for a little while.
This option carries across sessions.
/spelling wipe
This is here for worst case scenarios. If Spelling completely breaks down due to a bad entry and you can't remove it, this'll likely solve the problem. Spelling is pretty solid, these days... but this is here as a "just in case" precaution. It's a last resort though as this will wipe all of your entries and reset Spelling to its default installation state.
/spelling debug
This activate's Spelling's debug mode. It works as a toggle so it can be disabled the same way. Debugging is only activated for the session though, as it's more of an information gathhering tool than anything else.
When debug mode is enabled, standard Spelling behaviour and outputs are suppressed in favour of debug prints. These prints contain the following (and in the same order):
Spell Name, Spell ID, CLEU State, CLEU Source, CLEU Destination.
The debug mode is most handy for figuring out which state is the best for your spell, because you'll be able to watch which states are cycled through when your spell is fired. It's also good for finding out the IDs of spells too, in case you need to find the ID of a spell in order to use it properly (as per the Invisibility example above).
The Use of States
The first step in determining which state best fits a spell is to use the debug, if only one state is fired for your spell, then that's the state to use. If something like SPELL_CAST_START is fired, followed by SPELL_DAMAGE, then SPELL_DAMAGE is the most apt state.
The way to find out which states your spells use is to enable debugging and try casting it. The debug print will tell you exactly which states were used by your spell so that you can determine the best to use.
Generally though, a good basic guide is to keep in mind what a spell does, that and I'll supply a general use list here:
Healing Spells or Abilities: I find spell_heal is generally best.
Damaging Spells: It seems spell_damage works best for these.
Damaging Abilities (Druid/Rogue/Warrior): Often applied works rather well.
Crowd Control: Unsure, but probably success or applied.
Buffs: Usually success is best for buffs.
Items: I find that for items without timers, the way to go is cast_start.
There are weird effects that can stem from using incorrect events, as has been reported to me by helpful Spelling testers. For example, using applied for buffs causes it to trigger when other players cast that buff. So if you're witnessing weird behaviour, try another state. If all else fails, report back here with the line you were using (and the debug info, if possible) and I'll do all I can to help you out.
To see a list of possible states, check out
WoW Wiki's page on the Combat Log Event, as almost anything listed there can be used as a state.
If you'd like to see examples of how to create different kinds of Spelling entries, please check out the
Spelling Resource Wiki, you might find something close to what you want to do there, and you could simply copy an example and edit it.
Regarding Portals, Teleports, and Mounts
There are things that the Combat Log doesn't support, such as teleports, portals, mounts, and so on. Support has been added for these in Spelling, but they don't use any of the standard CLEU states to function.
SPELL_CAST_SPECIAL_SUCCEEDED - This works the same as SUCCESS.
SPELL_CAST_SPECIAL_SENT - This works the same as START.
So for the states, you can simply supply 'succeeded' and 'sent'. You can debug spells/abilities/items to find out which will work for you, there will be areas where one or the other will take precedence.
Here are a few examples of what I'm talking about
: SENT always has a destination, but START never does, SUCCESS always has a destination, but SUCCEEDED never does, neither SENT or SUCCEEDED carry spell IDs (the IDs always return 0), but START and SUCCESS do. (It must be noted that all states carry the spell
name, but in some cases the ID is needed because the ID can be different where a spell/buff name can be the same for more than once instance.) So as you can see, you need to choose the state based on what variables you need.
If you want to see the two new states in action, here's how I use them with my mount (as the CLEU doesn't support mounts):
/spelling add horn # frostwolf howler # sent # sound # 1 # warhorn.wav
/spelling add whitemane # frostwolf howler # succeeded # say # 1 # I called to you Whitemane, and loyally you came. Now, let us ride like the wind!
The first instance is done when I start to call out my mount, it plays a warhorn sound (see below in the advanced usage section for information on using sounds in Spelling), then when I get on my mount, it does the say.
With the use of the debug tool, it shouldn't be hard to figure out which you'll want to use.
Info Words
These aren't like the elements as each element is a singular thing, but these words can be used all together in one sentence even, if you so desire. These are to aid in creating more believable Spellings, without needing to resort to a script.
Each of the words works in the same way, and it's a basic concept so this shouldn't be considered as advanced use. Anyone who can use Spelling will be able to use this. The format is basically that WORD is supplied, and you get a Return. As an example, TGTRACE would return Tauren if the targeted unit was a Tauren.
Finally, for the gender words, you can append CAP in order to use them as sentence starters. For example, whereas TGTHESHE would return 'he' (if the target unit were male, of course), TGTHESHECAP would return 'He'.
TGTHESHE and FCSHESHE
This returns either 'he' or 'she' based on the gender of the target or focus, it can also return 'it' if Spelling can't figure out the gender or if the game supplies no gender (this might be the case with numerous non-humanoid mobs).
- As a bitter Forsaken, I hate HITNAME as I hate all things, TGTHESHE can burn!
- As a bitter Forsaken, I hate Baudb as I hate all things, he can burn!
You can replace TGTHESHE with FCSHESHE in this example to use the focus instead.
TGTHISHER and FCSHISHER
This is much like above, except it returns 'his', 'her', or 'its' as applicable.
- Yes, I always buff HITNAME, but what can I say? ...TGTHISHER hair smells nice.
- Yes, I always buff Baudb, but what can I say? ...his hair smells nice.
Again, you can use FCS instead of TGT for a focus unit.
TGTHISHERS and FCSHISHERS
This is much like above, again, except it returns 'his', 'hers', or 'its' as applicable.
- HITNAME certainly brings all the boys to the yard, no showy display of dancing can top TGTHISHERS!
- Baudb certainly brings all the boys to the yard, no showy display of dancing can top his!
TGTHIMHER and TGTHIMHER
Verisimilitude! This returns 'him', 'her', or 'it'.
- HITNAME is irritating enough to deserve SPELLNAME, I find myself irked by TGTHIMHER.
- Baudb is irritating enough to deserve Entangling Roots, I find myself irked by him.
TGTRACE and FCSRACE
This returns the race of the target/focus.
I won't give examples for this, it's too easy for me to take cheap shots at the races I don't like, but because it's pretty obvious, that's okay. <.<
TGTCLASS and FCSCLASS
This reutrns the class of the target/focus.
As above, it's too tempting to take shots at those bloody--err... shots at classes I don't like.
TGTPOWER and FCSPOWER
This returns the power type used by the target/focus. This is mana, energy, or rage. If an unknown type is used, or any undesirable type is returned, it's replaced with 'effort' (I felt that was the most applicable).
- Ow, ow, ow, ow... does this TGTRACE never run out of TGTPOWER?!
- Ow, ow, ow, ow... does this Blood Elf ever run out of energy?!
...and so on.
MINIMAPZONE
This returns the zone as shown by the minimap's text.
- Wow, I think I just dropkicked that TGTRACE all the way out of MINIMAPZONE!
- Wow, I think I just dropkicked that Gnome all the way out of The Barrens!
Advanced Spelling Usage
Please note that with all of the features below, the only elements that work are PLAYERISDEST and IGNOREREQS, as the other words would not be required. PLAYERISDEST is only there so that you can ensure that the player is the destination with a given Spelling. IGNOREREQS forces spelling to not care who's dest and source. Otherwise it's assumed that the player must be the source.
Sounds
Spelling can play sounds to accompany your spells/abilities/items, too. For example, you could play the sound of a horn when summoning your Wolf. All you have to do is supplant the usual entry additions with the appropriate words.
Channel: sound
Text: soundfile.wav (or .mp3, .wma, or whatever else the client supports)
Here's an example of that:
/spelling add horn # frostwolf howler # sent # sound # 1 # warhorn.wav
This allows my Tauren to play a Warhorn to summon Whitemane, his Frostwolf.
Sounds always play, they're not a part of the random selection, so you should only have one sound per spell/ability/item and state. If it's the same spell/ability/item but a different state, then it's okay to have a new sound.
Animated Emotes
This is similar to above, but instead of sounds Spelling can utilise emotes suchc as /dance and so on.
Channel: staticemote
Text: emotename
Here's an example of that:
/spelling add rar # feral charge # success # staticemote # 1 # charge
This will cuase my Druid character to do the /charge emote, whenever he uses the Bear skill Feral Charge.
You, Anybuff/Anydebuff, and SPELLNAME
What if you wanted a blanket system that could react to any buff or debuff? I did, and so I've included an option to Spelling that can do that. If you supply anybuff or anydebuff to Spelling, it'll do a named Spelling whenever a buff/debuff is cast. Basically turning Spelling into broadcaster, but with Spelling scripts (Grammar) so much more could be done than that. But for the purpose of example, we'll use a broadcaster. Note that SPELLNAME, unlike any other element, can be used in combination with any other one element.
/spelling omgbuffs # anybuff # applied # raid party none # 1 # SPELLNAME buff received!PLAYERISDEST
/spelling ackdebuffs # anydebuff # applied # raid party none # 1 # SPELLNAME debuff is on me!PLAYERISDEST
On the
Spelling Resource Wiki there's an example of a Spelling script called tehdance, I'm personally now using that with anybuff in the following format:
/spelling dancylads # anybuff # applied # script # 1 # tehdancePLAYERISDEST
Since the spell is passed through to the Spelling script, the SPELLNAME element does not need to be supplied.
You and Any
The any operator works similar to IGNOREREQS, except in this case it ignores the need for the spell. When any is supplied, there can be any or even no spell. The reason for this is primarily for scripts, but it can even be used with normal spellings, too. When any is supplied, the creator of a Spelling must instead look to the state to work with, it's with this that the power of any is utilised.
Here's an example:
/spelling add killed # any # party_kill # 3 # A vile act, but it had to be done. May the winds guide TGTHISHER spirit to the Earthmother's embrace...
On a chance of one in three, this fires whenever the player (who is the source) makes a kill. I find it rather fitting that my Tauren says this occasionally when grinding.
Scripting
The scripting functionality is for advanced users, and if you don't have an understanding of Lua then you shouldn't worry about it. For those that are interested though, I'd suggest you download Grammar from the optional files, as it contains what you'll need to start Spellin' some scriptin'! ...or something like that.
The Grammar.lua file contains detailed instructions on how the system works, including an example. If you have any questions about the feature then feel free to ask me, I'm always willing to help! I've also put up a script example (just to get things started) on the
Spelling Resource Wiki.
I'm hoping the wiki can become a central hub for users of Grammar, it's a place where you can put your scripts for others to see, or if you need help with a script (mark it as problematic/not working) then put it up on the wiki and I'll be able to take a look at it and edit it for you.
Footnote
Spelling is feature-complete, and after much testing it's pretty stable. It can currently be considered stable, as I've implemented all the features I wanted to see in it, and I've fixed all the known bugs. For the forseeable future, I'm going to focus on fixing any bugs that might possibly remain, and simply maintaining the addon.
I say this because Spelling does all that it should, currently, and it covers every base. I don't want to do more with it than it already does as that would be feature-creep, just putting things in for the sake of putting them in, things that might not necessarily be useful.
So Spelling as you see it now will likely be Spelling as you'll always see it.
All I have to add now is; thanks for using my mod, and I hope you enjoy it and find it useful!