Mik's Scrolling Battle Text Readme
Version: 5.13
Author: Mik
Released: May 14, 2008
Official Site: http://mikord.wowinterface.com

See Credits
Table of Contents:
What's new?
Installation Instructions
Description
Commands
Trigger System Documentation
Search Pattern Reference
Frequently Asked Questions
Version History
Credits
What's New?

Return to TOC

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 you 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:
Supported Events:
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 help Shows the command usage.
Trigger System Documentation

Return to TOC

The trigger system is a powerful, flexible, and efficient system that allows you to specify custom events to be displayed based on specific game events that are not already handled by default. There are several mechanisms in place to ensure triggers are efficient as possible so they are not needlessly wasting CPU cycles checking conditions that aren't relevant. Due to this optimization, several common triggers are included by default.

The system is based around main events and exceptions. Each trigger can have one or more main events each with unique conditions. After ANY (or relationship) one of the main events occurs and its conditions are true, the trigger will then check the exceptions before firing. The trigger will NOT fire if ANY (or relationship) of the exceptions are true.

Triggers will try to choose an appropriate icon based on the main event that fired it.

The Frequently Asked Questions section has step-by-step instructions on the process of creating a trigger.

The following is a description of the fields unique to the trigger system interface:

Output Message: This is the message that will be displayed when the trigger fires. As detailed in the main events table, some of the main events return captured information that can be accessed with substitution codes of %1 or %2.

In addition, most main events allow %n to be substituted with the name of the source of the event and %r to be substituted with the name of the recipient of the event.
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 Events: This allows you to define which main events should begin the process of testing the trigger. When ANY (or relationship) of these main events apply and their conditions are true, the trigger will then make sure none of the exceptions are true before firing.

The main events table below details the purpose of each event along with its available conditions.
Trigger Exceptions: This allows you define exceptions to prevent the trigger from firing.

They are only checked if one of the main events and its conditions has already occurred.

The trigger exceptions table below details the purpose of each exception along with its available conditions.



Trigger Main Events:

Health Threshold: Fires when a health percentage falls below or rises above the chosen threshold depending on which direction is selected.

Conditions:
  • Affected Unit - The trigger will only fire if the threshold has been crossed for this unit.
  • Hostile Only - The affected unit must be hostile. NOTE: "You" can never be hostile, so don't check it in conjunction with yourself!
  • Direction - Specifies whether the trigger should fire when the health percentage falls below or rises above the threshold.
  • Threshold - The percentage that must be crossed for the trigger to fire.
Available Substitution Codes:
  • %1 - The actual amount of health.
  • %r - The name of the unit whose health changed.
Mana Threshold: Fires when a mana percentage falls below or rises above the chosen threshold depending on which direction is selected.

The conditions and available substitution codes are identical to a health threshold. See above for further details.
Energy Threshold: Fires when an energy percentage falls below or rises above the chosen threshold depending on which direction is selected.

The conditions and available substitution codes are identical to a health threshold. See above for further details.
Rage Threshold: Fires when a rage percentage falls below or rises above the chosen threshold depending on which direction is selected.

The conditions and available substitution codes are identical to a health threshold. See above for further details.
Crit: Fires when an incoming or outgoing critical hit is landed.

Conditions:
  • Direction - Specifies whether the trigger should fire on an incoming (to you) or outgoing (from you) critical hit.
Available Substitution Codes:
  • %1 - The name of the skill the caused the crit. NOTE: This will be blank when the crit was from a skill such as a regular swing.
  • %n - The name of the unit who did the crit.
  • %r - The name of the unit who was crit.
Block: Fires when an incoming or outgoing attack is blocked.

The conditions and available substitution codes are identical to a Crit. See above for further details.
Dodge: Fires when an incoming or outgoing attack is dodged.

The conditions and available substitution codes are identical to a Crit. See above for further details.
Parry: Fires when an incoming or outgoing attack is parried.

The conditions and available substitution codes are identical to a Crit. See above for further details.
Buff Application: Fires when a buff is applied to a unit.

