summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/decompress.asm367
-rw-r--r--engine/init.asm225
-rw-r--r--engine/joypad.asm2
-rw-r--r--engine/movement.asm829
-rw-r--r--engine/scripting.asm104
-rw-r--r--engine/text.asm1229
-rw-r--r--engine/vblank.asm54
7 files changed, 2730 insertions, 80 deletions
diff --git a/engine/decompress.asm b/engine/decompress.asm
new file mode 100644
index 000000000..8d39cd968
--- /dev/null
+++ b/engine/decompress.asm
@@ -0,0 +1,367 @@
+FarDecompress: ; b40
+; Decompress graphics data at a:hl to de
+
+; put a away for a sec
+ ld [$c2c4], a
+; save bank
+ ld a, [hROMBank]
+ push af
+; bankswitch
+ ld a, [$c2c4]
+ rst Bankswitch
+
+; what we came here for
+ call Decompress
+
+; restore bank
+ pop af
+ rst Bankswitch
+ ret
+; b50
+
+
+Decompress: ; b50
+; Pokemon Crystal uses an lz variant for compression.
+
+; This is mainly used for graphics, but the intro's
+; tilemaps also use this compression.
+
+; This function decompresses lz-compressed data at hl to de.
+
+
+; Basic rundown:
+
+; A typical control command consists of:
+; -the command (bits 5-7)
+; -the count (bits 0-4)
+; -and any additional params
+
+; $ff is used as a terminator.
+
+
+; Commands:
+
+; 0: literal
+; literal data for some number of bytes
+; 1: iterate
+; one byte repeated for some number of bytes
+; 2: alternate
+; two bytes alternated for some number of bytes
+; 3: zero (whitespace)
+; 0x00 repeated for some number of bytes
+
+; Repeater control commands have a signed parameter used to determine the start point.
+; Wraparound is simulated:
+; Positive values are added to the start address of the decompressed data
+; and negative values are subtracted from the current position.
+
+; 4: repeat
+; repeat some number of bytes from decompressed data
+; 5: flipped
+; repeat some number of flipped bytes from decompressed data
+; ex: $ad = %10101101 -> %10110101 = $b5
+; 6: reverse
+; repeat some number of bytes in reverse from decompressed data
+
+; If the value in the count needs to be larger than 5 bits,
+; control code 7 can be used to expand the count to 10 bits.
+
+; A new control command is read in bits 2-4.
+; The new 10-bit count is split:
+; bits 0-1 contain the top 2 bits
+; another byte is added containing the latter 8
+
+; So, the structure of the control command becomes:
+; 111xxxyy yyyyyyyy
+; | | | |
+; | | our new count
+; | the control command for this count
+; 7 (this command)
+
+; For more information, refer to the code below and in extras/gfx.py .
+
+; save starting output address
+ ld a, e
+ ld [$c2c2], a
+ ld a, d
+ ld [$c2c3], a
+
+.loop
+; get next byte
+ ld a, [hl]
+; done?
+ cp $ff ; end
+ ret z
+
+; get control code
+ and %11100000
+
+; 10-bit param?
+ cp $e0 ; LZ_HI
+ jr nz, .normal
+
+
+; 10-bit param:
+
+; get next 3 bits (%00011100)
+ ld a, [hl]
+ add a
+ add a ; << 3
+ add a
+
+; this is our new control code
+ and %11100000
+ push af
+
+; get param hi
+ ld a, [hli]
+ and %00000011
+ ld b, a
+
+; get param lo
+ ld a, [hli]
+ ld c, a
+
+; read at least 1 byte
+ inc bc
+ jr .readers
+
+
+.normal
+; push control code
+ push af
+; get param
+ ld a, [hli]
+ and %00011111
+ ld c, a
+ ld b, $0
+; read at least 1 byte
+ inc c
+
+.readers
+; let's get started
+
+; inc loop counts since we bail as soon as they hit 0
+ inc b
+ inc c
+
+; get control code
+ pop af
+; command type
+ bit 7, a ; 80, a0, c0
+ jr nz, .repeatertype
+
+; literals
+ cp $20 ; LZ_ITER
+ jr z, .iter
+ cp $40 ; LZ_ALT
+ jr z, .alt
+ cp $60 ; LZ_ZERO
+ jr z, .zero
+ ; else $00
+
+; 00 ; LZ_LIT
+; literal data for bc bytes
+.loop1
+; done?
+ dec c
+ jr nz, .next1
+ dec b
+ jp z, .loop
+
+.next1
+ ld a, [hli]
+ ld [de], a
+ inc de
+ jr .loop1
+
+
+; 20 ; LZ_ITER
+; write byte for bc bytes
+.iter
+ ld a, [hli]
+
+.iterloop
+ dec c
+ jr nz, .iternext
+ dec b
+ jp z, .loop
+
+.iternext
+ ld [de], a
+ inc de
+ jr .iterloop
+
+
+; 40 ; LZ_ALT
+; alternate two bytes for bc bytes
+
+; next pair
+.alt
+; done?
+ dec c
+ jr nz, .alt0
+ dec b
+ jp z, .altclose0
+
+; alternate for bc
+.alt0
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .alt1
+; done?
+ dec b
+ jp z, .altclose1
+.alt1
+ ld a, [hld]
+ ld [de], a
+ inc de
+ jr .alt
+
+; skip past the bytes we were alternating
+.altclose0
+ inc hl
+.altclose1
+ inc hl
+ jr .loop
+
+
+; 60 ; LZ_ZERO
+; write 00 for bc bytes
+.zero
+ xor a
+
+.zeroloop
+ dec c
+ jr nz, .zeronext
+ dec b
+ jp z, .loop
+
+.zeronext
+ ld [de], a
+ inc de
+ jr .zeroloop
+
+
+; repeats
+; 80, a0, c0
+; repeat decompressed data from output
+.repeatertype
+ push hl
+ push af
+; get next byte
+ ld a, [hli]
+; absolute?
+ bit 7, a
+ jr z, .absolute
+
+; relative
+; a = -a
+ and %01111111 ; forget the bit we just looked at
+ cpl
+; add de (current output address)
+ add e
+ ld l, a
+ ld a, $ff ; -1
+ adc d
+ ld h, a
+ jr .repeaters
+
+.absolute
+; get next byte (lo)
+ ld l, [hl]
+; last byte (hi)
+ ld h, a
+; add starting output address
+ ld a, [$c2c2]
+ add l
+ ld l, a
+ ld a, [$c2c3]
+ adc h
+ ld h, a
+
+.repeaters
+ pop af
+ cp $80 ; LZ_REPEAT
+ jr z, .repeat
+ cp $a0 ; LZ_FLIP
+ jr z, .flip
+ cp $c0 ; LZ_REVERSE
+ jr z, .reverse
+
+; e0 -> 80
+
+; 80 ; LZ_REPEAT
+; repeat some decompressed data
+.repeat
+; done?
+ dec c
+ jr nz, .repeatnext
+ dec b
+ jr z, .cleanup
+
+.repeatnext
+ ld a, [hli]
+ ld [de], a
+ inc de
+ jr .repeat
+
+
+; a0 ; LZ_FLIP
+; repeat some decompressed data w/ flipped bit order
+.flip
+ dec c
+ jr nz, .flipnext
+ dec b
+ jp z, .cleanup
+
+.flipnext
+ ld a, [hli]
+ push bc
+ ld bc, $0008
+
+.fliploop
+ rra
+ rl b
+ dec c
+ jr nz, .fliploop
+ ld a, b
+ pop bc
+ ld [de], a
+ inc de
+ jr .flip
+
+
+; c0 ; LZ_REVERSE
+; repeat some decompressed data in reverse
+.reverse
+ dec c
+ jr nz, .reversenext
+
+ dec b
+ jp z, .cleanup
+
+.reversenext
+ ld a, [hld]
+ ld [de], a
+ inc de
+ jr .reverse
+
+
+.cleanup
+; get type of repeat we just used
+ pop hl
+; was it relative or absolute?
+ bit 7, [hl]
+ jr nz, .next
+
+; skip two bytes for absolute
+ inc hl
+; skip one byte for relative
+.next
+ inc hl
+ jp .loop
+; c2f
+
diff --git a/engine/init.asm b/engine/init.asm
new file mode 100644
index 000000000..d7594ae1d
--- /dev/null
+++ b/engine/init.asm
@@ -0,0 +1,225 @@
+Reset: ; 150
+ di
+ call CleanSoundRestart
+ xor a
+ ld [$ffde], a
+ call ClearPalettes
+ xor a
+ ld [rIF], a
+ ld a, 1 ; VBlank int
+ ld [rIE], a
+ ei
+
+ ld hl, $cfbe
+ set 7, [hl]
+
+ ld c, 32
+ call DelayFrames
+
+ jr Init
+; 16e
+
+
+_Start: ; 16e
+ cp $11
+ jr z, .asm_175
+ xor a
+ jr .asm_177
+
+.asm_175
+ ld a, $1
+
+.asm_177
+ ld [hCGB], a
+ ld a, $1
+ ld [$ffea], a
+; 17d
+
+
+Init: ; 17d
+
+ di
+
+ xor a
+ ld [rIF], a
+ ld [rIE], a
+ ld [rRP], a
+ ld [rSCX], a
+ ld [rSCY], a
+ ld [rSB], a
+ ld [rSC], a
+ ld [rWX], a
+ ld [rWY], a
+ ld [rBGP], a
+ ld [rOBP0], a
+ ld [rOBP1], a
+ ld [rTMA], a
+ ld [rTAC], a
+ ld [$d000], a
+
+ ld a, %100 ; Start timer at 4096Hz
+ ld [rTAC], a
+
+.wait
+ ld a, [rLY]
+ cp 145
+ jr nz, .wait
+
+ xor a
+ ld [rLCDC], a
+
+; Clear WRAM bank 0
+ ld hl, $c000
+ ld bc, $d000 - $c000
+.asm_1b1
+ ld [hl], 0
+ inc hl
+ dec bc
+ ld a, b
+ or c
+ jr nz, .asm_1b1
+
+ ld sp, Stack - 1
+
+; Clear HRAM
+ ld a, [hCGB]
+ push af
+ ld a, [$ffea]
+ push af
+ xor a
+ ld hl, $ff80
+ ld bc, $ffff - $ff80
+ call ByteFill
+ pop af
+ ld [$ffea], a
+ pop af
+ ld [hCGB], a
+
+ call ClearWRAM
+ ld a, 1
+ ld [rSVBK], a
+ call ClearVRAM
+ call ClearSprites
+ call Function270
+
+
+ ld a, BANK(LoadPushOAM)
+ rst Bankswitch
+
+ call LoadPushOAM
+
+ xor a
+ ld [$ffde], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld [rJOYP], a
+
+ ld a, $8 ; HBlank int enable
+ ld [rSTAT], a
+
+ ld a, $90
+ ld [hWY], a
+ ld [rWY], a
+
+ ld a, 7
+ ld [hWX], a
+ ld [rWX], a
+
+ ld a, %11100011
+ ; LCD on
+ ; Win tilemap 1
+ ; Win on
+ ; BG/Win tiledata 0
+ ; BG Tilemap 0
+ ; OBJ 8x8
+ ; OBJ on
+ ; BG on
+ ld [rLCDC], a
+
+ ld a, $ff
+ ld [$ffcb], a
+
+ callba Function9890
+
+ ld a, $9c
+ ld [$ffd7], a
+
+ xor a
+ ld [hBGMapAddress], a
+
+ callba StartClock
+
+ xor a
+ ld [MBC3LatchClock], a
+ ld [MBC3SRamEnable], a
+
+ ld a, [hCGB]
+ and a
+ jr z, .asm_22b
+ call Function2ff7
+.asm_22b
+
+ xor a
+ ld [rIF], a
+ ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts
+ ld [rIE], a
+ ei
+
+ call DelayFrame
+
+ ld a, $30
+ call Predef
+
+ call CleanSoundRestart
+ xor a
+ ld [CurMusic], a
+ jp GameInit
+; 245
+
+
+ClearVRAM: ; 245
+; Wipe VRAM banks 0 and 1
+
+ ld a, 1
+ ld [rVBK], a
+ call .clear
+
+ xor a
+ ld [rVBK], a
+.clear
+ ld hl, VTiles0
+ ld bc, $2000
+ xor a
+ call ByteFill
+ ret
+; 25a
+
+ClearWRAM: ; 25a
+; Wipe swappable WRAM banks (1-7)
+
+ ld a, 1
+.asm_25c
+ push af
+ ld [rSVBK], a
+ xor a
+ ld hl, $d000
+ ld bc, $1000
+ call ByteFill
+ pop af
+ inc a
+ cp 8
+ jr nc, .asm_25c
+ ret
+; 270
+
+Function270: ; 270
+ ld a, $0
+ call GetSRAMBank
+ ld hl, $a000
+ ld bc, $0020
+ xor a
+ call ByteFill
+ call CloseSRAM
+ ret
+; 283
+
diff --git a/engine/joypad.asm b/engine/joypad.asm
index b9702d33a..5266ef8a8 100644
--- a/engine/joypad.asm
+++ b/engine/joypad.asm
@@ -103,7 +103,7 @@ Joypad: ; 935
; For example, soft reset:
and BUTTON_A | BUTTON_B | SELECT | START
cp BUTTON_A | BUTTON_B | SELECT | START
- jp z, $0150 ; reset
+ jp z, Reset
ret
; 984
diff --git a/engine/movement.asm b/engine/movement.asm
new file mode 100644
index 000000000..da08280c1
--- /dev/null
+++ b/engine/movement.asm
@@ -0,0 +1,829 @@
+MovementPointers: ; 5075
+ dw Movement_turn_head_down
+ dw Movement_turn_head_up
+ dw Movement_turn_head_left
+ dw Movement_turn_head_right
+ dw Movement_half_step_down
+ dw Movement_half_step_up
+ dw Movement_half_step_left
+ dw Movement_half_step_right
+ dw Movement_slow_step_down
+ dw Movement_slow_step_up
+ dw Movement_slow_step_left
+ dw Movement_slow_step_right
+ dw Movement_step_down
+ dw Movement_step_up
+ dw Movement_step_left
+ dw Movement_step_right
+ dw Movement_big_step_down
+ dw Movement_big_step_up
+ dw Movement_big_step_left
+ dw Movement_big_step_right
+ dw Movement_slow_slide_step_down
+ dw Movement_slow_slide_step_up
+ dw Movement_slow_slide_step_left
+ dw Movement_slow_slide_step_right
+ dw Movement_slide_step_down
+ dw Movement_slide_step_up
+ dw Movement_slide_step_left
+ dw Movement_slide_step_right
+ dw Movement_fast_slide_step_down
+ dw Movement_fast_slide_step_up
+ dw Movement_fast_slide_step_left
+ dw Movement_fast_slide_step_right
+ dw Movement_turn_away_down
+ dw Movement_turn_away_up
+ dw Movement_turn_away_left
+ dw Movement_turn_away_right
+ dw Movement_turn_in_down
+ dw Movement_turn_in_up
+ dw Movement_turn_in_left
+ dw Movement_turn_in_right
+ dw Movement_turn_waterfall_down
+ dw Movement_turn_waterfall_up
+ dw Movement_turn_waterfall_left
+ dw Movement_turn_waterfall_right
+ dw Movement_slow_jump_step_down
+ dw Movement_slow_jump_step_up
+ dw Movement_slow_jump_step_left
+ dw Movement_slow_jump_step_right
+ dw Movement_jump_step_down
+ dw Movement_jump_step_up
+ dw Movement_jump_step_left
+ dw Movement_jump_step_right
+ dw Movement_fast_jump_step_down
+ dw Movement_fast_jump_step_up
+ dw Movement_fast_jump_step_left
+ dw Movement_fast_jump_step_right
+ dw Function5293
+ dw Function529c
+ dw Movement_remove_fixed_facing
+ dw Movement_fix_facing
+ dw Function52b7
+ dw Movement_hide_person
+ dw Movement_show_person
+ dw Function5226
+ dw Function522a
+ dw Function522e
+ dw Function5232
+ dw Function5236
+ dw Function523a
+ dw Movement_accelerate_last
+ dw Movement_step_sleep
+ dw Movement_step_end
+ dw Function51db
+ dw Movement_remove_person
+ dw Function51b8
+ dw Function5210
+ dw Movement_teleport_from
+ dw Movement_teleport_to
+ dw Movement_skyfall
+ dw Movement_step_wait5
+ dw Function525f
+ dw Function5189
+ dw Function51ab
+ dw Movement_hide_emote
+ dw Movement_show_emote
+ dw Movement_step_shake
+ dw Function5279
+ dw Function5196
+ dw Function516a
+ dw Function513e
+; 5129
+
+
+Movement_teleport_from: ; 5129
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $c
+ ret
+; 5130
+
+Movement_teleport_to: ; 5130
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $d
+ ret
+; 5137
+
+Movement_skyfall: ; 5137
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $e
+ ret
+; 513e
+
+Function513e: ; 513e
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $19
+ ret
+; 5145
+
+Movement_step_wait5: ; 5145
+ call GetSpriteDirection
+ rlca
+ rlca
+ ld hl, $000c
+ add hl, bc
+ ld [hl], a
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $4
+ call Function505e
+ ld hl, $000a
+ add hl, bc
+ ld [hl], a
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $3
+ ld hl, $0007
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 516a
+
+Function516a: ; 516a
+ call GetSpriteDirection
+ rlca
+ rlca
+ ld hl, $000c
+ add hl, bc
+ ld [hl], a
+ call Function505e
+ ld hl, $000a
+ add hl, bc
+ ld [hl], a
+ ld hl, $0007
+ add hl, bc
+ ld [hl], $ff
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $12
+ ret
+; 5189
+
+Function5189: ; 5189
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $6
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $10
+ ret
+; 5196
+
+Function5196: ; 5196
+ call Function505e
+ ld hl, $000a
+ add hl, bc
+ ld [hl], a
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $1
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $11
+ ret
+; 51ab
+
+Function51ab: ; 51ab
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $6
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $1
+ ret
+; 51b8
+
+Function51b8: ; 51b8
+ ld hl, $001b
+ add hl, bc
+ ld [hl], $0
+ jp Function5065
+; 51c1
+
+Movement_step_end: ; 51c1
+ call $4769
+ ld hl, $0003
+ add hl, bc
+ ld [hl], a
+ ld hl, $001b
+ add hl, bc
+ ld [hl], $0
+ ld hl, VramState
+ res 7, [hl]
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $1
+ ret
+; 51db
+
+Function51db: ; 51db
+ call $4769
+ ld hl, $0003
+ add hl, bc
+ ld [hl], a
+ ld hl, $001b
+ add hl, bc
+ ld [hl], $0
+ call Function505e
+ ld hl, $000a
+ add hl, bc
+ ld [hl], a
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $3
+ ld hl, VramState
+ res 7, [hl]
+ ret
+; 51fd
+
+Movement_remove_person: ; 51fd
+ call $4357
+ ld hl, $d4cd
+ ld a, [hConnectionStripLength]
+ cp [hl]
+ jr nz, .asm_520a
+ ld [hl], $ff
+
+.asm_520a
+ ld hl, VramState
+ res 7, [hl]
+ ret
+; 5210
+
+Function5210: ; 5210
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $1
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $4
+ ld hl, VramState
+ res 7, [hl]
+ ret
+; 5222
+
+Movement_show_person: ; 5222
+ ld a, $1
+ jr Function5247
+
+Function5226: ; 5226
+ ld a, $2
+ jr Function5247
+
+Function522a: ; 522a
+ ld a, $3
+ jr Function5247
+
+Function522e: ; 522e
+ ld a, $4
+ jr Function5247
+
+Function5232: ; 5232
+ ld a, $5
+ jr Function5247
+
+Function5236: ; 5236
+ ld a, $6
+ jr Function5247
+
+Function523a: ; 523a
+ ld a, $7
+ jr Function5247
+
+Movement_accelerate_last: ; 523e
+ ld a, $8
+ jr Function5247
+
+Movement_step_sleep: ; 5242
+; parameters:
+; duration (DecimalParam)
+
+ call Function505e
+ jr Function5247
+
+Function5247: ; 5247
+ ld hl, $000a
+ add hl, bc
+ ld [hl], a
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $3
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $1
+ ld hl, $0007
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 525f
+
+Function525f: ; 525f
+ ld a, $1
+ ld hl, $000a
+ add hl, bc
+ ld [hl], a
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $b
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $3
+ ld hl, $0007
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 5279
+
+Function5279: ; 5279
+ ld a, $18
+ ld hl, $000a
+ add hl, bc
+ ld [hl], a
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $3
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $b
+ ld hl, $0007
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 5293
+
+Function5293: ; 5293
+ ld hl, $0004
+ add hl, bc
+ res 3, [hl]
+ jp Function5065
+; 529c
+
+Function529c: ; 529c
+ ld hl, $0004
+ add hl, bc
+ set 3, [hl]
+ jp Function5065
+; 52a5
+
+Movement_remove_fixed_facing: ; 52a5
+ ld hl, $0004
+ add hl, bc
+ res 2, [hl]
+ jp Function5065
+; 52ae
+
+Movement_fix_facing: ; 52ae
+ ld hl, $0004
+ add hl, bc
+ set 2, [hl]
+ jp Function5065
+; 52b7
+
+Function52b7: ; 52b7
+ ld hl, $0004
+ add hl, bc
+ res 0, [hl]
+ jp Function5065
+; 52c0
+
+Movement_hide_person: ; 52c0
+ ld hl, $0004
+ add hl, bc
+ set 0, [hl]
+ jp Function5065
+; 52c9
+
+Movement_hide_emote: ; 52c9
+ call $5579
+ jp Function5065
+; 52cf
+
+Movement_show_emote: ; 52cf
+ call $5547
+ jp Function5065
+; 52d5
+
+Movement_step_shake: ; 52d5
+; parameters:
+; displacement (DecimalParam)
+
+ call Function505e
+ call $5565
+ jp Function5065
+; 52de
+
+Movement_turn_head_down: ; 52de
+ ld a, $0
+ jr Function52ee
+
+Movement_turn_head_up: ; 52e2
+ ld a, $4
+ jr Function52ee
+
+Movement_turn_head_left: ; 52e6
+ ld a, $8
+ jr Function52ee
+
+Movement_turn_head_right: ; 52ea
+ ld a, $c
+ jr Function52ee
+
+Function52ee: ; 52ee
+ ld hl, $0008
+ add hl, bc
+ ld [hl], a
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $1
+ ld hl, $0007
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 5300
+
+Movement_slow_step_down: ; 5300
+ ld a, $0
+ jp Function5412
+; 5305
+
+Movement_slow_step_up: ; 5305
+ ld a, $1
+ jp Function5412
+; 530a
+
+Movement_slow_step_left: ; 530a
+ ld a, $2
+ jp Function5412
+; 530f
+
+Movement_slow_step_right: ; 530f
+ ld a, $3
+ jp Function5412
+; 5314
+
+Movement_step_down: ; 5314
+ ld a, $4
+ jp Function5412
+; 5319
+
+Movement_step_up: ; 5319
+ ld a, $5
+ jp Function5412
+; 531e
+
+Movement_step_left: ; 531e
+ ld a, $6
+ jp Function5412
+; 5323
+
+Movement_step_right: ; 5323
+ ld a, $7
+ jp Function5412
+; 5328
+
+Movement_big_step_down: ; 5328
+ ld a, $8
+ jp Function5412
+; 532d
+
+Movement_big_step_up: ; 532d
+ ld a, $9
+ jp Function5412
+; 5332
+
+Movement_big_step_left: ; 5332
+ ld a, $a
+ jp Function5412
+; 5337
+
+Movement_big_step_right: ; 5337
+ ld a, $b
+ jp Function5412
+; 533c
+
+
+Movement_turn_away_down: ; 533c
+ ld a, $0
+ jp Function5446
+; 5341
+
+Movement_turn_away_up: ; 5341
+ ld a, $1
+ jp Function5446
+; 5346
+
+Movement_turn_away_left: ; 5346
+ ld a, $2
+ jp Function5446
+; 534b
+
+Movement_turn_away_right: ; 534b
+ ld a, $3
+ jp Function5446
+; 5350
+
+Movement_turn_in_down: ; 5350
+ ld a, $4
+ jp Function5446
+; 5355
+
+Movement_turn_in_up: ; 5355
+ ld a, $5
+ jp Function5446
+; 535a
+
+Movement_turn_in_left: ; 535a
+ ld a, $6
+ jp Function5446
+; 535f
+
+Movement_turn_in_right: ; 535f
+ ld a, $7
+ jp Function5446
+; 5364
+
+Movement_turn_waterfall_down: ; 5364
+ ld a, $8
+ jp Function5446
+; 5369
+
+Movement_turn_waterfall_up: ; 5369
+ ld a, $9
+ jp Function5446
+; 536e
+
+Movement_turn_waterfall_left: ; 536e
+ ld a, $a
+ jp Function5446
+; 5373
+
+Movement_turn_waterfall_right: ; 5373
+ ld a, $b
+ jp Function5446
+; 5378
+
+
+Movement_slow_slide_step_down: ; 5378
+ ld a, $0
+ jp Function5468
+; 537d
+
+Movement_slow_slide_step_up: ; 537d
+ ld a, $1
+ jp Function5468
+; 5382
+
+Movement_slow_slide_step_left: ; 5382
+ ld a, $2
+ jp Function5468
+; 5387
+
+Movement_slow_slide_step_right: ; 5387
+ ld a, $3
+ jp Function5468
+; 538c
+
+Movement_slide_step_down: ; 538c
+ ld a, $4
+ jp Function5468
+; 5391
+
+Movement_slide_step_up: ; 5391
+ ld a, $5
+ jp Function5468
+; 5396
+
+Movement_slide_step_left: ; 5396
+ ld a, $6
+ jp Function5468
+; 539b
+
+Movement_slide_step_right: ; 539b
+ ld a, $7
+ jp Function5468
+; 53a0
+
+Movement_fast_slide_step_down: ; 53a0
+ ld a, $8
+ jp Function5468
+; 53a5
+
+Movement_fast_slide_step_up: ; 53a5
+ ld a, $9
+ jp Function5468
+; 53aa
+
+Movement_fast_slide_step_left: ; 53aa
+ ld a, $a
+ jp Function5468
+; 53af
+
+Movement_fast_slide_step_right: ; 53af
+ ld a, $b
+ jp Function5468
+; 53b4
+
+
+Movement_slow_jump_step_down: ; 53b4
+ ld a, $0
+ jp Function548a
+; 53b9
+
+Movement_slow_jump_step_up: ; 53b9
+ ld a, $1
+ jp Function548a
+; 53be
+
+Movement_slow_jump_step_left: ; 53be
+ ld a, $2
+ jp Function548a
+; 53c3
+
+Movement_slow_jump_step_right: ; 53c3
+ ld a, $3
+ jp Function548a
+; 53c8
+
+Movement_jump_step_down: ; 53c8
+ ld a, $4
+ jp Function548a
+; 53cd
+
+Movement_jump_step_up: ; 53cd
+ ld a, $5
+ jp Function548a
+; 53d2
+
+Movement_jump_step_left: ; 53d2
+ ld a, $6
+ jp Function548a
+; 53d7
+
+Movement_jump_step_right: ; 53d7
+ ld a, $7
+ jp Function548a
+; 53dc
+
+Movement_fast_jump_step_down: ; 53dc
+ ld a, $8
+ jp Function548a
+; 53e1
+
+Movement_fast_jump_step_up: ; 53e1
+ ld a, $9
+ jp Function548a
+; 53e6
+
+Movement_fast_jump_step_left: ; 53e6
+ ld a, $a
+ jp Function548a
+; 53eb
+
+Movement_fast_jump_step_right: ; 53eb
+ ld a, $b
+ jp Function548a
+; 53f0
+
+
+Movement_half_step_down: ; 53f0
+ ld a, $0
+ jr Function5400
+
+Movement_half_step_up: ; 53f4
+ ld a, $4
+ jr Function5400
+
+Movement_half_step_left: ; 53f8
+ ld a, $8
+ jr Function5400
+
+Movement_half_step_right: ; 53fc
+ ld a, $c
+ jr Function5400
+
+Function5400: ; 5400
+ ld hl, $001d
+ add hl, bc
+ ld [hl], a
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $2
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $a
+ ret
+; 5412
+
+Function5412: ; 5412
+ call $4690
+ call $463f
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $2
+ ld hl, $000e
+ add hl, bc
+ ld a, [hl]
+ call $188e
+ jr z, .asm_542d
+ call $1875
+ jr c, .asm_5430
+
+.asm_542d
+ call $5556
+
+.asm_5430
+ ld hl, $d4cf
+ ld a, [hConnectionStripLength]
+ cp [hl]
+ jr z, .asm_543f
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $2
+ ret
+
+.asm_543f
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $6
+ ret
+; 5446
+
+Function5446: ; 5446
+ call $4690
+ call $463f
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $4
+ ld hl, $d4cf
+ ld a, [hConnectionStripLength]
+ cp [hl]
+ jr z, .asm_5461
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $2
+ ret
+
+.asm_5461
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $6
+ ret
+; 5468
+
+
+Function5468: ; 5468
+ call $4690
+ call $463f
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $1
+ ld hl, $d4cf
+ ld a, [hConnectionStripLength]
+ cp [hl]
+ jr z, .asm_5483
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $2
+ ret
+
+.asm_5483
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $6
+ ret
+; 548a
+
+
+Function548a: ; 548a
+ call $4690
+ ld hl, $001f
+ add hl, bc
+ ld [hl], $0
+ ld hl, $0005
+ add hl, bc
+ res 3, [hl]
+ ld hl, $000b
+ add hl, bc
+ ld [hl], $2
+ call $5529
+ ld hl, $d4cf
+ ld a, [hConnectionStripLength]
+ cp [hl]
+ jr z, .asm_54b1
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $8
+ ret
+
+.asm_54b1
+ ld hl, $0009
+ add hl, bc
+ ld [hl], $9
+ ret
+; 54b8
+
+
diff --git a/engine/scripting.asm b/engine/scripting.asm
index f9ede0041..79fbe69ee 100644
--- a/engine/scripting.asm
+++ b/engine/scripting.asm
@@ -485,11 +485,11 @@ Script_verbosegiveitem: ; 0x96f60
; item (ItemLabelByte)
; quantity (DecimalParam)
- call $77ca
+ call Script_giveitem
call CurItemName
ld de, StringBuffer1
ld a, $1
- call $76c8
+ call Function976c8
ld b, BANK(GiveItemScript)
ld de, GiveItemScript
jp ScriptCall
@@ -535,7 +535,7 @@ Script_verbosegiveitem2: ; 0x96f8e
.asm_96f98
ld [$d106], a
call GetScriptByte
- call $769e
+ call Unknown_0x9769e
ld a, [de]
ld [$d10c], a
ld hl, $d892
@@ -548,7 +548,7 @@ Script_verbosegiveitem2: ; 0x96f8e
call CurItemName
ld de, StringBuffer1
ld a, $1
- call $76c8
+ call Function976c8
ld b, BANK(GiveItemScript)
ld de, GiveItemScript
jp ScriptCall
@@ -1021,6 +1021,9 @@ Script_applymovement: ; 0x971f3
call GetScriptByte
call Unknown_0x971e3
ld c, a
+; 971fa
+
+Function971fa: ; 971fa
push bc
ld a, c
ld a, $1
@@ -1028,7 +1031,7 @@ Script_applymovement: ; 0x971f3
rst $8
pop bc
push bc
- call $7221
+ call Unknown_0x97221
pop bc
call GetScriptByte
ld l, a
@@ -1058,7 +1061,7 @@ Script_applymovement2: ; 0x97228
ld a, [$ffe0]
ld c, a
- jp $71fa
+ jp Function971fa
; 0x9722e
Script_faceplayer: ; 0x9722e
@@ -1079,7 +1082,7 @@ Script_faceplayer: ; 0x9722e
ld e, a
ld a, [$ffe0]
ld d, a
- call $728b
+ call Unknown_0x9728b
ret
; 0x97248
@@ -1114,7 +1117,7 @@ Script_faceperson: ; 0x97248
add a
ld e, a
ld d, c
- call $728b
+ call Unknown_0x9728b
ret
; 0x97274
@@ -1135,7 +1138,7 @@ Script_spriteface: ; 0x97274
add a
add a
ld e, a
- call $728b
+ call Unknown_0x9728b
ret
; 0x9728b
@@ -1161,7 +1164,7 @@ Unknown_0x9728b: ; 0x9728b
ld hl, $d0ed
bit 6, [hl]
jr nz, .asm_972b5 ; 0x972b0 $3
- call $72bc
+ call Unknown_0x972bc
.asm_972b5
call $1ad2
ret
@@ -1173,7 +1176,7 @@ Unknown_0x9728b: ; 0x9728b
Unknown_0x972bc: ; 0x972bc
call $217a
- ld hl, $c4a0
+ ld hl, TileMap
ld bc, $0168
.asm_972c5
res 7, [hl]
@@ -1211,7 +1214,7 @@ Script_appear: ; 0x972dd
call $1956
ld a, [$ffaf]
ld b, $0
- call $730b
+ call Unknown_0x9730b
ret
; 0x972ee
@@ -1229,7 +1232,7 @@ Script_disappear: ; 0x972ee
call $199f
ld a, [$ffaf]
ld b, $1
- call $730b
+ call Unknown_0x9730b
ld a, $1
ld hl, $5920
rst $8
@@ -1543,9 +1546,7 @@ Script_returnafterbattle: ; 0x97459
jr z, .asm_9748e ; 0x97481 $b
ld b, $24
ld de, $4255
- ld a, $25
- ld hl, $7c4f
- rst $8
+ callba Function97c4f
.asm_9748e
jp Script_reloadmap
; 0x97491
@@ -1978,7 +1979,7 @@ Script_random: ; 0x97640
and a
ret z
ld c, a
- call $7673
+ call Unknown_0x97673
and a
jr z, .asm_9765f ; 0x9764d $10
ld b, a
@@ -2027,7 +2028,7 @@ Script_checkcode: ; 0x9767d
; variable_id (SingleByteParam)
call GetScriptByte
- call $769e
+ call Unknown_0x9769e
ld a, [de]
ld [$c2dd], a
ret
@@ -2039,7 +2040,7 @@ Script_writevarcode: ; 0x97688
; variable_id (SingleByteParam)
call GetScriptByte
- call $769e
+ call Unknown_0x9769e
ld a, [$c2dd]
ld [de], a
ret
@@ -2052,7 +2053,7 @@ Script_writecode: ; 0x97693
; value (SingleByteParam)
call GetScriptByte
- call $769e
+ call Unknown_0x9769e
call GetScriptByte
ld [de], a
ret
@@ -2096,9 +2097,12 @@ Script_pokenamemem: ; 0x976ae
Unknown_976c0: ; 0x976c0
call GetScriptByte
cp $3
- jr c, .asm_976c8 ; 0x976c5 $1
+ jr c, .asm_976c8
xor a
.asm_976c8
+; 976c8
+
+Function976c8: ; 976c8
ld hl, StringBuffer3
ld bc, 19
call AddNTimes
@@ -2197,8 +2201,8 @@ Script_readmoney: ; 0x97732
; account (SingleByteParam)
; memory (SingleByteParam)
- call $7771
- call $7861
+ call Unknown_0x97771
+ call Unknown_0x97861
ld hl, StringBuffer1
ld bc, $4306
call $3198
@@ -2211,7 +2215,7 @@ Script_readcoins: ; 0x97747
; parameters:
; memory (SingleByteParam)
- call $7771
+ call Unknown_0x97771
ld hl, StringBuffer1
ld de, $d855
ld bc, $4206
@@ -2225,7 +2229,7 @@ Script_RAM2MEM: ; 0x9775c
; parameters:
; memory (SingleByteParam)
- call $7771
+ call Unknown_0x97771
ld de, $c2dd
ld hl, StringBuffer1
ld bc, $4103
@@ -2372,8 +2376,8 @@ Script_givemoney: ; 0x97829
; account (SingleByteParam)
; money (MoneyByteParam)
- call $7861
- call $786d
+ call Unknown_0x97861
+ call Unknown_0x9786d
ld a, $5
ld hl, $5fd7
rst $8
@@ -2386,8 +2390,8 @@ Script_takemoney: ; 0x97836
; account (SingleByteParam)
; money (MoneyByteParam)
- call $7861
- call $786d
+ call Unknown_0x97861
+ call Unknown_0x9786d
ld a, $5
ld hl, $5ffa
rst $8
@@ -2400,8 +2404,8 @@ Script_checkmoney: ; 0x97843
; account (SingleByteParam)
; money (MoneyByteParam)
- call $7861
- call $786d
+ call Unknown_0x97861
+ call Unknown_0x9786d
ld a, $5
ld hl, $600b
rst $8
@@ -2451,7 +2455,7 @@ Script_givecoins: ; 0x97881
; parameters:
; coins (CoinByteParam)
- call $78a0
+ call Function978a0
ld a, $5
ld hl, $606f
rst $8
@@ -2463,7 +2467,7 @@ Script_takecoins: ; 0x9788b
; parameters:
; coins (CoinByteParam)
- call $78a0
+ call Function978a0
ld a, $5
ld hl, $608f
rst $8
@@ -2475,11 +2479,14 @@ Script_checkcoins: ; 0x97895
; parameters:
; coins (CoinByteParam)
- call $78a0
+ call Function978a0
ld a, $5
ld hl, $60a1
rst $8
- jr Unknown_9784f ; 0x9789e $af
+ jr Unknown_9784f
+; 978a0
+
+Function978a0: ; 978a0
call GetScriptByte
ld [$ffc4], a
call GetScriptByte
@@ -2718,7 +2725,7 @@ Script_setbit2: ; 0x979bb
call GetScriptByte
ld d, a
ld b, $1
- call $79ee
+ call Unknown_0x979ee
ret
; 0x979c9
@@ -2732,7 +2739,7 @@ Script_clearbit2: ; 0x979c9
call GetScriptByte
ld d, a
ld b, $0
- call $79ee
+ call Unknown_0x979ee
ret
; 0x979d7
@@ -2746,7 +2753,7 @@ Script_checkbit2: ; 0x979d7
call GetScriptByte
ld d, a
ld b, $2
- call $79ee
+ call Unknown_0x979ee
ld a, c
and a
jr z, .asm_979ea ; 0x979e6 $2
@@ -2897,9 +2904,7 @@ Script_writecmdqueue: ; 0x97a8b
ld d, a
ld a, [ScriptBank]
ld b, a
- ld a, $25
- ld hl, $7e31
- rst $8
+ callba Function97e31
ret
; 0x97a9e
@@ -2912,9 +2917,7 @@ Script_delcmdqueue: ; 0x97a9e
ld [$c2dd], a
call GetScriptByte
ld b, a
- ld a, $25
- ld hl, $7e5c
- rst $8
+ callba Function97e5c
ret c
ld a, $1
ld [$c2dd], a
@@ -2976,16 +2979,12 @@ Script_warpcheck: ; 0x97af6
call $224a
ret nc
- ld a, $25
- ld hl, $66d0
- rst $8
+ callba Function966d0
ret
; 0x97b01
Unknown_0x97b01: ; 0x97b01
- ld a, $25
- ld hl, $66d0
- rst $8
+ callba Function966d0
ret
; 0x97b08
@@ -3005,7 +3004,7 @@ Script_newloadmap: ; 0x97b08
Script_reloadandreturn: ; 0x97b16
; script command 0x92
- call $7b08
+ call Script_newloadmap
jp Script_end
; 0x97b1c
@@ -3203,8 +3202,9 @@ Script_credits: ; 0x97bf3
ld hl, $6455
rst $8
; fallthrough
+
DisplayCredits:
- call $7bc0
+ call Script_resetfuncs
ld a, $3
call $261b
call StopScript
diff --git a/engine/text.asm b/engine/text.asm
new file mode 100644
index 000000000..ccc8623cf
--- /dev/null
+++ b/engine/text.asm
@@ -0,0 +1,1229 @@
+ClearBox: ; fb6
+; Fill a c*b box at hl with blank tiles.
+
+ ld a, " "
+.y
+ push bc
+ push hl
+.x
+ ld [hli], a
+ dec c
+ jr nz, .x
+ pop hl
+ ld bc, 20 ; screen width
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .y
+ ret
+; fc8
+
+
+ClearTileMap: ; fc8
+; Fill TileMap with blank tiles.
+
+ ld hl, TileMap
+ ld a, " "
+ ld bc, 360 ; screen dimensions 20*18
+ call ByteFill
+
+; We aren't done if the LCD is on.
+ ld a, [rLCDC]
+ bit 7, a
+ ret z
+ jp WaitBGMap
+; fdb
+
+
+Functionfdb: ; fdb
+ ld a, $7
+ ld hl, AttrMap
+ ld bc, $0168
+ call ByteFill
+ jr ClearTileMap
+; fe8
+
+
+
+TextBox: ; fe8
+; Draw a text box width c height b at hl
+; Dimensions do not include the border.
+ push bc
+ push hl
+ call TextBoxBorder
+ pop hl
+ pop bc
+ jr TextBoxPalette
+; ff1
+
+
+TextBoxBorder: ; ff1
+
+; Top
+ push hl
+ ld a, "┌"
+ ld [hli], a
+ inc a ; "─"
+ call NPlaceChar
+ inc a ; "┐"
+ ld [hl], a
+
+; Middle
+ pop hl
+ ld de, 20 ; screen width
+ add hl, de
+.PlaceRow
+ push hl
+ ld a, "│"
+ ld [hli], a
+ ld a, " "
+ call NPlaceChar
+ ld [hl], "│"
+ pop hl
+ ld de, 20 ; screen width
+ add hl, de
+ dec b
+ jr nz, .PlaceRow
+
+; Bottom
+ ld a, "└"
+ ld [hli], a
+ ld a, "─"
+ call NPlaceChar
+ ld [hl], "┘"
+
+ ret
+; 101e
+
+
+NPlaceChar: ; 101e
+; Place char a c times
+ ld d,c
+.loop
+ ld [hli],a
+ dec d
+ jr nz, .loop
+ ret
+; 1024
+
+
+TextBoxPalette: ; 1024
+; Fill text box width c height b at hl with pal 7
+ ld de, AttrMap - TileMap
+ add hl, de
+ inc b
+ inc b
+ inc c
+ inc c
+ ld a, 7 ; pal
+.gotoy
+ push bc
+ push hl
+.gotox
+ ld [hli], a
+ dec c
+ jr nz, .gotox
+ pop hl
+ ld de, 20 ; screen width
+ add hl, de
+ pop bc
+ dec b
+ jr nz, .gotoy
+ ret
+; 103e
+
+
+SpeechTextBox: ; 103e
+; Standard textbox.
+ hlcoord 0, 12
+ ld b, 4 ; height
+ ld c, 18 ; screen width - 2 (border)
+ jp TextBox
+; 1048
+
+UnknownText_0x1048: ; 1048
+ db $0, "ゲームフりーク!", $57
+; 1052
+
+Function1052: ; 1052
+ ld hl, .text_1056
+ ret
+.text_1056
+ db "@"
+; 1057
+
+
+PrintText: ; 1057
+ call Function106c
+ push hl
+ hlcoord 1, 14
+ ld bc, 18 + 3<<8
+ call ClearBox
+ pop hl
+
+PrintTextBoxText: ; 1065
+ bccoord 1, 14
+ call Function13e5
+ ret
+; 106c
+
+
+Function106c: ; 106c
+ push hl
+ call SpeechTextBox
+ call Function1ad2
+ call Function321c
+ pop hl
+ ret
+; 1078
+
+
+
+PlaceString: ; 1078
+ push hl
+
+PlaceNextChar: ; 1079
+ ld a, [de]
+ cp "@"
+ jr nz, CheckDict
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+ pop de
+
+NextChar: ; 1083
+ inc de
+ jp PlaceNextChar
+
+CheckDict: ; 1087
+ cp $15
+ jp z, Function117b
+ cp $4f
+ jp z, Char4F
+ cp $4e
+ jp z, Function12a7
+ cp $16
+ jp z, Function12b9
+ and a
+ jp z, Function1383
+ cp $4c
+ jp z, $1337
+ cp $4b
+ jp z, Char4B
+ cp $51 ; Player name
+ jp z, Function12f2
+ cp $49
+ jp z, Function1186
+ cp $52 ; Mother name
+ jp z, Function118d
+ cp $53
+ jp z, Function1194
+ cp $35
+ jp z, Function11e8
+ cp $36
+ jp z, Function11ef
+ cp $37
+ jp z, Function11f6
+ cp $38
+ jp z, Function119b
+ cp $39
+ jp z, Function11a2
+ cp $54
+ jp z, Function11c5
+ cp $5b
+ jp z, Function11b7
+ cp $5e
+ jp z, Function11be
+ cp $5c
+ jp z, Function11b0
+ cp $5d
+ jp z, Function11a9
+ cp $23
+ jp z, Function11cc
+ cp $22
+ jp z, Function12b0
+ cp $55
+ jp z, Char55
+ cp $56
+ jp z, Function11d3
+ cp $57
+ jp z, $137c
+ cp $58
+ jp z, Function135a
+ cp $4a
+ jp z, Function11da
+ cp $24
+ jp z, Function11e1
+ cp $25
+ jp z, NextChar
+ cp $1f
+ jr nz, .asm_1122
+ ld a, $7f
+.asm_1122
+ cp $5f
+ jp z, Char5F
+ cp $59
+ jp z, Function11fd
+ cp $5a
+ jp z, Char5D
+ cp $3f
+ jp z, $121b
+ cp $14
+ jp z, $1252
+ cp $e4
+ jr z, .asm_1174 ; 0x113d $35
+ cp $e5
+ jr z, .asm_1174 ; 0x1141 $31
+ jr .asm_114c ; 0x1143 $7
+ ld b, a
+ call Function13c6
+ jp NextChar
+.asm_114c
+ cp $60
+ jr nc, .asm_1174 ; 0x114e $24
+ cp $40
+ jr nc, .asm_1165 ; 0x1152 $11
+ cp $20
+ jr nc, .asm_115c ; 0x1156 $4
+ add $80
+ jr .asm_115e ; 0x115a $2
+.asm_115c
+ add $90
+.asm_115e
+ ld b, $e5
+ call Function13c6
+ jr .asm_1174 ; 0x1163 $f
+.asm_1165
+ cp $44
+ jr nc, .asm_116d ; 0x1167 $4
+ add $59
+ jr .asm_116f ; 0x116b $2
+.asm_116d
+ add $86
+.asm_116f
+ ld b, $e4
+ call Function13c6
+.asm_1174
+ ld [hli], a
+ call PrintLetterDelay
+ jp NextChar
+; 0x117b
+
+
+Function117b: ; 117b
+ ld c, l
+ ld b, h
+ ld a, $5f
+ ld hl, $7036
+ rst FarCall
+ jp PlaceNextChar
+; 1186
+
+Function1186: ; 1186
+ push de
+ ld de, MomsName
+ jp $126a
+; 118d
+
+Function118d: ; 118d
+ push de
+ ld de, PlayerName
+ jp $126a
+; 1194
+
+Function1194: ; 1194
+ push de
+ ld de, RivalName
+ jp $126a
+; 119b
+
+Function119b: ; 119b
+ push de
+ ld de, RedsName
+ jp $126a
+; 11a2
+
+Function11a2: ; 11a2
+ push de
+ ld de, GreensName
+ jp $126a
+; 11a9
+
+Function11a9: ; 11a9
+ push de
+ ld de, Char5DText
+ jp $126a
+; 11b0
+
+Function11b0: ; 11b0
+ push de
+ ld de, Char5CText
+ jp $126a
+; 11b7
+
+Function11b7: ; 11b7
+ push de
+ ld de, Char5BText
+ jp $126a
+; 11be
+
+Function11be: ; 11be
+ push de
+ ld de, Char5EText
+ jp $126a
+; 11c5
+
+Function11c5: ; 11c5
+ push de
+ ld de, Char54Text
+ jp $126a
+; 11cc
+
+Function11cc: ; 11cc
+ push de
+ ld de, Char23Text
+ jp $126a
+; 11d3
+
+Function11d3: ; 11d3
+ push de
+ ld de, $1292
+ jp $126a
+; 11da
+
+Function11da: ; 11da
+ push de
+ ld de, Char4AText
+ jp $126a
+; 11e1
+
+Function11e1: ; 11e1
+ push de
+ ld de, Char24Text
+ jp $126a
+; 11e8
+
+Function11e8: ; 11e8
+ push de
+ ld de, Char37Text
+ jp $126a
+; 11ef
+
+Function11ef: ; 11ef
+ push de
+ ld de, Char37Text
+ jp $126a
+; 11f6
+
+Function11f6: ; 11f6
+ push de
+ ld de, Char37Text
+ jp $126a
+; 11fd
+
+
+Function11fd: ; 11fd
+ ld a, [hBattleTurn]
+ xor $1
+ jr Function1205
+; 1203
+
+Char5D: ; 1203
+ ld a, [hBattleTurn]
+; 1205
+
+Function1205: ; 1205
+ push de
+ and a
+ jr nz, .asm_120e ; 0x1207 $5
+ ld de, BattleMonNick
+ jr .asm_126a ; 0x120c $5c
+.asm_120e
+ ld de, Char5AText ; Enemy
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, EnemyMonNick
+ jr .asm_126a ; 0x1219 $4f
+ push de
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .linkbattle
+ ld a, [TrainerClass]
+ cp $9
+ jr z, .asm_1248 ; 0x1227 $1f
+ cp $2a
+ jr z, .asm_1248 ; 0x122b $1b
+ ld de, $c656
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, String12a2
+ call PlaceString
+ push bc
+ ld hl, $5939
+ ld a, $e
+ rst FarCall
+ pop hl
+ ld de, StringBuffer1
+ jr .asm_126a ; 0x1246 $22
+.asm_1248
+ ld de, RivalName
+ jr .asm_126a ; 0x124b $1d
+.linkbattle
+ ld de, $c656
+ jr .asm_126a ; 0x1250 $18
+ push de
+ ld de, PlayerName
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld a, [PlayerGender]
+ bit 0, a
+ ld de, String12a5
+ jr z, .asm_126a ; 0x1263 $5
+ ld de, String12a6
+ jr .asm_126a ; 0x1268 $0
+.asm_126a
+ call PlaceString
+ ld h, b
+ ld l, c
+ pop de
+ jp NextChar
+; 0x1273
+
+Char5CText: ; 1273
+ db "TM@"
+Char5DText: ; 1276
+ db "TRAINER@"
+Char5BText: ; 127e
+ db "PC@"
+Char5EText: ; 1281
+ db "ROCKET@"
+Char54Text: ; 1288
+ db "POKé@"
+Char23Text: ; 128d
+ db "こうげき@"
+Char56Text:; 1292
+ db "……@"
+Char5AText: ; 1295
+ db "Enemy @"
+Char4AText: ; 129c
+ db $e1, $e2, "@" ; PK MN
+Char24Text: ; 129f
+ db $70, $71, "@" ; PO KE
+String12a2: ; 12a2
+ db " @"
+Char35Text:
+Char36Text:
+Char37Text: ; 12a4
+ db "@"
+String12a5: ; 12a5
+ db "@"
+String12a6: ; 12a6
+ db "@"
+; 12a7
+
+Function12a7: ; 12a7
+ pop hl
+ ld bc, $0028
+ add hl, bc
+ push hl
+ jp NextChar
+; 12b0
+
+Function12b0: ; 12b0
+ pop hl
+ ld bc, $0014
+ add hl, bc
+ push hl
+ jp NextChar
+; 12b9
+
+Function12b9: ; 12b9
+ pop hl
+ push de
+ ld bc, $3b60
+ add hl, bc
+ ld de, $ffec
+ ld c, $1
+.asm_12c4
+ ld a, h
+ and a
+ jr nz, .asm_12cd
+ ld a, l
+ cp $14
+ jr c, .asm_12d1
+
+.asm_12cd
+ add hl, de
+ inc c
+ jr .asm_12c4
+
+.asm_12d1
+ ld hl, TileMap
+ ld de, $0014
+ ld a, c
+.asm_12d8
+ and a
+ jr z, .asm_12df
+ add hl, de
+ dec a
+ jr .asm_12d8
+
+.asm_12df
+ pop de
+ inc de
+ ld a, [de]
+ ld c, a
+ ld b, $0
+ add hl, bc
+ push hl
+ jp NextChar
+; 12ea
+
+
+Char4F: ; 12ea
+ pop hl
+ hlcoord 1, 16
+ push hl
+ jp NextChar
+; 0x12f2
+
+Function12f2: ; 12f2
+ push de
+ ld a, [InLinkBattle]
+ cp $3
+ jr z, .asm_1301
+ cp $4
+ jr z, .asm_1301
+ call Function13c7
+
+.asm_1301
+ call Function13b6
+ call Functionaaf
+ ld hl, $c5b9
+ ld bc, $0312
+ call ClearBox
+ call Function13cd
+ ld c, $14
+ call DelayFrames
+ ld hl, $c5b9
+ pop de
+ jp NextChar
+; 131f
+
+
+Char4B: ; 131f
+ ld a, [InLinkBattle]
+ or a
+ jr nz, .asm_1328
+ call Function13c7
+
+.asm_1328
+ call Function13b6
+
+ push de
+ call Functionaaf
+ pop de
+
+ ld a, [InLinkBattle]
+ or a
+ call z, Function13cd
+
+ push de
+ call Function138c
+ call Function138c
+ hlcoord 1, 16
+ pop de
+ jp NextChar
+; 1345
+
+
+Char55: ; 1345
+ push de
+ ld de, Text_1354
+ ld b, h
+ ld c, l
+ call PlaceString
+ ld h, b
+ ld l, c
+ pop de
+ jp NextChar
+; 1354
+
+Text_1354: ; 1354
+ db $4b, "@"
+; 1356
+
+
+Char5F: ; 1356
+; ends a Pokédex entry
+ ld [hl], "."
+ pop hl
+ ret
+; 135a
+
+Function135a: ; 135a
+ ld a, [InLinkBattle]
+ cp $3
+ jr z, .asm_1368
+ cp $4
+ jr z, .asm_1368
+ call Function13c7
+
+.asm_1368
+ call Function13b6
+ call Functionaaf
+ ld a, [InLinkBattle]
+ cp $3
+ jr z, .asm_137c
+ cp $4
+ jr z, .asm_137c
+ call Function13cd
+
+.asm_137c
+ pop hl
+ ld de, .string_1382
+ dec de
+ ret
+
+.string_1382
+ db "@"
+; 1383
+
+Function1383: ; 1383
+ ld a, $e6
+ ld [hli], a
+ call PrintLetterDelay
+ jp NextChar
+; 138c
+
+Function138c: ; 138c
+ ld hl, $c5b9
+ ld de, $c5a5
+ ld a, $3
+.asm_1394
+ push af
+ ld c, $12
+.asm_1397
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_1397
+ inc de
+ inc de
+ inc hl
+ inc hl
+ pop af
+ dec a
+ jr nz, .asm_1394
+ ld hl, $c5e1
+ ld a, $7f
+ ld bc, $0012
+ call ByteFill
+ ld c, $5
+ call DelayFrames
+ ret
+; 13b6
+
+Function13b6: ; 13b6
+ push bc
+ ld a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ld [hOAMUpdate], a
+ call WaitBGMap
+ pop af
+ ld [hOAMUpdate], a
+ pop bc
+ ret
+; 13c6
+
+Function13c6: ; 13c6
+ ret
+; 13c7
+
+Function13c7: ; 13c7
+ ld a, $ee
+ ld [$c606], a
+ ret
+; 13cd
+
+Function13cd: ; 13cd
+ ld a, [$c605]
+ ld [$c606], a
+ ret
+; 13d4
+
+Function13d4: ; 13d4
+ ld b, a
+ ld a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ call PlaceString
+ pop af
+ rst Bankswitch
+
+ ret
+; 13e0
+
+Function13e0: ; 13e0
+ ld hl, $13e4
+ ret
+
+.string_13e4
+ db "@"
+; 13e5
+
+
+Function13e5: ; 13e5
+ ld a, [$cfcf]
+ push af
+ set 1, a
+ ld [$cfcf], a
+ call Function13f6
+ pop af
+ ld [$cfcf], a
+ ret
+; 13f6
+
+Function13f6: ; 13f6
+.asm_13f6
+ ld a, [hli]
+ cp "@"
+ ret z
+ call Function13ff
+ jr .asm_13f6
+; 13ff
+
+Function13ff: ; 13ff
+ push hl
+ push bc
+ ld c, a
+ ld b, 0
+ ld hl, TextCommands
+ add hl, bc
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ pop bc
+ pop hl
+
+; jp de
+ push de
+ ret
+; 1410
+
+TextCommands: ; 1410
+ dw Text_00
+ dw Text_01
+ dw Text_02
+ dw Text_03
+ dw Text_04
+ dw Text_05
+ dw Text_06
+ dw Text_07
+ dw Text_08
+ dw Text_09
+ dw Text_0A
+ dw Text_PlaySound ; $0b
+ dw Text_0C
+ dw Text_0D
+ dw Text_PlaySound ; $0e
+ dw Text_PlaySound ; $0f
+ dw Text_PlaySound ; $10
+ dw Text_PlaySound ; $11
+ dw Text_PlaySound ; $12
+ dw Text_PlaySound ; $13
+ dw Text_14
+ dw Text_15
+ dw Text_16
+; 143e
+
+Text_00: ; 143e
+; TX
+; write text until "@"
+; [$00]["...@"]
+
+ ld d, h
+ ld e, l
+ ld h, b
+ ld l, c
+ call PlaceString
+ ld h, d
+ ld l, e
+ inc hl
+ ret
+; 1449
+
+Text_01: ; 1449
+; TX_RAM
+; write text from a ram address
+; little endian
+; [$01][addr]
+
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ push hl
+ ld h, b
+ ld l, c
+ call PlaceString
+ pop hl
+ ret
+; 1455
+
+Text_16: ; 1455
+; TX_FAR
+; write text from a different bank
+; little endian
+; [$16][addr][bank]
+
+ ld a, [hROMBank]
+ push af
+
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+
+ ld [hROMBank], a
+ ld [MBC3RomBank], a
+
+ push hl
+ ld h, d
+ ld l, e
+ call Function13f6
+ pop hl
+
+ pop af
+ ld [hROMBank], a
+ ld [MBC3RomBank], a
+ ret
+; 1470
+
+Text_02: ; 1470
+; TX_NUM
+; write bcdnumber from address, typically ram
+; little endian
+; [$02][addr][flags]
+; flags: see PrintBCDNumber
+
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ push hl
+ ld h, b
+ ld l, c
+ ld c, a
+ call PrintBCDNumber
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+; 1480
+
+Text_03: ; 1480
+; TX_MOVE
+; move to a new tile
+; little endian
+; [$03][tileaddr]
+
+ ld a, [hli]
+ ld [$d0e6], a
+ ld c, a
+ ld a, [hli]
+ ld [$d0e7], a
+ ld b, a
+ ret
+; 148b
+
+Text_04: ; 148b
+; TX_BOX
+; draw a box
+; little endian
+; [$04][tileaddr][height][width]
+
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+ push hl
+ ld h, d
+ ld l, e
+ call TextBox
+ pop hl
+ ret
+; 149b
+
+Text_05: ; 149b
+; TX_LOW
+; write text at (1,16)
+; [$05]
+
+ bccoord 1, 16
+ ret
+; 149f
+
+Text_06:: ; 149f
+; TX_WAITBUTTON
+; wait for button press
+; show arrow
+; [06]
+
+ ld a, [InLinkBattle]
+ cp $3
+ jp z, Text_0D
+ cp $4
+ jp z, Text_0D
+ push hl
+ call Function13c7
+ push bc
+ call Functionaaf
+ pop bc
+ call Function13cd
+ pop hl
+ ret
+; 14ba
+
+Text_07: ; 14ba
+ push hl
+ call Function13cd
+ call Function138c
+ call Function138c
+ pop hl
+ bccoord 1, 16
+ ret
+; 14c9
+
+Text_08: ; 14c9
+; TX_ASM
+
+; rom only?
+ bit 7, h
+ jr nz, .asm_14ce
+ jp [hl]
+
+.asm_14ce
+ ld a, "@"
+ ld [hl], a
+ ret
+; 14d2
+
+Text_09: ; 14d2
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ push hl
+ ld h, b
+ ld l, c
+ ld b, a
+ and $f
+ ld c, a
+ ld a, b
+ and $f0
+ swap a
+ set 6, a
+ ld b, a
+ call PrintNum
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+; 14ed
+
+Text_0A: ; 14ed
+ push hl
+ push bc
+ call GetJoypadPublic
+ ld a, [hJoyDown]
+ and BUTTON_A | BUTTON_B
+ jr nz, .asm_14fd
+ ld c, 30
+ call DelayFrames
+
+.asm_14fd
+ pop bc
+ pop hl
+ ret
+; 1500
+
+Text_PlaySound:: ; 1500
+; chars:
+; $0b, $0e, $0f, $10, $11, $12, $13
+; see TextSFX
+
+ push bc
+ dec hl
+ ld a, [hli]
+ ld b, a
+ push hl
+ ld hl, TextSFX
+.asm_1508
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_151f
+ cp b
+ jr z, .asm_1514
+ inc hl
+ inc hl
+ jr .asm_1508
+
+.asm_1514
+ push de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call StartSFX
+ call WaitSFX
+ pop de
+
+.asm_151f
+ pop hl
+ pop bc
+ ret
+; 1522
+
+Function1522: ; 1522
+ push de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call Function37ce
+ pop de
+ pop hl
+ pop bc
+ ret
+; 152d
+
+TextSFX: ; 152d
+ dbw $0b, SFX_DEX_FANFARE_50_79
+ dbw $12, SFX_FANFARE
+ dbw $0e, SFX_DEX_FANFARE_20_49
+ dbw $0f, SFX_ITEM
+ dbw $10, SFX_CAUGHT_MON
+ dbw $11, SFX_DEX_FANFARE_80_109
+ dbw $13, SFX_SLOT_MACHINE_START
+ db $ff ; end
+; 1543
+
+Text_0C: ; 1543
+ ld a, [hli]
+ ld d, a
+ push hl
+ ld h, b
+ ld l, c
+.asm_1548
+ push de
+ ld a, "…"
+ ld [hli], a
+ call GetJoypadPublic
+ ld a, [hJoyDown]
+ and BUTTON_A | BUTTON_B
+ jr nz, .asm_155a
+ ld c, 10
+ call DelayFrames
+.asm_155a
+ pop de
+ dec d
+ jr nz, .asm_1548
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+; 1562
+
+Text_0D: ; 1562
+; wait for key down
+; display arrow
+ push hl
+ push bc
+ call Functionaaf
+ pop bc
+ pop hl
+ ret
+; 156a
+
+Text_14: ; 156a
+; TX_PREDEF
+; [$14][id]
+
+ ld a, [hli]
+ push hl
+ ld e, a
+ ld d, 0
+ ld hl, $4000
+ add hl, de
+ add hl, de
+ ld a, $9
+ call GetFarHalfword
+ ld d, h
+ ld e, l
+ ld h, b
+ ld l, c
+ call PlaceString
+ pop hl
+ ret
+; 1582
+
+Text_15: ; 1582
+; TX_DAY
+
+ call GetWeekday
+ push hl
+ push bc
+ ld c, a
+ ld b, 0
+ ld hl, .Days
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld d, h
+ ld e, l
+ pop hl
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, .Day
+ call PlaceString
+ pop hl
+ ret
+; 15a2
+
+.Days ; 15a2
+ dw .Sun
+ dw .Mon
+ dw .Tues
+ dw .Wednes
+ dw .Thurs
+ dw .Fri
+ dw .Satur
+
+.Sun db "SUN@"
+.Mon db "MON@"
+.Tues db "TUES@"
+.Wednes db "WEDNES@"
+.Thurs db "THURS@"
+.Fri db "FRI@"
+.Satur db "SATUR@"
+.Day db "DAY@"
+; 15d8
+
diff --git a/engine/vblank.asm b/engine/vblank.asm
index 5080a56ad..6a319356c 100644
--- a/engine/vblank.asm
+++ b/engine/vblank.asm
@@ -71,31 +71,31 @@ VBlank0: ; 2b1
; advance rng
ld a, [rDIV]
ld b, a
- ld a, [$ffe1]
+ ld a, [hRandomAdd]
adc b
- ld [$ffe1], a
+ ld [hRandomAdd], a
ld a, [rDIV]
ld b, a
- ld a, [$ffe2]
+ ld a, [hRandomSub]
sbc b
- ld [$ffe2], a
+ ld [hRandomSub], a
; save bank
- ld a, [$ff9d] ; current bank
+ ld a, [hROMBank] ; current bank
ld [$ff8a], a
; scroll x
- ld a, [$ffcf]
+ ld a, [hSCX]
ld [rSCX], a
; scroll y
- ld a, [$ffd0]
+ ld a, [hSCY]
ld [rSCY], a
; window y
- ld a, [$ffd2]
+ ld a, [hWY]
ld [rWY], a
; window x + 7
- ld a, [$ffd1]
+ ld a, [hWX]
ld [rWX], a
; some time management is in order
@@ -123,7 +123,7 @@ VBlank0: ; 2b1
.doneframeaction
; oam update off?
- ld a, [$ffd8]
+ ld a, [hOAMUpdate]
and a
jr nz, .vblankoccurred
@@ -146,12 +146,12 @@ VBlank0: ; 2b1
xor a
ld [VBlankOccurred], a
-; dec $cfb1 until 0
- ld a, [$cfb1]
+; dec OverworldDelay until 0
+ ld a, [OverworldDelay]
and a
jr z, .textdelay
dec a
- ld [$cfb1], a
+ ld [OverworldDelay], a
.textdelay
; dec text delay counter until 0
@@ -172,7 +172,7 @@ VBlank0: ; 2b1
rst Bankswitch ; restore bank
;
- ld a, [$ff98]
+ ld a, [hSeconds]
ld [$ffe3], a
ret
@@ -183,7 +183,7 @@ VBlank2: ; 325
; sound only
; save bank
- ld a, [$ff9d]
+ ld a, [hROMBank]
ld [$ff8a], a
; update sound
@@ -211,15 +211,15 @@ VBlank1: ; 337
; sound / lcd stat
; save bank
- ld a, [$ff9d]
+ ld a, [hROMBank]
ld [$ff8a], a
; scroll x
- ld a, [$ffcf]
+ ld a, [hSCX]
ld [rSCX], a
; scroll y
- ld a, [$ffd0]
+ ld a, [hSCY]
ld [rSCY], a
; time-sensitive fns
@@ -291,7 +291,7 @@ UpdatePals: ; 37f
; update pals for either dmg or cgb
; check cgb
- ld a, [$ffe6]
+ ld a, [hCGB]
and a
jp nz, UpdateCGBPals
@@ -319,18 +319,18 @@ VBlank3: ; 396
; sound / lcd stat
; save bank
- ld a, [$ff9d]
+ ld a, [hROMBank]
ld [$ff8a], a
; scroll x
- ld a, [$ffcf]
+ ld a, [hSCX]
ld [rSCX], a
; scroll y
- ld a, [$ffd0]
+ ld a, [hSCY]
ld [rSCY], a
; any pals to update?
- ld a, [$ffe5]
+ ld a, [hCGBPalUpdate]
and a
call nz, ForceUpdateCGBPals
jr c, .vblankoccurred
@@ -404,7 +404,7 @@ VBlank4: ; 3df
; sound
; save bank
- ld a, [$ff9d]
+ ld a, [hROMBank]
ld [$ff8a], a
call UpdateBGMap
@@ -451,11 +451,11 @@ VBlank5: ; 400
;
; save bank
- ld a, [$ff9d]
+ ld a, [hROMBank]
ld [$ff8a], a
; scroll x
- ld a, [$ffcf]
+ ld a, [hSCX]
ld [rSCX], a
; if we can update pals, skip this part
@@ -509,7 +509,7 @@ VBlank6: ; 436
; sound
; save bank
- ld a, [$ff9d]
+ ld a, [hROMBank]
ld [$ff8a], a
; inc frame counter