ref: 9152664ca51e2c870ed89ba3c81473847c1705db
parent: 3e5b09b9416c0f734298e156bc4afb8db1d2140b
parent: b86d0da040448f286aa65ff5b2bacb05fff200a8
author: Bryan Bishop <[email protected]>
date: Fri Aug 30 09:06:57 EDT 2013
Merge pull request #177 from yenatch/split-main split out a bunch of bank 0 from main.asm
--- /dev/null
+++ b/engine/copy.asm
@@ -1,0 +1,431 @@
+; Functions to copy data from ROM.
+
+
+Functiondc9: ; dc9
+ ld a, [rLCDC]
+ bit 7, a
+ jp z, Copy2bpp
+
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(Function104284)
+ rst Bankswitch
+ call Function104284
+ pop af
+ rst Bankswitch
+
+ ret
+; ddc
+
+Functionddc: ; ddc
+ ld a, [rLCDC]
+ bit 7, a
+ jp z, Copy1bpp
+
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(Function1042b2)
+ rst Bankswitch
+ call Function1042b2
+ pop af
+ rst Bankswitch
+
+ ret
+; def
+
+Functiondef: ; def
+ ld [hBuffer], a
+ ld a, [hROMBank]
+ push af
+ ld a, [hBuffer]
+ rst Bankswitch
+ call FarCopyBytesDouble
+ pop af
+ rst Bankswitch
+ ret
+; dfd
+
+Functiondfd: ; dfd
+ dec c
+ ld a, [hBGMapMode]
+ push af
+ xor a
+ ld [hBGMapMode], a
+ ld a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+.asm_e09
+ ld a, d
+ ld [rHDMA1], a
+ ld a, e
+ and $f0
+ ld [rHDMA2], a
+ ld a, h
+ and $1f
+ ld [rHDMA3], a
+ ld a, l
+ and $f0
+ ld [rHDMA4], a
+ ld a, c
+ cp $8
+ jr c, .asm_e3c
+ sub $8
+ ld c, a
+ ld a, $f
+ ld [hDMATransfer], a
+ call DelayFrame
+ ld a, l
+ add $0
+ ld l, a
+ ld a, h
+ adc $1
+ ld h, a
+ ld a, e
+ add $0
+ ld e, a
+ ld a, d
+ adc $1
+ ld d, a
+ jr .asm_e09
+
+.asm_e3c
+ ld a, c
+ and $7f
+ ld [hDMATransfer], a
+ call DelayFrame
+ pop af
+ rst Bankswitch
+
+ pop af
+ ld [hBGMapMode], a
+ ret
+; e4a
+
+
+
+Functione4a: ; e4a
+ ld a, $5
+ ld hl, $4135
+ rst FarCall
+ ret
+; e51
+
+
+
+Functione51: ; e51
+ ld a, $3e
+ ld hl, $7449
+ rst FarCall
+ ret
+; e58
+
+Functione58: ; e58
+ ld a, $3e
+ ld hl, $74be
+ rst FarCall
+ ret
+; e5f
+
+
+
+Functione5f: ; e5f
+ ld a, $3e
+ ld hl, $748a
+ rst FarCall
+ ld a, $3e
+ ld hl, $74b0
+ rst FarCall
+ ret
+; e6c
+
+Functione6c: ; e6c
+ ld a, $3e
+ ld hl, $74b0
+ rst FarCall
+ ret
+; e73
+
+Functione73: ; e73
+ push de
+ ld a, $0
+ call GetSRAMBank
+ push bc
+ ld de, $a000
+ ld a, b
+ call FarDecompress
+ pop bc
+ pop hl
+ ld de, $a000
+ call Request2bpp
+ call CloseSRAM
+ ret
+; e8d
+
+
+
+FarCopyBytes: ; e8d
+; copy bc bytes from a:hl to de
+
+ ld [hBuffer], a
+ ld a, [hROMBank]
+ push af
+ ld a, [hBuffer]
+ rst Bankswitch
+
+ call CopyBytes
+
+ pop af
+ rst Bankswitch
+ ret
+; 0xe9b
+
+
+FarCopyBytesDouble: ; e9b
+; Copy bc bytes from a:hl to bc*2 bytes at de,
+; doubling each byte in the process.
+
+ ld [hBuffer], a
+ ld a, [hROMBank]
+ push af
+ ld a, [hBuffer]
+ rst Bankswitch
+
+; switcheroo, de <> hl
+ ld a, h
+ ld h, d
+ ld d, a
+ ld a, l
+ ld l, e
+ ld e, a
+
+ inc b
+ inc c
+ jr .dec
+
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld [hli], a
+.dec
+ dec c
+ jr nz, .loop
+ dec b
+ jr nz, .loop
+
+ pop af
+ rst Bankswitch
+ ret
+; 0xeba
+
+
+Request2bpp: ; eba
+ ld a, [hBGMapMode]
+ push af
+ xor a
+ ld [hBGMapMode], a
+
+ ld a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ ld a, [$ffd3]
+ push af
+
+ ld a, $8
+ ld [$ffd3], a
+ ld a, [InLinkBattle]
+ cp $4
+ jr nz, .asm_edc
+ ld a, [$ffe9]
+ and a
+ jr nz, .asm_edc
+ ld a, $6
+ ld [$ffd3], a
+
+.asm_edc
+ ld a, e
+ ld [$cf68], a
+ ld a, d
+ ld [$cf69], a
+ ld a, l
+ ld [$cf6a], a
+ ld a, h
+ ld [$cf6b], a
+
+.asm_eec
+ ld a, c
+ ld hl, $ffd3
+ cp [hl]
+ jr nc, .asm_f08
+
+ ld [$cf67], a
+.wait
+ call DelayFrame
+ ld a, [$cf67]
+ and a
+ jr nz, .wait
+
+ pop af
+ ld [$ffd3], a
+
+ pop af
+ rst Bankswitch
+
+ pop af
+ ld [hBGMapMode], a
+ ret
+
+.asm_f08
+ ld a, [$ffd3]
+ ld [$cf67], a
+.asm_f0d
+ call DelayFrame
+ ld a, [$cf67]
+ and a
+ jr nz, .asm_f0d
+ ld a, c
+ ld hl, $ffd3
+ sub [hl]
+ ld c, a
+ jr .asm_eec
+; f1e
+
+
+Request1bpp: ; f1e
+ ld a, [hBGMapMode]
+ push af
+ xor a
+ ld [hBGMapMode], a
+
+ ld a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ ld a, [$ffd3]
+ push af
+
+ ld a, $8
+ ld [$ffd3], a
+ ld a, [InLinkBattle]
+ cp $4
+ jr nz, .asm_f40
+ ld a, [$ffe9]
+ and a
+ jr nz, .asm_f40
+ ld a, $6
+ ld [$ffd3], a
+
+.asm_f40
+ ld a, e
+ ld [$cf6d], a
+ ld a, d
+ ld [$cf6e], a
+ ld a, l
+ ld [$cf6f], a
+ ld a, h
+ ld [$cf70], a
+.asm_f50
+ ld a, c
+ ld hl, $ffd3
+ cp [hl]
+ jr nc, .asm_f6c
+
+ ld [$cf6c], a
+.wait
+ call DelayFrame
+ ld a, [$cf6c]
+ and a
+ jr nz, .wait
+
+ pop af
+ ld [$ffd3], a
+
+ pop af
+ rst Bankswitch
+
+ pop af
+ ld [hBGMapMode], a
+ ret
+
+.asm_f6c
+ ld a, [$ffd3]
+ ld [$cf6c], a
+.asm_f71
+ call DelayFrame
+ ld a, [$cf6c]
+ and a
+ jr nz, .asm_f71
+ ld a, c
+ ld hl, $ffd3
+ sub [hl]
+ ld c, a
+ jr .asm_f50
+; f82
+
+
+Get2bpp: ; f82
+ ld a, [rLCDC]
+ bit 7, a
+ jp nz, Request2bpp
+
+Copy2bpp: ; f89
+; copy c 2bpp tiles from b:de to hl
+
+ push hl
+ ld h, d
+ ld l, e
+ pop de
+
+; bank
+ ld a, b
+
+; bc = c * $10
+ push af
+ swap c
+ ld a, $f
+ and c
+ ld b, a
+ ld a, $f0
+ and c
+ ld c, a
+ pop af
+
+ jp FarCopyBytes
+; f9d
+
+
+Get1bpp: ; f9d
+ ld a, [rLCDC]
+ bit 7, a
+ jp nz, Request1bpp
+
+Copy1bpp: ; fa4
+; copy c 1bpp tiles from b:de to hl
+
+ push de
+ ld d, h
+ ld e, l
+
+; bank
+ ld a, b
+
+; bc = c * $10 / 2
+ push af
+ ld h, 0
+ ld l, c
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld b, h
+ ld c, l
+ pop af
+
+ pop hl
+ jp FarCopyBytesDouble
+; fb6
+
--- /dev/null
+++ b/engine/fade.asm
@@ -1,0 +1,134 @@
+; Functions to fade the screen in and out.
+
+
+Function48c: ; 48c
+ ld a, [TimeOfDayPal]
+ ld b, a
+ ld hl, IncGradGBPalTable_11
+ ld a, l
+ sub b
+ ld l, a
+ jr nc, .asm_499
+ dec h
+
+.asm_499
+ ld a, [hli]
+ ld [rBGP], a
+ ld a, [hli]
+ ld [rOBP0], a
+ ld a, [hli]
+ ld [rOBP1], a
+ ret
+; 4a3
+
+
+Function4a3: ; 4a3
+ ld a, [hCGB]
+ and a
+ jr z, .asm_4af
+ ld hl, IncGradGBPalTable_00
+ ld b, 4
+ jr FadeOut
+
+.asm_4af
+ ld hl, IncGradGBPalTable_08
+ ld b, 4
+ jr FadeOut
+; 4b6
+
+Function4b6: ; 4b6
+ ld a, [hCGB]
+ and a
+ jr z, .asm_4c2
+ ld hl, IncGradGBPalTable_05
+ ld b, 3
+ jr FadeOut
+
+.asm_4c2
+ ld hl, IncGradGBPalTable_13
+ ld b, 3
+; 4c7
+
+FadeOut: ; 4c7
+ push de
+ ld a, [hli]
+ call DmgToCgbBGPals
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ call DmgToCgbObjPals
+ ld c, 8
+ call DelayFrames
+ pop de
+ dec b
+ jr nz, FadeOut
+ ret
+; 4dd
+
+Function4dd: ; 4dd
+ ld a, [hCGB]
+ and a
+ jr z, .asm_4e9
+ ld hl, IncGradGBPalTable_04 - 1
+ ld b, 4
+ jr FadeIn
+
+.asm_4e9
+ ld hl, IncGradGBPalTable_12 - 1
+ ld b, 4
+ jr FadeIn
+; 4f0
+
+Function4f0: ; 4f0
+ ld a, [hCGB]
+ and a
+ jr z, .asm_4fc
+ ld hl, IncGradGBPalTable_07 - 1
+ ld b, 3
+ jr FadeIn
+
+.asm_4fc
+ ld hl, IncGradGBPalTable_15 - 1
+ ld b, 3
+ ; fallthrough
+; 501
+
+FadeIn: ; 501
+ push de
+ ld a, [hld]
+ ld d, a
+ ld a, [hld]
+ ld e, a
+ call DmgToCgbObjPals
+ ld a, [hld]
+ call DmgToCgbBGPals
+ ld c, 8
+ call DelayFrames
+ pop de
+ dec b
+ jr nz, FadeIn
+ ret
+; 517
+
+
+; 517
+IncGradGBPalTable_00: db %11111111, %11111111, %11111111
+IncGradGBPalTable_01: db %11111110, %11111110, %11111110
+IncGradGBPalTable_02: db %11111001, %11111001, %11111001
+IncGradGBPalTable_03: db %11100100, %11100100, %11100100
+IncGradGBPalTable_04: db %11100100, %11100100, %11100100
+IncGradGBPalTable_05: db %10010000, %10010000, %10010000
+IncGradGBPalTable_06: db %01000000, %01000000, %01000000
+IncGradGBPalTable_07: db %00000000, %00000000, %00000000
+; bgp obp1 obp2
+IncGradGBPalTable_08: db %11111111, %11111111, %11111111
+IncGradGBPalTable_09: db %11111110, %11111110, %11111000
+IncGradGBPalTable_10: db %11111001, %11100100, %11100100
+IncGradGBPalTable_11: db %11100100, %11010000, %11100000
+IncGradGBPalTable_12: db %11100100, %11010000, %11100000
+IncGradGBPalTable_13: db %10010000, %10000000, %10010000
+IncGradGBPalTable_14: db %01000000, %01000000, %01000000
+IncGradGBPalTable_15: db %00000000, %00000000, %00000000
+; 547
+
--- a/engine/init.asm
+++ b/engine/init.asm
@@ -79,7 +79,7 @@
or c
jr nz, .asm_1b1
- ld sp, Stack - 1
+ ld sp, Stack
; Clear HRAM
ld a, [hCGB]
--- a/engine/joypad.asm
+++ b/engine/joypad.asm
@@ -273,3 +273,219 @@
ret
; a1b
+
+Functiona1b: ; a1b
+
+ call DelayFrame
+
+ push bc
+ call Functiona57
+ pop bc
+
+ ld a, [hJoyDown]
+ cp D_UP | SELECT | BUTTON_B
+ jr z, .asm_a34
+
+ ld a, [$ffa9]
+ and START | BUTTON_A
+ jr nz, .asm_a34
+
+ dec c
+ jr nz, Functiona1b
+
+ and a
+ ret
+
+.asm_a34
+ scf
+ ret
+; a36
+
+
+Functiona36: ; a36
+ call DelayFrame
+ call GetJoypadPublic
+ ld a, [hJoyPressed]
+ and BUTTON_A | BUTTON_B
+ ret nz
+ call RTC
+ jr Functiona36
+; a46
+
+Functiona46: ; a46
+ ld a, [hOAMUpdate]
+ push af
+ ld a, 1
+ ld [hOAMUpdate], a
+ call WaitBGMap
+ call Functiona36
+ pop af
+ ld [hOAMUpdate], a
+ ret
+; a57
+
+Functiona57: ; a57
+ call GetJoypadPublic
+ ld a, [$ffaa]
+ and a
+ ld a, [hJoyPressed]
+ jr z, .asm_a63
+ ld a, [hJoyDown]
+.asm_a63
+ ld [$ffa9], a
+ ld a, [hJoyPressed]
+ and a
+ jr z, .asm_a70
+ ld a, 15
+ ld [TextDelayFrames], a
+ ret
+
+.asm_a70
+ ld a, [TextDelayFrames]
+ and a
+ jr z, .asm_a7a
+ xor a
+ ld [$ffa9], a
+ ret
+
+.asm_a7a
+ ld a, 5
+ ld [TextDelayFrames], a
+ ret
+; a80
+
+Functiona80: ; a80
+ ld a, [$ffaf]
+ push af
+ ld a, [$ffb0]
+ push af
+ xor a
+ ld [$ffaf], a
+ ld a, $6
+ ld [$ffb0], a
+.asm_a8d
+ push hl
+ ld hl, $c606
+ call Functionb06
+ pop hl
+ call Functiona57
+ ld a, [$ffa9]
+ and $3
+ jr z, .asm_a8d
+ pop af
+ ld [$ffb0], a
+ pop af
+ ld [$ffaf], a
+ ret
+; aa5
+
+Functionaa5: ; aa5
+ call Functiona57
+ ld a, [$ffa9]
+ and BUTTON_A | BUTTON_B
+ jr z, Functionaa5
+ ret
+; aaf
+
+Functionaaf: ; aaf
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_ac1
+ call Functionac6
+ push de
+ ld de, SFX_READ_TEXT_2
+ call StartSFX
+ pop de
+ ret
+
+.asm_ac1
+ ld c, 65
+ jp DelayFrames
+; ac6
+
+Functionac6: ; ac6
+ ld a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ld [hOAMUpdate], a
+ ld a, [InputType]
+ or a
+ jr z, .asm_ad9
+ callba Function1de28a
+.asm_ad9
+ call Functionaf5
+ call Functiona57
+ ld a, [hJoyPressed]
+ and $3
+ jr nz, .asm_af1
+ call RTC
+ ld a, $1
+ ld [hBGMapMode], a
+ call DelayFrame
+ jr .asm_ad9
+
+.asm_af1
+ pop af
+ ld [hOAMUpdate], a
+ ret
+; af5
+
+Functionaf5: ; af5
+ ld a, [$ff9b]
+ and $10
+ jr z, .asm_aff
+ ld a, $ee
+ jr .asm_b02
+
+.asm_aff
+ ld a, [$c605]
+
+.asm_b02
+ ld [$c606], a
+ ret
+; b06
+
+Functionb06: ; b06
+ push bc
+ ld a, [hl]
+ ld b, a
+ ld a, $ee
+ cp b
+ pop bc
+ jr nz, .asm_b27
+ ld a, [$ffaf]
+ dec a
+ ld [$ffaf], a
+ ret nz
+ ld a, [$ffb0]
+ dec a
+ ld [$ffb0], a
+ ret nz
+ ld a, $7a
+ ld [hl], a
+ ld a, $ff
+ ld [$ffaf], a
+ ld a, $6
+ ld [$ffb0], a
+ ret
+
+.asm_b27
+ ld a, [$ffaf]
+ and a
+ ret z
+ dec a
+ ld [$ffaf], a
+ ret nz
+ dec a
+ ld [$ffaf], a
+ ld a, [$ffb0]
+ dec a
+ ld [$ffb0], a
+ ret nz
+ ld a, $6
+ ld [$ffb0], a
+ ld a, $ee
+ ld [hl], a
+ ret
+; b40
+
--- /dev/null
+++ b/engine/lcd.asm
@@ -1,0 +1,81 @@
+; LCD handling
+
+
+Function547: ; 547
+ ld a, [hLCDStatCustom]
+ cp rSCX & $ff
+ ret nz
+ ld c, a
+ ld a, [LYOverrides]
+ ld [$ff00+c], a
+ ret
+; 552
+
+
+LCD: ; 552
+ push af
+ ld a, [hLCDStatCustom]
+ and a
+ jr z, .done
+
+; At this point it's assumed we're in WRAM bank 5!
+ push bc
+ ld a, [rLY]
+ ld c, a
+ ld b, LYOverrides >> 8
+ ld a, [bc]
+ ld b, a
+ ld a, [hLCDStatCustom]
+ ld c, a
+ ld a, b
+ ld [$ff00+c], a
+ pop bc
+
+.done
+ pop af
+ reti
+; 568
+
+
+DisableLCD: ; 568
+; Turn the LCD off
+
+; Don't need to do anything if the LCD is already off
+ ld a, [rLCDC]
+ bit 7, a ; lcd enable
+ ret z
+
+ xor a
+ ld [rIF], a
+ ld a, [rIE]
+ ld b, a
+
+; Disable VBlank
+ res 0, a ; vblank
+ ld [rIE], a
+
+.wait
+; Wait until VBlank would normally happen
+ ld a, [rLY]
+ cp 145
+ jr nz, .wait
+
+ ld a, [rLCDC]
+ and %01111111 ; lcd enable off
+ ld [rLCDC], a
+
+ xor a
+ ld [rIF], a
+ ld a, b
+ ld [rIE], a
+ ret
+; 58a
+
+
+EnableLCD: ; 58a
+ ld a, [rLCDC]
+ set 7, a ; lcd enable
+ ld [rLCDC], a
+ ret
+; 591
+
--- /dev/null
+++ b/engine/palettes.asm
@@ -1,0 +1,347 @@
+; Functions dealing with palettes.
+
+
+UpdatePalsIfCGB: ; c2f
+; update bgp data from BGPals
+; update obp data from OBPals
+; return carry if successful
+
+; check cgb
+ ld a, [hCGB]
+ and a
+ ret z
+
+
+UpdateCGBPals: ; c33
+; return carry if successful
+; any pals to update?
+ ld a, [hCGBPalUpdate]
+ and a
+ ret z
+
+
+ForceUpdateCGBPals: ; c37
+
+ ld a, [rSVBK]
+ push af
+ ld a, 5 ; BANK(BGPals)
+ ld [rSVBK], a
+
+ ld hl, BGPals ; 5:d080
+
+; copy 8 pals to bgpd
+ ld a, %10000000 ; auto increment, index 0
+ ld [rBGPI], a
+ ld c, rBGPD % $100
+ ld b, 4 ; NUM_PALS / 2
+.bgp
+ rept $10
+ ld a, [hli]
+ ld [$ff00+c], a
+ endr
+
+ dec b
+ jr nz, .bgp
+
+; hl is now 5:d0c0 OBPals
+
+; copy 8 pals to obpd
+ ld a, %10000000 ; auto increment, index 0
+ ld [rOBPI], a
+ ld c, rOBPD - rJOYP
+ ld b, 4 ; NUM_PALS / 2
+.obp
+ rept $10
+ ld a, [hli]
+ ld [$ff00+c], a
+ endr
+
+ dec b
+ jr nz, .obp
+
+ pop af
+ ld [rSVBK], a
+
+; clear pal update queue
+ xor a
+ ld [hCGBPalUpdate], a
+
+ scf
+ ret
+; c9f
+
+
+DmgToCgbBGPals: ; c9f
+; exists to forego reinserting cgb-converted image data
+
+; input: a -> bgp
+
+ ld [rBGP], a
+ push af
+
+ ld a, [hCGB]
+ and a
+ jr z, .end
+
+ push hl
+ push de
+ push bc
+ ld a, [rSVBK]
+ push af
+
+ ld a, 5
+ ld [rSVBK], a
+
+; copy & reorder bg pal buffer
+ ld hl, BGPals ; to
+ ld de, Unkn1Pals ; from
+; order
+ ld a, [rBGP]
+ ld b, a
+; all pals
+ ld c, 8
+ call CopyPals
+; request pal update
+ ld a, 1
+ ld [hCGBPalUpdate], a
+
+ pop af
+ ld [rSVBK], a
+ pop bc
+ pop de
+ pop hl
+.end
+ pop af
+ ret
+; ccb
+
+
+DmgToCgbObjPals: ; ccb
+; exists to forego reinserting cgb-converted image data
+
+; input: d -> obp1
+; e -> obp2
+
+ ld a, e
+ ld [rOBP0], a
+ ld a, d
+ ld [rOBP1], a
+
+ ld a, [hCGB]
+ and a
+ ret z
+
+ push hl
+ push de
+ push bc
+ ld a, [rSVBK]
+ push af
+
+ ld a, 5
+ ld [rSVBK], a
+
+; copy & reorder obj pal buffer
+ ld hl, OBPals ; to
+ ld de, Unkn2Pals ; from
+; order
+ ld a, [rOBP0]
+ ld b, a
+; all pals
+ ld c, 8
+ call CopyPals
+; request pal update
+ ld a, 1
+ ld [hCGBPalUpdate], a
+
+ pop af
+ ld [rSVBK], a
+ pop bc
+ pop de
+ pop hl
+ ret
+; cf8
+
+
+Functioncf8: ; cf8
+ ld [rOBP0], a
+ push af
+ ld a, [hCGB]
+ and a
+ jr z, .asm_d22
+ push hl
+ push de
+ push bc
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, $d0c0
+ ld de, MartPointer
+ ld a, [rOBP0]
+ ld b, a
+ ld c, $1
+ call CopyPals
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ pop af
+ ld [rSVBK], a
+ pop bc
+ pop de
+ pop hl
+
+.asm_d22
+ pop af
+ ret
+; d24
+
+Functiond24: ; d24
+ ld [rOBP1], a
+ push af
+ ld a, [hCGB]
+ and a
+ jr z, .asm_d4e
+ push hl
+ push de
+ push bc
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, $d0c8
+ ld de, $d048
+ ld a, [rOBP1]
+ ld b, a
+ ld c, $1
+ call CopyPals
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ pop af
+ ld [rSVBK], a
+ pop bc
+ pop de
+ pop hl
+
+.asm_d4e
+ pop af
+ ret
+; d50
+
+
+
+CopyPals: ; d50
+; copy c palettes in order b from de to hl
+
+ push bc
+ ld c, 4 ; NUM_PAL_COLORS
+.loop
+ push de
+ push hl
+
+; get pal color
+ ld a, b
+ and %11 ; color
+; 2 bytes per color
+ add a
+ ld l, a
+ ld h, 0
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+
+; dest
+ pop hl
+; write color
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ inc hl
+; next pal color
+ srl b
+ srl b
+; source
+ pop de
+; done pal?
+ dec c
+ jr nz, .loop
+
+; de += 8 (next pal)
+ ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal
+ add e
+ jr nc, .ok
+ inc d
+.ok
+ ld e, a
+
+; how many more pals?
+ pop bc
+ dec c
+ jr nz, CopyPals
+ ret
+; d79
+
+
+Functiond79: ; d79
+ ld a, [hCGB]
+ and a
+ ret z
+ ld a, 1
+ ld [rVBK], a
+ ld hl, VTiles0
+ ld bc, $2000
+ xor a
+ call ByteFill
+ ld a, 0
+ ld [rVBK], a
+ ret
+; d90
+
+
+Functiond90: ; d90
+ ret
+; d91
+
+
+Functiond91: ; d91
+ ld a, [hCGB]
+ and a
+ ret z
+ ld a, [rSVBK]
+ push af
+ ld a, 5 ; BANK(BGPals)
+ ld [rSVBK], a
+ ld hl, BGPals
+ ld bc, $40 + $10
+ xor a
+ call ByteFill
+ pop af
+ ld [rSVBK], a
+ ld a, 1
+ ld [hCGBPalUpdate], a
+ call DelayFrame
+ ret
+; db1
+
+
+Functiondb1: ; db1
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(Function4c000)
+ rst Bankswitch
+ call Function4c000
+ pop af
+ rst Bankswitch
+ ret
+; dbd
+
+Functiondbd: ; dbd
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(Function4c03f)
+ rst Bankswitch
+ call Function4c03f
+ pop af
+ rst Bankswitch
+ ret
+; dc9
+
--- a/engine/scripting.asm
+++ b/engine/scripting.asm
@@ -308,7 +308,7 @@
ld h, a
ld a, [ScriptBank]
ld b, a
- call $269a
+ call Function269a
ret
; 0x96eab
@@ -323,7 +323,7 @@
ld l, a
call GetScriptByte
ld h, a
- call $269a
+ call Function269a
ret
; 0x96ebb
@@ -348,7 +348,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- call $269a
+ call Function269a
ret
.asm_96ed8
ret
@@ -357,7 +357,7 @@
Script_closetext: ; 0x96ed9
; script command 0x54
- jp $0a46
+ jp Functiona46
; 0x96edc
Script_keeptextopen: ; 0x96edc
@@ -367,8 +367,8 @@
push af
ld a, $1
ld [$ffd8], a
- call $31f6
- call $0aaf
+ call WaitBGMap
+ call Functionaaf
pop af
ld [$ffd8], a
ret
@@ -377,7 +377,7 @@
Script_yesorno: ; 0x96eed
; script command 0x4e
- call $1dcf
+ call Function1dcf
ld a, $0
jr c, .asm_96ef6 ; 0x96ef2 $2
ld a, $1
@@ -397,8 +397,8 @@
ld h, a
ld de, $1d35
ld a, [ScriptBank]
- call $26b7
- call $1ad2
+ call Function26b7
+ call Function1ad2
ret
; 0x96f0f
@@ -405,8 +405,8 @@
Script_writebackup: ; 0x96f0f
; script command 0x50
- call $1c17
- call $1ad2
+ call Function1c17
+ call Function1ad2
ret
; 0x96f16
@@ -470,7 +470,7 @@
; pointer (PointerLabelBeforeBank)
; memory (SingleByteParam)
- call $106c
+ call Function106c
call GetScriptByte
ld c, a
ld a, $47
@@ -539,7 +539,7 @@
ld a, [de]
ld [$d10c], a
ld hl, $d892
- call $2f66
+ call Function2f66
ld a, $1
jr c, .asm_96fb0 ; 0x96fad $1
xor a
@@ -561,7 +561,7 @@
call CurItemName
ld b, BANK(PutItemInPocketText)
ld hl, PutItemInPocketText
- call $269a
+ call Function269a
ret
; 0x96fd5
@@ -572,7 +572,7 @@
call CurItemName
ld b, BANK(PocketIsFullText)
ld hl, PocketIsFullText
- call $269a
+ call Function269a
ret
; 0x96fe4
@@ -732,7 +732,7 @@
; parameters:
; number (SingleByteParam)
- call $1dcf
+ call Function1dcf
jr c, .asm_970d6 ; 0x970c1 $13
call GetScriptByte
ld c, a
@@ -814,7 +814,7 @@
ld l, a
ld a, [$d03e]
ld b, a
- call $269a
+ call Function269a
ret
; 0x97125
@@ -907,7 +907,7 @@
Script_playmapmusic: ; 0x97185
; script command 0x82
- call $3cdf
+ call Function3cdf
ret
; 0x97189
@@ -988,7 +988,7 @@
jr nz, .asm_971df ; 0x971da $3
ld a, [$c2dd]
.asm_971df
- call $37ce
+ call Function37ce
ret
; 0x971e3
@@ -1039,7 +1039,7 @@
ld h, a
ld a, [ScriptBank]
ld b, a
- call $26c7
+ call Function26c7
ret c
ld a, SCRIPT_WAIT_MOVEMENT
ld [ScriptMode], a
@@ -1145,13 +1145,13 @@
Unknown_0x9728b: ; 0x9728b
ld a, d
push de
- call $18de
+ call Function18de
jr c, .asm_972b9 ; 0x97290 $27
ld hl, $0000
add hl, bc
ld a, [hl]
push bc
- call $1836
+ call Function1836
pop bc
jr c, .asm_972b9 ; 0x9729c $1b
ld hl, $0004
@@ -1160,13 +1160,13 @@
jr nz, .asm_972b9 ; 0x972a4 $13
pop de
ld a, e
- call $1af8
+ call Function1af8
ld hl, $d0ed
bit 6, [hl]
jr nz, .asm_972b5 ; 0x972b0 $3
call Unknown_0x972bc
.asm_972b5
- call $1ad2
+ call Function1ad2
ret
.asm_972b9
pop de
@@ -1175,7 +1175,7 @@
; 0x972bc
Unknown_0x972bc: ; 0x972bc
- call $217a
+ call Function217a
ld hl, TileMap
ld bc, $0168
.asm_972c5
@@ -1211,7 +1211,7 @@
call GetScriptByte
call Unknown_0x971e3
- call $1956
+ call Function1956
ld a, [$ffaf]
ld b, $0
call Unknown_0x9730b
@@ -1229,7 +1229,7 @@
jr nz, .asm_972fa ; 0x972f6 $2
ld a, [$ffe0]
.asm_972fa
- call $199f
+ call Function199f
ld a, [$ffaf]
ld b, $1
call Unknown_0x9730b
@@ -1241,7 +1241,7 @@
Unknown_0x9730b: ; 0x9730b
push bc
- call $18d2
+ call GetMapObject
ld hl, $000c
add hl, bc
pop bc
@@ -1513,7 +1513,7 @@
call GetScriptByte
ld [$d230], a
- call $2879
+ call Function2879
ld a, $13
ld hl, $6554
rst $8
@@ -1559,7 +1559,7 @@
ld a, $f3
ld [$ff9f], a
ld a, $1
- call $261b
+ call Function261b
call StopScript
ret
; 0x974a2
@@ -1835,7 +1835,7 @@
Script_checktriggers: ; 0x975c2
; script command 0x13
- call $211b
+ call Function211b
jr z, .asm_975cb ; 0x975c5 $4
ld [$c2dd], a
ret
@@ -1855,7 +1855,7 @@
ld b, a
call GetScriptByte
ld c, a
- call $2147
+ call Function2147
ld a, d
or e
jr z, .asm_975e5 ; 0x975de $5
@@ -1894,7 +1894,7 @@
; fallthrough
Unknown_975fd: ; 0x975fd
- call $2147
+ call Function2147
ld a, d
or e
jr z, .asm_97608 ; 0x97602 $4
@@ -1988,7 +1988,7 @@
ld b, a
.asm_97653
push bc
- call $2f8c
+ call RNG
pop bc
ld a, [$ffe1]
cp b
@@ -1996,7 +1996,7 @@
jr .asm_97666 ; 0x9765d $7
.asm_9765f
push bc
- call $2f8c
+ call RNG
pop bc
ld a, [$ffe1]
.asm_97666
@@ -2004,7 +2004,7 @@
ld a, [$c2dd]
ld c, a
pop af
- call $3110
+ call SimpleDivide
ld [$c2dd], a
ret
; 0x97673
@@ -2091,7 +2091,7 @@
ld a, [$c2dd]
.asm_976b7
ld [$d265], a
- call $343b
+ call GetPokemonName
ld de, StringBuffer1
Unknown_976c0: ; 0x976c0
@@ -2205,7 +2205,7 @@
call Unknown_0x97861
ld hl, StringBuffer1
ld bc, $4306
- call $3198
+ call PrintNum
ld de, StringBuffer1
jp Unknown_976c0
; 0x97747
@@ -2219,7 +2219,7 @@
ld hl, StringBuffer1
ld de, $d855
ld bc, $4206
- call $3198
+ call PrintNum
ld de, StringBuffer1
jp Unknown_976c0
; 0x9775c
@@ -2233,7 +2233,7 @@
ld de, $c2dd
ld hl, StringBuffer1
ld bc, $4103
- call $3198
+ call PrintNum
ld de, StringBuffer1
jp Unknown_976c0
; 0x97771
@@ -2320,7 +2320,7 @@
call GetScriptByte
ld [$d10c], a
ld hl, $d892
- call $2f66
+ call Function2f66
jr nc, .asm_977eb ; 0x977e3 $6
ld a, $1
ld [$c2dd], a
@@ -2346,7 +2346,7 @@
ld a, $ff
ld [$d107], a
ld hl, $d892
- call $2f53
+ call Function2f53
ret nc
ld a, $1
ld [$c2dd], a
@@ -2363,7 +2363,7 @@
call GetScriptByte
ld [$d106], a
ld hl, $d892
- call $2f79
+ call Function2f79
ret nc
ld a, $1
ld [$c2dd], a
@@ -2839,7 +2839,7 @@
ld a, $f1
ld [$ff9f], a
ld a, $1
- call $261b
+ call Function261b
call StopScript
ret
.asm_97a4a
@@ -2851,7 +2851,7 @@
ld a, $fb
ld [$ff9f], a
ld a, $1
- call $261b
+ call Function261b
call StopScript
ret
; 0x97a65
@@ -2935,8 +2935,8 @@
ld [$d1a1], a
call GetScriptByte
ld [$d1a2], a
- call $24e4
- call $2879
+ call Function24e4
+ call Function2879
ret
; 0x97acc
@@ -2953,10 +2953,10 @@
call GetScriptByte
add $4
ld e, a
- call $2a66
+ call Function2a66
call GetScriptByte
ld [hl], a
- call $2879
+ call Function2879
ret
; 0x97ae3
@@ -2965,12 +2965,12 @@
xor a
ld [$ffd4], a
- call $2173
- call $2914
+ call Function2173
+ call Function2914
ld a, $41
ld hl, $4061
rst $8
- call $1ad2
+ call Function1ad2
ret
; 0x97af6
@@ -2977,7 +2977,7 @@
Script_warpcheck: ; 0x97af6
; script command 0x8e
- call $224a
+ call Function224a
ret nc
callba Function966d0
ret
@@ -2996,7 +2996,7 @@
call GetScriptByte
ld [$ff9f], a
ld a, $1
- call $261b
+ call Function261b
call StopScript
ret
; 0x97b16
@@ -3011,7 +3011,7 @@
Script_loadfont: ; 0x97b1c
; script command 0x47
- call $2e08
+ call Function2e08
ret
; 0x97b20
@@ -3020,7 +3020,7 @@
; parameters:
; dummy (SingleByteParam)
- call $2dba
+ call ResetWindow
call GetScriptByte
ret
; 0x97b27
@@ -3043,8 +3043,8 @@
Script_loadmovesprites: ; 0x97b2f
; script command 0x49
- call $2e20
- call $2dcf
+ call Function2e20
+ call Function2dcf
ret
; 0x97b36
@@ -3206,7 +3206,7 @@
DisplayCredits:
call Script_resetfuncs
ld a, $3
- call $261b
+ call Function261b
call StopScript
ret
; 0x97c05
--- /dev/null
+++ b/engine/serial.asm
@@ -1,0 +1,408 @@
+Serial: ; 6ef
+; The serial interrupt.
+
+ push af
+ push bc
+ push de
+ push hl
+
+ ld a, [$ffc9]
+ and a
+ jr nz, .asm_71c
+
+ ld a, [$c2d4]
+ bit 0, a
+ jr nz, .asm_721
+
+ ld a, [$ffcb]
+ inc a
+ jr z, .asm_726
+
+ ld a, [rSB]
+ ld [hSerialReceive], a
+
+ ld a, [hSerialSend]
+ ld [rSB], a
+
+ ld a, [$ffcb]
+ cp $2
+ jr z, .asm_752
+
+ ld a, 0 << rSC_ON
+ ld [rSC], a
+ ld a, 1 << rSC_ON
+ ld [rSC], a
+ jr .asm_752
+
+.asm_71c
+ call Function3e80
+ jr .asm_75a
+
+.asm_721
+ call Function2057
+ jr .asm_75a
+
+.asm_726
+ ld a, [rSB]
+ cp $1
+ jr z, .asm_730
+ cp $2
+ jr nz, .asm_752
+
+.asm_730
+ ld [hSerialReceive], a
+ ld [$ffcb], a
+ cp $2
+ jr z, .asm_74f
+
+ xor a
+ ld [rSB], a
+ ld a, $3
+ ld [rDIV], a
+
+.asm_73f
+ ld a, [rDIV]
+ bit 7, a
+ jr nz, .asm_73f
+
+ ld a, 0 << rSC_ON
+ ld [rSC], a
+ ld a, 1 << rSC_ON
+ ld [rSC], a
+ jr .asm_752
+
+.asm_74f
+ xor a
+ ld [rSB], a
+
+.asm_752
+ ld a, $1
+ ld [$ffca], a
+ ld a, $fe
+ ld [hSerialSend], a
+
+.asm_75a
+ pop hl
+ pop de
+ pop bc
+ pop af
+ reti
+; 75f
+
+Function75f: ; 75f
+ ld a, $1
+ ld [$ffcc], a
+.asm_763
+ ld a, [hl]
+ ld [hSerialSend], a
+ call Function78a
+ push bc
+ ld b, a
+ inc hl
+ ld a, $30
+.asm_76e
+ dec a
+ jr nz, .asm_76e
+ ld a, [$ffcc]
+ and a
+ ld a, b
+ pop bc
+ jr z, .asm_782
+ dec hl
+ cp $fd
+ jr nz, .asm_763
+ xor a
+ ld [$ffcc], a
+ jr .asm_763
+
+.asm_782
+ ld [de], a
+ inc de
+ dec bc
+ ld a, b
+ or c
+ jr nz, .asm_763
+ ret
+; 78a
+
+Function78a: ; 78a
+ xor a
+ ld [$ffca], a
+ ld a, [$ffcb]
+ cp $2
+ jr nz, .asm_79b
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+
+.asm_79b
+ ld a, [$ffca]
+ and a
+ jr nz, .asm_7e5
+ ld a, [$ffcb]
+ cp $1
+ jr nz, .asm_7c0
+ call Function82b
+ jr z, .asm_7c0
+ call .asm_825
+ push hl
+ ld hl, $cf5c
+ inc [hl]
+ jr nz, .asm_7b7
+ dec hl
+ inc [hl]
+
+.asm_7b7
+ pop hl
+ call Function82b
+ jr nz, .asm_79b
+ jp Function833
+
+.asm_7c0
+ ld a, [rIE]
+ and $f
+ cp $8
+ jr nz, .asm_79b
+ ld a, [$cf5d]
+ dec a
+ ld [$cf5d], a
+ jr nz, .asm_79b
+ ld a, [$cf5e]
+ dec a
+ ld [$cf5e], a
+ jr nz, .asm_79b
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_7e5
+ ld a, $ff
+.asm_7e2
+ dec a
+ jr nz, .asm_7e2
+
+.asm_7e5
+ xor a
+ ld [$ffca], a
+ ld a, [rIE]
+ and $f
+ sub $8
+ jr nz, .asm_7f8
+ ld [$cf5d], a
+ ld a, $50
+ ld [$cf5e], a
+
+.asm_7f8
+ ld a, [hSerialReceive]
+ cp $fe
+ ret nz
+ call Function82b
+ jr z, .asm_813
+ push hl
+ ld hl, $cf5c
+ ld a, [hl]
+ dec a
+ ld [hld], a
+ inc a
+ jr nz, .asm_80d
+ dec [hl]
+
+.asm_80d
+ pop hl
+ call Function82b
+ jr z, Function833
+
+.asm_813
+ ld a, [rIE]
+ and $f
+ cp $8
+ ld a, $fe
+ ret z
+ ld a, [hl]
+ ld [hSerialSend], a
+ call DelayFrame
+ jp Function78a
+
+.asm_825
+ ld a, $f
+.asm_827
+ dec a
+ jr nz, .asm_827
+ ret
+; 82b
+
+Function82b: ; 82b
+ push hl
+ ld hl, $cf5b
+ ld a, [hli]
+ or [hl]
+ pop hl
+ ret
+; 833
+
+Function833: ; 833
+ dec a
+ ld [$cf5b], a
+ ld [$cf5c], a
+ ret
+; 83b
+
+Function83b: ; 83b
+ ld hl, $cf56
+ ld de, $cf51
+ ld c, $2
+ ld a, $1
+ ld [$ffcc], a
+.asm_847
+ call DelayFrame
+ ld a, [hl]
+ ld [hSerialSend], a
+ call Function78a
+ ld b, a
+ inc hl
+ ld a, [$ffcc]
+ and a
+ ld a, $0
+ ld [$ffcc], a
+ jr nz, .asm_847
+ ld a, b
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_847
+ ret
+; 862
+
+Function862: ; 862
+ call Function309d
+ callab Function4000
+ call Function87d
+ jp Function30b4
+; 871
+
+
+Function871: ; 871
+ call Function309d
+ callab Function4000
+ jp Function87d
+; 87d
+
+
+
+Function87d: ; 87d
+ ld a, $ff
+ ld [$cf52], a
+.asm_882
+ call Function8c1
+ call DelayFrame
+ call Function82b
+ jr z, .asm_89e
+ push hl
+ ld hl, $cf5c
+ dec [hl]
+ jr nz, .asm_89d
+ dec hl
+ dec [hl]
+ jr nz, .asm_89d
+ pop hl
+ xor a
+ jp Function833
+
+.asm_89d
+ pop hl
+
+.asm_89e
+ ld a, [$cf52]
+ inc a
+ jr z, .asm_882
+ ld b, $a
+.asm_8a6
+ call DelayFrame
+ call Function8c1
+ dec b
+ jr nz, .asm_8a6
+ ld b, $a
+.asm_8b1
+ call DelayFrame
+ call Function908
+ dec b
+ jr nz, .asm_8b1
+ ld a, [$cf52]
+ ld [$cf51], a
+ ret
+; 8c1
+
+Function8c1: ; 8c1
+ push bc
+ ld b, $60
+ ld a, [InLinkBattle]
+ cp $1
+ jr z, .asm_8d7
+ ld b, $60
+ jr c, .asm_8d7
+ cp $2
+ ld b, $70
+ jr z, .asm_8d7
+ ld b, $80
+
+.asm_8d7
+ call Function8f3
+ ld a, [$cf56]
+ add b
+ ld [hSerialSend], a
+ ld a, [$ffcb]
+ cp $2
+ jr nz, .asm_8ee
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+
+.asm_8ee
+ call Function8f3
+ pop bc
+ ret
+; 8f3
+
+Function8f3: ; 8f3
+ ld a, [hSerialReceive]
+ ld [$cf51], a
+ and $f0
+ cp b
+ ret nz
+ xor a
+ ld [hSerialReceive], a
+ ld a, [$cf51]
+ and $f
+ ld [$cf52], a
+ ret
+; 908
+
+Function908: ; 908
+ xor a
+ ld [hSerialSend], a
+ ld a, [$ffcb]
+ cp $2
+ ret nz
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+ ret
+; 919
+
+Function919: ; 919
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+ ld a, $2
+ ld [rSB], a
+ xor a
+ ld [hSerialReceive], a
+ ld a, $0
+ ld [rSC], a
+ ld a, $80
+ ld [rSC], a
+ ret
+; 92e
+
+
--- /dev/null
+++ b/engine/time.asm
@@ -1,0 +1,311 @@
+; Functions relating to the timer interrupt and the real-time-clock.
+
+
+AskTimer: ; 591
+ push af
+ ld a, [$ffe9]
+ and a
+ jr z, .asm_59a
+ call Timer
+
+.asm_59a
+ pop af
+ reti
+; 59c
+
+
+LatchClock: ; 59c
+; latch clock counter data
+ ld a, 0
+ ld [MBC3LatchClock], a
+ ld a, 1
+ ld [MBC3LatchClock], a
+ ret
+; 5a7
+
+
+UpdateTime: ; 5a7
+ call GetClock
+ call FixDays
+ call FixTime
+ callba GetTimeOfDay
+ ret
+; 5b7
+
+
+GetClock: ; 5b7
+; store clock data in hRTCDayHi-hRTCSeconds
+
+; enable clock r/w
+ ld a, SRAM_ENABLE
+ ld [MBC3SRamEnable], a
+
+; clock data is 'backwards' in hram
+
+ call LatchClock
+ ld hl, MBC3SRamBank
+ ld de, MBC3RTC
+
+ ld [hl], RTC_S
+ ld a, [de]
+ and $3f
+ ld [hRTCSeconds], a
+
+ ld [hl], RTC_M
+ ld a, [de]
+ and $3f
+ ld [hRTCMinutes], a
+
+ ld [hl], RTC_H
+ ld a, [de]
+ and $1f
+ ld [hRTCHours], a
+
+ ld [hl], RTC_DL
+ ld a, [de]
+ ld [hRTCDayLo], a
+
+ ld [hl], RTC_DH
+ ld a, [de]
+ ld [hRTCDayHi], a
+
+; unlatch clock / disable clock r/w
+ call CloseSRAM
+ ret
+; 5e8
+
+
+FixDays: ; 5e8
+; fix day count
+; mod by 140
+
+; check if day count > 255 (bit 8 set)
+ ld a, [hRTCDayHi] ; DH
+ bit 0, a
+ jr z, .daylo
+; reset dh (bit 8)
+ res 0, a
+ ld [hRTCDayHi], a ; DH
+
+; mod 140
+; mod twice since bit 8 (DH) was set
+ ld a, [hRTCDayLo] ; DL
+.modh
+ sub 140
+ jr nc, .modh
+.modl
+ sub 140
+ jr nc, .modl
+ add 140
+
+; update dl
+ ld [hRTCDayLo], a ; DL
+
+; unknown output
+ ld a, $40 ; %1000000
+ jr .set
+
+.daylo
+; quit if fewer than 140 days have passed
+ ld a, [hRTCDayLo] ; DL
+ cp 140
+ jr c, .quit
+
+; mod 140
+.mod
+ sub 140
+ jr nc, .mod
+ add 140
+
+; update dl
+ ld [hRTCDayLo], a ; DL
+
+; unknown output
+ ld a, $20 ; %100000
+
+.set
+; update clock with modded day value
+ push af
+ call SetClock
+ pop af
+ scf
+ ret
+
+.quit
+ xor a
+ ret
+; 61d
+
+
+FixTime: ; 61d
+; add ingame time (set at newgame) to current time
+; day hr min sec
+; store time in CurDay, hHours, hMinutes, hSeconds
+
+; second
+ ld a, [hRTCSeconds] ; S
+ ld c, a
+ ld a, [StartSecond]
+ add c
+ sub 60
+ jr nc, .updatesec
+ add 60
+.updatesec
+ ld [hSeconds], a
+
+; minute
+ ccf ; carry is set, so turn it off
+ ld a, [hRTCMinutes] ; M
+ ld c, a
+ ld a, [StartMinute]
+ adc c
+ sub 60
+ jr nc, .updatemin
+ add 60
+.updatemin
+ ld [hMinutes], a
+
+; hour
+ ccf ; carry is set, so turn it off
+ ld a, [hRTCHours] ; H
+ ld c, a
+ ld a, [StartHour]
+ adc c
+ sub 24
+ jr nc, .updatehr
+ add 24
+.updatehr
+ ld [hHours], a
+
+; day
+ ccf ; carry is set, so turn it off
+ ld a, [hRTCDayLo] ; DL
+ ld c, a
+ ld a, [StartDay]
+ adc c
+ ld [CurDay], a
+ ret
+; 658
+
+Function658: ; 658
+ xor a
+ ld [StringBuffer2], a
+ ld a, $0
+ ld [$d089], a
+ jr .asm_677
+
+ call UpdateTime
+ ld a, [hHours]
+ ld [$d087], a
+ ld a, [hMinutes]
+ ld [$d088], a
+ ld a, [hSeconds]
+ ld [$d089], a
+ jr .asm_677
+
+.asm_677
+ ld a, $5
+ ld hl, $40ed
+ rst FarCall
+ ret
+; 67e
+
+
+
+Function67e: ; 67e
+ call Function685
+ call SetClock
+ ret
+; 685
+
+Function685: ; 685
+ xor a
+ ld [hRTCSeconds], a
+ ld [hRTCMinutes], a
+ ld [hRTCHours], a
+ ld [hRTCDayLo], a
+ ld [hRTCDayHi], a
+ ret
+; 691
+
+
+SetClock: ; 691
+; set clock data from hram
+
+; enable clock r/w
+ ld a, SRAM_ENABLE
+ ld [MBC3SRamEnable], a
+
+; set clock data
+; stored 'backwards' in hram
+
+ call LatchClock
+ ld hl, MBC3SRamBank
+ ld de, MBC3RTC
+
+; seems to be a halt check that got partially commented out
+; this block is totally pointless
+ ld [hl], RTC_DH
+ ld a, [de]
+ bit 6, a ; halt
+ ld [de], a
+
+; seconds
+ ld [hl], RTC_S
+ ld a, [hRTCSeconds]
+ ld [de], a
+; minutes
+ ld [hl], RTC_M
+ ld a, [hRTCMinutes]
+ ld [de], a
+; hours
+ ld [hl], RTC_H
+ ld a, [hRTCHours]
+ ld [de], a
+; day lo
+ ld [hl], RTC_DL
+ ld a, [hRTCDayLo]
+ ld [de], a
+; day hi
+ ld [hl], RTC_DH
+ ld a, [hRTCDayHi]
+ res 6, a ; make sure timer is active
+ ld [de], a
+
+; cleanup
+ call CloseSRAM ; unlatch clock, disable clock r/w
+ ret
+; 6c4
+
+
+Function6c4: ; 6c4
+ xor a
+ push af
+ ld a, $0
+ call GetSRAMBank
+ pop af
+ ld [$ac60], a
+ call CloseSRAM
+ ret
+; 6d3
+
+Function6d3: ; 6d3
+ ld hl, $ac60
+ push af
+ ld a, $0
+ call GetSRAMBank
+ pop af
+ or [hl]
+ ld [hl], a
+ call CloseSRAM
+ ret
+; 6e3
+
+Function6e3: ; 6e3
+ ld a, $0
+ call GetSRAMBank
+ ld a, [$ac60]
+ call CloseSRAM
+ ret
+; 6ef
+
--- a/engine/vblank.asm
+++ b/engine/vblank.asm
@@ -6,6 +6,8 @@
; This prevents the display and audio output from lagging.
+
+VBlank: ; 283
push af
push bc
push de
--- a/main.asm
+++ b/main.asm
@@ -58,7 +58,7 @@
INCLUDE "engine/init.asm"
-VBlank: ; 283
+
INCLUDE "engine/vblank.asm"
@@ -112,1940 +112,31 @@
ret
; 48c
-Function48c: ; 48c
- ld a, [TimeOfDayPal]
- ld b, a
- ld hl, IncGradGBPalTable_11
- ld a, l
- sub b
- ld l, a
- jr nc, .asm_499
- dec h
-.asm_499
- ld a, [hli]
- ld [rBGP], a
- ld a, [hli]
- ld [rOBP0], a
- ld a, [hli]
- ld [rOBP1], a
- ret
-; 4a3
+INCLUDE "engine/fade.asm"
-Function4a3: ; 4a3
- ld a, [hCGB]
- and a
- jr z, .asm_4af
- ld hl, IncGradGBPalTable_00
- ld b, 4
- jr FadeOut
+INCLUDE "engine/lcd.asm"
-.asm_4af
- ld hl, IncGradGBPalTable_08
- ld b, 4
- jr FadeOut
-; 4b6
-Function4b6: ; 4b6
- ld a, [hCGB]
- and a
- jr z, .asm_4c2
- ld hl, IncGradGBPalTable_05
- ld b, 3
- jr FadeOut
+INCLUDE "engine/time.asm"
-.asm_4c2
- ld hl, IncGradGBPalTable_13
- ld b, 3
-; 4c7
-FadeOut: ; 4c7
- push de
- ld a, [hli]
- call DmgToCgbBGPals
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- call DmgToCgbObjPals
- ld c, 8
- call DelayFrames
- pop de
- dec b
- jr nz, FadeOut
- ret
-; 4dd
+INCLUDE "engine/serial.asm"
-Function4dd: ; 4dd
- ld a, [hCGB]
- and a
- jr z, .asm_4e9
- ld hl, IncGradGBPalTable_04 - 1
- ld b, 4
- jr FadeIn
-.asm_4e9
- ld hl, IncGradGBPalTable_12 - 1
- ld b, 4
- jr FadeIn
-; 4f0
-
-Function4f0: ; 4f0
- ld a, [hCGB]
- and a
- jr z, .asm_4fc
- ld hl, IncGradGBPalTable_07 - 1
- ld b, 3
- jr FadeIn
-
-.asm_4fc
- ld hl, IncGradGBPalTable_15 - 1
- ld b, 3
- ; fallthrough
-; 501
-
-FadeIn: ; 501
- push de
- ld a, [hld]
- ld d, a
- ld a, [hld]
- ld e, a
- call DmgToCgbObjPals
- ld a, [hld]
- call DmgToCgbBGPals
- ld c, 8
- call DelayFrames
- pop de
- dec b
- jr nz, FadeIn
- ret
-; 517
-
-
-; 517
-IncGradGBPalTable_00: db %11111111, %11111111, %11111111
-IncGradGBPalTable_01: db %11111110, %11111110, %11111110
-IncGradGBPalTable_02: db %11111001, %11111001, %11111001
-IncGradGBPalTable_03: db %11100100, %11100100, %11100100
-IncGradGBPalTable_04: db %11100100, %11100100, %11100100
-IncGradGBPalTable_05: db %10010000, %10010000, %10010000
-IncGradGBPalTable_06: db %01000000, %01000000, %01000000
-IncGradGBPalTable_07: db %00000000, %00000000, %00000000
-; bgp obp1 obp2
-IncGradGBPalTable_08: db %11111111, %11111111, %11111111
-IncGradGBPalTable_09: db %11111110, %11111110, %11111000
-IncGradGBPalTable_10: db %11111001, %11100100, %11100100
-IncGradGBPalTable_11: db %11100100, %11010000, %11100000
-IncGradGBPalTable_12: db %11100100, %11010000, %11100000
-IncGradGBPalTable_13: db %10010000, %10000000, %10010000
-IncGradGBPalTable_14: db %01000000, %01000000, %01000000
-IncGradGBPalTable_15: db %00000000, %00000000, %00000000
-; 547
-
-
-Function547: ; 547
- ld a, [hLCDStatCustom]
- cp rSCX & $ff
- ret nz
- ld c, a
- ld a, [LYOverrides]
- ld [$ff00+c], a
- ret
-; 552
-
-
-LCD: ; 552
- push af
- ld a, [hLCDStatCustom]
- and a
- jr z, .done
-
-; At this point it's assumed we're in WRAM bank 5!
- push bc
- ld a, [rLY]
- ld c, a
- ld b, LYOverrides >> 8
- ld a, [bc]
- ld b, a
- ld a, [hLCDStatCustom]
- ld c, a
- ld a, b
- ld [$ff00+c], a
- pop bc
-
-.done
- pop af
- reti
-; 568
-
-
-DisableLCD: ; 568
-; Turn the LCD off
-
-; Don't need to do anything if the LCD is already off
- ld a, [rLCDC]
- bit 7, a ; lcd enable
- ret z
-
- xor a
- ld [rIF], a
- ld a, [rIE]
- ld b, a
-
-; Disable VBlank
- res 0, a ; vblank
- ld [rIE], a
-
-.wait
-; Wait until VBlank would normally happen
- ld a, [rLY]
- cp 145
- jr nz, .wait
-
- ld a, [rLCDC]
- and %01111111 ; lcd enable off
- ld [rLCDC], a
-
- xor a
- ld [rIF], a
- ld a, b
- ld [rIE], a
- ret
-; 58a
-
-
-EnableLCD: ; 58a
- ld a, [rLCDC]
- set 7, a ; lcd enable
- ld [rLCDC], a
- ret
-; 591
-
-
-AskTimer: ; 591
- push af
- ld a, [$ffe9]
- and a
- jr z, .asm_59a
- call Timer
-
-.asm_59a
- pop af
- reti
-; 59c
-
-
-LatchClock: ; 59c
-; latch clock counter data
- ld a, 0
- ld [MBC3LatchClock], a
- ld a, 1
- ld [MBC3LatchClock], a
- ret
-; 5a7
-
-
-UpdateTime: ; 5a7
- call GetClock
- call FixDays
- call FixTime
- callba GetTimeOfDay
- ret
-; 5b7
-
-
-GetClock: ; 5b7
-; store clock data in hRTCDayHi-hRTCSeconds
-
-; enable clock r/w
- ld a, SRAM_ENABLE
- ld [MBC3SRamEnable], a
-
-; clock data is 'backwards' in hram
-
- call LatchClock
- ld hl, MBC3SRamBank
- ld de, MBC3RTC
-
- ld [hl], RTC_S
- ld a, [de]
- and $3f
- ld [hRTCSeconds], a
-
- ld [hl], RTC_M
- ld a, [de]
- and $3f
- ld [hRTCMinutes], a
-
- ld [hl], RTC_H
- ld a, [de]
- and $1f
- ld [hRTCHours], a
-
- ld [hl], RTC_DL
- ld a, [de]
- ld [hRTCDayLo], a
-
- ld [hl], RTC_DH
- ld a, [de]
- ld [hRTCDayHi], a
-
-; unlatch clock / disable clock r/w
- call CloseSRAM
- ret
-; 5e8
-
-
-FixDays: ; 5e8
-; fix day count
-; mod by 140
-
-; check if day count > 255 (bit 8 set)
- ld a, [hRTCDayHi] ; DH
- bit 0, a
- jr z, .daylo
-; reset dh (bit 8)
- res 0, a
- ld [hRTCDayHi], a ; DH
-
-; mod 140
-; mod twice since bit 8 (DH) was set
- ld a, [hRTCDayLo] ; DL
-.modh
- sub 140
- jr nc, .modh
-.modl
- sub 140
- jr nc, .modl
- add 140
-
-; update dl
- ld [hRTCDayLo], a ; DL
-
-; unknown output
- ld a, $40 ; %1000000
- jr .set
-
-.daylo
-; quit if fewer than 140 days have passed
- ld a, [hRTCDayLo] ; DL
- cp 140
- jr c, .quit
-
-; mod 140
-.mod
- sub 140
- jr nc, .mod
- add 140
-
-; update dl
- ld [hRTCDayLo], a ; DL
-
-; unknown output
- ld a, $20 ; %100000
-
-.set
-; update clock with modded day value
- push af
- call SetClock
- pop af
- scf
- ret
-
-.quit
- xor a
- ret
-; 61d
-
-
-FixTime: ; 61d
-; add ingame time (set at newgame) to current time
-; day hr min sec
-; store time in CurDay, hHours, hMinutes, hSeconds
-
-; second
- ld a, [hRTCSeconds] ; S
- ld c, a
- ld a, [StartSecond]
- add c
- sub 60
- jr nc, .updatesec
- add 60
-.updatesec
- ld [hSeconds], a
-
-; minute
- ccf ; carry is set, so turn it off
- ld a, [hRTCMinutes] ; M
- ld c, a
- ld a, [StartMinute]
- adc c
- sub 60
- jr nc, .updatemin
- add 60
-.updatemin
- ld [hMinutes], a
-
-; hour
- ccf ; carry is set, so turn it off
- ld a, [hRTCHours] ; H
- ld c, a
- ld a, [StartHour]
- adc c
- sub 24
- jr nc, .updatehr
- add 24
-.updatehr
- ld [hHours], a
-
-; day
- ccf ; carry is set, so turn it off
- ld a, [hRTCDayLo] ; DL
- ld c, a
- ld a, [StartDay]
- adc c
- ld [CurDay], a
- ret
-; 658
-
-Function658: ; 658
- xor a
- ld [StringBuffer2], a
- ld a, $0
- ld [$d089], a
- jr .asm_677
-
- call UpdateTime
- ld a, [hHours]
- ld [$d087], a
- ld a, [hMinutes]
- ld [$d088], a
- ld a, [hSeconds]
- ld [$d089], a
- jr .asm_677
-
-.asm_677
- ld a, $5
- ld hl, $40ed
- rst FarCall
- ret
-; 67e
-
-
-
-Function67e: ; 67e
- call Function685
- call SetClock
- ret
-; 685
-
-Function685: ; 685
- xor a
- ld [hRTCSeconds], a
- ld [hRTCMinutes], a
- ld [hRTCHours], a
- ld [hRTCDayLo], a
- ld [hRTCDayHi], a
- ret
-; 691
-
-
-SetClock: ; 691
-; set clock data from hram
-
-; enable clock r/w
- ld a, SRAM_ENABLE
- ld [MBC3SRamEnable], a
-
-; set clock data
-; stored 'backwards' in hram
-
- call LatchClock
- ld hl, MBC3SRamBank
- ld de, MBC3RTC
-
-; seems to be a halt check that got partially commented out
-; this block is totally pointless
- ld [hl], RTC_DH
- ld a, [de]
- bit 6, a ; halt
- ld [de], a
-
-; seconds
- ld [hl], RTC_S
- ld a, [hRTCSeconds]
- ld [de], a
-; minutes
- ld [hl], RTC_M
- ld a, [hRTCMinutes]
- ld [de], a
-; hours
- ld [hl], RTC_H
- ld a, [hRTCHours]
- ld [de], a
-; day lo
- ld [hl], RTC_DL
- ld a, [hRTCDayLo]
- ld [de], a
-; day hi
- ld [hl], RTC_DH
- ld a, [hRTCDayHi]
- res 6, a ; make sure timer is active
- ld [de], a
-
-; cleanup
- call CloseSRAM ; unlatch clock, disable clock r/w
- ret
-; 6c4
-
-
-Function6c4: ; 6c4
- xor a
- push af
- ld a, $0
- call GetSRAMBank
- pop af
- ld [$ac60], a
- call CloseSRAM
- ret
-; 6d3
-
-Function6d3: ; 6d3
- ld hl, $ac60
- push af
- ld a, $0
- call GetSRAMBank
- pop af
- or [hl]
- ld [hl], a
- call CloseSRAM
- ret
-; 6e3
-
-Function6e3: ; 6e3
- ld a, $0
- call GetSRAMBank
- ld a, [$ac60]
- call CloseSRAM
- ret
-; 6ef
-
-
-Serial: ; 6ef
- push af
- push bc
- push de
- push hl
-
- ld a, [$ffc9]
- and a
- jr nz, .asm_71c
-
- ld a, [$c2d4]
- bit 0, a
- jr nz, .asm_721
-
- ld a, [$ffcb]
- inc a
- jr z, .asm_726
-
- ld a, [rSB]
- ld [hSerialReceive], a
-
- ld a, [hSerialSend]
- ld [rSB], a
-
- ld a, [$ffcb]
- cp $2
- jr z, .asm_752
-
- ld a, 0 << rSC_ON
- ld [rSC], a
- ld a, 1 << rSC_ON
- ld [rSC], a
- jr .asm_752
-
-.asm_71c
- call Function3e80
- jr .asm_75a
-
-.asm_721
- call Function2057
- jr .asm_75a
-
-.asm_726
- ld a, [rSB]
- cp $1
- jr z, .asm_730
- cp $2
- jr nz, .asm_752
-
-.asm_730
- ld [hSerialReceive], a
- ld [$ffcb], a
- cp $2
- jr z, .asm_74f
-
- xor a
- ld [rSB], a
- ld a, $3
- ld [rDIV], a
-
-.asm_73f
- ld a, [rDIV]
- bit 7, a
- jr nz, .asm_73f
-
- ld a, 0 << rSC_ON
- ld [rSC], a
- ld a, 1 << rSC_ON
- ld [rSC], a
- jr .asm_752
-
-.asm_74f
- xor a
- ld [rSB], a
-
-.asm_752
- ld a, $1
- ld [$ffca], a
- ld a, $fe
- ld [hSerialSend], a
-
-.asm_75a
- pop hl
- pop de
- pop bc
- pop af
- reti
-; 75f
-
-Function75f: ; 75f
- ld a, $1
- ld [$ffcc], a
-.asm_763
- ld a, [hl]
- ld [hSerialSend], a
- call Function78a
- push bc
- ld b, a
- inc hl
- ld a, $30
-.asm_76e
- dec a
- jr nz, .asm_76e
- ld a, [$ffcc]
- and a
- ld a, b
- pop bc
- jr z, .asm_782
- dec hl
- cp $fd
- jr nz, .asm_763
- xor a
- ld [$ffcc], a
- jr .asm_763
-
-.asm_782
- ld [de], a
- inc de
- dec bc
- ld a, b
- or c
- jr nz, .asm_763
- ret
-; 78a
-
-Function78a: ; 78a
- xor a
- ld [$ffca], a
- ld a, [$ffcb]
- cp $2
- jr nz, .asm_79b
- ld a, $1
- ld [rSC], a
- ld a, $81
- ld [rSC], a
-
-.asm_79b
- ld a, [$ffca]
- and a
- jr nz, .asm_7e5
- ld a, [$ffcb]
- cp $1
- jr nz, .asm_7c0
- call Function82b
- jr z, .asm_7c0
- call .asm_825
- push hl
- ld hl, $cf5c
- inc [hl]
- jr nz, .asm_7b7
- dec hl
- inc [hl]
-
-.asm_7b7
- pop hl
- call Function82b
- jr nz, .asm_79b
- jp Function833
-
-.asm_7c0
- ld a, [rIE]
- and $f
- cp $8
- jr nz, .asm_79b
- ld a, [$cf5d]
- dec a
- ld [$cf5d], a
- jr nz, .asm_79b
- ld a, [$cf5e]
- dec a
- ld [$cf5e], a
- jr nz, .asm_79b
- ld a, [$ffcb]
- cp $1
- jr z, .asm_7e5
- ld a, $ff
-.asm_7e2
- dec a
- jr nz, .asm_7e2
-
-.asm_7e5
- xor a
- ld [$ffca], a
- ld a, [rIE]
- and $f
- sub $8
- jr nz, .asm_7f8
- ld [$cf5d], a
- ld a, $50
- ld [$cf5e], a
-
-.asm_7f8
- ld a, [hSerialReceive]
- cp $fe
- ret nz
- call Function82b
- jr z, .asm_813
- push hl
- ld hl, $cf5c
- ld a, [hl]
- dec a
- ld [hld], a
- inc a
- jr nz, .asm_80d
- dec [hl]
-
-.asm_80d
- pop hl
- call Function82b
- jr z, Function833
-
-.asm_813
- ld a, [rIE]
- and $f
- cp $8
- ld a, $fe
- ret z
- ld a, [hl]
- ld [hSerialSend], a
- call DelayFrame
- jp Function78a
-
-.asm_825
- ld a, $f
-.asm_827
- dec a
- jr nz, .asm_827
- ret
-; 82b
-
-Function82b: ; 82b
- push hl
- ld hl, $cf5b
- ld a, [hli]
- or [hl]
- pop hl
- ret
-; 833
-
-Function833: ; 833
- dec a
- ld [$cf5b], a
- ld [$cf5c], a
- ret
-; 83b
-
-Function83b: ; 83b
- ld hl, $cf56
- ld de, $cf51
- ld c, $2
- ld a, $1
- ld [$ffcc], a
-.asm_847
- call DelayFrame
- ld a, [hl]
- ld [hSerialSend], a
- call Function78a
- ld b, a
- inc hl
- ld a, [$ffcc]
- and a
- ld a, $0
- ld [$ffcc], a
- jr nz, .asm_847
- ld a, b
- ld [de], a
- inc de
- dec c
- jr nz, .asm_847
- ret
-; 862
-
-Function862: ; 862
- call Function309d
- callab Function4000
- call Function87d
- jp Function30b4
-; 871
-
-
-Function871: ; 871
- call Function309d
- callab Function4000
- jp Function87d
-; 87d
-
-
-
-Function87d: ; 87d
- ld a, $ff
- ld [$cf52], a
-.asm_882
- call Function8c1
- call DelayFrame
- call Function82b
- jr z, .asm_89e
- push hl
- ld hl, $cf5c
- dec [hl]
- jr nz, .asm_89d
- dec hl
- dec [hl]
- jr nz, .asm_89d
- pop hl
- xor a
- jp Function833
-
-.asm_89d
- pop hl
-
-.asm_89e
- ld a, [$cf52]
- inc a
- jr z, .asm_882
- ld b, $a
-.asm_8a6
- call DelayFrame
- call Function8c1
- dec b
- jr nz, .asm_8a6
- ld b, $a
-.asm_8b1
- call DelayFrame
- call Function908
- dec b
- jr nz, .asm_8b1
- ld a, [$cf52]
- ld [$cf51], a
- ret
-; 8c1
-
-Function8c1: ; 8c1
- push bc
- ld b, $60
- ld a, [InLinkBattle]
- cp $1
- jr z, .asm_8d7
- ld b, $60
- jr c, .asm_8d7
- cp $2
- ld b, $70
- jr z, .asm_8d7
- ld b, $80
-
-.asm_8d7
- call Function8f3
- ld a, [$cf56]
- add b
- ld [hSerialSend], a
- ld a, [$ffcb]
- cp $2
- jr nz, .asm_8ee
- ld a, $1
- ld [rSC], a
- ld a, $81
- ld [rSC], a
-
-.asm_8ee
- call Function8f3
- pop bc
- ret
-; 8f3
-
-Function8f3: ; 8f3
- ld a, [hSerialReceive]
- ld [$cf51], a
- and $f0
- cp b
- ret nz
- xor a
- ld [hSerialReceive], a
- ld a, [$cf51]
- and $f
- ld [$cf52], a
- ret
-; 908
-
-Function908: ; 908
- xor a
- ld [hSerialSend], a
- ld a, [$ffcb]
- cp $2
- ret nz
- ld a, $1
- ld [rSC], a
- ld a, $81
- ld [rSC], a
- ret
-; 919
-
-Function919: ; 919
- ld a, [InLinkBattle]
- and a
- ret nz
- ld a, $2
- ld [rSB], a
- xor a
- ld [hSerialReceive], a
- ld a, $0
- ld [rSC], a
- ld a, $80
- ld [rSC], a
- ret
-; 92e
-
-
-
INCLUDE "engine/joypad.asm"
-Functiona1b: ; a1b
-.asm_a1b
- call DelayFrame
- push bc
- call Functiona57
- pop bc
- ld a, [hJoyDown]
- cp $46
- jr z, .asm_a34
- ld a, [$ffa9]
- and $9
- jr nz, .asm_a34
- dec c
- jr nz, .asm_a1b
- and a
- ret
-
-.asm_a34
- scf
- ret
-; a36
-
-
-
-Functiona36: ; a36
-.asm_a36
- call DelayFrame
- call GetJoypadPublic
- ld a, [hJoyPressed]
- and $3
- ret nz
- call RTC
- jr .asm_a36
-; a46
-
-Functiona46: ; a46
- ld a, [hOAMUpdate]
- push af
- ld a, $1
- ld [hOAMUpdate], a
- call WaitBGMap
- call Functiona36
- pop af
- ld [hOAMUpdate], a
- ret
-; a57
-
-
-
-Functiona57: ; a57
- call GetJoypadPublic
- ld a, [$ffaa]
- and a
- ld a, [hJoyPressed]
- jr z, .asm_a63
- ld a, [hJoyDown]
-
-.asm_a63
- ld [$ffa9], a
- ld a, [hJoyPressed]
- and a
- jr z, .asm_a70
- ld a, $f
- ld [TextDelayFrames], a
- ret
-
-.asm_a70
- ld a, [TextDelayFrames]
- and a
- jr z, .asm_a7a
- xor a
- ld [$ffa9], a
- ret
-
-.asm_a7a
- ld a, $5
- ld [TextDelayFrames], a
- ret
-; a80
-
-Functiona80: ; a80
- ld a, [hConnectionStripLength]
- push af
- ld a, [hConnectedMapWidth]
- push af
- xor a
- ld [hConnectionStripLength], a
- ld a, $6
- ld [hConnectedMapWidth], a
-.asm_a8d
- push hl
- ld hl, $c606
- call Functionb06
- pop hl
- call Functiona57
- ld a, [$ffa9]
- and $3
- jr z, .asm_a8d
- pop af
- ld [hConnectedMapWidth], a
- pop af
- ld [hConnectionStripLength], a
- ret
-; aa5
-
-Functionaa5: ; aa5
-.asm_aa5
- call Functiona57
- ld a, [$ffa9]
- and $3
- jr z, .asm_aa5
- ret
-; aaf
-
-
-
-Functionaaf: ; aaf
- ld a, [InLinkBattle]
- and a
- jr nz, .asm_ac1
- call Functionac6
- push de
- ld de, SFX_READ_TEXT_2
- call StartSFX
- pop de
- ret
-
-.asm_ac1
- ld c, $41
- jp DelayFrames
-; ac6
-
-Functionac6: ; ac6
- ld a, [hOAMUpdate]
- push af
- ld a, $1
- ld [hOAMUpdate], a
- ld a, [InputType]
- or a
- jr z, .asm_ad9
- ld a, $77
- ld hl, $628a
- rst FarCall
-
-.asm_ad9
- call Functionaf5
- call Functiona57
- ld a, [hJoyPressed]
- and $3
- jr nz, .asm_af1
- call RTC
- ld a, $1
- ld [hBGMapMode], a
- call DelayFrame
- jr .asm_ad9
-
-.asm_af1
- pop af
- ld [hOAMUpdate], a
- ret
-; af5
-
-Functionaf5: ; af5
- ld a, [$ff9b]
- and $10
- jr z, .asm_aff
- ld a, $ee
- jr .asm_b02
-
-.asm_aff
- ld a, [$c605]
-
-.asm_b02
- ld [$c606], a
- ret
-; b06
-
-Functionb06: ; b06
- push bc
- ld a, [hl]
- ld b, a
- ld a, $ee
- cp b
- pop bc
- jr nz, .asm_b27
- ld a, [hConnectionStripLength]
- dec a
- ld [hConnectionStripLength], a
- ret nz
- ld a, [hConnectedMapWidth]
- dec a
- ld [hConnectedMapWidth], a
- ret nz
- ld a, $7a
- ld [hl], a
- ld a, $ff
- ld [hConnectionStripLength], a
- ld a, $6
- ld [hConnectedMapWidth], a
- ret
-
-.asm_b27
- ld a, [hConnectionStripLength]
- and a
- ret z
- dec a
- ld [hConnectionStripLength], a
- ret nz
- dec a
- ld [hConnectionStripLength], a
- ld a, [hConnectedMapWidth]
- dec a
- ld [hConnectedMapWidth], a
- ret nz
- ld a, $6
- ld [hConnectedMapWidth], a
- ld a, $ee
- ld [hl], a
- ret
-; b40
-
-
INCLUDE "engine/decompress.asm"
-UpdatePalsIfCGB: ; c2f
-; update bgp data from BGPals
-; update obp data from OBPals
-; return carry if successful
+INCLUDE "engine/palettes.asm"
-; check cgb
- ld a, [hCGB]
- and a
- ret z
+INCLUDE "engine/copy.asm"
-UpdateCGBPals: ; c33
-; return carry if successful
-; any pals to update?
- ld a, [hCGBPalUpdate]
- and a
- ret z
-
-ForceUpdateCGBPals: ; c37
-
- ld a, [rSVBK]
- push af
- ld a, 5 ; BANK(BGPals)
- ld [rSVBK], a
-
- ld hl, BGPals ; 5:d080
-
-; copy 8 pals to bgpd
- ld a, %10000000 ; auto increment, index 0
- ld [rBGPI], a
- ld c, rBGPD % $100
- ld b, 4 ; NUM_PALS / 2
-.bgp
- rept $10
- ld a, [hli]
- ld [$ff00+c], a
- endr
-
- dec b
- jr nz, .bgp
-
-; hl is now 5:d0c0 OBPals
-
-; copy 8 pals to obpd
- ld a, %10000000 ; auto increment, index 0
- ld [rOBPI], a
- ld c, rOBPD - rJOYP
- ld b, 4 ; NUM_PALS / 2
-.obp
- rept $10
- ld a, [hli]
- ld [$ff00+c], a
- endr
-
- dec b
- jr nz, .obp
-
- pop af
- ld [rSVBK], a
-
-; clear pal update queue
- xor a
- ld [hCGBPalUpdate], a
-
- scf
- ret
-; c9f
-
-
-DmgToCgbBGPals: ; c9f
-; exists to forego reinserting cgb-converted image data
-
-; input: a -> bgp
-
- ld [rBGP], a
- push af
-
- ld a, [hCGB]
- and a
- jr z, .end
-
- push hl
- push de
- push bc
- ld a, [rSVBK]
- push af
-
- ld a, 5
- ld [rSVBK], a
-
-; copy & reorder bg pal buffer
- ld hl, BGPals ; to
- ld de, Unkn1Pals ; from
-; order
- ld a, [rBGP]
- ld b, a
-; all pals
- ld c, 8
- call CopyPals
-; request pal update
- ld a, 1
- ld [hCGBPalUpdate], a
-
- pop af
- ld [rSVBK], a
- pop bc
- pop de
- pop hl
-.end
- pop af
- ret
-; ccb
-
-
-DmgToCgbObjPals: ; ccb
-; exists to forego reinserting cgb-converted image data
-
-; input: d -> obp1
-; e -> obp2
-
- ld a, e
- ld [rOBP0], a
- ld a, d
- ld [rOBP1], a
-
- ld a, [hCGB]
- and a
- ret z
-
- push hl
- push de
- push bc
- ld a, [rSVBK]
- push af
-
- ld a, 5
- ld [rSVBK], a
-
-; copy & reorder obj pal buffer
- ld hl, OBPals ; to
- ld de, Unkn2Pals ; from
-; order
- ld a, [rOBP0]
- ld b, a
-; all pals
- ld c, 8
- call CopyPals
-; request pal update
- ld a, 1
- ld [hCGBPalUpdate], a
-
- pop af
- ld [rSVBK], a
- pop bc
- pop de
- pop hl
- ret
-; cf8
-
-
-Functioncf8: ; cf8
- ld [rOBP0], a
- push af
- ld a, [hCGB]
- and a
- jr z, .asm_d22
- push hl
- push de
- push bc
- ld a, [rSVBK]
- push af
- ld a, $5
- ld [rSVBK], a
- ld hl, $d0c0
- ld de, MartPointer
- ld a, [rOBP0]
- ld b, a
- ld c, $1
- call CopyPals
- ld a, $1
- ld [hCGBPalUpdate], a
- pop af
- ld [rSVBK], a
- pop bc
- pop de
- pop hl
-
-.asm_d22
- pop af
- ret
-; d24
-
-Functiond24: ; d24
- ld [rOBP1], a
- push af
- ld a, [hCGB]
- and a
- jr z, .asm_d4e
- push hl
- push de
- push bc
- ld a, [rSVBK]
- push af
- ld a, $5
- ld [rSVBK], a
- ld hl, $d0c8
- ld de, $d048
- ld a, [rOBP1]
- ld b, a
- ld c, $1
- call CopyPals
- ld a, $1
- ld [hCGBPalUpdate], a
- pop af
- ld [rSVBK], a
- pop bc
- pop de
- pop hl
-
-.asm_d4e
- pop af
- ret
-; d50
-
-
-
-CopyPals: ; d50
-; copy c palettes in order b from de to hl
-
- push bc
- ld c, 4 ; NUM_PAL_COLORS
-.loop
- push de
- push hl
-
-; get pal color
- ld a, b
- and %11 ; color
-; 2 bytes per color
- add a
- ld l, a
- ld h, $0
- add hl, de
- ld e, [hl]
- inc hl
- ld d, [hl]
-
-; dest
- pop hl
-; write color
- ld [hl], e
- inc hl
- ld [hl], d
- inc hl
-; next pal color
- srl b
- srl b
-; source
- pop de
-; done pal?
- dec c
- jr nz, .loop
-
-; de += 8 (next pal)
- ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal
- add e
- jr nc, .ok
- inc d
-.ok
- ld e, a
-
-; how many more pals?
- pop bc
- dec c
- jr nz, CopyPals
- ret
-; d79
-
-
-Functiond79: ; d79
- ld a, [hCGB]
- and a
- ret z
- ld a, $1
- ld [rVBK], a
- ld hl, VTiles0
- ld bc, $2000
- xor a
- call ByteFill
- ld a, $0
- ld [rVBK], a
- ret
-; d90
-
-
-Functiond90: ; d90
- ret
-; d91
-
-
-Functiond91: ; d91
- ld a, [hCGB]
- and a
- ret z
- ld a, [rSVBK]
- push af
- ld a, $5
- ld [rSVBK], a
- ld hl, $d080
- ld bc, $0050
- xor a
- call ByteFill
- pop af
- ld [rSVBK], a
- ld a, $1
- ld [hCGBPalUpdate], a
- call DelayFrame
- ret
-; db1
-
-
-Functiondb1: ; db1
- ld a, [hROMBank]
- push af
- ld a, $13
- rst Bankswitch
-
- call $4000
- pop af
- rst Bankswitch
-
- ret
-; dbd
-
-Functiondbd: ; dbd
- ld a, [hROMBank]
- push af
- ld a, $13
- rst Bankswitch
-
- call $403f
- pop af
- rst Bankswitch
-
- ret
-; dc9
-
-
-
-Functiondc9: ; dc9
- ld a, [rLCDC]
- bit 7, a
- jp z, Copy2bpp
-
- ld a, [hROMBank]
- push af
- ld a, BANK(Function104284)
- rst Bankswitch
- call Function104284
- pop af
- rst Bankswitch
-
- ret
-; ddc
-
-Functionddc: ; ddc
- ld a, [rLCDC]
- bit 7, a
- jp z, Copy1bpp
-
- ld a, [hROMBank]
- push af
- ld a, BANK(Function1042b2)
- rst Bankswitch
- call Function1042b2
- pop af
- rst Bankswitch
-
- ret
-; def
-
-Functiondef: ; def
- ld [hBuffer], a
- ld a, [hROMBank]
- push af
- ld a, [hBuffer]
- rst Bankswitch
- call FarCopyBytesDouble
- pop af
- rst Bankswitch
- ret
-; dfd
-
-Functiondfd: ; dfd
- dec c
- ld a, [hBGMapMode]
- push af
- xor a
- ld [hBGMapMode], a
- ld a, [hROMBank]
- push af
- ld a, b
- rst Bankswitch
-
-.asm_e09
- ld a, d
- ld [rHDMA1], a
- ld a, e
- and $f0
- ld [rHDMA2], a
- ld a, h
- and $1f
- ld [rHDMA3], a
- ld a, l
- and $f0
- ld [rHDMA4], a
- ld a, c
- cp $8
- jr c, .asm_e3c
- sub $8
- ld c, a
- ld a, $f
- ld [hDMATransfer], a
- call DelayFrame
- ld a, l
- add $0
- ld l, a
- ld a, h
- adc $1
- ld h, a
- ld a, e
- add $0
- ld e, a
- ld a, d
- adc $1
- ld d, a
- jr .asm_e09
-
-.asm_e3c
- ld a, c
- and $7f
- ld [hDMATransfer], a
- call DelayFrame
- pop af
- rst Bankswitch
-
- pop af
- ld [hBGMapMode], a
- ret
-; e4a
-
-
-
-Functione4a: ; e4a
- ld a, $5
- ld hl, $4135
- rst FarCall
- ret
-; e51
-
-
-
-Functione51: ; e51
- ld a, $3e
- ld hl, $7449
- rst FarCall
- ret
-; e58
-
-Functione58: ; e58
- ld a, $3e
- ld hl, $74be
- rst FarCall
- ret
-; e5f
-
-
-
-Functione5f: ; e5f
- ld a, $3e
- ld hl, $748a
- rst FarCall
- ld a, $3e
- ld hl, $74b0
- rst FarCall
- ret
-; e6c
-
-Functione6c: ; e6c
- ld a, $3e
- ld hl, $74b0
- rst FarCall
- ret
-; e73
-
-Functione73: ; e73
- push de
- ld a, $0
- call GetSRAMBank
- push bc
- ld de, $a000
- ld a, b
- call FarDecompress
- pop bc
- pop hl
- ld de, $a000
- call Request2bpp
- call CloseSRAM
- ret
-; e8d
-
-
-
-FarCopyBytes: ; e8d
-; copy bc bytes from a:hl to de
-
- ld [hBuffer], a
- ld a, [hROMBank]
- push af
- ld a, [hBuffer]
- rst Bankswitch
-
- call CopyBytes
-
- pop af
- rst Bankswitch
- ret
-; 0xe9b
-
-
-FarCopyBytesDouble: ; e9b
-; Copy bc bytes from a:hl to bc*2 bytes at de,
-; doubling each byte in the process.
-
- ld [hBuffer], a
- ld a, [hROMBank]
- push af
- ld a, [hBuffer]
- rst Bankswitch
-
-; switcheroo, de <> hl
- ld a, h
- ld h, d
- ld d, a
- ld a, l
- ld l, e
- ld e, a
-
- inc b
- inc c
- jr .dec
-
-.loop
- ld a, [de]
- inc de
- ld [hli], a
- ld [hli], a
-.dec
- dec c
- jr nz, .loop
- dec b
- jr nz, .loop
-
- pop af
- rst Bankswitch
- ret
-; 0xeba
-
-
-Request2bpp: ; eba
- ld a, [hBGMapMode]
- push af
- xor a
- ld [hBGMapMode], a
-
- ld a, [hROMBank]
- push af
- ld a, b
- rst Bankswitch
-
- ld a, [$ffd3]
- push af
-
- ld a, $8
- ld [$ffd3], a
- ld a, [InLinkBattle]
- cp $4
- jr nz, .asm_edc
- ld a, [$ffe9]
- and a
- jr nz, .asm_edc
- ld a, $6
- ld [$ffd3], a
-
-.asm_edc
- ld a, e
- ld [$cf68], a
- ld a, d
- ld [$cf69], a
- ld a, l
- ld [$cf6a], a
- ld a, h
- ld [$cf6b], a
-
-.asm_eec
- ld a, c
- ld hl, $ffd3
- cp [hl]
- jr nc, .asm_f08
-
- ld [$cf67], a
-.wait
- call DelayFrame
- ld a, [$cf67]
- and a
- jr nz, .wait
-
- pop af
- ld [$ffd3], a
-
- pop af
- rst Bankswitch
-
- pop af
- ld [hBGMapMode], a
- ret
-
-.asm_f08
- ld a, [$ffd3]
- ld [$cf67], a
-.asm_f0d
- call DelayFrame
- ld a, [$cf67]
- and a
- jr nz, .asm_f0d
- ld a, c
- ld hl, $ffd3
- sub [hl]
- ld c, a
- jr .asm_eec
-; f1e
-
-
-Request1bpp: ; f1e
- ld a, [hBGMapMode]
- push af
- xor a
- ld [hBGMapMode], a
-
- ld a, [hROMBank]
- push af
- ld a, b
- rst Bankswitch
-
- ld a, [$ffd3]
- push af
-
- ld a, $8
- ld [$ffd3], a
- ld a, [InLinkBattle]
- cp $4
- jr nz, .asm_f40
- ld a, [$ffe9]
- and a
- jr nz, .asm_f40
- ld a, $6
- ld [$ffd3], a
-
-.asm_f40
- ld a, e
- ld [$cf6d], a
- ld a, d
- ld [$cf6e], a
- ld a, l
- ld [$cf6f], a
- ld a, h
- ld [$cf70], a
-.asm_f50
- ld a, c
- ld hl, $ffd3
- cp [hl]
- jr nc, .asm_f6c
-
- ld [$cf6c], a
-.wait
- call DelayFrame
- ld a, [$cf6c]
- and a
- jr nz, .wait
-
- pop af
- ld [$ffd3], a
-
- pop af
- rst Bankswitch
-
- pop af
- ld [hBGMapMode], a
- ret
-
-.asm_f6c
- ld a, [$ffd3]
- ld [$cf6c], a
-.asm_f71
- call DelayFrame
- ld a, [$cf6c]
- and a
- jr nz, .asm_f71
- ld a, c
- ld hl, $ffd3
- sub [hl]
- ld c, a
- jr .asm_f50
-; f82
-
-
-Get2bpp: ; f82
- ld a, [rLCDC]
- bit 7, a
- jp nz, Request2bpp
-
-Copy2bpp: ; f89
-; copy c 2bpp tiles from b:de to hl
-
- push hl
- ld h, d
- ld l, e
- pop de
-
-; bank
- ld a, b
-
-; bc = c * $10
- push af
- swap c
- ld a, $f
- and c
- ld b, a
- ld a, $f0
- and c
- ld c, a
- pop af
-
- jp FarCopyBytes
-; f9d
-
-
-Get1bpp: ; f9d
- ld a, [rLCDC]
- bit 7, a
- jp nz, Request1bpp
-
-Copy1bpp: ; fa4
-; copy c 1bpp tiles from b:de to hl
-
- push de
- ld d, h
- ld e, l
-
-; bank
- ld a, b
-
-; bc = c * $10 / 2
- push af
- ld h, 0
- ld l, c
- add hl, hl
- add hl, hl
- add hl, hl
- ld b, h
- ld c, l
- pop af
-
- pop hl
- jp FarCopyBytesDouble
-; fb6
-
-
INCLUDE "engine/text.asm"
@@ -2330,55 +421,17 @@
.row
; write a row of 20 tiles
+rept 9
pop de
ld [hl], e
inc l
ld [hl], d
inc l
+endr
pop de
ld [hl], e
inc l
ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
; next row
add hl, bc
; done?
@@ -2437,6 +490,8 @@
.loop
; put 1 tile (16 bytes) into hl from sp
+
+rept 3
pop de
ld [hl], e
inc l
@@ -2446,6 +501,7 @@
inc l
ld [hl], d
inc l
+endr
pop de
ld [hl], e
inc l
@@ -2454,24 +510,6 @@
ld [hl], d
inc l
ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- ld [hl], d
; next tile
inc hl
; done?
@@ -2548,45 +586,17 @@
.loop
; put 1 tile (16 bytes) into hl from sp
+rept 7
pop de
ld [hl], e
inc l
ld [hl], d
inc l
+endr
pop de
ld [hl], e
inc l
ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
- ld [hl], e
- inc l
- ld [hl], d
; next tile
inc hl
; done?
@@ -2658,12 +668,12 @@
; 17ff
-Function17ff: ; 17ff
+GetSpritePalette: ; 17ff
push hl
push de
push bc
ld c, a
- callba GetSpritePalette
+ callba _GetSpritePalette
ld a, c
pop bc
pop de
@@ -2710,15 +720,17 @@
Function1836: ; 1836
push de
push hl
+
ld b, a
ld a, [hROMBank]
push af
- ld a, $5
+ ld a, BANK(Function142a7)
rst Bankswitch
ld a, b
- call $42a7
+ call Function142a7
ld c, a
+
pop de
ld a, d
rst Bankswitch
@@ -2728,6 +740,8 @@
ret
; 184a
+
+
Function184a: ; 184a
ld a, [StandingTile]
call GetTileCollision
@@ -2745,7 +759,6 @@
; 185d
-
GetTileCollision: ; 185d
; Get the collision type of tile a.
@@ -3184,12 +1197,13 @@
ld l, a
ld a, [hROMBank]
push af
- ld a, $1
+ ld a, BANK(Data4273)
rst Bankswitch
-
ld a, l
push bc
+
call Function1a71
+
pop bc
pop af
rst Bankswitch
@@ -3203,8 +1217,8 @@
ld [hl], a
push de
ld e, a
- ld d, $0
- ld hl, $4274
+ ld d, 0
+ ld hl, Data4273 + 1
add hl, de
add hl, de
add hl, de
@@ -3283,7 +1297,6 @@
; 1ad2
-
Function1ad2: ; 1ad2
ld a, [VramState]
bit 0, a
@@ -3294,7 +1307,6 @@
; 1ae5
-
Function1ae5: ; 1ae5
ld bc, $0028
ld hl, $d4d6
@@ -3327,12 +1339,11 @@
; 1b07
-
GetSpriteDirection: ; 1b07
ld hl, $0008
add hl, bc
ld a, [hl]
- and %00001100
+ and $c
ret
; 1b0f
@@ -3339,16 +1350,19 @@
Function1b0f: ; 1b0f
add $10
+
+Function1b11: ; 1b11
ld e, a
+
ld a, [hROMBank]
push af
- ld a, $2
+ ld a, BANK(Function84d9)
rst Bankswitch
- call $44d9
+ call Function84d9
+
pop af
rst Bankswitch
-
ret
; 1b1e
@@ -3918,14 +1932,18 @@
ret
; 0x1dcf
+
Function1dcf: ; 1dcf
ld bc, $0e07
- jr .asm_1dd9
+Function1dd2: ; 1dd2
+ jr Function1dd9
+
+Function1dd4: ; 1dd4
call LoadMenuDataHeader
- jr .asm_1dfe
+ jr Function1dfe
-.asm_1dd9
+Function1dd9: ; 1dd9
push bc
ld hl, MenuDataHeader_0x1e1d
call Function1d3c
@@ -3947,7 +1965,7 @@
ld [$cf84], a
call Function1c00
-.asm_1dfe
+Function1dfe: ; 1dfe
call Function1d81
push af
ld c, $f
@@ -4432,11 +2450,11 @@
; 208a
-Function208a: ; 208a
+ResetGameTime: ; 208a
xor a
ld [GameTimeCap], a
ld [GameTimeHours], a
- ld [$d4c5], a
+ ld [GameTimeHours + 1], a
ld [GameTimeMinutes], a
ld [GameTimeSeconds], a
ld [GameTimeFrames], a
@@ -4694,9 +2712,13 @@
ld d, a
ld hl, EnemyMoveAnimation
ld b, $5
+
+.asm_21a5
push de
push hl
ld c, $6
+
+.asm_21a9
push de
push hl
ld a, [de]
@@ -4794,7 +2816,7 @@
pop de
inc de
dec c
- jp nz, $21a9
+ jp nz, .asm_21a9
pop hl
ld de, $0060
add hl, de
@@ -4808,7 +2830,7 @@
.asm_2225
dec b
- jp nz, $21a5
+ jp nz, .asm_21a5
ret
; 222a
@@ -5922,11 +3944,13 @@
Function27d3: ; 27d3
ld hl, BGMapBufferPtrs
push de
- call $27df
+ call .asm_27df
pop de
ld a, $20
add e
ld e, a
+
+.asm_27df
ld c, $a
.asm_27e1
ld a, e
@@ -6565,9 +4589,9 @@
call Function1d7d
call Functiond90
jr Function2b5c
-; 2b4c
+; 2b4d
-Function2b4c: ; 2b4c
+Function2b4d: ; 2b4d
call WhiteBGMap
call Function1d7d
call Function2bae
@@ -8286,32 +6310,35 @@
and a
jr z, .asm_322e
ld a, [$c2ce]
- cp $0
+ cp 0
jr z, .asm_322e
- ld a, $1
+ ld a, 1
ld [hBGMapMode], a
- jr .asm_323d
+ jr Function323d
.asm_322e
- ld a, $1
+ ld a, 1
ld [hBGMapMode], a
- ld c, $4
+ ld c, 4
call DelayFrames
ret
+; 3238
+Function3238: ; 3238
ld a, [hCGB]
and a
jr z, WaitBGMap
-.asm_323d
- jr .asm_3246
+Function323d: ; 323d
+ jr Function3246
+; 323f
- ld a, $41
- ld hl, $4000
- rst FarCall
+Function323f: ; 323f
+ callba Function104000
ret
+; 3246
-.asm_3246
+Function3246: ; 3246
ld a, [hBGMapMode]
push af
xor a
@@ -8357,87 +6384,19 @@
ld c, $41
.asm_328c
pop de
-.asm_328d
+
+rept 9
+.loop\@
ld a, [$ff00+c]
and b
- jr nz, .asm_328d
+ jr nz, .loop\@
ld [hl], e
inc l
ld [hl], d
inc l
pop de
-.asm_3296
- ld a, [$ff00+c]
- and b
- jr nz, .asm_3296
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
-.asm_329f
- ld a, [$ff00+c]
- and b
- jr nz, .asm_329f
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
-.asm_32a8
- ld a, [$ff00+c]
- and b
- jr nz, .asm_32a8
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
-.asm_32b1
- ld a, [$ff00+c]
- and b
- jr nz, .asm_32b1
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
-.asm_32ba
- ld a, [$ff00+c]
- and b
- jr nz, .asm_32ba
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
-.asm_32c3
- ld a, [$ff00+c]
- and b
- jr nz, .asm_32c3
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
-.asm_32cc
- ld a, [$ff00+c]
- and b
- jr nz, .asm_32cc
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
-.asm_32d5
- ld a, [$ff00+c]
- and b
- jr nz, .asm_32d5
- ld [hl], e
- inc l
- ld [hl], d
- inc l
- pop de
+endr
+
.asm_32de
ld a, [$ff00+c]
and b
@@ -8446,6 +6405,7 @@
inc l
ld [hl], d
inc l
+
ld de, $000c
add hl, de
ld a, [$ffd3]
@@ -9253,14 +7213,16 @@
ld [CurFruit], a
ld a, c
ld [MartPointer], a
- jr .asm_367e
+ jr Function367e
+; 3674
+Function3674: ; 3674
ld a, $1
ld [CurFruit], a
ld a, $ff
ld [MartPointer], a
-.asm_367e
+Function367e: ; 367e
call GetMapEventBank
ld [EngineBuffer1], a
ld a, [$ffe0]
@@ -9499,6 +7461,8 @@
Function3786: ; 3786
ld a, $1
ld [$c2c6], a
+
+Function378b: ; 378b
ld a, [CurPartySpecies]
call Function3741
jr c, .asm_37ad
@@ -9636,21 +7600,22 @@
; How many digits?
ld c, 2
cp 100
- jr c, .print
+ jr c, Function3842
; 3-digit numbers overwrite the :L.
dec hl
inc c
- jr .print
+ jr Function3842
+; 383d
-; --------
-; Unused: print :L and all 3 digits
+Function383d: ; 383d
+; Print :L and all 3 digits
ld [hl], $6e
inc hl
ld c, 3
-; --------
+; 3842
+Function3842: ; 3842
ld [$d265], a
ld de, $d265
ld b, %01000001 ; flags
@@ -9963,6 +7928,8 @@
; Update level, status, current HP
ld a, [CurBattleMon]
+
+Function399f: ; 399f
ld hl, PartyMon1Level
call GetPartyLocation
@@ -11137,11 +9104,11 @@
pop bc
.asm_3f4c
push bc
- call $3f68
+ call Function3f68
pop bc
dec b
jr nz, .asm_3f4c
- call $3f60
+ call Function3f60
ret
; 3f58
@@ -11149,18 +9116,20 @@
ld a, $63
ld d, $62
ld e, $64
- jr .asm_3f6e
+ jr Function3f6e
+Function3f60: ; 3f60
ld a, $68
ld d, $67
ld e, $69
- jr .asm_3f6e
+ jr Function3f6e
+Function3f68: ; 3f68
ld a, $7f
ld d, $65
ld e, $66
-.asm_3f6e
+Function3f6e: ; 3f6e
push hl
ld [hl], d
inc hl
@@ -13209,7 +11178,7 @@
inc [hl]
ld a, [hl]
ld d, $60
- call $1b11
+ call Function1b11
ld a, h
sub $60
ld hl, $001a
@@ -13282,7 +11251,7 @@
inc [hl]
ld a, [hl]
ld d, $60
- call $1b11
+ call Function1b11
ld a, h
sub $60
ld hl, $001a
@@ -13373,7 +11342,7 @@
inc [hl]
ld a, [hl]
ld d, $60
- call $1b11
+ call Function1b11
ld a, h
sub $60
ld hl, $001a
@@ -15254,57 +13223,72 @@
; 5bae
Function5bae: ; 5bae
+
ld hl, Sprites
- ld bc, $0bcc
+ ld bc, Options - Sprites
xor a
call ByteFill
+
ld hl, $d000
- ld bc, $047b
+ ld bc, PlayerID - $d000
xor a
call ByteFill
+
ld hl, PlayerID
- ld bc, $0b7a
+ ld bc, $dff5 - PlayerID
xor a
call ByteFill
+
ld a, [rLY]
ld [$ffe3], a
call DelayFrame
ld a, [hRandomSub]
ld [PlayerID], a
+
ld a, [rLY]
ld [$ffe3], a
call DelayFrame
ld a, [hRandomAdd]
ld [PlayerID + 1], a
+
call RNG
ld [$d84a], a
call DelayFrame
call RNG
ld [$d84b], a
+
ld hl, PartyCount
call Function5ca1
+
xor a
ld [$db72], a
ld [$d4b4], a
+
call Function5ca6
- ld a, $1
+
+ ld a, 1
call GetSRAMBank
ld hl, BoxCount
call Function5ca1
call CloseSRAM
+
ld hl, NumItems
call Function5ca1
+
ld hl, NumKeyItems
call Function5ca1
+
ld hl, NumBalls
call Function5ca1
- ld hl, $d8f1
+
+ ld hl, PCItems
call Function5ca1
+
xor a
ld [RoamMon1Species], a
ld [RoamMon2Species], a
ld [RoamMon3Species], a
- ld a, $ff
+ ld a, -1
ld [RoamMon1MapGroup], a
ld [RoamMon2MapGroup], a
ld [RoamMon3MapGroup], a
@@ -15311,7 +13295,8 @@
ld [RoamMon1MapNumber], a
ld [RoamMon2MapNumber], a
ld [RoamMon3MapNumber], a
- ld a, $0
+
+ ld a, 0
call GetSRAMBank
ld hl, $abe2
xor a
@@ -15319,21 +13304,28 @@
dec a
ld [hl], a
call CloseSRAM
+
call Function5d33
call Function5cd3
+
xor a
ld [MonType], a
+
ld [JohtoBadges], a
ld [KantoBadges], a
+
ld [$d855], a
ld [$d856], a
+
ld [Money], a
- ld a, $b
- ld [$d84f], a
- ld a, $b8
- ld [$d850], a
+ ld a, 3000 >> 8
+ ld [Money + 1], a
+ ld a, 3000 & $ff
+ ld [Money + 2], a
+
xor a
ld [$dc17], a
+
ld hl, $dc19
ld [hl], $0
inc hl
@@ -15340,17 +13332,22 @@
ld [hl], $8
inc hl
ld [hl], $fc
+
call Function5ce9
+
ld a, $9
ld hl, $6751
rst FarCall
+
ld a, $11
ld hl, $4765
rst FarCall
+
ld a, $41
ld hl, $61c0
rst FarCall
- call Function208a
+
+ call ResetGameTime
ret
; 5ca1
@@ -15822,8 +13819,8 @@
ld de, MUSIC_ROUTE_30
call StartMusic
- call $04a3
- call $04b6
+ call Function4a3
+ call Function4b6
xor a
ld [CurPartySpecies], a
ld a, POKEMON_PROF
@@ -15836,7 +13833,7 @@
ld hl, OakText1
call PrintText
- call $04b6
+ call Function4b6
call ClearTileMap
ld a, $c2
@@ -15859,7 +13856,7 @@
call PrintText
ld hl, OakText4
call PrintText
- call $04b6
+ call Function4b6
call ClearTileMap
xor a
@@ -15874,7 +13871,7 @@
ld hl, OakText5
call PrintText
- call $04b6
+ call Function4b6
call ClearTileMap
xor a
@@ -15945,7 +13942,7 @@
ld hl, $56c1
rst FarCall
- call $04b6
+ call Function4b6
call ClearTileMap
call Functione5f
@@ -18412,7 +16409,7 @@
call Function180e
ld [$c2f2], a
ld a, [hl]
- call Function17ff
+ call GetSpritePalette
ld [$c2f3], a
ld hl, $0008
add hl, bc
@@ -19079,7 +17076,7 @@
Function84ef: ; 84ef
ld e, a
ld a, d
- ld d, $0
+ ld d, 0
ld hl, $450b
add hl, de
add hl, de
@@ -19086,7 +17083,7 @@
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $0000
+ ld hl, 0
.asm_84fe
srl a
jr nc, .asm_8503
@@ -20853,12 +18850,15 @@
; c779
Functionc779: ; c779
- ld hl, $4780
+ ld hl, UnknownText_0xc780
call Function1d67
ret
; c780
-INCBIN "baserom.gbc", $c780, $c785 - $c780
+UnknownText_0xc780: ; 0xc780
+ text_jump UnknownText_0x1c05c8, BANK(UnknownText_0x1c05c8)
+ db "@"
+; 0xc785
Functionc785: ; c785
call Functionc6ea
@@ -20893,7 +18893,7 @@
ld c, [hl]
push hl
ld hl, $4862
- call $4840
+ call Functionc840
pop hl
jr nc, .asm_c7fc
ld a, l
@@ -21013,12 +19013,37 @@
; c8e0
Functionc8e0: ; c8e0
- ld hl, $48e6
+ ld hl, UnknownScript_0xc8e6
jp Function31cd
; c8e6
-INCBIN "baserom.gbc", $c8e6, $c909 - $c8e6
+UnknownScript_0xc8e6: ; 0xc8e6
+ reloadmappart
+ special $0035
+ 2writetext UnknownText_0xc8f3
+ 3callasm $23, $47e1
+ loadmovesprites
+ end
+; 0xc8f3
+UnknownText_0xc8f3: ; 0xc8f3
+ text_jump UnknownText_0x1c0609, BANK(UnknownText_0x1c0609)
+ start_asm
+; 0xc8f8
+
+Functionc8f8: ; c8f8
+ call WaitSFX
+ ld de, SFX_FLASH
+ call StartSFX
+ call WaitSFX
+ ld hl, UnknownText_0xc908
+ ret
+; c908
+
+UnknownText_0xc908: ; 0xc908
+ db "@"
+; 0xc909
+
Functionc909: ; c909
call Functionc6ea
.asm_c90c
@@ -21426,7 +19451,7 @@
.asm_cba1
ld [Buffer2], a
.asm_cba4
- ld hl, $4bb2
+ ld hl, Tablecbb2
call Functionc6f5
jr nc, .asm_cba4
and $7f
@@ -21434,12 +19459,134 @@
ret
; cbb2
-INCBIN "baserom.gbc", $cbb2, $cc61 - $cbb2
+Tablecbb2: ; cbb2
+ dw Functioncbb8
+ dw Functioncbd8
+ dw Functioncc06
+; cbb8
+Functioncbb8: ; cbb8
+ call GetMapPermission
+ cp $4
+ jr z, .asm_cbc6
+ cp $7
+ jr z, .asm_cbc6
+.asm_cbc3
+ ld a, $2
+ ret
+
+.asm_cbc6
+ ld hl, $dca9
+ ld a, [hli]
+ and a
+ jr z, .asm_cbc3
+ ld a, [hli]
+ and a
+ jr z, .asm_cbc3
+ ld a, [hl]
+ and a
+ jr z, .asm_cbc3
+ ld a, $1
+ ret
+; cbd8
+
+Functioncbd8: ; cbd8
+ ld hl, $dca9
+ ld de, $d146
+ ld bc, $0003
+ call CopyBytes
+ call GetPartyNick
+ ld a, [Buffer2]
+ cp $2
+ jr nz, .asm_cbf7
+ ld hl, $4c35
+ call Function31cd
+ ld a, $81
+ ret
+
+.asm_cbf7
+ callba Function8ae4e
+ ld hl, UnknownScript_0xcc2b
+ call Function31cd
+ ld a, $81
+ ret
+; cc06
+
+Functioncc06: ; cc06
+ ld a, [Buffer2]
+ cp $2
+ jr nz, .asm_cc19
+ ld hl, UnknownText_0xcc26
+ call Function1d4f
+ call Functiona80
+ call Function1c17
+
+.asm_cc19
+ ld a, $80
+ ret
+; cc1c
+
+UnknownText_0xcc1c: ; 0xcc1c
+ ; used DIG!
+ text_jump UnknownText_0x1c06de, BANK(UnknownText_0x1c06de)
+ db "@"
+; 0xcc21
+
+UnknownText_0xcc21: ; 0xcc21
+ ; used an ESCAPE ROPE.
+ text_jump UnknownText_0x1c06ed, BANK(UnknownText_0x1c06ed)
+ db "@"
+; 0xcc26
+
+UnknownText_0xcc26: ; 0xcc26
+ ; Can't use that here.
+ text_jump UnknownText_0x1c0705, BANK(UnknownText_0x1c0705)
+ db "@"
+; 0xcc2b
+
+UnknownScript_0xcc2b: ; 0xcc2b
+ reloadmappart
+ special $0035
+ 2writetext UnknownText_0xcc21
+ 2jump UnknownScript_0xcc3c
+; 0xcc35
+
+UnknownScript_0xcc35: ; 0xcc35
+ reloadmappart
+ special $0035
+ 2writetext UnknownText_0xcc1c
+
+UnknownScript_0xcc3c: ; 0xcc3c
+ closetext
+ loadmovesprites
+ playsound SFX_WARP_TO
+ applymovement $0, MovementData_0xcc59
+ 3call BANK(UnknownScript_0x122c1), UnknownScript_0x122c1
+ special $0000
+ writecode $8, $0
+ newloadmap $f5
+ playsound SFX_WARP_FROM
+ applymovement $0, MovementData_0xcc5d
+ end
+; 0xcc59
+
+MovementData_0xcc59: ; 0xcc59
+ step_wait5
+ turn_away_down
+ hide_person
+ step_end
+; 0xcc5d
+
+MovementData_0xcc5d: ; 0xcc5d
+ db $3c, $58
+ turn_away_down
+ step_end
+; 0xcc61
+
Functioncc61: ; cc61
call Functionc6ea
.asm_cc64
- ld hl, $4c72
+ ld hl, Tablecc72
call Functionc6f5
jr nc, .asm_cc64
and $7f
@@ -21447,8 +19594,52 @@
ret
; cc72
-INCBIN "baserom.gbc", $cc72, $cce5 - $cc72
+Tablecc72: ; cc72
+ dw Functioncc78
+ dw Functioncc9c
+ dw Functioncca8
+; cc78
+Functioncc78: ; cc78
+ call GetMapPermission
+ call CheckOutdoorMap
+ jr z, .asm_cc82
+ jr .asm_cc99
+
+.asm_cc82
+ ld a, [$dcb2]
+ ld d, a
+ ld a, [$dcb3]
+ ld e, a
+ callba Function15344
+ jr nc, .asm_cc99
+ ld a, c
+ ld [$d001], a
+ ld a, $1
+ ret
+
+.asm_cc99
+ ld a, $2
+ ret
+; cc9c
+
+Functioncc9c: ; cc9c
+ call GetPartyNick
+ ld hl, $4cbb
+ call Function31cd
+ ld a, $81
+ ret
+; cca8
+
+Functioncca8: ; cca8
+ ld hl, $4cb6
+ call Function1d67
+ ld a, $80
+ ret
+; ccb1
+
+INCBIN "baserom.gbc", $ccb1, $cce5 - $ccb1
+
Functioncce5: ; cce5
call Functionccee
and $7f
@@ -21482,13 +19673,20 @@
; cd09
Functioncd09: ; cd09
- ld hl, $4d29
+ ld hl, UnknownScript_0xcd29
call Function31cd
ld a, $81
ret
; cd12
-INCBIN "baserom.gbc", $cd12, $cd1d - $cd12
+Functioncd12: ; cd12
+ ld hl, BikeFlags
+ set 0, [hl]
+ ld a, [CurPartyMon]
+ ld e, a
+ ld d, 0
+ ; fallthrough
+; cd1d
Functioncd1d: ; cd1d
ld hl, PartySpecies
@@ -21499,8 +19697,31 @@
ret
; cd29
-INCBIN "baserom.gbc", $cd29, $cd9d - $cd29
+UnknownScript_0xcd29: ; 0xcd29
+ reloadmappart
+ special $0035
+ 3callasm BANK(Functioncd12), Functioncd12
+ 2writetext UnknownText_0xcd41
+ copybytetovar $d1ef
+ cry $0000
+ pause 3
+ 2writetext UnknownText_0xcd46
+ loadmovesprites
+ end
+; 0xcd41
+UnknownText_0xcd41: ; 0xcd41
+ text_jump UnknownText_0x1c0774, BANK(UnknownText_0x1c0774)
+ db $50
+; 0xcd46
+
+UnknownText_0xcd46: ; 0xcd46
+ text_jump UnknownText_0x1c0788, BANK(UnknownText_0x1c0788)
+ db $50
+; 0xcd4b
+
+INCBIN "baserom.gbc", $cd4b, $cd9d - $cd4b
+
Functioncd9d: ; cd9d
call Functionc6ea
.asm_cda0
@@ -21530,7 +19751,7 @@
ld c, [hl]
push hl
ld hl, $48a4
- call $4840
+ call Functionc840
pop hl
jr nc, .asm_ce09
ld a, l
@@ -21552,15 +19773,33 @@
INCBIN "baserom.gbc", $ce0b, $ce0f - $ce0b
UnknownScript_0xce0f: ; 0xce0f
- 3callasm $03, $4706
+ 3callasm BANK(GetPartyNick), GetPartyNick
2writetext UnknownText_0xcdd9
reloadmappart
- 3callasm $03, $4e1d
+ 3callasm BANK(Functionce1d), Functionce1d
loadmovesprites
end
; 0xce1d
-INCBIN "baserom.gbc", $ce1d, $ce3e - $ce1d
+Functionce1d: ; ce1d
+ ld hl, $d1ec
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [$d1ee]
+ ld [hl], a
+ xor a
+ ld [hBGMapMode], a
+ call Function2173
+ ld a, [$d1ef]
+ ld e, a
+ ld a, $23
+ ld hl, $47d4
+ rst FarCall
+ call Function2879
+ call Function2914
+ ret
+; ce3e
TryWhirlpoolOW: ; ce3e
ld d, WHIRLPOOL
@@ -21619,7 +19858,7 @@
call GetFacingTileCoord
call CheckHeadbuttTreeTile
jr nz, .asm_ce97
- ld hl, $4ea7
+ ld hl, UnknownScript_0xcea7
call Function31cd
ld a, $81
ret
@@ -21630,8 +19869,39 @@
ret
; ce9d
-INCBIN "baserom.gbc", $ce9d, $cec9 - $ce9d
+UnknownText_0xce9d: ; 0xce9d
+ text_jump UnknownText_0x1c0897, BANK(UnknownText_0x1c0897)
+ db $50
+; 0xcea2
+UnknownText_0xcea2: ; 0xcea2
+ text_jump UnknownText_0x1c08ac, BANK(UnknownText_0x1c08ac)
+ db $50
+; 0xcea7
+
+UnknownScript_0xcea7: ; 0xcea7
+ reloadmappart
+ special $0035
+ 3callasm BANK(GetPartyNick), GetPartyNick
+ 2writetext UnknownText_0xce9d
+ reloadmappart
+ 3callasm $23, $480a
+ 3callasm $2e, $41ea
+ iffalse UnknownScript_0xcec3
+ loadmovesprites
+ battlecheck
+ startbattle
+ returnafterbattle
+ end
+; 0xcec3
+
+UnknownScript_0xcec3: ; 0xcec3
+ 2writetext UnknownText_0xcea2
+ closetext
+ loadmovesprites
+ end
+; 0xcec9
+
TryHeadbuttOW: ; cec9
ld d, $1d
call CheckPartyMove
@@ -21662,7 +19932,7 @@
ld a, d
cp $18
jr nz, .asm_cf07
- ld hl, $4f2e
+ ld hl, UnknownScript_0xcf2e
call Function31cd
ld a, $81
ret
@@ -21695,9 +19965,39 @@
ret
; cf2e
-INCBIN "baserom.gbc", $cf2e, $cf8e - $cf2e
+UnknownScript_0xcf2e: ; 0xcf2e
+ reloadmappart
+ special $0035
+ 3callasm BANK(GetPartyNick), GetPartyNick
+ 2writetext UnknownText_0xcf58
+ loadmovesprites
+ special $003b
+ playsound SFX_STRENGTH
+ earthquake 84
+ applymovement2 MovementData_0xcf55
+ disappear $fe
+ 3callasm $2e, $4219
+ copybytetovar $d22e
+ iffalse .done
+ battlecheck
+ startbattle
+ returnafterbattle
+.done
+ end
+; 0xcf55
+MovementData_0xcf55: ; 0xcf55
+ db $57, $0a
+ step_end
+UnknownText_0xcf58: ; 0xcf58
+ text_jump UnknownText_0x1c08f0, BANK(UnknownText_0x1c08f0)
+ db $50
+; 0xcf5d
+
+INCBIN "baserom.gbc", $cf5d, $cf8e - $cf5d
+
+
Functioncf8e: ; cf8e
ld a, e
push af
@@ -23789,7 +22089,7 @@
ld de, StringBuffer1
call InitName
ld a, $4
- ld hl, $2b4d
+ ld hl, Function2b4d
rst FarCall
ret
; e3fd
@@ -23879,7 +22179,7 @@
ld hl, $4000
rst FarCall
ld bc, $0e07
- call $1dd2
+ call Function1dd2
ret c
.asm_e6ea
@@ -24566,9 +22866,7 @@
ld a, [InputType]
or a
jr z, .asm_107ca
- ld a, $77
- ld hl, $628f
- rst FarCall
+ callba Function1de28f
.asm_107ca
call Function107d7
@@ -25403,7 +23701,7 @@
call .DrawBugContestStatus
call Function1ad2
call Functiond90
- call $2b5c
+ call Function2b5c
ret
; 126d3
@@ -25767,7 +24065,7 @@
ld a, 0
ret
.asm_12970
- call $2b4d
+ call Function2b4d
ld a, 4
ret
; 12976
@@ -25824,7 +24122,7 @@
.quit
ld a, b
push af
- call $2b4d
+ call Function2b4d
pop af
ret
; 129d5
@@ -26005,7 +24303,7 @@
call ClearPalettes
call Function12ba9
call ClearPalettes
- call $0e58
+ call Functione58
call Function1c07
ld a, 0
ret
@@ -26272,13 +24570,13 @@
call LoadMenuDataHeader
call Function1d81
call Function1c07
- jp c, $6dc6
+ jp c, .asm_12dc6
ld a, [$cfa9]
cp $1
jr z, .asm_12d6d
cp $2
jr z, .asm_12d76
- jp $6dc6
+ jp .asm_12dc6
.asm_12d6d
ld a, $2e
@@ -26288,7 +24586,7 @@
ret
.asm_12d76
- ld hl, $6df1
+ ld hl, UnknownText_0x12df1
call Function12cf5
jr c, .asm_12d9a
ld a, [CurPartyMon]
@@ -26295,17 +24593,17 @@
ld b, a
callba Function4456e
jr c, .asm_12d92
- ld hl, $6dfb
+ ld hl, UnknownText_0x12dfb
call Function1d67
jr .asm_12dc6
.asm_12d92
- ld hl, $6df6
+ ld hl, UnknownText_0x12df6
call Function1d67
jr .asm_12dc6
.asm_12d9a
- ld hl, $6de2
+ ld hl, UnknownText_0x12de2
call Function12cf5
jr c, .asm_12dc6
call GetPartyItemLocation
@@ -26316,12 +24614,12 @@
call GetPartyItemLocation
ld [hl], $0
call GetCurNick
- ld hl, $6de7
+ ld hl, UnknownText_0x12de7
call Function1d67
jr .asm_12dc6
.asm_12dbe
- ld hl, $6dec
+ ld hl, UnknownText_0x12dec
call Function1d67
jr .asm_12dc6
@@ -26330,9 +24628,41 @@
ret
; 12dc9
-INCBIN "baserom.gbc", $12dc9, $12e00 - $12dc9
+INCBIN "baserom.gbc", $12dc9, $12de2 - $12dc9
+
+UnknownText_0x12de2: ; 0x12de2
+ text_jump UnknownText_0x1c1c22, BANK(UnknownText_0x1c1c22)
+ db "@"
+; 0x12de7
+
+UnknownText_0x12de7: ; 0x12de7
+ text_jump UnknownText_0x1c1c47, BANK(UnknownText_0x1c1c47)
+ db "@"
+; 0x12dec
+
+UnknownText_0x12dec: ; 0x12dec
+ text_jump UnknownText_0x1c1c62, BANK(UnknownText_0x1c1c62)
+ db "@"
+; 0x12df1
+
+UnknownText_0x12df1: ; 0x12df1
+ text_jump UnknownText_0x1c1c86, BANK(UnknownText_0x1c1c86)
+ db "@"
+; 0x12df6
+
+UnknownText_0x12df6: ; 0x12df6
+ text_jump UnknownText_0x1c1ca9, BANK(UnknownText_0x1c1ca9)
+ db "@"
+; 0x12dfb
+
+UnknownText_0x12dfb: ; 0x12dfb
+ text_jump UnknownText_0x1c1cc4, BANK(UnknownText_0x1c1cc4)
+ db "@"
+; 0x12e00
+
+
OpenPartyStats: ; 12e00
call Function1d6e
call ClearSprites
@@ -27046,7 +25376,7 @@
ld b, BANK(ItemMayBeRegisteredText)
ld hl, ItemMayBeRegisteredText
call Function269a
- call $0a46
+ call Functiona46
jp Function2dcf
; 13340
@@ -28117,7 +26447,7 @@
; 142c4
-GetSpritePalette: ; 142c4
+_GetSpritePalette: ; 142c4
ld a, c
call GetMonSprite
jr c, .asm_142d8
@@ -30142,7 +28472,7 @@
ld [$d10c], a
ld a, [Buffer2]
ld [$d107], a
- ld hl, $d8f1
+ ld hl, PCItems
call Function2f53
ld a, $3b
call Predef
@@ -30183,7 +28513,7 @@
.asm_15868
call Function15985
jr c, .asm_15878
- ld de, $d8f1
+ ld de, PCItems
ld a, $4
ld hl, $69f4
rst $8
@@ -30328,7 +28658,7 @@
ld [Buffer1], a
ld a, [$d107]
ld [Buffer2], a
- ld hl, $d8f1
+ ld hl, PCItems
call Function2f66
jr nc, .asm_15965
ld a, [Buffer1]
@@ -30462,7 +28792,7 @@
db %10110000
db 4, 8 ; rows/cols?
db 2 ; horizontal spacing?
- dbw 0, $d8f1
+ dbw 0, PCItems
dbw BANK(Function24ab4), Function24ab4
dbw BANK(Function24ac3), Function24ac3
dbw BANK(Function244c3), Function244c3
@@ -30914,7 +29244,7 @@
call Function15ffa
ld a, $4
call Function15c7d
- call $0a36
+ call Functiona36
.asm_15d68
call SpeechTextBox
@@ -30928,7 +29258,7 @@
.asm_15d6f
ld a, $3
call Function15c7d
- call $0a36
+ call Functiona36
and a
ret
@@ -30935,7 +29265,7 @@
.asm_15d79
ld a, $2
call Function15c7d
- call $0a36
+ call Functiona36
and a
ret
; 15d83
@@ -30997,7 +29327,7 @@
.asm_15dd8
ld a, $5
call Function15c7d
- call $0a36
+ call Functiona36
scf
ret
; 15de2
@@ -31118,7 +29448,7 @@
ld a, $9
ld hl, $4af0
rst FarCall
- call $0a36
+ call Functiona36
.asm_15f6e
call Function1c07
@@ -31164,7 +29494,7 @@
Function15fcd: ; 15fcd
call Function1d4f
- call $0a36
+ call Functiona36
call Function1c07
ret
; 15fd7
@@ -33873,7 +32203,7 @@
ld l, c
inc hl
ld c, $3
- call $3842
+ call Function3842
.asm_24c3e
pop af
@@ -34652,7 +32982,7 @@
.shutdown
ld hl, OakPCText4
call PrintText
- call $0a36
+ call Functiona36
call Function1c07
ret
; 0x265ee
@@ -34662,7 +32992,7 @@
call PrintText
call Rate
call StartSFX ; sfx loaded by previous Rate function call
- call $0a36
+ call Functiona36
call WaitSFX
ret
; 0x26601
@@ -34674,7 +33004,7 @@
call StartMusic
pop de
call StartSFX
- call $0a36
+ call Functiona36
call WaitSFX
ret
; 0x26616
@@ -34694,7 +33024,7 @@
call ClearOakRatingBuffers
ld hl, OakPCText3
call PrintText
- call $0a36
+ call Functiona36
ld a, [$d003]
ld hl, OakRatings
call FindOakRating
@@ -40691,7 +39021,7 @@
call FarBattleTextBox
.asm_3d20a
ld bc, $0107
- call $1dd2
+ call Function1dd2
ld a, [$cfa9]
jr c, .asm_3d217
and a
@@ -40951,7 +39281,7 @@
ld a, $47
ld hl, $4000
rst FarCall
- call $0a80
+ call Functiona80
call ClearTileMap
call WhiteBGMap
ret
@@ -41504,7 +39834,7 @@
ld hl, BattleText_0x80aca
call FarBattleTextBox
ld bc, $0107
- call $1dd2
+ call Function1dd2
ld a, [$cfa9]
dec a
jr nz, .asm_3d79a
@@ -42206,7 +40536,7 @@
and a
jr z, .asm_3dcc0
ld a, [$c71a]
- call $399f
+ call Function399f
ld hl, BattleMonHP
ld a, [hli]
or [hl]
@@ -42957,10 +41287,7 @@
ld a, [InputType]
or a
jr z, .asm_3e171
- ld a, $77
- ld hl, $6294
- rst FarCall
-
+ callba Function1de294
.asm_3e171
call Function3e19b
ret c
@@ -52195,7 +50522,7 @@
call ClearSprites
call DisableLCD
call Functione51
- call $0e58
+ call Functione58
ld hl, VBGMap0
ld bc, VBlank5
ld a, $7f
@@ -52224,7 +50551,7 @@
call ClearSprites
call DisableLCD
call Functione51
- call $0e58
+ call Functione58
ld hl, VBGMap0
ld bc, VBlank5
ld a, $7f
@@ -52635,7 +50962,7 @@
; 5004f
Function5004f: ; 5004f
- call $0e58
+ call Functione58
ld hl, $4ad1
ld a, $2
rst FarCall
@@ -53499,7 +51826,7 @@
UnknownScript_0x506c8: ; 0x506c8
reloadmappart
special $0035
- 3callasm $03, $4706
+ 3callasm BANK(GetPartyNick), GetPartyNick
2writetext UnknownText_0x50726
closetext
3callasm BANK(Function506ef), Function506ef
@@ -56470,7 +54797,7 @@
call Function86810
ld a, $4
ld [MusicFade], a
- call $04b6
+ call Function4b6
ld c, $8
call DelayFrames
ret
@@ -56625,7 +54952,7 @@
ld a, $7f
call ByteFill
ld hl, $c50a
- call $378b
+ call Function378b
call WaitBGMap
xor a
ld [hBGMapMode], a
@@ -56726,7 +55053,7 @@
xor a
ld [$c2c6], a
ld hl, $c50a
- call $378b
+ call Function378b
ld a, [CurPartySpecies]
cp $fd
jr z, .asm_867f8
@@ -56788,7 +55115,7 @@
callba GetPlayerBackpic
ld a, $31
ld [$ffad], a
- ld hl, $c51e
+ hlcoord 6, 6
ld bc, $0606
ld a, $13
call Predef
@@ -56815,7 +55142,7 @@
rst FarCall
xor a
ld [$ffad], a
- ld hl, $c510
+ hlcoord 12, 5
ld bc, $0707
ld a, $13
call Predef
@@ -56828,29 +55155,29 @@
call Function86643
xor a
ld [hBGMapMode], a
- ld hl, $c4c8
+ hlcoord 0, 2
ld bc, $0809
call TextBox
- ld hl, $c590
+ hlcoord 0, 12
ld bc, $0412
call TextBox
- ld hl, $c4f2
+ hlcoord 2, 4
ld de, PlayerName
call PlaceString
- ld hl, $c519
+ hlcoord 1, 6
ld a, $73
ld [hli], a
ld a, $74
ld [hli], a
ld [hl], $f3
- ld hl, $c51c
+ hlcoord 4, 6
ld de, PlayerID
ld bc, $8205
call PrintNum
- ld hl, $c541
- ld de, $68ed
+ hlcoord 1, 8
+ ld de, .PlayTime
call PlaceString
- ld hl, $c557
+ hlcoord 3, 9
ld de, GameTimeHours
ld bc, $0203
call PrintNum
@@ -56864,8 +55191,11 @@
ret
; 868ed
-INCBIN "baserom.gbc", $868ed, $88000 - $868ed
+.PlayTime
+ db "PLAY TIME@"
+; 868f7
+
SECTION "bank22",ROMX,BANK[$22]
INCBIN "baserom.gbc", $88000, $88258 - $88000
@@ -57114,8 +55444,9 @@
; hl = address of upper left corner of the area
; b = height
; c = width
- ld a, $7f ; blank tile
- ld de, 20 ; screen width
+
+ ld a, " " ; blank tile
+ ld de, 20 ; screen width
.loop
push bc
push hl
@@ -57128,6 +55459,7 @@
add hl, de
dec b
jr nz, .loop
+
dec hl
inc c
inc c
@@ -57152,41 +55484,106 @@
jr nz, .done ; if not, we're done
call GetSecondaryMapHeaderPointer
ld de, $0326
- ld b, $1
+ ld b, SET_FLAG
call EventFlagAction
.done
ret
; 0x8adef
-INCBIN "baserom.gbc", $8adef, $8ae30 - $8adef
+Function8adef: ; 8adef
+ call GetSecondaryMapHeaderPointer
+ ld de, $0328
+ ld b, CHECK_FLAG
+ call EventFlagAction
+ ld a, c
+ and a
+ jr nz, .asm_8ae2f
+ ld a, WATER_STONE
+ ld [CurItem], a
+ ld hl, NumItems
+ call Function2f79
+ jr c, .asm_8ae24
+
+ ld a, [PartyCount]
+ ld b, a
+ inc b
+.asm_8ae10
+ dec b
+ jr z, .asm_8ae2f
+ ld a, b
+ dec a
+ ld [CurPartyMon], a
+ push bc
+ ld a, $1
+ call GetPartyParamLocation
+ pop bc
+ ld a, [hl]
+ cp $18
+ jr nz, .asm_8ae10
+
+.asm_8ae24
+ call GetSecondaryMapHeaderPointer
+ ld de, $0328
+ ld b, SET_FLAG
+ call EventFlagAction
+
+.asm_8ae2f
+ ret
+; 8ae30
+
Function8ae30: ; 8ae30
push de
push bc
+
call GetSecondaryMapHeaderPointer
ld a, h
- cp $58
+ cp RuinsofAlphAerodactylChamber_SecondMapHeader >> 8
jr nz, .asm_8ae4a
ld a, l
- cp $e8
+ cp RuinsofAlphAerodactylChamber_SecondMapHeader & $ff
jr nz, .asm_8ae4a
+
ld de, $0329
- ld b, $1
+ ld b, SET_FLAG
call EventFlagAction
+
scf
- jr .asm_8ae4b
+ jr .done
.asm_8ae4a
and a
-.asm_8ae4b
+.done
pop bc
pop de
ret
; 8ae4e
-INCBIN "baserom.gbc", $8ae4e, $8b170 - $8ae4e
+Function8ae4e: ; 8ae4e
+ push hl
+ push de
+ call GetSecondaryMapHeaderPointer
+ ld a, h
+ cp RuinsofAlphKabutoChamber_SecondMapHeader >> 8
+ jr nz, .done
+ ld a, l
+ cp RuinsofAlphKabutoChamber_SecondMapHeader & $ff
+ jr nz, .done
+
+ ld de, $0327
+ ld b, SET_FLAG
+ call EventFlagAction
+
+.done
+ pop de
+ pop hl
+ ret
+; 8ae68
+
+INCBIN "baserom.gbc", $8ae68, $8b170 - $8ae68
+
SpecialDratini: ; 0x8b170
; if ScriptVar is 0 or 1, change the moveset of the last Dratini in the party.
; 0: give it a special moveset with Extremespeed.
@@ -57965,8 +56362,18 @@
ret
; 8c6f7
-INCBIN "baserom.gbc", $8c6f7, $8c940 - $8c6f7
+INCBIN "baserom.gbc", $8c6f7, $8c7d4 - $8c6f7
+Function8c7d4: ; 8c7d4
+ call WaitSFX
+ ld de, $0053
+ call StartSFX
+ call WaitSFX
+ ret
+; 8c7e1
+
+INCBIN "baserom.gbc", $8c7e1, $8c940 - $8c7e1
+
Function8c940: ; 8c940
ld a, e
and $1
@@ -58025,7 +56432,7 @@
INCBIN "baserom.gbc", $8ca1b, $8cf4f - $8ca1b
Function8cf4f: ; 8cf4f
- call $3238
+ call Function3238
ret
; 8cf53
@@ -60724,14 +59131,14 @@
ld de, EngineBuffer1
ld bc, 2
call FarCopyBytes
- ld a, $3
+ ld a, 3
scf
ret
; 96a29
.two ; 96a29
- call $3674
- ld a, $2
+ call Function3674
+ ld a, 2
scf
ret
; 96a30
@@ -64389,7 +62796,7 @@
call WhiteBGMap
call ClearTileMap
call ClearSprites
- call $0e58
+ call Functione58
ld hl, Options
ld a, [hl]
push af
@@ -65609,7 +64016,7 @@
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $c4e7
+ hlcoord 11, 3
call PlaceString
and a
ret
@@ -65683,7 +64090,7 @@
ld de, .Off
.asm_e4390
- ld hl, $c50f
+ hlcoord 11, 5
call PlaceString
and a
ret
@@ -65726,7 +64133,7 @@
ld de, .Set
.asm_e43c9
- ld hl, $c537
+ hlcoord 11, 7
call PlaceString
and a
ret
@@ -65776,7 +64183,7 @@
ld de, .Stereo
.asm_e440e
- ld hl, $c55f
+ hlcoord 11, 9
call PlaceString
and a
ret
@@ -65828,7 +64235,7 @@
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, $c587
+ hlcoord 11, 11
call PlaceString
and a
ret
@@ -65919,7 +64326,7 @@
ld de, .On
.asm_e44ea
- ld hl, $c5af
+ hlcoord 11, 13
call PlaceString
and a
ret
@@ -66027,7 +64434,7 @@
; e455c
Functione455c: ; e455c
- ld hl, $c4b5
+ hlcoord 1, 1
ld de, $0014
ld c, $10
.asm_e4564
@@ -66035,7 +64442,7 @@
add hl, de
dec c
jr nz, .asm_e4564
- ld hl, $c4c9
+ hlcoord 1, 2
ld bc, $0028
ld a, [$cf63]
call AddNTimes
@@ -68548,7 +66955,7 @@
ld [CurItem], a
ld a, $1
ld [$d10c], a
- ld hl, $d8f1
+ ld hl, PCItems
call Function2f66
ret
; fd0eb
@@ -72096,7 +70503,7 @@
add hl, de
dec c
jr nz, .asm_117c71 ; 0x117c7b $f4
- call $04b6
+ call Function4b6
pop af
ld [rSVBK], a
ld a, $80
@@ -74115,15 +72522,20 @@
Function1de28a: ; 1de28a
ld hl, DudeAutoInput_A
- jr .asm_1de299
+ jr Function1de299
+; 1de28f
+Function1de28f: ; 1de28f
ld hl, DudeAutoInput_RightA
- jr .asm_1de299
+ jr Function1de299
+; 1de294
+Function1de294: ; 1de294
ld hl, DudeAutoInput_DownA
- jr .asm_1de299
+ jr Function1de299
+; 1de299
-.asm_1de299
+Function1de299: ; 1de299
ld a, $77
call StartAutoInput
ret
@@ -74130,7 +72542,6 @@
; 1de29f
-
DudeAutoInput_A: ; 1de29f
db NO_INPUT, $50
db BUTTON_A, $00
@@ -74250,359 +72661,8 @@
SECTION "bank7E",ROMX,BANK[$7E]
-Function1f8000: ; 1f8000
- ld a, [rSVBK]
- push af
- ld a, $3
- ld [rSVBK], a
- xor a
- ld hl, $d100
- ld bc, $00e0
- call ByteFill
- ld a, $ff
- ld [$d10c], a
- ld [$d147], a
- ld [$d182], a
- ld de, $d100
- ld a, [hRandomAdd]
- ld b, a
-.asm_1f8022
- call RNG
- ld a, [hRandomAdd]
- add b
- ld b, a
- and $1f
- cp $15
- jr nc, .asm_1f8022
- ld b, a
- ld a, $1
- call GetSRAMBank
- ld c, $7
- ld hl, $be48
-.asm_1f803a
- ld a, [hli]
- cp b
- jr z, .asm_1f8022
- dec c
- jr nz, .asm_1f803a
- ld hl, $be48
- ld a, [$be46]
- ld c, a
- ld a, b
- ld b, 0
- add hl, bc
- ld [hl], a
- call CloseSRAM
- push af
- ld hl, BattleTowerTrainers
- ld bc, 11
- call AddNTimes
- ld bc, 11
- call CopyBytes
- call Function1f8081
- pop af
- ld hl, Function1f8000
- ld bc, $0024
- call AddNTimes
- ld bc, $0024
-.asm_1f8070
- ld a, $7c
- call GetFarByte
- ld [de], a
- inc hl
- inc de
- dec bc
- ld a, b
- or c
- jr nz, .asm_1f8070
- pop af
- ld [rSVBK], a
- ret
-; 1f8081
-
-Function1f8081: ; 1f8081
- ld c, $3
- push bc
- ld a, $1
- call GetSRAMBank
-.asm_1f8089
- ld a, [$d800]
- dec a
- ld hl, BattleTowerMons
- ld bc, BattleTowerMons2 - BattleTowerMons1
- call AddNTimes
-
- ld a, [hRandomAdd]
- ld b, a
-.asm_1f8099
- call RNG
- ld a, [hRandomAdd]
- add b
- ld b, a
- and $1f
- cp (BattleTowerMons2 - BattleTowerMons1) / ($3b)
- jr nc, .asm_1f8099
-
- ld bc, $3b
- call AddNTimes
- ld a, [hli]
- ld b, a
- ld a, [hld]
- ld c, a
- ld a, [$d10b]
- cp b
- jr z, .asm_1f8089
- ld a, [$d10c]
- cp c
- jr z, .asm_1f8089
- ld a, [$d146]
- cp b
- jr z, .asm_1f8089
- ld a, [$d147]
- cp c
- jr z, .asm_1f8089
- ld a, [$d181]
- cp b
- jr z, .asm_1f8089
- ld a, [$d182]
- cp c
- jr z, .asm_1f8089
- ld a, [$be51]
- cp b
- jr z, .asm_1f8089
- ld a, [$be52]
- cp b
- jr z, .asm_1f8089
- ld a, [$be53]
- cp b
- jr z, .asm_1f8089
- ld a, [$be54]
- cp b
- jr z, .asm_1f8089
- ld a, [$be55]
- cp b
- jr z, .asm_1f8089
- ld a, [$be56]
- cp b
- jr z, .asm_1f8089
-
- ld bc, $3b
- call CopyBytes
- ld a, [$d265]
- push af
- push de
- ld hl, -$3b
- add hl, de
- ld a, [hl]
- ld [$d265], a
- ld bc, $0030
- add hl, bc
- push hl
- call GetPokemonName
- ld h, d
- ld l, e
- pop de
- ld bc, $000b
- call CopyBytes
- pop de
- pop af
- ld [$d265], a
- pop bc
- dec c
- jp nz, $4083
- ld a, [$be51]
- ld [$be54], a
- ld a, [$be52]
- ld [$be55], a
- ld a, [$be53]
- ld [$be56], a
- ld a, [$d10b]
- ld [$be51], a
- ld a, [$d146]
- ld [$be52], a
- ld a, [$d181]
- ld [$be53], a
- call CloseSRAM
- ret
-; 1f814e
-
-BattleTowerTrainers: ; 1f814e
- db "HANSON@@@@", FISHER
- db "SAWYER@@@@", POKEMANIAC
- db "MASUDA@@@@", GUITARIST
- db "NICKEL@@@@", SCIENTIST
- db "OLSON@@@@@", POKEFANM
- db "ZABOROWSKI", LASS
- db "WRIGHT@@@@", YOUNGSTER
- db "ALEXANDER@", HIKER
- db "KAWAKAMI@@", TEACHER
- db "BICKETT@@@", POKEFANM
- db "SAITO@@@@@", KIMONO_GIRL
- db "CRAWFORD@@", BOARDER
- db "DIAZ@@@@@@", PICNICKER
- db "ERICKSON@@", BIKER
- db "FAIRFIELD@", JUGGLER
- db "HUNTER@@@@", POKEFANF
- db "HILL@@@@@@", FIREBREATHER
- db "JAVIER@@@@", SWIMMERF
- db "KAUFMAN@@@", SWIMMERM
- db "LANCASTER@", SKIER
- db "McMAHILL@@", CAMPER
- db "OBRIEN@@@@", GENTLEMAN
- db "FROST@@@@@", BEAUTY
- db "MORSE@@@@@", SUPER_NERD
- db "YUFUNE@@@@", BLACKBELT_T
- db "RAJAN@@@@@", COOLTRAINERF
- db "RODRIGUEZ@", OFFICER
- db "SANTIAGO@@", PSYCHIC_T
- db "STOCK@@@@@", POKEFANM
- db "THURMAN@@@", SCIENTIST
- db "VALENTINO@", BEAUTY
- db "WAGNER@@@@", CAMPER
- db "YATES@@@@@", BIRD_KEEPER
- db "ANDREWS@@@", PICNICKER
- db "BAHN@@@@@@", POKEMANIAC
- db "MORI@@@@@@", SCIENTIST
- db "BUCKMAN@@@", SAGE
- db "COBB@@@@@@", SCHOOLBOY
- db "HUGHES@@@@", FISHER
- db "ARITA@@@@@", KIMONO_GIRL
- db "EASTON@@@@", PSYCHIC_T
- db "FREEMAN@@@", CAMPER
- db "GIESE@@@@@", LASS
- db "HATCHER@@@", GENTLEMAN
- db "JACKSON@@@", POKEFANF
- db "KAHN@@@@@@", POKEMANIAC
- db "LEONG@@@@@", YOUNGSTER
- db "MARINO@@@@", TEACHER
- db "NEWMAN@@@@", SAILOR
- db "NGUYEN@@@@", BLACKBELT_T
- db "OGDEN@@@@@", SUPER_NERD
- db "PARK@@@@@@", COOLTRAINERF
- db "RAINE@@@@@", SWIMMERM
- db "SELLS@@@@@", BIRD_KEEPER
- db "ROCKWELL@@", BOARDER
- db "THORNTON@@", LASS
- db "TURNER@@@@", OFFICER
- db "VAN DYKE@@", SKIER
- db "WALKER@@@@", SCHOOLBOY
- db "MEYER@@@@@", SWIMMERF
- db "JOHNSON@@@", YOUNGSTER
- db "ADAMS@@@@@", GUITARIST
- db "SMITH@@@@@", BUG_CATCHER
- db "TAJIRI@@@@", BUG_CATCHER
- db "BAKER@@@@@", POKEMANIAC
- db "COLLINS@@@", SCIENTIST
- db "SMART@@@@@", SUPER_NERD
- db "DYKSTRA@@@", SWIMMERF
- db "EATON@@@@@", BIKER
- db "WONG@@@@@@", FIREBREATHER
-; 1f8450
-
-BattleTowerMons: ; 1f8450
- INCLUDE "stats/battle_tower.asm"
-; 1fb4b6
-
-
-GiveOddEgg: ; 1fb4b6
-
-; Figure out which egg to give.
- call RNG
- ld hl, .Probabilities
- ld c, 0
- ld b, c
-.next
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- ld a, d
- cp $ff
- jr nz, .first
- ld a, e
- cp $ff
- jr z, .done
-.first
- ld a, [hRandomSub]
- cp d
- jr c, .done
- jr z, .second
- jr .good
-.second
- ld a, [hRandomAdd]
- cp e
- jr c, .done
- jr z, .done
-.good
- inc bc
- jr .next
-.done
-
- ld hl, OddEggs
- ld a, OddEgg2 - OddEgg1
- call AddNTimes
- ld de, EnemyMoveAnimation
- ld bc, $0046
- call CopyBytes
- ld a, EGG_TICKET
- ld [CurItem], a
- ld a, $1
- ld [$d10c], a
- ld a, $ff
- ld [$d107], a
- ld hl, NumItems
- call Function2f53
- ld a, EGG
- ld [$cd2a], a
- ld a, $29
- ld [$cd20], a
- ld a, $cd
- ld [$cd21], a
- ld a, $8
- ld [$cd22], a
- ld a, $c6
- ld [$cd23], a
-
- ld hl, .Odd
- ld de, $cd2b
- ld bc, $000b
- call CopyBytes
-
- ld a, $2b
- ld [$cd24], a
- ld a, $cd
- ld [$cd25], a
- ld a, $38
- ld [$cd26], a
- ld a, $c6
- ld [$cd27], a
- callba Function11b98f
- ret
-; 1fb546
-
-.Odd
- db "ODD@@@@@@@@@"
-
-.Probabilities
- dw $147a ; 92% -> 8%
- dw $170a ; 91% -> 1%
- dw $3fff ; 75% -> 16%
- dw $47ad ; 72% -> 3%
- dw $70a3 ; 56% -> 16%
- dw $7851 ; 53% -> 3%
- dw $9c28 ; 39% -> 14%
- dw $a147 ; 37% -> 2%
- dw $bae0 ; 27% -> 10%
- dw $bfff ; 25% -> 2%
- dw $deb7 ; 13% -> 12%
- dw $e3d6 ; 11% -> 2%
- dw $fd6f ; 1% -> 10%
- dw $ffff ; 0% -> 1%
-; 1fb56e
-
-OddEggs: ; 1fb56e
- INCLUDE "stats/odd_eggs.asm"
-; 1fb8a8
+INCLUDE "stats/battle_tower.asm"
+INCLUDE "stats/odd_eggs.asm"
SECTION "bank7F",ROMX,BANK[$7F]
--- a/stats/battle_tower.asm
+++ b/stats/battle_tower.asm
@@ -1,4 +1,254 @@
+Function1f8000: ; 1f8000
+ ld a, [rSVBK]
+ push af
+ ld a, $3
+ ld [rSVBK], a
+ xor a
+ ld hl, $d100
+ ld bc, $00e0
+ call ByteFill
+ ld a, $ff
+ ld [$d10c], a
+ ld [$d147], a
+ ld [$d182], a
+ ld de, $d100
+ ld a, [hRandomAdd]
+ ld b, a
+.asm_1f8022
+ call RNG
+ ld a, [hRandomAdd]
+ add b
+ ld b, a
+ and $1f
+ cp $15
+ jr nc, .asm_1f8022
+ ld b, a
+ ld a, $1
+ call GetSRAMBank
+ ld c, $7
+ ld hl, $be48
+.asm_1f803a
+ ld a, [hli]
+ cp b
+ jr z, .asm_1f8022
+ dec c
+ jr nz, .asm_1f803a
+ ld hl, $be48
+ ld a, [$be46]
+ ld c, a
+ ld a, b
+ ld b, 0
+ add hl, bc
+ ld [hl], a
+ call CloseSRAM
+ push af
+ ld hl, BattleTowerTrainers
+ ld bc, 11
+ call AddNTimes
+ ld bc, 11
+ call CopyBytes
+ call Function1f8081
+ pop af
+ ld hl, Function1f8000
+ ld bc, $0024
+ call AddNTimes
+ ld bc, $0024
+.asm_1f8070
+ ld a, $7c
+ call GetFarByte
+ ld [de], a
+ inc hl
+ inc de
+ dec bc
+ ld a, b
+ or c
+ jr nz, .asm_1f8070
+ pop af
+ ld [rSVBK], a
+ ret
+; 1f8081
+Function1f8081: ; 1f8081
+ ld c, $3
+ push bc
+ ld a, $1
+ call GetSRAMBank
+.asm_1f8089
+ ld a, [$d800]
+ dec a
+ ld hl, BattleTowerMons
+ ld bc, BattleTowerMons2 - BattleTowerMons1
+ call AddNTimes
+
+ ld a, [hRandomAdd]
+ ld b, a
+.asm_1f8099
+ call RNG
+ ld a, [hRandomAdd]
+ add b
+ ld b, a
+ and $1f
+ cp (BattleTowerMons2 - BattleTowerMons1) / ($3b)
+ jr nc, .asm_1f8099
+
+ ld bc, $3b
+ call AddNTimes
+ ld a, [hli]
+ ld b, a
+ ld a, [hld]
+ ld c, a
+ ld a, [$d10b]
+ cp b
+ jr z, .asm_1f8089
+ ld a, [$d10c]
+ cp c
+ jr z, .asm_1f8089
+ ld a, [$d146]
+ cp b
+ jr z, .asm_1f8089
+ ld a, [$d147]
+ cp c
+ jr z, .asm_1f8089
+ ld a, [$d181]
+ cp b
+ jr z, .asm_1f8089
+ ld a, [$d182]
+ cp c
+ jr z, .asm_1f8089
+ ld a, [$be51]
+ cp b
+ jr z, .asm_1f8089
+ ld a, [$be52]
+ cp b
+ jr z, .asm_1f8089
+ ld a, [$be53]
+ cp b
+ jr z, .asm_1f8089
+ ld a, [$be54]
+ cp b
+ jr z, .asm_1f8089
+ ld a, [$be55]
+ cp b
+ jr z, .asm_1f8089
+ ld a, [$be56]
+ cp b
+ jr z, .asm_1f8089
+
+ ld bc, $3b
+ call CopyBytes
+ ld a, [$d265]
+ push af
+ push de
+ ld hl, -$3b
+ add hl, de
+ ld a, [hl]
+ ld [$d265], a
+ ld bc, $0030
+ add hl, bc
+ push hl
+ call GetPokemonName
+ ld h, d
+ ld l, e
+ pop de
+ ld bc, $000b
+ call CopyBytes
+ pop de
+ pop af
+ ld [$d265], a
+ pop bc
+ dec c
+ jp nz, $4083
+ ld a, [$be51]
+ ld [$be54], a
+ ld a, [$be52]
+ ld [$be55], a
+ ld a, [$be53]
+ ld [$be56], a
+ ld a, [$d10b]
+ ld [$be51], a
+ ld a, [$d146]
+ ld [$be52], a
+ ld a, [$d181]
+ ld [$be53], a
+ call CloseSRAM
+ ret
+; 1f814e
+
+BattleTowerTrainers: ; 1f814e
+ db "HANSON@@@@", FISHER
+ db "SAWYER@@@@", POKEMANIAC
+ db "MASUDA@@@@", GUITARIST
+ db "NICKEL@@@@", SCIENTIST
+ db "OLSON@@@@@", POKEFANM
+ db "ZABOROWSKI", LASS
+ db "WRIGHT@@@@", YOUNGSTER
+ db "ALEXANDER@", HIKER
+ db "KAWAKAMI@@", TEACHER
+ db "BICKETT@@@", POKEFANM
+ db "SAITO@@@@@", KIMONO_GIRL
+ db "CRAWFORD@@", BOARDER
+ db "DIAZ@@@@@@", PICNICKER
+ db "ERICKSON@@", BIKER
+ db "FAIRFIELD@", JUGGLER
+ db "HUNTER@@@@", POKEFANF
+ db "HILL@@@@@@", FIREBREATHER
+ db "JAVIER@@@@", SWIMMERF
+ db "KAUFMAN@@@", SWIMMERM
+ db "LANCASTER@", SKIER
+ db "McMAHILL@@", CAMPER
+ db "OBRIEN@@@@", GENTLEMAN
+ db "FROST@@@@@", BEAUTY
+ db "MORSE@@@@@", SUPER_NERD
+ db "YUFUNE@@@@", BLACKBELT_T
+ db "RAJAN@@@@@", COOLTRAINERF
+ db "RODRIGUEZ@", OFFICER
+ db "SANTIAGO@@", PSYCHIC_T
+ db "STOCK@@@@@", POKEFANM
+ db "THURMAN@@@", SCIENTIST
+ db "VALENTINO@", BEAUTY
+ db "WAGNER@@@@", CAMPER
+ db "YATES@@@@@", BIRD_KEEPER
+ db "ANDREWS@@@", PICNICKER
+ db "BAHN@@@@@@", POKEMANIAC
+ db "MORI@@@@@@", SCIENTIST
+ db "BUCKMAN@@@", SAGE
+ db "COBB@@@@@@", SCHOOLBOY
+ db "HUGHES@@@@", FISHER
+ db "ARITA@@@@@", KIMONO_GIRL
+ db "EASTON@@@@", PSYCHIC_T
+ db "FREEMAN@@@", CAMPER
+ db "GIESE@@@@@", LASS
+ db "HATCHER@@@", GENTLEMAN
+ db "JACKSON@@@", POKEFANF
+ db "KAHN@@@@@@", POKEMANIAC
+ db "LEONG@@@@@", YOUNGSTER
+ db "MARINO@@@@", TEACHER
+ db "NEWMAN@@@@", SAILOR
+ db "NGUYEN@@@@", BLACKBELT_T
+ db "OGDEN@@@@@", SUPER_NERD
+ db "PARK@@@@@@", COOLTRAINERF
+ db "RAINE@@@@@", SWIMMERM
+ db "SELLS@@@@@", BIRD_KEEPER
+ db "ROCKWELL@@", BOARDER
+ db "THORNTON@@", LASS
+ db "TURNER@@@@", OFFICER
+ db "VAN DYKE@@", SKIER
+ db "WALKER@@@@", SCHOOLBOY
+ db "MEYER@@@@@", SWIMMERF
+ db "JOHNSON@@@", YOUNGSTER
+ db "ADAMS@@@@@", GUITARIST
+ db "SMITH@@@@@", BUG_CATCHER
+ db "TAJIRI@@@@", BUG_CATCHER
+ db "BAKER@@@@@", POKEMANIAC
+ db "COLLINS@@@", SCIENTIST
+ db "SMART@@@@@", SUPER_NERD
+ db "DYKSTRA@@@", SWIMMERF
+ db "EATON@@@@@", BIKER
+ db "WONG@@@@@@", FIREBREATHER
+; 1f8450
+
+
+BattleTowerMons: ; 1f8450
BattleTowerMons1:
--- a/stats/odd_eggs.asm
+++ b/stats/odd_eggs.asm
@@ -1,3 +1,102 @@
+GiveOddEgg: ; 1fb4b6
+
+; Figure out which egg to give.
+ call RNG
+ ld hl, .Probabilities
+ ld c, 0
+ ld b, c
+.next
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, d
+ cp $ff
+ jr nz, .first
+ ld a, e
+ cp $ff
+ jr z, .done
+.first
+ ld a, [hRandomSub]
+ cp d
+ jr c, .done
+ jr z, .second
+ jr .good
+.second
+ ld a, [hRandomAdd]
+ cp e
+ jr c, .done
+ jr z, .done
+.good
+ inc bc
+ jr .next
+.done
+
+ ld hl, OddEggs
+ ld a, OddEgg2 - OddEgg1
+ call AddNTimes
+ ld de, EnemyMoveAnimation
+ ld bc, $0046
+ call CopyBytes
+ ld a, EGG_TICKET
+ ld [CurItem], a
+ ld a, $1
+ ld [$d10c], a
+ ld a, $ff
+ ld [$d107], a
+ ld hl, NumItems
+ call Function2f53
+ ld a, EGG
+ ld [$cd2a], a
+ ld a, $29
+ ld [$cd20], a
+ ld a, $cd
+ ld [$cd21], a
+ ld a, $8
+ ld [$cd22], a
+ ld a, $c6
+ ld [$cd23], a
+
+ ld hl, .Odd
+ ld de, $cd2b
+ ld bc, $000b
+ call CopyBytes
+
+ ld a, $2b
+ ld [$cd24], a
+ ld a, $cd
+ ld [$cd25], a
+ ld a, $38
+ ld [$cd26], a
+ ld a, $c6
+ ld [$cd27], a
+ callba Function11b98f
+ ret
+; 1fb546
+
+.Odd
+ db "ODD@@@@@@@@@"
+
+.Probabilities
+ dw $147a ; 92% -> 8%
+ dw $170a ; 91% -> 1%
+ dw $3fff ; 75% -> 16%
+ dw $47ad ; 72% -> 3%
+ dw $70a3 ; 56% -> 16%
+ dw $7851 ; 53% -> 3%
+ dw $9c28 ; 39% -> 14%
+ dw $a147 ; 37% -> 2%
+ dw $bae0 ; 27% -> 10%
+ dw $bfff ; 25% -> 2%
+ dw $deb7 ; 13% -> 12%
+ dw $e3d6 ; 11% -> 2%
+ dw $fd6f ; 1% -> 10%
+ dw $ffff ; 0% -> 1%
+; 1fb56e
+
+
+OddEggs: ; 1fb56e
+
OddEgg1:
db PICHU
db NO_ITEM
--- a/wram.asm
+++ b/wram.asm
@@ -13,9 +13,9 @@
SECTION "WRAMBank0",WRAM0[$c000]
-SECTION "stack",WRAM0[$c000]
- ds $100
-Stack: ; c100
+SECTION "stack",WRAM0[$c0ff]
+Stack: ; c0ff
+ ds -$100
SECTION "audio",WRAM0[$c100]
@@ -1642,8 +1642,8 @@
; $11 right
ds 1
+ ds 2
-SECTION "MapEngine",WRAMX[$d4e1],BANK[1]
PlayerAction: ; d4e1
; 1 standing
; 2 walking
@@ -1742,7 +1742,12 @@
Balls: ; d8d8
ds 25
BallsEnd
-
+
+PCItems: ; d8f1
+ ds 101
+PCItemsEnd
+
+
SECTION "overworld",WRAMX[$d95b],BANK[1]
WhichRegisteredItem: ; d95b
REGISTERED_POCKET EQU %11000000