Conditions:
  • Affected Unit - The trigger will only fire if the buff was applied to this unit.
  • Hostile Only - The affected unit must be hostile. NOTE: "You" can never be hostile, so don't check it in conjunction with yourself!
  • Skill Name - The case-sensitive name of the buff that trigger will fire on.
  • Amount - The application number of the buff. This is typically 1 for most buffs.
Available Substitution Codes:
  • %1 - The name of the buff.
  • %2 - The number of applications of the buff.
  • %r - The name of the unit who received the buff.
Buff Fade: Fires when a buff fades from a unit.

Conditions:
  • Affected Unit - The trigger will only fire if the buff faded from this unit.
  • Hostile Only - The affected unit must be hostile. NOTE: "You" can never be hostile, so don't check it in conjunction with yourself!
  • Skill Name - The case-sensitive name of the buff that trigger will fire on.
Available Substitution Codes:
  • %1 - The name of the buff.
  • %r - The name of the unit who the buff faded from.
Debuff Application: Fires when a debuff is applied to a unit.

The conditions and available substitution codes are identical to a Buff Application. See above for further details.
Debuff Fade: Fires when a debuff fades from a unit.

The conditions and available substitution codes are identical to a Buff Fade. See above for further details.
Cast Start: Fires when a skill with a cast time has started.

Conditions:
  • Affected Unit - The trigger will only fire if this unit started the cast.
  • Hostile Only - The affected unit must be hostile. NOTE: "You" can never be hostile, so don't check it in conjunction with yourself!
  • Skill Name - The case-sensitive name of the skill for which the cast is starting.
Available Substitution Codes:
  • %1 - The name of the skill for which the cast is starting.
  • %n - The name of the unit that started the cast.
Killing Blow: Fires when you perform a killing blow.

There are no conditions for this event.

Available Substitution Codes:
  • %n - Your name since you are the source of the killing blow.
  • %r - The name of the unit that was killed.



Trigger Exceptions:

Buff Active: This exception will be true if the specified buff is currently active on you.

Conditions:
  • Skill name - The case-sensitive name of the buff to check.
  • Reverse Logic - Makes this exception check if a buff is currently INACTIVE on you.
Insufficient Power: This exception will be true if you currently have less rage or energy than the specified amount.

Conditions:
  • Amount - The amount of rage or energy to check.
  • Reverse Logic - Makes this exception true if you currently have MORE rage or energy than the specified amount.
Insufficient Combo Points: This exception will be true if you currently have less combo points than the specified amount.

Conditions:
  • Amount - The amount of combo points to check.
  • Reverse Logic - Makes this exception true if you currently have MORE combo points than the specified amount.
Not In Arena: This exception will be true if you currently not in the arena.

Conditions:
  • Amount - The amount of rage or energy to check.
  • Reverse Logic - Makes this exception true if you ARE currently in the arena.
Not In PvP Zone: This exception will be true if you currently not in a PvP Zone which includes all battlegrounds and the arena.

Conditions:
  • Amount - The amount of rage or energy to check.
  • Reverse Logic - Makes this exception true if you ARE currently in a PvP Zone.
Trigger Recently Fired: This exception will be true if the trigger has been fired within the last number of seconds specified.

Conditions:
  • Amount - The number of seconds to test.
Skill Unavailable: This exception will be true if the specified skill is not known or is on cooldown. It does not cover other facets such as necessary reagents, appropriate range, etc.

Conditions:
  • Skill Name - The case-sensitive name of the skill to check.
  • Reverse Logic - Makes this exception true if the specified skill IS known or on cooldown.
Trivial Target: This exception will be true if the current target is trivial. A trivial unit is a unit that a grey to you and does not yield experience.

Conditions:
  • Reverse Logic - Makes this exception true if the current target is NOT trivial.
Warrior Stance: This exception will be true if you are playing a warrior and the current stance is the specified stance.

Conditions:
  • Warrior Stance - The stance to check.
  • Reverse Logic - Makes this exception true if the current stance is NOT the selected stance.
Search Pattern Reference

