Mik's Scrolling Battle Text Readme
Version: 4.13
Author: Mik
Released: Oct 3, 2007
Official Site: http://mikord.wowinterface.com
See Credits
Table of Contents:
Current Version Changes

Return to TOC

- Added temporary fix for PlaySoundFile() bug in Patch 2.2.2.
- Updated for Patch 2.2.

Installation Instructions

Return to TOC
Unzip the contents into the AddOns directory of your WoW game directory.
This is typically C:\Program Files\World of Warcraft\Interface\AddOns.
If your are upgrading the mod from a previous version, make sure to delete the old version prior to installing the new version.
Description

Return to TOC
MSBT is designed to be an extremely lightweight, efficient, and highly configurable mod that makes it easier to see combat information by scrolling the information on the screen in separate, dynamically creatable scroll areas. It is a replacement for Blizzard's Floating Combat Text and Damage output.
Features:

- Lightweight and efficient design.
- Scroll incoming damage/heals, outgoing damage/heals, and notifications in separate configurable scroll areas on the playing field.
- Add triggers that will allow you to show notifications based on a variety of conditions, or custom search patterns. Triggers may also be assigned a sound file to play.
- Dynamically create new scroll areas and assign any event/trigger to them.
- Customize the position, size, animation style, enabled state, font style, font size, and font outline for each of the scroll areas.
- Customize each individual event's color, font style, font size, font outline, output message, enabled state, and scroll area.
- Set "Master Font" settings that will be inherited by all of the scroll areas and the events in them unless they are overridden at the scroll area or event level.
- Merge AoE data into one event with cumulative damage/healing done with number of normal and crits specified.
- Show overhealing amounts against yourself or party/raid members.
- Color damage amounts according to damage type.
- Show partial effects (resists, absorbs, vulnerabilities, etc) colored according to type.
- Suppress particular messages you do not want to see such as mana gains from Blessing/Judgement of Wisdom.
- Load on demand options.
- For mod developers:
  - Output your own scrolling messages with the MikSBT.DisplayMessage function instead of having to create your own frame and animation code. You can also use your own font by first registering it with MSBT via the MikSBT.RegisterFont function.
  - Create custom animation styles.
  - See the included API.html file for reference information.

Supported Events:

- Incoming:

- Melee Damage
- Melee Misses, Dodges, Parries, Blocks, Absorbs, and Immunes
- Ability/Spell Damage
- Ability/Spell Damage Over Time (DoTs)
- Ability/Spell Misses, Dodges, Parries, Blocks, Absorbs, Immunes, Reflects, and Interrupts
- Spell Resists
- Heals
- Heals Over Time (HoTs)
- Environmental Damage

- Outgoing:

- Melee Damage
- Melee Misses, Dodges, Parries, Blocks, Absorbs, and Evades
- Ability/Spell Damage
- Ability/Spell Damage Over Time (DoTs)
- Ability/Spell Misses, Dodges, Parries, Blocks, Absorbs, Immunes, Reflects, and Evades
- Spell Resists
- Heals
- Heals Over Time (HoTs)
- Pet Melee Damage
- Pet Melee Misses, Dodges, Parries, Blocks, Absorbs, Immunes, and Evades
- Pet Ability/Spell Damage
- Pet Ability/Spell Misses, Dodges, Parries, and Blocks, Absorbs, Immunes, Reflects, Interrupts, and Evades
- Pet Spell Resists

- Notification:

- Buffs / Buff Fades
- Debuffs / Debuff Fades
- Item Buffs / Item Buff Fades
- Enter/Leave Combat
- Power Gains and Losses
- Combo Point Gains
- Combo Points Full
- Honor Gains
- Reputation Gains and Losses
- Skill Gains
- Experience Gains
- Killing Blows (Player and NPC)
- Extra Attacks
- Soul Shard Creation

- Default Triggers:

- Backlash
- Blackout
- Clearcasting
- Counter Attack
- Execute / Hammer of Wrath
- Frostbite
- Impact
- Kill Command (Disabled by Default)
- Low Health
- Low Mana
- Low Pet Health
- Mongoose Bite
- Nightfall
- Rampage
- Revenge (Disabled by Default)
- Riposte
- Overpower

- Default Suppressions:

