Dev Log: 2026-05-27¶
Branch: rc/v0.1.1-dev
Greedy solver¶
The Python solver gained a new backend: a priority-ladder greedy planner
(solver/greedy/). Where the previous macro and legacy backends used beam search
over tactical macros or single actions, the greedy backend works through a fixed
priority stack on each action:
- P0: fire a limit break that kills a valuable target
- P1: free kill (no damage taken)
- P2: free limit-break kill
- P3: single kill (damage taken is acceptable)
- P4: bait (draw pursuit to a safe unit)
- P5: fulfill an objective tile
- P6: multi-kill
If nothing from the list applies, it advances the best-positioned unit toward the
objective. The planner is deterministic, makes no branching decisions, and processes
all 10 Chapter 1 stages in roughly one minute, compared to around fifty minutes for
the macro backend. It is now the default (--search greedy); macro and legacy
backends are kept for comparison. The greedy backend ships with 144 unit tests
(tests/solver/test_greedy_phase1.py).
Anti-ground / anti-air guard towers¶
Guard towers now come in two variants: anti-ground (guard_tower_ag) and
anti-air (guard_tower_aa). Anti-ground towers target Katyusha and Maria only;
anti-air towers target Nadeshiko only. Both variants have distinct generated sprites
with an animated idle cycle. The type is set per-tower in stage JSON. The solver
does not yet model the targeting restriction; that is a known gap.
Queue mode¶
Units can now queue a multi-step move before committing. The player plots the full path one tile at a time, reviews the projected route on-screen, then confirms the whole sequence in one action. Stages that previously required careful step-by-step management benefit the most. Queue mode is toggled per-unit during the move planning phase and is saved in per-session state so it survives the stage. Several stages across Chapter 2 were updated to take advantage of the system.
Drag-to-move¶
Dragging from a selected unit now plots a route as the finger/cursor moves across
the grid, rather than requiring tile-by-tile taps. The route snaps to valid cells
and aborts cleanly if the drag exits the reachable area. Implementation spans
stage_camera_input.gd and stage_controller.gd (117 lines added to the
camera input handler alone). The full drag-path system has a dedicated 461-line
test suite (tests/test_drag_path.gd).
Move preview¶
Before a unit commits to a move, the planned route is now drawn on the grid as a
preview overlay. The preview updates live as the player adjusts the destination and
clears on cancel or confirm. This was a light refactor inside stage_controller.gd
rather than a new system, but it required adjusting limit-break targeting tests that
were implicitly depending on the previous input flow.
Move-then-fire limit break UX¶
A unit can now move and then immediately fire its limit break in the same action, provided the limit is charged. Previously the player had to confirm the move first, then re-select the unit and fire. The new flow keeps the unit selected through the move animation and presents the limit break as a follow-up option. 28 new test cases cover the revised targeting states.
Iron Curtain bug fixes¶
Three IC bugs were found and fixed during the playtest pass:
Solver parity (IC mid-move). When IC's reflect cap was exhausted during a
multi-step move, the live engine correctly deactivated IC and continued walking;
the solver's tick.py was returning early from _apply_move at step 1, halting
the unit entirely. The fix aligns both to the same behaviour and adds 53 new solver
engine tests.
IC state not saved. Katyusha's IC active/inactive state was not being written
to the save file on stage transition. A reload mid-run could restore IC as inactive
even if it had been triggered. Fixed in unit.gd.
Reflex bug. Units were occasionally stepping away from their target after a reflect instead of staying in place. Root cause was an incorrect velocity vector being applied during the post-reflect tick.
Chapter structure: tutorial chapter¶
Chapter 1 is now framed as the tutorial chapter in the engine and UI. A
tutorial_chapter flag was added to the chapter manifest. The world map and
chapter-complete screens handle tutorial chapters slightly differently (no score
summary, gentler language). Story docs and the visual styleguide were rewritten in
full to reflect the confirmed three-chapter structure (Ch1 tutorial, Ch2 revelation,
Ch3 confrontation).
Chapter rewrites (story)¶
All three chapters received cutscene and stage-prose rewrites following the story lock. The main changes:
- Ch1 S1 and S2 rewrites locked the Katyusha activation exchange and the first Drona wall message in their final forms.
- Ch1 S3 locked Maria's first words (
"...huh. You again, Doc.") at activation. - Ch2 S4 was the first contamination beat; stale cutscenes that misattributed this to a different stage were corrected.
- Ch3 cutscenes were rewritten to match the Alpha unit encounter structure confirmed during design.
A subagent playtest system was implemented: a Claude subagent reads the playtest instructions, plays through each Chapter 1 stage mechanically, and reports friction points. Feedback from Ch1 S1 through S7 was implemented in the same branch.
Stage redesigns: Chapter 2¶
All ten Chapter 2 stages were redesigned from scratch following the playtest pass. The previous designs had been drafted before the stage density targets and queue mode existed. The redesigns take advantage of both. Stages 8, 9, and 10 were the most extensively reworked: the Nest approach (S9) and the Nest itself (S10) now serve as a two-stage boss sequence rather than a single climax stage.
Visual polish: landmarks¶
Named landmark props were added across Chapter 1 stages 6 through 10. Landmarks give each stage a distinct silhouette on the world map thumbnail and serve as orientation points during combat. Two new prop types were introduced: boathouse and boat pen (for the coastal and ferry stages). The Ch3 visual pass added a range tower prop used on the firing-range and airfield stages.
Visual polish: tainted terrain theme¶
Terrain tiles in Oracle-contaminated areas now render with a distinct visual theme
(desaturated base colors with a subtle color cast). The beach_tainted,
forest_tainted, bridge_ew_tainted, and bridge_ns_tainted tile variants were
updated. The tainted theme applies automatically based on a per-stage flag in the
chapter data.
Alpha unit sprites¶
Full sprite sets for Alpha-Katyusha, Alpha-Nadeshiko, and Alpha-Maria are now generated and wired into the drone renderer. Each Alpha unit has an 8-frame idle animation cycle. The sprites are visually distinct from their counterpart good units (inverted palette, no headset glow) while keeping the same silhouette for recognition. Alpha-Nadeshiko's sprites were the last to land, completing the set.
Localization: Chapter 1-3, JA and DE¶
Full Japanese and German locale overlays for all 30 stages across Chapters 1-3 were
created and committed. Previously only partial overlays existed for Ch2 and Ch3,
and no overlays existed for Ch1. All 60 files are now in place. The Steam store
page localization JSON (docs/localization/steam/storepage_1191484_all.json) was
also filled in for both locales.
Steam store¶
Marketing assets for Steam were generated via the existing asset pipeline
(generate.sh marketing). The store page copy in publishing.md was updated to
reflect the three-chapter scope. The Steamworks localization JSON was created with
English, Japanese, and German entries for app[content][about] and
app[content][short_description].
Minor¶
check.shwas extended to catch a broader class of GDScript import errors.- Battle music no longer cuts out when an in-stage cutscene fires mid-sector; the music track continues and the cutscene plays over it.
- The stage info dialog received a polish pass (layout, font sizing, chapter attribution).
- The "under fire" status message was firing multiple times per drone reaction sequence; it now fires at most once per player action.
- A crash in the Ch2 polish pass (null dereference in the cutscene player on rapid scene transitions) was fixed.
- Stage thumbnails for Ch1 stages 5-10 were regenerated after the landmark props and visual polish landed.