Return to TOC

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: 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: 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.
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. Add your font with the appropriate name and path following the same pattern as the other entries. One thing to keep in mind with this approach is that due to the way WoW loads its data, I would suggest you put the 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?

    The first step is to read the Trigger System Documentation section above. Every event and exception is explained along with the conditions and available substitution codes.

    Once you've read that section, we can continue on to the process for creating triggers.

    We will be creating a trigger that notifies us when Polymorph breaks from a hostile unit when we are playing on a mage in the arena.

    1. Since a new trigger is being created, click the Add New Trigger button, enter "Poly Broke - %r!" for the output message, and click Okay.
    2. Click the trigger conditions icon button (the gear) next to the newly added trigger at the bottom of the list.
    3. 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.
    4. Click the Add Event button next to the Main Events label to add a new main event.
    5. Select Debuff Fade for the Main Event.
    6. Select Any for the Affected Unit.
    7. Check the Hostile Only checkbox because we don't want to see when poly fades from our teammates.
    8. Enter Polymorph for the Skill Name. It is case-sensitive, so make sure you use a capital P.
    9. Click the Save button to save the new main event and its conditions.
    10. Click the Add Exception button next to the Trigger Exceptions label to add a new exception.
    11. Select Not In Arena for the Exception. This makes it so the trigger will not fire when we aren't in the arena.
    12. Click the Save button to save the new exception.
    13. Click the Save button on the trigger frame to save the trigger's new conditions.


    The %r used in step a is a substitution code for the name of the unit that the debuff (polymorph in this case) faded from. You already knew that though because you read the Trigger System Documentation!

    The color, font settings, sticky state, sound, and output scroll area for the trigger can be set like any other event.


  3. 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.

    There are a few methods that can be used to add custom sounds.
    • The first, and easiest, method is to simply place a .wav file or .mp3 file in the MikScrollingBattleText\Sounds folder before you start World of Warcraft. You may now click the event settings icon for any event/trigger and then click the icon next to the sound dropdown. Enter the name of the file you placed in the folder.


    • The second method is to open the file MSBTSounds.lua in the MikScrollingBattleText directory and find the SOUND_FILES entry. Add your sound with the appropriate name and path following the same pattern as the other entries. One thing to keep in mind with this approach is that due to the way WoW loads its data, I would suggest you put the new sounds you want to add in the same place as the current sounds for the mod (MikScrollingBattleText\Sounds) to avoid problems with loading.


    • The third method is aimed more at mod developers. You can call the MikSBT.RegisterSound function to register a custom sound. See the included API.html file for reference information.


  4. Is it possible to prevent Mutilate from being merged?

    Yes. Add it to the merge exclusions list under the Spam Controls tab in the options interface.


  5. How do I suppress Vampiric Embrace?

    This can be accomplished a couple of different ways.

    • The preferred method is to add it to the skill suppressions list under the Spam Controls tab.


    • Another way is to use the heal threshold slider under the Spam Controls tab.
      The drawback to this approach is that all heals under the specified value will be suppressed and not specifically Vampiric Embrace, which may or may not be your desired behavior.


  6. I want to see skill names even when there is an icon. Is that possible?

    Yes. Uncheck "Exclusive Skill Names" under the Skill Icons tab.


  7. Does MSBT support fonts and sounds from Shared Media?

    Not directly, but you can download MSBTSharedMedia to add support for it.


  8. Is there a way to show the damage above the target's heads like the default damage text?

    The only way this is possible is using the built-in game damage. The "Game Damage" option on the General tab will reenable it, but keep in mind you will lose all customization capabilities for outgoing damage if you choose to use the game's built-in damage. WoW's API does not provide a method to get the position of 3D game objects such as players and mobs. This is intentional on their part and will likely never change.

    I do not recommend using the built-in game damage option. If you take the time to get used to having the damage in a consolidated area, you will likely find it superior in many ways. Aside from the obvious visual customization capabilities of using MSBT's damage display, there are many other benefits such as being able to see the damage and healing being done to targets that are not in your viewport, merging of AoE with cumulative amounts, throttling of DoT spam, damage thresholds, per skill suppressions for things you don't care about, icons annotating which skill caused the damage or healing, and more.


  9. Is MSBT efficient?

    Absolutely. MSBT 5.0 was completely re-designed from the ground up using Blizzard's new mod statistics API tools with the #1 priority of optimization for reduced memory usage and CPU efficiency. As a result, it is both lightweight (low memory usage) and efficient (low CPU usage), which, sadly, is frequently ignored in performance discussions. Performance entails both memory usage and CPU usage. Unless you don't have enough RAM available, CPU usage is almost always more of a factor on your FPS than raw memory usage is.

    Please don't just take my word for it though. Test it out for yourself. Blizzard has made it simple to see statistics about mod usage with the GetAddOnMemoryUsage and GetAddOnCPUUsage API calls. Testing a mod will give you a true picture of its performance.

    One thing to keep in mind during your testing is that MSBT is written to be completely dynamic. It will only create exactly what objects it needs when it needs them and then reuse them from that point forward. This means during the first few combat cycles you will see a slightly higher increasing rate than you might expect as the first set of objects is created. The rate will quickly stabilize to typically less than 1 KiB/s as the objects begin to be reused. The main benefits to this approach are less overall memory usage and very little memory churn.

    Also, don't forget to look at CPU utilization. As I said above, it is frequently ignored, but it is also important. Would you rather have your CPU spending extra time on the game engine, or wasting cycles on an inefficient mod?