- Backlash buff gain and fade.
- Clearcasting buff gain and fade.
- Shadow Trance buff gain and fade.

Commands

Return to TOC

/msbt | Shows the options interface.
/msbt reset | Resets the current profile to the default settings.
/msbt disable | Disables the mod.
/msbt enable | Enables the mod.
/msbt version | Shows the current version.
/msbt stats | Reports stats about table recycling.
/msbt search pattern | Sets a pattern for searching event types. If the pattern is blank event searching mode will be disabled.
/msbt help | Shows the command usage.

Trigger System Documentation

Return to TOC
The trigger system allows you to specify notifications based on events that are not already covered by MSBT's native events. The trigger system has been optimized so that having extra triggers which are not enabled or which do not apply to the class you are currently playing add no overhead.
Due to this optimization, a lot of triggers that people will want (Clearcast, Nightfall, Mongoose Bite, etc) are probably already there by default, and will not waste resources for those which don't apply to your class or are not enabled.
The following is a description of the fields unique to the Trigger Settings interface (see the Frequently Asked Questions section for a tutorial on how to create a new trigger):

Output Message | This is the message that will be displayed when the trigger fires. As detailed below, some of the main conditions return captured information that can be accessed with %1 through %9.
Trigger Classes: | This allows you to set the classes that you want the trigger to apply to. NOTE: THIS IS YOUR CLASS NOT THE TARGET CLASS. You may look at the Execute trigger for an example. Since Warrior is selected, the trigger will only apply when you are playing on a warrior.
Main Conditions: | This allows you define which main conditions the trigger will check. When ANY (or relationship) of these main conditions apply, all secondary conditions for the trigger will be checked, and if they are satisfied the trigger will fire. Self Health % - Satisfied when your health falls below the selected percentage. %1 will contain the amount of health. Self Mana % - Satisfied when your mana falls below the selected percentage. %1 will contain the amount of mana. Pet Health % - Satisfied when your pet's health falls below the selected percentage. %1 will contain the amount of health. Enemy Target Health % - Satisfied when your target is an enemy and their health falls below the selected percentage. %1 will contain the amount of health. Friendly Target Health % - Satisfied when your target is friendly and their health falls below the selected percentage. %1 will contain the amount of health. Incoming Crit - Satisfied when you are critically hit. Incoming Block - Satisfied when you block an attack. Incoming Dodge - Satisfied when you dodge an attack. Incoming Parry - Satisfied when you parry an attack. Outgoing Crit - Satisfied when you perform a critical attack. Outgoing Block - Satisfied when one of your attacks is blocked. Outgoing Dodge - Satisfied when one of your attacks is dodged. Outgoing Parry - Satisfied when one of your attacks is parried. Self Buff Gain - Satisfied when you gain the specified buff. Self Debuff Gain - Satisfied when you gain the specified debuff. Target Buff Gain - Satisfied when your current target gains the specified buff. Target Debuff Gain - Satisfied when your current target gains the specified debuff (only the first application). Target Debuff Application - Satisfied when your current target gains an application of the specified debuff. %1 will contain the number of applications. Search Pattern - Satisfied when the search pattern you enter is found. If the search pattern contains captures, the captured data will be contained in %1 through %9. A search pattern can also be a global string variable. Messages that go to the combat log have an associated global string that is defined in GlobalStrings.lua by Blizzard. Global strings are really only useful in this sense if you are looking for a general event like dodges, parries, misses, etc. Looking specifically for something like a buff name, for example, wouldn't have an available global string and you'd need to enter a lua search pattern as demonstrated in the FAQ entry. NOTE: The "Target Buff/Debuff" conditions are not always 100% accurate in PvE where there are multiple mobs with the exact same name since the combat log only reports the affected targets by name. It usually isn't a problem, however, be aware that it's possible to see a false positive.
Secondary Conditions: | This allows you define which secondary conditions the trigger will check. ALL (and relationship) of these secondary conditions must be satisfied before the trigger will fire. These conditions are only checked if one of the main conditions applies. Spell Ready - Satisfied when the specified spell name is known and does not have a cooldown. Buff Inactive - Satisfied when the specified buff is not currently active on you. Minimum Power Amount - Satisfied when you have more power (mana, rage, energy) than the specified amount. Warrior Stance - Satisfied when the specified warrior stance is active. This condition is ignored if the current class is not a warrior. 1 - Battle Stance 2 - Defensive Stance 3 - Berserker Stance Trigger Cooldown - Satisfied when the trigger has not been fired for the specified number of seconds.
Trigger Event Types: | This button will only be enabled if one of the main conditions is a Search Pattern. This exists solely for optimization and is probably the most difficult field to enter. While not having this field would make custom search patterns easier to use, it would also make them extremely inefficient since searching through an array of triggers which don't apply every time ANY event happens wastes precious resources. In order to find the appropriate event types to use, type /msbt search pattern, where the word pattern is a lua search string. Only combat messages that match the search string will display their associated event type. Once you are done you can type /msbt search to toggle event searching mode back off.

