1. Together in Battle
  2. News

Together in Battle News

Version 0.4.01: New palace intrigue mission, UI improvements, better AI!

Greetings, tactics fans! As predicted, this past month was friggin' nuts: I packed up my home, moved, unpacked, had to build myself a new computer desk, and then had Thanksgiving. (Also, the day job got very busy.)

Nevertheless, I persisted--and as a result, I have an update with one cool new handcrafted plot mission and lots of small improvements for you! Here's what I've got for November. First up, the new content:

- interrogating Prince Ajit now schedules an event where the player receives a letter with a lead.

- new palace intrigue mission with a viable (albeit non-mandatory) stealth route to completion!

- an interrogation scene that changes based on how you completed the mission beforehand!

- new skill added to the game: Unlock Door. Range 1; unlocks a locked door.

- Lockpicks now grant Unlock Door in addition to Pilfer, making lockpicks more versatile and opening up alternative strategies for completing certain maps.

- added a couple of greeting response lines for religious characters.



We've got a slew of AI improvements as well, some designed to make stealth missions more viable (but most just addressing edge cases where the AI behaved strangely):

- new AI tag supported: Inactive. This causes the AI to skip the unit's turn entirely each round while the tag remains. (The only action a character tagged Inactive will take is to swim back to land if in water or lava.)

- Passive units no longer move to different spaces when performing purely self-buffing moves.

- the AI now values the Enthralled status effect differently depending on the total level of the target, with higher-level targets deemed more valuable than lower-level targets.

- the AI now values Slowed status less. (Previously, it scored it identically to Immobilized.)

- refactored a bit of hacky AI code tracking whether the current AI-controlled unit had taken certain actions yet this turn and replaced it with a list that tracks this data for every character tied to their IDs.

- fixed: the AI was incorrectly predicting the knockback destination for pull skills, leading it to sometimes use skills like Pull under circumstances where doing so made little sense.

- fixed: the AI was valuing any kind of straight stat buff as though it were healing, leading to characters sometimes using skills like Douse on injured allies in lieu of better moves.

- fixed: the AreaPreference tag could cause AI-controlled units to inappropriately value moves where they move into the preferred area and then attack allies. (The AI now detects when that is going to happen and discards the attack portion of such moves.)


We've got some long-awaited interface improvements:

- the food buttons in the shop now actually display the amounts of food each represents!



- added a little glinting animation to the "next set of options" buttons in dialogue and in the town menu so they're much harder to miss.



- you can now always look ahead to the next month when in the calendar screen.

- when using repair kits (or any other consumable whose only function is to alter properties of equipment), the game now checks to confirm that a valid item is actually equipped before letting you use the item.

- when using repair kits, the game now checks to confirm that the equipped weapon is actually missing uses before letting you use the kit.

- created a new skill button graphic for Twirl distinct from the skill button graphic for Trade.


Balance improvements:

- further increased character tendency to interact with existing friends and romantic partners.

- increased the base chance for Stunned to take effect via Mind Shock to 75%, making mentalists more reliable at lower levels (and making the Thoughteater promotion option more appealing).

- buffed Disarm: the skill now costs 2 energy instead of 4 and allows the user to move after using.

- characters can now continue moving after using Twirl.

- boosted the strength of experience scaling when attacking a lower-level opponent by 5% per level of difference to help keep characters within the correct level range.

- the game now always produces at least one healer during the initial recruitment for a run.

- the player now has more breathing room after completing a league qualifier; the first league match in a new league is now scheduled for 5-7 days out (instead of 2-4 days out).

- winning a league qualifier now boosts team morale by 3 instead of 2.

- made paying bonuses to characters more cost-effective in terms of morale gain relative to money spent.

- increased pay from league battles.

- when hiring out team members as guards, pay now scales with how many in-game days have passed.

- greatly increased the generosity of Ishita Svaamee's buy-out offers to make the choice harder.

- the likelihood of receiving the letter in Nihal's bandit quest now increases with every passing day.

- improved the scripting in the battle in Nihal's bandit quest and wrote some new mid-battle dialogue.

- once the player is scheduled for the Monkey League Qualifier, the game now grants access to the team overview and calendar buttons in the arena entrance area.

- reduced the commonality of practice weapons and rusty swords as drops in the arena.

- increased the rate of enemy level scaling in caravan guard battles somewhat, as well as overall enemy aggressiveness.

- increased the rate of enemy level scaling in the merchant-related bandit battles.

- increased the rate of enemy level scaling in the Save Grandpa fight, but also scaled up grandpa's health over time.

- increased the commonality of events where a character asks for a raise.

- moved the first possible day for the golem attack event back by six days.

- jobs other than laboring no longer appear as options in the jobs board until the player has beaten at least two arena battles.


Bug fixes:

- fixed: the AI mode tracker logic was causing infinite loops when a character used a non-turn-ending skill and then queued up another move with a different skill.

- fixed: if an AI-controlled character used a consumable item, thereby destroying it, and then tried to move into a trap, if the game prevented the move from completing, it would queue up another move that could involve using the now-depleted item a second time, thereby producing a null error.

- fixed: the unit spawning algorithm for caravan defense battles was inappropriately counting caravan guard groups toward the group number for enemy groups, resulting in enemies consistently clustering near the edges of the map.

- fixed: due to an error in logic when deserializing character rosters, the game would inappropriately reinsert the first-recruited character into the default team roster when the entire team had been sent away on a guard mission. This, in turn, allowed the player to undertake inappropriate daytime actions (such as visiting the arena when no one remained to field).

- fixed: if a character had multiple counterattack types to respond to an attack, they would queue up a counterattack with each of them instead of just one.

- fixed: the game was not taking weapon dependencies into account when determining viable skills to use for counterattacks (e.g. a character with a Bayonet counterattack would be able to use it even if not equipped with a crossbow).

- fixed: character names in camp interaction narrations would sometimes use the other character's nickname for that character instead of spelling out the character's full name.

- fixed: the game was using an incorrectly formatted parameter to reset the days passed in memory when starting a new campaign.