Version History

Return to TOC

5.12
  • Fixed the error when looting money induced in patch 2.4.2.
  • Fixed the erroneous "Low Mana" warnings when in druid forms.
5.11
  • Redesigned the trigger system to work with the new combat log mechanics and improve flexibility:
    • The old main conditions have been replaced with main events that can have several conditions for greater control over things such as affected units (target, focus, etc), applications, etc.
    • The old secondary conditions has been replaced with exceptions. Exceptions will cause the trigger not to fire when they are true. In addition, most exceptions has a "reverse logic" option that causes them to behave as their opposite for high flexibility.
    • Triggers now try to choose an appropriate icon based on the main event that fired it. It is still possible to specify an icon that will override the default.
    • All of the default triggers will now work on non-English clients without the need for localization.
    • Any additional triggers you may have created in previous versions will have to be recreated under the new system.
    • Added a default trigger for Viper Sting.
    • Added the default clearcasting trigger to druids.

  • Skills like "Mangle (Bear)()" will now be displayed as "Mangle" in the cooldown area.
  • Animations may now be as slow as 20% of normal instead of the previous 50%.
  • Scroll areas can now have a minimum height of 50 down from 100.
  • Increased the allowed font size range to 4-38.
  • Threshold triggers will no longer misfire when shapeshifting.
  • Soul Shard gains will now be displayed again.
  • The %t event type will no longer throw an error.
  • Added a button to the AddOns tab of Blizzard's Interface Options to launch MSBT's options.
5.1
  • The optional icons module is no longer required. This is a significant memory savings for those previously using the module.
  • Unfortunately, the ability to add and customize triggers is disabled for this release while the system is rewritten.
  • Rewrote the parser to work with the new combat log mechanics implemented in Patch 2.4. Since manually parsing text strings is no longer required, things like pets with the same name as party/raid members will no longer cause confusion. There also should no longer be problems with non-English clients that had strange parsing issues due to ambiguous strings.
  • Load up memory usage is now around 221 KiB.
  • Damage from spell reflects will now be shown to the player who reflected it as if they did the damage.
  • The horizontal animation style now has an alternating direction option.
  • Added new events for outgoing (offensive) player and pet dispels.
  • Internal filtering for identical monster emotes has been added to reduce potential spam.
  • Only one five combo point notification will now be shown per combo point cycle.
  • Overhealing will now show on heals that have been excluded from merging.
  • Fixed an issue regarding cooldowns not being displayed for certain skills like Mangle (Bear).
  • Added Simplified Chinese localization. Thanks to elafor and hscui for their work.
  • Updated TOC for Patch 2.4.
5.03
  • Updated LibStub in MSBTIcons to resolve incompatibilities with a newer library version. This should clear up some issues with other mod compatibility.
  • Made icons for triggers obey the enable/disable skill icons option.
  • Updated for Patch 2.3.
