Skip to content

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.