CHANGELOG ========= This file contains a listing of modifications to dreamblade. Dates are included. All changes by comcast.net> unless noted. Newest changes are at the top. 06/11/19 - 2.0.6 * Fixed crash with effect_move_creature_between_zones_if_target_destroyed and registering the destroy_piece_hook. * Fixed crash with simultaneous triggered abilities causing a piece to leave play and a special attack not checking if targets that were present when triggered are still there when resolving. * Optimized action_disrupt. * action notify pointer now goes through undo engine, was causing subtle issues not putting through undo. * Added missing opponent_gains boolean to Possessed Poinsettia's XML def. * Fixed a debug issue w/ initializing warbands for the option to dump pieces to stdout and the warband builder. * Fixed some warnings w/ mingw build. * Removed some debug prints that were enabled in release mode. * Fixed a state/undo issue w/ effect_gain_static_abilities. * Fixed issue w/ activated_static_ability. It was enabling the aggregated static ability more than once through the sustained effect. * Fixed Klepto's XML def. It cannot use combat blade abilities. * Fixed issue w/ Toss and abilities that "steal" or "rip" blades. * Fixed issue w/ Vortex. Some cells had the wrong clockwise/counter clockwise cells. * Fixed bug with in_play_zone() function. Was including not in play zones. Should fix a lot of subtle gameplay issues and bump performance up a little. * Fixed an issue where the action group string was going past the end of buffer, corrupting the stack. * Add missing to xml def for Carrion Warcharm. * action_destroy replacement now handles listening for destruction for setting was_destroyed. * Improved replacement effect handling for action_destroy. If a replacement effect does not result in destruction, the player continues to resolve replacements until it is resolved or there are no more replacements to resolve. * Added a new state change type, state_change_vector_int. * Small non-gameplay related change to sort warbands based on display name to ensure better chance of reproducible games w/ same warbands and random seed. 07/21/18 - 2.0.5 * Added note to welcome dialog that Ctrl is mapped to Cmd on the Mac. * Fixed crash w/ updated wxWidgets when handling keypresses. * Fixed Carrion Warcharm's XML def. * Migrated code to wxWidgets 3.x for MacOS. * Ported code to work on 64 bit MacOS. * Fixed issue with double submissions of event registering for Detonate. * Fixed issue where piece marked for both disruption and destruction and getting a deathblow would get an additional deathblow (in their empty cell after being disrupted). * Added check for number of turns getting very high (>200) during AI -vs- AI at low minmax depth. This happens when both reserves are empty and the AI just moves pieces back and forth. * Fixed issue w/ Ferocity abilities used by Rage of One were not given an initial controller. * Added u-z to display characters in the event a warband has more than 20 minis. * Fixed mismatch of Ninja Instructors Halo Crit 2 to description which was Crit 3. * Added missing initialization of controller to copied abilities. * Put in check for Copy Enemies ability's owning piece to be in play. There were never enemies in zones other than in play. * Fixed spelling error w/ The Gallows activated ability long description. * Revamped how Blackmail is handled. Now correctly gives control of an ability for the duration of the activation. It was never properly handled before giving permanent control to the opponent. * multiple_actions_and_move_single_x now verifies that actions actually happen. * Updated Grand Hive to check for unique and also verify cell is able to be spawned into (i.e. blocked by Soul Harrow). * Updated move_multiple to track targets and resolve the ability with those targets. * Added always_on parameter to spawnable_cells_modify. This set to false keeps Yazrael, Dreadfiend's Soul Harrow ability from being in the spawn cell path when not in play. * Updated Shapeshifter ability to verify the sacrifice happens before spawning. Also ensured it handled resolving when either sacrificing or passing. * Fixed issue with action_and_add_to_combat_damage, banish and sacrifice were ignoring the conditions and just doing the action to the owning piece. * New event info for piece_removed_from_game. * Added support for piece conditions and damage calculation for action_and_assign_damage. * Fixed action_and_assign_damage, it was not handling the notify of actions correctly. * EVENT_ID_PIECE_DISRUPTED_MOVED and EVENT_ID_PIECE_DISRUPTED_MOVED now both send the same event for consistency. * Big change to ensure that effects or abilities that trigger off an action such as sacrificing and banishing actually happening before allowing effect. Relevant actions and abilities were all updated. This is now common code, and doesn't need to be done per ability/effect. * Fixed rare crash with action_destroy. * Moved damage calculation for ABILITY_TYPE_ACTION_AND_ADD_TO_COMBAT_DAMAGE_ACTIVATED until after action resolves in the event the game state has changed after the action is executed. * Added option for opponent gaining conquest points from ABILITY_TYPE_ACTION_AND_GAIN_CONQUEST_POINTS. * Added check for unique when handling Beacon ability. * Handled active (priority) player determination during the initiatve phase when there is a tie with both initiative and victory points. * Made some small performance improvements. * spawn_no_cost ability was not being notified of pass or spawn happening. * Renamed Alien Earwig's take control ability to Mindmend. * Added support for ABILITY_TYPE_TAKE_CONTROL_OF_PIECE_ACTIVATED being a 'may' ability. Updated all relevant abilities. * Fixed Wail to take 'snapshot' of eligible creatures to banish. Also now correctly updates context_piece of ability after each creature is banished. * Added missing wording about being in reserves requirement for Guardian Angel and Stained-Glass Angel. * Added ability category type ABILITY_TYPE_LEAP for Leap 2. * Fixed ability category of Carrion Warcharm's Valor-Edged Scare. * New custom McMaster. * New abilty activated_ability_if_action_during_combat. * Fixed potential issue with not allowing multiple triggers of Bloodthirsty for a single ability instance. * Fixed Divine Weaver, Nascent Hope, Nascent Potential, Nascent Desire, Nascent Doubt, Unificator, Ancient Valkyrie, and Gent symbol usage, (...) not {...}. * Migrated Windows project to Visual Studio 2010 which fixed a crash that was happening with cross compiled mingw32. * Fixed up some MSVC compilation issues needed to allow debugging of Windows crash with 2.0.4. 06/03/17 - 2.0.4 * (wx) Updated compilation issues w/ wxString constructors after moving to new version of wxWidgets. * (ncurses) Fixed issue w/ redrawing event status line over a previous longer line with some TERM settings. * Shackle can trigger infinite loops w/ pieces that attack when entering a cell. Put in code to detect this and end the game in a draw. * Added infrastructure for ending the game in a draw due to an infinite loop. * Updated ncurses UI to show modified initiative value in the status area. * Fixed issue w/ Nitro applying to both players if both players rolled 1s for initiative. Also fixed infinite loop issue if both players had an active Nitro ability and both rolled 1s during the initiative phase. * Fixed infinite loop issue w/ Knight of the Bronze Horn's Lead ability. * Integrated image for Reactive abilities and removed use of '%' for the symbol. * Fixed crash with the cant_be_disrupted ability. Was incorrectly handling the EVENT_ID_PIECE_DISRUPTED_NO_MOVE event. * Fixed issue with UI arguments not being handled correctly. * Fixed issue w/ transitioning from the initiative phase to the spawn phase. * Fixed issue w/ debug printing and mutex used for handling multiple threads printing at the same time. * Fixed Aggrocopter's defense 5 -> 6. * Added missing Stitched lineage to Failed Experiment. * Consistent use of '+' when stating something is being gained. * Luminous Muse's Tempt Madness was missing the Madness from the short and long descriptions. * Insubordination (Engergy) -> Insubordination (Energy 2) * New custom Junk Golem. * New custom Ylang Ylang. * New custom Bouncing Betty. * Made the Toss ability more flexible and updated Grinder to comply with the new options. * Updated Colonize to make any any cell claimable as per the FAQ (not a scoring cell). 04/26/15 - 2.0.3 * Added check when targetting enemies with Spur to ensure in play. * Increased the buffer size for reading in lines from warband files. Longer comments were being truncated and causing warbands not to load. * Fixed issue with handling damage outside of combat and group abilities. Disruption and destruction is now checked after resolving all triggered abilities due to a part of group ability happening per the FAQ. * Added new field to move_multiple_activated, may_at_start_only. This fixes Advance/Skirmish All which now prevents only moving some of the targets after starting movement. * New abilities action_multiple_activated and action_multiple_triggered. * New condition, piece_none, for using part of multi-segment abilities. * Fixed issue with Spur, an optimization to prevent checking the same zone more than once was not taking into account which piece was being checked before doing so. * Fixed issue with trigger_action_phase_entered. Was never checking Player 2. Also was always passing in owning_piece->controller to check on which phase was chosen. * Fixed issue w/ Pacify having sustained effect if any creature was disrupted or destroyed during combat, should only happen if the ability owner is disrupted or destroyed. * Updated Falling Man's Splat ability. It was triggering and not resolving when both players got a spawn phase, should trigger only when a player is not getting a spawn phase. * Fixed Tattooed Squashbug's (and some custom's) Shapechange ability was triggering with locations. * Fixed Nitro ability. Was able to manipulate during the spawn phase (i.e. by moving it out of a scoring cell) when the ability is resolved in the initiative phase. * Fixed issue with zone_is_scoring_cell condition. Had inverse logic for handling special case of checking for a scoring cell worth X points. This fixes Illuminati Pyramid and Cookie Beast. * Fixed Forgeblind Smasher's Smash ability. It is single blade, not double blade. * Added missing Hellbred lineage to Putrid Princess. * Fixed Tower of Unquenched Flame to only hook during a (potential) spawn phase. Hooking during the initiative phase broke Splat per the FAQ. * Fixed Heart Thief's Energy Feed ability. According to the FAQ this is determined during the initiative phase, not at the beginning of a spawn phase (before entering the spawn phase). Also added a new event to allow this to resolve after Rewind (both players have rolled) and before Splat (end of phase). * Fixed Soulwash Temple's XML def. It's triggered CiP ability was in a static_ability block and not triggering. * Changed attack damage stack to allow going negative to handle things like Fumble 5 correctly. Before assigning damage, if negative it goes to 0 as damage cannot be < 0. * Updated Bewitching' Assassin's filename assasin -> assassin. * Made Bliss' Warpstrike All 5 a may ability to handle choosing no target creatures. * Corrected Bliss' description for Blight. * Added support for pressing 'Escape' key in wx GUI warband dialog to exit it. * Updated Colonize to work with updated effect_conquest_for_cell_if_claimed. You can no longer Colonize any cell, only ones marked as scoring for players on the board. * Added support to effect_conquest_for_cell_if_claimed to only allow for the fixed claimable cells for each player. Default behavior made cells claimable for the duration of the effect. * Fixed multiple issues w/ Soul Harrow ability. Was allowing locations to be spawned in the same column. * Renamed custom Morpheus, Lord of Dreams' ability Raise -> Revive since it also allows locations. * Fixed Raise ability, was allowing locations should only be creatures. * Updated doc/making_customs.txt about variable attributes. 03/07/15 - 2.0.2 * Updated doc/README to be current with my new web storage and updates to the engine. * Fixed Unknown Kadath's Unstable ability. Was triggering on phase_enter which at that point strike/shift has not been decided, changed trigger event to CONDITION_TYPE_TRIGGER_ACTION_PHASE_ENTERED. * Made trigger_action_phase_entered_controller more generic and added a flag for controller only. * Updated move_or_action to take a flag, move_all_at_once. This was mostly for Corpsebuilt 2 since the FAQ states 2 have to be moved or none so the moves should be done atomically and checked at the time of triggering rather than 1 at a time. * New effect move_pieces. * Fixed Equitar's Corpsebuilt 2 long description Sacrifce -> Sacrifice. * Fixed variable shadowing issue that prevented Warmonger's Grand Melee from gaining blade abilities of local allies when triggered. Also fixed the issue w/ assigning damage to opponent's creatures in that cell (eligible was passed by value, not reference). * Fixed an issue w/ the wx GUI. The filter pieces dialog for warband creation would continually re-populate the controls, making multiples of combo box entries. * Fixed Protect ability, was checking pieces to be local after piece with Protect was disrupted, changed to check conditions with respect to context zone for disruption. * Fixed The Sweeper's Timely Betrayal. Was not working correctly due to the wrong xml parameter being passed in for action_type. Also, some of the action types were not setting the notify parameter correctly, so the effect to prevent damage from being assigned was not executed. * Added power, defense, life, and rarity columns to warband builder dialog. Also increased its size based on the user's desktop size. * Fixed Greenlife Dryad's aspect cost, it is P, not PPP. * Added owning piece in play trigger condition to Faceless Vigilante's Lost Revenge 4 ability. Also fixed its XML definition, previous_zone_conditions -> prev_zone_conditions. This ensures only local or adjacent Lost allies trigger Lost Revenge. * Added missing Stalwart ability to Fireman. * Fixed Incomplete Masterpiece's Insubordination Assembly ability. For an odd roll it was returning true and would re-activate the ability. * Fixed Warlust Satyr's life, it is 5, not 6. * Added AI optimization for spawning locations. * Medusa's Petrify now just marks for destruction in combat per the FAQ. In general the ability destroy_piece will behave that way. In combat, mark, and out of combat destroy. * Added option to stop moving pieces at any point w/ move_multiple ability, not just during a move when the number of cells to move is > 1. * With strikes, the destroyer of a piece is now correctly passed to action_destroy ensuring rules about granting of conquest points are honored (i.e. Death Cycle not awarding opponent conquest for destroying your own creatures). * Fixed Beacon ability. Now checks if spawning cell is in allowed spawnable cells. So Soul Harrow now blocks Beacon correctly. * Fixed Strikeback X ability. Attack was being created but not being put on generated effects list. * Fixed Birthing Frog's power, it was set to 0 when it needed to be -1 to be treated as variable. * Fixed Copper Skeleton's Offering Boon 1 xml def, was missing some conditions. * Fixed Offering Boon w/ Mindlock'ed creatures by adding player_conditions to trigger_piece_sacrificed and adding player_is_ability_controller to conditions. * New condition player_is_ability_controller. * Added new by_player to piece_sacrificed event, this fixes Fountain of Shades working with Mindlock'ed creatures. * Fixed Ferocity ability. It now correctly marks the piece for destruction after replacing disruption. Also check if already handled in a pass to allow for handling in next pass, allowing for deathblow, etc. * Fixed Red Reaver's Annihilate 5 ability, it is a single blade, not double. * Fixed Sybil's Splinter ability, it was allowing the distrupted Sybil piece to be spawned, not a piece in the player's reserves. * New warband "Two Faced Janus" by sawbladex. * Added missing Janus lineage to Mirrorman and Animated Standards. * Made Spur more correct as far as ability wording. You can now target an enemy with no local allies thus not doing an attack. * Fixed Knight of Strife and Joy. Was limiting its Skirmish 2 to local allies which was not correct. * Fixed issue w/ spawn_cost_modify ability (i.e. Channel Hiveling 1). Was enabling the static ability when it was specified to be "in play only". * Fixed issue w/ synergy_x ability (Swarm Synergy X, Bloodcut Synergy X, Monstrous Synergy X, etc). Logic for xml setting "only when owner in play" was inverse. * Fixed issues w/ Bloody Glory X. Was incorrectly checking for creature damage when anything happening during combat is fair game. Also cleaned up logic removing check for participating when already done when triggered. * Fixed activated_static_ability and activated_triggered_ability. They now create a sustained effect after being activated. Previously they did not work since once the activated portion resolved, the ability could potentially go away. * New effect, gain_triggered_abilities. * Replaced broken lineage string handling in Deathswarm X Y. XML now takes desc and desc_long. * Added missing notify handler for removing a piece from the game to action_and_activated_ability. Was affecting Purgatory Respawn. * Added new parameter to can_zone_be_entered_into_by_pieces to take an ignore count. This allows a 1 to 1 exchange to work correctly for abilities like Deathswarm. * Fixed issue w/ RageStrike X/Y. An optimization I had put in was causing this to not finish the attack. * Updated all activated abilities to ensure they resolve or resolve with pass allowing Edged and Reactive abilities to trigger. * Added notification to Venom ability to be pinged when effect has finished so the ability can send out a resolved event. This was keeping Edged abilties from triggering. * Added scoring cell condition for Stormrider Shaman's Energize Bloodcut 2 ability. * Fixed Toxic Sirroth's Venom 1 ability, it should be a multiblade activated ability. * Fixed Caged Grawlth's Constrained ability. Was acting like Defender. * Made the Lead ability copyable. * Cleaned up Knight of the Bronze Horn's ability Lead. It now correctly ensures the piece goes to the same cell, and also allows for the may part of the move portion of the ability (up to 1). * Added missing Madness qualifier to desc and long desc of Bladespine Eyesack's Appease ability. * Fixed Armadillo Shieldbearer's multiblade Crit, it should be Crit 1, not 3. It was also missing an XML block containing the activated ability. * Added missing Janus lineage to Battleweaver. * Fixed Tower of Faces Warpstrike, it should be Warpstrike 7, not 2. * Fixed Queen Chrysota. Her Channel Hiveling was working while not in play, and she also had Expel, which she shouldn't. * Fixed win32 makefile target, was not adding .exe to the end of the binaries so was picking up Linux binaries. 01/15/15 - 2.0.1 * Updated README on infinite combos. * More progress on Cocos UI. * Fixed issue w/ deal_damage_triggered. In some tricky interations this could get triggered additional times before resolving, so now each triggering puts a self contained effect on the stack. * Fixed issue with effect remove_from_game_if_target_destroyed. Was not setting owning_ability so destroy replacement effects didn't work correctly. * Made move_single_triggered ability copy'able (for Team Blitz). * Fixed crash w/ Nascent X's Conceive {Aspect} 2 abilities. Were all set to look at parent ability's X cost, which was wrong. * Updated Nascent Desire's long description. * Fixed Earwig's ability text, enemy creature -> enemy. * Fixed print out of debuging flags to be hex. * Fixed default for console version not showing board. * Fixed Mac Plist file, an accidental change of a character was preventing app from running. * New custom Sea Sprite. 03/26/14 - 2.0.0 * Fixed Hungry Ghost, had 2 copies of Bloodlust ability. * New custom Bane Cultist. * New custom Cloud Seeder. * New custom Unificator. * New ability gain_aspects_fixed. * New condition piece_aspect_cost_highest. * Makefile updates to support building and packaging different UI versions of the app. * Added empty cell condition to Seasoned Veteran's Teleport Refuge Self ability. * Updated the wording on The Morgue's Corpse Harvest 1 ability. * New custom Nullscreamer. * Added value argument to condition zone_is_scoring_cell. This allows for only matching scoring cells of a particular value. * Made condition zone_is_closer_to_match_zone_for_reference the more generic zone_is_closer_to_match_cell w/ a flag for closeness in respect to reference or target piece. * New custom Miner Slave. * New custom Gigabite. * New custom Infernal Lawyer. * New custom Rocket Sled. * Updated the long description of a bunch of abilities to properly use a comma (i.e. At the beginning of your spawn phase, where X, etc). * Changed Cookie Beast's ability name to Territorial 1. * New custom Technogoyle. * New custom Motivational Speaker. * Updated Big Top's long description. * Upgraded my dev environment to a newer XCode so OS X build is now done w/ clang instead of gcc. * New custom Glorified Squire. * New condition piece_is_unique. * Updated the stats for Pet Project and Felis Abjurer. * New custom Honored One. * Added ability_piece_conditions to ability cant_be_target, allowing for checking piece w/ ability to be not of a certain aspect/lineage, etc. * Updated Spirit Vault to use X icon rather than the text 'X'. * Updated Schoolyard Bully to use Shield icon rather than the text 'shield'. * Removed local specifier for Spiritslayer's Dissolve ability. Was never part of the ability. * Updated Miss Discipline's ability text to specify duration. Also now shows correct X spawn cost symbol in GUI instead of 'X'. * the -? flag now just shows usage instead of 'unknown option' then the usage. * Lots of plumbing changes for a new UI port (using cocos2d-x) (bumping up to 2.0) * New custom Patchwork Palace. * New condition piece_has_no_lineage. * New custom Nascent Desire. * New custom Nascent Hope. * New custom Nascent Doubt. * New custom Nascent Potential. * Fixed issue w/ Longstride triggering during opponents' shift phases. * Added an additional cost argument to piece_spawn_cost_equals_ability_x_payment and others to allow for X + num costs. * Fixed infinite loop bug w/ Hot Rod Lincoln's Collision 6 ability. * Revamped Beacon to be more generic. * New piece condition piece_aspect_cost_ge_than. * New custom Engine That Will. * Added a triggered variant of deal_damage. * New custom Bumper Buggy. * New custom Creamroller. * New conditions zone_is_clockwise and zone_is_counter_clockwise. * Made zone::vortex_clockwise and zone::vortex_counter_clockwise more generic and added clock/counterclockwise fields for all but central key cell. 09/25/13 - 1.0.55 * Fixed exception handling, was crashing trying to print out winner when there is none. * Fixed crash w/ move_multiple_triggered. Class layout was such that it caused memory corruption in base class when adding a new member continue_context_mv. Most likely an optimizer issue. * New custom Firecracker. * Revamped Bomb ability to be more generic. Now action_and_assign_damage. Also added triggered version and handling of resolution for reactive abilities. * New custom False Idol. * New custom Baku. * New activated version of remove_from_game_replaces_destruction. * Fixed crash with Reckless Hunger ability. * Improved the context wording for move_multiple when passing on moving as opposed to choosing targets. * New custom Rebuilding Block. * New custom Pet Project. * New custom Nowhere Node. * New custom Goldheart Wizard. * Bunch of changes to action_and_gain_spawn_points. Honor bonus_points flag for non-spawn abilities, new flag which allows points to go to action'ed piece's controller, and correctly set context piece on resolving action portion. * New custom Commando Carnage. * New custom Night Princess. * Fixed Brainboom's Explosive Aneurysm ability. Was not checking if in opponent's portal before decrementing victory points. * New custom Hellion. * New custom Ekkyon Vagabond. * New custom Arachnaphobian. * Tightened up action_and_activated_ability. Needed to emulate action_activate_ability as much as possible but ignoring costs, limits. Also check for the ability to resolve. * New custom Dreamscape Realtor. * New calculation parent_ability_context_piece_spawn_cost. * Updated the templating of Haunted Warlord's Appease Local & Pacify Local ability. * Updated the templating of Alien Earwig's Mindreplace ability. * New custom Pearlthorn Paragon. * New custom Lionheart Commander. * New custom Knight of Love and Hope. * New custom King Theodore. * New condition piece_has_lineage ('Lineaged'). * New custom Platform Hero. * New condition zone_is_x_cells_away. * New custom Kid Glorious. * Fixed issue w/ effect_gain_static_abilities. It was disabling the static ability when it should have been enabling it. * Fixed issue w/ not pruning all dup combinations w/ exchange_pieces ability. * Small optimization added to exchange_pieces ability. * Added new custom Gravedigger (Twilight). * Removed synergy_x's handlers for entering/leaving play. Already handled by base class. * Fixed Hand of Oblivion's ability. Wasn't working because the ability was being disabled when leaving play. Added an always_on flag for remove_from_game_replaces_destruction. * Correctly initialize always_on static abilities. * Fixed issue w/ effect_gain_static_abilities. Was not disabling the ability after removing the hook. * New ability Inter. * Added ability for destroy hook to pass in action_destroy. Useful for may hooks which need to resume the original destroy action. * Implemented handling multiple replacement destroy effects. * New effect effect_move_to_opponents_zone_if_target_destroyed. * Handled case where assigning Venom to your own pieces gets handled as such for determining who destroyed the piece in the event enough venom is assigned to a piece to destroy it. * Fixed venom_mechanic and effect_destroy_if_target_disrupted. Need to use a destroy_action so that things were cleaned up properly. This is also needed to have a single place to resolve multiple replacement effects for destruction. * destroy_piece hook now has the ability to query if it applies to a particular piece. Will be used for resolving multiple replacement effects. * Lots of plumbing changes to handle a piece owned by one player being able to go into an opponents out of play zone (until it enters play again which resumes normal play). * Added code to hook template class to query for number of replacements and modifier functions. Paving the way to handling multiple replacement effects. * Added is_may flag to effect_move_creature_between_zones_if_target_destroyed. * Fixed a couple of issues w/ Boogeyman's Gloom ability. * Added set numbers for all Twilight pieces. * New custom Felis Abjurer. * Made gambit_put_single_piece_into_play more generic gambit_move_single. Also made a triggered version of it. * Cleaned up the templating of Doctor Shocksalot's Chain Warpstrike X ability. * lurid_ladybud.dxp -> lurid_ladybug.dxp * New custom Rocket Ape. 07/17/13 - 1.0.54 * Fixed issue with semaphore usage w/ multiple threads. Was causing hangs on Windows when enabling it. * Removed unused pthread wake_up_event. * Bumped Convertible Convertible's power from 0 -> 1. * LOTS of changes, fixes, additions to get the codebase compiling and running under Visual Studio. This was necessary to debug a few Windows specific issues (lack of transparency on Win7 and the multithread hang). * Updated Splinter ability wording, it now mentions spawning into cell rather than put into play since that is what it is doing. Also added check to ensure it is a different piece being spawned (to avoid infinite loop). * Slight change to how sacrificing a piece action shows up. Some abilities allow choosing of an opponent's piece to sacrifice. In this case, it will show "Choose to sacrifice" instead of "Sacrifice". * Fixed issue w/ Gelatinous Dude's Digest ability. * Fixed issue w/ take_control_of_piece treating return value of unique_in_play as a bool, when it is a piece*. * Cleaned up various warnings, some of which were marked as performance sensitive. * Fix for deal_damage_dice_modify, condition var ok was int and should be bool. * Fix for action_and_add_to_combat_damage, multiplier could never be over 1 due to being treated as a bool. * New custom Dreamspoiler Witch. * Fixed a bug w/ the venom_mechanic. It was incorrectly treating the info ptr for a leaves play event as a piece* not a event_piece_exited_play*. * New custom Knight of Virtue. * Fixed issue with pay_spawn_points_or_action ability. Wasn't handling a piece leaving play due to simultaneous resolution of triggered abilities. * Bumped up cutoff for high depth action count w/ minmax AI, was preventing pieces like Whirlwind Dervish from making good decisions. * Fixed issue w/ hybrid AI attempting to undo actions when none were done due to either end game or turn condition met. * Fixed some math issues w/ the hybrid AI, plays much better now. * Fixed a longstanding bug where some cells could not be spawned into a legal cell after spawning something. * Fixed issue w/ activated static abilities and pieces leaving play and re-entering play in the same spawn phase and being re-activated. * Fixed issue where spawn row cells were being marked as portals due to uninitialized variable. This prevented them from being added to list of non-portal spawn row cells. * Twin of Akiza Guardian/Champion ability text, a Akiza -> an Akiza. * Corrected duplicated flavor text of Forgeblind Smasher. * Ghostghast's Incorporeal was spelled incorrectly. * Carrion Spiker's Thanatomancy was spelled incorrectly. * Windborne Blademaster's Dissipate was spelled incorrectly. * Added new member to zone class, in_same_row which has all other cells in that cell's row. * New condition piece_in_same_row. * Fixed issue w/ trigger eval for declared attackers. * Fixed issue w/ move_or_action ability (i.e. Replenishing Corpsebuilt) not checking if owning piece is in play before resolving after triggering. A previous sacrifice of the piece due to a simultaneous triggered ability (i.e. Unwishing Well) could trigger the bug. * Fixed Nightfire Giant's XML def. Its Crit +3 activation cost was mis-spelled. * Fixed Lost Scissors' XML def. PIECE_ATTRIBUTE_LIFE was misspelled. * Fixed Grand Hive's XML def, was still using LEGEND instead of LEGENDARY. * Fixed crash w/ Twin-Skull Archway. Logic checking damage type was shadowing ability piece. * Fixed issue w/ activated_ability not cleaning up instance specific 'memory' (i.e. x activation cost, activating action) when ability was done. Would cause crashes when using more than 1 thread. * Fixed bug where activating_action of activated_ability did not go through undo engine. * Cleaned up AI optimization for spawning locations that have scoring cell abilities. Logic ended up creating a lot more options than necessary and did reundant things as well. 04/08/13 - 1.0.53 * Spent a lot of time improving performance. Eeked out about another 10% increase overall from the previous work done. With the example warbands even a depth of 9 w/ minmax is do-able without it taking long at all. * Fixed issue w/ trigger eval for declared attackers looking at attack->attack_type which isn't initialized until attackers are declared. Instead, the event_info_declared_attackers has the attack type, so that is used. Now The Pusher's Sucker Punch 5 works the first time a strike is declared. * Added a bunch of fun warbands I found on the web. * Fixed issue where special attacks ending up in the STATE_ATTACK_MARK_DISRUPT_DESTROY state, which should never happen. Also fixes indirect reactive abilities which need to resolve after the ability that triggers it resolves. * The ability that allowed for only disrupting to occupied cells has been named Theatrics. * Updated Focused ability templating to handle losing victory points. * Fixed Tectonic Shepherd's Focused ability. Was triggering but not resolving when out of play. Was also triggering when not in a scoring cell. * Fixed Rewind ability. Was triggering correctly but the order of players for action phases was not being updated appropriately and also necessary re-rolls were not happening (i.e. a tie in initiative and no way to resolve it). * New event EVENT_ID_PLAYER_REROLLED_INITIATIVE. * New event send macro for non event_entities EVENT_SEND_ANON. * Lots of performance tweaks. Gained about 10% in performance after a lot of profiling and inlining expensive functions. * Fixed bug w/ dest_zone not being set early on after a strike was declared. * Fixed bug w/ action_strike being passed into action_declare_attackers instead of the action_regular_attack. * Optimization for regular attacks, if no shield actions, no need to exit and re-enter w/ new state. * action_assign_attack_damage and action_declare_atteckers now show cell in to_str. * Ability Legend -> Legendary. * Cleaned up damage assignment options. * Fixed issue w/ multiple Bodyguard pieces in the same cell for one player. 11/21/12 - 1.0.52 * Added missing Quantum lineage to lineage_strs. * Added the Quantum lineage to a bunch of the customs where appropriate. * Changed "true" and "false" for creature/location in warband editor to be "yes" and "no". * Shadow Assasin -> Assassin. * Fixed bug w/ sealed generation and pieces without a rarity. * Fixed bug w/ sealed generation not setting modified flag. * Cleaned up sealed booster set selection dialog and added some error checking. * New custom Mimring. * Update long descriptions to be consistent about using '-' to separate ability name from what it does. * Fixed horizontal scrollbars not showing up on Mac OS X for the actions and event listboxes. * Changed Spiritslayer's ability text to reflect that it doesn't allow *any* bonus spawn for the destroyed miniature, not just +2. i.e. a creature w/ Vessel. * New custom Cathedral of Thorns. * Fixed Princes of Thorns Bloody Glory ability, it is 12 damage 3 conquest, not 10 damage 12 conquest. * Added a small optimization when determining empty spawn row cells (avoid a vector copy). * New custom Barbarian King. * Changed trigger_shift_phase_entered_controller to be more generic. * Fixed bug w/ trigger_shift_phase_entered_controller. Was checking player 2 action phase 2 for player 1. * New ability gambit_battle. * New ability choose_first_action_phase_player_activated. * New custom The Pusher. * Removed is_creature and creature text from Faceless Vigilante. It's redundant when specifying the word 'enemy'. * Fixed trigger_declared_attackers. Was checking current_combat for whether or not it was a regular attack, but special attacks can happen during the current combat. * New custom Gonzo. * Fixed issue with dice combinations for re-rolls not always having every possible combination. * Bumped Scythejaw spawn cost and spawn ability cost, both were a little undercosted. * Fixed Screaming Satellite causing infinite skipping of spawn phases once in play. * New custom Bad Mad Kitty. * Added sustained effects queue with expiration on a new turn. * New activated ability modify_venom_clear_event. This allows changing when venom clears from pieces. Also added corresponding effect. * Updated Rot's long description to mention locations, not enemies. * Fixed issue with no prompt for filename after generating a random warband and choosing to 'Save'. * Fixed issue with warband filename not showing in the UI after a save as. * Added support for venom clearing on different events (i.e. end of turn instead of end of phase). * New custom Abandonded Lighthouse. * New custom Lost Scissors. * Updated attribute_modify to pass in piece context. * Don't try and create boosters if no sets are chosen. * Fixed issue w/ warband/sealed generator and use of Serrated Dawn. Was never checking for that set if selected, causing an infinite loop if it were the only set and not selecting pieces in that set if selected with others. 06/11/12 - 1.0.51 * Fixed Wail ability. Was rolling 2 initiative dice for each piece banished. * Fixed Mindthief ability. Was doing reserves -> graveyard for both controller and opponent. * Added zone brackets to effect_move's desc. * Fixed Vengeance X and Hibernation X abilities to enable their static abilities even when out of play. * Updated Rampage and Turbo abilities to allow for is_may. * Added is_may arg to effect_move_creature_if_all_targets_destroyed. * The Disarm ability was triggering after combinations of valid attackers were generating. Added a new event which is sent out before the state transition in action_strike to STATE_BATTLE_DECLARE_ATTACKERS. This gives a window for the ability to trigger and resolve before declaring attackers. * Fixed Greenlife Dryad's Energize All ability, was only giving bonus spawn to its controller. * Fixed Hand of Oblivion's Grave Gift ability. Was awarding spawn to both players. * Nightfire Giant's Crit 3 is a single blade ability, not multiblade. * Knight of Light and Shadow -> Soldier of Light and Shadow. * Fixed issue w/ cached counters and damage causing a crash w/ wx GUI. * Fixed the alignment/display of damage and counters in the wx GUI. * Fixed Panic ability, migrated it to attribute_modify_activated. * Modifyied effect_modify_local_defense to be more generic via piece conditions and allowing different attributes. * Added support for unlimited number of targets for deal_damage ability. -1 means to deal the damage to any matching piece. This fixes Mass Wound X. * Fixed issue w/ venom_multiple, was only allowing 1 target. * Implmented reroll_attack_dice usage of attack_types. Fixes Madhouse allowing re-rolls for Deathblows. * Fixed War Toller's util_name (was set to mujina). * Fixed issue with abilities like Ambition awarding conquest points for opponent's claimable cells. Claimable cells mask needed to be per player. * Removed unused game_state::all_scoring_cells. * Fixed Pearlthorn Gargoyle's Flux Ward ability, was missing piece conditions limiting the ability to itself. * Fixed Raging Tusker's spawn cost 5PP -> 6P. * Dice roll input dialog now shows which player the roll is for. * Fixed issue w/ zone_conquest_modify ability (i.e. Illuminati Pyramid). Was iterating all cells in dreamscape in hook instead of checking passed in cell. * Fixed Fleshworm Broodsire's XML def. Was preventing correct destination zone of Awaken from being used. * EVENT_ID_INITIATIVE_ONE_ROLLED_TOURNEMENT_RULES -> EVENT_ID_INITIATIVE_ONE_ROLLED_TOURNAMENT_RULES * Cleaned up Insubordination Energy's long desc. 03/01/12 - 1.0.50 * New custom Ghostghast (now at 650 pieces!). * New static ability cant_be_destroyed. * New custom Stitched Subordinate. * Event for both players rolling initiative is now shown by all UIs. * Event for both players rolling initiative also now shows the initiative value for each player taking into account modifiers like Alert X. * Removed UI event when rolling an initiative die, an event already goes out for initiative. * rolled an d6 -> rolled a d6. * Added update_desc to effect_add_encumbered_spawn_points. * New custom Mind Weaver. From 2nd place winner, Zaphod, in the DB design contest at boardgamegeek. * New condition zone_is_in_spawn_row_of_ability_owners_controller. * get_spawn_cost_str does not add spawn cost if it is 0. So rather than 0MMMM you'd just see MMMM. * New custom Unknown Kadath. From 3rd place winner, Tevish_Szat, in the DB design contest at boardgamegeek. * Fixed Serpentine Specter's Expel Nonvalor's long desc. * move_single_triggered and move_single_activated now take a flag on whether active player controls the action or not. * New custom Faceless Informer. From 1st place winner, Malpertius, in the DB design contest at boardgamegeek. * Cleaned up some of the controls in dialogs which were not aligned correctly. * effect_attribute_modify now states which attributes are being modified in to_str(). * Infernal Shrieker's Offering Boon 1 now only triggers when it is in play. * Fixed Pick-Pick's name (was Pick Pick). * Removed unused CTRL_C define in ncurses ui. * Fixed issue with multithreaded AI where comparison of abilities w/ parent_abilities (i.e. granted abilities) would almost always match even if the granting ability had a different owning piece. The program ran for almost a month non-stop playing random games (thousands) before this showed up w/ the debug build. The key was having 3 Locomotivator's in a warband. * effect_move_piece now also checks instance id for equality. * Charging Cactus -> Cackling Cactus. * Added missing Signal Jam ability to Screaming Satellite. * New condition player_has_spawn_row_where_piece_is. * Condition class has new virtual for querying about a particular player. * Fixed Screaming Satellite's long desc. * New ability gets_spawn_phase. * New custom Mystro. * New condition trigger_spawn_phase_skipped_for_player. * Changed event EVENT_ID_DOESNT_GET_SPAWN_PHASE to a non-info event so abilities can trigger from it. * New custom Tectonic Shepherd. * End of game winner message uses player's names, not just Silver/Gold. * Fixed issue w/ Soul Mine's Dense Harvest ability. Was awarding the bonus spawn to the owner at the beginning of both players' spawn phase. * Added update_desc func to effect_add_blades_to_combat. * New custom Faceless Lover. * New ability add_blades_to_combat_triggered. * New ability activated_triggered_ability. * New custom Armored Pupa. * New custom Hand of Oblivion. * New ability remove_from_game_replaces_destruction. * New ability limit_can_enter_zone. * Added ability condition to Usurp for being in that player's spawn phase. Piece could come into play possibly during the opponent's spawn phase. * Added a flag to condition in_a_spawn_phase to allow being in just the ability's owning piece's controller's spawn phase. * Fixed issue w/ combat damage modifier abilities (crit, etc) where when resolving would have no effect. * Added call to update effect desc for action_and_add_to_combat_damage and others. * Added an additional arg to activate_blade_ability (both activated and triggered). This allows ability to not allow activation of combat only abilities. * Shackle X now has AI optimization to not choose enemies w/ Charge when not in combat. In testing this was causing nearly endless loops of disrupt, shackle, charge, etc. Easy to make happen w/ Shackle 2 and 2 Brighthammers with one moving into the cell triggering the initial disruption. * Fixed bug where if you had a location in your spawn row it was not counting towards a mini in that column to allow spawning in that spawn row cell. * Deathblow attack actions also now use [] around cell name like regular attacks. * Fixed issue with damage_type_from_str, caused issue with Steadfast and Immortals' Resting Place. * New damage type, DAMAGE_ANY. Used by Carnival Charger. * Both ncurses and wx apps now subscribe for EVENT_ID_INITIATIVE_ONE_ROLLED_TOURNAMENT_RULES. * Parting Shot now correctly checks that the piece was removed from its cell in addition to being disrupted. * Curse (and variants) is now correctly not an optional ability. * Ability reroll_attack_dice now takes is_may, updated all xml defs to handle this. * Fear-Edged Advance ability checks for owner to be in play before triggering. * ABILITY_TYPE_SUPRESS -> ABILITY_TYPE_CANT_SPAWN_MATCH_PIECE_NAME. * Engine now follows the combat rules for disruption and damage clearing correctly. Damage only clears in step 8 after all pieces that will be disrupted that pass have been disrupted. * Rage of One now (per the FAQ) only triggers on regular and deathblow attacks. * action_declare_attackers now correctly sets attack type to deathblow instead of special attack. * Updated Deathblast to not trigger when under Mindlock (per the FAQ). This means tucking away controller at time of exiting play and checking graveyard against the owning_player. * New event info piece_exited_play. * Venom Cloud tucks away cell activated in in the event the owning piece is somehow moved before the ability fully resolves. * Put explicit check for is_in_play for Edged Crit and Fear-Edged Advance so that abilities that are activated while in the reserves (i.e. Manifest) do not trigger it ('you control'). * Removed Venom Cloud from Plaguebrood Larva, it doesn't have that ability. * Triskelion's Reverse Purge and Valkyrie Moonrider's Cleanse are now limited to creatures only. 11/11/11 - 1.0.49 * Fixed a bunch of issues w/ Toss, including not doing all the attacks, allowing disruption into the same cell i.e. not 'another' occupied cell. * Updated effect_disrupt_to_occupied_cells to check instance_id. * Fixed issue w/ Insubordination Assembly where the owning piece may have left play before resolving sacrificing itself. * Fixed issue with Toss where it was unsubscribing on every disruption seen during a combat. * Ability special_attack_multiple_chosen_cell (i.e. Mass Warpstrike) is now copy'able. * Retooled handling of group abilities. Eliminated small windows where out of combat there were disruption/destruction checks when there shouldn't have been. It will also give a performance boost when playing with pieces w/ group abilities. * action::notify() now takes an additional flag for whether or not the action who is doing the notifying will be resuming. This will be used for proper handing of group action execution of individual actions. * Fixed Splat to set src zone of attack to be where it is at time of attack, not at the time before sacrificing. This prevents abilities like Darkheart Cottage from bumping it. * Added a mutex for do_print w/ debug build. * Bumped threshold for hybrid action "wins" from 5% to 10%. * Darkheart Cottage and Infernal Bomber only boosts creature attacks. * Added piece_in_play check to attackers_conditions for Infernal Bomber ("you control"). * Ability modify_num_attack_dice now also checks attackers w/ conditions. i.e. Tactics does not modify a Deathblast or Splat attack. * Changed signalling for multiple threads from condition vars w/ mutexes to semaphores. This eliminated a small race condition that could show up causing the app to hang. * Fixed issue w/ Conquest Synergy. * Added checkbox in game settings dialog for toggling tournament initiative. * Now log all rules values at startup in game.log. * Migrated my desktop to OS X Lion, unfortunately the new XCode has dropped support for PowerPC. I will continue to make 1.0.48 available but will not be doing any more releases w/ PowerPC support unless there is a big call for it. * Fixed a very small race condition w/ threaded AI and monte carlo. Towards the end of a game, having only a couple of choices could finish being evaluated before a lock was taken. * Added missing condition def PIECE_NAME_CONTAINS to ident map. * Added missing piece_is_not_in_set handling to wxGUI warband filter dialog. * Added support for printing out pieces that match a list of conditions on the command line (-x [names] and -X [full]). See doc/README for info on syntax. * New flag for wxGUI port, -E, which exits the app when a game is over. Use in conjunction w/ -A. * effect_move_piece uses to_str() rather than referencing ability desc. * Fixed a crash when using hybrid AI without threads. * Fixed issue w/ multiple threads and ai state actions w/ locations having a different desc than the main action (and failing comparison match). * assigned_damage_modify (i.e. Zungar Citadel) should be a post modify hook, not post replacement hook. * Fixed crash in Twin-Skull Archway. Wasn't using damage_type to determine what context arg was (attack or ability). * Fixed reversed logic in special attack to determine if a mini is doing the attack (most special attacks) or a player is doing the attack (i.e. Bloodtusk Throne). * Fixed issue w/ Twin-Skull Archway. DAMAGE_TYPE_BLADE was not being or'ed into damage type with special attacks (like Warpstrike) so it was not having any effect. * Made Grand Hive a 'Legend' in addition to Gargantuan. Should balance it out a bit since it does not have {S} as a condition. Also updated random warband generator script to honor this. * New custom lineage 'Quantum'. This is to fill in the color pie for Valor/Fear, some customs will be using this. Think aliens, science, robots. * Fixed crash when there were more actions for the AI to consider than the number of work items allocated. Teleport Ally with a lot of pieces in play easily generates almost 300 different actions to consider. * Fixed issue w/ exchange_pieces. You cannot exchange or transpose a piece with itself. * Fixed a crash when using hybrid AI w/ multiple threads and the MC eval returned no actions. * Game log now prints winner of game and score. * Fixed issue where AI would never consider spawning a location without a scoring cell condition. * Fixed Mantlet, it has Shadow Field, not Shadow. * Added support for trailing comments in warbands. i.e. Cannibal Pariah # some comment This also works w/ the initial placement syntax '%'. * Tweaked cell scoring algorithm for AI. Disruption choices should be ordered better now for the AI. * Fixed Red Reaver's power 3 -> 4. * Fixed Equitar's description for Corpsebuilt 2. * Fixed set for Spy vs Spy, Hellwasp, Divine Weaver, Faint-hearted Acquaintance, Fill-in, Foobar, Protective Beauty, Punishing Beast, Zombie Gunslinger, Zungar Quartermaster. * Added a couple of new warbands. * On Mac wx GUI changed wxMemoryDC to wxGCDC which fixes the lack of transparency on base corners. 10/01/11 - 1.0.48 * Exchange pieces X with Y -> Exchange piece X with Y. * Fixed infinite loop w/ gain_aspect_choice (Recruit Valor/Tolerant) when declining to use it (pass on may). Also finished implementing the resolution of the ability. * Went over all abilities/effects that did movement and updated to reflect that changing zones does not constitute a 'move' so do not go thorugh hook for can_piece_move, i.e. Mire. Certain abilities were checking this preventing them from working when they should. Affected abilities were: action_and_put_all_matching, gambit_put_single_into_play, exchange_pieces, exchange_pieces_choose_cells, move_match_pieces_to_zone, move_multiple, move_single, move_single_and_action, multiple_actions_and_move_single_x, and put_multiple_into_play. * New custom Divine Weaver. * Fixed tricky interaction between Bloodthirsty/Bloodthirsty Lineage and Halo (Last Gasp). Piece was attacking and destroyed an enemy, then itself was destroyed by a deathblow by the destroyed enemy, and the Bloodthirsty triggered again when having a deathblow (due to Last Gasp) after already being triggered that combat. * Fixed issue w/ add_spawn_points_triggered when value was 0. * Fixed use of RNG where last action in a list would never be chosen (due to an off by one modulo). * Fixed infinite loop bug w/ move_replaces_disruption ability. * Fixed some memory leaks which could cause OOM conditions at high depths. * With all the optimizations, the minmax has sped up quite a bit, raised the default depth to 8. * Small optimization w/ regular attacks. When done with blade assignments, if no damage to assign go right to marking for disruption/destruction. * Don't apply blocking spawn row 'bonus' score to portals. After this change and the one below the minmax is doing better against the hybrid. * Fixed issue where some spawn row cells would end up with a negative starting score which made spawning or shifting to those cells less appealing for more powerful pieces. * Lots of tweaking of Hybrid AI. At default minmax depth and 5000 plays @ 4 turns, it beats straight up minmax at same depth almost 100% of the time. With the new way the MC portion acts as a pruner when there is no clear cut great move and also allows for minmax when all moves are always winners. * Added empty entry for aspect cost condition in filter dialog. This allows searching for no aspect cost pieces. * Fixed Infernal Bomber's spawn cost 4 -> 8. * Fixed Master Tactician's spawn cost 8VV -> 6VV. * Removed minmax fallback for pure Monte Carlo AI. * Improved memory utilization w/ hybrid AI. * Removed debug prints from check_legal_attacker, cant_gain_victory_points, move_single_and_action, and take_control_of_piece. * Optimization w/ getting aspects. Avoided a lot of small memory allocations. * Fixed crash w/ monte carlo AI when there are no wins for any move. * Removed debug prints from check_legal_attacker and cant_gain_victory_points. * Re-enabled checking for marked destruction/disruption in eval function. Will keep the AI from doing boneheaded things like Missile'ing its own pieces. Also added taking into account damage assigned. * add_to_combat_damage now shows +/-. * Fixed potential issue w/ setting damage type of add_to_combat_damage. If a piece could ever become/unbecome a creature/location this will now work correctly. * Added support for updating add_to_combat_damage abilities' effect description. * add_spawn_points_activated now correctly updates desc string of aggregated effect before resolving. * Removed debug log when rendering top base in wx UI. * New custom Robot Rocketeer. * Update context_piece/zone in action_and_activated_ability on notify. * Added support for other action types and piece_conds to ability action_and_add_to_combat_damage. * Fixed potential corruption for abilities that override on_activate and manipulate context_piece or context_zone and do not call base class to clear them on activation. 08/27/11 - 1.0.47 * Removed all hard coded checks for is_in_play in triggered abilities that override does_ability_trigger. * Shapechange now calls base class's does_ability_trigger which checks trigger conditions. * Fixed potential issue w/ double-y enabling modify_spawn_cost ability. * Added check to Shapechange ability XML def to also not trigger for piece itself w/ Shapechange. * New custom Foobar. * New calculation initiative_values_difference. * Fixed Infernal Shrieker's Offering Boon 1. Was missing check for creature and was only applying to itself rather than all pieces controlled by the controller of Infernal Shrieker. * Fixed Shard Troll's Assault X ability, had the wrong power calculation id in its XML def. * New calculation initiative_value which is the player's actual initiative (after abilities/modifiers). * Renamed calculation initiative_die_roll to d6_die_roll. and made initiative_die_roll the current roll value of the player's initiative. * New conditions piece_controller_has_lower_initiative_value, piece_controller_has_initiative, and piece_controller_does_not_have_initiative. * Fixed Stormrider Shaman's Energize Bloodcut, was applying the spawn points to the Hellbred lineage. * Thanatopsist's Gravemulch -> Grave Mulch. * Fixed Respawn ability in xml defs. Were missing assign_condition of 'in graveyard'. * Fixed spelling of Stained-Glass Angel's Manifest ability (was Mainfest). * New custom Vengeful Vermin. * Made Synergy X ability more flexible. Added a flag to specify if the ability is in effect only when the owning piece is in play or not. * Fixed Synergy X (Location Synergy, Monstrous Synergy, Bloodcut Synergy, and Swarm Synergy). * Fixed Synergy Conquest ability. This is an always on static ability not just when the owning piece is in play. This broke as a result of the optimization made for static abilities in 1.0.43. The synergy abilities need to be enabled even when the owning piece is not in play. * Implemented rendering rarity symbol on bottom base. * Updated doc/README with latest info and some new info about adding images. * Made an empty res/pieces/artwork file in the OS X bundle. * Optimized copying of event subscriber list to avoid memcpys. Gave about a 4% perf boost overall. * Removed check for scoring cell in ability additional_conquest_if_claimed and effect gain_conquest_if_claimed. Non scoring cells can be claimed i.e. Colonize. * Ability resolving no longer sends out info event. * Fixed a bug w/ ncurses ui with entering an action number that was not valid. * Removed need for notify_of_execution usage for passing current combat around. * Fixed data corruption bug w/ abilities that activated other abilities (Wish, Deathrip, etc). * Added a command line option (-D) for using a different XML piece definitions directory. * Done declaring attackers no longer sends out info event. * New custom Hellwasp. * Made Folk Hero unique based on play testing. * Made bonus_spawn_if_selected_destroyed_activated copy'able. * Fixed bug w/ effect_no_assigning_damage not returning a value when no piece matched. * Fixed a ton of compiler warnings. * Fixed a subtle bug w/ multiple copies of the same ability owned by the same piece granted from different pieces when running with multiple threads. * Made The Ugly Stick unique. * Fixed Maiden Moderator's xml def. * New custom Savage Reaver. * New ability bonus_spawn_if_selected_destroyed_activated. * New effect bonus_spawn_if_destroyed. * Fixed Spiritslayer, needed local check. * Fixed issue w/ not being able to disrupt due to having no legal disruption cell, forcing destruction but not being able to destroy due to an ability (like Phantom). In this case things need to be cleaned up, and damage is cleared. * Optimized hook can_piece_use_ability. This one is also pretty expensive. * Optimized hooks for getting abilities. These are called a lot if certain pieces are in play. * Fixed interaction bug with Mire and move_replaces_disruption. * New custom Fill-In. * New custom Charging Cactus. * Clarified Brainboom's Explosive Aneurysm ability text. 07/15/11 - 1.0.46 * Fixed The Widow's set. * Optimized the block rect text rendering by not changing the font for each word check. * Cleaned up ability pay_spawn_points_or_action (i.e. Fickle). When showing choices to player, show owning piece's name in the event there is more than 1 triggered. Also cleaned up Insubordination Energy which also uses those same 2 actions. * All disruption cells are now checked for legality, including abilities that modify disruption cells. For instance, pieces that can only be disrupted to occupied cells need to check the stacking limit. * Fixed a bug where spawn cost orientation for top base was off due to getting text extensions before setting font size for DC. * Warband editor dialog is now sized based on the size of the main window. * Ability text on top base is now centered correctly in its region. * Fixed initial placement of window on OS X, was @ 0,0 which hid the titlebar under the main OS X menu bar. * Made disruption_cells_modify more flexible by allowing replacement instead of modify and also cell conditions. * New custom Comeback Kid. * Reverted enemy lineage/aspect conditions to not show x{Whatever}. There are no graphical symbols for them and it goes against existing ability text. So {xP} Fight +2 goes back to Fight Passion +2. * Cleaned up the centering of the spawn cost and piece letter identifier. Looks much better now. * Fixed a scaling bug w/ rendering the top base. * New custom Spy vs Spy. * New ability special_attack_multiple_chosen_cell (Mass Warpstrike). * Fixed an issue with exiting the wx UI and the engine not handling the quit request. * Added support for rendering symbols for blades, aspect symbols, etc on top and bottom base to wx UI. Only remaining ones to do are lineages and rarity. * Common-alized the rendering code for the silver and gold reserves/gy/oop areas in the wx UI. * New custom Atomic Fly. * New ability move_replaces_disruption. * 64 bit change for ncurses ui w/ EVENT_INFO msgs. * Cleaned up event handling in ncurses ui. * event_prompt flag is now an int, 1 == prompt on any event 2 == prompted whenever an effect or AI action results in a piece moving. * Cleared up Gelatinous Dude's ability text. * New warband 'Whisper to a Scream' * New warband 'Sac Pact' 05/20/11 - 1.0.45 * New custom Mortar Slaughterer. * Added a multiplier arg to calculation power_piece_matches. * New custom The Peacemaker. * Added support for filtering when creating random warbands. * Cleaned up the makefile as far as switching off variables. * New condition piece_is_not_in_set. Added this to the warband filter view. * activated_ability class handles all instances of a combat blade ability being activated out of combat by 'fizzling'. * Fixed gain_static_ability. Did not handle another piece other than the owner very well. * Made ability cant_use_ability copyable. * Fixed issues w/ abilities that grant other abilities. In all cases parent ability was not being set. * Added logic to handle spawning a piece when it is not the owning player's spawn phase. The rule is, the empty spawn row cells are evaluated using the current game state. * New custom Carnivorous Weevil. * New ability gambit_put_single_into_play. * New custom Eeeeeevil Bunny. * New custom Mirror Ravager. * New condition piece_spawn_cost_le_ability_owning_piece_spawn_cost. * Tweaked spawn_no_cost to handle triggered versions better when triggered allows an opponent to spawn for no cost (i.e. Mirror). * New custom Klepto. * New condition trigger_attacker_matches. * Added a triggered variant of activate_blade_ability and added a few more options to handle payment and is_may. * Added a new event for all calculations being done from a regular attack roll. * New custom Hot Rod Lincoln. * New ability move_single_and_action. * New ability multiple_actions_and_move_single_x. * Added support in wx UI to change the font of the actions and events text widgets (Ctrl-Shift-F). * New custom Clockwork Knight. * Added support for a replacement attribute modifier to attribute_modify. * New condition trigger_initiative_value_ability_owning_piece_controller_equals. * Added ability condition in_combat to triggered version of add_to_combat_damage. Needed for Gent activating blade ability which then triggered stuff like Edged Crit X. * New condition in_combat. * Fixed a very unlikely corner case of Gent triggering a blade ability when in a previous turn a strike started but had no valid attackers (leaving the current_combat unclear'ed). This would also only happen when the AI was thinking. * Made take_control_of_piece_activated copyable. * Added an ability condition to Gelatinous Dude's Immaterial ability to fix a very unlikely scenario where he has eliminated all pieces from the game except himself resulting in an game that does not end. * Fixed Gelatinous Dude's long desc. * New custom Morpheus, Lord of Dreams. * New ability move_match_pieces_to_zone. * New custom Mad Hatter. * Fixed exchange_pieces ability, was not setting notify for pass on may action. * Made Chaos Drive copyable. * Fixed Mimic ability, was not loaded by engine. * Fixed xml def for Swordstrider. * Fixed xml def for Locomotivator. * Fixed xml def for Stormwatch Peak. * Fixed xml def for Hypnotic Freak. * New custom Tesseract Mage. * New action action_choose_two_zones. * New ability exchange_pieces_choose_cells. * Made Unstoppable the more generic can_move_when_shifting_if_engaged w/ conditions and made it copyable. * Fixed a crash w/ effect_gain_static_abilities. * Venom Cloud X is fixed. Was walking list when a piece could be removed if destroyed. Also allow player to choose order for assignment, could be important for other abilities that trigger on destruction. * Fixed an issue w/ events being sent out more than once. * Fixed Savannah Harrower's utility name. * Fixed Bloodtusk Throne's ability. Was checking all creatures for highest power, should only be local creatures. * special_attack_single uses ability::to_str() to handle locations that have no desc. 04/06/11 - 1.0.44 * New custom Cookie Beast. * New condition piece_current_zone_match_conds. * Added triggered version of gain_conquest_points ability and allowed it to take a calculation. * New custom Hypnotic Freak. * New custom Termite Head. * New custom Bloodthirsty Samurai. * New custom Damsel in Distress. * New custom Two-Faced Freak. * New custom Yellow-Bellied Coward. * Fixed Night Queen and Triskelion's Purge ability, it is not a combat blade ability. * New custom Zungar Quartermaster. * New custom Ninja Instructor. * New custom Locomotivator. * New custom Maiden Moderator. * Fixed issue w/ Underpower ability allowing via hook for attack damage to go negative. * New custom Possessed Poinsettia. * New ability action_and_gain_conquest_points. * Added piece_is_not_of_aspect and piece_is_not_of_lineage to filter dialog in wx UI. * New condition piece_is_not_of_lineage. * Fixed an issue w/ Shapechange triggering when piece was not in play. * Removed conditions relating to ability_controller. They were not used and not needed. * Added instance_id check to effect_gain_static_abilities. * Set all abilities initial controller to be the owning player. Only a potential issue w/ static abilities as other types always re-init their controller on triggering/activation. * Fixed some conditions which uses ability's controller rather than ability's owning piece controller. * Fixed issue w/ initializing piece index #s which were used for indexing gained abilities. * action_assign_damage now shows ability name for display str. * New calculation excess_combat_damage_over_num_dice_rolled. * New custom Shieldmaiden. * Added amount calculation and num_targets to deal_damage ability. * New custom Bubblefudge. * New custom Meat Wagon. * New custom Brainboom. * New calculation context_zone_conquest_value. * Deathblast now sets context piece/zone on triggering, also supports an amount calculation. * New ability action_and_victory_points. * New condition piece_ability_context_zone_is_piece_opponent_portal. * New custom Abominable Snowman. * New calculation rolled_combat_damage. * New custom Knight of the Empty Helm. * Fixed ncurses ui when inputting dice rolls. You could previously put in 456 etc for initiative. The num to roll is now honored. * Fixed ncurses ui status row when viewing pieces w/ variable defense and/or life. * special_attack_multiple passes along piece being attacked as context. * Fixed a crash w/ special_attack_single and power calculations that reference the context ptr. * Fixed cant_gain_victory_points (Deny Victory, etc), post replacements were being done after victory points were awarded. * Pass on may now sets notify correctly in action_and_activated_ability. * action_and_activated_ability tucks away context piece and zone. * New conditions piece_in_ability_context_zone and piece_defense_lowest. * sacrifice_piece_activated tucks away zone before sacrificing as context_zone. * Enabled deathblow_any_action_phase to be copied. * New custom Hnakra (600th piece!!). * New custom Warfang Warrior. * Updated bonus_spawn_for_destroyed_modify to allow either replacement or modify. * New custom Boneclan Wardrummer. * New custom Stumbling Drunk. * New custom Shambling Horde. * New custom Mansquito. * New custom Deathwish Guardian. * New custom Faint-Hearted Acquaintance. * Added support for a triggered version of disrupt_piece and removed assumptions about the owning piece having the ability. * Fixed bug w/ disrupt_piece ability, was checking can_piece_be_disrupted w/ owning_piece, not iterated piece. * New custom Pompous Paladin. * Follower 1 long description are -> is. * Added support for cant_attack_conditions to check_legal_attacker ability. * New custom Sir Percival. * limit_can_shift_and_attack now has flags to specify either/or limit shift/attack. * New custom Mongol Envoy. * New custom Assassin Automaton. * Error message for not finding a piece by name now shows which warband file the piece name was in. * Fixed Dream Lord ability to_long_str(). It's a keyword ability and has no long description. * New custom Alien Earwig. * Added support for taking ownership of a piece (differs from controller, i.e. goes back to your graveyard, etc). * Added slot for sustained effects that last the duration of the game. * New custom Draco, the Lawgiver. * New custom Great Googly-Moogly. * Slight modified the state machine for regular attacks to allow shield abilities to modify the dice rolled before final totals are calculated. * Fortune is now the generic modify_attack_dice ability, also made an activated version of it. * Fixed customs w/ set SET_CUSTOM to be SET_CUSTOM_MISC. Caused them to show up as unknown. * modify_attack_dice -> modify_num_attack_dice. * New custom Escape Pod. * New condition ability_owning_piece_current_zone_matches. * New condition zone_is_not_ability_piece_current_zone. * New custom Deimos. * New custom Phobos. * New calculation context_combined_power_local_allies. * New custom Shadow Splitter. * Made Shapechange much more flexible using conditions. * action_sacrifice_piece now tucks away cell before sacrificing, used by some ability's notify routines. * New custom Twilight Dragoon. * Fixed Deny Victory, was not allowing either player to gain victory points. Also made it the generic cant_gain_victory_points w/ conditions. * New custom Wizened General. * New custom Fearless Warrior. * New custom Nest Egg. * New custom Protector Cocoon. * New custom Stampeding Rage-Beetle. * New custom Thanatopsist. * New calculation num_per_multiple_match_pieces. * New custom Drifting Miasma. * New custom Tower of Babel. * New custom Predatory Mantis. * New custom House of Mirrors. * Made Rally the more generic controller_chooses_disrupt_cell w/ conditions. * Null Arch now just affects local creatures. Was WAY too powerful. * Added new custom Amnesia Manor. * Added support for activation types for lose_abilities ability. * Added new custom Zombie Gunslinger. * Added new custom The Ugly Stick. * Added new custom Nevret Charlatan. * Fixed issue the AI thinking and sending end of turn event, was being sent as info event and some abilities trigger on the end of turn. * Fixed interation issue w/ choosing who goes first w/ action phases (Corrupt Politician) and Heart Thief's Energy Feed causing a player to skip their spawn phase. * New custom Zebra Administrator. * New duration effect gain_aspect. * New ability gain_aspect_choice. * Made Chameleon the more generic gain_aspects w/ conditions. * Bumped up default depth to 7 from 6. Enough improvements have been made in performance that 7 is reasonable on most modern HW. * Now correctly trigger a redraw of the playing area when a new font is selected. * Migrated state change stuff to being macros for a small performance gain. * Fixed bug w/ replacement abilities for defense. * Fixed crash in the ncurses version when quitting a game early. * Fixed the check for the game being over. Gambit abilities could have made the game end sooner than it should. * ncurses UI now dumps event log when the game ends. * New custom Altar of Despair. * Added support for alternate win conditions. * spawn_cost_modify now supports a in_play_only flag to allow pieces in your reserves to change spawn costs, etc. It also now supports reducing costs by negating a positive value (for things like piece match counts, etc). * Gelatinous Dude now has the Immaterial ability to offset how powerful it is. * Renamed Altar of Dementia to Altar of Fire. Dementia seems more like Madness. * modify_can_claim now takes a flag so a piece can either claim or not claim if the conditions are met. * New custom Bloodthrone Vampire. * New condition piece_spawn_cost_equals_parent_ability_x_payment. * New custom rule implemented. When a player takes control of an opponent's piece that is not in play, it goes into the equivalent zone of the new controller. The owning_player does not change so if the piece leaves play after coming into play or is re taken control of, it will revert back. * Added expire_id to all variants of take_control_of_piece, also handle sentinal expire id EVENT_ID_INDEFINITE which does not put the effect on the sustain list. Also now sets context piece. * Fixed XML def for Gutsoup Golem, Recalcitrant Roach, and Necrodancer, their ability condition block for Respawn was not correct. * New custom Unholy Abomination. * Fixed High Inquisitor's Cartographer ability, can only choose locations in controller's graveyard. * Fixed interaction issue w/ Gelatinous Dude and other triggered abilities resolving on the same event (end of turn). * Revamped event sending for a ~25% speed up. There was a big hit when the AI was thinking and generating std::string temporaries and concat'ing them. * Made Passion minis bold like the other aspects w/ ncurses ui. * Dumping of UI events was always missing the last line w/ the final score, elapsed time, etc. Fixed. * Fixed crash when running wx GUI version w/ -A flag. 03/12/11 - 1.0.43 * Fixed issue w/ clean target of makefile. * New custom Gelatinous Dude. * New custom Hermit Werewolf. * -P w/ ncurses ui now surpresses loading xml messages, was breaking random warband generator and calculate cost python scripts. * New custom Killer Bean. * Fixed an issue w/ abilities being init'ed twice in grant_ability. * New custom Corrupt Politician. * New abilities choose_first_action_phase_player_activated and choose_first_action_phase_player_triggered. * New action choose_identifier. * New custom Deranged Volleyball. * Updated Fido's Impede long description to be more precise (specify end of turn etc). * New custom Ink Cloud. * New custom Assassin Opossum. * Initial placement of warband now handles static abilities being init'ed if starting in play. * Fixed an issue w/ abilities that deal with zones in the same column. Was not including the originating cell in the list of cells in a column so things like Soul Harrow and Geomancy didn't count the cell that the ability owning piece was in. * Fixed gain_static_ability_triggered, it wasn't init'ing the aggregated static ability. * Updated static_ability class to default to not being enabled and added methods to handle entering/leaving play with default handling to be to enable/disable the ability. 99% of static abilities work that way. This results in a massive speed up for warbands with pieces w/ a lot of static abilities especially pieces w/ Halo abilities. * Updated awarding of victory points event to better describe losing victory points (i.e. Dreamlord). * Added missing {P} requirement for Armadillo Shieldbearer's Bodyguard ability. Also changed it's set # from 7 to 4. * Added new custom The Widow (Twilight). * Updated Death Chanter and Unstable Mabel to use current cost as they should instead of spawn cost. * New condition piece_current_cost_le_than. * Added function to return current cost assuming spawning to portal. * New condition trigger_piece_assigned_damage. * New calculation, context_damage_assigned. * New custom Cutthroat Assassin. * -A is a wxUI flag not ncurses. * Fixed a crash in the UI when starting a new game after a previous game had an error starting due to a misspelled piece name in a warband or failing to initialize the game for some other reason. * Fixed issue w/ controller change event going out before controller was changed. Was causing the UI to not reflect changes until another action was performed. * Added support for 0 power special attacks w/ variable spawn cost abilities. * Added combat_only flag to trigger_piece_destroyed condition. * Added support for empty strings in XML tags. Updated all locations and components utilizing NONE sential to work with this. * Fixed an issue w/ the filter dialog and filtering on aspect cost. * Fixed an issue w/ abilities that allow spawning (Shapechange, Beacon, Grand Hive's ability) and running a multi-threaded AI. * Fixed strings used to populate aspect cost drop down combo. The order has to match the routine that converts numerical costs to strings. * Fixed a few deadlock conditions w/ the input dice dialog being up and events coming in (i.e. dice being rolled) or an event coming in while waiting for human player selection of action. * New abilities put_into_play_multiple_activated/triggered. * Fixed issue w/ bumping the instance id of a piece too many times. * Fixed issue w/ thread AIs not having disruption cell hint vectors populated correctly. Was causing some very weird behavior when running threaded AI. * New custom Broken Glass. * Added support for piece conditions to Ambush ability. * New custom Necrodancer. * New custom Seasoned Veteran. * New condition zone_is_not_scoring_cell. * Calculate cost script now does a case insensitive name compare. * New custom Xenophobe. * Supress is now cant_spawn_miniatures_with_name. Also added variant cant_spawn_match_attribute_x. * New effect cant_spawn_match_piece. * Fixed issue w/ Null Arch. Was affecting pieces in warband before game started, negating warband contribution costs etc (i.e. Duplicate, Triplicate). * New custom Pearlthorn Phantom. * New custom Easy-Bake Oven. * New calculation initiative_die_roll_result. * New custom Bearshark. * New condition zone_is_closer_to_match_zone_for_reference. * New conditions opponent_victory_ge_than, combined_victory_ge_than. * Made Vengeance the generic cant_spawn_unless_conditions. * Tweaked Phaseweb Spider, was way too powerful @ its cost. * Fixed location desc handling. * Added method to effect_add_spawn_points, update_desc, since number of points is calculated on resolving and that particular effect is not used by the memory pool. * Fixed a few issues w/ python script to calculate piece cost when checking pieces w/ variable (*) attributes. * Added support for showing * instead of 0 for variable attributes in both UIs. * Fixed Warmind Scorpion, was showing a power of 5. * Updated pieces w/ replacement ATTRIBUTE_X from 0 to -1 which will be sentinel for using an asterisk. * Renamed Lazarus to Reanimator and updated stats based on testing. Was WAY too undercosted for use w/ {CiP} abilities. * Fixed corner case of someone taking control of Lazarus and activating its ability. Ritual Respawn only applies to owning player, not controller. * New condition piece_owner_is_ability_controller. * Added Mire Local to Lobstrocity and changed Ambushes to Assaults. * New condition in_a_spawn_phase. * Made Mire the generic cant_move w/ conditions. * Adding spawn points now sends out an event regardless of how they are added (unless explicitly asked to not send due to a more detailed message going out). * Fixed some issues w/ Insubordination Energy. Was re-entering after resolving, choice to not pay if odd roll was not correct text, also send out event so UI is updated. * Fixed bonus_spawn_for_destroyed_modify (i.e. Vessel), was being awarded for all destroyed pieces if in a warband. * Fixed issue with all abilities long contains condition in filter dialog. Was checking against a piece's name. * Fixed issue w/ -P flag which was keeping some custom pieces from being selected with the random warband generator. * Added new custom Probability Rogue. * Added new custom The Madding Crowd. * Added new custom Chupacabra. * Added new custom Folk Hero. * Added new custom Eight-Arm. * Added new custom Counting Fence. * Added new custom Morgue. * Added new custom Paranoid Pummeler. * EVENT_ID_PIECE_ENTERED_CELL now has an associated event_info w/ piece prev and new cell. * Added is_may support to special_attack_multiple, attacks like Brainblast are not optional. Updated all pieces accordingly. * Added new custom Witch-ita Line-Woman. * Added new custom Insolent Pawn. * Added new custom Thulykos. * Added new custom Nevret Ripper. * Added new custom Nevret Screamblader. * Added new custom Phaseweb Spider. * UI gives more feedback when one of the necessary files etc for startup are not present. 02/13/11 - 1.0.42 * Added new custom Copper Skeleton. * Added new custom Apostate. * Added new custom Lobstrocity. * Added new custom Venerealist. * Fixed issue w/ is_of_lineage and is_of_aspect when choosing None. * Fixed issue w/ is_of_aspect in filter dialog. * Fixed issue w/ string comparing conditions in filter dialog. * New condition piece_is_previous_ability_in_combined_context_piece. * Fixed issue w/ Valor Beacon, was not correctly bumping the spawn cost down by 1. * App does not hang if example warband doesn't exist and there are no command line arguments (i.e. using defaults). * Added a global flag to surpress printing via do_print. This will allow things like -P and -p to ensure nothing prints out as a part of engine init. * Added more width/height to Windows dialogs as necessary. * Added new custom Murderous Moppet. * Added new custom Lazarus. * New condition piece_is_ability_context_piece. * Fixed Gutsoup Golem's Respawn ability, it is a may. * Added new custom Faceless Vigilante. * New conditions trigger_piece_disrupted, piece_in_ability_context_zone. * Made base ability class hold both the context piece and zone ptr this will allow for more flexibility with conditions/calculations/etc. * Changed Lurid Ladybug's ability to only last for that combat, most shield abilities work that way. * Added new custom Milkman. * piece_spawn_cost_le_than now accepts a calculation rather than a number. * New calculation combined_victory_points. * Updated pieces w/ Respawn ability to additionally have an ability condition of in_graveyard. This will keep the AI from using it when not appropriate and also will show that it doesn't resolve when activated and the piece is not in the graveyard. * New condition in_graveyard. * Print more info when a condition lookup from xml fails. * Fixed an inverse logic comparison in an assert in move_multiple. * Made Ambush ability copyable. * Updated Shackle X and Mine X's long desc to handle 1 -vs- many. * Undo event now shows up in wx GUI event area. Will make it easier to debug things that look strange without knowing an undo was done. * Cleaned up effect_assign_venom's description and event txt. * Fixed Valor Beacon ability. Was allowing locations in addition to creatures. * Added check for is_creature when determining if there are any deathblows. Deathblows were happening (with 0 attack dice) when a location was destroyed via Rot etc. * Removed Scare from Stormwatch Peak, it does not have that ability. It's activated_ability block was also blocking the (M) Mass Wound ability. * Removed all condition checks of is_in_play when a check for engaged or unengaged are also done. A check for engagement or not already checks if a piece is in play. * Moved current warband file label above list view and to the right, should be seen now. * Updated event sending for activating an X ability to handle abilities with no names (i.e. Locations). * Fixed Grand Hive ability. It wasn't returning true after execution so only 1 mini could be spawned. Also correctly have pass on may action set notification ptr. Also added ability description for pass on may. * Action for activating an X ability now has correct spacing for description and also added "X=" to the x portion. * Both UIs now subscribe for awarding of victory point and wx UI properly re-renders the side panel when this event fires. * Added new custom The Gallows (Twilight). * New calculation parent_context_piece_spawn_cost. * Updated base ability class and sacrifice_piece ability to set context piece ptr when appropriate. * Added piece ptr member to activated_combined_ability for context/use by subsequent abilities. * Fixed random_warband.py, needed to be updated for addition of printing rarity w/ -P flag. * Added missing rarity for Demented Stepmother. * Added new custom Haunted Warlord (Twilight). * Made an activated variant of no_damage_assign_in_cell_triggered (Pacify). * Added new custom Lurid Ladybug (Twilight). * Added new custom Knucklebreaker (Twilight). * Fixed Deathhead and Blood Golem to only give the bonus conquest during the conquest phase. * Removed hardcoded CiP condition generation from Bloodtax, Haste Gambit, and Spur. * Fixed -h output, missing a newline before -U string. * Fixed Deathhead's Infest 13 ability, was l3 in the xml def. * Fixed some location abilities not showing any text when user action is needed. i.e. Grand Hive * Added logging of zone scores when loading eval.conf. * Shortened the text for triggered abilities resolution actions. * New ability fewer_attack_dice_and_activated_ability (Scarestrike). * Cleaned up handling of string for fixed base cost of variable spawn abilities (like Strafe). * Added check for in play for both is_engaged and is_unengaged. Abilities that needed targets chosen first was allowing pieces not in play to be chosen, i.e. Skirmish 2. * Added print out of rarity when dumping pieces w/ -P flag. * Added new custom Wardrummer (Twilight) probably most complicated and nested ability yet (and needed no engine changes!). * Added new custom General Glorius (Twilight). * Made move_multiple a lot more flexible in the number of targets, number of spaces to move up to, and added support for a post action w/ piece conditions. * Added rules dir and rules/alt_board_config.conf example. * Late change seems to have broken custom layouts. Now fixed. Whoops! 01/21/11 - 1.0.41 * The optimized order of disruption cells for the AI is now also dynamically created based on the scoring cell/portal configuration. * Fixed a bug w/ scoring cell initialization. D and E cells were being given stats for C cells. Conquest points were correct but were being marked as scoring cells so the AI could get confused on when to do things such as spawning locations that needed to be in a scoring cell. Also means abilities that had the requirement of {S} would work in these cells. * Made the calculation for evaluation zone scores generic so it will work with any custom configuration of scoring cells/portal. * Warband save dialog now has a default filename to hint to the user that the file should end in .txt. * Fixed Equitar's desc, it had Corpsebuilt, should be Corpsebuilt 2. * Updated assertion for activated abilities w/ a can_use_ai handler to check for parent having an X cost. i.e. Advance & Bomb. * Empty strings are no longer added to the ncurses event buffer. * Made some optimizations when calculating conquest points and in a few places where memory allocations were being done a lot. Slight speed-up. * Added can_use_ai to activated_combined_ability. It just aggregates the results of can_use_ai on all abilities it cares about. * Fixed issue w/ initial draw of board. If board was resized before starting game, it would take a full redraw to see rendered board components (scoring cell, portals). * Don't add undo action when @ the start of a game. * Fixed bug w/ wx UI. Undo'ing back to the start of the game was unsubscring UI events so no future events were handled. * game.log on wx UI now also saves all UI events to the end of the log. This is saved when the application is closed or when a game ends. * Set focus on OK button with wx dice input dialog. * Added check for valid input in the wx dice input dialog. * Updated wx cached game state to go through hook for rolled initiative for each player. Nitro results were not being shown in the UI. * Fixed Nitro ability. Was never doing its replacment. * Removed double can_use check from Nitro ability. * Added context string for sacrifice_pice and banish_piece. * Updated the makefile to create empty directory res/pieces/artwork on the Mac. * wx UI supports custom portal location and draws the portal graphics in that cell. ncurses has always checked is_portal. * Buttons are now centered in sealed dialog. * Made the silver and gold portal cell a configurable parameter. see silver_portal_string and gold_portal_string in rules.conf. The defaults are A5 and E1. * Made all popup dialogs (warband editor, etc) center on the main window. * Added ui update triggers for Undo and gaining bonus spawn points (Heartsblood Temple). * Added new event type EVENT_ID_UNDO, also added EVENT_INFO_WITH_ID call in action_undo to trigger wx UI updates. * Went over the doc/README files and updated as necessary, a lot has changed since I last updated these. * Added a can_use_ai handler to activate_cip_ability. * Made Flicker the generic activate_cip_ability w/ conditions and calculation ptr. * Cleaned up the sealed generation config dialog. * After removing a selection in the warband dialog, the previous entry in the list view is selected now. * Added missing Reinforce Battle ability to Steelborn Lioness. * Added a clear button to the warband dialog. * Fixed in_a_shift_phase condition, was only checking for player 1's action phases (Inertia ability). * Modified action_activate_ability to "fizzle" if it is a combat only ability and no combat is taking place. * Edgemaker w/ human players now also allows you to activate combat abilities which will not resolve (per Baxar's FAQ). * Made Edgemaker more generic activate_blade_ability, also added a can_use_ai handler. * Added support for a triggered (i.e. CiP) Mindlock. * Fixed move_single ability, pass on may was not setting notify so not resolving w/ pass (needed for Reactive abilities). * Tweaked the eval function a little bit to account for pieces marked for disruption/destruction. * Cleaned up dicestrike ability's continue on action context str. * Condensed the warband editor dialog to fit in a much smaller resolution. * Actions that take a context string now handle locations which have no desc. * Removed testing piece names from bin/random_warband.py. * Fixed Bliss' long desc, made it seem like she could only attack 2 targets. * Updated all action_and_X abilities to also support removing a piece from the game for the action. * New action remove_piece_from_game. * Made Awaken the generic action_and_put_matching w/ lots of conditions. * Added new action and engine routines for removing a piece from play. * Added piece count to destination side of warband dialog. * Greatly improved the rendering of abilities and stats on the bottom base as far as used space and layout. * Sacrifice and Banish now include cell it happened from in event info msg. * Updated Aviax Cowboy and Infernal Screamer's long description. * Added can_use_ai handler to action_and_gain_spawn_points. AI was activating Citadel of Torture's ability with no local allies present. * Made input control for random seed wider. * Shortened "Player " to just for initiative roll and action phase actions. Also removed its use from the core engine when the player's name is already referenced. * Fixed Mighty Stride ability, can also apply to the creature itself with Mighty Stride, not just allies. * action_special_attack handles empty ability descriptions better. 01/08/11 - 1.0.40 * Fixed Terrible Termite's Rot abilities. They would only assign to locations controlled by the controller of Terrible Termite. * Fixed issue w/ action label text not showing 'Silver choose an action' like it did for Gold player. * Changed outline rectangle while dragging to full piece image. * Trigger redraw of board in wx UI if piece controller changes. * Cleaned up Bast's Handmaid's Mighty Stride, the condition block for handling highest power was not correct. * Rolled Bloodtusk Throne into special_attack_single_triggered. * New conditions piece_controller_is_active_player and piece_controller_is_not_active_player. * Added support to special_attack_single to allow the attack to be done by the active player (Bloodtusk Throne). * Made the ability text equals/contains and name equals/contains filter entries case insensitive. So a search for 'mire' would match 'Mire'. * New routines to convert from text representation of aspect cost to broken down costs per aspect and back. * Implemented missing restoration of filter values for some choices (aspect, ability text, etc). * Small usability improvements w/ activating abilities. * Fixed spacing of pieces filter dialog. * Made Mindlock X more generic take_control_of_piece w/ conditions. * Added support for specifing alternate rules.conf and eval.conf on the command line (-f and -F flags). * Updated Baba Yaga's static ability to only be used during the conquest phase. * New conditions in_conquest_phase, spawn_point_match_piece (replacing all the lineage specific ones), and piece_spawn_cost_equals_ability_x_payment. * Rolled Energize and Summon into the generic conditional_spawn_points_match_piece. * Fixed spelling of Terrible Termite in xml def, also changed is enemy check to controller check since locations are not enemies according to the rules. * Made Altar of Dementia's long description follow that of the most similar piece, Citadel of Torture (ally -vs- creature that you control). * Added an AI optimization to spawn_no_cost (i.e. Gutsoup Golem's Respawn ability). * Fixed an issues w/ ability check_legal_attacker (i.e. Loner). * Added effect_move_piece actions as ones that are "draggable". * Fixed issue w/ the Transfer X abilities. Was allowing a transfer to happen to the reserves or graveyard if a location was present. Only works w/ with cells. * Made Synergy X more generic w/ 2 different calculations instead of discrete numbers (X count and num spawn). * Won't start game if not at least 1 piece in each warband. * Fixed interaction assert w/ Hammerhead's Double Stakes and One-Man Army's Deny Victory. It is possible to be gaining more than 1 victory pt. * wx UI now redraws zoomed in piece if either damage is assigned or counters are assigned. * effect_assign_venom now sends out info msg w/ EVENT_TYPE_COUNTER_ASSIGNED. This allows UI to redraw zoomed piece w/ venom counters when assigned. * New event id EVENT_TYPE_COUNTER_ASSIGNED. * Added subscription for EVENT_ID_PASS_ON_MAY to both uis. This is useful for when AI passes on things like Gambit etc after activating. * Fixed Coral Archerfish's Defender ability, was specifying any piece match rather than enemy, was behaving like Constrained. * Fixed issue w/ 2 pieces that have Hivetunnel. There were two blocks which kept the conditions from being used. * Added zoomed piece refresh for disruption since damage clears. * Increased buffer size for translating wxStrings to std::string, this was causing crashes when saving warbands to very long paths. * Fixed take_no_damage ability. Was taking attack types and comparing against damage types. So things like Immortal's Resting Place was allowing damage from deathblows but not for regular attacks. * New routine to translate damage type strings to ids. * Updated assign_attack_damage's text to use the word attack. There is a different between attack damage and damage. * Added can_use_ai handler to special_attack_single_piece_attribute to keep the AI from activating at 0 cost like Mightly Valor Assault when there are no pieces to attack or attribute targets. * Fixed issue w/ Guardian Angel's Intervene ability. Was allowing Shield assignment when controller was attacking. * Added event info message showing roll from Mindstrike. * Bumped up Null Arch's spawn cost. It's quite powerful. * New custom, High Inquisitor, uses a custom ability 'Cartographer'. * Made Alert the generic modify_initiative_roll and added support for taking an amount calculation. * Made Ambition and variants the generic additional_conquest_if_claimed with conditions. * Deny Victory is now a post replacement instead of a pre as it should be. * Made Deny Victory more flexible by allowing a list of piece conditions. * New condition piece_in_opponent_portal. * It's been quite a while and a lot of changes have been made so I updated the doc/making_customs.txt with the latest info and some suggestions on choosing aspects for customs. * Ability description (and code) updated to handle cases of new Rip abilities to avoid infinite loops. * Made Deathrip the generic Rip. Will allow for customs that do stuff like Mindrip, or Rip Local, etc. * Tweaked Shadow Assasin's stats, Teleport Self seems very Valor so changed cost to 7PPV. * Fixed drawing of outline drag rectangle when just selecting a piece. * Made Gloom more flexible as a generic triggered ability rather than hardcoded CiP. * Added info events to announce total damage and blades for a particular attack. Knowing this @ the start helps with making choices, esp if other attacks are done overwriting the last dice roll. * Added support for generated sealed boosters and the ability to filter which sets to pull from. * Added dynamic depth for minmax AI. Useful when the number of actions gets very high (like a lot of unengaged creatures during a shift phase). * Updated Gloom ability to use trigger_conditions so now it correctly shows up as {CiP}. * Added support for showing currently assigned damage and counters to wx UI. Zoomed in top base shows these stats at the top. Red is assigned damage, Green is assigned (i.e. venom) counters. * Added assigned damage and custom counter maps to cached game state. * Fixed beeping issue when selecting a piece and not dragging in wx UI. * Changed all cost related text values to use '(' and ')' So {B} is now (B) like for spawn points. Conditionals like scoring cell, reserves, local ally, etc, still use '{' and '}'. 12/22/10 - 1.0.39 * Fixed initial sort in warband dialog. * Updated the welcome dialog w/ new info about dragging and using spacebar for passing. * Made a separate OS X bundle target in the makefile. * Added key accelerator support to the warband dialog. Pressing a-z will jump to the first entry with that letter. * Increased height of warband dialog on the Mac. * New custom Terrible Termite. * Removed double iterator check from venom_multiple. * Made the Venom and Venom multiple abilities much more flexible in terms of targets, number of counters, and description/name. This will allow for some cool custom abilities. * Changed non-ASCII apostrophe in Paper Hound's flavor text. * When running threaded minmax, prefer the lower action indexes for same score actions. They are (usually) ordered best -> worst. * Fixed Defender ability for all pieces. Was not allowing the piece to shift at all once in play. * Fixed issue w/ can_zone_be_entered_into_by_pieces hook. * Fixed a memory crash when running with a LOT of threads. * Fixed bug w/ handling ai thread actions w/ the monte carlo algorithms. * Added support for specifying number of turns of look ahead for hybrid AI. * Inlined all default handlers for hooks for a decent performance increase. Preliminary testing shows that with 2 minmax AIs playing the example warbands I see ~40% performance boost. * Added optimization of tucking away spawn pool in player class. * Some routines were still using the old (slower) check for a zone being in the dreamscape. Removed the old routine and updated the routines to use the new one. * Made check for an ai thinking inline. * Fixed uninitialized flag issue in Beacon ability. * The start game action is now preferably started by the human player. This lets a human player UNDO all the way back to the beginning of the game. * Added support for pressing space key for passing type actions, including continue on (when for instance selecting targets), passing on may ability etc, and going to the next phase. * Added support for dragging pieces to do shift, spawn, and choose disrupt cell actions. * Added code to tuck away coordinates of all zones and also mouse down/up/move event handlers. Will be used for dragging pieces between zones/cells. * Tweaked Altar of Dementia's stats a bit by comparing against a similar piece, Citadel of Torture. * Re-enabled UNDO support for human players. This was in before I officially released the game, but I removed it for some reason that I can't recall. It's back now. * Cleaned up attack dice rolled event string. * Added special handling for Fortunate All when the AI is thinking. Sifting through millions of options for rerolls is just too much. * Added AI handling to effect_reroll_attack_dice to limit branching with minmax. * Fixed issue w/ rolling attack dice, event was not being sent out when AI was thinking. * Optimized generating reroll dice combinations. With some attacks I was seeing crazy numbers of permuations which would take a LONG time to go through. Much, much faster now, we're talking minutes -vs- hours. :) * Fixed bug w/ removing sustained effects through undo engine while iterating. * Added support to effects to query if they have expired or not. This allows for more flexibility, i.e. things that carry on until the NEXT occurance of an event. * Fixed a potential variable shadowing issue when emptying sustained effects lists at trigger points. * New ability action_and_activated_ability. i.e. (2) You may sacrifice a local creature. If you do: Lure. IMO using the ability itself is good rather than having it be some generic container. It allows things like Reactive abilities to have more uses. * Fixed potential issue w/ activated_combined_ability. Was not calling on_activate() for contained abilities so if they had state they would not reset. * Updated Dance of Chaos warband, was missing a few pieces. * Tweaked The Hills's stats, was a little too cheap. * Tweaked Shadow Assasin's stats, was a little too costly. 12/07/10 - 1.0.38 * Made the default for do_print fall back to printf if the log file hasn't been opened (i.e. -P or -p flags). * Made the ability instantiation more robust in the event it fails. * Fixed cant_move_when_shifting ability (Lockdown, etc). Was not in list of abilities to instantiate. Fixes Lockjaw. * Fixed Lockjaw's Lockdown ability, can only select a cell in the dreamscape not any zone. * New custom Scythejaw, now up to 515 pieces total! * Added scoring cell graphics to wx GUI version. * Updated GUI code to work with wx 2.9.x which will be necessary for 64 bit versions. * New condition piece_is_not_of_current_aspects. * Added a piece count to the filtered pieces list area of the warband creator. * Added support for auto starting a game with the starting params w/ the wx GUI version. Mostly for my debugging purposes. * Small string constant fix for Linux wx version. * Removed un-needed check for chosen_targets == 0 in move_multiple ability. * Fixed a subtle race condition w/ the wx GUI which would cause a crash. Seemed to happen easier on the Mac for some reason. * Upgraded to wxWidgets 2.8.11 for wxMac. * Fixed a spacing issue w/ the resolving triggered ability event info msg. * Went over the entire codebase to make it 64 bit ready. Had to update a lot of the state change stuff which did casting from ptr to int. * Fixed issue w/ EVENT_INFO of a stacking limit issue. * New conditions piece_all_abilities_long_contain. * New custom The Hills. * Fixed Soulwash Temple's long desc. * New conditions piece_defense_le_than, piece_defense_ge_than, piece_defense_equals, piece_aspect_cost_equals, piece_is_in_set, piece_name_contains, piece_abilities_contain, piece_life_equals, piece_life_ge_than, piece_power_ge_than, piece_is_of_rarity. * Implemented a piece filter dialog used for the warband creator display and generating random warbands. * New custom Shadow Assasin. * Fixed duplicate keyboard accelerator for 'V', 'R', and 'S' in warband dialog. * New ability condition, is_ability_owning_piece_a_creature, displayed as {Creature}. Acts just like other other ones like in_a_scoring_cell {S}. * New ability and effect become_creature. * Changed ai_style's initiative dice sides to work w/ any setting for num_sides_initiative_die. * Fixed issue w/ Frantic Generator's Boost ability not being created. * Fixed Carrion Hulk and Rotting Juggernaut's XML def to use ACTION_SACRIFICE rather than hardcoded 30. * Added Creature and Location columns to warband dialog and the ability to sort on them. * Correctly check for legal entry (i.e. stacking limit, effects) when iterating disruption cells. * Fixed showing of 'NONE' for location's activated and triggered ability short descriptions. * Made DAMAGE_TYPE a bitmask now that theoretically a piece could be both a creature and a location. * Piece class has new attribute is_location. No longer relying on !is_creature for location. This will allow a location to become a creature etc and remain in addition a location. * Made a separate routine for rolling a d6 die now that initiative can be more than 6 sides (i.e. d8). This keeps abilities that say "roll an initiative die" etc from using them. Some key directly from being a d6 (i.e. Insubordination abilities). * Fixed issue with ai_player::is_thinking was being set back to false by new Bodyguard damage assignee handling when it needs to preserve the existing value. * Removed the unused dice::roll_results. * Changed use of strings for initiative rolls to ints internally, slight performance tweak. * Fixed a small memory leak that reared its head when doing very high numbers of Monte Carlo iterations. * Removed some debugging prints that were being done in the release version. * New custom Null Arch. * Some wxMac cleanup work w/ std:strings. 10/31/10 - 1.0.37 * Added new method to wx_gui frame class to only load images for a single piece and added a flag to the loader to not clear cached images (used by warband creator). * Fixed action_and_no_damage_assign and move_or_action. Was using the wrong defs for action_type. Also added support for disrupt and destroy actions and appropriate checks for can_be_disrupted and can_be_destroyed. * New custom Paper Hound (uses new ability Fickle 1). * New ability pay_spawn_cost_or_action. * Made Boost the more generic modify_spawn_ability_cost w/ conditions and calculation. Also renamed it to Boost 1. * Updated activated static ability to show short desc as well as long. * Changed triggered version of Rush to use trigger_id and trigger_conditions rather than hardcoded to entering play. * Fixed Double Venom's long desc. * Fixed misinterpreted - character in some long desc. Was showing up as some weird UNICODE sequence. * Made use of (X) for spawn points consistent. * New custom Joker Joker Joker (Twilight). * New ability contributes_towards_pair_or_triple. * New custom Righteous Fury (Twilight). * New custom Harrowing Shade (Twilight). * New condition piece_power_le_than. * New custom Phalanx Soldier (Twilight). * New hook contributes_to_pair_or_triple. * New conditions has_pair, has_triple. * Changed Offer Self over to generic action_and_gain_spawn_points. * New custom Zombie Master (Twilight). * New condition zone_is_targets_graveyard_or_reserves. * Made Hell Spawn ability the generic move_if_selected_destroyed, also made the corresponding effect more generic. * New ability gain_static_ability_triggered. * Added support for verifying and generating random warbands to the new warband editor. * Changed verify_warband to return an int rather than bool so caller can decode why warband failed verification. * Fixed default miniature type limit in code (was 4, should be 3). rules.conf has correct value. * Fixed The Gates of Hell XML def, was missing tags. * Made ABILITY_TYPE_GAIN_ACTIVATED_ABILITY_CIP more generic to work with any trigger. * Changed Soulwash Temple's triggered ability to use trigger_conditions instead of hardcoded checks. Now plays nice w/ is_cip() and shows up as {CiP}. * Updated reactive abilities' long desc. * Fixed Bloated Parasite's short desc. * Added long desc for activated_combined_ability. * Cleaned up display handling of no-name abilities for locations. * Cleaned up Venom's long description. * Common-alized full ability string generation. * Added support for a warband builder/Dreamcatcher equivalent. * Imported about 30 or so images for Serrated Dawn matching my homemade proxies. * With the help of the ImageMagick utilities I was able to scale all of the images to be the right aspect ratio so they do not look stretched or weird in the UI. * Updated images (thanks extreme!) to remove the colored bases which was redundant given they are shown within a base in the UI. * Cleaned up Doctor Shocksalot's Chain Warpstrike. Clarified ability behavior via feedback from the author (Scud-O). * Added support for inputing real dice rolls in wx GUI (specific w/ -c on command line or using the checkbox in the UI settings). * Added support for a variable # of sides for the initiative die (defaults to 6). See rules.conf. * New custom location Altar of Dementia (inspired from MtG). * Made Lockdown the generic cant_move_when_shifting and also made an activated version. * Made Torture the generic action_and_gain_spawn_points. * New calculation piece_attribute. * Rolled Dominate and Baba Yaga's static ability into the generic modify_can_claim. * Removed some debugging prints in conditions that were not debug only. * New condition zone_is_local_to_reference. * Rolled Tactics X and Darkhart Cottage's ability into the generic modify_attack_dice. * Migrated Strafe to special_attack_multiple. * New calculation ability_x_payment. * Added support for a variable number of pieces to choose for special_attack_multiple (i.e. Strafe). * Converted Equistrike to gain_attribute_modify_triggered. * New condition trigger_equal_num_piece_match. * Upgraded my Linux distribution which caused an upgraded of gcc etc. 4.2 -> 4.4. 09/13/10 - 1.0.36 * Changed effect_score_conquest_for_destroyed to grant the bonus conquest when a matching piece is destroyed, rather than waiting for the effect to expire. * Added conquest point info to "won turn" event info. * Fixed spelling of Murderous Berserker's utility name. Was preventing its image from loading. * Fixed trigger_piece_changed_zones. Wasn't checking piece conditions so stuff like Mind Mulch was triggering for both the owning player and their opponent. * Removed action* param to handle_undo_stack, wasn't used. * Changed the default # of iterations for Monte Carlo based AI 2000 -> 200. 2000 is way too many for straight MC, but good for hybrid. * Updated action string when game ends. * Revamped damage assignment so it is now (to the player) as you would expect with abilities like Trample and Bodyguard. * Added can be target check for Supress. * Fixed Edged-X abilities which state "a local creature you control". Via gaining blade abilities, the piece w/ the Edged-X ability itself could be activating a blade so the check is not for ally, but that the controller's match. Also now correctly check for is_creature. * Fixed handling of not assigning attack damage (regular and deathblow) due to an ability like Bodyguard. Damage wasn't being assigned but it WAS being removed from the damage total for the attack. Per the rules, all damage needs to be assigned. This may make the minimax AI a wee bit slower since it could continually have N number of assignees after assigning to pieces that cannot be assigned damage. * Converted Brainblast to special_attack_multiple which also gives it the ability to be copied. * Fixed Doomsinger's ability. It was using the wrong special attack type id. * Merged Warpstrike Multiple and Warpstrike All into generic special_attack_multiple. * Fixed issue w/ Conductor's {CiP} Transpose Enemy/Ally. XML def was using trigger_condition, needed to be triggered_conditions. Ability was triggering even when out of play since there were no conditions. * Made the zoomed piece image square so it looks normal when using the original pics of the minis. * Added option to now show board (-U) w/ ncurses UI. * Updated triggered Spur to show {CiP} and correct long description. * Migrated Soul Harrow to use spawnable_cells_modify. Also fixed to also not allow locations to spawn in that column. The ability states "miniatures", not creatures. * Added hooks for location spawning and pre/post modifier hooking to spawnable_cells_modify ability. * Migrated Stray Warpstrike to use special_attack_single. * Added an opponent_chooses flag to special_attack_single. * Migrated Grave Harvest to move_single w/ conditions. * Added support for trigger_condition piece_destroyed. * Added new condition zone_is_local_or_adjacent_to_reference. * Added new condition piece_is_not_triggered_ability_context_ptr. * Added a new field to triggered_ability allowing a context ptr which can be used by certain conditions. * Updated special_attack action text to take up less space. * Bristleback Basher is now available to use. * Updated Torture Chamber to use generic special_attack_single_target_attribute. * Fixed an issue w/ Birthing Frog, unengaged check does not check in play. * Cleaned up packaging of OS X bundle. * Fixed some uninitialized class members in wx_gui.cpp. 08/21/10 - 1.0.35 * Optimized clearing of index memory pools for non initial game state allocations. * Fixed Unravel X ability. Was boosting defense of chosen piece rather than lowering it. * Optimized the state machine do/undo for game phases. * Added elapsed time msg for game for wx GUI version. * Fixed issue w/ Flanking X and Heroics X. Ability conditions were not in a block. * Cleaned up cell drawing so it always "fits" the board image. * Fixed issue w/ cached bitmaps after playing first game. * Fixed a bug in the redraw/resize logic in the wx GUI, updates are now much more snappy. * Updated the background to match the original game board. Thanks to slambert for removing the cell lines and scoring cell graphics. * Switched to a much faster random number generator for the Monte Carlo and hybrid AI algorithms. It's about 100x faster than the boost one used for dice rolls etc. * Inlined some very frequently called functions and gained a nice speed increase. * Exposed a lot more options in the wx GUI version including random seed, inputting of dice rolls (not implemented yet), new AI algorithms. * Optimzed the use of some stl vectors and the game_phases class. * Removed for_player from action_group. Wasn't used. * Fixed Rampage. Was triggering but not resolving due to not casting event info to correct type. * Small optimization with checking if a player can strike in a cell. * Small optimization with getting a player's portal. * 2 new AI algorithms implemented Monte Carlo and a hybrid of Monte Carlo and minmax. The -o and -O flags control which are used as well as -r. See doc/README for more info. * Made Synergy X more flexible and also check all conditions to be forfilled to contribute to the X count. Updated all pieces w/ Synergy X accordingly. * Fixed bug w/ Synergy X, wasn't dereferencing the spawn_cost pointer when modifying the cost. * Fixed a bug w/ Darkheart Cottage applying to both players. * Removed aspiration code from minmax AI and separated minmax out into a separate module. * Now load cell scores for each player from file (eval.conf). * Changed all line endings for piece definitions to DOS. * Removed Advance All from Knight of Strife and Joy. * Fixed issue w/ Frightwave, was only allowing pushing pieces with the same spawn cost of the roll, should be <=. * Went through all pieces w/ static abilities and added is_in_play checks as needed. This fixes stuff like Channel Hiveling 1 working when Queen Chrysota is in the reserves. * New condition owning_piece_in_play. Optimized version of match_piece_in_play. * Tweaked eval function multipliers to prevent overflowing a 32 bit unsigned number which would cause some AI anomolies. * Added an AI optimization for declaring attackers for strikes and deathblows. * Fixed AI_OPTIMIZATION macro, should also test if player is not human in addition to whether or not an AI is thinking. * Added new keybindings to wx welcome dialog. * Fixed issue w/ Channel Hiveling 1. Was working when Queen Chrysota was not in play. * New condition match_piece_in_play. 06/28/10 - 1.0.34 * Fixed bug in Insubordination Energy. * Fixed up action_pay_spawn_points desc. * Added some new warbands contributed by Anborn. * Changed all text files under doc/ and all warbands to be DOS line-endings. * Rolled Bloodletting and Infest into generic gain_bonus_conquest_if_conditions. * New conditions destroyed_more_match_pieces_this_turn and controls_match_piece_in_each_scoring_cell. * For human players, allow all pieces from reserves, not just one instance of a piece. Could be confusing to see a piece in your reserves and not see it in the list of pieces that can be spawned. * Game end msg now uses player's names instead of Silver/Gold. * Fixed potential crash w/ engine responding to certain events and handling sustained effects. * Fixed an issue w/ Locus Drive ability. Wasn't limiting to adjacent cells. * Added new shortcuts for toggling base stats "," and the left hand side panel ".". * Correctly handle the extremely unlikely case of no cells to disrupt to meaning destruction but an ability prevents destruction. Things are cleaned up correctly in this rare case. * Cleaned up the damage clearing on disrupted creatures. It was being done all at once once all had been disrupted. Now it is done correctly after each individual creature is disrupted. This fixed issues w/ blade abilities that disrupts creature(s). * Fixed Boneclan Hunter's aspect cost. * Rolled Mighty Assault into the generic special_attack_single_target_attribute. * Fixed race condition in multi-threaded AI code. * Fixed Kendra Vale's aspect, she is Passion, not Madness. * Fixed an issue with parent_ability_x_payment. * Added a check for being in play for Bomb. Piece could have left play due ot an Ambush, etc when part of a combined ability. * Migrated Skid Drive to move_single_triggered w/ conditions. * New condition zone_is_to_left. * Fixed some oddball interactions with disruption, Dissipate, and Deathrip. * Rolled Vessel and Dissolve into the generic bonus_spawn_for_destroyed_modify. * New condition trigger_piece_destroyed. * Rolled Edged crit into add_to_combat_damage_triggered. * Made Dissipate more generic disrupt_piece w/ conditions. * Rolled Steadfast, Inertia, and Immortals' Resting Place's ability into the generic take_no_damage. * Rolled Hiveling Frenzy into reroll_attack_dice. * Rolled Soul Mine's Dense Harvest into add_spawn_points_triggered. * Removed all usage of special case events for spawn phase. * New condition trigger_phase_entered, also made trigger_phase_exited more generic. * Changed order of entering phase and sending out event. This will allow conquest points to be calculated before any triggered abilities trigger from entering the phase (i.e. Boon abilities). * Fixed move_multiple_triggered's long description. * Added support for trigger id and conditions for move_multiple_triggered. * Fixed Eternal Beacon's ability descriptions. * Reduced the flicker of the zoomed base image when UI gets events from the core engine. * Changed Zungar Winddancer's ability desc to Etherdance 3. * New custom Rotting Juggernaut (Twilight). * Made Corpsebuilt more generic move_or_action w/ conditions. * Fixed an issue with condition piece_power_greater_than_parent_x_payment. * action_and_no_assign_damage can now be copied (Unhinge). * Fixed scaling of black center when no image is found. * Fixed makefile. Twilight pieces were not being packed w/ Windows version. * New custom Earwig (Witching Hour). * Modified action_choose_disrupt_destination to allow intervening triggered ability (Burrow). * New activated ability , take_control_if_disrupted. * New triggered effect, take_control_if_disrupted. * New custom Nurse Nighty-Night (Twilight). * Rolled Bit Top's ability into limit_can_shift_and_attack. * Changed choose_piece_as_target and choose_zone_as_target to just be choose_piece/choose_zone. Being a target is one of any possible conditions, no targetting is implied by the choice so it was changed to avoid confusion. * New ability limit_can_shift_and_attack. * New effect piece_cant_shift. * Fixed effect piece_cant_move. Wasn't setting target_instance_id. * Fixed inverse logic of limit_can_shift ability. Was keeping pieces from shifting at all to anything but the matching zones. * Zone of activation and activating action now go through undo engine. * Optimized regular and deathblow attacks in the special case of one damage assignee. No need to come back and check for more damage assignees. * Fixed bug in ability cant_be_disrupted (Nightfire Giant). * New custom Punch-Drunk Champ (Twilight). * Fixed Knight of Here and There's short description. * New custom Wildman (Twilight). * New custom Stormwatch Peak (Twilight). * New custom Sleeping Giant (Twilight). * New custom Boneclan Guardian (Twilight). * Fixed Droning Damselfly. It has Ambush 5, not Charge 5. * Updated Ambush to take a power calculation parameter. * New custom Fido (Twilight). * New condition piece_power_greater_than_parent_x_payment. * New calculation parent_ability_x_payment. * Some performance tweaks for the AI. 05/29/10 - 1.0.33 * Rolled Indisruptible, Blind Fury, and Protect into the single module cant_be_disrupted. * Fixed a lot of issues w/ Protect ability. Wasn't doing sustained effect when disrupted (only destroyed) also wasn't using new event_info classes and was expiring at the beginning of a phase not the end. * Rolled Accuracy and Overpower into generic deal_damage_dice_modify. * Moved Steadfast to take_no_damage_from_deathblows ability. * Moved Flux Crit to add_to_combat_damage ability. * Added a calculation parameter to add_to_combat_damage ability. * Fixed Soulwash Temple's short and long description, it has Crit 1, not Crit 3. * New custom Torch and Pitchfork (Twilight). * New condition trigger_declared_attackers. * New calculation power_match_pieces. * Rolled Unravel ability into generic gain_attribute_modify_activated. * Rolled Might ability into generic gain_attribute_modify_triggered. * Updated all modify type abilities/effects to be consistent in naming. * New custom Performance Artist (Twilight). * New ability modify_disruption_cells. * New abilities gain_attribute_modify_triggered and gain_attribute_modify_activated. * Changed zoom piece to be entire width of panel and larger height (but no longer square). * New custom Fish on a Bicycle (Twilight). * New ability using action_and_no_assign_damage, Unhinge (Twilight). * New condition zone_is_where_ability_activated. * Added new member to activated_ability class which holds the zone where the ability was last activated. * New condition zone_any. * Tweaked effect_modify_spawn_cost_piece_name to be more generic. * Rolled Timely Betrayal into generic action_and_no_assign_damage. * Migrated Clone ability to modify_spawn_points_triggered. * Optimized re-rendering of scaled pieces so that it is only done on a resize. Was slowing the wx GUI down a **lot** due to the dynamic font sizing, image scaling, etc. Downside is transparency of the bases seems to no longer work due to a wxMemoryDC issue. * Moved base rendering code to common routine. Was 2 copies of it, 1 for the board, one for the zoomed piece in the panel. * Added info event for when initiative die rolled for something other than initiative (i.e. Frightwave, Insubordination). * New event type for player rolling an initiative die. * Put up a dialog when trying to quit in the wx GUI when the AI is thinking. This prevents having to have a lot of checks for exiting all over the place which will slow the AI down and also prevents weird crashes when yanking the thread out from under it. * Fixed bugs in Haunt Gambit and Haste Gambit when interacting with the undo engine. * Added scoring cell condition to Lunar Handmaiden's Advance ability. * Added missing Unwishing Well to Chaos Well-Bred warband to bring it up to 16. * Random warband generator now supports limiting which sets, aspects, and lineages to include. See bin/random_warband.py for more info. * All special attacks now show the owning piece's name so when multiple of the same type of attack trigger (i.e. Ambush) you can distinguish between them. * Fixed Vortex and Reverse Vortex's short and long description. They were swapped. * wx GUI cleans up all threading before starting a new game. * Added support for specifying number of ai threads in wx game settings dialog. * Fixed issue w/ initial attack roll being modified outside of undo engine. * Fixed issue w/ Edged Fortune and calculated damage, actual damage was not being calculated after dice modifiers. * Fixed the lowest/highest power conditions to be consistent in using hooked check for power. * Removed unused static member var from Fluctuate. * Fixed issue w/ wx GUI and auto executing single choice actions. Was not triggering UI update so player's would see stale game state info. * Maded tournament initiative the default since that is how most people play. * Updated mingw environment to use pthread-win32 and added necessary dll to released zip file. * Fixed issue w/ Awaken. Need to make a temporary vector before moving all the pieces. * The controller of a mini now correctly reverts back to the owner when leaving play for any reason when under Mindlock. Was previously only happening @ the end of the turn. * Cleaned up Mindlock and moved all piece list handling into game_state. * Fixed a very long standing issue w/ the undo engine. Once in a while an action would be undone out of the order it was done. * Removed 2nd check on bool can_spawn in phase_spawn::generate_spawn_actions(). and also removed duplicate calls to can_zone_be_entered_into_by_piece in this code path. * Fixed bug where an enemy piece in an player's spawn row cell was keeping it from being eligible for spawning into. * Multithreaded AI is now implemented and working. It still has performance issues due to the memory allocator being used on some platforms. Use the -t flag to specify how many AI threads to run. Ideally you would run 1 thread per processor/core you have in your computer. * Fixed issue w/ multiple replacements for boolean hooks. (i.e. are_attackers_legal [Loner and Ponderous]). * Fixed Ambush when triggered multiple times for a single trigger event (i.e. Vortex). Was only doing one attack against the last one to initiate trigger. * Triggered abilities can now put effects onto the effects list on triggering, i.e. do not to be resolved via the ability itself. * Fixed a tricky interaction w/ Manifest (and similar abilities) and Copy Enemies. * Fixed uninitialized class member in grant_ability. * Fixed bug in Bloodthirsty and its variants. * Fixed makefile. Twilight pieces were not being packed w/ Linux version. * Piece lists are now sorted before deciding spawn actions. * Fixed issue w/ spawn_no_cost ability. Was adding a pass for each piece iterated. * Updated all pieces w/ exchange_pieces_triggered to use support trigger conditions. * Call init() on player after setting game_state's silver and gold player members so ai_threads can get at it. * All action derived classes overload operator== to allow comparisons (used by AI game states). * Fixed Mind Mulch, was triggering on pieces from either play going between reserves/graveyard. * Fixed an operator precendence issue in Copy Enemies. * Fixed issue w/ exchange_pieces_triggered not passing down trigger conditions. * Removed global id for actions. Not just used for id'ing for multithreaded version. * Converted Flummox 2 to grant_ability w/ conditions. * Migrated all of the memory pool containers into the game_state class. This is needed for multi-threaded AI support. This was a pretty intrusive change and touched just about every file in some way. * Fixed Frightwave, was allowing pieces with a spawn cost equal to or less than the rolled die. * Merged special_attack_single and special_attack_x using calculation ptr for calculating attack power. * Random warband generator now supports a list of auto adds for a warband. * Made action_and_add_to_combat_damage_activated copyable. * Random warband generator now handles Sybil, Grand Hive, and Omen Locust without generating illegal warbands. * Flux Ward is now a attribute_modify w/ conditions. * Cleaned up calculation classes, there was some duplication. * Merged Shadow and Shadow Field into a common cant_be_target ability with conditions. * Added ability description to print out when failing to copy an ability. * grant_ability checks stack flag before granting a static ability if the piece already has it. * Added stacks flag to ability class. Some static abilities do not stack. * Added Regenerate to copy_ability function. * Some of the Halo abilities were working only when the owning piece was engaged instead of unengaged. Some were also granting abilities to pieces out of play. * Fixed Soul Warden's Eternity ability, it was granting Shadow instead of Regenerate. * Rolled grant_activated_ability, grant_static_ability, and * halo_triggered_ability into the single grant_ability. * Rolled Unwishing Well's ability into sacrifice_piece_triggered. * New conditions piece_check_controller_spawn_phase and trigger_spawn_phase_entered. * New custom Cannon Fodder, uses Expendable ability. * Migrated Expendable to be action_and_add_to_combat_damage w/ discrete calculation. * Added new flag to modify_contribution_warband_limit to specify amount to add/remove from the matched piece. * Added missing Gargantuan ability to Grand Hive. * Rolled Gargantuan into modify_contribution_warband_limit. * Control fewer/more (local) creatures rolled into control_more_match_pieces and control_fewer_match_pieces. 04/10/10 - 1.0.32 * Fixed corner case of strike being declared, Disarm being used on the sole eligible attacker, and the combat not being declared ended. * Fixed issue w/ move_multiple. Was allowing 1 more than specified. * New custom Den Mother (Twilight). * Added calculation param to add_spawn_points_activated and add_spawn_points_triggered. * New calculations num_match_pieces and discrete_value. * Fixed Call to Arms by adding check for a creature being spawned. * Bloodlust is now a move_single_activated w/ conditions. * Rally X is now a move_multiple w/ conditions. * Call X is now a move_single_activated w/ conditions. * New condition piece_spawn_cost_equals. * Added an info event when an activated ability is activated but it does not resolve (i.e. due to some condition like scoring cell etc). * Converted Mighty Stride to move_single_activated. * New conditions piece_power_highest, control_match_pieces. * Cleaned up clearing of activated abilities. No need to query for current activated abilities, just match owning piece. * Fixed issue w/ spawn abilities and Mindlock. FAQ says spawn abilities can only be activated once per *turn*, not per phase. * Separated used_activated_abilities into one for spawn abilities and one for used combat abilities. * New undo class state_change_vector_activated_ability. * Rolled Hivetunnel into move_single_activated. * Moved Punishing Beast and Protective Beauty into Twilight as they were designated the remaining 2 pieces to make up the 60 piece set. * Removed all entered play trigger stuff from insubordination abilities and made them generic triggered. * New custom Carrion Warcharm (Twilight). * Rolled Intimidation into move_single_activated. * Rolled Deathwish, Tantrum, and Appease into the generic sacrifice_piece ability. * Removed check for owning_piece being declared in check_legal_attacker. * Fixed off by one in attack_type_from_str(). * New condition piece_check_controller_action_phase. * check_legal_attacker ability now also supports specifying attack types. * Fixed issue w/ disabling the attribute_x static ability. When done as a replacement was re-adding it instead of removing. * Rolled power_x and power_defense_life_x into attribute_x. * Removed display_desc from all conditions that shouldn't be displaying anything, which is pretty much all of them. * Moved all global zone containers (g_zone_map, g_all_cells, g_all_zones, etc) into the game_state class in preparation for multi-game state support for parallel evaluation by the AI. * Changed logic of game_state::is_unengaged to return false for pieces not in the dreamscape. It's not engaged or unengaged. * Fixed very rare occurance issue of Charge triggering Deathblast out of combat and never clearing marked_for_destruction. * Fixed targetting for Moondark Knight's Advance 2. * Removed type and obligation fields from the action_group class. They have never been used. * Rolled Pacifist and Ponderous into check_legal_attacker generic ability. * Fixed issue w/ check_legal_attacker ability. * Rolled Channel Hiveling 1 into the generic modify_spawn_cost ability. * Fixed issue w/ Arch of Triumph allowing spawning from reserves to reserves (only allow when zone is in dreamscape). * Added a small optimization when determining pieces to spawn. * Updated Raze ability to have multiple triggering conditions. * Rolled Petrify, Demolish, Smash, and Supersmash into a generic destroy_piece ability w/ conditions. * Fixed Strikeback to correctly unsubscribe when combat ends regardless of pieces disrupted/destroyed or not. * Fixed a few effects which were unsubscribing for the same event twice. * Bewitching Assassin has Ambush 5 not Charge 5. * Fixed event unsubscription issue w/ Bloodthirsty and its variants. * Changed Lethal Glory to not reuse a single effect. Was preventing it from being activated more than once and having cummulative effects. Also made it a sustained effect. Previously it would be executed and be done. * Removed double subscription for turn ending event in both ncurses and wx ui. * Removed duplicate call to init() with a copied ability. * Migrated Etherdance to move_single_triggered. * Updated Bloodcut Champion and Zungar Winddancer to handle their 'intervening if' correctly. i.e. check on trigger and resolution. * New condition piece_power_equals. * Changed trigger_owning_piece_in_play to trigger_owning_piece_match. * Made Provoke's activated flag be a counter since it does not stack. * Fixed a crash with an event subscriber unsubscribing in the corresponding event handler. * New custom Tempestuous Queen (Twilight). * Glory and Transmute are now the generic gain_conquest_points. Also removed effect from those abilities since it wasn't needed. * Rolled Defender, Constrained, and Impede into the generic limit_can_shift which uses conditions. * New custom Knight of Here and There (Twilight). * Changed Spirit Slayer to Spiritslayer (Twilight). * activated_ability now has the notion of assign conditions. This is needed to, by default, check if a piece is in play but allow for overrides/additions (i.e. Stained-Glass Angel's Manifest Reserves requirement). * Regular attack no longer checks for piece's eligible for blade assignment to still be in play, the default hook handler for get_eligible_blade_assignees handles that. Also removed is_in_play check from activated_ability::can_use(). This allows pieces w/ the Reserves requirement for a blade ability to work. * Fixed issue w/ Stained-Glass Angel not being eligible for assigning blades during combat when in the reserves. * Added hyphen to Stained-Glass Angel's name. * Constrained and Defender now are replacements instead of modifiers. * New custom Baleful Banshee (Twilight). * Fixed Backalley Skuntch's desc from Dampen to Dampen 1. * Updated modify_creature_spawn_cost to be more generic modify_spawn_cost w/ conditions. * New condition zone_is_current_combat_cell. * New custom Guardian Angel (Twilight). * New hook get_eligible_shield_assignees. * Rolled Manifest into spawn_no_cost_combat_assignee. * Removed some iterating from hooks where the type of hook wasn't relevant (i.e. modifying a value when it would just be default || replacement). * special_attack_single_triggered now takes a list of trigger conditions. Needed for Passionborn Assault. * move_single_triggered now takes a list of trigger conditions. Needed for Valorborn Advance Self. * New condition trigger_owning_piece_in_play. * Fixed issue w/ X spawn abilities not having a controller set and calling has_x w/ AI_OPTIMATION block. * Rolled Shimmering Watchtower's ability, Hell's Fury, and Halo into grant_activated_ability. * Removed gain_activated_ability. * New ability grant_activated_ability. * Added has_ability and can_use checks to grant_static_ability. Also added flag to prevent infinite recursion when checking has_ability. * Migrated Purge and Reverse Purge to move_single ability. * Added optional parameter to move_single ability, opponent_controls. Used by Reverse Purge, etc. * Made grant_lineage_local_allies the generic grant_lineage w/ conditions. * Changed Warpstrike X to a more generic special_attack_x. * Rolled Respawn and Animate Dead into a generic spawn_no_cost ability. * Moved some of the core functionality of triggered abilities into the base class. Also made is_cip a function that walks the conditions looking for a match. 03/06/10 - 1.0.31 * Fixed issue w/ zone lists/maps not being cleared before starting a new game. This appeared as pieces disappearing in the wx version. * Fixed issue w/ check for can_zone_be_entered and the stacking limit being applied to non-cells like the graveyard and reserves. * Fixed effect_modify_spawn_cost_piece_type, wasn't initializing the spawn_cost amount, so abilities like Clone X were not working. * Fixed Shapechange ability to only do it for creatures and in non-local cells (was just doing local cell). Also correctly sets notify for post sacrifice handling. * wx version now correctly subscribes for entering cell msgs to update screen (i.e. Vortex which does a simultaneous move of all). * Tattooed Squashbug was incorrectly marked as being aspect Fear, should be Madness. * Warband names are now checked case insensitive so that 'of' will match 'Of', etc. * Fixed Stray Warpstrike's controller for action to select target. Should be opponent. * Made Cleanse a generic move_single ability. * Added is ally check to Knight of Dusk and Dawn's Advance Janus 2 ability. * Added can_use_ai handler for move_single. Should keep the AI from activating stuff like Slip when it won't benefit from it. * Bloodcut Champion's Passionborn Assault and Valorborn Advance Self now only trigger on creatures, were also triggering on locations. * Bloodtusk Throne's ability checks the 'intervening if' clause as a part of the check for triggering and also on resolution. * Dense Harvest doesn't bother w/ an effect if the number of local allies is 0. * Tweaked the eval function a little bit to encourage striking at lower depths. * Put special logic in exchange_pieces_activated::can_use_ai for Twin ability to keep AI player from just doing it forever. * phase_action was missing call to hook for can_choose_shift_for_action. * Fixed Provoke ability. Was doing its effect for both action phases and wasn't subscribing to end of turn to remove hook. * Banishing and sacrificing a piece now correctly clear things as a part of leaving play (dmg, ability usage, etc). Moved the cleanup to move handler which is executed for all pieces' moves. However, this has brought up other issues like the AI doing Twin of infintely when both Twins are in its warband. * ncurses UI now matches up w/ event handlers from wx UI. * Added can_use_ai handler for exchange_pieces. Should keep the AI from activating stuff like Twin of <> when it won't benefit from it. * Optimized damage assignment choices for AI player(s). Speeds things up quite a bit. * Cleaned up the shift action. Had some stuff that was no longer used. * Made the max_phase_depth dynamic so that during a spawn phase an AI player will not skip spawning altogether to be able to shift into a higher scoring board position within max_tree_depth # of moves. * Added can_use_ai handler for special_attack_single. * Enabled writing out actions taken by players to help in debugging issues with the AI. * Updated move_single_triggered ability's desc_long to new method. * Fixed Assist Drive, Intercept Drive, Pursuit Drive, and Geography Drive. * New condition zone_is_closer_to_match_piece. * Venom now clears when piece leaves play. * Fixed Regenerate ability. Was set as a post replacement so default impl for destruction was still running which awarded bonus conquest/spawn. * Removed Bloodcut from ability description for Mask Dancer's Attract ability. * Fixed name and util_name in XML def for Sightless Eunuch (was Eunich). * Lots of changes to handle the OS X bundle (Dreamblade.app) correctly. It follows none of the standard things you'd expect as far as argv, pwd, and other things, ugh. Seems to only work currently on 10.6 (Snow Leopard). 02/21/10 - 1.0.30 * Venom, Deathblast, Demolish, Smash, Supersmash, and Petrify now check if a piece can be destroyed before doing it. Also check for legality to destroy when no cells available resulting in possible destruction. * Fixed Venom not clearing @ the end of a phase. * Small optimization w/ exchange_pieces. Exchanging piece A with B is the same as B with A. * Fixed stacking limit issue w/ exchange_pieces abilities. When controllers do not match, enforce it, if not ignore it. * Added support for custom trigger id & condition for exchange_pieces_triggered, so now Swap Drive works. * Fixed move_single. Was only iterating all cells but should have been all zones. * UI now subscribes for strike starting info event. * Cleaned up event msg for rerolling attack dice (die/dice). * Added display desc for more_pieces_in_reserves_than_opponent. * Enabled "overkilling" w/ damage when the AI is not thinking. This allows a player to both choose who to overkill (if so desired) and allows for things like the "may" portion of Trample. This is more intuitive (and mimics how people play in real life) than first assigning 0 to get this behavior. * Fixed issue w/ Trample showing owning piece's zone as choices, not adjacent zones. Also fixed handling of damage assignment legaility, only hook pieces in the target cell, enable hook for eligible damage assignees, and change vector arg to reference. * All zone conditions take a reference player now. * Fixed issue w/ Illuminati Pyramind and the condition zone_is_scoring_cell. * Rolled (no pun intended) Fortunate, Flux Fortunate, Curse, Flux Curse, and Madhouse into a single reroll_attack_dice ability. * New class type, calculation. Used for a one shot calculation of some kind. Currently used for calculating the number dice to reroll in abilities. * Some optimizations in some of the more expensive functions. * Fixed logic issues w/ piece_spawn_cost_le_than and and piece_spawn_cost_ge_than. * Fixed Cannis Horribilis' Deathform 5, was set to 4. * Fixed operator precendence issue w/ checking damage outside of combat. * special_attack now sends out a declared_attackers event which fixed Cursed Faerie's Fade not triggering after a Spur. * Fixed Spur's attack cell. The attack is done by the piece w/ Spur, not the chosen ally. * Changed Fade and action_attack to handle special case of an attack starting w/ 0 power but never gets "bumped" by other abilities (i.e. Darkheart Cottage). Per the FAQ under these circumstances an attack did not happen and Fade doesn't trigger. * Fade now works correctly when owner does an attack in combat, but wasn't part of the original strike. * Made Blight a generic lose_abilities ability. * Added more flexibity to static version of Ambition via conditions. * Rolled Follower X and Loner into check_legal_attacker. * Changed Last Gasp and Beasts' Fury to be a generic deathblow_during_any_action_phase. * Removed Charge 5 triggered ability from Blademiller. * Merged Duplicate and Triplicate into a single generic ability which can also handle any # of pieces not counting. * Made Warfang Keep's ability generic, modify_conquest_for_destroyed. * Fixed Warfang Keep's ability. When destroying a piece check for conquest/spawn generated before moving piece to graveyard. * Made modify_power a more generic modify_attribute. Changed Bolster, Skull Hill's ability, and more to use this. * Rolled Nullify, Web Breath, and Demoralize into one generic ability cant_activate_ability. * Changed Assault (both activated and triggered) to use the generic special_attack_single. * Changed Illuminati Pyramid's ability to be a generic modify_zone_conquest ability. * New condition zone_is_scoring_cell. * Fixed Turbo ability's long str. * New conditions zone_is_not_occupied_by and piece_is_x_cells_away. * Made Reinforce and Arch of Triumph's ability a more generic modify_spawnable_cells ability. * Modify defense effect now shows the amount being added/subtracted from piece's defense. * Trimmed pass action's text (removed 'effect'). * Made Warpstrike more generic special_attack_single w/ conditions. * Made Immortals' Resting Place's ability more generic. * Fixed Expel ability, was behaving like Scare. * Added Intercept Drive to Aggrocopter (Witching Hour). * New conditions piece_life_lowest. * New custom Screaming Satellite (Witching Hour). * New conditions zone_is_forward and zone_is_backward. * Replaced Pursuit Drive and Assist Drive w/ move_single_triggered. * New conditions piece_spawn_cost_lowest and piece_spawn_cost_highest. * New variation of Vortex, Reverse Vortex which goes counter-clockwise. * New condition zone_is_targets_reserves. * New condition trigger_piece_changed_zones. * Fixed Manic Miner's Mine ability, was set to be a static ability in the XML definition. * Energize, Battle Energize, Vault, Mine, Heartsblood Temple, etc now use the generic add_spawn_points_activated and add_spawn_points_triggered abilities. * Moved Payback to be add_to_combat_damage_x_target. * New condition control_more_local_creatures. * Fixed id of condition control_fewer_local_creatures. * New condition control_fewer_creatures. * Moved Stalwart, Pack, and Heroics to use add_to_combat_damage_x. * Removed Assisted Strike, Duel, Crit, and Flanking and now use generic add_to_combat_damage w/ ability pre-condition. * New condition match_pieces. * Made Crit X, Fumble X, etc a generic add_to_combat_damage class. Also updated Flummox to use this. * Commonalized the handling of hash_str for both UIs. * Added support for changing the ai tree and phase depths from the wx config dialog (it also can be done on the command line). * Fixed Mindthief. Was having owner continuously move all pieces from their reserves after opponent moved one. Also owning player can do their move even if opponent has nothing to move. * Reversed UI display str for ncurses using lowercase for gold player (usually the human). * Use black font for multi-aspect base in wx UI. * Fixed Mindstrike was targetting owning piece's reserves. * Fixed Awaken, Double Stakes to always put the removed from game creature to owning player's graveyard, not controller. * Fixed an issue w/ Rewind in the event that Chronosphere is destroyed before it's triggered ability can be resolved (via a Splat). Now check for being in play on resolution. * Fixed a potential issue with a destroyed or sacrificed piece not controlled by its owner going to the wrong graveyard. * More optimizations with getting a player's graveyard/oop/reserves and the pieces in them. * Small optimizations in checking for spawnable pieces. (Only checking can_spawn once for each piece, and sorting by inverse spawn cost). 01/20/10 - 1.0.29 * OS X release only (unannounced). * Lots of changes to get Mac OS X wx GUI build working. * Added missing check for targetting in Isolationist's Expel definition. 01/08/10 - 1.0.28 * Removed the need for duplicate vars for base UI/game stuff now that a common startup routine is used for both console and GUI. * Removed 'Unique Dream Lord' from bottom stats. Dream Lord is a keyword ability which implies that, but doesn't need to be shown. * Cleaned up which messages get shown as a result of an event coming in. No need to show move events when shifting/spawning. * Fixed logic bug when calculating dynamic font size which caused Windows GUI version to hang when certain pieces were used. * Fixed Tower of Unquenched Flame's util_name. * Doctor Shocksalot's ability is called Chain Warpstrike X, not Insane Chain Warpstrike X. :) * Fixed a crash that happened under certain circumstances when starting up the wx version (unit'ed ptrs). * Fixed spelling error w/ Chrysotic Plaugue def which was keeping images for that set from loading. * Made Halo (static ability) and Eternity a generic grant_static_ability. * New condition trigger_turn_ended. * Made Unmake, Fade Ally, etc a generic banish_single ability. * Fixed issue when both players have a Falling Man and the attack from one kills the other leaving Splat with nothing to sacrifice. * Fixed the corner case of a creature being targetted by Ferocity twice during the same combat and having an active Phantom ability causing the piece to be disrupted twice. * Instead of bailing out when 0 dice are to be rolled for an attack just skip the roll part. There is a possibility that with the Dicestrike etc abilities there will be no dice rolled but damage blades to assign. Shields correctly do not trigger on this damage compared to 0 dice rolled, only *rolled* damage is considered. * Fixed Dicestrike so that it cannot allow rolling X fewer dice if there are lass than X being rolled for the attack (per the FAQ). * Fixed issue for abilities that key off of calculating attack dice and the attack ends up being 0 dice. * Fixed crash when not showing UI (debug option) and having a human player. * Fixed Reckless Hunger. Wasn't resolving correctly after triggering it's first part which was being declared an attacker. * New custom Demented Stepmother (Twilight). * Changed Geomancy, Frightomancy, etc to a more generic power_defense_life_x static ability. * New condition piece_in_same_column. * Changed Thantomancy, Darkheart, etc to a more generic power_x static ability. * New condition piece_is_not_ability_owner. * Fixed pieces that used Fight now used updated for stuff like {P}. * Fixed Virtuous Maiden. Was applying Enrage to everyone. * Fixed event_entity's dbg print in event_send. * Changed Fight, Weaken, Incite, Enrage, etc to a more generic modify_power static ability. * New condition trigger_phase_exited. * Migrated Raze to generic move. * Fixed Wreckless Wrecker's XML def. Was putting Raze in static ability block. * Migrated Bloodport ability to generic move. * New condition zone_is_occupied_by. * Migrated Pearlthorn Castle's ability to generic move. * New condition zone_is_ability_piece_current_zone. * Migrated all Teleport abilities to generic move. * New conditions zone_is_non_portal, zone_is_in_dreamscape. * Migrated Unknow ability to generic move. * Moved Baba Yaga's Hut's spawn ability into the generic move_single ability. * Fixed Annihilate X to put piece in owner's OOP, not controller's (which could be different). * Moved Annihilate X into the generic move_single ability using the new conditions. * New conditions piece_life_is_le_than, zone_is_targets_oop. * Moved Longstride into the generic move_single_triggered ability using the new conditions. * New condition trigger_shift_phase_entered_controller. * Moved Bogillian's Slip into the generic move_single ability using the new conditions. * New conditions piece_at_end_of_row and zone_is_other_end_of_row. * Changed Copy Enemies to handle recursion without checking explicitly for pieces named Ego Cannibal. Also now utilize is_copied flag of ability so that other pieces that might have copied abilities (so copied abilities are not copied). * Added handlers for abilities resolving both with pass and with actions taken (with or without targets). * New flag for event_ability_resolved, passed_on_may. * More infrastructure to support all abilities to broadcast when they have resolved. * Updated conditon trigger_blade_ability_activated to setup delayed trigger on ability that caused the trigger resolving. * Moved state var up into action class since so many abilities/actions use it. * Removed pass_num from action_handle_damage_outside_of_combat. * Added new modifiable flag to does_ability_trigger, resolve_now. Used mostly for abilities that *trigger* on a blade ability being successfully activated, but not resolving until the ability that was activated has resolved (i.e. Fear-Edged Advance). * Fixed Oneironaut Secundus's Swap Janus, was ASPECT_JANUS. Janus is a lineage. * Fixed get_conditions_xml, was only iterating once, needed to be a while loop. * Changed choose_zone_as_target's text to Target [zone]. * Removed Passionborn Assault from Scarred Harbinger. * Fixed Enrage's desc to show amount. * Fixed reactivate static ability's desc. * Added flag to effect_disrupt_to_occupied_cells for allowing only occupied cells only (replacement -vs- modifier). * New condition trigger_spawn_phase_entered_controller. * Adding condition handler for move_single_triggered and move_multiple_triggered allowing for generic trigger handling. * Added table for mapping event_id strings to event ids. * Fixed Skyshield Eagle, Totem Lord, and 'Fraidy Cat's expiration id, were set to combat starting, not combat ending. * New conditions piece_spawn_cost_le_than, piece_spawn_cost_ge_than, and piece_name_equals. * Updated Splat to do one attack at a time and re-evaluate who is local/adjacent. * Implemented Probability Walker, for some reason it was a copy of Drakesnail. * Consolidated all exchange type abilities into one ability w/ conditions, i.e. Transpose, Swap, Mutation, Deathform. * Added new method is_unengaged. Now that there are conditions is_engaged checks for in play and is_creature so !is_engaged no longer works. * Consolidated all Wound type abilities into one ability w/ conditions. * Combined Purge and Reverse Purge into one class w/ a flag. * New conditions piece_in_reserves, piece_in_graveyard, zone_is_ability_owners_graveyard, piece_controller_is_ability_piece_controller, piece_controller_is_ability_piece_opponent. * Changed condition strs from a vector to a map. * Added handling of non-cell zones in is_cell_closer and is_cell_further_away now that conditions are being used. * New conditions piece_is_ability_owner, piece_is_enemy. * Consolidated all abilities involving moving a single piece. This was a big change but means a lot less code to maintain. Advance, Skirmish, Expel, Lure, Scare, Attract, Tempt, etc all fall into this category. * New custom Eternal Beacon (Twilight). * Fixed Sir Wolven's aspect cost. Was set to madness and should be valor. * Consolidated Advance All, Skirmish All Local, Terrify, and Attract All (i.e. Beckon) into a generic Move All w/ conditions for target and dest cell. Also added triggered version. * Removed _generated_actions param from all resolve_ability implementations. Only 2 abilities were using it, and they have now been changed to re-evaluate after every action. * Updated Deathblast ability to be more correct rules-wise. A snapshot of enemies local to the piece w/ Deathblast is taken when triggered and removed check for targetting since the ability does not mention target for the attack, just the location. It also re-evaluates after every attack. * New conditions for zone being adjacent to target, zone being closer, and zone being further away. * Changed effect_banish_piece to be an action. * effect_sacrifice_piece checks for piece to be in play before doing sacrifice. Since it is a delayed trigger, piece may have left play. * Changed Wail ability to be re-executed after each creature is banished rather than having all actions created at once. There may be circumstances where a piece may leave play due to another piece being banished. Re-evaluating after every Banish eliminates this corner case. * Added check for conquest points going below zero in hook and setting to 0. Might be used with an ability in the future that lowers conquest points for scoring cells. * New effect remove_piece_from_game_on_trigger. * New custom Dragon Sage (Twilight). * Changed Dicestrike ability to also take long description. * New custom Archdevil (Twilight). * New custom Spirit Guide (Twilight). * New custom Rainforest Zealot (Twilight). * New ability Berzerk Crit X (Twilight). * New custom Unnerving Apparition (Twilight). * New custom Dreadful Druid (Twilight). * New ability Flux Curse (Twilight). * New custom Jeeves (Twilight). * New piece conditions piece_is_local_or_adjacent, piece_is_local. * Changed Warpstrike X to take a list of conditions rather than having all the flags + 1 condition for calculating attack power. * New piece condition piece_is_unengaged_creature. * New custom Slaughter Gauntlets (Twilight). * New custom Radiant Warcharm (Twilight). * New custom Fiery Muse (Twilight). * New custom Squamous Horror (Twilight). * New custom Pentacles (Twilight). * New custom Zungar Courier (Twilight). * New custom Runetagged Master (Twilight). * New custom Grizzled Veteran (Twilight). * New custom Four Horns (Twilight). * New custom Adept Envoy (Twilight). * New activated ability, Ambition (activated version of static one) (Twilight). * New effect, gain_conquest_if_claimed. Used for activated Ambition. * Cleaned up triggered Skirmish's desc. * Added set to piece info displayed via -P. * New activated ability, Unearth. Unearth - You may put target creature from your graveyard into this cell. If you do, at the end of the turn remove it from the game. * New effect sacrifice_piece_on_trigger. Moved effect_sacrifice_piece to be an action and removed action_sacrifice_unique_piece, now that just uses action_sacrifice_piece which takes a context str. 11/30/09 - 1.0.27 * New activated ability Expendable. Expendable X - You may sacrifice this creature. If you do, deal +X damage this combat. * New custom Recalcitrant Roach (bageljester). * New custom Brighthammer Lancer (bageljester). * Added new page to config dialog. You can now change the background, top, and bottom images via this dialog. * New command line flag -U. This disables showing of piece images (even if present). * Both ncurses and wx applications use the common main() rather than having 2 separate handlers of args. This also means you can use all the arguments available with the ncurses version (that are applicable). * Broke out game settings dialog into a tabbed interface and added a tab for UI settings. * wx UI now registers for EVENT_ID_CONQUEST_TIE event. * Put back in sorting by name for reserves but then doing the sort by spawn cost. This means pieces of the same name will be adjacent and pieces will go from lowest to highest spawn cost. * Added support for loading images for pieces. See doc/README.wx for more details. Also added skeleton directory structure. * Tweaked the center black rect drawn inside the piece base to fit without showing on the corners. * Added support for universal binaries when building on OS X. This allows the program to be run on older PowerPC Macs. Now if I just had a Mac to build on... * Pieces in reserves area are now sorted by spawn cost. That seems to be how most players (including myself) sort them. * New sorting predicate for pieces. Sorts on spawn cost and if == sorts on aspect cost. 11/23/09 - 1.0.26 * First release w/ GUI using wxWidgets for all platforms. See doc/README.wx for more info. Info about ncurses version is now in doc/README.ncurses. * Fixed the confirm quit current game, wxNO -> wxID_NO. * Fixed the focus issues w/ dialogs on Windows as well as the repainting by re-doing all of the paint handlers. Also got rid of the flickering on all platforms when getting events. * Don't bother entering next phase when exiting previous if game is over. * Added a new post move info event for the UI so it can get the latest positions of minis after a move. * Reduced font size in listboxes for non-Windows platforms. Default is way too big. * Added wxLB_HSCROLL to action and msg listboxes on Windows platform so you can scroll horizontally when the text is wider than the control. * Changed order of move events such that triggered events that are triggered by the move show up *after* the move. It was confusing seeing ability activated, Ambush triggered, piece moved. * Fixed up a bunch of compiiler warnings that showed up when using MSVC. * Fixed Bolster's desc when using a target condition. * Fixed Whisper Gambit 6 ability, was doing < rather than <= than. 6 or less, not less than 6. * Fixed Gloom ability, was not checking for creatures. * First pass at GUI is done. Playable, but not the prettiest. Future work will involve making it better looking. * Shortened spawn action string. No need to include the word 'cell'. * Shortened length of shift action string. No need to include cell piece is in. * Changed order of actual move and event sending for a shift. Event happens after move. * Lots of GUI work done, too much to individually mention. * New class for cached game state. Needed for threaded GUI app. * Removed wxIMAGE_QUALITY_HIGH from wxBitmap constructor. Was causing images on Linux to not show up. * Fixed modality of game settings dialog. * Fixed race condition between game engine event handler and wx GUI event handler. * Revamped entire WX based GUI layout. No more pop-up actions dialog. * Changed {} to () for spawn point costs. * All pieces w/ Reinforce now specify description. * Fixed Manifest's description. 11/11/09 - 1.0.25 * Added support for creating Zungar Citadel's ability from XML. * Removed code for piece factory now that all pieces are in XML format. * Enabled Zungar Marauder's Charge 3. Was commented out (probably for testing). * Fixed Queen Raven's combined ability description. * Converted all Serrated Dawn pieces to XML. * Updated combat sequence in action_regular_attack and handle_damage_outside_of_combat. They can now correctly handle the corner case of more than 2 passes to resolve deathblows which can happen when a creature can make deathblows in phases other than the normal ones. i.e. Bloodcut Behemoth. * Added Mighty Warpstrike to abilities that can be copied/created from xml. * Fixed Totem Lord's set, was set to Serrated Dawn. * Converted all Night Fusion pieces to XML. * New ability Legend ~ Legend ~ - You may only have 1 miniature with the name ~ in your warband. * New custom See Saw. Uses Equistrike. * New ability Equistrike. Equistrike X - Whenever this creature is chosen as an attacker, if both players control the same number of creatures in this cell, its power that combat is +X. * Changed Mimic to use new effect effect_set_power. * New effect effect_set_power. Mimic is a replacment effect w/ duration and it was using the effect_modify_power which worked because its starting power was 0 but was not correct. * Separated out the warband contribution hook into two, one for per mini count, one for warband total. * Converted all Anvilborn pieces to XML. * Updated Etherdance to check for still being in play before resolving ability after triggering. * Removed notion of pass number in action_regular_attack. Due to some pieces having the ability to make a deathblow in any phase, there could be more than 2 passes. * Fixed Bolster, was also applying to enemies. * Fixed Tragicomic Gunslinger's Insane Warpstrike ability. Was using warpstrike_lineage and Janus. * Fixed Conquest Synergy via xml was using Swarm Synergy ability. * Fixed Rage of One. Now only triggers for allies who attack alone. Was also triggering for enemies. * Fixed all versions of Reinforce. Had some inverse logic checking for the cell already being in the list of available spawn cells. * Added modifier_post support to hooks for getting activated, triggered, and static abilities. * Changed Blight and Blight Local to have locations lose their abilities rather than not allow their use. No difference as far as play but abilities under the effect of Blight will no longer show up on the extended view for a piece. Also if a custom ability is created that gains abilities from a location that would also work. This also ensures that Blight's interaction w/ Soulwash Temple (as stated in the FAQ) works as expected. * Fixed effect move_creature_between_zones_if_target_destroyed, was passing an effect cast as the owning_ability. * Consolidated all other abilities that were specialized based on aspect/lineage. * Consolidated Blight, Expel, Scare, Tempt, and Bolster. * Consolidated Appease, Attract, and Mighty Assault using piece conditions. * Consolidated Reinforce X and Nullify X using piece conditions. * Consolidated Weaken X Y and Pack X using piece conditions. * Consolidated all versions of Enrage using piece conditions. * Consolidated all versions of Raise using piece conditions. * Rolled warpstrike_aspect and warpstrike_lineage into one class using piece conditions. * Consolidated all versions of Advance, Advance #, and Skirmish by using piece conditions. * Made Incite more generic by having it take a piece condition. Updated Double Talker to use a condition of type CONDITION_TYPE_PIECE_IS_OF_LINEAGE_HELLBRED. * A bunch of new conditions CONDITION_TYPE_PIECE_IS_OF_ASPECT_X and CONDITION_TYPE_PIECE_IS_OF_LINEAGE_X. * Fixed a few small typos w/ the bin/calculate_ability_cost.py script. 11/03/09 - 1.0.24 * Ctrl-C now works on Windows. * Removed the need for batch file on Windows by programatically resizing the console window to the correct number of columns/rows. * Fixed UI resetting display of both initiative values when a reroll happens. There are now cases where only one player rerolls (tournament initiative rule enabled and one on first turn) * Removed 'supported_pieces' target from makefile. No longer needed. * Added new script to calculate the cost of a piece's abilities. Useful for creating customs. Uses the determined algorithm for calculating a piece's base spawn cost using power/defense/life. On windows it is in the same directory as the program, on UNIX platforms it is under the 'bin' directory. * Fixed Flame Harrower's XML def. Ability cost and Assault amount were wrong. * Cleaned up some pieces' flavor text. * Cleaned up a a lot of abilities' long description. * New utility functions to dump all supported miniatures stats. Specifying -P prints out the equivalent of the bottom sticker for every supported piece. * Added list of aspect cost strs for stuff like Beacon . * Fixed spelling of Tower of Unquenched Flame's ability id. * Fixed Bloodlust ability, was using Advance's ability id. * Added Janus lineage to Thrice-Crowned Androgyne. * Fixed Lord Slobber's set, was set to SET_CORE. * Converted all Chrysotic Plague's pieces to XML. * Removed tags from Ferocity in Boneblade Servant. * 2 new types of conditions. Local ally lineage and local enemy lineage. Updated Double Talker to use this. Displayed as {Hv} and {xHv}. * Updated AI hint code for spawning locations to use new condition type id rather than checking description for being a scoring cell. * Added 3 new condition classes for checking controller of a spawned piece against the controller of the ability hooking it. * Made Dampen a more generic ability so I can have it apply to both players or just one or the other. This will allow for stuff like 'Leech X: Your creatures cost X more to spawn'. I plan on doing this with a lot of the abilities which are similar except for a very small condition like applying to an aspect/lineage etc, will reduce the code base significantly and allow more customization. * Added type field for all conditions. * Fixed bug w/ spawn_point_lineage_creature_only. Wasn't checking for creature, just lineage. * Fixed bug w/ Dampen, was adding spawn point amount to ptr not contents of it. * Fixed a crash with Ferocity's effect interacting with the Phantom ability. Can't remove a replacement while iterating them. Instead of removing in the hook I now use a flag like I do in Chameleon to prevent infinite recursion when disrupting inside of a hook (which is what happens when Ghost of the Key affects a piece who had Ferocity assigned to it.) * Fixed random_warband.py script on Windows w/ no arguments. 10/25/09 - 1.0.23 * Haste Gambit now unsubscribes for events when ability has resolved. Was crashing w/ multiple subscriptions. * My utility file random_warband.py is now included with the program. On windows it is in the same directory as the program, on UNIX platforms it is under the 'bin' directory. * Added a new flag -p. This will print out the names of all supported pieces. Will be used by the random warband generator and also for verifying spelling of pieces specified in warbands. * New utility function all_piece_names, returns a vector of strings with all compiled in and XML defined piece names. * Updated initiative code to handle either a single player re-rolling (for 1s) or both (for ties). Previously both players rerolled for any of those conditions. * New tweakable in rules.conf, tournament_initiative, this follows the tournament initiative rules per the Dreamblade DCI Floor Rules. See doc/README. Default is 'false', to enable it set it to 'true'. * Modified piece not found error text to suggest checking spelling of piece name. * Fixed spelling errors for piece names in some of the sample provided warbands. * Added a has_x handler for Flicker to speed up AI. * Updated Flicker to use action_activate_cip_ability correctly. It passes it's controller as the controller and the selected ability's owner as the ability controller. * Finished implementing action_activate_cip_ability (for Flicker). * Fixed Corpsebuilt's on_triggered handler to match the prototype. * Fixed a crash with encumbered spawn points (Energize Bloodcut). * Beasts' Fury now checks for an action phase for allowing deathblows (as Last Gasp does). 10/21/09 - 1.0.22 * Fixed a ptr shadowing issue w/ effects in Nightstrike. * New custom Mr. Fixit (Witching Hour). * New ability Blackmail (Witching Hour). * Updated action_activate_ability to take an ability controller as an argument. Updated Wish, Deathrip, Edgemaker, regular attacks, and the spawn phase code to use this new parameter. * Added blade_assign_player and blade_ability_player to regular attacks as well as methods to change them. Will be used for Blackmail and other abilities that may allow the opponent to control blade assignment and/or blade ability resolution. * Fixed the Rewind only triggering once issue. Was subscribing with the wrong callback for turn end events. * New action for rerolling initiative. Gets rid of the call back into the phases hack after resetting initiatives to invalid and the do/while loop for handling actions. * Very BIG change. Revamped action (and derived effect/ability) controller to distinguish between controller and beneficiary. This will allow anyone to control them (i.e. for the Blackmail ability in Witching Hour). Pretty much every class had to be changed for this so I may have broken something. Having the correct player associated with all actions will also allow the AI to better score the game after making moves. * Fixed encumbered spawn points effect. Was always granting to gold player. * Fixed controller of 'may' for deathblows outside of combat. * action::controller and now goes through undo engine. * controller of an ability is now set when either activated or triggered. This is needed in the event of very uncommon corner case of a piece being under an opponent's control and gaining abilities. static abilities are always the piece's controller. * Fixed id of Vortex ability, was using Swap's id. * Changed blade type for Unsated Ragedrake's Trample ability to be of type BLADE_COMBAT. * Cleaned up Trample ability. * Converted all Baxar's War pieces to XML. * Added Janus lineage to Honor Guard. * Added scoring cell condition to Baxar the Soulstitcher's Call ability. * Moved generate_dice_combinations to the dice module. * Insubordination abilities, Chaos Drive, and Frightwave initiative rolls now go through engine. * Added check for unengaged for Longstride's trigger in addition to when it resolves. * Attack ptr is now passed in event for declared attackers. Needed to tuck it away for new Relentless ability. * Fixed Bloody Glory, it grants the conquest points if the number or above is assigned for damage. It was only allowing if over specified amount. Also now makes sure that damage came from an attack by the controller of Bloody Glory or from an ability who's controller is the same as the controller of the piece w/ Bloody Glory. * Added piece assigned to and context parameters to event for assigning damage. * New ability Relentless. This was in the rulebook, but never used. It is similar to Blind Fury. "Whenever a creature with an active Relentless ability attacks, enemy creatures damaged by the attack can't be disrupted." * New ability Invigorate X. This was in the rulebook, but never used. "While allies are local or adjacent to a miniature with an active Invigorate ability, they have +X life." * New ability Drain X. This was in the rulebook but never used. Gateway to Psychosis now uses a version this w/ a description override. "While enemies are in the same cell as a miniature with an active Drain ability, they have -X life." I've made the generic Drain apply to all creatures and a Drain Enemies would do what the original intended Drain would have done. * If a piece being disrupted is not an enemy of the disrupting player their portal is now an available cell to disrupt to (i.e. Rally Lost). According to the rules you cannot disrupt an *enemy* creature to your portal. * Removed stacking limit check on creatures for player's portal. The rules state you can spawn any # of your creatures in that cell. * Added new param to get_disrupt_cells hook. The player doing the disrupting is now passed so Exile and Toss's effect now only applies to the appropriate player. This is needed for Rally Lost. * Fixed a crash w/ Rampage's effect move_creature_if_all_targets_destroyed in DEBUG mode. * Fixed handling of X spawn abilities with an active Boost ability. Now correctly activates with correct X cost (not the paid cost). * Pushed default 'no zero' has_x behavior up into base class. Only ability that really modifies the values right now is Mindlock. * Fixed base class of activate_x_cost_ability. * Fixed set id and rarity loading from XML. * Fixed Panic's long description. * Fixed Blood-Ash Infantry's flavor text and Panic value. * Fixed Mighty Stride, was calculating highest power for each cell instead of the entire dreamscape. Also only iterate over the cells, not all zones. 10/13/09 - 1.0.21 * Single actions are no longer executed out of the AI's loop. It was causing the game to proceed sometimes a little ahead of the specified phase depth and skewing the evaluation function scoring. AI now won't do really dumb moves like moving from B5 back to his portal. :) May slow things down a wee bit but pruning should improve offsetting it. This significantly reduces the "horizon" effect of the AI. * Consolidated AI expectation behavior into ai_player class. * Added condition check for abilities that activate other abilities, i.e. Edgemaker, Wish, Deathrip. Requirements for those abilities still must be met like scoring cell, local ally aspect, etc. Got ruling from JeffV. * Fixed a bug w/ Stained Glass Angel's Manifest . It is a modifier not a replacement for eligible blade assignees. * Added info event for player choosing shift or strike for their action phase. * Added an AI optimization for spawning locations that require being in scoring cells as a condition to use their ability. * Mimic looks for other creatures w/ Mimic through hook. No ability grants Mimic yet but this future proofs it. Also fixed it so that pieces without triggered abilities could be targetted. * Added Advance and Advance . Not sure how I missed these. Updated Moondark Knight and Knight of Dusk and Dawn, as well as the reactive abilities that trigger on Advance. * Fixed a nasty crash, w/ Shimmering Watchtower's ability. Only happened when a piece was at the end of the list of all pieces. * Updated move and exchange effects to do nothing when the destination zones are the same. So it does nothing, i.e. a Charge/Ambush etc will not trigger. Got ruling from JeffV. * Charge now only triggers if it enters an enemy occupied cell, not every time it enters a cell (which did nothing when empty). * Chameleon ability checks for being in play for static ability to apply. * Tweaked eval function for board position a wee bit. * Revamped all of the XML loading. Hopefully I didn't break anything. * Fixed handling of initial placement zone specifications in warband files. Now correctly handles multiple pieces of the same name in different starting zones. * Made scoring cell and # of conquest points configurable for each cell. Tweakable in rules.conf. * Converted the remaining pieces in the core set to XML . * Fixed crash w/ activated_static_ability when expire id is hit but was never activated. * Fade is now a triggered ability as it should be. 09/30/09 - 1.0.20 * Changed actions dialog to be modeless so that pieces can be viewed in large form while deciding up on action to take. * Fixed shadowing of ability pointer when creating certain abilities from XML. * New custom Miss Discipline (Witching Hour). * Added new ability gain_activated_ability_cip. This will be used for Miss Discipline's {CiP} Scare X ability. I've modified her ability somewhat to make it work within the engine but still behave (I believe) the same. As originally written it is a combined triggered and activated ability. With my changes it is a {CiP} ability that grants Scare X until the end of the phase which should accomplish the same thing until there is an ability that lets spawn abilities be used more than once in a phase. It will also make working w/ Flicker more straightforward. * Added support for X spawn activation cost for ability Scare . Will be used by Miss Discipline. * Added missing text descriptions for newer state change classes. * Changed the venom mechanic to not use statics for keeping track of assigned venom. * Changed Fluctuate to not use statics for keeping track of scoring cell amounts. Also changed it to only track cells, not all zones. * Changed Double Stakes to not use statics for keeping track of non-cummulative effect. * Changed Bloodletting to not use statics for keeping track of destroyed pieces etc. * Modified custom_counter map to be the more generic > * New file sdl_gui.cpp. At some point this will be the "eye candy" GUI version of the game. * Made Twin of ability's ai activation hint counter a class member in preperation for new threaded AI. * Added Charge to abilities that can be created via XML. * Converted Blind Spikemauler, Raging Tusker, Savage Ogre, Bloodthirsty Redcap, Blood Wolf, Boneblade Serpent, Boneclan Hunter, Book of Nothing, Brighthammer Avenger, Chrysalis Spinner, Darkheart Cottage, Doctor Ape, Doomball, Doomsinger, Dreadmorph Ogre, Dreamreef Marauder, and Dreamstuff Entity to XML. * Converted Axemorph Demon, Ardent Zungar, Asymlum Escapee and Barbstrider to XML. * New files for running the game in a separate thread. * New files for choosing action pop up dialog. * Updated makefile to support different extensions for intermediate files. This lets me keep a Windows and Linux build in the same tree. * New directory 'res', also added a png of the dreamblade map. * New files for game settings dialog. * New files ui/wx_gui.c/h. Graphical port to wxWidgets. ncurses will also still be supported. * Updated makefile for wxWidgets targets on all 3 platforms. * Added -? flag for seeing usage since launching w/ no args gives default args. * Fixed Deathboon's sustained effect. * Fixed up calls to is_enemy/is_ally (which checks is_creature) ensuring before is_engaged. * Cleaned up default handler for can_strike_in_cell. * Changed Dicestrike and Reckless Hunger to not need simultateous resolution when first triggered (declared attacker) but does use simultaneous resolution when attack starts and dice have been totalled. * Fixed Bloodthirsty . Made check for any other local lineage. * Changed order of Reckless Hunger's options. May always goes last. * Added Janus lineage to Jack-in-the-Box. * Changed Jack in the Box to the correct Jack-in-the-Box. * Revamped event sending for declared attackers. Now just one event is sent since they are declared simultaneously. Updated all triggered abilities that trigger on being declared an attacker. Also updated Dicestrike to be 2 phased since it triggers before total number of attack dice has been calculated. i.e. Darkheart Cottage etc. Also, Mimic's effect was going into effect post dice calculation, so now the declared attackers event goes out right when they are declared. * Fixed Trample's effect. Was allowing assignment to adjacent cell if at least one local enemy had enough damage assigned to destroy/disrupt, has to be all. * Removed Fight I plan on creating a local_[ally/enemy]_lineage condition. * Converted Fight to be just generic Fight and use new condition for local enemy aspect. Updated Bloated Parasite to use this. NOTE: Ability text will not match actual miniature text (Fight Passion +2 -vs- {xP} Fight 2) * Converted Bloated Parasite to XML. * Changed local ally/enemy aspect to query aspects through hook. * Added new condition for local enemy aspect. Will show up similar to local ally aspect. {xV} means a local Valor enemy. * Converted Jack of Blades to XML. * Converted Hellshrieker to XML. * Converted Alluring Succubus to XML. * Fixed end_of_row for some of the cells which were wrong. 09/19/09 - 1.0.19 * Added check for is_creature to Reinforce Battle. * Bunch of small optimizations in some frequently used hooks. * Changed shift event to an info one. No abilities trigger from it and it's very expensive to do while the AI is thinking. * Another optimization for keeping track of pieces controlled by silver and gold players. * Converted All-Seeing Mage to XML. * Fixed Doctor Shocksalot's activation type, it's non-combat. * Removed argument to action_assign_damage. Action now determines damage type from arguments. Will allow things like a {Shield} Mass Wound to not trigger abilities that look for damage from blades. Updated Mass Wound, Bomb, and Wound Self accordingly. * Added new damage type DAMAGE_TYPE_LOCATION. Currently unused but could be (i.e. non blade damage from location). * Added check to all Gambit abilities to see if victory point is actually awarded before granting benefit. * Added reset on activation to Energy Gambit, was still doing it the old way. * Removed check for is_creature in can_piece_shift and is_engaged calls. They're never called for locations. * Fixed reactive container's short description to show 2nd part. * Fixed crash when an active spawn cost ability modifier (Boost) is in effect with an X spawn cost ability with a non-zero fixed cost (Strafe). * Fixed crash w/ Skid Drive. 09/16/09 - 1.0.18 * Fixed 'bug egg' in action handle_damage_outside_of_combat. Was modifying a vector while iterating it. * New custom Frantic Generator (Witching Hour). * New ability Boost (Witching Hour). * Cleaned up X spawn ability activation action generation. * New hook get_activated_ability_cost. Needed for Boost. Also changed all related checks and actions related to spawn abilities costs. * Locations can no longer by default claim cells. No idea how this slipped through my testing. * Updated Deathform, Deathswarm, Twin of , and Mutation to not allow an exchange when the piece is not controlled by it's "owner", i.e. under control of Mindlock etc. * Added some AI optimizations for Transposing. * Added stacking limit checking (via can_zone_be_entered_into_by_piece) for Transpose Enemy/Ally. * Fixed Transpose Enemy/Ally. Ally has to be non-local to ability's owner not the chosen enemy. * Added long description for Grand Hive's spawn ability. * Fixed War Chief's ability def to be Scare % Advance, not Scare % Lure. * Added has_x override for Call to prevent AI using it w/ 0 X cost. * Fixed Deathboon. Effect now is executed. Also fixed its long ability desc. * Sent out an info event when there is a tie in conquest points when awarding victory points. * Added new vector of claimable cells only to game_state, optimization which gives a nice speed up. Updated effect_conquest_for_cell_if_claimed to add/remove to list if used (i.e. Colonize X). * Removed unused loop from is_engaged() call, nice speed up of AI. * Fixed a crash w/ reactive_static_ability container. Sustained effect (gain static ability) was free'ing static ability. * Added witching_hour dir to staging for Linux and OS X. Whoops. * Changed order of ability display string to show conditions before cost. i.e. in scoring cell requirement before blade cost. * Added override of has_x for Flicker ability to not bother with use of 0 for X by AI. * Tweaked scoring of cells for eval function. I had the cell notation backwards which is why sometimes where the AI disrupts to seems like a poor choice, seems to be MUCH better overall now. * Fixed order of base_cost and x_cost in activate_x_cost_ability in one of the calls. * Fixed Bloodtusk Throne's ability. It can target any enemy, not just local ones. * Tweaked eval function. AI player now much less apt to rush into the 3, 4, and 5 point scoring cells if they don't need to, i.e. no more being hyper aggressive. * Removed non DEBUG print in ai player's logic code. * Cleaned up Whisper Gambit's continue text. * Fixed Rush ability, use targetted cell not owning piece's current cell. Also, pieces can move to adjacent cells, not targeted cell. 09/12/09 - 1.0.17 * Fixed Rage of One, gained Ferocity only lasts until the end of combat. * Fixed single stacking limit check for locations. No need to look at controller. * Updated core spawning code and abilities that allow spawning (i.e. Animate Dead) to check stacking limit. * Removed 'may' from Soulwash Temple's triggered ability. Must destroy a location. * Fixed Rage of One and Soulwash Temple's triggered ability to correctly init and subscribe for events. * Added support for specifying a starting zone/cell for a piece in a warband file. See doc/README for more info. Mostly for testing but could be fun to play with too. * Removed some unused vectors from game state class. * Removed double check of stacking limit, was preventing Soulwash Temple from being spawned in a cell w/ a location. * Fixed Soulwash Temple's {CiP} ability, was set to trigger on wrong event. * Chronosphere's Rewind now works when there are more than 1 in play with the same controller. * Removed multiple calls to get initative roll in phase_initiative. * New ability Geography Drive (Witching Hour). * New custom Wreckless Wrecker (Witching Hour). * New ability Raze (Witching Hour). * New ability Drift Drive (Witching Hour). * New ability Skid Drive (Witching Hour). * New custom Fiendish Hybrid (Witching Hour). * New ability Turbo (Witching Hour). * Added list of current aspects for piece to info display. * Updated ui display of {CiP} to not just be for triggered abilities that trigger on pieces entering play. * New custom Aggrocopter (Witching Hour). * New ability Strafe X Y (Witching Hour). * More cleanup on X abilities w/ a fixed starting cost. * New custom Infernal Persuader (Witching Hour). * New ability grant lineage local allies. Generic form of Condemn (Witching Hour). * Fixed Marian, Bound to Pain's spawn cost. * Updated UI to handle list of lineages. * Changed *all* references to a single lineage to be a list of lineages. This includes all piece defs, abilities, effects, conditions, etc. * New hook get_lineages. * Fixed Fury to only apply to specified lineage. * Fixed Blight Rat's utility name. * Updated 'Fraidy Cat to use changed activated_static_ability. * New custom Ravenous Vampyre. * New ability Carnage Energize X (Witching Hour). * Fixed effect_move_creature_between_zones_if_target_destroyed. Was not using event_info for destroyed piece. * New effect gain_spawn_for_each_destroyed, used by Carnage Energize X. * Added new custom Burning Desire (Witching Hour). * New ability Insubordination (Energy) (Witching Hour). * Added new action pay_spawn_points for non ability cost payments. * Added new method to spawn pool class for paying spawn points outside of an ability's cost (i.e. Insubordination (Energy)). * Added new custom Incomplete Masterpiece (Witching Hour). * New ability Insubordination (Assembly) (Witching Hour). * Added new custom Grand Hive (Witching Hour). * New ability for Grand Hive (Witching Hour). * New ability Gargantuan w/ a little more flexibility via desc and num_contrib. (Witching Hour). * Added new custom Sybil (Witching Hour). * New ability Splinter (Witching Hour). * New ability Duplicate (Witching Hour). * Fixed infinite recursion issue when querifying for aspects in Chameleon ability (shows up when more than 1 Convertible Convertible is in play for a player). * Added new custom War Chief (Witching Hour). * Added new effect for 'Reactive' static abilities, gain_static_abilities. * Made "Hell's Fury"'s ability (Gain Crit ) a more generic container ability for easier re-use. Updated Ekkyon Wayfarer accordingly. * Removed Gain Enrage ability and switched to the more correct activated static ability (with duration). Updated Virtuous Maiden accordingly. * Added new param for activated static ability (expiration event id). * Added new container ability for 'Reactive' static abilities (with duration). * New ability Enrage X. * Fixed Advance All. Wasn't removing from targets list after advancing. * All forms of Advance and Transpose now send out an event saying they have resolved (used by Reactive abilities). * Added new custom Failed Experiment (Witching Hour). * Added new custom Sabrefang Skirmisher (Witching Hour). * Added new custom Inescapable Adversary (Witching Hour). * All forms of Expel and Scare now send out an event saying they have resolved (used by Reactive abilities). * Added new custom Master Tactician (Witching Hour). * All forms of Skirmish now send out an event saying they have resolved (used by Reactive abilities). * Added new event type and info class for ability_resolved. * Correctly implemented Reactive activated ability container class. * Added new field to ability class (parent_ability) will be set when ability is part of a container ability i.e. Halo, Reactive , and combined abilities. * Tweaked eval function, now faster and it seems to play better. * Fixed Spark's AI can_use optimization. Was backwards. * Fixed Fluctuate's reset after turn ends. Wasn't going through UNDO engine. * Fixed Bloodlust's AI optimization, should check for be unengaged. * Removed can_use override in Animate Dead, as it's a triggered ability. * Fixed up Respawn's can_use logic. * Overrides of can_use are now can_use_ai since that is the only time they are called. * All can_use AI optimizations are now enclosed in a macro which allows me to disable it easily. Also made all special checks like that only apply when an AI is thinking or doing the actions. It was confusing for human players to not see the option to activate in the list of choices. * Revamped paying and checking activated ability costs to support cost modifying hooks and non-fixed costs (i.e. Boost). * Added support for X spawn abilities with a fixed starting cost, to support Strafe ability of Aggrocopter (Witching Hour). * Fixed issue w/ instantiating Spirit Vault's ability from XML def. * Added new custom Unstable Mabel (Witching Hour). * Added new ability Flicker (Witching Hour). * Added new flag for triggered abilities is_cip_ability. Needed due to some triggered abilities triggering on a piece coming into play, but not being {CiP}. * Added new action action_activate_cip_ability. * Fixed triggered version of Rush {CiP}, wasn't resetting state when triggered. * Broke out does_ability_trigger into two parts to support Flicker ability. One part just says whether it triggers, the other half does a reset, etc as on_activate does for activated_ability. * Added new custom Faceless Sniper (Witching Hour). * Added new ability Deadeye Warpstrike X (Witching Hour). * Added new custom Whirlygig (Witching Hour). * Added new ability Insubordination (Reinforcement) (Witching Hour). * Added new custom Doctor Shocksalot (Witching Hour). * Added new ability Warpstrike Chain (Witching Hour). * Fixed Mine ability, it applies to all local locations not just 'allied' ones. * Added new custom Infernal Whisperer (Witching Hour). * Added new ability Weaken (Witching Hour). * Added new tweakable spawn_at_start_of_spawn_phase. This defaults to 0. The number is added to the starting spawn points for each player in addition to the normal spawn points. * Implemented correct handling of damage outside of combat with group abilities. * Added new custom Soldier of Fortune (Witching Hour). * Added new ability Insubordination (Entry) (Witching Hour). * Fixed Chaos Drive's long text description, had a non viewable char in it. * Added new container ability for 'Reactive' activated abilities. * Added new custom Conductor (Witching Hour). * Added triggered version of Transpose Enemy/Ally {CiP}. * Added new custom Shimmering Watchtower (Witching Hour). * Added new ability for Shimmering Watchtower (Witching Hour). 09/04/09 - 1.0.16 * Added new custom Spirit Slayer (Witching Hour). * Added new ability Dissolve (Witching Hour). * Added new effect modify_spawn_for_destroyed * Added new custom Spirit Vault (Witching Hour). * Added new ability Vault (Witching Hour). * Added new custom Convertible Convertible (Witching Hour). * Added new ability Assist Drive (Witching Hour). * Added new ability Chameleon (Witching Hour). * Added new hook get_aspects. Updated all code using old method of checking for aspect(s). * Added new custom Big Top (Witching Hour). * Added new ability for Big Top (Witching Hour). * Added new effect piece_cant_move. * Added new custom Zungar Herald (Witching Hour). * Added new ability move_after_spawning_aspect, generic form for 'Call to Arms'. * Added new custom Pearlthorn Marshal (Witching Hour). * Implemented triggered Rush {CiP}. * Fixed Disarm X. Was triggering on any attack, not just when opponent attacked. * Fixed Baba Yaga's static ability. * Optimization for 2 phased phase transition (for triggered abilities that trigger @ the end of a phase). * Fixed Hero of the People's Glory ability def. * Fixed Madcap Aristocrat's Shackle ability def. * Added ability trigger check to Mine ability. * Updated all triggered abilities to check if owning piece is in play (where it's needed and not already checked implicitly). * Removed in play check for dispatching triggered ability events. Was keeping Reincarnate from triggering. * Implemented ability Reincarnate. Somehow this one slipped through the cracks. I had given Chrysalis Spinner the Regenerate ability which is wrong. Now fixed. * Fixed special attack event text. Should be sending out dest cell of attack (i.e. Warpstrike). * Fixed Edged Advance. Should only trigger for allies. * Added a few more info events for the turn ending and awarding victory points. * Activated static abilities (i.e. Shield abilities) now show long description. * Added 'may' option to Skirmish . * Vortex no longer moves locations. * Fixed Coral Archerfish's Warpstrike to be power of 2. * Changed identifier for local Madness ally aspect from {M} to {U} to avoid confusing w/ Multiblade. WotC also used this. * Fixed Inciter X and Incite , were modifying enemy life instead of power. * Fixed text for Panic X, should be positive #. * Send out an info event when Double Stakes resolves when calculating victory points for turn winner. * Fixed issue w/ Torture not giving spawn points after sacrificing a local ally. * Added EVENT_ID_DAMAGE_ASSIGNED to ui handler. * Added Hiveling lineage to Deathhead. * Swarm should only change power when owning piece is in play. 08/24/09 - 1.0.15 * Fixed issue w/ Corpsebuilt where it was requiring 1 more creature moved to the graveyard than needed. * Fixed issues with both players having actions as a result of damage outside of combat (i.e. Valorborn Advance Self + Ambush + Passionborn Assault). * Fixed issue w/ effect move_creature_between_zones_if_target_destroyed did not set controller of sub-effect move_piece. * Correctly implemented handing of come into play and spawned piece event triggers. Updated Etherdance, Valorborn Advance Self, and Passionborn Assault. * Fixed Nevret Warmaster's Fortunate ability. Should be Fortunate 5, not 2. * Fixed Deathrip abilities. Wasn't being marked as used for that combat after 1st activation. * Optimized Smash, Supersmash, and Demolish for AI. * Print out the final score when exiting * -V flag shouldn't show usage etc. 08/11/09 - 1.0.14 * Fixed Unravel's text to be a positive #. * Fixed a bug w/ Rally Lineage. * Fixed a bug w/ disrupted pieces during combat. * Fixed typo in Coral Archerfish's XML def. * Fixed issue w/ creating Shard Troll's Assault. * Fixed issue w/ creating Tunnel ability via XML. * Added new custom Horrifying Spectre (Witching Hour). * Added new custom Gas Man (Witching Hour). * Added new custom 'Fraidy Cat (Witching Hour). * Added support for copying and creating from XML, activated static abilities (mostly Shield abilities). * Added new custom Blood-Ash Infantry (Witching Hour). * Added new custom Madcap Aristocrat (Witching Hour). * Added new custom Dancing Lunatic (Witching Hour). * Added new custom Cornered Kitty (Witching Hour). * Added new custom Chaos Beast (Witching Hour). * Added new custom Zungar Champion (Witching Hour). * Added new custom Steadfast Squire (Witching Hour). * Added new custom Runetagged Acolyte (Witching Hour). * Added new custom Man-At-Arms (Witching Hour). * Added new custom Hero of the People (Witching Hour). * Added new ability Accuracy. * Added new custom Isolationist (Witching Hour). * Added new custom Manic Miner (Witching Hour). * Added new ability Mine. * Added new custom Double Talker (Witching Hour). * Added new ability Incite Aspect. * Added new ability Fight Aspect. * Fixed Unravel ability, it was adding to defense. * Added new custom Drunken Master (Witching Hour). * Added new custom Heartsblood Marshall (Witching Hour). * Added new custom Bounty Hunter (Witching Hour). * Added new ability Reward, for Bounty Hunter. * Fixed uninitialized flag in Valor Beacon. * Added new custom Schoolyard Bully (Witching Hour). * Added new ability Demoralize, for Schoolyard Bully. * Added new custom Nightmare (Witching Hour). * Added new custom Bare-Knuckle Brawler (Witching Hour). * Added new custom Luminous Muse (Witching Hour). * Added new ability Tempt Aspect, for Luminous Muse. * Added new custom Clawclan Slasher (Witching Hour). * Fixed Infernal Beauty's aspect cost. 08/01/09 - 1.0.13 * Added new custom Infernal Beauty. From Witching Hour fan made set by Scud-O. * Added new ability (for customs). From Witching Hour fan made set by Scud-O. Tempt - You may pull target engaged enemy one cell. ("Pulling" means moving a creature closer.) * Added new defs/strs for custom sets "Witching Hour" and "Twilight". * Added missing piece to Chessmaster warband. * Fixed a memory corruption issue that showed up with abilities that walked ability lists (Wish, Deathrip). * Fixed an initialization issue w/ Intimidation. * Fixed an interaction issue w/ Edged Crit and Deathrip. * Fixed an issue with abilities not being marked as unused correctly after destruction. * Fixed an infinite loop issue with Haunt Gambit when no enemies are in play. * Fixed a tricky interaction w/ Ghost of the Key's Phantom ability and Ferocity, per the FAQ: 'Both the Phantom ability and the Ferocity ability affect step 5 of combat. If a creature is under the effect of both of these abilities and is dealt enough damage to disrupt it, the Phantom ability "wins" since it's the ability that says something can't happen, and the creature will be disrupted. See "General Rules" in the Abilities section of the Dreamblade rulebook.' * Fixed an issue w/ Death Cycle and Shadow interaction. * Fixed an issue w/ Deathrip crashing. 07/23/09 - 1.0.12 * Fixed an issue with activated combined abilities that have abilities that need to resume, i.e Sun Titan's Advance 10 & Bomb. * Fixed an issue with activated combined abilities that are created via XML. * Fixed Triplicate ability. * Fixed spelling errors of minis in fear.txt and valor.txt. * Tweaked board scoring for non in play zones. * Fixed an issue w/ the AI's evaluation function. * When cycling through event messages skip over ones about AI thinking. * Fixed an issue with activated combined abilities that enforce order. * Fixed a bunch of issues w/ Death Cycle. * Fixed a few issues when potential attackers for a deathblow were not legal (single piece w/ Follower). * Performances tweaks in most expensive function (calculating conquest points). Increase of about 8%. 07/09/09 - 1.0.11 * Fixed a crash w/ the Slip ability. * Fixed a bug w/ abilities that need to calculate the number of cells between 2 cells. i.e. Missile * Fixed issue w/ passing on deathblows outside of combat. * Fixed issue w/ successful initiative rolls being informational which limits dispatch to when AI is not thinking. * Now keep track of pruned nodes at each depth. Mostly for my use in tweaking/evaluating performance. * Fixed issue w/ Nightstrike's description. * Changed order of disruption cells to improve AI pruning. * Added some info events to the gambit abilities. * When AI starts thinking it sends out an event for display. * Cleaned up handling of disrupt/destroy actions in the rare case there are actions for both active and not active player. A good example is Wicked Carriage's Fracture ability. * Changed order of potential spawn row spawning cells to improve AI pruning. * Made the piece dialog a little larger. * Fixed Tower of Unquenched Flame's ability to apply to both players. * Updated text for Fortunate All. * Fixed Mighty Stride. Was allowing opponent's pieces and locations. * Fixed Flummox's corrupt description. * Added aspect strings to desc for Beacon. * Fixed an issue w/ marking pieces for disruption/destruction. * Moved shift event to before actual move mimic'ing real play. i.e. Shift a piece and see that Ambush triggers. * Fixed the pass action for deathblows, was being assigned to the attacking player. * Fixed bug w/ showing triggered abilities in the status bar. * Fixed an issue with resolving the stack when both players have actions. * Fixed a logic bug w/ determining the active player during the initiative phase. Fixes resolving Rewind. * Implemented active player handling for the conquest phase. * Rewind now correctly only triggers after players have successfully rolled initiative, not after each has rolled initiative. * Purge and Reverse Purge no longer allow locations to be purged. * Fixed up Fluctuate. It can apply to either player. Also send out an event w/ the new conquest value amount. * Changed Payback and Nightstrike to deal (additional) combat damage like other abilities do which allows it to got through modifier hooks. * Blind Fury now correctly only triggers when owning piece is declared as an attacker during combat. * New event obj for banishing and send out banish event when a piece is banished. * Clear usage of activated abilities on destruction. Now pieces destroyed and brought back into play somehow during the same phase can activate their abilities. * Commonalized a lot of action_deathblow and action_strike. * Converted a few more pieces to XML format. * Piece dialog shows all triggered abilities (i.e. granted ones), not just printed ones. 07/01/09 - 1.0.10 * Updated makefile to include all dxp files in 6 core set dirs. * Fixed handling of "granted" triggered abilities. * Halo {B}: Battle Energize was incorrectly marked as a combat only blade ability. * All minis w/ Halo abilities are now XML definitions. * Changed all Halo abilities to be one of the following 3: halo_activated_ability halo_static_ability halo_triggered_ability Updated all parts of the code that were referencing explicit Halo abilities. * Changed use of 'may' action to 'continue' action in regular attack and handling damage outside of combat. 'May' should only used w/ abilities. * All prompts for 'may' abilities now show owning piece name of ability. * Did some commonalization w/ Halo type abilities. * Cleaned up detailed piece info dialog. Also added current venom below assigned damage. * Ability info does not spill out of status area. * Migrated curses specific stuff out of UI header and other work preparing for non-text GUI port. * For Mighty Warpstrike display attack power in attack_desc. This reflects the power of target piece(s). * Fixed bug w/ Eternity. * Fixed opposite row handling (for Slip). * Fixed crash w/ Deathrip's sustained effect. * Fixed issues w/ Rewind. * Fixed a crash w/ Swarm . * Fixed bug w/ encumbered spawn points (Spark, Energize Lineage, Summon, etc). * Fixed issue w/ Corpsebuilt. * Fixed issue w/ Rampage's sustained effect. * Added flag for triggered abilities to distinguish between ones that need player decisions when simultaneously triggered and ones that don't. Bloodthirsty is an example of one that doesn't. * Added long desc for {C}:Spur. 06/24/09 - 1.0.9 * Implemented Corpsebuilt X when X > 1. * Added missing description text to Provoke ability. * Eternity now also applies to the piece w/ the abilitiy. It states local creatures not local allies. * Clone X was missing its description. * Fixed a bug in Bolster . It applies to allies, not piece with ability. * -born Assault did not set attack amount correctly. Fixed. * Added a long description for each ability (which equates to the description on the bottom of the mini). That was painful to do for each ability, ugh. Long description can be seen when viewing a piece (select piece and press ). * Implemented reroll initiative for Rewind correctly. * Optimized Fluctuate for AI (no need to use if not a scoring cell). * Mind Mulch adds bonus spawn used @ the beginning of next spawn phase. A condition could arise (using Gent) where the player would not get the spawn point(s) the way it was being done. * Revamped damage modifiers so that they now work w/ Twin-Skull Archway and Zungar Citadel. Also the design will allow me to easily add support for allowing player to choose order to apply modifiers. * Optimized Teleport Self and Teleport Ally for AI player. * Lockdown ability sends out an event when target cell is chosen so a human player can see which cell they can't shift in. * UI now subscribes for events related to triggered ability activation. * Removed auto-set of notify for triggered abilities. May give slight speed bump. * Fixed an issue w/ Frightwave. After moving a piece it is no longer eligible to be moved again. * Deathblows do not send out a damage assign event when there are no assign damage actions. * Added more detail to assign damage messages (whether for deathblow, special attack, etc) * Implemented handling of conditional spawn points from abilities. Spark, Summon , Energize . * Added text for declaring deathblow attackers so it is known it is a deathblow without having to scroll back a few events. * Special attack text now shows destination cell so that Warpstrikes etc show correct place attack is happening. * Baba Yaga's hut's ability text is what is printed on the mini. * Added missing display string for local ally aspect condition. * Added a batch script for Windows to correctly set the window size before launching. 06/17/09 - 1.0.8 * Made the default when launching with no arguments be something so the player knows it's working. Use default warband and silver AI player. * Added support for inputting real dice rolls (for human rolls). Use -c flag to enable it (off by default). * Fixed issues w/ Lure X, Skirmish X, Scare X, Advance All, and Skirmsh All Local. * Made Venom X/Y a group ability as it should be. * Fixed interaction bug w/ Gent and Wicked Carriage. Fracture is a combat only ability. * Added sustained effect to all Deathrip abilities. * Added support for activated combined abilities in custom XML pieces. * Added support for copying an activated combined ability. i.e. Advance & Skirmish. * Fixed an issue w/ Spawn (i.e. Hell Spawn) where it would continue to just ask to select target. Also fixed it being executed before being triggered. * Removed Advance ability from Ardent Zungar. * Fixed an issue w/ is_cell_further_away function which affected Scare (and its variants), Frightwave, and Terrify. 06/12/09 - 1.0.7 * Fixed an issue with combined abilities (X & Y) when player can choose order. * Fixed an infinite loop bug w/ Warpstrike X and Warpstrike All. Was checking attackers instead of attackees. Also optimized it so not to keep getting notified by action_special_attack. * Fixed a crash w/ Bloodtusk Throne. It technically speaking has no attackers. * Fixed infinite loop w/ Trample after choosing target cell. * Added Mindthief to copy_abilities. * Fixed a crash w/ Deathboon. * Removed auto-adding notify ptrs. Should speed things up a little bit. Changed abilities relying on that behavior including Grave Crit, Flux Crit, Duel, Crit, Swarm Crit, Flanking, Fumble, Heroics, Pack, Edged Crit, and Stalwart. * Implemented correct targeting rules for Skirmish All Local. * Madhouse ability now correctly enforces rerolling the conquest amount of dice, not "up to". * Implemented correct targeting rules for Terrify. * Added check for controlled local creature in Tower of Unquenched Flame's ability. * Getting all pieces by controller now checks controller instead of just returning the warband. This handles stuff like Mindlock but will affect performance. May have to find a way to offset the performance hit. * Implemented correct targeting rules for Warpstrike All. * Rampage only triggers for a regular attack. * Optimized Bloodlust for AI usage. * Fountain of Shades, per the FAQ, uses the power of the sacrificed piece before it leaves play. * Changed Mindstrike, Annihilate, and Intercept Drive to use a creatures' current life, not its printed life. * Phantom only triggers when in combat, as it should. Not deathblows or special attacks. * Changed Mimic, Mighty Stride, Spur, Payback, and Bloodtusk Throne's ability to use a creatures' current power, not its printed power. * Optimized Tunnel for AI usage. * Stats for selected piece in status bar use "printed" stats. The info dialog reflects any in play effects/modifiers etc. * Fixed a bug in Splat where choosing to pass on the ability would cause an infinite loop. * Fixed right alignment of conquest points in column. * Added abilities to status area. If the width of the board isn't long enough, not all text from abilities will show up. Also available area will depend on last attack dice roll. * Added support for 3 values in Fortune ability when making custom minis (val_to_replace, replacement_val, desc). * Implemented "may" handling in Skirmish X (X>1). * Implemented correct targeting rules for Advance All. * Cleaned up the piece info dialog and added more piece info (unique, set, etc). * Fixed a bug w/ Shackle X where it would only work once per turn. * Supress now sends out an info event saying which name was chosen when resolved. * Optimized Shackle X a little bit. * During combat (and handling damage outside of combat) no longer using the marked_for_destruction/disruption maps for determining whether a piece can be marked for destruction/disruption. This is needed since an ability like Venom can mark a piece for destruction but the player can still choose to mark it for disruption after taking damage. This is legal according to the FAQ and now supported. * Fixed recursion issue w/ when 2 or more abilities that prevent abilities from being used (i.e. Web Breath and Nullify). * Changed color for no aspect pieces to be different from madness on all platforms. * Fixed recursion with all abilities that prevent abilities from being used (Nullify, Blight, Web Breath). * Only count enemy disrupted or destroyed pieces for Strikeback ability. * Updated doc/README with info about dice, performance. * Implemented handling for the situation where a piece is marked for disruption and also marked for destruction (by something like Venom, etc). From DB FAQ. * Moved the Venom mechanic out of the core engine. Should add a wee bit of performance as it isn't used if no pieces have a Venom type ability. And also going forward will be the way similar mechanics could be added. * AI Optimization for Attract . * Fixed some issues w/ Manifest . For Stained-Glass Angel. * More events are handled by UI (disruption, sacrificing, banishing, destruction) * Tweaked the eval function. It seems to be both better and faster. Lost my first game against it w/ a depth of 5 both using random warbands. :) It also seems to play a lot better @ lower depths. * Reversed the logic of the -z flag so that players can see who won when not specified. The -z flag is mostly for timing/performance measurement. 06/08/09 - 1.0.6 * Left and right arrows now scroll between newer and older event messages. * Made statically linking against libstdc++ the default since I've had 2 people with older versions trying to use it. * Added support for combined abilities which allow player to choose order. * Moving done by something other than spawning or shifting (i.e. effects) now send events. * Better handling of empty lines and lines with whitespace in warband files. * Fixed a memory corruption crash with Soul Harrow. * Fixed a recursion issue with Nullify and Nullify which caused a crash. * Removed some no longer used command line arguments and #ifdef'ed ones for my use during debugging. * Fixed a crash when doing deathblows out of combat. 06/07/09 - 1.0.5 * Added support for OS X (Intel). 06/05/09 - 1.0.4 * Added some pieces from the "Dreamblade Design Challenge". I added pieces that used abilities already implemented in the 6 official sets. http://forums.gleemax.com/showthread.php?t=1025756 The custom pieces are under pieces/custom. * Custom pieces can now be created using XML specification. See doc/making_customs.txt for more info. I will slowly be moving the pieces from all sets to this format. * Changed Colonize to use a sustained effect. * Finished implementing Fortune ability. Had a TODO in there. For Hog Fairy. * Don't exit if no rules.conf file found. Just use defaults. 06/01/09 - 1.0.3 * All blade abilities can be copied now via Copy Enemies and Grand Melee. * Implemented Venom X/Y (Y > 1) and used correct targetting rules. i.e. Double Venom, for Toxic Sirroth. * Implemented Skirmish X (X > 1) and used correct targetting rules. For Knight of Strife and Joy. * Implemented Scare X (X > 1) and used correct targetting rules. For Zungar Revenger. * Added support for overriding core rules. See rules.conf. * The -v flag works much better now. All events that the AI does can be seen as and are paused at. 05/31/09 - 1.0.2 * Switched Windows build to use PDCurses so no need for Cygwin. * Added some new warbands. * Added a target for statically linking against libstdc++. Allows the program to work w/ older Linux distros. * More performance enhancements. * UI now shows event info when an ability is activated or triggered. 05/29/09 - 1.0.1 * (ncurses) Added A_UNDERLINE for locations to help them stand out. Only seems to work correctly on Linux. * Pushed ai_player::is_thinking up to player class as optimization so fewer logic checks when calling game_state::is_an_ai_thinking(). * Added support logging warbands used, starting parameters. Will be useful for doing post-mortems now that other people are using it. * Changed default tree depth to 6 * Hawk-Eyed Instigator was named wrong, fixed. * Added VERSION info, and a flag for showing it -V * cygwin release makefile target 05/28/09 - 1.0.0 * Initial release. Linux and Windows (cygwin) version. Engine is mostly complete and all original 396 pieces are added. Some basic testing done. vim:tw=82:expandtab