Suppression System Documentation

Return to TOC
The suppression system allows you to suppress specific text that MSBT is displaying to the screen via lua search patterns.
The text next to enable checkbox is the search pattern that will be checked for matches against the output text. If a match is made, the output text will be suppressed.
See the Frequently Asked Questions section for a tutorial on how to create a new suppression.
You can also view a list of Common Suppressions at MSBT's portal site at http://mikord.wowinterface.com. Scroll down to the "Content" section on the right hand side and click the "Common Suppressions" link.
Here is the official lua reference for patterns:

> Character Class:
> A character class is used to represent a set of characters. The following combinations are allowed in describing a character class:
> - x: (where x is not one of the magic characters ^$()%.[]*+-?) represents the character x itself.
> - .: (a dot) represents all characters.
> - %a: represents all letters.
> - %c: represents all control characters.
> - %d: represents all digits.
> - %l: represents all lowercase letters.
> - %p: represents all punctuation characters.
> - %s: represents all space characters.
> - %u: represents all uppercase letters.
> - %w: represents all alphanumeric characters.
> - %x: represents all hexadecimal digits.
> - %z: represents the character with representation 0.
> - %x: (where x is any non-alphanumeric character) represents the character x. This is the standard way to escape the magic characters. Any punctuation character (even the non magic) can be preceded by a '%' when used to represent itself in a pattern.
> - [set]: represents the class which is the union of all characters in set. A range of characters may be specified by separating the end characters of the range with a '-'. All classes %x described above may also be used as components in set. All other characters in set represent themselves. For example, [%w_] (or [_%w]) represents all alphanumeric characters plus the underscore, [0-7] represents the octal digits, and [0-7%l%-] represents the octal digits plus the lowercase letters plus the '-' character.
>   The interaction between ranges and classes is not defined. Therefore, patterns like [%a-z] or [a-%%] have no meaning.
> - [^set]: represents the complement of set, where set is interpreted as above.
> For all classes represented by single letters (%a, %c, etc.), the corresponding uppercase letter represents the complement of the class. For instance, %S represents all non-space characters.
> The definitions of letter, space, and other character groups depend on the current locale. In particular, the class [a-z] may not be equivalent to %l.
> Pattern Item:
> A pattern item may be:
> - a single character class, which matches any single character in the class;
> - a single character class followed by '*', which matches 0 or more repetitions of characters in the class. These repetition items will always match the longest possible sequence;
> - a single character class followed by '+', which matches 1 or more repetitions of characters in the class. These repetition items will always match the longest possible sequence;
> - a single character class followed by '-', which also matches 0 or more repetitions of characters in the class. Unlike '*', these repetition items will always match the shortest possible sequence;
> - a single character class followed by '?', which matches 0 or 1 occurrence of a character in the class;
> - %n, for n between 1 and 9; such item matches a substring equal to the n-th captured string (see below);
> - %bxy, where x and y are two distinct characters; such item matches strings that start with x, end with y, and where the x and y are balanced. This means that, if one reads the string from left to right, counting +1 for an x and -1 for a y, the ending y is the first y where the count reaches 0. For instance, the item %b() matches expressions with balanced parentheses.
> Pattern:
> A pattern is a sequence of pattern items. A '^' at the beginning of a pattern anchors the match at the beginning of the subject string. A '$' at the end of a pattern anchors the match at the end of the subject string. At other positions, '^' and '$' have no special meaning and represent themselves.
> Captures:
> A pattern may contain sub-patterns enclosed in parentheses; they describe captures. When a match succeeds, the substrings of the subject string that match captures are stored (captured) for future use. Captures are numbered according to their left parentheses. For instance, in the pattern "(a*(.)%w(%s*))", the part of the string matching "a*(.)%w(%s*)" is stored as the first capture (and therefore has number 1); the character matching "." is captured with number 2, and the part matching "%s*" has number 3.
> As a special case, the empty capture () captures the current string position (a number). For instance, if we apply the pattern "()aa()" on the string "flaaap", there will be two captures: 3 and 5.
> A pattern cannot contain embedded zeros. Use %z instead.

