SpeakinSpell
Funny and/or Useful, SpeakinSpell will use random speeches in chat to announce when you use spells and other abilities, as well as items, procced effects, other events, and user-defined macros. Works with all classes. Configurable for many different situations.
Possible Uses
- Entertain yourself, your guild, and your PuGs
- Roleplay
- Tell your raid that you got an important debuff
- Tell your arena team that you're CC'd
- Whisper your target about a short term buff
- Congratulate your guild members on achievements
- Randomize your battle cries
- More
Main Features
- Can detect over 5000 "Events" and automatically announce them in the chat using a random selection from a list of user-defined speeches, including:
- Spells you cast
- All other abilities for any class (a warrior's Heroic Strike is also technically considered a "spell")
- Anything you can equip in your action bar
- Items
- Procced effects (buffs that you receive from yourself)
- Combat events (enter/exit combat, scored a crit, killing blow, etc)
- Talking to NPCs and other game objects like mailboxes
- Achievements
- Other events (Login, Changed Zone, etc)
- whenever you type "/ss macro something" (create your own event)
- Records more event hooks as it discovers more spells, buffs, and debuffs, etc the longer you use it.
- Each spells' random speeches can be directed to any chat channel you choose
- Supports different channel options (or silent) in different scenarios: solo, party, party leader, raid, raid leader, raid officer, BG, arena, and Wintergrasp.
- Also supports built-in emotes and most other slash commands (/cheer, /script, etc)
- Fully configurable through the interface options panel. (type "/ss" to get started)
- Includes some default example speeches for at least a few spells for all classes.
- These are only meant to serve as examples. In general, very few default speeches are available for most classes, so you may not see it do anything for you right away. You should look at the list of possible event hooks under "/ss create" and write your own speeches.
F.A.Q.
How do I make a backup copy of my SpeakinSpell data?
I recommend making a backup of your SpeakinSpell data frequently. All of your speeches for all characters are stored here: C:\Users\Public\Games\World of Warcraft\WTF\Account\<your name>\SavedVariables\SpeakinSpell.lua
How do I erase all the defaults and start from a clean slate?
Type "/ss eraseall" to erase all your data. This includes any defaults as well as any custom speeches you've written.
How do I find the spell or other event that I want to change in this huge list?
Cast the spell, or trigger the event, then type "/ss recent" then use the click-able links in your chat frame to [Edit Speeches] or [Setup New Event].
How do I stop it from announcing this spell or other event?
Cast the spell, or trigger the event, then type "/ss recent" then use the click-able links in your chat frame to [Edit Speeches] for that event... then click the button that says "Delete this event"
OMG this is so complicated!
Hey! That's not a question! It's a common complaint though, and I'm open to specific suggestions about what you find is too complicated, or confusing, or could be made easier, more intuitive, or more user-friendly. With great power comes great complexity. Everything is labeled with detailed tooltips, and there's a detailed user manual built-in (/ss help) and online to help you out. I also usually answer questions within 24 hours.
Aetharan has also written some nice guides here: http://tinyurl.com/a64sst4
Usage Instructions
How to setup SpeakinSpell in a few easy steps:
- Login and play your toon for a few minutes.
- Activate any abilities, trigger any procced effects, and encounter any other detectable events that you would like SpeakinSpell to announce.
- Type "/ss" to access the interface options panel
- Click on "Create New..." or type "/ss create" to create settings for a new spell or other event
- Select the desired spell or event from the list and click the Create button. You will be taken to the settings page for that spell or event.
- Change the settings to your tastes and write as many speeches as you want. Now whenever you cast that spell or encounter that event, SpeakinSpell will say one of your random messages for that event, using the channels and other rules that you defined.
- Repeat until you run out of ideas for new announcements to write.
Spammy Setup Guides Method
- Type "/ss guides" to enable Setup Guides (there's also a checkbox for it under "/ss options")
- Do stuff with your toon
- Observe that the spammy Setup Guides are reporting all 5k+ of every event that SpeakinSpell detects and could possibly announce
- Click on the clickable links in your chat frame to [Setup New Event] announcements (equivalent to using "/ss create") or [Edit Speeches] for event hooks you already configured (equivalent to using "/ss messages")
- Type "/ss guides" again to turn the Setup Guides back off
- At any time you wish you had the Setup Guides enabled to catch a special proc effect or something, type "/ss recent" to see Setup Guides for the last 5 events detected, and last 5 events announced.
Type "/ss help" for the in-game user's manual for complete, thorough instructions for how to make the most of every feature SpeakinSpell has to offer. It's designed for maximum flexibility.
Additional Features
- Supports over 50 substitutions in your speeches, such as <caster>, <target>, <zone>, <spellname>, <party2pettarget> and many more.
- <spelllink> will create a clickable link to the spell or achievement (for applicable events)
- All of these substitutions also support first person pronoun forms (to say "me" instead of my own name), gender forms, and possessive forms, to make your automated macros sound less like macros and more like natural speech
- Also includes random substitutions like <randomfaction> (like Mad Libs™) and you can create your own random substitution word lists.
- Up to 100 speeches can be entered per spell.
- Never says the same message for a given spell twice in a row (unless you only have 1 message defined for that spell)
- Can be configured to limit your chat spam in several ways
- based on a cooldown between automated speeches in chat
- based on a random chance to speak or not
- optionally limited to once per combat
- optionally limited to once per target name
- based on a global cooldown
- Can whisper messages to the target of your spell (This can be useful for resurrect style spells, innervate, power infusion, etc.)
- When you get compliments on your "macros" use "/ss ad" to tell your friends about SpeakinSpell. Some of the random ads are funny. Yes, it's an addon that spams random text in chat, and it has a feature to spam random text to advertise it's ability to spam random text. "/ss help" in game for more advanced options for using /ss ad.
- Detection of "other events" such as Login, entering combat, changed zone, and more. Type "/ss help" in game for the complete list.
- Custom Defined User Macros. Type "/ss macro something" to make SpeakinSpell detect a pseudo spell event called "When I type: /ss macro something" which you can setup to be announced with random speeches like a spell. This can be used for randomized battlecries (/ss macro battlecry), greetings (/ss macro hi), farewells (/ss macro bye), or anything you want to define (/ss macro _blank_).
- Share your speeches with your friends through the Data Sharing system
- type "/ss import" to browse the shared content you collected from others and add it to your settings (works for copying from your alts too)
- type "/ss network" for options
- type "/ss help" for help.
- Easter Egg ... there's a mildly amusing little story hidden away somewhere in an obvious place where you will never look for it ... yes, I do actually have a lot of time on my hands ...
More Information
SpeakinSpell has many more features than those listed above.
Click here for the Complete User's Manual, or type "/ss help" in-game for the same info. NOTE: If "/ss help" doesn't work, you may have an installation error, or you may have too many addons installed. Try right-clicking the minimap button, or hitting: Escape > Interface > Addons > SpeakinSpell.
Please submit a ticket for any problems, bug reports, or feature requests, or feel free to post in the comments below (but tickets are easier for me to remember to fix).
Submissions Welcome. To submit content including the witty random speeches you wrote, please read this. If you are a translator with better translations, please use this localization tool.
More Technical Information: If you're a programmer interested in understanding more about how SpeakinSpell works, read the SDD.doc in the SpeakinSpell addon folder. It's a software design document in the (compatible) MS Word 97 file format with details about the system architecture.
Aetharan's Tutorials for advanced tips and tricks: http://tinyurl.com/4ptc2xg
Petit tutoriel en Français http://abz.progp.net/wow/Tutoriel_SpeakinSpell.pdf
en Français a Youtube http://www.youtube.com/watch?v=f62eE6rzAFA
The official SpeakinSpell Forum http://www.rismisner.com/forum/viewforum.php?f=3 - Unfortunately, the SpeakinSpell forum is currently disabled because it received an excessive amount of spam advertisements (about 80 per day and only about 1 real post per month for 2 months). I will need help or time to learn how to adequately block advertisers before re-opening it.
Credits
SpeakinSpell was created by...
- Stonarius of Antonidas
Additional coding by...
- Duerma
Primary Beta Testing, Arena Team Pwnage, Key Grip...
- Meneldill
Translators...
- German: leXin (inactive)
- Korean: troth75 (inactive)
- French: contrebasse, An_Braz
Many of the default speeches were blatantly stolen from...
- Cryolysis2
- Necrosis
- LunarSphere
- Ultimate Warcraft Battlecry Generator
- RPHelper2
Thanks for the open license guys! I hope you like what I did with it.
Additional Content Packs Written by...
- Stonarius
- Meneldill
- leXin
- troth75
- Folji
- Dire Lemming
- Duerma
Special thanks to the authors of these addons that I used for copy-paste... *Ahem* I mean example code...
- Titan
- Omen
- Recount
- Healbot
- Mountiful
- WinterTime
- the WowAce libs
- RPHelper2
Additional thanks to...
- Blizzard Entertainment for this great game! ... hire me??
- The community on the wowace forums
- curse.com
- Microsoft Visual Studio, SubVersioN, and TortoiseSVN
- Texas Instruments for enabling E.T. to phone home
- The Order of the Stick
- Mom and Dad
- YOU!!
SpeakinSpell is made from 83% Recycled Materials.
No animals were harmed in the making of this addon.
... Well, the hunter popped a sheep with his aoe, but I resheeped with my /cast [target=focus] macro, and automatically said "Baaah! sheeped again <target>?!" and it was all good...
Looking over the past several patch functions that update the format of your saved data, I don't see anything very risky until the most recent update to 4.0.1.01 (beta) combined all ranks of spells into a single rank.
2. It shouldn't do that - it shouldn't be possible. This may be something that broke in WoW 4.0.1 that I didn't know about yet because I haven't been playing lately. You can look for the achievement announcement hooks under "/ss messages". There's a category for achievements that you can select from the list, or type in part of "achieve" to search. You should see that it only supports announcing achievements earned by someone nearby or someone in your guild, but it's not supposed to grats yourself.
In that older addon, the list of speeches was handled in a very different way. We users handled each speech as a unique event, which rather than being a simple macro field, also had its own page of conditions that were entirely optional to use. Thus, we could choose to check something that effectively read "Include this speech only if the following are true:" and check boxes for "Target Name = (Text Field)" or "Target race = (Another field)".
The implementation allowed for all the conditions that we had chosen to be checked before BattleCry put together the list of applicable speeches from which to select. It wasn't simple, and it was only powerful in the hands of those who wanted to put several hours into setup.
Bearing that in mind, you're right: "/ss macro <substitution>" being processed before expanding would be the simpler, and smarter, method. It provides most of the same power potential, without adding layers of complexity that 99% of your users will never require. Implementation in this direction means that increasing the power of the substitution engine also increases the power of our conditionals.
If you do implement the change, can we also get the ability to use <target*he*she> as <target*he*she*it>, replacing unknown genders with a neutral pronoun rather than the target's name? It would provide a tighter control on the user end of where substitution calls go.
However, I'm not sure what <targetrace> will do for targeted mobs, since it's intended for use on targeted players. Also, "/ss macro <spellname> <target*male*female|self>" only has 3 possible results, but "/ss macro <spellname> <zone>" has very many more possible results because there are so many zones, which would be a lot of work to set it up for every zone, or might get annoying to ignore all of the prompts in your chat to [Click Here] to setup speeches for all of the zones where you don't want to announce it.
I personally work around issues like this in another way, by thinking about my idea more to write a general-purpose speech. For example, I wrote a summoning stone speech that says "Today on Wheel of <subzone> our next contestant is a <targetclass> hailing from ... wherever <targetrace>s are usually from... please welcome... <target>!" The part that says "wherever <targetrace>s are usually from" is a way of avoiding the desire to find a way to write in the various starting zones for each race, which there's no easy way to do.
I could have written "/ss macro <spellname> <targetrace>" and then defined very similar speeches for each of the 5 racial starting zones (or cities) for my faction (2 of which would be the same), but I think that using the general-purpose phrase "wherever <targetrace>s are usually from" is actually funnier.
if [race] = "Undead" {send through text box("message")}
I know that SpeakinSpell outputs through the text box as if you'd typed the speech into the chat window yourself, and handles any substitutions yourself, so the same method should be applicable nested within a speech.
A side-effect of this method would be that if you have any cooldowns set on the speeches for your spell, having this speech in there may fire the cooldown without saying anything at all, because your target is the wrong species.
Since that work-around is less than perfect, I will add this request for a future version of SS: Allow a speech to be excluded from the selection method if chosen conditions aren't met.
My thought process skipped past what I intended to type, so my fingers just kind of repeated themselves.
>> A side-effect of this method would be that if you have any cooldowns set on the speeches for your spell, having this speech in there may fire the cooldown without saying anything at all, because your target is the wrong species.
Let's say you want to announce the speech "Light burn you!" when you cast Fireball, but only if you cast that Fireball at an undead target.
What you should do for this problem with the cooldown is to first write a speech for "when I cast: Fireball" that says "/ss macro <spellname> <targetrace>" and enable the option to "expand macros inline"
You would then create the custom speech event "/ss macro Fireball Undead" to say "Light burn you!" as the only speech in its list. The other options attached to "when I type: /ss macro Fireball Undead" such as the chat channels, cooldown, and random chance, will not matter, because you enabled the option to "expand macros inline"
What "expand macros inline" does is to extract the speeches (and only the speeches) from "/ss macro <spellname> <targetrace>" and include them in the list of speeches for Fireball, temporarily, for the purposes of selecting which speech to say, by using a single RNG (which has a chance to select "Light Burn You!") instead of multiple nested RNGs (which first has a chance to select "/ss macro Fireball Undead" and then a second random chance to select "Light Burn You!").
When "/ss macro <spellname> <targetrace>" evaluates to "/ss macro Fireball Undead" it has a speech there, but if it evaluates to "/ss macro Fireball Human" and you have no speeches for that, then it has nothing to pull into the speech list when it expands macros inline. It won't directly say "/ss macro Fireball Human" which results in nothing said, because it has expanded that empty list BEFORE selecting the speech.
Thus the cooldown problem you identified would be avoided.
The problem is... I don't think it currently processes substitutions on the "/ss macro <spellname> <targetrace>" BEFORE it does "expand macros inline" so what I just suggested won't actually work in 4.0.1.01... but it would be a very easy thing for me to fix in my code, rather than tackling the much more challenging task of this idea:
>> Allow a speech to be excluded from the selection method if chosen conditions aren't met.
... How? I mean, what should the user interface be?
Should every Random Speech N text box in your list include another 5-10 checkboxes or drop-down lists around it to select these conditions? Just for 1% of users who want it, while the other 99% are confused by it? Thus demanding yet more features to show/hide these condition options? Which of course would be hidden by default so as not to overwhelm newbies, and then how many people would find out they exist, even among interested parties? (I know of 3 people who want this feature, out of 2 thousand who downloaded 3.3.5.10...)
Or should it be another unintuitive command-line style feature where perhaps you preface the speech with conditions listed in brackets somehow like
"[<targetrace>==Undead] This speech is only used if I'm targeting undead"
"Normal speeches don't list any conditions and work all the time"
That's no better than "/ss macro <spellname> <targetrace>" with "expand macros inline" described above...
Or should that condition text [<targetrace>==Undead] be a text box (1 GUI control, instead of 5-10 checkboxes or drop-down lists) ... and either way, how would you know what the syntax is?
Implementing the logic is not a problem, but how can it be done in a way that is user-friendly? I don't see a way that such a complexity of being able to limit a single speech to announce only when the target is a certain race, only when you're in a certain zone, only during a certain time of day, etc, can be made user-friendly in a GUI way without an extremely complex GUI design, that would be, by it's nature, the opposite of user-friendly, because it would be required to have so much in it. (not to mention the ability to combine conditions with AND/OR/NOT combinations...)
And then, more importantly IMO, your very witty speech about casting a given spell on a given race during a given time of day and whatever other conditions, actually fires off ... how often? Once a month? once out of 50 hours of game play? and is that actually satisfying? In my experience, no it isn't. When you write a speech, you want it to be spoken, and attaching too many conditions directly prevents that.
It's this question of DESIGN, much more than IMPLEMENTATION, that holds me back from adding this feature. I'm not saying "no, I'll never add that" I'm just saying it needs a clearer definition, and I want it to be an idea I can K.I.S.S. (Keep It Simple, Stupid)
"/ss macro <substitution> <substitution> <substitution>" is the KISS approach IMO, and what I'd prefer to stick with for now, until the right interface design presents itself for something better.
I'm tracking this feature request as Ticket 110, first requested back in March, related to time of day, but equal in principle to the rest of the applications of conditional speeches that we've been talking about here:
http://www.wowace.com/addons/speakinspell/tickets/110-conditions-for-ss-makro/
http://www.wowace.com/addons/speakinspell/tickets/136-process-substitutions-before-expand-macros-inline/
Nevertheless, even if it's not planed I say it again : great addon! And thank you very much for all your work :)
You should try playing around with pronoun forms for substitutions, and I think you'll find it mostly satisfies what you're trying to do.
It doesn't allow you to write COMPLETELY different speeches, but it does allow you to write SLIGHTLY different speeches, by substituting some custom text in place of your own name, usually a pronoun like "me" or "myself".
The simplest example is "I cast a spell on <target|myself>" but you can get creative with it and write anything you want after the pipe character "|".
Details here: http://www.wowace.com/addons/speakinspell/pages/complete-user-manual/#w-6-third-person-me
I believe the syntax would be something like this:
"/ss macro SpellNameHere <target*male*female|self>"
IF the target of the spell has a gender, this will call "/ss macro SpellNameHere male", "/ss macro SpellNameHere female", or "/ss macro SpellNameHere self". Unfortunately, this leaves the wildcard of a genderless target, which would call "/ss macro SpellNameHere <target>".
If the user can find a way around that wildcard, things can get fun from here. You can have "/ss macro SpellNameHere neutral" set up, and called from within the others as a speech with the option checked to expand macros as lists only.
With that setup, if you wrote 10 speeches each for "/ss macro SpellNameHere male", "/ss macro SpellNameHere female", "/ss macro SpellNameHere self", and "/ss macro SpellNameHere neutral", then any time you cast that spell at a target with a known gender, there would be 20 possible speech outcomes.
All that being said... How would we get around the problem of targets that don't have a known gender, and thus throw the target's name into your macro call?
If it's a spell you can cast on yourself, then presumably the only other targets will be other players, who always have a gender, so the issue of unknown genders filling in the target's name simply shouldn't happen. (well, except for Holy Shock used offensively, but that's the only exception I can think of)
You could also simplify it with the same text for both male and female, something like "/ss macro <spellname> <target*not me*not me|me>" if you don't actually care about the gender.