Wikifang:Telefang 1 Translation Patch/State Machine: Difference between revisions

From Wikifang, a definitive guide to Telefang, Dino Device and Bugsite
Jump to navigation Jump to search
No edit summary
No edit summary
Line 28: Line 28:
! State ID. !! Impl. ROM Addr !! Disassembly Symbol !!  
! State ID. !! Impl. ROM Addr !! Disassembly Symbol !!  
|-
|-
| $00 || $2:5300 || || Intro logos.
| $00 || $02:5300 || || Intro logos.
|-
|-
| $01 || $2:493F || || Title screen
| $01 || $02:493F || || Title screen
|-
|-
| $02 || $2:4000 || ||
| $02 || $02:4000 || ||
|-
|-
| $03 || $4:4000 || TitleMenu_GameStateMachine || Title menu (continue/new game/options/link)
| $03 || $04:4000 || TitleMenu_GameStateMachine || Title menu (continue/new game/options/link)
|-
|-
| $04 || $2:40BF || || Attract screen
| $04 || $02:40BF || || Attract screen
|-
|-
| $05 || $B:1EA1 || || Overworld
| $05 || $0B:1EA1 || || Overworld
|-
|-
| $06 || $1C:4000 || Encounter_GameStateMachine || Random, T-Fanger, and other plot-important encounters
| $06 || $1C:4000 || Encounter_GameStateMachine || Random, T-Fanger, and other plot-important encounters
|-
|-
| $07 || $5:441B || || Battle system
| $07 || $05:441B || || Battle system
|-
|-
| $08 || $1D:4000 || Victory_ExternalStateMachine || Victory processing screens at end of battle (level-up, contact loss, game over)
| $08 || $1D:4000 || Victory_ExternalStateMachine || Victory processing screens at end of battle (level-up, contact loss, game over)
Line 59: Line 59:
|-
|-
| $0F || $1F:4000 || || Link communications (vs battle/trade/melo-d)
| $0F || $1F:4000 || || Link communications (vs battle/trade/melo-d)
|}
<span id="st_03">=== Title Menu ===</span>
{| class="wikitable"
|-
! State ID. !! Impl. ROM Addr !! Disassembly Symbol !!
|-
| $03 00 || || || Load CGB Palette 0
|-
| $03 01 || || || Initialize phone graphics & sprites
|-
| $03 02 || || || Load initial menu tilemaps & initialize menu state
|-
| $03 03 || || || Load tilemaps for each individual menu option.
|-
| $03 04 || || || Load color palettes for the menu.
Then, move the window and background layers in place for the upcoming animation.
|-
| $03 05 || || || Final commit of palettes. On DMG, this state configures the legacy palette registers instead.
|-
| $03 06 || || ||
|-
| $03 07 || || || Animate the two halves of the phone scrolling in.
|-
| $03 08 || || || Player input handling
|-
| $03 09 || || || Start menu-scrolling-up animation.
|-
| $03 0A || || || Menu-scrolling-up animation, frame 2.
|-
| $03 0B || || || End menu-scrolling animation (either direction).
|-
| $03 0C || || || Start menu-scrolling-down animation.
|-
| $03 0D || || || Menu-scrolling-down animation, frame 2.
|-
| $03 0E || || || Fade out screen, then transfer to overworld ($05 00)
|-
| $03 0F || || ||
|-
| $03 10 || || ||
|-
| $03 11 || || || Time input
|-
| $03 12 || || ||
|-
| $03 13 || || || Initialize naming input, clear string buffers.
|-
| $03 14 || || || Name input
|-
| $03 15 || || || Saves the input buffer to the player name buffer.
|-
| $03 16 || || ||
|-
| $03 17 || || ||
|-
| $03 18 || || || (Called when you select "Sound" on the menu. More info required.)
|-
| $03 19 || || ||
|-
| $03 1A || || ||
|-
| $03 1B || || ||
|-
| $03 1C || || || Save-file overwrite warning
|-
| $03 1D || || ||
|-
| $03 1E || || ||
|-
| $03 1F || colspan="3" style="text-align: center" | ''Aliases state $03 01''
|-
| $03 20 || || || Denjuu nicknaming screen init
|-
| $03 21 || || || Denjuu nicknaming palette fade-in
|-
| $03 22 || || || Denjuu nicknaming input handler
|-
| $03 23 || || || Denjuu nickname save
|-
| $03 24 || || ||
|-
| $03 25 || || ||
|}
|}

Revision as of 15:24, 22 July 2017

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 $02:5300 Intro logos.
$01 $02:493F Title screen
$02 $02:4000
$03 $04:4000 TitleMenu_GameStateMachine Title menu (continue/new game/options/link)
$04 $02:40BF Attract screen
$05 $0B:1EA1 Overworld
$06 $1C:4000 Encounter_GameStateMachine Random, T-Fanger, and other plot-important encounters
$07 $05: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)

=== Title Menu ===

State ID. Impl. ROM Addr Disassembly Symbol
$03 00 Load CGB Palette 0
$03 01 Initialize phone graphics & sprites
$03 02 Load initial menu tilemaps & initialize menu state
$03 03 Load tilemaps for each individual menu option.
$03 04 Load color palettes for the menu.

Then, move the window and background layers in place for the upcoming animation.

$03 05 Final commit of palettes. On DMG, this state configures the legacy palette registers instead.
$03 06
$03 07 Animate the two halves of the phone scrolling in.
$03 08 Player input handling
$03 09 Start menu-scrolling-up animation.
$03 0A Menu-scrolling-up animation, frame 2.
$03 0B End menu-scrolling animation (either direction).
$03 0C Start menu-scrolling-down animation.
$03 0D Menu-scrolling-down animation, frame 2.
$03 0E Fade out screen, then transfer to overworld ($05 00)
$03 0F
$03 10
$03 11 Time input
$03 12
$03 13 Initialize naming input, clear string buffers.
$03 14 Name input
$03 15 Saves the input buffer to the player name buffer.
$03 16
$03 17
$03 18 (Called when you select "Sound" on the menu. More info required.)
$03 19
$03 1A
$03 1B
$03 1C Save-file overwrite warning
$03 1D
$03 1E
$03 1F Aliases state $03 01
$03 20 Denjuu nicknaming screen init
$03 21 Denjuu nicknaming palette fade-in
$03 22 Denjuu nicknaming input handler
$03 23 Denjuu nickname save
$03 24
$03 25