5.02
  • Modified the sound system to allow custom registrations for easier sound selection.
  • Triggers may now specify a skill name to use for displaying an icon.
  • Added suitable icons to most of the default triggers.
  • Added parsing for mana gains from sources like Mana Spring totems now that they can be suppressed, if desired.
  • Mana gains during Innervate are now shown if the "Hyper Regen" option is set.
  • Damage from totems and other miscellaneous "pets" will now be displayed.
  • Changed the minimum scroll area width to 10.
  • Fixed a problem that was causing all periodic enemy heals and power gains to be shown instead of only buff gains.
  • Fixed an issue where delayed cooldowns such as combustion were completing before they should.
5.01
  • DoTs and HoTs may now have independent throttle times.
  • Power gains can now be throttled and there is a default Vampiric Touch throttle entry.
  • Power gains now have icons when possible.
  • Added a "Move All" button to the Events tab to allow the whole category to be moved to a new scroll area quickly.
  • Added some logic to counteract ill behaved mods such as Recount and SW_Stats modifying global strings.
  • Fixed some issues with the options interface not saving certain fields properly.
  • Made search pattern triggers also check secondary conditions to match the behavior of the other condition types.
  • Updated the MSBTIcons module .toc file to prevent certain cases where it wasn't being loaded in the correct order (Thanks dylanm).
5.0
  • Complete code rewrite to further reduce memory usage and CPU utilization. Blizzard's addition of memory and CPU tracking tools to the API were used to help achieve this. The CPU utilization is about 55% less, and the load up memory usage is now around 258 KiB.
  • Redesigned the profile system to use a full master/diff approach. This leads to a substantial memory savings when using multiple profiles. It also adds the benefit of allowing future changes to defaults to take place without having to completely reset user profiles.
  • The options interface was streamlined and rewritten using pure lua. All the tabs and popup frames are now dynamically created only when needed. The options are still load on demand and use no resources when not loaded.
  • Created a new set of spam controls:
    • Show ALL power gains WARNING: This can and will spam you!
    • Show hyper regen (mana gains during Evocation and Spirit Tap)
    • Thresholds for Healing, Damage, and Power Gains
    • Skill name substitution
    • Skill suppression (e.g. Vampiric Embrace)
    • Skill abbreviation option with new %sl event code to override at the event level
    • Independent throttle times per skill
    • Merge exclusion list (e.g. avoid merging mutilate)
  • New font opacity setting that follows the same inheritance mechanics as the other font settings, so each individual scroll area and event can have a custom opacity.
  • Added some "high level" controls to the options interface such as a "Toggle All" button to quickly toggle the enable state of all events in the selected category. This allows you to disable all incoming pet events with one click for example. Another example is a "Disable Skill Names" checkbox which quickly allows you to stop all skill names from being displayed without having to modify every single event and remove the %s.
  • Added built-in customizable cooldown notifications.
  • Crits are now separate events so they can be individually controlled.
  • Each scroll area may now have its own independent animation speed.
  • Scroll areas now have a customizable width that the animation styles obey when it makes sense.
  • New horizontal and static animation styles.
  • Created a new default scroll area using the new static animation style.
  • Implemented behaviors in the animation system which allow more customization of animation styles.
  • Added a new selectable behavior (Normal) to the Pow sticky animation style that will not perform the jiggle effect.
  • Added enemy buff gain and monster emote events (spell alert).
  • New money gains notification event.
  • There is now a full set of incoming pet events.
  • Added outgoing pet DoTs.
  • Every event can now be assigned a custom sound. (e.g. full combo points)
  • Several trigger conditions such as Self Buff Gains can now have multiple entries per trigger.
  • Added a debuff application number secondary trigger condition.
  • Added a spell usable secondary trigger condition.
  • Added several new fonts.
  • Added an optional skill icons module.
  • Made some minor tweaks to the default display and throttle settings to improve readability.
  • Fixed a few parsing issues.
4.13
  • Added temporary fix for PlaySoundFile() bug in Patch 2.2.2.
  • Updated for Patch 2.2.
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.
  • 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: