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!
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!
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!
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.
Your reviews matter!
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! 😉
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.
Greetings, tactics fans! Real life has once again been interfering more than I'd like (the curse of being a solo dev with a day job), but I still managed to make time to add in more requested features, improve existing ones, and fix some bugs. It's a shorter update this week, but hopefully you enjoy it:
- the game now supports an alternative set of weapon breakage rules: when a weapon breaks, instead of completely disappearing and leaving the equipped character with no usable attack skills, the weapon reforms into a "broken" version of itself. This allows the character to still use weapon-dependent attacks, but the broken weapon will have no stat bonuses, tags, or scripts; no resale value; and a -4 Strength penalty.
- weapon breakage rules now differ between difficulties: Brutal retains the old "broken weapons vanish" rule, but lower difficulties adopt the new "broken weapons reform as a weakened version of themselves" rule. (Note that the new "reform broken weapons" rule is now the default; you will have to start a new Brutal run to get the old rule to apply.)
- weapon breakage rules are now settable as part of custom difficulty.
- new item: Repair Kit. A consumable item that restores 20 uses to the user's current equipped weapon, up to the weapon's ordinary maximum number of uses. (But beware: it does not work on broken weapons!)
- the shop now has a 60% chance of carrying a single repair kit on any given visit, while the traveling merchant has a 100% chance of carrying 2 or 3 of them.
- made a difficulty-scaling pass on all of the game's side quest battles. They now all scale in difficulty based on time passed so as to present an appropriate challenge if they happen later in the run.
- it took refactoring of some code, but I further improved the AI's anti-trap checks. Enemies now avoid wandering into fire in a wider variety of situations.
- the AI now inherently values any move that results in a character moving off of a damage-dealing space, even if the move provides no other benefit. (The game already did this for characters submerged in water or lava, but for obvious reasons, the "swim to safety" behavior doesn't work with fire.) This should address the phenomenon of passive enemies on a fire tile without an enemy in range simply ending their turn instead of moving to safety.
- reworded "save scumming" to "manual saving" during the introduction scene. (Apparently there were players who interpreted the phrase as some kind of personal insult, which was definitely not the intention!)
- fixed: clicking on an Immobilized character would not show the character's attack range.
- fixed: a typo in the classes file was causing the game to skip promotions (among other possible issues).
- fixed: Shield skills that didn't affect health or impart a status effect (e.g. Static Shield) wouldn't grant experience unless the target was missing health.
- fixed: the OnTurn and BeforeTurn dialogue triggers had stopped being repeatable.
- fixed for 0.2.09a: a change to the AI in the last patch resulted in the AI triggering a null error when trying to swim out of water.
- fixed for 0.2.09a: if you reclassed a lissit to any of the main psy-user classes, it would change their character sprite to a human's and mess up their character portrait.
And specifically for campaign creators:
- new script action: WeaponBreakageRules. Changes the rules governing weapon breakage game-wide. If Rule Type is set to Destroy, broken weapons will disappear; if Rule Type is set to Reform, broken weapons will remain but will lose all stat benefits, status effects, tags, etc., will have a sell value of 0, and will impose Strength -4, but will allow the character to keep using weapon-dependent skills.
As mentioned, this is a smaller update, but hopefully you appreciate the changes! This should be the last major systems-focused update I make for a while; going forward, I'll be shifting to updates focused on adding new events, side quests, and main plot scenes and battles. I'm also going to shift from weekly to monthly updates so I can take the time to thoroughly write, design, balance, and test all those new events, cut scenes, and battles.
Greetings, tactics fans! I'm back with another update to Together in Battle. Today's update includes the ability to download custom campaigns, some requested AI improvements, new spriggat abilities, new inter-character arguments, and more!
Let's start with the AI. I'm usually loathe to touch the game's AI, as the systems involved are quite complicated and risky to mess around with--however, the AI's difficulty navigating fire on Gharial League maps was annoying enough that I decided to just dive in and make changes. After many hours of AI hell, I emerged victorious with a number of fixes and improvements!
- the AI now actively avoids wandering through non-player-created fire and traps when making "long range" moves (i.e. moves that won't bring it into range to immediately use a skill on anyone). This won't prevent you from baiting nearby enemies into preexisting fire and traps, but enemies should no longer randomly wander into fire or traps when they're nowhere near you.
- reduced the weighting that the AI gives to ally-buffing moves by 80%, meaning that the AI should now pretty much always favor direct attacks against characters within move-and-attack range when given the choice.
- fixed: in situations where the AI evaluated potential knockback moves that would collide the target against a damaging object (e.g. a spiked barricade) or character with a counterattack, the game would actually queue up the object or character's counterattack as though the knockback move had already been chosen and executed. This resulted in phantom counterattacks sometimes going off seemingly at random during the enemy turn.
- fixed: in some circumstances, AI-controlled characters who walked into fire would not continue their turns afterwards.
- fixed: the AI was not evaluating energy-draining skills correctly. It was checking the energy drain against total health instead of total energy for purposes of gauging efficacy, and did not account for overflow damage from energy-draining skills dropping the target's energy below zero.
- fixed: the AI was treating energy-draining skills as though they would be effective against inanimate objects (which they are not).
- fixed: the AI wasn't accounting for the dodge bonus granted by tall grass when weighing different attack options.
Those are the AI improvements, but wait--there's more! We also have new features, skills, event variations, and more. Let's start with the big marquee feature--browsing player-made campaigns!
- in-game browsing and downloading of player-made campaigns is now working! Click the blue flag button in the New Game menu to browse campaigns that other players have uploaded.
- new advanced spriggat skills: Fire Breath 3, Frost Breath 3, Dark Breath 3, and Light Breath 3. These all deal damage in a cone pattern that covers nine spaces.
- spriggats now learn their third-tier breath attack if they promote to greater spriggats, or else learn the multi-target hit-and-run melee skill Claws if they promote to an elemental claw class.
- doubled the psy buff for promoting to a greater spriggat and doubled the strength buff for promoting to an elemental claw. This should make these classes stronger and help to further differentiate their roles.
- reduced the amount that Strength contributes to a spriggat's base salary by about 33%.
- increased the floor (i.e. lowest allowable value) for starting energy on spirits and the major psy classes to 12. (This should prevent the game from generating psy healers, kineticists, and other primary psy users with 5 maximum energy.)
- increased the energy cost of Light Bomb from 18 to 20.
- increased the energy cost of Fury and Stimulate from 5 to 6 and reduced the duration of Strengthened and Lucid from 4 rounds to 3.
- in the shop, reduced the spawn chance of Runner's Cleats to 4% and Binoculars to 8%.
- fixed: the PICKFROMLIST{} special character would never pick the last entry in the list. This was causing the game to ignore the second "generic" argument in the argument event, all but ensuring that only one argument ("unwanted advice") was ever chosen unless the game happened to randomly draw two participants with clashing personality traits.
- re-scripted the camp "argument" event so the game will always choose characters with clashing personality traits to participate if available. (This will cause unique arguments tailored to each character's personality to show up much, much more often.) Moreover, personality-conflict arguments between two characters in the argument event will now always trump other arguments.
- wrote two new personality-conflict argument variants for religious and empirical characters, bringing the total number of unique arguments that can be chosen for this event up from 12 to 14.
- when a camp activity affects more than one social stat (familiarity, friendship, or romance) at once, the game now staggers the pop-ups a bit to make everything easier to see.
- fixed: level-ups and promotions produced by items used via a character screen from within reserve supplies menu would not "stick."
- fixed a range error produced when enemies applied a status effect under fog of war and were then revealed (manifesting primarily as fog tiles no longer being removed).
- fixed: cosmetic bridge connections spawning below ground level on solid terrain could override the space's ordinary elevation with a lower one.
- fixed: the game wasn't accounting for the dodge bonus granted by tall grass when displaying attack accuracy upon mousing over an attack tile.
- fixed: it was possible to stall until after the Festival of the Ascendant Lights to trigger the surprise camp visitation plot event.
- fixed: players with OSes set to countries that habitually use a comma to denote a decimal point would have their machine parse certain numbers incorrectly (which I suspect was responsible for messing up the timing of certain actions in combat for European players).
- fixed: the mentalist headband portrait accessory was misaligned on one of the male human head variants.
- fixed: the game's "check ahead for conversation-ending script actions within called scripts" functionality was not interacting correctly with conditional Run-type actions (e.g. IfValRun, IfStringRun, etc.)
And as usual, we have some goodies for people using the campaign creation suite:
- I created and uploaded a short example campaign to Steam Workshop demonstrating how to make use of the Together in Battle engine's most unique features (like recruitment, the calendar, and camp interactions). Open it up in the campaign creator to see how these things are done!
- new script action: PairToList. Winnows down an existing list of characters to two who meet distinct, specified sets of attribute requirements, then send their names to a new list.
- scripting improvement: you can now specify the name of a list for purposes of LASTINLIST[] special character using a custom string variable.
- scripting improvement: you can now use a custom integer value within an ID[] special character.
- fixed: the CombineLists script action did not work properly when combining more than two lists at once.
That's all for now--I have more things planned for the next update. Until next time!
Hey folks! Real life stuff interfered quite a bit with this past week, but I did still manage to add a much-requested feature: you can now create runs with custom difficulty!
Here are the changes:
- added custom difficulty to the difficulty selection! You can now create a new run with customizable AI difficulty, death rules, item prices, food prices, salary bases, training costs, and starting aura, as well as the option to turn off weapon durability.
- boosted training costs by 10% for brutal difficulty (applies to new runs only).
- broke up the arena manager's dialogue in the Qualifier Scheduling scene upon losing the Monkey League Qualifier into two branches, making it easier to see that the qualifier won't be rescheduled until the player goes back and wins another non-league match.
- updated in-game documentation to more clearly explain what each level of the AIHandicap script action does.
- fixed a typo in the tooltip for Relaxed difficulty on the difficulty selection screen.
- fixed an error in the way the game checked for level-specific skills in the progression which could cause a freeze upon promoting certain classes (such as bowmen).
- fixed a typo in the animated calendar for days 21, 22, and 23 of each month.
- fixed: cross-fading music during promotions was not behaving as intended, leaving two tracks playing simultaneously.
- fixed: cross-fading music was causing the new track to play too quietly.
- fixed: faded-out music could unexpectedly start playing again during scene transitions.
- fixed: the game was reconnecting and spawning a brand-new instance of the Steamworks manager class every time the player returned to the title screen.
As mentioned, this is a shorter one, but I hope you enjoy the new custom difficulty options. There's more to come!
Happy Monday, tactics fans! I've been continuing to work very hard on Together in Battle, adding more content, improving balance, and fixing bugs. This update came together a bit slower than I wanted due to real-life stuff (and also because I took the time to push three rounds of hotfixes to the last update)--but now that it's here, I'm pleased as punch to tell you everything new!
First and most significantly, the next main plot event is now in the game! I won't say anything here about what it is, but it occurs on the day after the Festival of the Ascendant Lights. (If you have a playthrough where a match is already scheduled for that day, just be aware that you won't be able to trigger the event--but the game will avoid scheduling fights on that day for subsequent playthroughs.)
In addition to this, there's a new Axefighter skill and new items can appear in the shop. I also made a few more balance tweaks and fixed a whole bunch of bugs. Without further ado, here are all the changes:
- throwing a character onto a space occupied by an object with "flying" passability now produces a context-dependent effect: if the character is an ally, they are thrown on top of the object as normal; but if the character is not an ally, they will now be thrown into the object instead for collision damage (and--if the object is spiked--additional piercing spike damage).
- new skill: Grappler Stance. Places a hold on one adjacent space, keeping enemies from moving away from (or through) it. This skill is learned by axefighters.
- skills which creates Holds can now be targeted on spaces occupied by other characters.
- helms can now get modifiers as part of the procedural generation process! Modifiers currently supported include Stylish (+1 morale), Beautiful (+2 morale), Gorgeous (+4 morale), Visored (immunity to Blinded status), and Calming (+1 energy regen).
- item quality in the shop now automatically increases upon getting into Snow Leopard League and upon successfully completing the Nihal's Bandits side quest.
- new accessory worn on the head: Bifocals. +10% Accuracy, can be equipped by anyone.
- added bifocals and torches to the shop's pool of "miscellaneous" items; reduced the odds of runner's cleats showing up in stock to 5%.
- toned down the photokineticist's Dazzle skill: it now applies Blinded only once with a base 100% chance (removing the additional 50% chance to apply it a second time) with a 50% chance to apply Distracted once (instead of one to three times).
- changed the way the game handles thieves in arena fights: instead of allying them with the enemy team, thieves now have ignore tags for both armies and a target value of 0. This should keep the enemy team from seeing healing or buffing thieves as a good move.
- pay for hiring out now scales more slowly with strength and caps out at 75 aura per character instead of 90.
- characters now only give a friendly fire reaction when allied skills with the element "Falling" (e.g. Kinetic Gust, Shove, Throw) deal more than 5 damage to them.
- rewrote religious attack, deployment, and victory barks to bring them more in line with the particular doctrines of each given character's religion.
- the info bar in the top-left of the screen now auto-updates food consumption and payroll info as soon as you dismiss a character.
- updated the trainer's dialogue a bit to explain that characters undergoing paradigm training will keep their old skills and masteries, but will learn new ones exclusively in their new class going forwards.
- boosted the amplitude of the song "Conspiracy" to better match the amplitude levels on other tracks.
- fixed: Golem and Spirits could be selected for the Sick Parent event in camp, which would result in the game freezing when it came time for them to talk about their parents (since spirits and golems do not have parents).
- fixed: when an enemy applied a status effect under fog of war, the game would not load the associated status effect icon for the targeted character at all. This would then cause a range error when the affected character came into view and the game tried to display the nonexistent (but expected) status effect icon, in turn causing a cascade of other issues like fog of wars tiles no longer being removed.
- fixed: ranged attackers could sometimes counterattack after being shoved into water or lava.
- fixed: surrendering in the Monkey League Qualifier would not send the player back to the qualifier scheduling scene as intended.
- fixed: characters ending a battle while swimming would have their movement type appear as swimming during deployment for the next battle.
- fixed: the cavalier and mantis knight sprite animations for Mega Charge were wrapping up about 4 frames too early.
- fixed: the special Day 1 daytime text in Kalkerapur ("The tournament begins tomorrow and you need a team. Time to go recruit some fighters!") was no longer appearing.
- fixed: the arena manager was not saying the day of the month that league matches were scheduled for due to a formatting error.
- fixed: characters could sometimes ignore orders given during one-on-ones due to leftover ForceNextCampActivity tags from previous one-on-ones or random events.
- fixed: the RemoveTag script action was not splitting up tag parameters, leading to situations where it was failing to remove specified tags (most notably, ForceNextCampActivity tags).
- fixed: you could mess up the ordering of nighttime camp events if you happened to click the background during the 1/100th of a second delay before character dialogue appeared onscreen.
- fixed: skills, masteries, and other things learned at specific levels (such as Book of Power mastery or the Assassin's Leap skill) would get reintroduced into a character's skill progression upon promotion, leading to that character learning a duplicate of that thing upon reaching level 2 of their promoted class.
- fixed: the upper UI buttons in recruitment had become unusable when a character was selected during recruitment.
- fixed: even if slain before turn 5, the Monkey League Qualifier team leader would still issue a taunt.
- fixed: losing fights or winning league qualifiers would modify golem morale.
- fixed: characters' steps taken would be reset to 0 upon promoting mid-turn in battle.
- fixed: if the skills bar was set to a character's second page of skills and they were thrown into water or lava, the game would still display their second (now blank) page of skills upon selecting them, making it impossible to command them to swim.
- fixed: the game was not recognizing player-placed Caltrops as traps for purposes of warning the player about moving their own units into them.
- fixed: when fire was spawned in front of elevated terrain, its smoke particles would aggressively clip through the terrain.
- fixed a formatting error in the character dialogue responding to a player's decision not to reclass a character in camp.
- fixed: the logger was not saving the version number in log files.
- fixed: status effect immunity popup text was misformatted.
For the campaign creation suite, we have a few improvements:
- the map editor now supports loading and saving a discrete defeatScene attribute for battles, allowing you to easily set a next scene dependent on the player's defeat without using conditions.
- new script action: SetDefeatScene. Sets the defeatScene attribute to a different scene for the current battle.
- new script action: AddStock. Programmatically adds stock to an existing shop in the scene. Lasts until the scene ends.
- new tag supported: Immunity. Grants status effect immunity to the tagged unit.
- new tag supported: AreaPreference. Alters the AI's calculated value for moves in which the tagged character ends their move in the named Area. You can use to nudge particular AI characters toward choosing moves that place them in specific areas of the battlefield; or alternatively, to dissuade them from pursuing moves in certain areas.
- new usable skill icon: Grappler Stance.
- new usable item icon: Bifocals.
- fixed: the character creator could roll up generic units with morale above zero (i.e. neutral).
And finally, we have some progress on gamepad support. (Gamepads aren't officially supported in-game as of yet, but hey--progress is progress):
- rather than duplicating the left trigger's zoom function, the right trigger is now mapped as an automatic "End Turn" button.
- the game now automatically repositions the gamepad cursor when auto-panning the camera during in-battle dialogue.
- fixed: gamepad controls were not functioning properly in the shop tutorial.
- fixed: the gamepad would sometimes be locked out of movement during deployment due to an internal failure to clear dialogue triggered at the start of turn 0.
Reviews!
TIB is already garnering some great reactions from content creators less than a month out from its early-access launch, including this one-two punch of positive launch review and even-more-positive follow-up vid from delightful SRPG channel 89 Games:
There have been some very nice reviews from players as well--today I'll highlight this one, which I really loved:
If you haven't done so yet and you're enjoying the game, please consider leaving a review of your own. Positive player reviews like this make a world of difference (as do gentle nudges to your favorite content creators to check out the game, *wink* *wink*).
Anyway, that's all I have for this update, but there is much more to come. Thanks for your support--I'll see you in the next one! 😉
Greetings, tactics fans! I'm still putting out updates at a rapid pace here: today's update adds more variety to the arena fights, with faster progression between leagues and more variation in the types of fights that can occur, as well as a new league: Snow Leopard League!
There are other changes too, but let's start with the additional battles and battle variation changes:
- Snow Leopard League is now in-game! You can now progress through Snow Leopard League all the way up to the Tiger League Qualifier.
- new arena match type: Defend the Idol. This spawns a golden statue about 2-3 turns away from the enemy's spawn points and tasks you with defending it from destruction.
- new arena match type: 4-on-4. This limits each team to only 4 characters! Enemies are a bit stronger than normal, there is an accelerated timer, extra destructible objects (like tall grasses, spiked barricades, and traps) are dropped around the arena, and bonus chests are dropped as well (at least two of which are guaranteed to contain money).
On top of this, this update offers a variety of changes to improve balance and pacing:
- perhaps the most noticeable alteration is a change in the game's pacing: the number of league wins it takes to progress to the next league's qualifier has been shortened from five to four. This means quicker access to the next league qualifier's prize pool, easing the economic difficulty somewhat; shorter time in which to grind up levels, increasing the combat difficulty in the later leagues somewhat; and in general, less time to get bored of any one league. 😉
- experience scaling is now 15% per level of difference in both directions (as opposed to being a 15% per-level bonus when lower level and a 10% per-level penalty when higher level), making it a bit harder to blast past the game's experience curve.
- team leaders are now more likely to spawn with extra items in arena fights.
- the cavalier skill Charge was proving a little too oppressive in the game's tight arena maps, so I dropped the damage on Charge from 1.5x strength to a more reasonable 1.25x strength.
- fixed: traps and holds were not interrupting self-move skills (like the cavalier's Charge) as intended.
- added a new skill: Mega Charge. Deals 1.5x strength and has two 75% chances to inflict stun. This one is learned exclusively by cavaliers after promoting.
- buffed the swordsman's swordmaster promotion to make it more competitive with the blade dancer: swordmasters now get Hold added to their skill progressions.
- buffed the cavalier's mantis knight promotion to make it more competitive with the mant lancer: mantis knights can now use another skill in the same turn after using Lance.
- you can now train accuracy at the trainer, making status-effect builds more reliable and offering more options for addressing enemies with high Dodge.
- added in 0.2.05a: increased the uses on Eye Drops, Caffeine Pills, Lead Ointment and Thermal Paste to make consumables more economical as a counter to enemy status effects.
- added in 0.2.05b: the elevation tutorial now spells out the formula for how much damage is caused by falling.
And what would an update be without bug fixes? I already mentioned the fix about cavaliers charging through traps unaffected, but there are more:
- fixed: the game was inappropriately treating scripts containing the SetNextScene action as if they actually contained NextScene, which caused the game to stop updating the dialogue menu, effectively glitching out the game. (This would occur most consistently at the trainer.)
- fixed: the trainer was inappropriately including stat modifiers granted by equipment when determining the level of certain stats for purposes of calculating training costs. This was making strength, especially, much more expensive to train than intended.
- fixed a bug in the game's battlefield generation logic that was causing counterattack-possessing objects like Spiked Barricades and Fire to always cluster within two spaces of the player's deployment spots instead of being scattered around the map.
- fixed a typo in the class requirements for bowmen that made positive psy growth a requirement for the class instead of positive strength growth. This led to the game generating bowmen with no strength growth at all.
- fixed: characters in classes that normally have two skills at level one would start off missing their second level-one skill if they had Motivate.
- fixed: characters could get activity narration forbidden by their biographical details in camp (e.g. religious characters offering prayers belonging to the wrong religion).
- the game's calendar system now distinguishes between actual events and simple reminders (e.g. about characters returning or shops not being open); the game will now schedule exclusive events (like league qualifiers) on days which contain reminders.
- fixed in 0.2.05a: the game would sometimes throw a range error during character promotions.
- fixed in 0.2.05a: the game would throw a range error during recruitment if the total number of initial recruits was not neatly divisible by 6.
- fixed in 0.2.05a: in rare instances, 2D particles could cause the game to throw a null error.
- fixed in 0.2.05b: changes to the scripting in the last update made it so that fighting pickup matches while waiting for the Monkey League Qualifier would cause the game to reschedule the Monkey League Qualifier.
- fixed in 0.2.05b: the Protect Char condition was not working on destructible objects, resulting in the Defend the Idol loss condition never triggering.
- fixed in 0.2.05c: Defend the Idol matches were being chosen much too often in Monkey League.
- fixed in 0.2.05c: the game was not taking minimum distance rules into account when spawning the idol for Defend the Idol.
Finally, we have improvements for folks using the campaign creation suite:
- objective reticles may now be placed and removed using a character name (or ID[] tag) instead of just x and y coordinates.
- RemoveSpawn may now take the loadID parameter "Deployment" in proc gen maps to remove procedurally generated deployment spots.
- added in 0.2.05a: updated the default introduction scene so it's more useful right out of the gate.
- added in 0.2.05a: characters created with the character creator now have an appropriate babble voice set assigned to them.
- added in 0.2.05a: new reply type, cut scene only: Next Frame. Ends the current dialogue and proceeds to the next frame of the cut scene.
- added in 0.2.05a: updated usable skill icons with the new Mind Domination and Mega Charge icons.
- fixed in 0.2.05a: "duplicate dialogue branch" functionality was not working correctly in the dialogue editor.
- fixed in 0.2.05a: moving a branch downward within a dialogue tree would produce a range error.
- fixed in 0.2.05a: the game would not recognize premade characters for purposes of the AddPortrait script actions if the game hadn't already saved loaded characters at least once.
- fixed in 0.2.05a: the game did not clear the New Roster tag when hitting New Scene in the cut scene editor, resulting in an already-open scene's new roster carrying over to the new scene as well.
- fixed in 0.2.05a: typing the letter 'L' in the cut scene editor would still trigger the game's "save log" functionality.
That's it for this update, folks! I was originally planning to wait a bit longer and include some new main plot stuff, but I don't want to delay dropping an update with critical bug fixes, so the new plot stuff will be coming in the next update instead. I hope you enjoy the new content--I'll see you in the next update!