Dev Log: 2026-06-30¶
"The game now has a proper extras menu, the Chapter 6 boss fight exists, and Iron Curtain finally does what everyone assumed it already did."
Extras menu: cutscenes and key visuals¶
The game shipped without a way to replay cutscenes. If you wanted to see that one bit of dialogue again, you had to replay the entire stage. Worst of all, you could only access cutscene replay from the world map. It was not a great experience.
Now there is an Extras Menu accessible from the Options screen. It has two tabs:
- Cutscenes -- browse stages by chapter, tap one, and watch the full cutscene sequence. You need a Normal clear to unlock a stage's cutscenes. Chapter navigation lets you jump between chapters without closing the menu.
- Key Visuals -- a gallery view of all the per-stage key artwork you have unlocked as you progress through the story. Empty state messaging for chapters with no visuals yet.
The menu uses the existing modal pattern. I had to decouple the cutscene replay system from its hardcoded assumption that you were always replaying the current chapter's stages. The chapter browser in the replay menu now loads stage data dynamically from whatever chapter you are browsing, not just GameManager.current_chapter.
Both the ExtrasMenu and CutsceneReplayMenu are full Modal subclasses. A gotcha I ran into: the replay menu's old code spawned DialoguePlayer instances as children of the world map, assuming the world map was the parent. After extracting it into a reusable modal, the dialogue player had to be parented to the modal's content root instead. Layer ordering stayed stable because both sub-menus live on the same CanvasLayer (layer 22).
Oracle Nexus: Chapter 6 boss¶
The original Chapter 6 ending was a dialogue-only sequence with no boss fight. That felt anticlimactic for a final chapter. Now the Oracle Nexus is a proper boss encounter with:
- Animated idle sprites (8 frames of ambient glow/rotation)
- A dedicated hero shot with the Oracle's determined expression portrait imported from the key visual set
- Expanded post-cutscene dialogue with three distinct ending choices: Burn, Reactivate, and Reprogram
Each choice button now shows a full sentence description instead of a cryptic short label. The button texts in the CSV went from one-word labels to paragraphs:
BTN_ORACLE_SEVER,Burn Oracle's architecture and sever the AI units' entanglement in the same process.,...
The choice buttons also got proper translation support across all three languages. No more untranslated ending options.
Alpha unit sprites¶
The Nexus encounter needed special drone variants for Katyusha, Maria, and Nadeshiko with the "alpha" visual treatment. I extended alpha_unit_gen.py and drone_gen.py to produce animated sprites for all three units. They share the Nexus's glowing aesthetic but keep each unit's silhouette.
Iron Curtain blocks Rocket Launcher¶
This was a bug report masquerading as a feature request: "Does Iron Curtain block rockets?"
No. No it did not. IC only blocked basic attacks. The rocket launcher drone's barrage sailed right through it, which made the ability feel much worse than it was. The rocket launcher already has counterplay (don't cluster your units, kill it before it fires), but letting IC shut it down opens a more satisfying positional option: park your tank in the rocket's line of fire and let the shields do the work.
The fix was a single drone_type check in stage_controller.gd's damage pipeline. If the target has IC active and the attacker is a rocket launcher, the damage is zeroed and the reflect triggers. The rocket's area-of-effect splash still spreads to adjacent tiles, so you cannot just facetank the whole salvo. Positioning still matters.
Solver parity was updated in the same commit. Rocket launcher attacks against IC targets are now correctly scored as zero-damage in the search.
New key visuals¶
Sixteen new key visuals shipped across chapters 1, 2, and 3:
| Chapter | Stages |
|---|---|
| 1 | s04, s06, s07, s08, s10 |
| 2 | s04, s05, s06, s07, s08, s09, s10 |
| 3 | s01, s02, s06, s08, s09 |
All existing key visuals were also re-encoded at higher quality. The ch01s04 and ch01s10 files were replaced with improved compositions that better match the game's tone. These load at the start of each stage before the sector intro.
A speaker portrait for Oracle (determined expression) was added alongside the hero shot for the Nexus phase transition. The play_boss_hero_shot function now accepts a unit_id parameter so different bosses can show different portraits instead of always defaulting to Drona.
Translation updates¶
Forty-three new translation keys added to strings.csv across all three locales:
- Extras menu labels (BTN_CUTSCENES_AND_KEY_VISUALS, BTN_CUTSCENES, BTN_KEY_VISUALS, BTN_YES, BTN_NO)
- Key visual viewer labels (LBL_KV_EMPTY, LBL_KV_TITLE, chapter-specific KV descriptions)
- Oracle choice button rewrites (BTN_ORACLE_SEVER, BTN_ORACLE_REACTIVATE, BTN_ORACLE_REPROGRAM)
- Chapter title keys (CHAPTER_03_TITLE, CHAPTER_05_TITLE, CHAPTER_06_TITLE)
The chapter title keys were the trickiest part. Previously the chapter titles were hardcoded in chapter_NN.json with inline punctuation. Moving them to translation keys meant the English source, Japanese overlay, and German overlay all had to agree on formatting. The old format used periods: "Chapter 3. What Did We Build?". The new format uses an en dash within quotes: "Chapter 3 - What Did We Know?". The en dash is not an em dash, so the styleguide is happy.
Miscellaneous¶
- Residual PNG assets from the WebP conversion pass cleaned up
- Chapter JSON metadata (chapters 3, 5, 6 descriptions) freshened
- Version bumped to 0.1.5.64
Build 64 closes the loop on a few things that have been sitting incomplete since the 0.1.5 cycle started: the Chapter 6 boss, the missing replay feature, and the IC-versus-rockets interaction that players understandably expected to work. The extras menu is the kind of quality-of-life addition that should have been there at launch. It is there now.