11 · Rules & Flow

Tutorial (Lecture) Mode

Diagram 00 of each line is the 入門ダイヤ , the teaching run. A flat array of 80-byte lecture records, a four-state display machine that freezes gameplay, an autodrive instructor, and a parallel scoring profile that observes without punishing.

11.1What makes lecture mode different

AspectNormal modeLecture mode (gameStatus[0]==1)
Life poolpenalties drain it; 0 = game overpenalties accumulate per category but never drain (profile 1 in subLifePoint)
Stop judgmentbonuses + penaltiesteaching messages (entryStopLecture) instead of bonuses
DeparturestartMapFunc states 0–4states 5/6 — signal-go + autodrive begins
Itemsnonefive consumable items (speed×2, brake boost, time-stop, score×2, rescue) — controlItem is gated on the lecture profile
Teaching prompts—unskippable text panels that freeze the game (GameCondition |= 2)

11.2The lecture record: 80 bytes each

All teaching content is one flat array at 0x5b8870: fixed 80-byte records, scanned by pointer stepping, no linked list:

OffsetFieldNotes
+0x00lecture IDwhat entryLecture(id) looks up
+0x04min display counthow long the panel stays
+0x08 / +0x0ccondition masksgated on game-status / mode selectors
+0x10..0x1cwindow + text positionsword-menu screen coordinates
+0x28window style_lect_basewindow: 1 → fixed texture 0x13d, else abs(v)+8 texture index
+0x2cchar* textthe message itself (strcpy into the menu)
+0x38voice ID≥0 → VoicePlay; −1 = silent
+0x3cPCM timeout−1 = no audio gate; else 3000-frame (50 s) cap
+0x40freeze type1 → GameConditionBk |= 2 (the freeze)
+0x48chained_lecture_idauto-chain: when this lecture closes, that one starts immediately — multi-page sequences without caller logic
/* the lecture display machine (DAT_006d42bc) */
state 1: show word menu with rec->text; freeze via GameCondition |= 2   // type 1
state 2: while (PcmCheck()) { if (++cnt > 3000) cancel; }               // voice gate
state 3: when word menu closes → cancelLecture()
         → if (rec->chained != -1) __sub_entrymlecture(rec->chained)   // auto-chain
Exhibit: procLecture @ 0x1c70ec. The freeze bit is what makes tutorials "stop the world" while the instructor talks.

11.3When lectures fire

Two trigger families, both resolved completely:

11.4The autodrive instructor

In lecture departure (startMapFunc states 5/6) the game sets the signal (changeStartSignalGo) and hands throttle to the autorun system (AutoRun @ 0x1a40cc, called from ttTrainGo when gameMode==2... and the lecture variant): dual scanners (a target-speed scanner over the route's speed limits and a brake-point scanner over the stop target) compute notch/brake commands each frame, with the −1.0 sentinel trick marking "no command". The player's inputs are suggestions the instructor demonstrates; the teaching prompts commentate ("now apply brake B5; you should stop within the yellow band").

Tutorial mode platform with teaching HUD
Lecture mode at the platform: the instructor HUD (teaching panels, speed guide) layers over the normal driving display. Note the diagram banner: diagram 00 of the line is always the tutorial.

11.5The debug flags behind it

The boot-flag cluster (five consecutive bytes @ 0x6c8748: UndeadFlag, DebugData, JoinDebugFlag, GameLoopFlag, MenuLoopFlag) interacts with tutorials: -debugdata unlocks all diagrams and maxes credits; -undead sets GameCondition bit 6 (in the game-over suppression mask) once per train init via ttTrainInit; -menuloop/-gameloop drive the attract loops (and, as this report's capture harness found, -menuloop also skips the boot caution screens, because MainTask checks it before displaying them).

← 10 · Win, Lose & Pause