- fixed: the chests in the arena championship battle were empty.

- fixed: a typo in the class data for kineticists was causing them to generate with wildly off-kilter stat growths.

- fixed: using one's last time point for the day in Training would kick the player back to Kalkerapur with full time points.

- fixed: characters sent to recover at the infirmary were sometimes returning to camp one day earlier than intended.

- fixed: sending a character to recover at the infirmary was not removing them from the list of characters you could leave at the infirmary during that visit, making it possible to pay to leave the same character multiple times.

- fixed: the introductory voice-over narration would start to play twice at the beginning of the Introduction scene, making it sound like it had aggressive reverb for the first few words.

- fixed: shopkeeper portrait wasn't showing up when reacting to the restoration of steel weapons and armor to the shop.

- fixed: it was possible for the game to schedule a league match on the same day as the Manbir's Letter event, preventing that event from ever occurring.

- fixed: the "Leave" option on branch 0 at the Caravaneer's Guild simply reset the dialogue to branch 0 instead of returning the player to the middle of town.

- fixed a typo in the Skill Question evening event that would fail to exclude characters from the event who had only one skill remaining in their progression.

- fixed: if a map's music was changed mid-fight and a character promoted, the game would cross-fade back to the level's original music, not the track it was previously changed to.

- fixed: pushing enemies into lit campfires did not burn them unless it was specifically scripted for that map.

- fixed: town menu "next set of options" buttons were using an outdated arrow graphic.

- fixed: the "coins" sound effect did not play when paying money in certain random events.

- fixed: pure knockback attacks like Kinetic Gust and Shove were not triggering OnCharAttacked dialogue when used against enemies.

- fixed: characters would not counterattack after blocking an incoming attack with Defensive Stance.

- fixed: the game was displaying only half the actual pay from caravan guard battles.

- fixed: using Mind Control on an enemy could produce a null error.

- fixed: returning to camp after an evening event battle could trigger a second evening event.

- fixed: skipping the event-selection process upon returning to camp after a scene-changing evening event would cause the game not to show the army overview, calendar, or card deck buttons.

- fixed: upon returning to camp after a scene-changing evening event, the game would count down the days until training, working, and infirmary-bound units returned for a second time, resulting in those units returning one day earlier than scheduled.

- fixed: completing either of the merchant-related bandit battles would send the player to the calendar screen instead of returning them to camp.

- fixed: declining the recruitment duel would leave the player without enough time to throw a gathering.

- fixed: siblings and cousins of characters with region-specific names could have names not belonging to that same region.

- fixed: if the framerate dipped at the start of knockback or swap skills, the character(s) could appear to teleport onto their target squares.

- fixed a couple of typos: one in the level-up screen, and one in the arena pre-fighter area when at three wins in Tiger League.

- fixed a typo in one of the narration variations for when no one cleans camp but no mess is left behind.

- fixed: localization setup for bonus proficiency text upon level-up was causing the text to appear incorrectly.

- fixed a typo in equipment masteries introduced by adding localization support to the recruitment screen.

- fixed: the "Blocked!" pop-up from blocking an attack with Defensive Stance was missing localization support.

- fixed: localization support was missing from the scene transition screen ("Saving game").


And we have improvements to the campaign editor:

- new script action: EndUnitTurn. Lets you forcibly end the named character's turn.

- when auditioning music tracks within the map or cut scene editors, if music volume is set to 0, the game will now override this setting so you can hear the music in this one context.

- changing the operation for a bridge's Elev tag now updates its elevation in real-time in the editor.

- improved Guide documentation for the -NPC:Attribute Type|X- special character.

- fixed incomplete Guide documentation for the AggroGroup script action.

- fixed: the Edit Branch window in the dialogue editor was effectively maxing out at 6 actions due to failure to offer the player an option to turn to page 2 upon hitting that number of actions.

- fixed: particularly long topics in the Guide could overflow their text fields.

- fixed: when editing a branch in the dialogue editor, swapping action positions on the second page of actions was not functioning properly.

- fixed: in the dialogue editor, a range error could occur when changing the trigger for dialogue and then making further changes.

- fixed: when placing multiple characters onto the same space in the map editor, the Undo function would sometimes remove the wrong character from that space.

- fixed: summoning the console when in the middle of dialogue would not feed the console the dialogue context, potentially causing it to throw an error when using dialogue navigation actions like GoTo.


And that's about it! I didn't get quite as much done on the "new content" front this month as I wanted to, but I'm happy with the mission I did manage to crank out. Next month, I'll be aiming to finish the second palace intrigue battle, get at least one new interrogation scene, and create a third proc gen job type for the jobs board. Until next time!


Yours in tactics,

Craig

Version 0.4.0: new jobs, new events, the infirmary, interrogations, and more!

Greetings, tactics fans! This month has been focused on adding content and improving balance, with loads of bug fixes thrown in for good measure.

First, as promised, I made headway on the palace intrigue plotline:

- the daytime town menu now reveals an option to Investigate if you've accepted Manbir Raksha's request to look into the conspiracy.

- finished the game's first two interrogation scenes, fleshing out the contours of the central "whodunnit"! (In future updates, these will form the basis for plot battles to gather clues that can confirm or deny the accounts you've gathered.)




I also made good on my intention to add multiple new hand-crafted battles and random events to the game. I'm quite pleased with this bunch:

- new random event (including a battle with multiple potential outcomes): Save the Travelers.

- new random event and battle: Recruitment Duel.

- new random event and battle: Golem Attack.



- re-created the third and fourth chital events (which had mysteriously disappeared from the game at some point following the release of version 0.2.10 in July--no idea how).


We have new daytime options in Kalkerapur:

- new daytime option: Infirmary! This lets you spend a time point and some money to drop characters off at the infirmary, where they will receive treatment for their wounds. This accelerates recovery times and--if playing on Challenging difficulty--guarantees a successful recovery for characters at risk of dying.

- replaced the "Labor" daytime option with a Jobs Board! Labor will still appear as an option on the Jobs Board each day, but additional ways to make extra money may present themselves from time to time...

