Wikifang:Telefang 1 Translation Patch/State Machine

From Wikifang, a definitive guide to Telefang, Dino Device and Bugsite
Jump to navigation Jump to search

Telefang's primary game loop is structured as a state machine. Each iteration of the game loop executes a handful of predefined tasks, and then indexes a jump table to load other screens' code. This indexing can be recursive, with individual states running their own predefined tasks before jumping into sub-states. This is known to recurse to at least fourth-order state machines.

State machines are indexed through four primary SystemState variables, and two secondary state variables. The secondary state variables are used in certain states for various reasons - usually to prevent overwriting the state of another screen. (Why they didn't set up a proper state stack for this sort of thing is beyond me...)

WRAM Addr Disassembly Symbol
$C3E0 W_SystemState First order state index
$C3E1 W_SystemSubState Second order state index
$C3E2 W_SystemSubSubState Third order state index (primary)
$C3E3 (Not named) Fourth order state index (presumed primary, not yet seen in practice)
$1:D400 W_Battle_SubSubState Third order state index (secondary)
$1:D401 W_Battle_4thOrderSubState Fourth order state index (secondary)

System State Machine

Here's a breakdown of the sixteen first-order states in Telefang.

State ID. Impl. ROM Addr Disassembly Symbol
$00 $2:5300 Intro logos.
$01 $2:493F Title screen
$02 $2:4000
$03 $4:4000 TitleMenu_GameStateMachine Title menu (continue/new game/options/link)
$04 $2:40BF Attract screen
$05 $B:1EA1 Overworld
$06 $1C:4000 Encounter_GameStateMachine Random, T-Fanger, and other plot-important encounters
$07 $5:441B Battle system
$08 $1D:4000 Victory_ExternalStateMachine Victory processing screens at end of battle (level-up, contact loss, game over)
$09 $2:4B8B Status screen (used in a lot of places...)
$0A $2:4824
$0B Aliases state $0C
$0C $4:45C0 Pause menu (contacts/index/save/dial etc)
$0D $2:44CF
$0E $2:458E
$0F $1F:4000 Link communications (vs battle/trade/melo-d)