Frequently Asked Questions

Return to TOC

1. I don't like any of the fonts supplied with MSBT. How do I use my own fonts?
   WARNING: ALL FONT MODIFICATION WILL REQUIRE THAT YOU COMPLETELY QUIT THE GAME AND RESTART IT. RELOADING THE CONSOLE ALONE WILL NOT WORK.
   NOTE: Keep in mind that if you use your own font files that you need to make sure the font supports the characters that will be displayed. For example the typical way to display buff gains is [BuffName]. If the font you use does not have a character glyph for the [ or ] characters you will likely see a big ugly block (or nothing at all) instead of the intended characters. This is especially important with non-English clients since a lot of characters aren't supported by English fonts.
   There are a few ways to use custom fonts:
   - The first, and easiest, method is to simply replace one of the font files in the MikScrollingBattleText\Fonts directory with the truetype font (.ttf) that you want. The drawback to this approach is that the mod's option screen will still reference the font with the old font's name.
     For example, if you had a truetype font file "MyUberFont.ttf" you wanted to use. Rename MyUberFont.ttf to Adventure.ttf and replace the Adventure.ttf font file in the MikScrollingBattleText\Fonts directory. In the MSBT options interface it would still be called "Adventure," but it would actually be using the new font.
   - The second method is to open the file MSBTFonts.lua in the MikScrollingBattleText directory and find the FONT_FILES entry. You can add your font with the appropriate name and path. If you don't know anything about programming, I wouldn't suggest trying this method. Another thing to keep in mind with this approach is that due to the way WoW loads its data, I would suggest you put in new fonts you want to add in the same place as the current fonts for the mod (MikScrollingBattleText\Fonts) to avoid problems with loading.
   - The third method is aimed more at mod developers that want to display information using MSBT. You can call the MikSBT.RegisterFont function to register a custom font that you may then specify in your call to MikSBT.DisplayMessage. See the included API.html file for reference information.
2. How do I create a new trigger?
   Triggers basically fall into two categories:
   1. Those which already have preset condition types available.
   2. The more advanced case of custom search patterns.
   The more advanced case of custom search patterns will be illustrated here. Creating a trigger which falls in the first category is created in a similar fashion, however there is no need to create a lua search pattern or search the combat log for event types.
   Let's go through creating a trigger for notifying a mage when Arcane Intellect fades from somebody in their party.
   Since there is no preset condition type for this purpose, we need to take a look at what the combat log says when Arcane Intellect fades. The combat log message says "Arcane Intellect fades from player." To find out what event type this is you can type "/msbt search Intellect". What this will do is make it so that every time an entry is added to the combat log with the word Intellect in it, you will get a message with the event type in your normal chat frame. In this case you would probably see something like:
   MSBT: CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS - You gain Arcane Intellect.
   MSBT: CHAT_MSG_SPELL_AURA_GONE_SELF - Arcane Intellect fades from you.
   MSBT: CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS - Player gains Arance Intellect.
   MSBT: CHAT_MSG_SPELL_AURA_GONE_PARTY - Arcane Intellect fades from player. <--- Aha, there it is.
   So the correct event type to choose is CHAT_MSG_SPELL_AURA_GONE_PARTY. Type "/msbt search" to turn the event searching mode back off.
   Now that we know the correct event type we can create the trigger. Here are the steps to do so:
   1. Since a new trigger is being created, click the Add Trigger button. A new trigger will appear in the list of triggers.
   2. Click the edit output message icon button for the new trigger, enter AI Faded - %1!, and click Okay.
   3. Click the Trigger Settings icon button.
   4. Click the edit Trigger Classes icon button and uncheck "All" classes. Check Mage for the class the trigger will apply to. It is better to select the specific classes the trigger applies to instead of selecting all classes since by specifying classes, the mod can completely ignore the trigger and save resources for the classes to which it does not apply.
   5. Click the Add Condition button next to the Main Conditions label to add a new main condition.
   6. Select Search Pattern for the Condition Type.
   7. Enter "Arcane Intellect fades from (.+)" for the parameter.
      NOTE: See the Suppression System Documentation section for more information about creating a lua search pattern.
   8. Click the Save button on the condition edit frame to save the new condition.
   9. Last, click the Trigger Event Types button and choose the correct event type we ascertained above. CHAT_MSG_SPELL_AURA_GONE_PARTY.
   10. Click the Save button on the trigger settings frame.
   The trigger is now set to fire any time Arcane Intellect fades from a party member (only if you are playing on a mage).
   The color, font settings, sticky state, and output scroll area for the trigger can be set like any other event.
