Hi everyone!
Since the last dev log I have been finalizing the new authoring tool, moved old scenes into Twine, and begun working on the first new scenes for the PvE overhaul!
We have got our first new icons for desire-based actions! Many of the artists helping out with the game have been real busy during the summer, and we've had to use placeholder icons for many of the new actions that were added to the game with the desire system.
There is a lot of subtle variety for different actions and reactions, and for now, we are focusing on creating icons that can help segment actions into different desire categories and help make it easier to distinguish wildly different actions from one another.

Since working in Twine, I've learned that most markup languages don't have syntax highlighting and that implementing support is exceedingly difficult. My understanding is that authors often copy-paste code between Twine and another program like Visual Studio Code, which does support syntax highlighting, when adding code to their Twine project. Having worked tirelessly to add text formatting support to Battle Mages, I understand that syntax highlighting would be an enormous task, so I do understand why it's not a widely supported feature, even though I'm a bit disappointed that it isn't.
Regardless, I have updated my AINE language extension for Visual Studio Code, so when authors copy code from Twine into VSC, the syntax highlights will properly reflect AINE with all its changes and added features compared to SugarCube!
I've been making big changes to the scene controller, which is the script that handles the location and characters in the scene and makes sure they are properly synchronized with the server. Whenever a location or character isn't being displayed correctly, it's probably because the scene controller failed to keep track of changes, and it has been a constant source of rare but ultimately game-breaking issues.
It's been particularly challenging since support for graceful reconnection was added, which meant no continuity could be assumed. As an example, a player might move from their phone to a PC, then go to a different location and encounter a different player, before swapping back to their phone, and without refreshing the browser tab, the scene controller would need to update to scene to properly reflect the new location and characters. Even the player character might look substantially different by then!
The scene controller has been known to make hiccups sometimes, and these were causing issues while working on the new PvE setup, so I decided to overhaul the script and make it much more robust.
What's properly more interesting to players is that while reworking the script, I swapped out the entire rendering pipeline with one that supports and can morph dynamic avatars, similar to how the current avatars are morphed when players are turned inanimate!
Furthermore, I added support for showing up to four characters in the same scene, which means we are one step closer to having co-op support in the game as well!
While working the design of the PvE overhaul into the game, I've made some minor but pretty substantial changes and design choices.
Vertical Dialog Layout
One such change is the introduction of a vertical dialog layout. When it comes to narrative games, one of the biggest questions is whether to use a vertical dialog layout, as seen in Disco Elysium and I Was A Teenage Exocolonist; or a horizontal dialog layout, as commonly seen in visual novels and used consistently throughout Baldur's Gate 3.

What works best is largely influenced by the scene layout for the individual games. Since visual novels often have two characters facing each other from either side of the screen, it's most natural to show the dialog box underneath the characters. In games like Disco Elysium, having the dialog box displayed on the side of the screen frames the scene better, but perhaps more importantly, is that it's more intuitive to scroll a vertical dialog box, meaning the dialog box itself acts as a log of recent text and events.
Battle Mages will continue to commonly use the horizontal layout, which is ideal for most scenes, but when a player encounters a challenge, a vertical layout will be used instead, so players can more intuitively keep track of recent events that influence the outcome of a challenge, and in the case of a sultry outcome, the player can more easily review tantalizing details of past paragraphs as the scene unfolds.
Challenge Outcomes
I touched upon Class Cards in my previous dev log and how they will be used to give players more control over what will happen to their character during a run. I have decided to take this even further, both to make things easier for writers and to allow players more control.
Random content, while exciting in many rogue-like games and games with procedurally generated runs, poses some unique issues in Battle Mages. Because of content filters, desires, sexual preferences, and an exceptionally customizable character, it becomes incredibly difficult for authors to make any assumptions about a player. The only scalable solution is to not make assumptions at all, and instead offer the player a list of options so they can make a deliberate choice that may or may not fit their content filters perfectly.
This way, authors can write fewer but better outcomes to a scene, and no outcome becomes unavailable to a player because of their settings, though authors might adjust them to better fit with sexual preferences, etc.
There will be times where a player is trying to chase a bad ending they enjoy, and this way, we avoid a situation where, because of chance alone, the player might not get the bad ending they were hoping for.
Dice Rolls
I'm still trying to come up with a system for the dice rolls that I'm happy with. Thankfully, it doesn't stop me from programming any of the other parts of the system, so while I continue to work on other parts, I try to come up with creative ways to improve the dice system.
There are a lot of elements and sometimes contradicting dogmas to consider:
We want players to engage with the game; it cannot be a simple 1d20 roll like D&D.
We want it to be difficult for players to cheat; it cannot rely on reaction time and precision, which is why we settled on a dice system to begin with.
We want stats to matter; all stats must be useful, meaningful, and somewhat balanced.
We want natures and abilities to matter; all abilities must be useful, meaningful, and somewhat balanced.
We want powerful players to occasionally lose; losing is its own reward that clever and powerful players should be able to experience less frequently, but experience nonetheless.
We want a game that cannot be autoplayed; how you choose to spend, reroll, or otherwise interact with the dice cannot come down to a simple mathematical equation.
I'm still struggling to work all of these wishes for the dice roll into an intuitive minigame, but I hope to have figured something out before the next dev log!
---
That's it for this month's dev log!
I still need to tinker and fiddle a little with the screen controller before it's completely finished, but using macro-based stress tests, I've been able to properly find its weak points and will continue to fix them in the coming week.
In terms of the dice roll system, my research has taken me in the direction of Vampire: The Masquerade and the dice game BANG. What's interesting about these systems is that they don't rely on numbers, but instead, Vampire counts your successes (or fails), while BANG has interesting symbols that are their own resources for different effects. Right now, I like the idea of having dice that can work as resources for skills, rather than being scored directly, and allowing skills to be charged in previous checks, but used in another, meaning your dice can affect the outcome of rolls beyond the current check, which makes decisions more complex and interesting.
Thank you all so much for your support, and I hope you're enjoying your summer and looking forward to seeing more of the PvE improvements in the game in the near future! ❤️
XOXO,
Tinon
silio
2025-08-20 07:25:55 +0000 UTC