- new job type available: working as caravan guards! You pick 2-4 characters to accompany a caravan and help allied green units fend off a bandit attack in a proc gen defense battle.




New balance changes, including several that make the morale-management side of the game much easier:

- gatherings now increase group morale by 3, a whopping 50% increase in efficacy.

- no one choosing to clean camp on a night when it is already clean no longer guarantees that the camp will become dirty! Instead, there is now a 50% chance that your characters will have picked up after themselves, leaving the camp clean. (If no one cleans after the camp becomes dirty, though, that's still a guaranteed morale loss.)

- shadowlings and golems are now recruitable upon reaching Monkey League regardless of which events you've had.

- reduced the Psy damage multiplier on each of the big four elemental AOE attacks by 20% for balance reasons.

- increased the maximum range on Grapple Pull to 3.

- it is now cheaper to train a character's Health and Energy.

- reduced the base levels of enemies in the arena leagues a bit.

- reduced base character salaries in Challenging and Brutal difficulties.

- the league qualifier matches now give more money.

- the arena championship match now gives much more money.



We have a wide variety of miscellaneous goodies and improvements:

- new achievement added for becoming champions of the arena.

- new secret achievement added.

- improved right-click behavior in battle! Right-clicking on objects now mirrors the behavior of bridges: if there are move tiles or attack tiles present onscreen, right-clicking them is now treated as a "cancel move or attack" command rather than a command to call up the object's character screen.

- another right-click behavior improvement: when right-clicking a space with both an object and an item sack, the game would show now shows the item sack's character screen instead of the object's.

- created a tutorial pop-up a week before the first payday which assesses the player's financial position and offers guidance based on how far off from making payroll they are. (Players with payroll costs greater than 3000 aura will be warned that their team is expensive for this point in the game, and will be notified that they might want to dismiss a character to stabilize their finances.)

- incorporated a sweet new music track into the game: Incredible Danger.

- greatly increased the likelihood of friends and lovers choosing one another as partners for activities during Free Rein in camp. (Before, all characters had an equal likelihood of selecting any other character regardless of their relationship.)

- Disciplined characters no longer lose morale when ordered to participate in group practice; instead, they gain morale.

- close friends and lovers now have a stronger negative reaction when characters they like are dismissed from the team.

- increased the chance of a narrated Talk event instead of particularized dialogue from 25% to 40%.

- wrote some new narrated Talk events.

- added a new Sensitive Talk event with two variants.

- wrote about 25 personality-specific variants on the Rest camp activity narration.

- wrote a few new Heal combat bark variations.

- cleaned up some of the more awkward "like" dialogue and excluded the one generic line from being selected if personality-specific variants were available.

- wrote new dialogue variants for character reactions to winning the championship based upon personality.

- reduced the number of personality traits characters are generated with from 2 to 1 to avoid tonal dissonance in character lines and reduce overlapping traits on larger teams. (Plus, having 2 personality traits per character wasn't increasing depth of characterization as much as I'd hoped.)

- added a few new attributes for proc gen equipment.

- added "click to continue" text to the camp activity narration interface, as I noticed some new players were getting stuck waiting for things to auto-advance there.

- villager NPCs now have voice set data appropriate to their age and gender.


And what would an update be without bug fixes galore? Here they are:

- spriggats now retain their sprites when reclassing to psy users instead of inexplicably turning into humans.

- fixed: promoted characters who reclassed to a new base class would learn most or all of the new class's skills upon leveling up just once, as if every level they had gained up to that point was in that class. The game now tracks the character's level at the moment of their last promotion, resets their current-class level to zero upon changing to a new class, and uses this current-class level for skill progression purposes going forward.

- AI fix: the positive "move again" score modifier was being applied to Bow and Lance attacks against allied characters, which in some circumstances could result in the AI viewing friendly fire as a good move.

- AI fix: when there was no good move to make other than staying still and using an item, the game would simply skip the character's turn. Now, as long as the item use is sufficiently helpful, the game will instead have the character stay put and use the item.

- fixed: Immobilized characters were able to use Move skills (like Leap or Swim).

- fixed: one-shot sound effects (most notably the battle victory fanfare) were abruptly cutting off upon transitioning to a new scene. The game now fades them out instead.

- fixed: a range error could occur when the game selected no special condition for an arena map.

- fixed: the level-up description for a skill gaining a new status effect was misformatted.

- fixed: frame alignment on the Sword animation for Swordmasters and Blade Dancers was erratic.

- fixed: surrendering in (or simply losing) qualifier matches after reaching Monkey League would result in the game failing to reset to the correct battle, resulting in the arena no longer letting the player progress.

- fixed: the game was not resetting the "total battles won" variable when advancing to Snow Leopard or Tiger leagues, resulting in enemies being overleveled.

- fixed: recruitment broke when asked to generate pre-promoted characters due to a faulty detection mechanism for level ranges in class data.

- fixed: in the recruitment interface, the tooltip for equipment masteries could show up behind the skill buttons if a character was generated with enough skills.

- fixed: the player's team name was not appearing in the new turn box for the Treasure Thicket battle.

- fixed: the Idol's health was not scaled appropriately for Defend the Idol maps in Snow Leopard League or Tiger League.

- fixed: the spirit's portrait could disappear after naming in the Apparition 2 event.

- fixed: self-focus skills (such as Soul Suck and Transfer) were inappropriately affecting maximum energy, not just current energy. This was caused by changes in the code allowing skills that send a character's energy into the negatives to deal rollover damage.

- fixed: a range error occurred when triggering dialogue in the Battle with Bandits 1 event.

- fixed: a variable needed to trigger the Battle with Bandits 2 event (and thereby unlock steel equipment in the shop) was not being set in the Introduction scene, preventing the event from ever occurring.

- fixed: auto-looting was not turned on for either of the merchant-based bandit battle events.

- fixed: user scores for downloadable campaigns were incorrectly scaled, leading to them appearing at 1/5th the value they should have.

- fixed: healers would sometimes say their heal bark even when only healing themselves.

- fixed: gamepad "click to continue" text would show up in the dialogue window when in the shop even if no gamepad was connected.

- fixed: in rare circumstances, the actions queue could remain uncleared when changing scenes, leading to the game refusing to process actions in the next scene under the belief that it was already in the middle of processing script actions.

- fixed: in the event the game's custom integer value for the days passed ever got out of sync with actual days passed in game, it could lead to the game failing to recognize victories in league matches as proper league match victories for purposes of advancing the player through the league.

- fixed a typo in Snow Leopard League arena dialogue prior to the Tiger League Qualifier.

- fixed: the report screen was not hiding the dialogue menu as intended when the ShowReport script action was used in battle.

- fixed: clicking units in the deployment menu was not making a sound.

- fixed: ignoring the summons from Manbir the day after the festival and then undertaking a 1-time-unit activity would result in the messenger approaching the player a second time upon returning to town for their second activity.

- fixed: you could keep throwing the switch in the Tiger League Qualifier to keep spawning explosive charges.

- fixed: reclassed characters could still sometimes end up learning duplicates of known skills.

- fixed: promoted characters could retrain to the base version of their current class at the trainer.

- fixed: it was possible for spirits to be generated with personality-based camp activities (e.g. volunteering, praying, worrying, nursing grudges...)

- fixed: one of the "like" dialogue lines for imaginative characters inappropriately referenced hobbies instead of material things.

- fixed: in some circumstances, non-golem, non-spirit proc gen characters could be spawned with a salary of zero (e.g. from the GenerateUnique script action).

- fixed: the randomly chosen socioeconomic class of proc gen characters could override the inventory quality parameter in the GenerateUnique script action.

- fixed: the graphic for steel mail was missing.

- fixed: choosing to proceed with a custom menu button selection in the face of a pop-up warning would not close the pop-up menu if proceeding meant moving to another custom menu.

- fixed: when a premade unit has a class name not corresponding to any class in Classes.xml (such as "Villager"), they would show up with the class "NOT FOUND." Instead, the game now provides them with an empty class that has the provided name.

- fixed: in rare circumstances, an attack sequence could end with a pending counterattack left unexecuted, only to suddenly execute the counterattack later on when another character tried to use a skill. The game now performs a separate check for any such attacks before ending a sequence of attacks and counterattacks.

- fixed: the names of game's villager sprite sets were misformatted.

- fixed: Sita's current portrait data was not in-game for some reason, leading to her eye placement looking messed up.

- fixed: Prince Ajit's portrait data was using an outdated name.

- fixed: religious characters unable to find a temple in the evening were gaining 1 morale instead of losing 1 morale.

- fixed: the side quest to restore steel items to the shop was not triggering due to a missing variable in the game's introductory scene.

- fixed: players were not receiving the "Tutored" achievement upon completing all in-game combat tutorials unless playing with a gamepad.

- fixed: due to a typo, players were not receiving the "Get decked" achievement upon acquiring a deck of Psy Clash cards.

- fixed: the game would throw a range error if a zero-length string was passed as the parameter for the SetNextScene or NewScene script actions.

- fixed: calling the SetValByEvent script action without its optional fourth parameter would produce a range error.

- fixed in 0.4.0a: a null error caused by implementation of a new localization system in the game's info bar.

- fixed in version 0.4.0b: the game was hitting a range error due to a scripting mistake in the Strikebreaker event.

- fixed in version 0.4.0b: the game was not accounting for skills like Sprint and Engine Boost when calculating where enemies could reach for purposes of determining unit placement in proc gen maps.

- fixed in version 0.4.0b: characters who were reclassed to a base class post-promotion would promote again upon gaining a level in their new base class.

- fixed in version 0.4.0b: the game could silently reject available promotion options without logging a reason.



And finally, we have a variety of improvements for the campaign creation suite:

- proc gen item attributes are now moddable! Edit these via the new ItemAttributes.xml file the game creates when you make a new custom campaign.

- proc gen battles now accept premade character types, not just proc gen characters. (Just use a loadID in place of the character class, with a : in place of the /.)

- proc gen battles now accept destructible object assignments to particular armies.

- the game now supports designated "spawn regions" for deployment spaces, groups of characters, and groups of objects within proc gen battles, forcing each to spawn within certain defined areas of the map. (Spawn regions are defined the same way as custom areas are.) This makes proc gen defend maps much more doable.

- proc gen battles can now account for a third, allied army when determining unit positioning (a necessity for making proc gen three-army battles that aren't just free-for-alls viable).

- custom integer values can now be used in place of victory aura, victory morale, and defeat morale effects for battles.

- custom strings can now be used as the loadID for unit spawns in battle.

- custom menus now support hidden buttons: buttons that are defined but not shown to the player unless unhidden via a script action!

- the "hidden" property of custom menu buttons may now be edited within the cut scene editor.

- the cut scene editor now supports an unlimited number of gray-outs and warnings for each custom menu button (with each delimited by |s).

- new script action: ShowMenuButton. Shows a hidden button within a custom menu. One parameter: button name.

- new script action: HideMenuButton. Hides a visible button within a custom menu. One parameter: button name.

- new stats supported by Stat script actions: Health % Left and Energy % Left. These return a number between 0 and 100 reflecting the percentage of a character's health or energy that remains.

- improved documentation for the generate inventory parameter for the GenerateUnit, GenerateUnique, and GenerateUniqueFromNPC script actions.

- new optional parameter for GenerateUnique and GenerateUniqueFromNPC script actions: Force Personality. This forces the character to be generated with one particular personality type that you specify.

- new special character supported in dialogue: -BASECLASS-. Like -CLASS-, but it gets swapped to the base version of the character's current class instead.

- new special characters: -CLASSID- and -CLASSID2-. These refer to class loadIDs, whereas the old -CLASS- and -CLASS2- special characters now refer to localized class names.

- added -CLASS2- documentation to the campaign editor's in-game reference.

- the XML saving class in the campaign editor now gives specific feedback on the error when an xml file fails to save.

- added parameter count checks and error logging to a bunch more script actions.

- fixed: predictive text results for the music input field in the map editor had gotten misaligned at some point.

- fixed: the Regenerating sprite was missing from the campaign creator's TextSprite documentation.


Phew! That was a whole lot of stuff: but there's actually even more going on behind the scenes. I'm currently in talks to get more funding to improve some of the visuals, get some new assets, get this game an actual marketing budget of some kind, get localization, ports to other platforms, etc. There are no guarantees, but I've got my fingers crossed.

There may be a bit of a blip in terms of how much content I get done for next month's update, as I'm moving houses in the next couple of weeks. Regardless, I'll be aiming to get the first couple of palace intrigue battles done, get a third proc gen job type in place for the jobs board, and more. We'll see how it all shakes out. Until next month!


Yours in tactics,

Craig

Version 0.3.0: the arena plotline is complete!

Greetings, tactics fans! Today marks the release of version 0.3.0 of Together in Battle, featuring a variety of improvements to Psy Clash, the weather system, and a big content milestone: the arena championship fight is now in-game, with branching cut scenes after.

I won't spoil anything here, but I'm proud of how the championship fight weaves together a tactical challenge with narrative reactivity (the "consequences" bit of "choices and consequences," for any RPG design nerds reading this). Based upon certain choices you made earlier in the game, things in the fight may be different for you!

Anyway, enough of that--here is the list of changes for this month. We'll start with the championship battle:

- created the championship arena battle, complete with conditions that change based on player choices from earlier in the game and--in some cases--optional in-battle dialogue.

- we've got a truly kickass new battle track from Ryan Richko appearing in the championship fight: "Contest of Blood"!

- added new branches to pre-championship dialogue with Ishita Svaamee.

- created a short cut scene intro leading into the arena championship battle.

- created branching cut scenes following the arena championship battle that react to the outcome of the battle (and to certain of your decisions leading up to it).


A second area of focus for this month's update was improving the Psy Clash mini-game, most notably by tweaking balance and buffing the AI a bit:

- Psy Clash AI improvement: when choosing a minion to target with cards (or to directly damage with bowmen or crossbowmen), the AI will now assess the targets available and choose based on an assessment of which minion would be best to target based on the minion's power and how effective the card would be on it. (Previously, the AI would just choose a target randomly.)

- Psy Clash AI improvement: opponents will no longer play Fury on minions who cannot attack.

- buffed a few Psy Clash cards: Smuggler now has 1 power instead of 0, Iron Jaw Trap now costs 0 energy instead of 1, and Focus now gives +1 card draw in addition to +1 energy.

- new sound effect: Card Shuffle. Now plays during Psy Clash when a player's deck is shuffled.

- fixed: in Psy Clash, the game could sometimes choose an empty lane that a minion had moved from when attempting to update that minion's changed health or power, resulting in the minion's health and power display not changing after combat.


In addition to the championship battle, cut scenes, and Psy Clash improvements, we have changes to other parts of the game as well! These include:

- painted a new UI background for the central buttons at the top of the recruitment interface, making them easier to see against certain scene backgrounds:



- toned down the level scaling for team leaders within arena leagues so you aren't regularly facing promoted enemies in the earlier leagues.

- reduced per-battle winnings for league arena fights (especially the later leagues) to help keep resource management a meaningful concern.

- AI improvement: the game no longer values the Move Bonus status effect positively for characters who are Immobilized or tagged as Immobile.

- AI improvement: the game is now much better at choosing targets for skills that apply buffs or debuffs to Strength and Psy.

- new weather types supported: PetalsRed and PetalsGold. These shower the scene in a soft rain of 3D flower petals (red or yellowish orange).

- new weather types supported: LeavesGreen and LeavesBrown. Causes 3D leaves (green or brown) to gradually flutter down from the top of the screen. (Battle-only for now.)

- now supported in battles: the Fireflies weather type! Causes fireflies to randomly appear, flit about the battlefield unpredictably, and disappear a few seconds later.

- added falling leaves to the Treasure Thicket map.

- added fireflies to the Thief Attack map:



- new 2D particle effects supported: FlowerBurstRed and FlowerBurstGold, producing a burst of red or yellowish-orange flower petals.

- new visual effect for spike traps added to the game.

- when characters hit promotion level via the LevelUp and LevelUpArmy script actions, the game will now quietly auto-promote them to an advanced class consistent with their base class (if one exists).

- received three new unique character portraits and integrated them into the game.

- added new dialogue options and possible event outcomes to the Card Swindler random event.

- increased minimum impact damage in combat from 5 to 6.

- when changing between weather conditions in a battle using the same particle type (e.g. Rain to Heavy Rain or Snow to Blizzard), there is no longer a delay before the change takes effect.

- added a system for queuing up a specific evening event in camp based upon events occurring earlier in the day.

- if it doesn't find a loadID match first, the SpawnUnit script action now checks characters from prior scenes by name.

- the game now keeps track of how many seconds it's been running across all play sessions.


And of course, we have bug fixes:

- fixed some scripting in dialogue with Ishita Svaamee.

- fixed: when multiple dialogue trees were queued up at once, the game was not triggering them in succession due to a mistake in the dialogue formatting process assigning all dialogue the same internal convID.

- fixed: the game would sometimes trigger traps for AI units where it calculated a move onto the trap as the best move even as it refused to actually move the character, resulting in the unit mysteriously suffering the trap's effects even as it stood totally still.

- fixed: league 4 battles were all being generated with snow-based names.

- fixed: with particularly long character movement ending in a trap, the AI could outpace itself and queue up an attack before the game was ready to launch it.

- fixed: the game would not allow characters to push or pull item sacks off of other destructible objects due to item sacks always being treated as last for attack priority on a space. When an item sack is on top of another object that is not pushable or pullable, knockback now affects the position of the item sack instead of the object it's resting on.

- fixed: the DamageUnitAt script action had slightly different damage ordering priority rules than a regular attack.

- fixed: Crush Res. was not being applied to mitigate impact damage from units being smashed into each other (or objects, or the edges of the map).

- fixed: Falling Res. was not being applied to mitigate Falling damage, which resulted in item sacks inappropriately taking damage when falling from heights.

- fixed a visual issue with snow and ash particles being stretched horizontally and looking "squished."

- fixed a typo in a victory bark variant for characters with the "disciplined" personality trait.

- fixed: auto-promotion via LevelUp was causing *every* character to auto-promote if within a campaign whose Classes.xml file didn't use the reqLvl attribute.

- when auto-promoting generic proc gen units, the game could throw a null error trying to update their non-existent character dialogue.

- fixed: if a character's Speed was chosen to increase upon level-up it would increase by 5, not 1.

- fixed: the cut scene editor would remember the last cut scene you loaded and load its data when creating a new cut scene, resulting in the previous cut scene's narration, background, and other data showing up by default.

- fixed: species-based sprite overrides didn't work for classes with only a single species-based sprite override.

- fixed: weather effects were not displaying with the same density in the map editor as in battle due to different emitter shape settings.

- fixed: upon going to the campaign editor and then returning to the title screen without the title music changing, the music would abruptly stop.

- added a fallback for those rare occasions where the actions bar fails to reappear after a round of combat: clicking to select a character who can still move or act now forces the actions bar to show back up.

- fixed an inconsistency with the way that IfValGoTo and IfValRun treated custom integer values that had not yet been set. Both now treat custom values that have not been set as equal to 0. (Previously, only IfValRun did this).

- fixed: a file with crucial scripts for in-game traps and space-swapping skills had accidentally been overwritten, causing traps and space-swapping skills to no longer work correctly for a few days.

- fixed: forgot to revert a change made for testing which was causing characters to say heal barks 100% of the time instead of 25% of the time.

- fixed: forgot to revert a change made for testing which was causing the game to throw null errors upon right-clicking destructible objects.


In addition to the above, I spent time these past few weeks laying groundwork for alternate versions of the game (which I'll avoid further details about for now, but stay tuned...)

That's all for this month. For next month, I'll be focusing on advancing the palace intrigue plot line (including at least one or two new hand-crafted battles), plus new random events. Until then!


Tactically yours,

Craig

Version 0.2.11: new events, more portrait variety, AI improvements!

Hello, tactics fans--another month means another update! This month was unexpectedly challenging for non-game-related reasons ranging from unexpectedly putting my home on the market to my day job being unexpectedly busy to me being unexpectedly ill for more than a week, but I still made sure to put some nice improvements together for you!

The most significant change this month is a much-requested balance tweak that eases up on the game's "messy camp" morale penalty:

- instead of morale dropping the moment you have a night where no one cleans, it now takes two (or more) consecutive nights of no cleaning before morale will start dropping from having a messy camp. This gives you a bit of extra leeway when no one is available to clean so you don't have to order cleaning every night to guarantee that morale doesn't drop.


We've got a handful of fairly elaborate new random events as well:

- wrote a unique battle event that can appear in Snow Leopard and Tiger leagues wherein a surprising combatant shows up on the field (with variants depending on what kind of relationship the character has with them).



- wrote a new random event in camp where a character's mom or dad shows up unexpectedly, with variants depending on what kind of relationship the character has with them.

- wrote a new random event that offers the player an opportunity to further boost shadowling recruitment (and get more use out of their Psy Clash deck).

- wrote new dialogue in the Manbir Letter plot event making better use of the text input feature.


There are also a variety of miscellaneous improvements, including some new UI:



- there is now a dedicated deck viewer screen you can use to see all the cards in your Psy Clash deck. (The screen is accessible in both camp and in Kalkerapur once you acquire a deck.)

- new AI handicap level: 11. On this handicap level, the AI will actively avoid using lethal attacks, preferring attacks that don't finish off enemies.

- Relaxed difficulty now sets the AI handicap to 11 in order to make the game more accommodating for absolute newbies to turn-based strategy.

- added an option to set an AI handicap of 11 manually for custom difficulty (under the moniker "Lobotomized").

- proc gen character nicknames for their parents now subtly differ depending on the kind of relationship they have: "Mom" or "Dad" if they have a positive relationship, "Mother" or "Father" if they do not.



- personally painted a variety of new proc gen portrait elements for human characters! Specifically, there are six new types of noses (for a total of 17), a new type of beard, and a new bird-wing hair clip. The new noses increase the total available nose variety by more than 50% and just generally allow for a greater variety of unique-looking faces.

- refactored a bit of the proc gen character portrait generation code to make it easier to add in new facial feature variants over time.

- commissioned and received several new cut scene backgrounds for the palace, one of which is now used for a relevant plot event (and another of which will be put to use soon)!

- new mood supported: WorriedAbout. Allows a character to feel worried about a specific other character.

- when changing a character's army in battle, or when altering their salary or appetite, if the info bar is open, it now auto-updates salary and food consumption figures to reflect the changes.

- added items to the chest in the Strikebreaking map.


And finally, we have--what else?--bug fixes!

- fixed: the AI was double-counting the back cover bonus for non-Shield skills, leading to it greatly over-preferring moves that put characters' backs up against things (especially the edge of the battlefield).

- fixed: the AI was reversing the value of healing moves used on enemies without first checking to make sure that the move already assessed as having a positive value. Under some circumstances, this could cause the AI to heal the player's characters.

- fixed: a couple of AI routines were set to be excluded at the wrong AI Handicap level.

- fixed: the game was double-counting status effects that impact accuracy when displaying the accuracy of skills in tooltips.

- fixed: the game could display accuracies below 100% for mental attacks and shield skills in tooltips.

- fixed: pushing an enemy with reflexes into a spiked object would cause the enemy to turn and face the object. (Even worse: if the enemy had counterattacks left, they would counterattack while their back remained turned to the attacker!)

- fixed: changes to the level-up screen code were causing the game to throw a couple of null errors when characters promoted via a Book of Power.

- fixed: minimum recruitment is no longer displayed in the recruitment scene when the player already has a roster larger than the minimum recruitment number.

- fixed: item sacks dropping on a space covered by fog of war were visible to the player.

- fixed: attack animations for characters under fog of war would sometimes inappropriately play upon the character's tile being revealed.

- fixed: energy regen visuals appeared for units under fog of war.

- fixed: particle effects appeared when units were destroyed under fog of war.

- fixed: particle effects accompanied units newly spawned under fog of war.

- fixed inconsistent grammatical phrasing for dialogue where characters talk about liking cookies.

- fixed: the fruit tree in the thief attack battle contained no fruit.

- fixed a typo in one of the introvert "like" dialogue variants.

- fixed: when calling the script action UnitsToList in battle during deployment, the game would not check undeployed characters in the roster for the specified army.

- fixed: proc gen characters forced into a promoted class because they were generated at or above level 20 were not having their displayed level reduced appropriately.

- fixed: the Talkable status effect could "run out" after 9,999 turns and had a displayed duration within character screens.

- fixed: the game would say "Talkable wore off" when removing the Talkable icon from characters.

- fixed: in some cut scenes, it was possible to click the background in the split second between the report screen vanishing and the dialogue menu reappearing and thereby inappropriately advance the scene.

- fixed for 0.2.11a: a file had been accidentally overwritten, causing traps and certain skills to no longer work properly.


And we have some goodies for campaign creators!

- the OnTalk dialogue trigger is now more robust! The game now allows custom variables in the trigger parameters, permitting the use of specific named characters based on prior events.

- new optional parameter for the SetStringByString script action: Strip Capitalization. By default, this parameter is false; if set to true, the resulting string will be in all lowercase letters for easier parsing (e.g. for checking passwords and player-created names and such).

- new script action: RestartBattle. Forces the current battle to restart, even if the player is playing on roguelike mode.

- the game now checks ahead for the correct number of parameters when running IfStat-type actions, making it more forgiving of scripting errors.

- the game now supports group projects (i.e. projects that aren't tied to just one character) and camp activities tied to progress on those group projects.

- did I mention all the new proc gen portrait elements? You can use those for your own character portraits, too!


So that covers this month's changes. Needless to say, I ran out of time before I got around to finishing the arena championship plot line; that will be top priority for next month's update. Also on the agenda: creating new events that advance the palace intrigue plot line, making some new random events to further develop sibling and parent drama, and more.

[h2]Your reviews matter![/h2]

While I'm writing this update, here's a little reminder that if you're enjoying the game, leaving a positive review is the #1 thing you can do to help it out! More positive reviews means more people discover Together in Battle through the algorithm, and discovery is the name of the game! (Well, okay: "Together in Battle" is the name of the game. But you get what I mean.) If you're having a good time playing, please consider leaving a nice review!


All right folks, that's all I've got. See you in September! 😉


Yours in tactics,

Craig

Version 0.2.10: Tiger League, new events, better calendar!

Greetings, tactics fans--it's time for another update! I've spent this past month writing new battles and events, plus making a variety of improvements.

The biggest change this month is that you can now fight the Tiger League Qualifier, play through Tiger League itself, and make it all the way to the arena championship! So let's start with changes to the arena:

- added the Tiger League Qualifier battle into the game.

- created Tiger League itself.

- the arena plotline is now playable all the way through to right before the championship match!

- enemy levels in arena fights now scale up 17% slower than before.

- expanded the pool of possible enemy team names in the arena.


My second area of focus this past month was adding new events to the game, of which I managed a little more than half a dozen. Here are all the changes on that front:

- created a third chital event as well as a recurring fourth chital event. Without spoiling too much, it is now possible to actually tame the chital.

- created a new evening event: Treasure Hunt.

- created a new late-night event: Nightmare.

- created a new late-night event: Late Night Idea.

- new event: Ishita Svaamee makes a second visit to the player's camp (unlocked by progressing through the arena leagues).

- created a new, special event that occurs the morning of the championship fight.

- when a character receives a letter from a sibling, cousin, mother, or father, the game now remembers this--it then becomes possible to get an event where that character gets visited by the family member who wrote to them.

- created an initial Sibling Visit event, with variants based on the kind of relationship the characters have (and potentially, the player's choices).



- characters created via the GenerateUniqueFromNPC action who are related to the originating character by blood now determine their own relevant NPCs and biographical details based on the originating character, ensuring that their backgrounds are consistent. Both they and the originating character start with a mutual 20 familiarity, ensuring they won't engage in any basic "getting to know you" dialogue in camp.

- added a new argument type that can occur with sensitive characters.

- added weapon repair kits to the item sale random event.

- fixed some scripting errors in a couple of events.


And what would an update be without miscellaneous improvements and fixes? The biggest of these is an improvement to the calendar screen--you can now flip back and forth between months once you've progressed past Unimensis.

Here's the full list of miscellaneous changes:

- the calendar screen has been improved! There are now buttons to flip back to previous months and review the events that occurred. The name of the displayed month is now always visible at the top of the calendar screen.

- wrote new, alternate dialogue for recruitment attempts during the Monkey League Qualifier battle when initiated by golems or spirits.

- wrote new dismissal response monologue variants for characters with the Arrogant personality trait.

- dismissing a character no longer reduces morale for other characters who have a negative friendship value with the dismissed unit.

- new camp activity: Fury, possible when a character is angry at someone else in camp.

- there is now a 1-in-3 chance that a high-level engineer will learn Place Snare Trap. (The other 2 possibilities remain either +1 range to Place Caltrops or gaining a Wrench counterattack.)

- buffed the Architect and Demolitionist promoted classes for the Engineer. They now each get improved versions of certain skills which let them keep using other skills afterwards (for the Architect, Build Wooden Barricade and Build Spiked Barricade; for the Demolitionist, Place Charges).

- hand-made battles featuring enemy reinforcements now scale based on how many days have passed in the game.

- generic Blackguards and promoted cavaliers without equipped weapons are now generated with natural access to Throw Knife and Halberd, respectively.

- added new music track to the game: Drawing Blades.

- integrated a new version of the Festival of the Ascendant Lights track into the game featuring a traditional Indian vocalist.

- Dacoit Cutters and Dacoit Slashers now gain a melee counterattack upon reaching level 5.

- being defeated in any of the battles where thieves or bandits try to rob the player now results in the player losing half their aura.

- sentinels, pikemen, and swordmasters are now more likely to be generated with more armor and/or shields.

- when proc gen maps are created with multiple hazard terrain types, the game will now select a hazard terrain type at random from those listed.

- when Damage or Drain is affected by a SetStat action in a cut scene, the game now automatically looks for the character's portrait and--if it finds it--animates the character's health/energy bar.

- when the GiveExp action is used in a cut scene, the game now automatically looks for the character's portrait and--if it finds it--animates the character's experience bar.

- characters now lose the ability to use books of power upon promoting, preventing the player from wasting them.

- AI improvement: the AI now distinguishes between Levitating characters and characters who have an ordinary, permanent move type of Flying for purposes of determining which spaces are safe to move to. (Without this, the AI would sometimes move Levitating characters over lava or chasms only for them to drop in at the start of the next turn.)

- when removing a character from the active roster by reference to their name or loadID, the game now automatically checks for duplicates and removes those as well if found. (For reasons not yet discovered, duplicates can sneak onto the roster; before this fix, they could cause characters to stick around even after being removed from the roster.)

- fixed: the last-used windowed/fullscreen setting was not being saved as part of game settings.

- campfire objects now lay flat.

- fixed: smoke from non-flat-lying objects (such as braziers and stoves) was no longer emitting at the correct angle.

- fixed: characters who were ordered to do something via a one-on-one could nonetheless be dragged into another character's partnered activity, precluding them from doing the thing they were ordered to do.

- fixed: I accidentally left the chance of small talk set to 100% after testing, thereby preventing most post-greeting character dialogue from spawning.

- increased the chance of a talk event producing small talk to 25% from 10%.

- fixed: a change to the AI in the last patch resulted in the AI freezing when, in large battles (>8 characters in the enemy army), the first character to move wandered into a trap or other pressure trigger.

- fixed: automatic inventory generation for generic proc gen enemies placed via the map editor was not working.

- fixed: the game was missing data for straight street edge tiles where the street was elevated above surrounding terrain.

- fixed: the game wasn't replacing script IDs with the names of unique characters in script actions within battle when the relevant characters were not already saved from a previous scene.

- fixed: the tooltip for the "view calendar" button in town had a typo.

- fixed: a LoadConv call to dialogue that either does not exist or which had been removed due to being already used and non-repeatable would lock up the game. The game now simply ends the current dialogue when this happens.

- fixed chital portrait scaling.

- fixed a scripting error that was preventing characters from getting speech bubbles and babble during chital events.

- fixed: in some circumstances, the game would remove script actions queued after a Wait action in dialogue initiated via a LoadConv action.

- fixed: it was still possible to accidentally skip nighttime camp events by clicking the background at the exact wrong moment.

- fixed: the game would spawn characters with zero (or negative!) health during the thief attack battle as if they were able to fight.

- fixed: the game wasn't compensating for promoted generic characters in a weapon-dependent class generated without an equipped weapon by boosting strength or granting their default weapon skill.

- fixed: when a character without a specific counterattack gained 1 or greater Counter Limit, the game could select a skill which did no damage but did impose a status effect (e.g. Throw Voice) as the character's counterattack.

-fixed: if you hired out everyone on your team and then returned to the docks for a second time in the same day, the game would effectively lock up.

- fixed: custom difficulty dialogue still referred to manual saving as "save scum mode."

- fixed for 0.2.10a: the game was spawning Heroes in recruitment.

- fixed for 0.2.10b: the variable tracking the day of the championship bout was not being set at the start of the game, causing the day-of-championship event to trigger on day 0 when starting a new game.

- fixed for 0.2.10c: losing a league match in Snow Leopard or Tiger Leagues could result in the game getting stuck in the Arena scene.

- fixed for 0.2.10c: repair kits (or any other item that alters the properties of character equipment) would be permanently stripped of their ability to alter other items upon transitioning scenes if kept in the reserve supplies.

- fixed for 0.2.10c: classes with multiple species-based sprite overrides were not registering sprite overrides for all species, resulting in shadowling psy users appearing with human sprites.

- fixed for 0.2.10d: a scripting error in the letter event could result in the game throwing a range error.

- fixed for 0.2.10d: the sidestab and backstab bonuses from gap-seeking weapons were only being applied to base weapon skills, not to advanced skills for that weapon.

- fixed for 0.2.10d: the AI could reapply Immobilized status to characters subject to a Hold multiple times when calculating moves.

- for 0.2.10e: fixed a freeze during AI damage calculations.


And finally, we have improvements for campaign creators:

- new script action: ConsumeFood. Automatically reduces current food by the current roster of characters's collective appetite without initiating camp activities. (Food will not go below zero, nor will a hunger event be automatically triggered.)

- added a new optional boolean parameter to the LevelUpArmy script action: Affect Reinforcements. If set to true, the level-up effect will be applied prospectively to characters of the chosen army who haven't spawned yet.

- the LevelUp script action now works in cut scenes.

- new stat supported in GetValByStat: True Level. Returns the character's current level combined with any hidden, pre-promotion levels.

- added documentation for read-only stats True Level, Health Left, and Energy Left to the in-game reference.

- finished implementing the GenerateUniqueFromNPC action in cut scenes.

- new class attribute: defaultWeaponSkills. This is used to tell the game that it should grant a Strength bonus and one or more natural weapon skills to generic units of that class if they are created without an equipped weapon in their inventory.


Phew! That about covers it for this month. Next month, I'll be shooting to finish up the arena championship plot line; add a new variant or two to arena matches; create yet more random events; and paint some new nose variants for human portraits.

Until next time!

--Craig