Dev Log: 2026-06-01¶
Branch: rc/v0.1.3-dev
Landing cutscene and character narration¶
Two features landed this cycle that both work on the same problem from different angles: a new player needs to feel something before they are asked to learn anything.
The landing cutscene¶
The previous new-game flow went straight from the title screen to the reactive-turn tutorial. That is fine if the player already knows what Panzer Island is. It is a cold start if they do not.
The landing cutscene fires once, the first time a new player launches the
game (and again if they reset via "New Game" from the options menu, since
that clears the seen-cutscene log). It is gated by a flag
(intro_warning) written to the save immediately after playback.
What it shows is simple: the key visual fades in, a layered explosion SFX sequence plays (three hits, staggered, one drone-destroyed sound woven in), and a single line of italicized narration fades over the image. "Boss Fight" runs under all of it.
The narration line is Erika speaking before the catastrophe that erased her memory:
You built it. You have to stop it. Don't let them wake ORACLE again. Promise me.
She is talking to herself. Her future self. The player does not know this yet. The line lands as a warning from someone who understood what was coming and could not stop it. The player's first task in the game is to figure out what "it" refers to.
After eight seconds (or a skip tap) the image fades to black, the "Boss Fight" track continues, and the sequence hands off directly to the first sector of Stage 1.
Connecting the landing line to the waking scene¶
Chapter 1 Stage 1's opening backdrop cutscene shows Erika waking up in the lab. Her first line had been:
My name is Erika. That is the first thing that came back, and so far the only thing.
With the landing cutscene now in place that line read as a continuation of something the player had just heard; she wakes up, and the voice that just warned her about ORACLE is the same voice telling us she remembers only her name. The original phrasing pointed at the amnesia as a fact. The revised phrasing holds it a little more quietly:
My name is Erika. That is all I have. Whatever I was dreaming is already gone.
"Whatever I was dreaming" is close enough to a lie that it lands differently after the landing page. The player just watched what she was dreaming. She does not know she dreamed it.
The translated overlays (JA, DE) were updated alongside the English line.
Character narration in the tutorial¶
The tutorial system described in the 2026-05-31 entry runs each Chapter 1 sector's guidance through a narrator character. The coachmark bubble and spotlight have always been present; the portrait slot was not.
Each tutorial segment now carries a narrator field and an optional
narrator_emotion field. When TutorialRunner opens a new segment it
calls CoachOverlay.set_narrator(narrator, emotion), which loads the
character's bust-crop portrait and shows it at the bottom-left of the
board, framed in the same teal panel border as the coachmark bubble. If
the portrait asset is missing (during development, before art is
finalized) the slot simply stays hidden.
The portrait slot is positioned just below the HUD strip, left-side,
at the same height as the dialogue player's portrait slot. The coachmark
bubble itself is placed by the existing place_coach() logic on the
right side of the screen, clear of the portrait and the HUD obstacle
rectangles. The two elements share visual language (teal border, same
background tone) without overlapping.
The Chapter 1 narrator rotation is:
| Stage | Narrator | Emotion |
|---|---|---|
| 1 | Katyusha | neutral |
| 2 | Nadeshiko | tutorial_explaining |
| 3 | Maria | tutorial_explaining |
| 4 | Erika | tutorial_explaining |
| 5 | Katyusha | determined |
| 6 | Maria | tutorial_explaining |
| 7 | Katyusha | determined |
| 8 | Nadeshiko | tutorial_explaining |
| 9 | Maria | tutorial_explaining |
| 10 | Erika | determined |
The rotation was chosen to introduce each character as a guide before the player meets them in combat, then to keep the teaching voice varied across ten stages. Erika narrating stages 4 and 10 is intentional: she is the Scientist, and the two stages that teach the most technically demanding mechanics (limit break in stage 4, the queue system in stage 8 with Nadeshiko narrating) get the characters whose voices fit the instructional register.
Stage 10 narrated by Erika with the "determined" emotion portrait is the last piece in the loop: the player finishes Chapter 1 with Erika's face on the coaching bubble, immediately before the Wilhelm reveal. The narrator context makes the reveal land differently from outside the tutorial frame.
Implementation notes¶
The CoachOverlay portrait slot required a lazy-initialization fix
unrelated to the feature itself. _ready() fires only after a node
enters the scene tree; CoachOverlay is added as a child of
StageController, which in some loading paths is not yet in the tree
when the overlay is constructed. All public methods on CoachOverlay
now call _ensure_built() before touching any member, so the build
runs on first use rather than in _ready(), regardless of when the node
is parented.
The LandingCutscene scene is constructed entirely in code (no .tscn
file), consistent with the pattern used by DialoguePlayer and the
ObjectiveBanner. It is loaded by main.gd via preload() rather than
the class name to avoid depending on the editor's script-class scan at
the time main.gd is first parsed.
The skip flow for the landing cutscene uses the same skip button pattern
as the regular cutscene player: no advance arrow, just the skip button
in the lower-right corner. The screen tap and spacebar shortcuts also
advance it. The auto-advance timer runs in parallel; whichever fires
first wins, and a guard flag (_advance_emitted) prevents the signal
from firing twice.