3. Some of the default triggers are not working for me while others are. What's up with that?
   Most likely, you are using a non-English client for which there are not appropriate translations. Simply edit the trigger settings for the trigger that is not working and ensure the parameters are using correctly translated values.
4. How do I add my own custom sounds?
   WARNING: NEW SOUND FILES WILL REQUIRE THAT YOU COMPLETELY QUIT THE GAME AND RESTART IT BEFORE THEY WILL BE PLAYED. RELOADING THE CONSOLE ALONE WILL NOT WORK.
   Simply place a .wav file or .mp3 file in the MikScrollingBattleText\Sounds folder before you start World of Warcraft. You may now click the sound settings icon for any trigger and enter the name of the file you placed in the folder.
5. How do I create a new suppression?
   As an example, let's create a suppression for warrior stance switching.
   Unless you have changed the output message format for buff gains and fades, the warrior stance switch messages should be:
   [Battle Stance]
   -[Battle Stance]
   [Defensive Stance]
   -[Defensive Stance]
   [Berserker Stance]
   -[Berserker Stance]
   What we want to do is create a search pattern that will match those output messages.
   Here is a search pattern that will match all of them:
   %[.+ Stance%]
   Now that we have a search pattern that will match all of the stance switching messages, we can do the following to add the suppression:
   1. Go to the Suppressions tab.
   2. Click the Add New Suppression button.
   3. Click the edit suppression icon button.
   4. Type the seach pattern from above and click Okay.
   All of the warrior stance switch messages should now be suppressed.
   You can find a list of common suppressions on MSBT's portal site at http://mikord.wowinterface.com. Scroll down to the "Content" section on the right hand side and click the "Common Suppressions" link.
6. Why doesn't MSBT use Ace2?
   First of all, Ace2 is a great set of rapid development libraries that are very well done. I run many Ace2 mods myself. This section is provided to explain the rationale behind not using it.
   Efficiency and low memory consumption were the #1 priorities in rewriting MSBT v4.0. During the rewrite, I spent some time creating the core of it both using and not using Ace2. I ran timing tests using direct timers in the code and LuaProfiler. They showed that MSBT ran faster when it is was not using Ace2 than it did while using it. It wasn't a huge difference, but faster nonetheless.
   Due to the results of these tests, I decided not to incorporate Ace2 since it would not provide any benefits to the end user. In the event the user doesn't already have any other Ace2 mods installed, it would actually end up increasing the memory usage for them quite a bit since Ace2 has a lot of options in it that MSBT doesn't need.
   Some of the primary reasons for using Ace2 mods is that they are usually efficient and easy on the memory along with providing a lot of options. MSBT fits within that description very well, so please don't base your decision on whether or not to use MSBT for the simple fact that it isn't built on Ace2.

Version History

Return to TOC

