tag 5.4.35
ddc848d602d52ef26f4274041904f38486cf5f47
Johnny C. Lam <jlam88@gmail.com>
2014-10-06 16:38:08 -0400

Tagging as 5.4.35 release.


--------------------

Johnny C. Lam:
	- Update to latest localization data.
	- Warrior: Display the single-target rotation even if AOE is toggled on.
	- Warlock: Move Dark Soul to the long CD icon.
	Dark Soul is stacked with other on-use cooldowns and has a 2 minute CD, so
	list it in the long cooldown icon.
	- Warlock: Move Soulburn to the short CD icon for Affliction warlocks.
	Show Soulburn concurrently with the ability that it is intended to be used
	with so that the player can see which Soulburn ability is intended to be
	used next.
	- Rogue: Use Tricks of the Trade on cooldown if toggled on.
	If Tricks of the Trade is not glyphed, then it is a raid DPS increase to
	apply it on cooldown to the highest DPS toon in the raid.
	- Have Git ignore more files that should never be version-controlled.
	- LDB support.
	Add a LDB data source that displays the name of the current script and
	allows for interacting with the LDB display to select a different script
	or to bring up the configuration panel.
	
	Stub out CallbackHandler in WoWAPI to allow regression tests to load
	LibDataBroker-1.1 properly.
	- Create "libs" directory to hold embedded libraries.
	- Be more lenient about whitespace when loading XML files in WoWAPI.
	- Change the Ovale license to the MIT license.
	Remove OvaleSwing, which was licensed under the terms of GPLv2, but whose
	code is not useful in current versions of WoW.
	
	Add a hack to compiler.pl to silence warnings about LICENSE.txt.
	- Shaman: Use the spell ID from the spell on the action bar for Ascendance.
	Ascendance has ID 114049 on the action bar, but the spell cooldown is
	tracked via the spec-specific variation of Ascendance.  Modify the shaman
	spell information for Ascendance so that the "ascendance_*" names all
	refer to the correct spell and force them to use the correct spell to
	track the cooldown.
	
	This also fixes showing the keybinding for Ascendance on the Ovale icon.
	
	This fixes ticket 417 by @baksas.
	- Druid: Disambiguate Incarnation for the various specializations.
	This should allow Ovale to show the proper keybinding for Incarnation on
	the icon.
	- Add LunaEclipse's balance druid script.
	- Druid: Remove the "ElitistJerks" balance rotation.
	It was difficult to maintain and the improvements to the SimulationCraft
	action list have closed the gap in DPS considerably.
	- Paladin: Suggest the proper Exorcism spell if it is glyphed.
	This fixes ticket 405 by @LunaEclipse.
	- Paladin: Retribution paladins can cast HoW during Avenging Wrath.
	This fixes ticket 419 by @v0ltag3 which noted that Hammer of Wrath was not
	being suggested while Avenging Wrath was active.
	- Use "input-file", not "input-files", for a single input file.
	- YAML files use spaces, not tabs.
	- Generate documentation for the script conditions.
	- Reverse the semantics of Enemies() to restore the old interpretation.
	By default, Enemies() will now count the total number of enemies, not just
	the ones that are tagged by the player.  To show only the number of tagged
	enemies, use Enemies(tagged=1).
	
	This makes Enemies() more useful now that we can restrict an icon to show
	the rotation for a specific number of enemies via the enemies=N con
	parameter.
	- Style fix -- move check for the AoE option after the spec option.
	- Priest: Fix the tooltip for predict/AoE icon when the AoE option is on.
	- Shaman: Show the correct Enhancement icons when the AoE option is toggled.
	- Druid: Fix Guardian shortcd icon when AoE option is toggled on.
	- Mage: Fix obvious documentation bugs.
	- Mage: Skip translating the SimC action "ice_floes".
	Ice Floes is very situational -- you want to use it before you move, but
	there's no way for Ovale to know when that is.  Don't suggest Ice Floes,
	and instead rely on the player to recognize when to use it on her own.
	- Warlock: Properly allow AoE icon to be toggled for Destruction warlocks.
	- Warlock: Shadowburn can only be used when the target is below 20% health.
	This fixes ticket 411.
	- Rogue: Only Rupture if at least half the ticks will hit for assassination.
	- Rogue: Always pool energy for Envenom as Assassination.
	It is always a DPS boost to pool energy for Envenom.  The SimulationCraft
	action list has simply not been optimized properly for assassination
	rogues.
	- Death Knight: Suggest AMS after other short CD spells.
	AMS is more situational than the other short CD DPS spells despite it
	being a source of runic power.
	- Add Drums of Rage as a burst haste raid buff.
	- Remove reference to global variable that is never created nor used.
	Ovale uses AceDB-3.0 to manage profiles, so it only ever needs to use
	SavedVariables to note the name of the AceDB-managed database.
	- Workaround for GetItemInfo() possibly returning nil.
	The proper fix is to wait for GET_ITEM_INFO_RECEIVED and correctly fixing
	all strings in the AST afterwards.  This is a workaround to fix just the
	checkbox items that use ItemName() on player login.
	- Only update the icon frame if needed from within the OnUpdate handler.
	- Separate event handler from the method to compile the script.
	This is solely for code clarity.
	- Treat "aura lag" and its description as localized strings.
	- Use "self" instead of the module name where appropriate.
	- Remove unneeded "order" properties.
	Simply use the order implied by the options as they are defined.
	- Simpilify processing of changes to the addon options.
	Use inherited getter/setter functions instead of using the same template
	across all options.
	
	Trigger an event when the options are changed so that the icon and menu
	options frames are re-drawn.  This de-couples the toggling of options from
	forcing a frame refresh in the same execution thread as the option being
	toggled.
	- TimeOfLastCast() is a state method, not an OvaleFuture method.
	- Fix the way variables are handled using GetState/SetState in scripts.
	Internally, SetState() is a special type of action that is "cast"
	depending on whether the time span for the action includes "now" or if
	it's in the future.
	
	Define a new method "GetAction" for OvaleBestAction that takes a master
	node and emits a <timespan, priority, element> triplet for the computed
	best action.  GetAction() automatically deals with SetState() actions
	during the computation.
	
	This fixes the fire mage script getting stuck when using GetState() and
	SetState().
	- Remove outdated instructions to select a bane or curse from a dropdown.
	- Skip packaging files that are only useful for developers.
	- Workaround for ticket 404.
	Ovale is erroneously crediting the rogue with an extra combo point at
	times from Seal Fate.  Work around the problem by commenting out the Seal
	Fate information for Mutilate.
	
	Ticket and analysis by @Wiljo.
	- Update default scripts to be based on SimulationCraft 5.4.8 release 8.
	Functions are defined directly within the scripts that use them.  The
	various class-specific "common" files are no longer needed and are
	removed.
	
	=== Major layout changes ===
	
	* The small icons to the left and right have been removed.
	
	* The primary layout for most classes consists of three icons:
	
	    [shortcd] [main] [aoe] [cd]
	
	* The AoE icon can be toggled individually for each class and
	  specialization via a check box option.
	
	* Some classes with a rotation that consists of CDs and filler spells can
	  show a layout of four icons if the AoE rotation is toggled off:
	
	    [shortcd] [main] [predict] [cd]
	
	  The "predict" icon is the main rotation minus any filler spells and is
	  used to see ahead of time what non-filler spell is coming up in the
	  rotation.
	
	=== Druid ===
	
	* Elitist Jerks Balance rotation is no longer the default.
	* The "moving" icon is replaced with a "predict" icon.
	* Display an arrow texture if out of melee range of the target as feral
	  when in feral specialization.
	* Tiger's Fury has moved to the short CD icon.
	
	=== Hunter ===
	
	* Fervor, Focus Fire, and Dire Beast have moved to the short CD icon.
	* Trap Launcher option added to toggle suggesting launching traps.
	
	=== Mage ===
	
	* Presence of Mind has moved to the short CD icon.
	
	=== Monk ===
	
	* Chi Brew and Energizing Brew have moved to the short CD icon.
	
	=== Paladin ===
	
	* Divine Protection has moved to the short CD icon.
	
	=== Priest ===
	
	* Halo, Divine Star and Cascade have moved to the short CD icon.
	
	=== Rogue ===
	
	* Display an arrow texture if out of melee range of the target.
	* Add option to pool energy for Envenom for assassination rogues, and make
	  it the default.
	* Improve pooling for Shadow Dance and Vanish for subtlety rogues.
	
	=== Warrior ===
	
	* Storm Bolt has moved to the short CD icon.
	* Off-GCD rage actions such as Heroic Strike and Berserker Rage have moved
	  to an "offgcd" icon so that they don't clutter the main action icon.
	  The layout for warriors is now:
	
	    [shortcd] [main] [aoe] [offgcd] [cd]
	
	  where the AoE icon can be toggled.
	- Improve the debug message when there is an unknown spell in the script.
	- Move compiler.pl to the utils directory.
	- Remove deleted subdirectories from the compiler.pl checks.
	- Version-control the localization data.
	Create a new top-level Localization.lua file that holds the table of
	localized strings used within Ovale.
	
	The new "localization.lua" script will fetch the localized strings for
	known locales from the Ovale CurseForge site and directly append the data
	to the top-level Localization.lua file.
	
	Remove the various separated locale data files since they are now replaced
	by Localization.lua.  Having the locale data in a single file loaded by
	the WoW client makes it easier to update the addon when new locales are
	added.  This change also removes a dependency on AceLocale-3.0.
	
	This also makes it simpler to create a "no-lib" version of this addon
	since all of the localized strings are already in a checkout of the
	repository.
	
	This also brings the localized strings under version control so that older
	version can be restored if necessary.
	- Modify internal paths so generate.lua can be run from utils directory.
	- Move all utility scripts into a "utils" subdirectory.
	- Generate new reference scripts based on SimulationCraft 5.4.8 release 8.
	The profiles used as the source of the translations are the Tier 16H
	profiles from the release-548-8 tag of SimulationCraft.
	
	These reference scripts are generated with the new OvaleSimulationCraft
	module and have several changes in structure from the old scripts.
	
	* Many functions needed by the scripts are directly embedded in the script
	  instead of needing to be included via one of the "common" scripts.
	
	* The way that "wait" and "pool_resource" statements are translated into
	  Ovale script concepts also more accurate than before.
	- Merge ovale_items and ovale_racials into ovale_common.
	Also add some raid debuffs (Weakened Armor and Weakened Blows) and their
	spell descriptions to ovale_common.
	- Warlock: Add "summon" and "grimoire" pet summoning spells.
	- Add Stormlash Totem and Skull Banner as short-term raid buffs.
	Stormlash Totem can be dropped by any shaman in the raid, and Skull Banner
	can be dropped by any warrior in the raid.  Adding them as short-term raid
	buffs in OvaleData will allow OvaleSimulationCraft to correctly emit "any=1"
	when checking for the buff in a script condition, e.g.:
	
	    if BuffExpires(skull_banner_buff any=1) Spell(skull_banner)
	- Shaman: Calculate Flame Shock damage for enhancement shamans.
	- Shaman: Add Primal Strike, used as a range check for Magma Totem.
	- Warrior: Note that Execute consumes Death Sentence.
	- Priest: Add Glyph of Shadow Word: Death spell information.
	- Hunter: Add Glyph of Explosive Trap.
	- Treat Incarnation: King of the Jungle for druids as a stealth buff.
	Much like Shadow Dance for rogues, it allows spells that normally require
	stealth to be used without being stealthed.
	- Modify AST test script to more easily test each class's default script.
	- Quiet compiler warnings for some external library calls.
	- Complete rewrite of OvaleSimulationCraft module.
	Use modern compiler design to create a parser and code generator to
	convert SimulationCraft profiles into Ovale scripts.
	
	Generate a "SimulationCraft" AST from the SimC profile and emit an Ovale
	script AST, then use OvaleAST to unparse in order to emit an Ovale script.
	
	The use of ASTs allows for a more sophisticated translation of SimC action
	lists into Ovale scripts, including proper time-span based translations of
	"pool_resource" and "wait" actions.
	
	Rune support is rudimentary, as it only supports rune expressions of the
	form <rune><comparator><number>.
	
	Also add a script to test OvaleSimulationCraft functionality.
	- Hunter: Add Trap Launcher spell information.
	- Add Talent(id) script condition to return whether the talent is active.
	This is a shorter boolean version of TalentPoints(id) for brevity and
	better readability in scripts.
	- Add BuffDurationIfApplied() script condition.
	BuffDurationIfApplied(id) returns the duration of the aura if it is
	applied at the current time.
	- Add SpellCooldownDuration() condition to return cooldown duration.
	SpellCooldownDuration(id) will return the duration of the cooldown for the
	given spell.
	- Add TimeSincePreviousSpell(id) script condition.
	TimeSincePreviousSpell(id) returns the number of seconds since the
	previous cast of the given spell.
	
	Teach OvaleFuture to track the most recent ending cast times of successful
	spellcasts, which is needed to implement TimeSincePreviousSpell().
	- Allow a new icon parameter "enemies=N" to pretend N enemies are present.
	Add state to OvaleEnemies that may be manipulated to set the number of
	enemies we pretend are present.  The property "enemies" may be changed
	after the state machine is initialized.
	
	When processing each icon node of the script, see if "enemies=N" is given
	as a parameter and use that value to set the "enemies" property of the
	state machine.
	
	Modify the Enemies() script condition to always return the "enemies"
	property of the state machine if it is set, or else fall back to the true
	values of active or tagged enemies.
	
	This allows for a single script function to be used for both a
	single-target rotation icon and an AoE rotation icon via:
	
	    AddIcon enemies=1 { DoRotation() }
	    AddIcon enemies=5 { DoRotation() }
	
	where DoRotation() is a function that can conditionally suggest different
	actions based on the value of Enemies().
	- Make Enemies() return a minimum of 1 to avoid problems with yellow NPCs.
	- Improve ability to localize strings used in scripts.
	* Auto-lookup localizations for strings when strings are expected.
	* Allow for L("string") use in scripts to make localization explicit.
	
	Using L("string") in scripts is recommended as it allows for a utility
	to extract strings that require localization.
	- Add a "text=string" parameter to write text to overlay an icon texture.
	For example, the following displays an Alter Time icon with the word
	"cancel" written at the bottom:
	
	    Texture(alter_time_buff text="cancel")
	
	Fix bug in OvaleAST so that string values or string functions for
	parameters are properly parsed.