4.12 | Added the option to disable/enable Blizzard's new built-in healing display above the target's head. Updated for Patch 2.1.
4.11 | Fixed the issue where crits were being improperly displayed on some non-English clients. Modified the outgoing crit/block/dodge/parry trigger conditions to only apply to the player and not any pets. Added a "Trigger Cooldown" secondary condition.
4.1 | Rewrote the trigger system to allow for multiple conditions while maintaining efficiency. In addition several commonly requested triggers were added. Triggers may now have a custom sound assigned to them. Added parsing for some new TBC patterns that will fix a few issues where certain events were not showing up. Made several parsing optimizations. Created an event for incoming and outgoing Spell Interrupts. Added Shadowmend to the list of throttled HoTs.
4.03 | Recharacterized some damage based spells into DoTs so they will now follow the throttling mechanics. Added damage types to environmental damage so it will now have the damage type colors applied. Updated for Patch 2.0.3 / Burning Crusade.
4.02 | Fixed parsing order error with Foreign languages which resolves a lot of issues on foreign clients with substitution codes showing up instead of the actual data. The soul shard notification event should now work again. The mana gained form the warlock Dark Pact talent will now be displayed. Recharacterized healing from some damage based spells (most notably Vampiric Embrace) into HoTs so they will now follow the throttling mechanics. Basically this means those spells should no longer spam you with healing if you have HoT and DoT throttling enabled (it's on by default). Added parsing for damage taken from the tornado in the arenas. Added French localization. Added more German localization.
4.01 | Fixed the problem induced by the 2.0 patch where wand damage was not showing up.
4.0 | Complete code rewrite for even better performance and features. Major Optimizations: Rewrote the combat parsing engine to significantly increase performance and lower the memory footprint. Redesigned the suppression system to use a hash table searching algorithm so that any number of suppressions may be added without any appreciable slowdown. Optimized the default profile handling. Due to the large number of options, the default profile table takes up a decent chunk of memory (around 90 KiB). In the previous versions, the table was always memory resident - even when it wasn't needed. It is now created dynamically only when it's needed, which is the first time you load a new version of the mod or reset a profile to its defaults. Redesigned the underlying options tables such that shared information amongst the events is only stored once instead of separately for each event. This saves quite a bit of memory, especially when there are multiple profiles. Created a single pool of dynamically created font strings to be shared by the various scroll areas. Previously a set number of font strings were created for every scroll area. Load up memory usage is now around 450 KiB. Minor Optimizations: Trigger system will no longer listen for events that there are no triggers for. Previously it received the same events the mod was already parsing and ignored the ones with no triggers. Reduced the amount of information that needs to be passed around to lower memory usage during operation. Rewrote the animation code to work using scaled timing. Previously the animation was created by moving the text a set amount of pixels each update. This had the effect of causing the animation speed to vary greatly depending on system performance. The animations should now keep the same speed regardless of large performance hits, such as those incurred while recording a video or during extreme lag. Each character will now load the last selected profile for that character by default. Changed the default font to Porky, which has glyphs for most common German, French, and Spanish special characters. In addition, most of the fonts were replaced with new versions that support them as well. However, the old Adventure font is still available for those who want to use it. Added an option (enabled by default) to throttle DoTs and HoTs so that only one event for each ability will be displayed within the time period specified (2.5 seconds by default). Any additional DoT/HoT abilities that occur while being throttled are merged into one event to be shown once the throttle period has passed. This will reduce the spam when you have HoTs and/or DoTs on multiple targets. Made scroll areas dynamically creatable and made events/triggers assignable to them. Ability/Spell damage amounts now use a custom color according to their damage type by default. The rest of the message will still show up with the event's selected color. This behavior can be disabled. Partial effects (absorbs, resists, glancing, crushing, overheals, etc) can now be individually enabled, disabled, and color coded. Separated Debuff and Item Buff Fades from Buff Fades into new notification events. Totem buffs are now also handled as buff gains and fades. Added an Extra Attacks notification event which will give notifications for Windfury, Thrash, Sword Spec, etc. Added a Soul Shard Created notification event. Overhauled the interface to include the new features. Added a font registration function so other mod developers can choose to display their custom messages in their own font. Added an animation style registration function so other mod developers can easily provide custom animation styles for MSBT. Provided an additional file named API.html that is a reference for the publicly accessible functions that other mod developers can use to display messages through MSBT and register custom animation styles.
3.11 | Fixed the bug where in certain circumstances the trigger interface would give an error when trying to setup a new search pattern trigger. Made newly created triggers inherit all font settings instead of specifying a font size by default.
3.1 | Added support for power gains to yourself from other people. Increased the number of available event types for the trigger system to allow for greater flexibility. Due to the way the trigger system is designed this will not add much overhead since triggers are only parsed against the selected event types. Alphabetized the list of available trigger events to make finding the one you want easier. Removed the default Blessing/Judgement of Wisdom suppression. The user can choose to add one in for it if they prefer.
3.01 | Fixed the bug where you could only add one suppression and adding a new one was overwriting it.
3.0 | Implemented a low overhead trigger system. See documentation above. Implemented a suppression system that allows you to suppress particular messages you don't want to see. Made significant changes to the scroll area settings interface. The new interface shows all three scroll areas at the same time. Each scroll area is now titled with its coordinates and there are editboxes to enter specific coordinates in addition to being able to drag the scroll areas around. Changed the core animation routines to use function pointers in order to eliminate the need for a ton of conditional testing. Previously, every time the animation routine was called (typically 60-70 times per second for every scrolling item), the animation style and scroll direction were checked to calculate how to move the text. Now those items are only checked during the initial animation object setup phase. This should help performance on slower PCs. Added the command "/msbt search pattern" to enable an event searching mode which helps identify event types used in the trigger system. See documentation above for more info. Moved the Low Health, Low Mana, and Execute events into the trigger system. Due to this change the Low Mana and Execute triggers will no longer waste resources checking on classes that don't use mana or have an execute ability. Also moving them into the trigger system made the thresholds at which to show the Low Health, and Low Mana warnings selectable. Made a few minor code performance tweaks to the animation setup "pipeline." Added Killing Blow notification events for both players and NPCs. Added crushing and glancing hit partial effects. The font settings frame can now be moved. Fixed a bug where messages added via the MikSBT.DisplayMessage function were being shown even if the scroll area was set to not show messages.
2.11 | Disabled Blizzard's new floating text in Patch 1.12 when MSBT is enabled. Updated for Patch 1.12.
2.1 | Reduced memory usage a little by removing the underlying tables used to store crit information for events that can never be crits. (Down to around 477 KiB) To go along with the above change, the font settings interface for events was reworked so that you can no longer set crit information for events that don't support them. Added a title at the top of the font settings frame to help distinguish what is being modified. Added an Experience Gains notification event. Added the capability for notifications to be displayed "sticky" style. Fixed the bug induced by patch 1.11 where reputation gains and losses weren't being displayed.
2.0 | MAJOR optimization code rewrite: Made options load on demand to significantly reduce memory usage and start up time. Implemented a table recycling system to reuse tables created during combat instead of creating new ones and allowing them to be garbage collected. The net effect is that a ton of garbage collection churn has been eliminated. Thanks go to kergoth and Wobin for tips on how to achieve this. The combat event parser has been changed to reuse one single table for storing the results of the parsed data. Streamlined the combat event to screen animation "pipeline." Namespaced all code to reduce global namespace pollution. Load up KiB Usage in v1.03 was approximately 1050 KiB. This has been reduced to around 488 KiB. In addition, due to the table recycling system, memory usage during operation is much more consistent instead of continuously increasing until the next garbage collection cycle. Added a function to allow messages to be easily displayed through MSBT from external sources. This function is MikSBT.DisplayMessage and is detailed in the included API.html file. Added the command "/msbt stats" to report statistics about the table recycling system. Changed the functionality of AoE merges so that the name reported is "Multiple" instead of the last affected unit. Added the option to disable "game damage" instead of just always doing it. Added the option to disable "sticky crits." Added Execute/Hammer of Wrath notification event. Separated Heals over time (HoTs) and Damage over time (DoTs) into their own events. Added the option to display overhealing.v Fixed a bug where crits were not being recognized in non-English clients.
1.03 | Fixed a bug where options set with a checkbox were not being properly saved on logout.
1.02 | Fixed a bug where the global string parser wasn't appropriately accounting for the argument order of non-English clients.
1.01 | Updated for Patch 1.11.
1.0 | Initial version.

Credits

Return to TOC
Thanks to:

- Grayhoof, the author of SCT, for the original mod which inspired this mod.
- Kergoth and Wobin for their suggestions on optimizations via reduced GC churn and namespacing tips.
- Tekkub for compostLib which I borrowed some of the table recycling code from.
- Rophy for some great parsing optimizations.
- Farook for the German localizations.
- Calthas for the French localizations.