From be0af35e3f98d2d546571eca85df80cfa8133a3d Mon Sep 17 00:00:00 2001 From: yenatch Date: Fri, 26 Jul 2013 22:19:26 -0400 Subject: over a million hours in gedit --- main.asm | 29635 ++++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 22477 insertions(+), 7158 deletions(-) diff --git a/main.asm b/main.asm index e7ea79f22..413bd04e5 100644 --- a/main.asm +++ b/main.asm @@ -276,7 +276,39 @@ Function485: ; 485 ret ; 48c -INCBIN "baserom.gbc", $48c, $52f - $48c +INCBIN "baserom.gbc", $48c, $4b6 - $48c + + +Function4b6: ; 4b6 + ld a, [hCGB] + and a + jr z, .asm_4c2 + ld hl, $0526 + ld b, $3 + jr .asm_4c7 + +.asm_4c2 + ld hl, $053e + ld b, $3 + +.asm_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, .asm_4c7 + ret +; 4dd + +INCBIN "baserom.gbc", $4dd, $52f - $4dd IncGradGBPalTable_01: ; 52f @@ -314,7 +346,31 @@ IncGradGBPalTable_01: ; 52f ; 547 -INCBIN "baserom.gbc", $547, $568 - $547 +INCBIN "baserom.gbc", $547, $552 - $547 + + +Function552: ; 552 + push af + ld a, [hLCDStatCustom] + and a + jr z, .asm_566 + push bc + ld a, [rLY] + ld c, a + ld b, $d1 + ld a, [bc] + ld b, a + ld a, [hLCDStatCustom] + ld c, a + ld a, b + ld [$ff00+c], a + pop bc + +.asm_566 + pop af + reti +; 568 + DisableLCD: ; 568 @@ -552,7 +608,29 @@ FixTime: ; 61d ret ; 658 -INCBIN "baserom.gbc", $658, $67e - $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 @@ -635,13 +713,385 @@ Function6d3: ; 6d3 ret ; 6e3 -INCBIN "baserom.gbc", $6e3, $92e - $6e3 +Function6e3: ; 6e3 + ld a, $0 + call GetSRAMBank + ld a, [$ac60] + call CloseSRAM + ret +; 6ef + + + +Function6ef: ; 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 [$ffce], a + ld a, [$ffcd] + ld [rSB], a + ld a, [$ffcb] + cp $2 + jr z, .asm_752 + ld a, $0 + ld [rSC], a + ld a, $80 + ld [rSC], a + jr .asm_752 + +.asm_71c + call $3e80 + jr .asm_75a + +.asm_721 + call $2057 + jr .asm_75a + +.asm_726 + ld a, [rSB] + cp $1 + jr z, .asm_730 + cp $2 + jr nz, .asm_752 + +.asm_730 + ld [$ffce], 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 + ld [rSC], a + ld a, $80 + 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 [$ffcd], 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 [$ffcd], a + call $078a + 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 $082b + jr z, .asm_7c0 + call $0825 + push hl + ld hl, $cf5c + inc [hl] + jr nz, .asm_7b7 + dec hl + inc [hl] + +.asm_7b7 + pop hl + call $082b + jr nz, .asm_79b + jp $0833 + +.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, [$ffce] + cp $fe + ret nz + call $082b + 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 $082b + jr z, .asm_833 + +.asm_813 + ld a, [rIE] + and $f + cp $8 + ld a, $fe + ret z + ld a, [hl] + ld [$ffcd], a + call DelayFrame + jp $078a + + ld a, $f +.asm_827 + dec a + jr nz, .asm_827 + ret + + push hl + ld hl, $cf5b + ld a, [hli] + or [hl] + pop hl + ret + +.asm_833 + dec a + ld [$cf5b], a + ld [$cf5c], a + ret +; 83b + +INCBIN "baserom.gbc", $83b, $87d - $83b + + +Function87d: ; 87d + ld a, $ff + ld [$cf52], a +.asm_882 + call $08c1 + call DelayFrame + call $082b + 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 $0833 + +.asm_89d + pop hl + +.asm_89e + ld a, [$cf52] + inc a + jr z, .asm_882 + ld b, $a +.asm_8a6 + call DelayFrame + call $08c1 + dec b + jr nz, .asm_8a6 + ld b, $a +.asm_8b1 + call DelayFrame + call $0908 + 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 $08f3 + ld a, [$cf56] + add b + ld [$ffcd], 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 $08f3 + pop bc + ret +; 8f3 + +Function8f3: ; 8f3 + ld a, [$ffce] + ld [$cf51], a + and $f0 + cp b + ret nz + xor a + ld [$ffce], a + ld a, [$cf51] + and $f + ld [$cf52], a + ret +; 908 + +Function908: ; 908 + xor a + ld [$ffcd], a + ld a, [$ffcb] + cp $2 + ret nz + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret +; 919 + +INCBIN "baserom.gbc", $919, $92e - $919 INCLUDE "engine/joypad.asm" -INCBIN "baserom.gbc", $a1b, $a57 - $a1b +INCBIN "baserom.gbc", $a1b, $a36 - $a1b + + +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 $0a36 + pop af + ld [hOAMUpdate], a + ret +; a57 + Functiona57: ; a57 @@ -1328,7 +1778,30 @@ CopyPals: ; d50 ; d79 -INCBIN "baserom.gbc", $d79, $dc9 - $d79 +INCBIN "baserom.gbc", $d79, $d90 - $d79 + + +Functiond90: ; d90 + ret +; d91 + +INCBIN "baserom.gbc", $d91, $db1 - $d91 + + +Functiondb1: ; db1 + ld a, [hROMBank] + push af + ld a, $13 + rst Bankswitch + + call $4000 + pop af + rst Bankswitch + + ret +; dbd + +INCBIN "baserom.gbc", $dbd, $dc9 - $dbd Functiondc9: ; dc9 @@ -1377,7 +1850,32 @@ Functiondef: ; def ret ; dfd -INCBIN "baserom.gbc", $dfd, $e5f - $dfd +INCBIN "baserom.gbc", $dfd, $e4a - $dfd + + +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 @@ -1789,7 +2287,15 @@ PrintTextBoxText: ; 1065 ; 106c -INCBIN "baserom.gbc", $106c, $1078 - $106c +Function106c: ; 106c + push hl + call SpeechTextBox + call $1ad2 + call $321c + pop hl + ret +; 1078 + PlaceString: ; 1078 @@ -2350,7 +2856,47 @@ Function13cd: ; 13cd ret ; 13d4 -INCBIN "baserom.gbc", $13d4, $15d8 - $13d4 +INCBIN "baserom.gbc", $13d4, $13e5 - $13d4 + + +Function13e5: ; 13e5 + ld a, [$cfcf] + push af + set 1, a + ld [$cfcf], a + call $13f6 + pop af + ld [$cfcf], a + ret +; 13f6 + +Function13f6: ; 13f6 +.asm_13f6 + ld a, [hli] + cp $50 + ret z + call $13ff + jr .asm_13f6 +; 13ff + +Function13ff: ; 13ff + push hl + push bc + ld c, a + ld b, $0 + ld hl, $1410 + add hl, bc + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + pop bc + pop hl + push de + ret +; 1410 + +INCBIN "baserom.gbc", $1410, $15d8 - $1410 DMATransfer: ; 15d8 ; DMA transfer @@ -2961,7 +3507,56 @@ SafeTileAnimation: ; 17d3 ; 17ff -INCBIN "baserom.gbc", $17ff, $185d - $17ff +Function17ff: ; 17ff + push hl + push de + push bc + ld c, a + callba GetSpritePalette + ld a, c + pop bc + pop de + pop hl + ret +; 180e + +Function180e: ; 180e + push hl + push bc + ld hl, $d156 + ld c, $1f + ld b, a + ld a, [hConnectionStripLength] + cp $0 + jr z, .asm_182b + ld a, b +.asm_181d + cp [hl] + jr z, .asm_1830 + inc hl + inc hl + dec c + jr nz, .asm_181d + ld a, [$d155] + scf + jr .asm_1833 + +.asm_182b + ld a, [$d155] + jr .asm_1833 + +.asm_1830 + inc hl + xor a + ld a, [hl] + +.asm_1833 + pop bc + pop hl + ret +; 1836 + +INCBIN "baserom.gbc", $1836, $185d - $1836 GetTileType: ; 185d @@ -3078,7 +3673,103 @@ GetMapObject: ; 18d2 ; 18de -INCBIN "baserom.gbc", $18de, $1a13 - $18de +Function18de: ; 18de + ld [hConnectionStripLength], a + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_18f3 + ld [hConnectedMapWidth], a + call Function1ae5 + and a + ret + +.asm_18f3 + scf + ret +; 18f5 + +INCBIN "baserom.gbc", $18f5, $1956 - $18f5 + + +Function1956: ; 1956 + ld [hConnectionStripLength], a + call $271e + ld a, [hConnectionStripLength] + call GetMapObject + ld a, $2 + ld hl, $40e7 + rst FarCall + ret +; 1967 + +Function1967: ; 1967 + ld [hConnectionStripLength], a + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + ret z + ld [hl], $ff + push af + call $1985 + pop af + call Function1ae5 + callba Function4357 + ret +; 1985 + +Function1985: ; 1985 + ld hl, $d4cd + cp [hl] + jr z, .asm_1990 + ld hl, $d4ce + cp [hl] + ret nz + +.asm_1990 + callba Function581f + ld a, $ff + ld [$d4cd], a + ld [$d4ce], a + ret +; 199f + +Function199f: ; 199f + call $1967 + call $2712 + ret +; 19a6 + +INCBIN "baserom.gbc", $19a6, $19e9 - $19a6 + + +Function19e9: ; 19e9 + ld [$c2e2], a + ld a, [hROMBank] + ld [$c2e3], a + ld a, l + ld [$c2e4], a + ld a, h + ld [$c2e5], a + ld a, [$c2e2] + call $18de + ret c + ld hl, $0003 + add hl, bc + ld [hl], $14 + ld hl, $0009 + add hl, bc + ld [hl], $0 + ld hl, VramState + set 7, [hl] + and a + ret +; 1a13 + Function1a13: ; 1a13 @@ -3220,7 +3911,18 @@ Function1a71: ; 1a71 ret ; 1aae -INCBIN "baserom.gbc", $1aae, $1ae5 - $1aae +INCBIN "baserom.gbc", $1aae, $1ad2 - $1aae + + +Function1ad2: ; 1ad2 + ld a, [VramState] + bit 0, a + ret z + callba Function55e0 + callba Function5920 + ret +; 1ae5 + Function1ae5: ; 1ae5 @@ -3252,7 +3954,83 @@ GetSpriteDirection: ; 1b07 ; 1b0f -INCBIN "baserom.gbc", $1b0f, $1c07 - $1b0f +INCBIN "baserom.gbc", $1b0f, $1bb1 - $1b0f + + +Function1bb1: ; 1bb1 + push hl + push bc + ld hl, $cfa1 + ld b, $8 +.asm_1bb8 + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_1bb8 + ld a, $1 + ld [hli], a + ld [hli], a + xor a + ld [hli], a + ld [hli], a + ld [hli], a + pop bc + pop hl + ret +; 1bc9 + +Function1bc9: ; 1bc9 + ld hl, $41a8 + ld a, $9 + rst FarCall + call $1bdd + ret +; 1bd3 + +Function1bd3: ; 1bd3 + ld hl, $41ab + ld a, $9 + rst FarCall + call $1bdd + ret +; 1bdd + +Function1bdd: ; 1bdd + push bc + push af + ld a, [$ffa9] + and $f0 + ld b, a + ld a, [hJoyPressed] + and $f + or b + ld b, a + pop af + ld a, b + pop bc + ret +; 1bee + +Function1bee: ; 1bee + ld hl, $cfac + ld a, [hli] + ld h, [hl] + ld l, a + ld [hl], $ec + ret +; 1bf7 + +INCBIN "baserom.gbc", $1bf7, $1c00 - $1bf7 + + +Function1c00: ; 1c00 + ld hl, $4374 + ld a, $9 + rst FarCall + ret +; 1c07 + Function1c07: ; 0x1c07 @@ -3330,7 +4108,169 @@ Function1c53: ; 0x1c53 ret ; 0x1c66 -INCBIN "baserom.gbc", $1c66, $1d35 - $1c66 +Function1c66: ; 1c66 + push hl + push de + push bc + push af + ld hl, $cf86 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $cf91 + ld bc, $0010 + call CopyBytes + pop af + pop bc + pop de + pop hl + ret +; 1c7e + +Function1c7e: ; 1c7e + ld hl, $cf71 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ret +; 1c89 + +Function1c89: ; 1c89 + call $1c66 + ld hl, $cf86 + ld e, [hl] + inc hl + ld d, [hl] + call $1cc6 + call $1d05 + inc de + ld a, [de] + inc de + ld b, a +.asm_1c9c + push bc + call PlaceString + inc de + ld bc, $0028 + add hl, bc + pop bc + dec b + jr nz, .asm_1c9c + ld a, [$cf91] + bit 4, a + ret z + call $1cfd + ld a, [de] + ld c, a + inc de + ld b, $0 + add hl, bc + jp PlaceString +; 1cbb + +Function1cbb: ; 1cbb + call $1cfd + call Function1c53 + dec b + dec c + jp TextBox +; 1cc6 + +Function1cc6: ; 1cc6 + ld a, [$cf82] + ld b, a + inc b + ld a, [$cf83] + ld c, a + inc c + ld a, [$cf91] + bit 6, a + jr nz, .asm_1cd8 + inc b + +.asm_1cd8 + ld a, [$cf91] + bit 7, a + jr z, .asm_1ce0 + inc c + +.asm_1ce0 + ret +; 1ce1 + +Function1ce1: ; 1ce1 + call $1cfd + ld bc, $0015 + add hl, bc + call Function1c53 + dec b + dec c + call ClearBox + ret +; 1cf1 + +Function1cf1: ; 1cf1 + call $1cfd + call Function1c53 + inc c + inc b + call ClearBox + ret +; 1cfd + +INCBIN "baserom.gbc", $1cfd, $1d05 - $1cfd + + +Function1d05: ; 1d05 + xor a + ld h, a + ld l, b + ld a, c + ld b, h + ld c, l + add hl, hl + add hl, hl + add hl, bc + add hl, hl + add hl, hl + ld c, a + xor a + ld b, a + add hl, bc + ld bc, TileMap + add hl, bc + ret +; 1d19 + +Function1d19: ; 1d19 + ld a, [$cf83] + ld c, a + ld a, [$cf82] + ld b, a + xor a + ld h, a + ld l, b + ld a, c + ld b, h + ld c, l + add hl, hl + add hl, hl + add hl, bc + add hl, hl + add hl, hl + ld c, a + xor a + ld b, a + add hl, bc + ld bc, AttrMap + add hl, bc + ret +; 1d35 + Function1d35: ; 0x1d35 call Function1d3c @@ -3346,7 +4286,42 @@ Function1d3c: ; 0x1d3c ret ; 0x1d4b -INCBIN "baserom.gbc", $1d4b, $1d81 - $1d4b +INCBIN "baserom.gbc", $1d4b, $1d4f - $1d4b + + +Function1d4f: ; 1d4f + push hl + call $1d58 + pop hl + jp PrintText +; 1d57 + +INCBIN "baserom.gbc", $1d57, $1d58 - $1d57 + + +Function1d58: ; 1d58 + ld hl, $1d5f + call Function1d35 + ret +; 1d5f + +INCBIN "baserom.gbc", $1d5f, $1d6e - $1d5f + + +Function1d6e: ; 1d6e + ld hl, $1d75 + call Function1d35 + ret +; 1d75 + +INCBIN "baserom.gbc", $1d75, $1d7d - $1d75 + + +Function1d7d: ; 1d7d + call Function1c07 + ret +; 1d81 + Function1d81: ; 0x1d81 xor a @@ -3394,7 +4369,99 @@ Function1db8: ; 0x1db8 ret ; 0x1dcf -INCBIN "baserom.gbc", $1dcf, $1e70 - $1dcf +Function1dcf: ; 1dcf + ld bc, $0e07 + jr .asm_1dd9 + + call Function1d35 + jr .asm_1dfe + +.asm_1dd9 + push bc + ld hl, $1e1d + call Function1d3c + pop bc + ld a, b + cp $e + jr nz, .asm_1de9 + ld a, $e + ld b, a + +.asm_1de9 + ld a, b + ld [$cf83], a + add $5 + ld [$cf85], a + ld a, c + ld [$cf82], a + add $4 + ld [$cf84], a + call $1c00 + +.asm_1dfe + call Function1d81 + push af + ld c, $f + call DelayFrames + call Function1c17 + pop af + jr c, .asm_1e16 + ld a, [$cfa9] + cp $2 + jr z, .asm_1e16 + and a + ret + +.asm_1e16 + ld a, $2 + ld [$cfa9], a + scf + ret +; 1e1d + +INCBIN "baserom.gbc", $1e1d, $1e2e - $1e1d + + +Function1e2e: ; 1e2e + call $1e35 + call $1c00 + ret +; 1e35 + +Function1e35: ; 1e35 + push de + call Function1d3c + pop de + ld a, [$cf83] + ld h, a + ld a, [$cf85] + sub h + ld h, a + ld a, d + ld [$cf83], a + add h + ld [$cf85], a + ld a, [$cf82] + ld l, a + ld a, [$cf84] + sub l + ld l, a + ld a, e + ld [$cf82], a + add l + ld [$cf84], a + ret +; 1e5d + +INCBIN "baserom.gbc", $1e5d, $1e6b - $1e5d + + +Function1e6b: ; 1e6b + dec de + call $1ff8 + ret +; 1e70 + SetUpMenu: ; 1e70 call MenuFunc_1e7f ; ??? @@ -3463,7 +4530,20 @@ Function1ff0: ; 1ff0 ret ; 1ff8 -INCBIN "baserom.gbc", $1ff8, $2009 - $1ff8 +Function1ff8: ; 1ff8 + push af + and $3 + jr z, .asm_2007 + ld hl, $cf81 + bit 3, [hl] + jr nz, .asm_2007 + call PlayClickSFX + +.asm_2007 + pop af + ret +; 2009 + PlayClickSFX: ; 2009 push de @@ -3473,7 +4553,22 @@ PlayClickSFX: ; 2009 ret ; 0x2012 -INCBIN "baserom.gbc", $2012, $2063 - $2012 +INCBIN "baserom.gbc", $2012, $2057 - $2012 + + +Function2057: ; 2057 + ld a, [hROMBank] + push af + ld a, $21 + rst Bankswitch + + call $42db + pop af + rst Bankswitch + + ret +; 2063 + AskSerial: ; 2063 ; send out a handshake while serial int is off @@ -3644,7 +4739,356 @@ UpdateGameTimer: ; 20ad ; 210f -INCBIN "baserom.gbc", $210f, $22ee - $210f +INCBIN "baserom.gbc", $210f, $211b - $210f + + +Function211b: ; 211b + push hl + ld hl, $dbf7 + ld a, [hli] + ld h, [hl] + ld l, a + or h + ld a, [hl] + jr nz, .asm_2128 + ld a, $ff + +.asm_2128 + pop hl + ret +; 212a + +INCBIN "baserom.gbc", $212a, $2147 - $212a + + +Function2147: ; 2147 + push bc + ld a, [hROMBank] + push af + ld a, $13 + rst Bankswitch + + ld hl, $501e +.asm_2151 + push hl + ld a, [hli] + cp $ff + jr z, .asm_2167 + cp b + jr nz, .asm_2160 + ld a, [hli] + cp c + jr nz, .asm_2160 + jr .asm_216a + +.asm_2160 + pop hl + ld de, $0004 + add hl, de + jr .asm_2151 + +.asm_2167 + scf + jr .asm_216d + +.asm_216a + ld e, [hl] + inc hl + ld d, [hl] + +.asm_216d + pop hl + pop bc + ld a, b + rst Bankswitch + + pop bc + ret +; 2173 + +Function2173: ; 2173 + call $217a + call $0db1 + ret +; 217a + +Function217a: ; 217a + ld a, [hROMBank] + push af + ld a, [TileSetBlocksBank] + rst Bankswitch + + call $2198 + ld a, $60 + ld hl, TileMap + ld bc, $0168 + call ByteFill + ld a, $13 + rst Bankswitch + + call $515b + pop af + rst Bankswitch + + ret +; 2198 + +Function2198: ; 2198 + ld a, [$d194] + ld e, a + ld a, [$d195] + ld d, a + ld hl, EnemyMoveAnimation + ld b, $5 + push de + push hl + ld c, $6 + push de + push hl + ld a, [de] + and a + jr nz, .asm_21b2 + ld a, [$d19d] + +.asm_21b2 + ld e, l + ld d, h + add a + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld a, [TileSetBlocksAddress] + add l + ld l, a + ld a, [$d1de] + adc h + ld h, a + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, e + add $14 + ld e, a + jr nc, .asm_21d8 + inc d + +.asm_21d8 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, e + add $14 + ld e, a + jr nc, .asm_21eb + inc d + +.asm_21eb + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, e + add $14 + ld e, a + jr nc, .asm_21fe + inc d + +.asm_21fe + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + pop hl + ld de, $0004 + add hl, de + pop de + inc de + dec c + jp nz, $21a9 + pop hl + ld de, $0060 + add hl, de + pop de + ld a, [$d19f] + add $6 + add e + ld e, a + jr nc, .asm_2225 + inc d + +.asm_2225 + dec b + jp nz, $21a5 + ret +; 222a + +INCBIN "baserom.gbc", $222a, $224a - $222a + + +Function224a: ; 224a + call $2252 + ret nc + call $22a7 + ret +; 2252 + +Function2252: ; 2252 + ld a, $5 + ld hl, $499a + rst FarCall + ret nc + ld a, [hROMBank] + push af + call $2c52 + call $2266 + pop de + ld a, d + rst Bankswitch + + ret +; 2266 + +Function2266: ; 2266 + ld a, [MapY] + sub $4 + ld e, a + ld a, [MapX] + sub $4 + ld d, a + ld a, [$dbfb] + and a + ret z + ld c, a + ld hl, $dbfc + ld a, [hli] + ld h, [hl] + ld l, a +.asm_227e + push hl + ld a, [hli] + cp e + jr nz, .asm_2289 + ld a, [hli] + cp d + jr nz, .asm_2289 + jr .asm_2296 + +.asm_2289 + pop hl + ld a, $5 + add l + ld l, a + jr nc, .asm_2291 + inc h + +.asm_2291 + dec c + jr nz, .asm_227e + xor a + ret + +.asm_2296 + pop hl + call $22a3 + ret nc + ld a, [$dbfb] + inc a + sub c + ld c, a + scf + ret +; 22a3 + +Function22a3: ; 22a3 + inc hl + inc hl + scf + ret +; 22a7 + +Function22a7: ; 22a7 + ld a, [hROMBank] + push af + call $2c52 + call $22b4 + pop af + rst Bankswitch + + scf + ret +; 22b4 + +Function22b4: ; 22b4 + push bc + ld hl, $dbfc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, c + dec a + ld bc, $0005 + call AddNTimes + ld bc, $0002 + add hl, bc + ld a, [hli] + cp $ff + jr nz, .asm_22d0 + ld hl, $dcac + ld a, [hli] + +.asm_22d0 + pop bc + ld [$d146], a + ld a, [hli] + ld [$d147], a + ld a, [hli] + ld [$d148], a + ld a, c + ld [$d149], a + ld a, [MapGroup] + ld [$d14a], a + ld a, [MapNumber] + ld [$d14b], a + scf + ret +; 22ee + CheckOutdoorMap: ; 22ee @@ -3682,7 +5126,59 @@ GetMapConnection: ; 23a3 ; 23ac -INCBIN "baserom.gbc", $23ac, $2524 - $23ac +INCBIN "baserom.gbc", $23ac, $24e4 - $23ac + + +Function24e4: ; 24e4 + ld a, [hROMBank] + push af + ld hl, OverworldMap + ld a, [$d19f] + ld [hConnectedMapWidth], a + add $6 + ld [hConnectionStripLength], a + ld c, a + ld b, $0 + add hl, bc + add hl, bc + add hl, bc + ld c, $3 + add hl, bc + ld a, [$d1a0] + rst Bankswitch + + ld a, [$d1a1] + ld e, a + ld a, [$d1a2] + ld d, a + ld a, [$d19e] + ld b, a +.asm_250c + push hl + ld a, [hConnectedMapWidth] + ld c, a +.asm_2510 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_2510 + pop hl + ld a, [hConnectionStripLength] + add l + ld l, a + jr nc, .asm_251e + inc h + +.asm_251e + dec b + jr nz, .asm_250c + pop af + rst Bankswitch + + ret +; 2524 + FillMapConnections: ; 2524 @@ -3861,7 +5357,11 @@ FillEastConnectionStrip: ; 25f6 ; 261b -INCBIN "baserom.gbc", $261b, $261f - $261b +Function261b: ; 261b + ld [$d432], a + ret +; 261f + PushScriptPointer: ; 261f @@ -3881,7 +5381,133 @@ PushScriptPointer: ; 261f ; 2631 -INCBIN "baserom.gbc", $2631, $26d4 - $2631 +INCBIN "baserom.gbc", $2631, $263b - $2631 + + +Function263b: ; 263b + ld b, a + ld a, [hROMBank] + push af + call $2c52 + call $2653 + jr nc, .asm_2650 + call GetMapEventBank + ld b, a + ld d, h + ld e, l + call $2674 + +.asm_2650 + pop af + rst Bankswitch + + ret +; 2653 + +Function2653: ; 2653 + ld a, [$dc0a] + ld c, a + and a + ret z + ld hl, $dc0b + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld de, $0003 +.asm_2664 + ld a, [hl] + cp b + jr z, .asm_266e + add hl, de + dec c + jr nz, .asm_2664 + xor a + ret + +.asm_266e + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + scf + ret +; 2674 + +Function2674: ; 2674 + callba Unknown_0x974f3 + ld a, [ScriptMode] + push af + ld hl, ScriptFlags + ld a, [hl] + push af + set 1, [hl] + callba Function96c56 + callba ScriptEvents + pop af + ld [ScriptFlags], a + pop af + ld [ScriptMode], a + ret +; 269a + +Function269a: ; 269a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + push hl + call SpeechTextBox + call $2e31 + ld a, $1 + ld [hOAMUpdate], a + call $321c + pop hl + call PrintTextBoxText + xor a + ld [hOAMUpdate], a + pop af + rst Bankswitch + + ret +; 26b7 + +Function26b7: ; 26b7 + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call $26c5 + pop af + rst Bankswitch + + ret +; 26c5 + +Function26c5: ; 26c5 + push de + ret +; 26c7 + +Function26c7: ; 26c7 + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, c + call $19e9 + pop hl + ld a, h + rst Bankswitch + + ret +; 26d4 + GetScriptByte: ; 0x26d4 @@ -3928,46 +5554,314 @@ ObjectEventText: ; 0x26f7 -INCBIN "baserom.gbc", $26f7, $2a07 - $26f7 +INCBIN "baserom.gbc", $26f7, $2707 - $26f7 -GetFacingTileCoord: ; 2a07 -; Return map coordinates in (d, e) and tile id in a -; of the tile the player is facing. +Function2707: ; 2707 + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld a, [hl] + ret +; 2712 - ld a, [PlayerDirection] - and %1100 - srl a - srl a - ld l, a - ld h, 0 - add hl, hl - add hl, hl - ld de, .Directions +Function2712: ; 2712 + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e add hl, de + ld [hl], $ff + ret +; 271e - ld d, [hl] - inc hl - ld e, [hl] - inc hl +Function271e: ; 271e + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld [hl], $0 + ret +; 272a + +INCBIN "baserom.gbc", $272a, $2821 - $272a + +Function2821: ; 2821 + ld hl, TileSetAddress ld a, [hli] ld h, [hl] ld l, a - - ld a, [MapX] - add d - ld d, a - ld a, [MapY] - add e + ld a, [TileSetBank] ld e, a - ld a, [hl] - ret - -.Directions - ; x, y - db 0, 1 - dw TileDown + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld a, e + ld de, $d000 + call FarDecompress + ld hl, $d000 + ld de, VTiles2 + ld bc, $0600 + call CopyBytes + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, $d600 + ld de, VTiles2 + ld bc, $0600 + call CopyBytes + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + ld a, [$d199] + cp $1 + jr z, .asm_286f + cp $2 + jr z, .asm_286f + cp $4 + jr z, .asm_286f + jr .asm_2875 + +.asm_286f + ld a, $7 + ld hl, $4000 + rst FarCall + +.asm_2875 + xor a + ld [hTileAnimFrame], a + ret +; 2879 + +Function2879: ; 2879 + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $dcb9 + ld c, $5 + ld b, $6 +.asm_2886 + push bc + push hl +.asm_2888 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_2888 + pop hl + ld a, [$d19f] + add $6 + ld c, a + ld b, $0 + add hl, bc + pop bc + dec c + jr nz, .asm_2886 + ret +; 289d + +INCBIN "baserom.gbc", $289d, $2914 - $289d + + +Function2914: ; 2914 + xor a + ld [TilePermissions], a + call $296c + call $294d + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + call Function2a3c + ld [StandingTile], a + call $29ff + ret nz + ld a, [StandingTile] + and $7 + ld hl, $2945 + add l + ld l, a + ld a, $0 + adc h + ld h, a + ld a, [hl] + ld hl, TilePermissions + or [hl] + ld [hl], a + ret +; 2945 + +INCBIN "baserom.gbc", $2945, $294d - $2945 + + +Function294d: ; 294d + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + push de + inc e + call Function2a3c + ld [TileDown], a + call $298b + pop de + dec e + call Function2a3c + ld [TileUp], a + call $29a8 + ret +; 296c + +Function296c: ; 296c + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + push de + dec d + call Function2a3c + ld [TileLeft], a + call $29e2 + pop de + inc d + call Function2a3c + ld [TileRight], a + call $29c5 + ret +; 298b + +Function298b: ; 298b + call $29ff + ret nz + ld a, [TileDown] + and $7 + cp $2 + jr z, .asm_299f + cp $6 + jr z, .asm_299f + cp $7 + ret nz + +.asm_299f + ld a, [TilePermissions] + or $8 + ld [TilePermissions], a + ret +; 29a8 + +Function29a8: ; 29a8 + call $29ff + ret nz + ld a, [TileUp] + and $7 + cp $3 + jr z, .asm_29bc + cp $4 + jr z, .asm_29bc + cp $5 + ret nz + +.asm_29bc + ld a, [TilePermissions] + or $4 + ld [TilePermissions], a + ret +; 29c5 + +Function29c5: ; 29c5 + call $29ff + ret nz + ld a, [TileRight] + and $7 + cp $1 + jr z, .asm_29d9 + cp $5 + jr z, .asm_29d9 + cp $7 + ret nz + +.asm_29d9 + ld a, [TilePermissions] + or $1 + ld [TilePermissions], a + ret +; 29e2 + +Function29e2: ; 29e2 + call $29ff + ret nz + ld a, [TileLeft] + and $7 + cp $0 + jr z, .asm_29f6 + cp $4 + jr z, .asm_29f6 + cp $6 + ret nz + +.asm_29f6 + ld a, [TilePermissions] + or $2 + ld [TilePermissions], a + ret +; 29ff + +Function29ff: ; 29ff + and $f0 + cp $b0 + ret z + cp $c0 + ret +; 2a07 + + + +GetFacingTileCoord: ; 2a07 +; Return map coordinates in (d, e) and tile id in a +; of the tile the player is facing. + + ld a, [PlayerDirection] + and %1100 + srl a + srl a + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, .Directions + add hl, de + + ld d, [hl] + inc hl + ld e, [hl] + inc hl + + ld a, [hli] + ld h, [hl] + ld l, a + + ld a, [MapX] + add d + ld d, a + ld a, [MapY] + add e + ld e, a + ld a, [hl] + ret + +.Directions + ; x, y + db 0, 1 + dw TileDown db 0, -1 dw TileUp db -1, 0 @@ -4121,7 +6015,34 @@ FadeToMenu: ; 2b29 ; 2b3c -INCBIN "baserom.gbc", $2b3c, $2b74 - $2b3c +Function2b3c: ; 2b3c + call WhiteBGMap + call $2bae + call $1ad2 + call $1d7d + call $0d90 + jr .asm_2b5c + + call WhiteBGMap + call $1d7d + call $2bae + call $1ad2 + call $0d90 + +.asm_2b5c + ld b, $9 + call GetSGBLayout + ld a, $12 + ld hl, $5409 + rst FarCall + call Function3200 + ld a, $23 + ld hl, $4079 + rst FarCall + call $2ee4 + ret +; 2b74 + Function2b74: ; 0x2b74 @@ -4151,7 +6072,36 @@ Function2b74: ; 0x2b74 ret ; 0x2bae -INCBIN "baserom.gbc", $2bae, $2bed-$2bae +Function2bae: ; 2bae + call DisableLCD + call ClearSprites + ld a, $5 + ld hl, $4168 + rst FarCall + call $0e51 + call Functione5f + ld a, [hROMBank] + push af + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call $2c24 + ld a, $23 + ld hl, $4001 + rst FarCall + call $2173 + call $2821 + ld a, $9 + call $3cb4 + pop af + rst Bankswitch + + call EnableLCD + ret +; 2be5 + +INCBIN "baserom.gbc", $2be5, $2bed - $2be5 GetMapHeaderPointer: ; 0x2bed ; Prior to calling this function, you must have switched banks so that @@ -4222,7 +6172,40 @@ GetAnyMapHeaderMember: ; 0x2c0c ; 0x2c1c -INCBIN "baserom.gbc", $2c1c, $2c57 - $2c1c +INCBIN "baserom.gbc", $2c1c, $2c24 - $2c1c + + +Function2c24: ; 2c24 + call $2c31 + rst Bankswitch + + ret +; 2c29 + +INCBIN "baserom.gbc", $2c29, $2c31 - $2c29 + + +Function2c31: ; 2c31 + push hl + push de + ld de, $0000 + call GetAnyMapHeaderMember + ld a, c + pop de + pop hl + ret +; 2c3d + +INCBIN "baserom.gbc", $2c3d, $2c52 - $2c3d + + +Function2c52: ; 2c52 + ld a, [MapEventBank] + rst Bankswitch + + ret +; 2c57 + GetMapEventBank: ; 2c57 @@ -4308,7 +6291,81 @@ GetWorldMapLocation: ; 0x2caf ; 0x2cbd -INCBIN "baserom.gbc", $2cbd, $2d63 - $2cbd +Function2cbd: ; 2cbd + push hl + push bc + ld de, $0006 + call GetMapHeaderMember + ld a, c + cp $64 + jr z, .asm_2cee + bit 7, c + jr nz, .asm_2cda + ld a, $22 + ld hl, $7342 + rst FarCall + ld e, c + ld d, $0 +.asm_2cd7 + pop bc + pop hl + ret + +.asm_2cda + ld a, [StatusFlags2] + bit 0, a + jr z, .asm_2ce6 + ld de, $0056 + jr .asm_2cd7 + +.asm_2ce6 + ld a, c + and $7f + ld e, a + ld d, $0 + jr .asm_2cd7 + +.asm_2cee + ld a, [StatusFlags2] + bit 7, a + jr z, .asm_2cfa + ld de, $0048 + jr .asm_2cd7 + +.asm_2cfa + ld de, $0026 + jr .asm_2cd7 +; 2cff + +INCBIN "baserom.gbc", $2cff, $2d05 - $2cff + + +Function2d05: ; 2d05 + call $2d0d + and $f0 + swap a + ret +; 2d0d + +Function2d0d: ; 2d0d + push hl + push bc + ld de, $0007 + call GetMapHeaderMember + ld a, c + pop bc + pop hl + ret +; 2d19 + +INCBIN "baserom.gbc", $2d19, $2d61 - $2d19 + + +Function2d61: ; 2d61 + push de + ret +; 2d63 + FarJpHl: ; 2d63 @@ -4439,7 +6496,91 @@ ResetWindow: ; 2dba ; 2dcf -INCBIN "baserom.gbc", $2dcf, $2e6f-$2dcf +Function2dcf: ; 2dcf + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call $2de2 + pop af + ld [hOAMUpdate], a + ld hl, VramState + res 6, [hl] + ret +; 2de2 + +Function2de2: ; 2de2 + call Function1fbf + xor a + ld [hBGMapMode], a + call $2173 + call $2e20 + xor a + ld [hBGMapMode], a + call $2e31 + ld a, $90 + ld [$ffd2], a + call $0e4a + ld a, $2e + ld hl, $4000 + rst FarCall + ld a, $41 + ld hl, $6594 + rst FarCall + ret +; 2e08 + +Function2e08: ; 2e08 + call Function1fbf + ld a, [hROMBank] + push af + ld a, $1 + rst Bankswitch + + call $6454 + call SpeechTextBox + call $2e20 + call $64bf + pop af + rst Bankswitch + + ret +; 2e20 + +Function2e20: ; 2e20 + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + ld a, $41 + ld hl, $4110 + rst FarCall + pop af + ld [hOAMUpdate], a + ret +; 2e31 + +Function2e31: ; 2e31 + ld a, [hOAMUpdate] + push af + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + ld a, $1 + ld [hOAMUpdate], a + call $1ad2 + xor a + ld [hOAMUpdate], a + call DelayFrame + pop af + ld [hBGMapMode], a + pop af + ld [hOAMUpdate], a + ret +; 2e4e + +INCBIN "baserom.gbc", $2e4e, $2e6f - $2e4e BitTable1Func: ; 0x2e6f @@ -4515,7 +6656,21 @@ BitTableFunc: ; 0x2e76 ret ; 0x2ead -INCBIN "baserom.gbc", $2ead, $2ed3 - $2ead +INCBIN "baserom.gbc", $2ead, $2ec6 - $2ead + + +Function2ec6: ; 2ec6 + xor a + ret +; 2ec8 + +Function2ec8: ; 2ec8 + xor a + dec a + ret +; 2ecb + +INCBIN "baserom.gbc", $2ecb, $2ed3 - $2ecb Function2ed3: ; 0x2ed3 ; disables overworld sprite updating? @@ -4529,7 +6684,18 @@ Function2ed3: ; 0x2ed3 ret ; 0x2ee4 -INCBIN "baserom.gbc", $2ee4, $2ef9 - $2ee4 +Function2ee4: ; 2ee4 + ld a, $1 + ld [$c2ce], a + ld a, [VramState] + set 0, a + ld [VramState], a + ld a, $1 + ld [$ffde], a + ret +; 2ef6 + +INCBIN "baserom.gbc", $2ef6, $2ef9 - $2ef6 InitString: ; 0x2ef9 ; if the string pointed to by hl is empty (defined as "zero or more spaces @@ -4584,7 +6750,66 @@ CheckTossableItem: ; 2f46 ; 2f53 -INCBIN "baserom.gbc", $2f53, $2f8c - $2f53 +Function2f53: ; 2f53 + push hl + push de + push bc + ld a, [hROMBank] + push af + ld a, $3 + rst Bankswitch + + call $520d + pop bc + ld a, b + rst Bankswitch + + pop bc + pop de + pop hl + ret +; 2f66 + +Function2f66: ; 2f66 + push bc + ld a, [hROMBank] + push af + ld a, $3 + rst Bankswitch + + push hl + push de + call $51d5 + pop de + pop hl + pop bc + ld a, b + rst Bankswitch + + pop bc + ret +; 2f79 + +Function2f79: ; 2f79 + push hl + push de + push bc + ld a, [hROMBank] + push af + ld a, $3 + rst Bankswitch + + call $5244 + pop bc + ld a, b + rst Bankswitch + + pop bc + pop de + pop hl + ret +; 2f8c + RNG: ; 2f8c @@ -4844,7 +7069,19 @@ GetFarHalfword: ; 0x305d ret ; 0x306b -INCBIN "baserom.gbc", $306b, $30d6-$306b +Function306b: ; 306b + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + call CopyBytes + pop af + ld [rSVBK], a + ret +; 307b + +INCBIN "baserom.gbc", $307b, $30d6 - $307b CopyName1: ; 30d6 ld hl, StringBuffer2 @@ -5085,7 +7322,54 @@ CopyDataUntil: ; 318c ret ; 0x3198 -INCBIN "baserom.gbc", $3198, $31db - $3198 +Function3198: ; 3198 + ld a, [hROMBank] + push af + ld a, $3 + rst Bankswitch + + call $44c7 + pop af + rst Bankswitch + + ret +; 31a4 + +INCBIN "baserom.gbc", $31a4, $31b0 - $31a4 + + +Function31b0: ; 31b0 + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call PrintText + pop af + rst Bankswitch + + ret +; 31be + +Function31be: ; 31be + ld a, [hROMBank] + push af + ld a, [hli] + rst Bankswitch + + ld a, [hli] + ld h, [hl] + ld l, a + call JpHl + pop hl + ld a, h + rst Bankswitch + + ret +; 31cd + +INCBIN "baserom.gbc", $31cd, $31db - $31cd StringCmp: ; 31db ; Compare strings, c bytes in length, at de and hl. @@ -5154,7 +7438,188 @@ Function3200: ; 0x3200 ret ; 0x3218 -INCBIN "baserom.gbc", $3218, $32f9 - $3218 +INCBIN "baserom.gbc", $3218, $321c - $3218 + + +Function321c: ; 321c + ld a, [hCGB] + and a + jr z, .asm_322e + ld a, [$c2ce] + cp $0 + jr z, .asm_322e + ld a, $1 + ld [hBGMapMode], a + jr .asm_323d + +.asm_322e + ld a, $1 + ld [hBGMapMode], a + ld c, $4 + call DelayFrames + ret + + ld a, [hCGB] + and a + jr z, WaitBGMap + +.asm_323d + jr .asm_3246 + + ld a, $41 + ld hl, $4000 + rst FarCall + ret + +.asm_3246 + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + ld a, [$ffde] + push af + xor a + ld [$ffde], a +.asm_3252 + ld a, [rLY] + cp $7f + jr c, .asm_3252 ; 3256 $fa + di + ld a, $1 + ld [rVBK], a + ld hl, AttrMap + call $327b + ld a, $0 + ld [rVBK], a + ld hl, TileMap + call $327b +.asm_326d + ld a, [rLY] + cp $7f + jr c, .asm_326d ; 3271 $fa + ei + pop af + ld [$ffde], a + pop af + ld [hBGMapMode], a + ret +; 327b + +Function327b: ; 327b + ld [hSPBuffer], sp + ld sp, hl + ld a, [$ffd7] + ld h, a + ld l, $0 + ld a, $12 + ld [$ffd3], a + ld b, $2 + ld c, $41 +.asm_328c + pop de +.asm_328d + ld a, [$ff00+c] + and b + jr nz, .asm_328d + 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 +.asm_32de + ld a, [$ff00+c] + and b + jr nz, .asm_32de + ld [hl], e + inc l + ld [hl], d + inc l + ld de, $000c + add hl, de + ld a, [$ffd3] + dec a + ld [$ffd3], a + jr nz, .asm_328c + ld a, [hSPBuffer] + ld l, a + ld a, [$ffda] + ld h, a + ld sp, hl + ret +; 32f9 + Function32f9: ; 32f9 @@ -5642,7 +8107,69 @@ GetMoveName: ; 34f8 ; 350c -INCBIN "baserom.gbc", $350c, $3600 - $350c +Function350c: ; 350c + call $1c66 + ld a, [hROMBank] + push af + ld a, $9 + rst Bankswitch + + call $45af + call $3524 + call $45cb + pop af + rst Bankswitch + + ld a, [$cf73] + ret +; 3524 + +Function3524: ; 3524 + ld hl, VramState + bit 0, [hl] + jp nz, Function485 + jp Function32f9 +; 352f + +Function352f: ; 352f + ld a, [$cf82] + dec a + ld b, a + ld a, [$cf84] + sub b + ld d, a + ld a, [$cf83] + dec a + ld c, a + ld a, [$cf85] + sub c + ld e, a + push de + call $1d05 + pop bc + jp TextBox +; 354b + +Function354b: ; 354b + call DelayFrame + ld a, [$ffaa] + push af + ld a, $1 + ld [$ffaa], a + call Functiona57 + pop af + ld [$ffaa], a + ld a, [$ffa9] + and $f0 + ld c, a + ld a, [hJoyPressed] + and $f + or c + ld c, a + ret +; 3567 + +INCBIN "baserom.gbc", $3567, $3600 - $3567 CheckTrainerBattle2: ; 3600 @@ -5858,7 +8385,184 @@ FacingPlayerDistance: ; 36ad ; 36f5 -INCBIN "baserom.gbc", $36f5, $3856 - $36f5 +INCBIN "baserom.gbc", $36f5, $3741 - $36f5 + + +Function3741: ; 3741 + and a + jr z, .asm_374c + cp $fd + jr z, .asm_374e + cp $fc + jr c, .asm_374e + +.asm_374c + scf + ret + +.asm_374e + and a + ret +; 3750 + +Function3750: ; 3750 + push hl + push de + push bc + ld a, $60 + ld [hli], a + ld a, $61 + ld [hli], a + push hl + ld a, $62 +.asm_375c + ld [hli], a + dec d + jr nz, .asm_375c + ld a, $6b + add b + ld [hl], a + pop hl + ld a, e + and a + jr nz, .asm_376f + ld a, c + and a + jr z, .asm_3782 + ld e, $1 + +.asm_376f + ld a, e + sub $8 + jr c, .asm_377e + ld e, a + ld a, $6a + ld [hli], a + ld a, e + and a + jr z, .asm_3782 + jr .asm_376f + +.asm_377e + ld a, $62 + add e + ld [hl], a + +.asm_3782 + pop bc + pop de + pop hl + ret +; 3786 + + + +Function3786: ; 3786 + ld a, $1 + ld [$c2c6], a + ld a, [CurPartySpecies] + call $3741 + jr c, .asm_37ad + push hl + ld de, VTiles2 + ld a, $3c + call Predef + pop hl + xor a + ld [$ffad], a + ld bc, $0707 + ld a, $13 + call Predef + xor a + ld [$c2c6], a + ret + +.asm_37ad + xor a + ld [$c2c6], a + inc a + ld [CurPartySpecies], a + ret +; 37b6 + +INCBIN "baserom.gbc", $37b6, $37ce - $37b6 + + +Function37ce: ; 37ce + call $37d5 + call WaitSFX + ret +; 37d5 + +Function37d5: ; 37d5 + push af + xor a + ld [$c2bc], a + ld [CryTracks], a + pop af + call $37e2 + ret +; 37e2 + +Function37e2: ; 37e2 + push hl + push de + push bc + call $381e + jr c, .asm_37ef + ld e, c + ld d, b + call PlayCryHeader + +.asm_37ef + pop bc + pop de + pop hl + ret +; 37f3 + +INCBIN "baserom.gbc", $37f3, $381e - $37f3 + + +Function381e: ; 381e + and a + jr z, .asm_382b + cp $fc + jr nc, .asm_382b + dec a + ld c, a + ld b, $0 + and a + ret + +.asm_382b + scf + ret +; 382d + +Function382d: ; 382d + ld a, [TempMonLevel] + ld [hl], $6e + inc hl + ld c, $2 + cp $64 + jr c, .asm_3842 + dec hl + inc c + jr .asm_3842 + + ld [hl], $6e + inc hl + ld c, $3 + +.asm_3842 + ld [$d265], a + ld de, $d265 + ld b, $41 + jp $3198 +; 384d + +INCBIN "baserom.gbc", $384d, $3856 - $384d GetBaseData: ; 3856 @@ -6710,7 +9414,115 @@ VolumeOff: ; 3ca3 ret ; 3ca8 -INCBIN "baserom.gbc", $3ca8, $3dde - $3ca8 +INCBIN "baserom.gbc", $3ca8, $3cb4 - $3ca8 + + +Function3cb4: ; 3cb4 +.asm_3cb4 + and a + ret z + dec a + call CleanUpdateSound + jr .asm_3cb4 +; 3cbc + +INCBIN "baserom.gbc", $3cbc, $3cdf - $3cbc + + +Function3cdf: ; 3cdf + push hl + push de + push bc + push af + call $3d97 + ld a, [CurMusic] + cp e + jr z, .asm_3cfe + push de + ld de, $0000 + call StartMusic + call DelayFrame + pop de + ld a, e + ld [CurMusic], a + call StartMusic + +.asm_3cfe + pop af + pop bc + pop de + pop hl + ret +; 3d03 + +INCBIN "baserom.gbc", $3d03, $3d47 - $3d03 + + +Function3d47: ; 3d47 + push hl + push de + push bc + push af + ld de, $0000 + call StartMusic + call DelayFrame + ld a, [CurMusic] + ld e, a + ld d, $0 + call StartMusic + pop af + pop bc + pop de + pop hl + ret +; 3d62 + +Function3d62: ; 3d62 + ld a, [PlayerState] + cp $4 + jr z, .asm_3d7b + cp $8 + jr z, .asm_3d7b + ld a, [StatusFlags2] + bit 2, a + jr nz, .asm_3d80 +.asm_3d74 + and a + ret + + ld de, $0013 + scf + ret + +.asm_3d7b + ld de, $0021 + scf + ret + +.asm_3d80 + ld a, [MapGroup] + cp $a + jr nz, .asm_3d74 + ld a, [MapNumber] + cp $f + jr z, .asm_3d92 + cp $11 + jr nz, .asm_3d74 + +.asm_3d92 + ld de, $0058 + scf + ret +; 3d97 + +Function3d97: ; 3d97 + call $3d62 + ret c + call $2cbd + ret +; 3d9f + +INCBIN "baserom.gbc", $3d9f, $3dde - $3d9f CheckSFX: ; 3dde ; returns carry if sfx channels are active @@ -6757,7 +9569,77 @@ SFXChannelsOff: ; 3e21 ret ; 3e32 -INCBIN "baserom.gbc", $3e32, $3fb5 - $3e32 +INCBIN "baserom.gbc", $3e32, $3e80 - $3e32 + + +Function3e80: ; 3e80 + ld a, [hROMBank] + push af + ld a, $44 + ld [$c981], a + rst Bankswitch + + call $56c5 + pop bc + ld a, b + ld [$c981], a + rst Bankswitch + + ret +; 3e93 + + + +Function3e93: ; 3e93 + push af + push bc + push de + push hl + ld a, [$ffe9] + and a + jr z, .asm_3ed2 + xor a + ld [rTAC], a + ld a, [rIF] + and $1b + ld [rIF], a + ld a, [$c86a] + or a + jr z, .asm_3ed2 + ld a, [$c822] + bit 1, a + jr nz, .asm_3eca + ld a, [rSC] + and $80 + jr nz, .asm_3eca + ld a, [hROMBank] + push af + ld a, $44 + ld [$c981], a + rst Bankswitch + + call $58de + pop bc + ld a, b + ld [$c981], a + rst Bankswitch + + +.asm_3eca + ld a, [rTMA] + ld [rTIMA], a + ld a, $6 + ld [rTAC], a + +.asm_3ed2 + pop hl + pop de + pop bc + pop af + reti +; 3ed7 + +INCBIN "baserom.gbc", $3ed7, $3fb5 - $3ed7 @@ -11711,7 +14593,116 @@ Function642e: ; 642e jp Function620b ; 6454 -INCBIN "baserom.gbc", $6454, $669f - $6454 +Function6454: ; 6454 + call DelayFrame + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + call $6473 + pop af + ld [hBGMapMode], a + pop af + ld [hOAMUpdate], a + ld hl, VramState + set 6, [hl] + ret +; 6473 + +Function6473: ; 6473 + xor a + ld [hLCDStatCustom], a + ld [hBGMapMode], a + ld a, $90 + ld [$ffd2], a + call $2173 + ld a, $9c + call $64b9 + call $2e20 + ld a, $12 + ld hl, $5409 + rst FarCall + ld a, $2 + ld hl, $56a4 + rst FarCall + ld a, $1 + ld [hCGBPalUpdate], a + xor a + ld [hBGMapMode], a + ld [$ffd2], a + ld a, $1 + ld hl, $64db + rst FarCall + ld a, $98 + call $64b9 + xor a + ld [$d152], a + ld a, $98 + ld [$d153], a + xor a + ld [$ffcf], a + ld [$ffd0], a + call Function5958 + ret +; 64b9 + +Function64b9: ; 64b9 + ld [$ffd7], a + xor a + ld [hBGMapAddress], a + ret +; 64bf + +Function64bf: ; 64bf + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call $64cd + pop af + ld [hOAMUpdate], a + ret +; 64cd + +Function64cd: ; 64cd + call Functione5f + ld a, $90 + ld [$ffd2], a + call $2e31 + call $0e51 + ret +; 64db + +Function64db: ; 64db + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld a, $60 + ld hl, $d000 + ld bc, VBlank5 + call ByteFill + ld a, $d0 + ld [rHDMA1], a + ld a, $0 + ld [rHDMA2], a + ld a, $18 + ld [rHDMA3], a + ld a, $0 + ld [rHDMA4], a + ld a, $3f + ld [hDMATransfer], a + call DelayFrame + pop af + ld [rSVBK], a + ret +; 6508 + +INCBIN "baserom.gbc", $6508, $669f - $6508 CheckNickErrors: ; 669f ; error-check monster nick before use @@ -12460,7 +15451,77 @@ Function7171: ; 7171 ret ; 718d -INCBIN "baserom.gbc", $718d, $7305 - $718d +INCBIN "baserom.gbc", $718d, $71c2 - $718d + + +Function71c2: ; 71c2 + ld a, [CurPartyMon] + inc a + ld e, a + ld d, $0 + ld hl, PartyCount + add hl, de + ld a, [hl] + cp $fd + ret z + push bc + ld hl, PartyMon1Happiness + ld bc, $0030 + ld a, [CurPartyMon] + call AddNTimes + pop bc + ld d, h + ld e, l + push de + ld a, [de] + cp $64 + ld e, $0 + jr c, .asm_71ef + inc e + cp $c8 + jr c, .asm_71ef + inc e + +.asm_71ef + dec c + ld b, $0 + ld hl, $7221 + add hl, bc + add hl, bc + add hl, bc + ld d, $0 + add hl, de + ld a, [hl] + cp $64 + pop de + ld a, [de] + jr nc, .asm_7209 + add [hl] + jr nc, .asm_720d + ld a, $ff + jr .asm_720d + +.asm_7209 + add [hl] + jr c, .asm_720d + xor a + +.asm_720d + ld [de], a + ld a, [IsInBattle] + and a + ret z + ld a, [CurPartyMon] + ld b, a + ld a, [$d0d8] + cp b + ret nz + ld a, [de] + ld [BattleMonHappiness], a + ret +; 7221 + +INCBIN "baserom.gbc", $7221, $7305 - $7221 SpecialGiveShuckle: ; 7305 @@ -12545,7 +15606,154 @@ INCBIN "baserom.gbc", $737e, $747b - $737e SECTION "bank2",DATA,BANK[$2] -INCBIN "baserom.gbc", $8000, $8286 - $8000 +Function8000: ; 8000 + call Function2ed3 + xor a + ld [hBGMapMode], a + call WhiteBGMap + call ClearSprites + ld hl, TileMap + ld bc, $0168 + ld a, $7f + call ByteFill + ld hl, AttrMap + ld bc, $0168 + ld a, $7 + call ByteFill + call Function3200 + call Function32f9 + ret +; 8029 + +INCBIN "baserom.gbc", $8029, $807e - $8029 + + +Function807e: ; 807e + push de + ld a, b + call GetMapObject + pop de + ld hl, $0003 + add hl, bc + ld [hl], d + ld hl, $0002 + add hl, bc + ld [hl], e + ret +; 808f + +INCBIN "baserom.gbc", $808f, $80a1 - $808f + + +Function80a1: ; 80a1 + ld a, b + call $18de + ret c + ld hl, $0010 + add hl, bc + ld d, [hl] + ld hl, $0011 + add hl, bc + ld e, [hl] + ld a, [hConnectionStripLength] + ld b, a + call $407e + and a + ret +; 80b8 + +INCBIN "baserom.gbc", $80b8, $80e7 - $80b8 + + +Function80e7: ; 80e7 + call $2707 + and a + ret nz + ld hl, $d4fe + ld a, $1 + ld de, $0028 +.asm_80f4 + ld [hConnectedMapWidth], a + ld a, [hl] + and a + jr z, .asm_8104 + add hl, de + ld a, [hConnectedMapWidth] + inc a + cp $d + jr nz, .asm_80f4 + scf + ret + +.asm_8104 + ld d, h + ld e, l + call $4116 + ld hl, VramState + bit 7, [hl] + ret z + ld hl, $0005 + add hl, de + set 5, [hl] + ret +; 8116 + +Function8116: ; 8116 + call $411d + call Function8286 + ret +; 811d + +Function811d: ; 811d + ld a, [hConnectedMapWidth] + ld hl, $0000 + add hl, bc + ld [hl], a + ld a, [hConnectionStripLength] + ld [$c2f0], a + ld hl, $0001 + add hl, bc + ld a, [hl] + ld [$c2f1], a + call $180e + ld [$c2f2], a + ld a, [hl] + call $17ff + ld [$c2f3], a + ld hl, $0008 + add hl, bc + ld a, [hl] + and $f0 + jr z, .asm_814e + swap a + and $7 + ld [$c2f3], a + +.asm_814e + ld hl, $0004 + add hl, bc + ld a, [hl] + ld [$c2f4], a + ld hl, $0009 + add hl, bc + ld a, [hl] + ld [$c2f5], a + ld hl, $0003 + add hl, bc + ld a, [hl] + ld [$c2f6], a + ld hl, $0002 + add hl, bc + ld a, [hl] + ld [$c2f7], a + ld hl, $0005 + add hl, bc + ld a, [hl] + ld [$c2f8], a + ret +; 8177 + +INCBIN "baserom.gbc", $8177, $8286 - $8177 Function8286: ; 8286 @@ -12641,7 +15849,253 @@ Function830d: ; 830d ret ; 831e -INCBIN "baserom.gbc", $831e, $854b - $831e +INCBIN "baserom.gbc", $831e, $839e - $831e + + +Function839e: ; 839e + push bc + ld a, c + call $18de + ld d, b + ld e, c + pop bc + ret c + ld a, b + call $18de + ret c + ld hl, $0010 + add hl, bc + ld a, [hl] + ld hl, $0011 + add hl, bc + ld c, [hl] + ld b, a + ld hl, $0010 + add hl, de + ld a, [hl] + cp b + jr z, .asm_83c7 + jr c, .asm_83c4 + inc b + jr .asm_83d5 + +.asm_83c4 + dec b + jr .asm_83d5 + +.asm_83c7 + ld hl, $0011 + add hl, de + ld a, [hl] + cp c + jr z, .asm_83d5 + jr c, .asm_83d4 + inc c + jr .asm_83d5 + +.asm_83d4 + dec c + +.asm_83d5 + ld hl, $0010 + add hl, de + ld [hl], b + ld a, b + ld hl, XCoord + sub [hl] + and $f + swap a + ld hl, $d14c + sub [hl] + ld hl, $0017 + add hl, de + ld [hl], a + ld hl, $0011 + add hl, de + ld [hl], c + ld a, c + ld hl, YCoord + sub [hl] + and $f + swap a + ld hl, $d14d + sub [hl] + ld hl, $0018 + add hl, de + ld [hl], a + ld a, [hConnectedMapWidth] + ld hl, $0020 + add hl, de + ld [hl], a + ld hl, $0003 + add hl, de + ld [hl], $1a + ld hl, $0009 + add hl, de + ld [hl], $0 + ret +; 8417 + +Function8417: ; 8417 + ld a, d + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $d + jr nc, .asm_8437 + ld d, a + ld a, e + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $d + jr nc, .asm_8437 + ld e, a + call $4439 + ret + +.asm_8437 + scf + ret +; 8439 + +Function8439: ; 8439 + ld a, d + call Function1ae5 + ld hl, $0010 + add hl, bc + ld a, [hl] + ld hl, $0011 + add hl, bc + ld c, [hl] + ld b, a + push bc + ld a, e + call Function1ae5 + ld hl, $0010 + add hl, bc + ld d, [hl] + ld hl, $0011 + add hl, bc + ld e, [hl] + pop bc + ld a, b + sub d + jr z, .asm_846c + jr nc, .asm_8460 + cpl + inc a + +.asm_8460 + ld h, a + ld a, c + sub e + jr z, .asm_847a + jr nc, .asm_8469 + cpl + inc a + +.asm_8469 + sub h + jr c, .asm_847a + +.asm_846c + ld a, c + cp e + jr z, .asm_8488 + jr c, .asm_8476 + ld d, $0 + and a + ret + +.asm_8476 + ld d, $1 + and a + ret + +.asm_847a + ld a, b + cp d + jr z, .asm_8488 + jr c, .asm_8484 + ld d, $3 + and a + ret + +.asm_8484 + ld d, $2 + and a + ret + +.asm_8488 + scf + ret +; 848a + +Function848a: ; 848a + call $449d + jr c, .asm_8497 + ld [$d4d1], a + xor a + ld [$d4d0], a + ret + +.asm_8497 + ld a, $ff + ld [$d4d0], a + ret +; 849d + +Function849d: ; 849d + ld a, [$d4cd] + call Function1ae5 + ld hl, $0010 + add hl, bc + ld d, [hl] + ld hl, $0011 + add hl, bc + ld e, [hl] + ld a, [$d4ce] + call Function1ae5 + ld hl, $0010 + add hl, bc + ld a, d + cp [hl] + jr z, .asm_84c5 + jr c, .asm_84c1 + and a + ld a, $f + ret + +.asm_84c1 + and a + ld a, $e + ret + +.asm_84c5 + ld hl, $0011 + add hl, bc + ld a, e + cp [hl] + jr z, .asm_84d7 + jr c, .asm_84d3 + and a + ld a, $c + ret + +.asm_84d3 + and a + ld a, $d + ret + +.asm_84d7 + scf + ret +; 84d9 + +INCBIN "baserom.gbc", $84d9, $854b - $84d9 GetPredefFn: ; 854b ; input: @@ -12787,7 +16241,18 @@ CheckShininess: ; 0x8a68 and a ; clear carry flag ret -INCBIN "baserom.gbc", $8a88, $8d55 - $8a88 +INCBIN "baserom.gbc", $8a88, $8ad1 - $8a88 + + +Function8ad1: ; 8ad1 + ld hl, $5c57 + call $5610 + call $571a + call $5699 + ret +; 8ade + +INCBIN "baserom.gbc", $8ade, $8d55 - $8ade Function8d55: ; 8d55 @@ -12796,7 +16261,87 @@ Function8d55: ; 8d55 ret ; 8d59 -INCBIN "baserom.gbc", $8d59, $9890 - $8d59 +INCBIN "baserom.gbc", $8d59, $9610 - $8d59 + + +Function9610: ; 9610 + ld de, $d000 + ld c, $4 +.asm_9615 + push bc + ld a, [hli] + push hl + call $5625 + call $5630 + pop hl + inc hl + pop bc + dec c + jr nz, .asm_9615 + ret +; 9625 + +Function9625: ; 9625 + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld bc, $5df6 + add hl, bc + ret +; 9630 + +Function9630: ; 9630 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld c, $8 +.asm_9639 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_9639 + pop af + ld [rSVBK], a + ret +; 9643 + +INCBIN "baserom.gbc", $9643, $9699 - $9643 + + +Function9699: ; 9699 + ld hl, AttrMap + ld bc, $0168 + xor a + call ByteFill + ret +; 96a4 + +Function96a4: ; 96a4 + ld hl, $d000 + ld de, $d080 + ld bc, $0080 + ld a, $5 + call $306b + ret +; 96b3 + +INCBIN "baserom.gbc", $96b3, $971a - $96b3 + + +Function971a: ; 971a + ld hl, $7681 + ld de, $d040 + ld bc, $0010 + ld a, $5 + call $306b + ret +; 9729 + +INCBIN "baserom.gbc", $9729, $9890 - $9729 Function9890: ; 9890 @@ -12939,7 +16484,37 @@ INCBIN "baserom.gbc", $b419, $b825 - $b419 SECTION "bank3",DATA,BANK[$3] -INCBIN "baserom.gbc", $c000, $29 +Functionc000: ; c000 + ld a, [TimeOfDay] + ld hl, $4012 + ld de, $0002 + call IsInArray + inc hl + ld c, [hl] + ret c + xor a + ld c, a + ret +; c012 + +INCBIN "baserom.gbc", $c012, $c01b - $c012 + + +Functionc01b: ; c01b + ld hl, SpecialsPointers + add hl, de + add hl, de + add hl, de + ld b, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ld a, b + rst FarCall + ret +; c029 + SpecialsPointers: ; 0xc029 dbw BANK(Function97c28), Function97c28 @@ -13143,7 +16718,27 @@ ScriptReturnCarry: ; c3e2 ret ; c3ef -INCBIN "baserom.gbc", $c3ef, $c419 - $c3ef +INCBIN "baserom.gbc", $c3ef, $c403 - $c3ef + + +Functionc403: ; c403 + ld a, c + and a + jr nz, .asm_c410 + ld a, d + ld [$dfcc], a + ld a, e + ld [$dfcd], a + ret + +.asm_c410 + ld a, d + ld [$dc5a], a + ld a, e + ld [$dc5b], a + ret +; c419 + SpecialCheckPokerus: ; c419 ; Check if a monster in your party has Pokerus @@ -13237,7 +16832,189 @@ SpecialTrainerHouse: ; 0xc4b9 ld [ScriptVar], a jp CloseSRAM -INCBIN "baserom.gbc", $c4c7, $c5d2 - $c4c7 +Functionc4c7: ; c4c7 + push bc + bit 5, b + jr z, .asm_c4d9 + bit 7, b + jr nz, .asm_c4d4 + bit 6, b + jr z, .asm_c4d9 + +.asm_c4d4 + ld a, $f0 + ld [hli], a + res 5, b + +.asm_c4d9 + xor a + ld [hProduct], a + ld [hMultiplicand], a + ld [$ffb5], a + ld a, b + and $f + cp $1 + jr z, .asm_c501 + cp $2 + jr z, .asm_c4f8 + ld a, [de] + ld [hMultiplicand], a + inc de + ld a, [de] + ld [$ffb5], a + inc de + ld a, [de] + ld [$ffb6], a + jr .asm_c504 + +.asm_c4f8 + ld a, [de] + ld [$ffb5], a + inc de + ld a, [de] + ld [$ffb6], a + jr .asm_c504 + +.asm_c501 + ld a, [de] + ld [$ffb6], a + +.asm_c504 + push de + ld d, b + ld a, c + swap a + and $f + ld e, a + ld a, c + and $f + ld b, a + ld c, $0 + cp $2 + jr z, .asm_c57c + cp $3 + jr z, .asm_c56c + cp $4 + jr z, .asm_c55b + cp $5 + jr z, .asm_c54a + cp $6 + jr z, .asm_c538 + ld a, $f + ld [hMultiplier], a + ld a, $42 + ld [hMathBuffer], a + ld a, $40 + ld [$ffb9], a + call $45cb + call PrintNumber_AdvancePointer + +.asm_c538 + ld a, $1 + ld [hMultiplier], a + ld a, $86 + ld [hMathBuffer], a + ld a, $a0 + ld [$ffb9], a + call $45cb + call PrintNumber_AdvancePointer + +.asm_c54a + xor a + ld [hMultiplier], a + ld a, $27 + ld [hMathBuffer], a + ld a, $10 + ld [$ffb9], a + call $45cb + call PrintNumber_AdvancePointer + +.asm_c55b + xor a + ld [hMultiplier], a + ld a, $3 + ld [hMathBuffer], a + ld a, $e8 + ld [$ffb9], a + call $45cb + call PrintNumber_AdvancePointer + +.asm_c56c + xor a + ld [hMultiplier], a + xor a + ld [hMathBuffer], a + ld a, $64 + ld [$ffb9], a + call $45cb + call PrintNumber_AdvancePointer + +.asm_c57c + dec e + jr nz, .asm_c583 + ld a, $f6 + ld [hProduct], a + +.asm_c583 + ld c, $0 + ld a, [$ffb6] +.asm_c587 + cp $a + jr c, .asm_c590 + sub $a + inc c + jr .asm_c587 + +.asm_c590 + ld b, a + ld a, [hProduct] + or c + jr nz, .asm_c59b + call PrintNumber_PrintLeadingZero + jr .asm_c5ad + +.asm_c59b + call $45ba + push af + ld a, $f6 + add c + ld [hl], a + pop af + ld [hProduct], a + inc e + dec e + jr nz, .asm_c5ad + inc hl + ld [hl], $f2 + +.asm_c5ad + call PrintNumber_AdvancePointer + call $45ba + ld a, $f6 + add b + ld [hli], a + pop de + pop bc + ret +; c5ba + +Functionc5ba: ; c5ba + push af + ld a, [hProduct] + and a + jr nz, .asm_c5c9 + bit 5, d + jr z, .asm_c5c9 + ld a, $f0 + ld [hli], a + res 5, d + +.asm_c5c9 + pop af + ret +; c5cb + +INCBIN "baserom.gbc", $c5cb, $c5d2 - $c5cb PrintNumber_PrintDigit: ; c5d2 INCBIN "baserom.gbc", $c5d2, $c644 - $c5d2 @@ -13517,7 +17294,389 @@ AskSurfText: ; ca36 ; ca3b -INCBIN "baserom.gbc", $ca3b, $d407 - $ca3b +INCBIN "baserom.gbc", $ca3b, $d1d5 - $ca3b + + +Functiond1d5: ; d1d5 + call $527b + jp nz, $529c + push hl + call CheckItemPocket + pop de + ld a, [$d142] + dec a + ld hl, $51e9 + rst JumpTable + ret +; d1e9 + +INCBIN "baserom.gbc", $d1e9, $d1f1 - $d1e9 + + +Functiond1f1: ; d1f1 + ld h, d + ld l, e + jp $529c +; d1f6 + +Functiond1f6: ; d1f6 + ld h, d + ld l, e + jp $535a +; d1fb + +Functiond1fb: ; d1fb + ld hl, NumBalls + jp $529c +; d201 + +Functiond201: ; d201 + ld h, d + ld l, e + ld a, [CurItem] + ld c, a + call GetTMHMNumber + jp $53c4 +; d20d + +Functiond20d: ; d20d + call $527b + jr nz, .asm_d241 + push hl + call CheckItemPocket + pop de + ld a, [$d142] + dec a + ld hl, .data_d220 + rst JumpTable + ret + +.data_d220 + db $3f + db $52 + db $3a + db $52 + db $28 + db $52 + db $2e + db $52 + db $21 + db $d7 + db $d8 + db $c3 + db $ff + db $52 + db $62 + db $6b + db $fa + db $6 + db $d1 + db $4f + db $cd + db $7 + db $54 + db $c3 + db $d8 + db $53 + db $62 + db $6b + db $c3 + db $74 + db $53 + db $62 + db $6b + +.asm_d241 + jp $52ff +; d244 + +Functiond244: ; d244 + call $527b + jr nz, .asm_d278 + push hl + call CheckItemPocket + pop de + ld a, [$d142] + dec a + ld hl, .data_d257 + rst JumpTable + ret + +.data_d257 + db $76 + db $52 + db $71 + db $52 + db $5f + db $52 + db $65 + db $52 + db $21 + db $d7 + db $d8 + db $c3 + db $49 + db $53 + db $62 + db $6b + db $fa + db $6 + db $d1 + db $4f + db $cd + db $7 + db $54 + db $c3 + db $fb + db $53 + db $62 + db $6b + db $c3 + db $b1 + db $53 + db $62 + db $6b + +.asm_d278 + jp $5349 +; d27b + +Functiond27b: ; d27b + ld a, l + cp $92 + ret nz + ld a, h + cp $d8 + ret +; d283 + +Functiond283: ; d283 + ld c, $14 + ld a, e + cp $92 + jr nz, .asm_d28e + ld a, d + cp $d8 + ret z + +.asm_d28e + ld c, $32 + ld a, e + cp $f1 + jr nz, .asm_d299 + ld a, d + cp $d8 + ret z + +.asm_d299 + ld c, $c + ret +; d29c + +Functiond29c: ; d29c + ld d, h + ld e, l + inc hl + ld a, [CurItem] + ld c, a + ld b, $0 +.asm_d2a5 + ld a, [hli] + cp $ff + jr z, .asm_d2bd + cp c + jr nz, .asm_d2ba + ld a, $63 + sub [hl] + add b + ld b, a + ld a, [$d10c] + cp b + jr z, .asm_d2c6 + jr c, .asm_d2c6 + +.asm_d2ba + inc hl + jr .asm_d2a5 + +.asm_d2bd + call $5283 + ld a, [de] + cp c + jr c, .asm_d2c6 + and a + ret + +.asm_d2c6 + ld h, d + ld l, e + ld a, [CurItem] + ld c, a + ld a, [$d10c] + ld [$d10d], a +.asm_d2d2 + inc hl + ld a, [hli] + cp $ff + jr z, .asm_d2ef + cp c + jr nz, .asm_d2d2 + ld a, [$d10d] + add [hl] + cp $64 + jr nc, .asm_d2e6 + ld [hl], a + jr .asm_d2fd + +.asm_d2e6 + ld [hl], $63 + sub $63 + ld [$d10d], a + jr .asm_d2d2 + +.asm_d2ef + dec hl + ld a, [CurItem] + ld [hli], a + ld a, [$d10d] + ld [hli], a + ld [hl], $ff + ld h, d + ld l, e + inc [hl] + +.asm_d2fd + scf + ret +; d2ff + +Functiond2ff: ; d2ff + ld d, h + ld e, l + ld a, [hli] + ld c, a + ld a, [$d107] + cp c + jr nc, .asm_d318 + ld c, a + ld b, $0 + add hl, bc + add hl, bc + ld a, [CurItem] + cp [hl] + inc hl + jr z, .asm_d327 + ld h, d + ld l, e + inc hl + +.asm_d318 + ld a, [CurItem] + ld b, a +.asm_d31c + ld a, [hli] + cp b + jr z, .asm_d327 + cp $ff + jr z, .asm_d347 + inc hl + jr .asm_d31c + +.asm_d327 + ld a, [$d10c] + ld b, a + ld a, [hl] + sub b + jr c, .asm_d347 + ld [hl], a + ld [$d10d], a + and a + jr nz, .asm_d345 + dec hl + ld b, h + ld c, l + inc hl + inc hl +.asm_d33b + ld a, [hli] + ld [bc], a + inc bc + cp $ff + jr nz, .asm_d33b + ld h, d + ld l, e + dec [hl] + +.asm_d345 + scf + ret + +.asm_d347 + and a + ret +; d349 + +Functiond349: ; d349 + ld a, [CurItem] + ld c, a +.asm_d34d + inc hl + ld a, [hli] + cp $ff + jr z, .asm_d358 + cp c + jr nz, .asm_d34d + scf + ret + +.asm_d358 + and a + ret +; d35a + +Functiond35a: ; d35a + ld hl, NumKeyItems + ld a, [hli] + cp $19 + jr nc, .asm_d372 + ld c, a + ld b, $0 + add hl, bc + ld a, [CurItem] + ld [hli], a + ld [hl], $ff + ld hl, NumKeyItems + inc [hl] + scf + ret + +.asm_d372 + and a + ret +; d374 + +INCBIN "baserom.gbc", $d374, $d3c4 - $d374 + + +Functiond3c4: ; d3c4 + dec c + ld b, $0 + ld hl, TMsHMs + add hl, bc + ld a, [$d10c] + add [hl] + cp $64 + jr nc, .asm_d3d6 + ld [hl], a + scf + ret + +.asm_d3d6 + and a + ret +; d3d8 + +INCBIN "baserom.gbc", $d3d8, $d407 - $d3d8 GetTMHMNumber: ; d407 @@ -13647,2443 +17806,5166 @@ Function0xd47f: ; d47f ; d486 -INCBIN "baserom.gbc", $d486, $e58b - $d486 - -ClearPCItemScreen: ; e58b - call Function2ed3 - xor a - ld [hBGMapMode], a - call WhiteBGMap - call ClearSprites - ld hl, TileMap - ld bc, 18 * 20 - ld a, " " - call ByteFill - hlcoord 0,0 - ld bc, $0a12 - call TextBox - hlcoord 0,12 - ld bc, $0412 - call TextBox - call Function3200 - call Function32f9 ; load regular palettes? +Functiond486: ; d486 + push hl + push bc + ld a, $0 + call GetItemAttr + ld e, a + ld a, $1 + call GetItemAttr + ld d, a + pop bc + pop hl ret -; 0xe5bb +; d497 -INCBIN "baserom.gbc", $e5bb, $e722 - $e5bb +INCBIN "baserom.gbc", $d497, $d88c - $d497 -_DoItemEffect: ; e722 - ld a, [CurItem] +Functiond88c: ; d88c + ld de, PartyCount + ld a, [MonType] + and $f + jr z, .asm_d899 + ld de, OTPartyCount + +.asm_d899 + ld a, [de] + inc a + cp $7 + ret nc + ld [de], a + ld a, [de] + ld [$ffae], a + add e + ld e, a + jr nc, .asm_d8a7 + inc d + +.asm_d8a7 + ld a, [CurPartySpecies] + ld [de], a + inc de + ld a, $ff + ld [de], a + ld hl, PartyMon1OT + ld a, [MonType] + and $f + jr z, .asm_d8bc + ld hl, OTPartyMon1OT + +.asm_d8bc + ld a, [$ffae] + dec a + call SkipNames + ld d, h + ld e, l + ld hl, PlayerName + ld bc, $000b + call CopyBytes + ld a, [MonType] + and a + jr nz, .asm_d8f0 + ld a, [CurPartySpecies] ld [$d265], a - call GetItemName - call CopyName1 - ld a, 1 - ld [$d0ec], a - ld a, [CurItem] + call GetPokemonName + ld hl, PartyMon1Nickname + ld a, [$ffae] dec a - ld hl, ItemEffects - rst JumpTable - ret -; e73c + call SkipNames + ld d, h + ld e, l + ld hl, StringBuffer1 + ld bc, $000b + call CopyBytes +.asm_d8f0 + ld hl, PartyMon1Species + ld a, [MonType] + and $f + jr z, .asm_d8fd + ld hl, OTPartyMon1Species -ItemEffects: ; e73c - dw MasterBall - dw UltraBall - dw Brightpowder - dw GreatBall - dw PokeBall - dw Item06 - dw Bicycle - dw MoonStone - dw Antidote - dw BurnHeal - dw IceHeal - dw Awakening - dw ParlyzHeal - dw FullRestore - dw MaxPotion - dw HyperPotion - dw SuperPotion - dw Potion - dw EscapeRope - dw Repel - dw MaxElixer - dw FireStone - dw Thunderstone - dw WaterStone - dw Item19 - dw HpUp - dw Protein - dw Iron - dw Carbos - dw LuckyPunch - dw Calcium - dw RareCandy - dw XAccuracy - dw LeafStone - dw MetalPowder - dw Nugget - dw PokeDoll - dw FullHeal - dw Revive - dw MaxRevive - dw GuardSpec - dw SuperRepel - dw MaxRepel - dw DireHit - dw Item2D - dw FreshWater - dw SodaPop - dw Lemonade - dw XAttack - dw Item32 - dw XDefend - dw XSpeed - dw XSpecial - dw CoinCase - dw Itemfinder - dw Item38 - dw ExpShare - dw OldRod - dw GoodRod - dw SilverLeaf - dw SuperRod - dw PpUp - dw Ether - dw MaxEther - dw Elixer - dw RedScale - dw Secretpotion - dw SSTicket - dw MysteryEgg - dw ClearBell - dw SilverWing - dw MoomooMilk - dw QuickClaw - dw Psncureberry - dw GoldLeaf - dw SoftSand - dw SharpBeak - dw Przcureberry - dw BurntBerry - dw IceBerry - dw PoisonBarb - dw KingsRock - dw BitterBerry - dw MintBerry - dw RedApricorn - dw Tinymushroom - dw BigMushroom - dw Silverpowder - dw BluApricorn - dw Item5A - dw AmuletCoin - dw YlwApricorn - dw GrnApricorn - dw CleanseTag - dw MysticWater - dw Twistedspoon - dw WhtApricorn - dw Blackbelt - dw BlkApricorn - dw Item64 - dw PnkApricorn - dw Blackglasses - dw Slowpoketail - dw PinkBow - dw Stick - dw SmokeBall - dw Nevermeltice - dw Magnet - dw Miracleberry - dw Pearl - dw BigPearl - dw Everstone - dw SpellTag - dw Ragecandybar - dw GsBall - dw BlueCard - dw MiracleSeed - dw ThickClub - dw FocusBand - dw Item78 - dw Energypowder - dw EnergyRoot - dw HealPowder - dw RevivalHerb - dw HardStone - dw LuckyEgg - dw CardKey - dw MachinePart - dw EggTicket - dw LostItem - dw Stardust - dw StarPiece - dw BasementKey - dw Pass - dw Item87 - dw Item88 - dw Item89 - dw Charcoal - dw BerryJuice - dw ScopeLens - dw Item8D - dw Item8E - dw MetalCoat - dw DragonFang - dw Item91 - dw Leftovers - dw Item93 - dw Item94 - dw Item95 - dw Mysteryberry - dw DragonScale - dw BerserkGene - dw Item99 - dw Item9A - dw Item9B - dw SacredAsh - dw HeavyBall - dw FlowerMail - dw LevelBall - dw LureBall - dw FastBall - dw ItemA2 - dw LightBall - dw FriendBall - dw MoonBall - dw LoveBall - dw NormalBox - dw GorgeousBox - dw SunStone - dw PolkadotBow - dw ItemAB - dw UpGrade - dw Berry - dw GoldBerry - dw Squirtbottle - dw ItemB0 - dw ParkBall - dw RainbowWing - dw ItemB3 -; e8a2 - -INCLUDE "items/item_effects.asm" +.asm_d8fd + ld a, [$ffae] + dec a + ld bc, $0030 + call AddNTimes + ld e, l + ld d, h + push hl + ld a, [CurPartySpecies] + ld [CurSpecies], a + call GetBaseData + ld a, [BaseDexNo] + ld [de], a + inc de + ld a, [IsInBattle] + and a + ld a, $0 + jr z, .asm_d922 + ld a, [EnemyMonItem] +.asm_d922 + ld [de], a + inc de + push de + ld h, d + ld l, e + ld a, [IsInBattle] + and a + jr z, .asm_d943 + ld a, [MonType] + and a + jr nz, .asm_d943 + ld de, EnemyMonMove1 + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + jr .asm_d950 -INCBIN "baserom.gbc", $f780, $fa0b - $f780 +.asm_d943 + xor a + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld [MagikarpLength], a + ld a, $1b + call Predef +.asm_d950 + pop de + inc de + inc de + inc de + inc de + ld a, [PlayerID] + ld [de], a + inc de + ld a, [$d47c] + ld [de], a + inc de + push de + ld a, [CurPartyLevel] + ld d, a + ld hl, $4e47 + ld a, $14 + rst FarCall + pop de + ld a, [hMultiplicand] + ld [de], a + inc de + ld a, [$ffb5] + ld [de], a + inc de + ld a, [$ffb6] + ld [de], a + inc de + xor a + ld b, $a +.asm_d97a + ld [de], a + inc de + dec b + jr nz, .asm_d97a + pop hl + push hl + ld a, [MonType] + and $f + jr z, .asm_d992 + push hl + callba GetTrainerDVs + pop hl + jr .asm_d9b5 -SECTION "bank4",DATA,BANK[$4] +.asm_d992 + ld a, [CurPartySpecies] + ld [$d265], a + dec a + push de + call CheckSeenMon + ld a, [$d265] + dec a + call SetSeenAndCaughtMon + pop de + pop hl + push hl + ld a, [IsInBattle] + and a + jr nz, .asm_d9f3 + call RNG + ld b, a + call RNG + ld c, a -INCBIN "baserom.gbc", $10000, $10b16 - $10000 +.asm_d9b5 + ld a, b + ld [de], a + inc de + ld a, c + ld [de], a + inc de + push hl + push de + inc hl + inc hl + call $5a6d + pop de + pop hl + inc de + inc de + inc de + inc de + ld a, $46 + ld [de], a + inc de + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + inc de + ld a, [CurPartyLevel] + ld [de], a + inc de + xor a + ld [de], a + inc de + ld [de], a + inc de + ld bc, $000a + add hl, bc + ld a, $1 + ld c, a + ld b, $0 + call $617b + ld a, [$ffb5] + ld [de], a + inc de + ld a, [$ffb6] + ld [de], a + inc de + jr .asm_da29 -PackGFX: -INCBIN "gfx/misc/pack.2bpp" +.asm_d9f3 + ld a, [EnemyMonAtkDefDV] + ld [de], a + inc de + ld a, [EnemyMonSpdSpclDV] + ld [de], a + inc de + push hl + ld hl, EnemyMonPPMove1 + ld b, $4 +.asm_da03 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_da03 + pop hl + ld a, $46 + ld [de], a + inc de + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + inc de + ld a, [CurPartyLevel] + ld [de], a + inc de + ld hl, EnemyMonStatus + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de -INCBIN "baserom.gbc", $113d6, $1167a - $113d6 +.asm_da29 + ld a, [IsInBattle] + dec a + jr nz, .asm_da3b + ld hl, EnemyMonMaxHPHi + ld bc, $000c + call CopyBytes + pop hl + jr .asm_da45 -TechnicalMachines: ; 0x1167a - db DYNAMICPUNCH - db HEADBUTT - db CURSE - db ROLLOUT - db ROAR - db TOXIC - db ZAP_CANNON - db ROCK_SMASH - db PSYCH_UP - db HIDDEN_POWER - db SUNNY_DAY - db SWEET_SCENT - db SNORE - db BLIZZARD - db HYPER_BEAM - db ICY_WIND - db PROTECT - db RAIN_DANCE - db GIGA_DRAIN - db ENDURE - db FRUSTRATION - db SOLARBEAM - db IRON_TAIL - db DRAGONBREATH - db THUNDER - db EARTHQUAKE - db RETURN - db DIG - db PSYCHIC_M - db SHADOW_BALL - db MUD_SLAP - db DOUBLE_TEAM - db ICE_PUNCH - db SWAGGER - db SLEEP_TALK - db SLUDGE_BOMB - db SANDSTORM - db FIRE_BLAST - db SWIFT - db DEFENSE_CURL - db THUNDERPUNCH - db DREAM_EATER - db DETECT - db REST - db ATTRACT - db THIEF - db STEEL_WING - db FIRE_PUNCH - db FURY_CUTTER - db NIGHTMARE - db CUT - db FLY - db SURF - db STRENGTH - db FLASH - db WHIRLPOOL - db WATERFALL +.asm_da3b + pop hl + ld bc, $000a + add hl, bc + ld b, $0 + call $6167 -INCBIN "baserom.gbc", $116b3, $116b7 - $116b3 +.asm_da45 + ld a, [MonType] + and $f + jr nz, .asm_da6b + ld a, [CurPartySpecies] + cp $c9 + jr nz, .asm_da6b + ld hl, PartyMon1DVs + ld a, [PartyCount] + dec a + ld bc, $0030 + call AddNTimes + ld a, $2d + call Predef + ld hl, $7a18 + ld a, $3e + rst FarCall -Function116b7: ; 0x116b7 - call Function2ed3 - call $56c1 - call Function2b74 +.asm_da6b + scf ret -; 0x116c1 - -INCBIN "baserom.gbc", $116c1, $11ce7 - $116c1 - -NameInputLower: - db "a b c d e f g h i" - db "j k l m n o p q r" - db "s t u v w x y z " - db "× ( ) : ; [ ] ", $e1, " ", $e2 - db "UPPER DEL END " -BoxNameInputLower: - db "a b c d e f g h i" - db "j k l m n o p q r" - db "s t u v w x y z " - db "é 'd 'l 'm 'r 's 't 'v 0" - db "1 2 3 4 5 6 7 8 9" - db "UPPER DEL END " -NameInputUpper: - db "A B C D E F G H I" - db "J K L M N O P Q R" - db "S T U V W X Y Z " - db "- ? ! / . , " - db "lower DEL END " -BoxNameInputUpper: - db "A B C D E F G H I" - db "J K L M N O P Q R" - db "S T U V W X Y Z " - db "× ( ) : ; [ ] ", $e1, " ", $e2 - db "- ? ! ♂ ♀ / . , &" - db "lower DEL END " +; da6d +Functionda6d: ; da6d + push bc + ld b, $4 +.asm_da70 + ld a, [hli] + and a + jr z, .asm_da8f + dec a + push hl + push de + push bc + ld hl, $5afb + ld bc, $0007 + call AddNTimes + ld de, StringBuffer1 + ld a, $10 + call FarCopyBytes + pop bc + pop de + pop hl + ld a, [$d078] -INCBIN "baserom.gbc", $11e5d, $12513 - $11e5d +.asm_da8f + ld [de], a + inc de + dec b + jr nz, .asm_da70 + pop bc + ret +; da96 +INCBIN "baserom.gbc", $da96, $dcb6 - $da96 -HalveMoney: ; 12513 -; Empty function... - ld a, $41 - ld hl, $60c7 +Functiondcb6: ; dcb6 + ld a, b + ld hl, $ad26 + ld bc, $0020 + call AddNTimes + ld b, h + ld c, l + ld hl, $0017 + add hl, bc + push hl + push bc + ld de, TempMonPP + ld bc, $0004 + call CopyBytes + pop bc + ld hl, $0002 + add hl, bc + push hl + ld de, TempMonMove1 + ld bc, $0004 + call CopyBytes + pop hl + pop de + ld a, [$cfa9] + push af + ld a, [MonType] + push af + ld b, $0 +.asm_dcec + ld a, [hli] + and a + jr z, .asm_dd18 + ld [TempMonMove1], a + ld a, $2 + ld [MonType], a + ld a, b + ld [$cfa9], a + push bc + push hl + push de + ld a, $3 + ld hl, $78ec rst FarCall + pop de + pop hl + ld a, [$d265] + ld b, a + ld a, [de] + and $c0 + add b + ld [de], a + pop bc + inc de + inc b + ld a, b + cp $4 + jr c, .asm_dcec -; Halve the player's money. - ld hl, Money - ld a, [hl] - srl a - ld [hli], a - ld a, [hl] - rra - ld [hli], a - ld a, [hl] - rra - ld [hl], a +.asm_dd18 + pop af + ld [MonType], a + pop af + ld [$cfa9], a ret -; 12527 - - -INCBIN "baserom.gbc", $12527, $125cd - $12527 +; dd21 +INCBIN "baserom.gbc", $dd21, $de6e - $dd21 -StartMenu: ; 125cd - - call Function1fbf - - ld de, SFX_MENU - call StartSFX +Functionde6e: ; de6e ld a, $1 - ld hl, $6454 + call GetSRAMBank + ld de, $ad10 + ld a, [de] + cp $14 + jp nc, $5f42 + inc a + ld [de], a + ld a, [CurPartySpecies] + ld [CurSpecies], a + ld c, a +.asm_de85 + inc de + ld a, [de] + ld b, a + ld a, c + ld c, b + ld [de], a + inc a + jr nz, .asm_de85 + call GetBaseData + call $5f47 + ld hl, PlayerName + ld de, $afa6 + ld bc, $000b + call CopyBytes + ld a, [CurPartySpecies] + ld [$d265], a + call GetPokemonName + ld de, $b082 + ld hl, StringBuffer1 + ld bc, $000b + call CopyBytes + ld hl, EnemyMonSpecies + ld de, $ad26 + ld bc, $0006 + call CopyBytes + ld hl, PlayerID + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + push de + ld a, [CurPartyLevel] + ld d, a + ld hl, $4e47 + ld a, $14 + rst FarCall + pop de + ld a, [hMultiplicand] + ld [de], a + inc de + ld a, [$ffb5] + ld [de], a + inc de + ld a, [$ffb6] + ld [de], a + inc de + xor a + ld b, $a +.asm_dee5 + ld [de], a + inc de + dec b + jr nz, .asm_dee5 + ld hl, EnemyMonAtkDefDV + ld b, $6 +.asm_deef + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_deef + ld a, $46 + ld [de], a + inc de + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + inc de + ld a, [CurPartyLevel] + ld [de], a + ld a, [CurPartySpecies] + dec a + call SetSeenAndCaughtMon + ld a, [CurPartySpecies] + cp $c9 + jr nz, .asm_df20 + ld hl, $ad3b + ld a, $2d + call Predef + ld hl, $7a18 + ld a, $3e rst FarCall - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - ld hl, .MenuDataHeader - jr z, .GotMenuData - ld hl, .ContestMenuDataHeader -.GotMenuData +.asm_df20 + ld hl, $ad28 + ld de, TempMonMove1 + ld bc, $0004 + call CopyBytes + ld hl, $ad3d + ld de, TempMonPP + ld bc, $0004 + call CopyBytes + ld b, $0 + call $5cb6 + call CloseSRAM + scf + ret +; df42 - call Function1d35 - call .SetUpMenuItems - ld a, [$d0d2] - ld [$cf88], a - call .DrawMenuAccount_ - call MenuFunc_1e7f - call .DrawBugContestStatusBox - call $2e31 - call $2e20 - ld a, $1 - ld hl, $64bf - rst $8 - call .DrawBugContestStatus - call Function485 - jr .Select +Functiondf42: ; df42 + call CloseSRAM + and a + ret +; df47 -.Reopen - call $1ad2 - call Function485 - call .SetUpMenuItems - ld a, [$d0d2] - ld [$cf88], a +Functiondf47: ; df47 + ld hl, $afa6 + ld bc, $000b + call $5f5f + ld hl, $b082 + ld bc, $000b + call $5f5f + ld hl, $ad26 + ld bc, $0020 + ld a, [$ad10] + cp $2 + ret c + push hl + call AddNTimes + dec hl + ld e, l + ld d, h + pop hl + ld a, [$ad10] + dec a + call AddNTimes + dec hl + push hl + ld a, [$ad10] + dec a + ld hl, $0000 + call AddNTimes + ld c, l + ld b, h + pop hl +.asm_df83 + ld a, [hld] + ld [de], a + dec de + dec bc + ld a, c + or b + jr nz, .asm_df83 + ret +; df8c -.Select - call .GetInput - jr c, .Exit - call .DrawMenuAccount - ld a, [$cf88] - ld [$d0d2], a - call PlayClickSFX - call $1bee - call .OpenMenu +Functiondf8c: ; df8c + ld a, [CurPartySpecies] + push af + ld hl, $6581 + ld a, $10 + rst FarCall + ld hl, $6581 + ld a, $10 + rst FarCall + ld a, [CurPartySpecies] + dec a + push af + call CheckSeenMon + pop af + push bc + call CheckCaughtMon + push bc + call $588c + pop bc + ld a, c + and a + jr nz, .asm_dfc3 + ld a, [CurPartySpecies] + dec a + ld c, a + ld d, $0 + ld hl, PokedexSeen + ld b, $0 + ld a, $3 + call Predef -; Menu items have different return functions. -; For example, saving exits the menu. - ld hl, .MenuReturns - ld e, a - ld d, 0 - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] - -.MenuReturns - dw .Reopen - dw .Exit - dw .ReturnTwo - dw .ReturnThree - dw .ReturnFour - dw .ReturnEnd - dw .ReturnRedraw +.asm_dfc3 + pop bc + ld a, c + and a + jr nz, .asm_dfd9 + ld a, [CurPartySpecies] + dec a + ld c, a + ld d, $0 + ld hl, PokedexCaught + ld b, $0 + ld a, $3 + call Predef -.Exit - ld a, [hOAMUpdate] - push af - ld a, 1 - ld [hOAMUpdate], a - call Functione5f +.asm_dfd9 pop af - ld [hOAMUpdate], a -.ReturnEnd - call Function1c07 -.ReturnEnd2 - call $2dcf - call Function485 - ret + ld [CurPartySpecies], a + ld a, [PartyCount] + dec a + ld bc, $0030 + ld hl, PartyMon1Species + call AddNTimes + ld a, [CurPartySpecies] + ld [hl], a + ld hl, PartyCount + ld a, [hl] + ld b, $0 + ld c, a + add hl, bc + ld a, $fd + ld [hl], a + ld a, [PartyCount] + dec a + ld hl, PartyMon1Nickname + call SkipNames + ld de, $6035 + call CopyName2 + ld a, [PartyCount] + dec a + ld hl, PartyMon1Happiness + ld bc, $0030 + call AddNTimes + ld a, [$c2cc] + bit 1, a + ld a, $1 + jr nz, .asm_e022 + ld a, [BaseEggSteps] -.GetInput -; Return carry on exit, and no-carry on selection. +.asm_e022 + ld [hl], a + ld a, [PartyCount] + dec a + ld hl, PartyMon1CurHP + ld bc, $0030 + call AddNTimes xor a - ld [hBGMapMode], a - call .DrawMenuAccount - call SetUpMenu - ld a, $ff - ld [MenuSelection], a -.loop - call .PrintMenuAccount - call $1f1a - ld a, [$cf73] - cp BUTTON_B - jr z, .b - cp BUTTON_A - jr z, .a - jr .loop -.a - call PlayClickSFX + ld [hli], a + ld [hl], a and a ret -.b - scf - ret -; 12691 +; e035 -.ReturnFour ; 12691 - call Function1c07 - ld a, $80 - ld [$ffa0], a - ret -; 12699 +INCBIN "baserom.gbc", $e035, $e039 - $e035 -.ReturnThree ; 12699 - call Function1c07 - ld a, $80 - ld [$ffa0], a - jr .ReturnEnd2 -; 126a2 -.ReturnTwo ; 126a2 - call Function1c07 - ld hl, $d0e9 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [$d0e8] - rst FarCall - jr .ReturnEnd2 -; 126b1 +Functione039: ; e039 + ld hl, PartyCount + ld a, [$d10b] + and a + jr z, .asm_e04a + ld a, $1 + call GetSRAMBank + ld hl, $ad10 -.ReturnRedraw ; 126b1 - call .Clear - jp .Reopen -; 126b7 +.asm_e04a + ld a, [hl] + dec a + ld [hli], a + ld a, [CurPartyMon] + ld c, a + ld b, $0 + add hl, bc + ld e, l + ld d, h + inc de +.asm_e057 + ld a, [de] + inc de + ld [hli], a + inc a + jr nz, .asm_e057 + ld hl, PartyMon1OT + ld d, $5 + ld a, [$d10b] + and a + jr z, .asm_e06d + ld hl, $afa6 + ld d, $13 -.Clear ; 126b7 - call WhiteBGMap - call $1d7d - call $2bae - call .DrawMenuAccount_ - call MenuFunc_1e7f - call .DrawBugContestStatus - call $1ad2 - call $0d90 - call $2b5c - ret -; 126d3 +.asm_e06d + ld a, [CurPartyMon] + call SkipNames + ld a, [CurPartyMon] + cp d + jr nz, .asm_e07e + ld [hl], $ff + jp $60f0 +.asm_e07e + ld d, h + ld e, l + ld bc, $000b + add hl, bc + ld bc, PartyMon1Nickname + ld a, [$d10b] + and a + jr z, .asm_e090 + ld bc, $b082 -.MenuDataHeader - db $40 ; tile backup - db 0, 10 ; start coords - db 17, 19 ; end coords - dw .MenuData - db 1 ; default selection +.asm_e090 + call CopyDataUntil + ld hl, PartyMon1Species + ld bc, $0030 + ld a, [$d10b] + and a + jr z, .asm_e0a5 + ld hl, $ad26 + ld bc, $0020 -.ContestMenuDataHeader - db $40 ; tile backup - db 2, 10 ; start coords - db 17, 19 ; end coords - dw .MenuData - db 1 ; default selection +.asm_e0a5 + ld a, [CurPartyMon] + call AddNTimes + ld d, h + ld e, l + ld a, [$d10b] + and a + jr z, .asm_e0bc + ld bc, $0020 + add hl, bc + ld bc, $afa6 + jr .asm_e0c3 -.MenuData - db %10101000 ; x padding, wrap around, start can close - dn 0, 0 ; rows, columns - dw MenuItemsList - dw .MenuString - dw .Items +.asm_e0bc + ld bc, $0030 + add hl, bc + ld bc, PartyMon1OT -.Items - dw StartMenu_Pokedex, .PokedexString, .PokedexDesc - dw StartMenu_Pokemon, .PartyString, .PartyDesc - dw StartMenu_Pack, .PackString, .PackDesc - dw StartMenu_Status, .StatusString, .StatusDesc - dw StartMenu_Save, .SaveString, .SaveDesc - dw StartMenu_Option, .OptionString, .OptionDesc - dw StartMenu_Exit, .ExitString, .ExitDesc - dw StartMenu_Pokegear, .PokegearString, .PokegearDesc - dw StartMenu_Quit, .QuitString, .QuitDesc +.asm_e0c3 + call CopyDataUntil + ld hl, PartyMon1Nickname + ld a, [$d10b] + and a + jr z, .asm_e0d2 + ld hl, $b082 -.PokedexString db "#DEX@" -.PartyString db "#MON@" -.PackString db "PACK@" -.StatusString db $52, "@" -.SaveString db "SAVE@" -.OptionString db "OPTION@" -.ExitString db "EXIT@" -.PokegearString db $24, "GEAR@" -.QuitString db "QUIT@" +.asm_e0d2 + ld bc, $000b + ld a, [CurPartyMon] + call AddNTimes + ld d, h + ld e, l + ld bc, $000b + add hl, bc + ld bc, $de83 + ld a, [$d10b] + and a + jr z, .asm_e0ed + ld bc, $b15e -.PokedexDesc db "#MON", $4e, "database@" -.PartyDesc db "Party ", $4a, $4e, "status@" -.PackDesc db "Contains", $4e, "items@" -.PokegearDesc db "Trainer's", $4e, "key device@" -.StatusDesc db "Your own", $4e, "status@" -.SaveDesc db "Save your", $4e, "progress@" -.OptionDesc db "Change", $4e, "settings@" -.ExitDesc db "Close this", $4e, "menu@" -.QuitDesc db "Quit and", $4e, "be judged.@" +.asm_e0ed + call CopyDataUntil + ld a, [$d10b] + and a + jp nz, CloseSRAM + ld a, [InLinkBattle] + and a + ret nz + ld a, $0 + call GetSRAMBank + ld hl, PartyCount + ld a, [CurPartyMon] + cp [hl] + jr z, .asm_e131 + ld hl, $a600 + ld bc, $002f + call AddNTimes + push hl + add hl, bc + pop de + ld a, [CurPartyMon] + ld b, a +.asm_e11a + push bc + push hl + ld bc, $002f + call CopyBytes + pop hl + push hl + ld bc, $002f + add hl, bc + pop de + pop bc + inc b + ld a, [PartyCount] + cp b + jr nz, .asm_e11a +.asm_e131 + jp CloseSRAM +; e134 -.OpenMenu ; 127e5 - ld a, [MenuSelection] - call .GetMenuAccountTextPointer - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] -; 127ef +Functione134: ; e134 + ld a, $1f + call GetPartyParamLocation + ld a, [hl] + ld [$001f], a + ld a, $0 + call GetPartyParamLocation + ld a, [hl] + ld [CurSpecies], a + call GetBaseData + ld a, $24 + call GetPartyParamLocation + ld d, h + ld e, l + push de + ld a, $a + call GetPartyParamLocation + ld b, $1 + call $6167 + pop de + ld a, $22 + call GetPartyParamLocation + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hl], a + ret +; e167 -.MenuString ; 127ef +Functione167: ; e167 + ld c, $0 +.asm_e169 + inc c + call $617b + ld a, [$ffb5] + ld [de], a + inc de + ld a, [$ffb6] + ld [de], a + inc de + ld a, c + cp $6 + jr nz, .asm_e169 + ret +; e17b + +Functione17b: ; e17b + push hl push de - ld a, [MenuSelection] - call .GetMenuAccountTextPointer - inc hl - inc hl - ld a, [hli] - ld d, [hl] + push bc + ld a, b + ld d, a + push hl + ld hl, BaseHP + dec hl + ld b, $0 + add hl, bc + ld a, [hl] ld e, a pop hl - call PlaceString - ret -; 12800 + push hl + ld a, c + cp $6 + jr nz, .asm_e193 + dec hl + dec hl -.MenuDesc ; 12800 +.asm_e193 + sla c + ld a, d + and a + jr z, .asm_e1a5 + add hl, bc push de - ld a, [MenuSelection] - cp $ff - jr z, .none - call .GetMenuAccountTextPointer - inc hl - inc hl - inc hl - inc hl - ld a, [hli] - ld d, [hl] + ld a, [hld] ld e, a - pop hl - call PlaceString - ret -.none + ld d, [hl] + callba GetSquareRoot pop de - ret -; 12819 - -.GetMenuAccountTextPointer ; 12819 - ld e, a - ld d, 0 - ld hl, $cf97 +.asm_e1a5 + srl c + pop hl + push bc + ld bc, $000b + add hl, bc + pop bc + ld a, c + cp $2 + jr z, .asm_e1e3 + cp $3 + jr z, .asm_e1ea + cp $4 + jr z, .asm_e1ef + cp $5 + jr z, .asm_e1f7 + cp $6 + jr z, .asm_e1f7 + push bc + ld a, [hl] + swap a + and $1 + add a + add a + add a + ld b, a ld a, [hli] - ld h, [hl] - ld l, a - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - ret -; 12829 - + and $1 + add a + add a + add b + ld b, a + ld a, [hl] + swap a + and $1 + add a + add b + ld b, a + ld a, [hl] + and $1 + add b + pop bc + jr .asm_e1fb -.SetUpMenuItems ; 12829 - xor a - ld [$cf76], a - call .FillMenuList - - ld hl, StatusFlags - bit 0, [hl] - jr z, .no_pokedex - ld a, 0 ; pokedex - call .AppendMenuList -.no_pokedex +.asm_e1e3 + ld a, [hl] + swap a + and $f + jr .asm_e1fb - ld a, [PartyCount] - and a - jr z, .no_pokemon - ld a, 1 ; pokemon - call .AppendMenuList -.no_pokemon +.asm_e1ea + ld a, [hl] + and $f + jr .asm_e1fb - ld a, [InLinkBattle] - and a - jr nz, .no_pack - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - jr nz, .no_pack - ld a, 2 ; pack - call .AppendMenuList -.no_pack +.asm_e1ef + inc hl + ld a, [hl] + swap a + and $f + jr .asm_e1fb - ld hl, $d957 - bit 7, [hl] - jr z, .no_pokegear - ld a, 7 ; pokegear - call .AppendMenuList -.no_pokegear +.asm_e1f7 + inc hl + ld a, [hl] + and $f - ld a, 3 ; status - call .AppendMenuList +.asm_e1fb + ld d, $0 + add e + ld e, a + jr nc, .asm_e202 + inc d - ld a, [InLinkBattle] - and a - jr nz, .no_save - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - ld a, 8 ; quit - jr nz, .write - ld a, 4 ; save -.write - call .AppendMenuList -.no_save +.asm_e202 + sla e + rl d + srl b + srl b + ld a, b + add e + jr nc, .asm_e20f + inc d - ld a, 5 ; option - call .AppendMenuList - ld a, 6 ; exit - call .AppendMenuList +.asm_e20f + ld [$ffb6], a + ld a, d + ld [$ffb5], a + xor a + ld [hMultiplicand], a + ld a, [CurPartyLevel] + ld [hMultiplier], a + call Multiply + ld a, [hMultiplicand] + ld [hProduct], a + ld a, [$ffb5] + ld [hMultiplicand], a + ld a, [$ffb6] + ld [$ffb5], a + ld a, $64 + ld [hMultiplier], a + ld a, $3 + ld b, a + call Divide ld a, c - ld [MenuItemsList], a - ret -; 1288d + cp $1 + ld a, $5 + jr nz, .asm_e24e + ld a, [CurPartyLevel] + ld b, a + ld a, [$ffb6] + add b + ld [$ffb6], a + jr nc, .asm_e24c + ld a, [$ffb5] + inc a + ld [$ffb5], a +.asm_e24c + ld a, $a -.FillMenuList ; 1288d - xor a - ld hl, MenuItemsList - ld [hli], a - ld a, $ff - ld bc, $000f - call ByteFill - ld de, MenuItemsList + 1 - ld c, 0 - ret -; 128a0 +.asm_e24e + ld b, a + ld a, [$ffb6] + add b + ld [$ffb6], a + jr nc, .asm_e25b + ld a, [$ffb5] + inc a + ld [$ffb5], a -.AppendMenuList ; 128a0 - ld [de], a - inc de - inc c - ret -; 128a4 +.asm_e25b + ld a, [$ffb5] + cp $4 + jr nc, .asm_e26b + cp $3 + jr c, .asm_e273 + ld a, [$ffb6] + cp $e8 + jr c, .asm_e273 -.DrawMenuAccount_ ; 128a4 - jp .DrawMenuAccount -; 128a7 +.asm_e26b + ld a, $3 + ld [$ffb5], a + ld a, $e7 + ld [$ffb6], a -.PrintMenuAccount ; 128a7 - call .IsMenuAccountOn - ret z - call .DrawMenuAccount - decoord 0, 14 - jp .MenuDesc -; 128b4 +.asm_e273 + pop bc + pop de + pop hl + ret +; e277 -.DrawMenuAccount ; 128b4 - call .IsMenuAccountOn - ret z - hlcoord 0, 13 - ld bc, $050a - call ClearBox - hlcoord 0, 13 - ld b, 3 - ld c, 8 - jp TextBoxPalette -; 128cb +Functione277: ; e277 + push de + push bc + xor a + ld [MonType], a + call $588c + jr nc, .asm_e2b0 + ld hl, PartyMon1Nickname + ld a, [PartyCount] + dec a + ld [CurPartyMon], a + call SkipNames + ld d, h + ld e, l + pop bc + ld a, b + ld b, $0 + push bc + push de + push af + ld a, [CurItem] + and a + jr z, .asm_e2e1 + ld a, [CurPartyMon] + ld hl, PartyMon1Item + ld bc, $0030 + call AddNTimes + ld a, [CurItem] + ld [hl], a + jr .asm_e2e1 -.IsMenuAccountOn ; 128cb - ld a, [Options2] - and 1 - ret -; 128d1 +.asm_e2b0 + ld a, [CurPartySpecies] + ld [TempEnemyMonSpecies], a + callab LoadEnemyMon + call $5e6e + jp nc, $63d4 + ld a, $2 + ld [MonType], a + xor a + ld [CurPartyMon], a + ld de, $d050 + pop bc + ld a, b + ld b, $1 + push bc + push de + push af + ld a, [CurItem] + and a + jr z, .asm_e2e1 + ld a, [CurItem] + ld [$ad27], a -.DrawBugContestStatusBox ; 128d1 - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - ret z - ld a, $9 - ld hl, $4bdc +.asm_e2e1 + ld a, [CurPartySpecies] + ld [$d265], a + ld [TempEnemyMonSpecies], a + call GetPokemonName + ld hl, StringBuffer1 + ld de, $d050 + ld bc, $000b + call CopyBytes + pop af + and a + jp z, $6390 + pop de + pop bc + pop hl + push bc + push hl + ld a, [ScriptBank] + call GetFarHalfword + ld bc, $000b + ld a, [ScriptBank] + call FarCopyBytes + pop hl + inc hl + inc hl + ld a, [ScriptBank] + call GetFarHalfword + pop bc + ld a, b + and a + push de + push bc + jr nz, .asm_e35e + push hl + ld a, [CurPartyMon] + ld hl, PartyMon1OT + call SkipNames + ld d, h + ld e, l + pop hl +.asm_e32f + ld a, [ScriptBank] + call GetFarByte + ld [de], a + inc hl + inc de + cp $50 + jr nz, .asm_e32f + ld a, [ScriptBank] + call GetFarByte + ld b, a + push bc + ld a, [CurPartyMon] + ld hl, PartyMon1ID + ld bc, $0030 + call AddNTimes + ld a, $3 + ld [hli], a + ld [hl], $e9 + pop bc + ld a, $13 + ld hl, $5ba3 rst FarCall - ret -; 128de + jr .asm_e3b2 -.DrawBugContestStatus ; 128de - ld hl, StatusFlags2 - bit 2, [hl] ; bug catching contest - jr nz, .contest - ret -.contest - ld a, $9 - ld hl, $4be7 +.asm_e35e + ld a, $1 + call GetSRAMBank + ld de, $afa6 +.asm_e366 + ld a, [ScriptBank] + call GetFarByte + ld [de], a + inc hl + inc de + cp $50 + jr nz, .asm_e366 + ld a, [ScriptBank] + call GetFarByte + ld b, a + ld hl, $ad2c + call RNG + ld [hli], a + call RNG + ld [hl], a + call CloseSRAM + ld a, $13 + ld hl, $5b92 rst FarCall - ret -; 128ed - + jr .asm_e3b2 -StartMenu_Exit: ; 128ed -; Exit the menu. - - ld a, 1 - ret -; 128f0 + pop de + pop bc + push bc + push de + ld a, b + and a + jr z, .asm_e3a0 + ld a, $13 + ld hl, $5b83 + rst FarCall + jr .asm_e3a6 +.asm_e3a0 + ld a, $13 + ld hl, $5b49 + rst FarCall -StartMenu_Quit: ; 128f0 -; Retire from the bug catching contest. +.asm_e3a6 + ld a, $13 + ld hl, $5b3b + rst FarCall + pop de + jr c, .asm_e3b2 + call $63de - ld hl, .EndTheContestText - call $6cf5 - jr c, .asm_12903 - ld a, $4 - ld hl, $760b - call $31cf - ld a, 4 - ret -.asm_12903 - ld a, 0 +.asm_e3b2 + pop bc + pop de + ld a, b + and a + ret z + ld hl, $63d9 + call PrintText + ld a, $1 + call GetSRAMBank + ld hl, $d050 + ld de, $b082 + ld bc, $000b + call CopyBytes + call CloseSRAM + ld b, $1 ret +; e3d4 -.EndTheContestText - text_jump UnknownText_0x1c1a6c, BANK(UnknownText_0x1c1a6c) - db "@" -; 1290b +Functione3d4: ; e3d4 + pop bc + pop de + ld b, $2 + ret +; e3d9 +INCBIN "baserom.gbc", $e3d9, $e3de - $e3d9 -StartMenu_Save: ; 1290b -; Save the game. - call $2879 - ld a, $5 - ld hl, $4a1a +Functione3de: ; e3de + push de + call $1d6e + call Function2ed3 + pop de + push de + ld b, $0 + ld a, $4 + ld hl, $56c1 + rst FarCall + pop hl + ld de, StringBuffer1 + call InitString + ld a, $4 + ld hl, $2b4d rst FarCall - jr nc, .asm_12919 - ld a, 0 - ret -.asm_12919 - ld a, 1 ret -; 1291c - +; e3fd -StartMenu_Option: ; 1291c -; Game options. +INCBIN "baserom.gbc", $e3fd, $e538 - $e3fd - call FadeToMenu - callba OptionsMenu - ld a, 6 - ret -; 12928 +Functione538: ; e538 + ld hl, PartyMon1CurHP + ld de, $0030 + ld b, $0 +.asm_e540 + ld a, [CurPartyMon] + cp b + jr z, .asm_e54b + ld a, [hli] + or [hl] + jr nz, .asm_e557 + dec hl -StartMenu_Status: ; 12928 -; Player status. +.asm_e54b + inc b + ld a, [PartyCount] + cp b + jr z, .asm_e555 + add hl, de + jr .asm_e540 - call FadeToMenu - ld a, $9 - ld hl, $5105 - rst FarCall - call $2b3c - ld a, 0 +.asm_e555 + scf ret -; 12937 - -StartMenu_Pokedex: ; 12937 - - ld a, [PartyCount] +.asm_e557 and a - jr z, .asm_12949 - - call FadeToMenu - ld a, $10 - ld hl, $4000 - rst FarCall - call $2b3c - -.asm_12949 - ld a, 0 ret -; 1294c - +; e559 -StartMenu_Pokegear: ; 1294c +INCBIN "baserom.gbc", $e559, $e58b - $e559 - call FadeToMenu - ld a, $24 - ld hl, $4b8d - rst FarCall - call $2b3c - ld a, 0 +ClearPCItemScreen: ; e58b + call Function2ed3 + xor a + ld [hBGMapMode], a + call WhiteBGMap + call ClearSprites + ld hl, TileMap + ld bc, 18 * 20 + ld a, " " + call ByteFill + hlcoord 0,0 + ld bc, $0a12 + call TextBox + hlcoord 0,12 + ld bc, $0412 + call TextBox + call Function3200 + call Function32f9 ; load regular palettes? ret -; 1295b +; 0xe5bb +INCBIN "baserom.gbc", $e5bb, $e6ce - $e5bb -StartMenu_Pack: ; 1295b - call FadeToMenu - ld a, $4 +Functione6ce: ; e6ce + ld a, [$df9c] + and a + jr z, .asm_e6ea + ld [$d265], a + ld a, $33 + ld hl, $40c7 + rst FarCall + ld a, $33 ld hl, $4000 rst FarCall - ld a, [$cf66] - and a - jr nz, .asm_12970 - call $2b3c - ld a, 0 - ret -.asm_12970 - call $2b4d - ld a, 4 - ret -; 12976 + ld bc, $0e07 + call $1dd2 + ret c +.asm_e6ea + call $66fd + ld a, [TempEnemyMonSpecies] + ld [$d265], a + call GetPokemonName + ld hl, $671d + call PrintText + ret +; e6fd -StartMenu_Pokemon: ; 12976 +Functione6fd: ; e6fd + ld a, [TempEnemyMonSpecies] + ld [CurSpecies], a + ld [CurPartySpecies], a + call GetBaseData + xor a + ld bc, $0030 + ld hl, $df9c + call ByteFill + xor a + ld [MonType], a + ld hl, $df9c + jp $5906 +; e71d - ld a, [PartyCount] - and a - jr z, .return +INCBIN "baserom.gbc", $e71d, $e722 - $e71d - call FadeToMenu -.choosemenu - xor a - ld [PartyMenuActionText], a ; Choose a POKéMON. - call WhiteBGMap +_DoItemEffect: ; e722 + ld a, [CurItem] + ld [$d265], a + call GetItemName + call CopyName1 + ld a, 1 + ld [$d0ec], a + ld a, [CurItem] + dec a + ld hl, ItemEffects + rst JumpTable + ret +; e73c -.menu - ld a, $14 - ld hl, $404f - rst FarCall ; load gfx - ld a, $14 - ld hl, $4405 - rst FarCall ; setup menu? - ld a, $14 - ld hl, $43e0 - rst FarCall ; load menu pokémon sprites -.menunoreload - callba WritePartyMenuTilemap - callba PrintPartyMenuText - call WaitBGMap - call Function32f9 ; load regular palettes? - call DelayFrame - callba PartyMenuSelect - jr c, .return ; if cancelled or pressed B +ItemEffects: ; e73c + dw MasterBall + dw UltraBall + dw Brightpowder + dw GreatBall + dw PokeBall + dw Item06 + dw Bicycle + dw MoonStone + dw Antidote + dw BurnHeal + dw IceHeal + dw Awakening + dw ParlyzHeal + dw FullRestore + dw MaxPotion + dw HyperPotion + dw SuperPotion + dw Potion + dw EscapeRope + dw Repel + dw MaxElixer + dw FireStone + dw Thunderstone + dw WaterStone + dw Item19 + dw HpUp + dw Protein + dw Iron + dw Carbos + dw LuckyPunch + dw Calcium + dw RareCandy + dw XAccuracy + dw LeafStone + dw MetalPowder + dw Nugget + dw PokeDoll + dw FullHeal + dw Revive + dw MaxRevive + dw GuardSpec + dw SuperRepel + dw MaxRepel + dw DireHit + dw Item2D + dw FreshWater + dw SodaPop + dw Lemonade + dw XAttack + dw Item32 + dw XDefend + dw XSpeed + dw XSpecial + dw CoinCase + dw Itemfinder + dw Item38 + dw ExpShare + dw OldRod + dw GoodRod + dw SilverLeaf + dw SuperRod + dw PpUp + dw Ether + dw MaxEther + dw Elixer + dw RedScale + dw Secretpotion + dw SSTicket + dw MysteryEgg + dw ClearBell + dw SilverWing + dw MoomooMilk + dw QuickClaw + dw Psncureberry + dw GoldLeaf + dw SoftSand + dw SharpBeak + dw Przcureberry + dw BurntBerry + dw IceBerry + dw PoisonBarb + dw KingsRock + dw BitterBerry + dw MintBerry + dw RedApricorn + dw Tinymushroom + dw BigMushroom + dw Silverpowder + dw BluApricorn + dw Item5A + dw AmuletCoin + dw YlwApricorn + dw GrnApricorn + dw CleanseTag + dw MysticWater + dw Twistedspoon + dw WhtApricorn + dw Blackbelt + dw BlkApricorn + dw Item64 + dw PnkApricorn + dw Blackglasses + dw Slowpoketail + dw PinkBow + dw Stick + dw SmokeBall + dw Nevermeltice + dw Magnet + dw Miracleberry + dw Pearl + dw BigPearl + dw Everstone + dw SpellTag + dw Ragecandybar + dw GsBall + dw BlueCard + dw MiracleSeed + dw ThickClub + dw FocusBand + dw Item78 + dw Energypowder + dw EnergyRoot + dw HealPowder + dw RevivalHerb + dw HardStone + dw LuckyEgg + dw CardKey + dw MachinePart + dw EggTicket + dw LostItem + dw Stardust + dw StarPiece + dw BasementKey + dw Pass + dw Item87 + dw Item88 + dw Item89 + dw Charcoal + dw BerryJuice + dw ScopeLens + dw Item8D + dw Item8E + dw MetalCoat + dw DragonFang + dw Item91 + dw Leftovers + dw Item93 + dw Item94 + dw Item95 + dw Mysteryberry + dw DragonScale + dw BerserkGene + dw Item99 + dw Item9A + dw Item9B + dw SacredAsh + dw HeavyBall + dw FlowerMail + dw LevelBall + dw LureBall + dw FastBall + dw ItemA2 + dw LightBall + dw FriendBall + dw MoonBall + dw LoveBall + dw NormalBox + dw GorgeousBox + dw SunStone + dw PolkadotBow + dw ItemAB + dw UpGrade + dw Berry + dw GoldBerry + dw Squirtbottle + dw ItemB0 + dw ParkBall + dw RainbowWing + dw ItemB3 +; e8a2 - call PokemonActionSubmenu - cp 3 - jr z, .menu - cp 0 - jr z, .choosemenu - cp 1 - jr z, .menunoreload - cp 2 - jr z, .quit +INCLUDE "items/item_effects.asm" -.return - call $2b3c - ld a, 0 - ret -.quit - ld a, b - push af - call $2b4d - pop af - ret -; 129d5 +INCBIN "baserom.gbc", $f780, $f881 - $f780 -INCBIN "baserom.gbc", $129d5, $12a60 - $129d5 +Functionf881: ; f881 + push bc + ld a, [de] + ld [$ffb6], a + xor a + ld [hProduct], a + ld [hMultiplicand], a + ld [$ffb5], a + ld a, $5 + ld [hMultiplier], a + ld b, $4 + call Divide + ld a, [hl] + ld b, a + swap a + and $f + srl a + srl a + ld c, a + and a + jr z, .asm_f8b6 +.asm_f8a3 + ld a, [$ffb6] + cp $8 + jr c, .asm_f8ab + ld a, $7 +.asm_f8ab + add b + ld b, a + ld a, [$d265] + dec a + jr z, .asm_f8b6 + dec c + jr nz, .asm_f8a3 -CantUseItem: ; 12a60 - ld hl, CantUseItemText - call $2012 +.asm_f8b6 + ld [hl], b + pop bc ret -; 12a67 - -CantUseItemText: ; 12a67 - text_jump UnknownText_0x1c1b03, BANK(UnknownText_0x1c1b03) - db "@" -; 12a6c +; f8b9 +INCBIN "baserom.gbc", $f8b9, $f8ec - $f8b9 -PartyMonItemName: ; 12a6c - ld a, [CurItem] - ld [$d265], a - call GetItemName - call CopyName1 - ret -; 12a79 +Functionf8ec: ; f8ec + ld a, [StringBuffer1] + push af + ld a, [$d074] + push af + ld a, [MonType] + and a + ld hl, PartyMon1Move1 + ld bc, $0030 + jr z, .asm_f91a + ld hl, OTPartyMon1Move1 + dec a + jr z, .asm_f91a + ld hl, TempMonMove1 + dec a + jr z, .asm_f915 + ld hl, TempMonMove1 + dec a + jr z, .asm_f915 + ld hl, BattleMonMove1 -CancelPokemonAction: ; 12a79 - ld a, $14 - ld hl, $4405 - rst FarCall - ld a, $23 - ld hl, $6a71 - rst FarCall - ld a, 1 - ret -; 12a88 +.asm_f915 + call $7969 + jr .asm_f91d +.asm_f91a + call $7963 -PokemonActionSubmenu: ; 12a88 - hlcoord 1, 15 - ld bc, $0212 ; box size - call ClearBox - ld a, $9 - ld hl, $4d19 - rst FarCall - call $389c - ld a, [MenuSelection] - ld hl, .Actions - ld de, 3 - call IsInArray - jr nc, .nothing +.asm_f91d + ld a, [hl] + dec a + push hl + ld hl, $5b00 + ld bc, $0007 + call AddNTimes + ld a, $10 + call GetFarByte + ld b, a + ld de, StringBuffer1 + ld [de], a + pop hl + push bc + ld bc, $0015 + ld a, [MonType] + cp $4 + jr nz, .asm_f942 + ld bc, $0006 - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] +.asm_f942 + add hl, bc + ld a, [hl] + and $c0 + pop bc + or b + ld hl, $d074 + ld [hl], a + xor a + ld [$d265], a + ld a, b + call $7881 + ld a, [hl] + and $3f + ld [$d265], a + pop af + ld [$d074], a + pop af + ld [StringBuffer1], a + ret +; f963 -.nothing - ld a, 0 +Functionf963: ; f963 + ld a, [CurPartyMon] + call AddNTimes + ld a, [$cfa9] + ld c, a + ld b, $0 + add hl, bc ret +; f971 -.Actions - dbw $01, $6e1b - dbw $02, $6e30 - dbw $03, $6ebd - dbw $04, $6e6a - dbw $06, $6e55 - dbw $07, $6e7f - dbw $08, $6ed1 - dbw $09, $6ea9 - dbw $0a, $6ee6 - dbw $0d, $6ee6 - dbw $0b, $6f26 - dbw $05, $6e94 - dbw $0c, $6f3b - dbw $0e, $6f50 - dbw $0f, OpenPartyStats - dbw $10, SwitchPartyMons - dbw $11, GiveTakePartyMonItem - dbw $12, CancelPokemonAction - dbw $13, $6fba ; move - dbw $14, $6d45 ; mail -; 12aec +INCBIN "baserom.gbc", $f971, $f9ea - $f971 -SwitchPartyMons: ; 12aec +Functionf9ea: ; f9ea + ld a, $2 + call GetPartyParamLocation + ld a, [$d262] + ld b, a + ld c, $4 +.asm_f9f5 + ld a, [hli] + cp b + jr z, .asm_f9fe + dec c + jr nz, .asm_f9f5 + and a + ret -; Don't try if there's nothing to switch! - ld a, [PartyCount] - cp 2 - jr c, .DontSwitch +.asm_f9fe + ld hl, $7a06 + call PrintText + scf + ret +; fa06 - ld a, [CurPartyMon] - inc a - ld [$d0e3], a +INCBIN "baserom.gbc", $fa06, $fa0b - $fa06 - ld a, $23 - ld hl, $6a8c - rst FarCall - ld a, $14 - ld hl, $442d - rst FarCall - ld a, 4 - ld [PartyMenuActionText], a - callba WritePartyMenuTilemap - callba PrintPartyMenuText +SECTION "bank4",DATA,BANK[$4] - hlcoord 0, 1 - ld bc, 20 * 2 - ld a, [$d0e3] - dec a - call AddNTimes - ld [hl], "▷" - call WaitBGMap - call Function32f9 +Function10000: ; 10000 + ld hl, Options + set 4, [hl] + call $468a +.asm_10008 + call Functiona57 + ld a, [$cf63] + bit 7, a + jr nz, .asm_1001a + call $4026 call DelayFrame + jr .asm_10008 - callba PartyMenuSelect - bit 1, b - jr c, .DontSwitch +.asm_1001a + ld a, [$cf65] + ld [$d0d6], a + ld hl, Options + res 4, [hl] + ret +; 10026 - ld a, $14 - ld hl, $4f12 - rst FarCall +Function10026: ; 10026 + ld a, [$cf63] + ld hl, $4030 + call $486b + jp [hl] +; 10030 - xor a - ld [PartyMenuActionText], a +INCBIN "baserom.gbc", $10030, $1068a - $10030 - ld a, $14 - ld hl, $404f - rst FarCall - ld a, $14 - ld hl, $4405 - rst FarCall - ld a, $14 - ld hl, $43e0 - rst FarCall - ld a, 1 +Function1068a: ; 1068a + xor a + ld [$cf63], a + ld a, [$d0d6] + and $3 + ld [$cf65], a + inc a + add a + dec a + ld [$cf64], a + xor a + ld [$cf66], a + xor a + ld [$d0e3], a ret +; 106a5 -.DontSwitch +Function106a5: ; 106a5 xor a - ld [PartyMenuActionText], a - call CancelPokemonAction + ld [hBGMapMode], a + ld [$cf63], a + ld [$cf64], a + ld [$cf65], a + ld [$cf66], a + ld [$d0e3], a + call $4955 + call $4a40 ret -; 12b60 +; 106be +Function106be: ; 106be +.asm_106be + call $46c7 + call $476f + jr c, .asm_106be + ret +; 106c7 -GiveTakePartyMonItem: ; 12b60 - -; Eggs can't hold items! - ld a, [CurPartySpecies] - cp EGG - jr z, .asm_12ba6 +Function106c7: ; 106c7 + ld a, [$cf63] + ld hl, $46d1 + call $486b + jp [hl] +; 106d1 - ld hl, GiveTakeItemMenuData - call Function1d35 - call Function1d81 - call Function1c07 - jr c, .asm_12ba6 +INCBIN "baserom.gbc", $106d1, $1076f - $106d1 - call $389c - ld hl, StringBuffer1 - ld de, $d050 - ld bc, $b - call CopyBytes - ld a, [$cfa9] - cp 1 - jr nz, .asm_12ba0 - call $1d6e - call ClearPalettes - call Function12ba9 - call ClearPalettes - call $0e58 - call Function1c07 - ld a, 0 +Function1076f: ; 1076f + ld hl, $cf73 + ld a, [hl] + and $1 + jr nz, .asm_10788 + ld a, [hl] + and $2 + jr nz, .asm_1078f + ld a, [hl] + and $20 + jr nz, .asm_10795 + ld a, [hl] + and $10 + jr nz, .asm_107a8 + scf ret -.asm_12ba0 - call TakePartyItem - ld a, 3 +.asm_10788 + ld a, $1 + ld [$cf66], a + and a ret -.asm_12ba6 - ld a, 3 +.asm_1078f + xor a + ld [$cf66], a + and a ret -; 12ba9 - -Function12ba9: ; 12ba9 +.asm_10795 + ld a, [$cf63] + dec a + and $3 + ld [$cf63], a + push de + ld de, $0062 + call StartSFX + pop de + scf + ret - ld a, $4 - ld hl, $46a5 - rst FarCall +.asm_107a8 + ld a, [$cf63] + inc a + and $3 + ld [$cf63], a + push de + ld de, $0062 + call StartSFX + pop de + scf + ret +; 107bb -.loop - ld a, $4 - ld hl, $46be - rst FarCall +INCBIN "baserom.gbc", $107bb, $1086b - $107bb - ld a, [$cf66] - and a - jr z, .quit - ld a, [$cf65] - cp 2 - jr z, .next - - call CheckTossableItem - ld a, [$d142] - and a - jr nz, .next - - call Function12bd9 - jr .quit - -.next - ld hl, CantBeHeldText - call $1d67 - jr .loop - -.quit +Function1086b: ; 1086b + ld e, a + ld d, $0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a ret -; 12bd9 - +; 10874 -Function12bd9: ; 12bd9 +INCBIN "baserom.gbc", $10874, $1089d - $10874 - call SpeechTextBox - call PartyMonItemName - call GetPartyItemLocation - ld a, [hl] - and a - jr z, .asm_12bf4 - push hl - ld d, a - ld a, $2e - ld hl, $5e76 - rst FarCall - pop hl - jr c, .asm_12c01 - ld a, [hl] - jr .asm_12c08 +Function1089d: ; 1089d + ld a, [$cf65] + and $3 + ld e, a + ld d, $0 + ld a, [BattleType] + cp $3 + jr z, .asm_108b3 + ld a, [PlayerGender] + bit 0, a + jr nz, .asm_108c5 -.asm_12bf4 - call $6cea - ld hl, MadeHoldText - call $1d67 - call GivePartyItem +.asm_108b3 + ld hl, $48cc + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + ld hl, $9500 + ld bc, $040f + call Functioneba ret -.asm_12c01 - ld hl, PleaseRemoveMailText - call $1d67 +.asm_108c5 + ld a, $12 + ld hl, $4e81 + rst FarCall ret +; 108cc -.asm_12c08 - ld [$d265], a - call GetItemName - ld hl, SwitchAlreadyHoldingText - call $6cf5 - jr c, .asm_12c4b +INCBIN "baserom.gbc", $108cc, $10955 - $108cc - call $6cea - ld a, [$d265] - push af - ld a, [CurItem] - ld [$d265], a - pop af - ld [CurItem], a - call $6cdf - jr nc, .asm_12c3c - ld hl, TookAndMadeHoldText - call $1d67 - ld a, [$d265] - ld [CurItem], a - call GivePartyItem +Function10955: ; 10955 + call WhiteBGMap + call ClearTileMap + call ClearSprites + call DisableLCD + ld hl, $4b16 + ld de, VTiles2 + ld bc, $0600 + ld a, $4 + call FarCopyBytes + ld hl, $c4b4 + ld bc, $00dc + ld a, $24 + call ByteFill + ld hl, $c4b9 + ld bc, $0b0f + call ClearBox + ld hl, TileMap + ld a, $28 + ld c, $14 +.asm_1098a + ld [hli], a + inc a + dec c + jr nz, .asm_1098a + call $49bb + call $49a5 + ld hl, $c590 + ld bc, $0412 + call TextBox + call EnableLCD + call $489d ret +; 109a5 -.asm_12c3c - ld a, [$d265] - ld [CurItem], a - call $6cdf - ld hl, ItemStorageIsFullText - call $1d67 - -.asm_12c4b +Function109a5: ; 109a5 + ld hl, $c4dc + ld a, $50 + ld de, $000f + ld b, $3 +.asm_109af + ld c, $5 +.asm_109b1 + ld [hli], a + inc a + dec c + jr nz, .asm_109b1 + add hl, de + dec b + jr nz, .asm_109af ret -; 12c4c +; 109bb - -GivePartyItem: ; 12c4c - - call GetPartyItemLocation - ld a, [CurItem] - ld [hl], a +Function109bb: ; 109bb + ld a, [$cf65] ld d, a - ld a, $2e - ld hl, $5e76 - rst FarCall - jr nc, .asm_12c5f - call $6cfe - -.asm_12c5f + swap a + sub d + ld d, $0 + ld e, a + ld hl, $49e1 + add hl, de + ld d, h + ld e, l + ld hl, $c52c + ld c, $3 +.asm_109d0 + ld b, $5 +.asm_109d2 + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_109d2 + ld a, c + ld c, $f + add hl, bc + ld c, a + dec c + jr nz, .asm_109d0 ret -; 12c60 - +; 109e1 -TakePartyItem: ; 12c60 - - call SpeechTextBox - call GetPartyItemLocation - ld a, [hl] - and a - jr z, .asm_12c8c +INCBIN "baserom.gbc", $109e1, $10a40 - $109e1 - ld [CurItem], a - call $6cdf - jr nc, .asm_12c94 - ld a, $2e - ld hl, $5e76 - rst FarCall - call GetPartyItemLocation - ld a, [hl] - ld [$d265], a - ld [hl], NO_ITEM - call GetItemName - ld hl, TookFromText - call $1d67 - jr .asm_12c9a +Function10a40: ; 10a40 + call WaitBGMap + ld b, $14 + call GetSGBLayout + call Function32f9 + call DelayFrame + ret +; 10a4f -.asm_12c8c - ld hl, IsntHoldingAnythingText - call $1d67 - jr .asm_12c9a +INCBIN "baserom.gbc", $10a4f, $10b16 - $10a4f -.asm_12c94 - ld hl, ItemStorageIsFullText - call $1d67 +PackGFX: +INCBIN "gfx/misc/pack.2bpp" -.asm_12c9a +Function113d6: ; 113d6 + call $54dd ret -; 12c9b - - -GiveTakeItemMenuData: ; 12c9b - db %01010000 - db 12, 12 ; start coords - db 17, 19 ; end coords - dw .Items - db 1 ; default option +; 113da -.Items - db %10000000 ; x padding - db 2 ; # items - db "GIVE@" - db "TAKE@" -; 12caf +Function113da: ; 113da + xor a + ld [$dc2d], a + ld [$dc3a], a + ld [$dc1c], a + ret +; 113e5 +INCBIN "baserom.gbc", $113e5, $114dd - $113e5 -TookAndMadeHoldText: ; 12caf - text_jump UnknownText_0x1c1b2c, BANK(UnknownText_0x1c1b2c) - db "@" -; 12cb4 -MadeHoldText: ; 12cb4 - text_jump UnknownText_0x1c1b57, BANK(UnknownText_0x1c1b57) - db "@" -; 12cb9 +Function114dd: ; 114dd + call UpdateTime + ld hl, $dc23 + call $5621 + ret +; 114e7 -PleaseRemoveMailText: ; 12cb9 - text_jump UnknownText_0x1c1b6f, BANK(UnknownText_0x1c1b6f) - db "@" -; 12cbe +INCBIN "baserom.gbc", $114e7, $11621 - $114e7 -IsntHoldingAnythingText: ; 12cbe - text_jump UnknownText_0x1c1b8e, BANK(UnknownText_0x1c1b8e) - db "@" -; 12cc3 -ItemStorageIsFullText: ; 12cc3 - text_jump UnknownText_0x1c1baa, BANK(UnknownText_0x1c1baa) - db "@" -; 12cc8 +Function11621: ; 11621 + ld a, [CurDay] + ld [hl], a + ret +; 11626 -TookFromText: ; 12cc8 - text_jump UnknownText_0x1c1bc4, BANK(UnknownText_0x1c1bc4) - db "@" -; 12ccd +INCBIN "baserom.gbc", $11626, $1167a - $11626 -SwitchAlreadyHoldingText: ; 12ccd - text_jump UnknownText_0x1c1bdc, BANK(UnknownText_0x1c1bdc) - db "@" -; 12cd2 +TechnicalMachines: ; 0x1167a + db DYNAMICPUNCH + db HEADBUTT + db CURSE + db ROLLOUT + db ROAR + db TOXIC + db ZAP_CANNON + db ROCK_SMASH + db PSYCH_UP + db HIDDEN_POWER + db SUNNY_DAY + db SWEET_SCENT + db SNORE + db BLIZZARD + db HYPER_BEAM + db ICY_WIND + db PROTECT + db RAIN_DANCE + db GIGA_DRAIN + db ENDURE + db FRUSTRATION + db SOLARBEAM + db IRON_TAIL + db DRAGONBREATH + db THUNDER + db EARTHQUAKE + db RETURN + db DIG + db PSYCHIC_M + db SHADOW_BALL + db MUD_SLAP + db DOUBLE_TEAM + db ICE_PUNCH + db SWAGGER + db SLEEP_TALK + db SLUDGE_BOMB + db SANDSTORM + db FIRE_BLAST + db SWIFT + db DEFENSE_CURL + db THUNDERPUNCH + db DREAM_EATER + db DETECT + db REST + db ATTRACT + db THIEF + db STEEL_WING + db FIRE_PUNCH + db FURY_CUTTER + db NIGHTMARE + db CUT + db FLY + db SURF + db STRENGTH + db FLASH + db WHIRLPOOL + db WATERFALL -CantBeHeldText: ; 12cd2 - text_jump UnknownText_0x1c1c09, BANK(UnknownText_0x1c1c09) - db "@" -; 12cd7 +INCBIN "baserom.gbc", $116b3, $116b7 - $116b3 +Function116b7: ; 0x116b7 + call Function2ed3 + call $56c1 + call Function2b74 + ret +; 0x116c1 -GetPartyItemLocation: ; 12cd7 +Function116c1: ; 116c1 + ld hl, PlayerSDefLevel + ld [hl], e + inc hl + ld [hl], d + ld hl, EnemyAtkLevel + ld [hl], b + ld hl, Options + ld a, [hl] push af - ld a, PartyMon1Item - PartyMon1 - call GetPartyParamLocation + set 4, [hl] + ld a, [$ffde] + push af + xor a + ld [$ffde], a + ld a, [$ffaa] + push af + ld a, $1 + ld [$ffaa], a + call $56f8 + call DelayFrame +.asm_116e5 + call $5915 + jr nc, .asm_116e5 + pop af + ld [$ffaa], a pop af + ld [$ffde], a + pop af + ld [Options], a + call ClearJoypadPublic ret -; 12cdf - - -INCBIN "baserom.gbc", $12cdf, $12e00 - $12cdf +; 116f8 - -OpenPartyStats: ; 12e00 - call $1d6e - call ClearSprites -; PartyMon - xor a - ld [MonType], a - call LowVolume - ld a, $25 - call Predef - call MaxVolume - call $1d7d - ld a, 0 +Function116f8: ; 116f8 + call WhiteBGMap + ld b, $8 + call GetSGBLayout + call DisableLCD + call $5c51 + call $58a8 + ld a, $e3 + ld [rLCDC], a + call $571d + call WaitBGMap + call WaitTop + call Function32f9 + call $5be0 ret -; 12e1b - - -INCBIN "baserom.gbc", $12e1b, $13327 - $12e1b - +; 1171d -SelectMenu: ; 13327 +Function1171d: ; 1171d + ld a, [EnemyAtkLevel] + and $7 + ld e, a + ld d, $0 + ld hl, $572e + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 1172e - call CheckRegisteredItem - jr c, .NotRegistered - jp UseRegisteredItem +INCBIN "baserom.gbc", $1172e, $1189c - $1172e -.NotRegistered - call $2e08 - ld b, BANK(ItemMayBeRegisteredText) - ld hl, ItemMayBeRegisteredText - call $269a - call $0a46 - jp $2dcf -; 13340 +Function1189c: ; 1189c + push bc + push af + ld a, [EnemyAtkLevel] + sub $3 + ld b, a + pop af + dec b + pop bc + ret +; 118a8 -ItemMayBeRegisteredText: ; 13340 - text_jump UnknownText_0x1c1cf3, BANK(UnknownText_0x1c1cf3) - db "@" -; 13345 +Function118a8: ; 118a8 + call WaitTop + ld hl, TileMap + ld bc, $0168 + ld a, $60 + call ByteFill + ld hl, $c4b5 + ld bc, $0612 + call $589c + jr nz, .asm_118c4 + ld bc, $0412 +.asm_118c4 + call ClearBox + ld de, $5da2 + call $589c + jr nz, .asm_118d5 + ld hl, $0055 + add hl, de + ld d, h + ld e, l -CheckRegisteredItem: ; 13345 +.asm_118d5 + push de + ld hl, $c541 + ld bc, $0712 + call $589c + jr nz, .asm_118e7 + ld hl, $c519 + ld bc, $0912 + +.asm_118e7 + call ClearBox + ld hl, $c5e1 + ld bc, $0112 + call ClearBox + pop de + ld hl, $c542 + ld b, $5 + call $589c + jr nz, .asm_11903 + ld hl, $c51a + ld b, $6 - ld a, [WhichRegisteredItem] - and a - jr z, .NoRegisteredItem - and REGISTERED_POCKET - rlca - rlca - ld hl, .Pockets - rst JumpTable +.asm_11903 + ld c, $11 +.asm_11905 + ld a, [de] + ld [hli], a + inc de + dec c + jr nz, .asm_11905 + push de + ld de, $0017 + add hl, de + pop de + dec b + jr nz, .asm_11903 ret +; 11915 -.Pockets - dw .CheckItem - dw .CheckBall - dw .CheckKeyItem - dw .CheckTMHM - -.CheckItem - ld hl, NumItems - call .CheckRegisteredNo - jr c, .NoRegisteredItem - inc hl - ld e, a - ld d, 0 - add hl, de - add hl, de - call .IsSameItem - jr c, .NoRegisteredItem +Function11915: ; 11915 + call Functiona57 + ld a, [$cf63] + bit 7, a + jr nz, .asm_11930 + call $5968 + ld a, $23 + ld hl, $4f62 + rst FarCall + call $5940 + call DelayFrame and a ret -.CheckKeyItem - ld a, [RegisteredItem] - ld hl, KeyItems - ld de, 1 - call IsInArray - jr nc, .NoRegisteredItem - ld a, [RegisteredItem] - ld [CurItem], a - and a +.asm_11930 + callab Function8cf53 + call ClearSprites + xor a + ld [$ffcf], a + ld [$ffd0], a + scf ret +; 11940 -.CheckBall - ld hl, NumBalls - call .CheckRegisteredNo - jr nc, .NoRegisteredItem +Function11940: ; 11940 + xor a + ld [hBGMapMode], a + ld hl, $c505 + call $589c + jr nz, .asm_1194e + ld hl, $c4dd + +.asm_1194e + ld bc, $0112 + call ClearBox + ld hl, PlayerSDefLevel + ld e, [hl] inc hl + ld d, [hl] + ld hl, EnemySDefLevel + ld a, [hli] + ld h, [hl] + ld l, a + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ret +; 11968 + +Function11968: ; 11968 + ld a, [$cf63] ld e, a - ld d, 0 + ld d, $0 + ld hl, $5977 add hl, de add hl, de - call .IsSameItem - jr c, .NoRegisteredItem - ret + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 11977 -.CheckTMHM - jr .NoRegisteredItem +INCBIN "baserom.gbc", $11977, $11be0 - $11977 -.NoRegisteredItem - xor a - ld [WhichRegisteredItem], a - ld [RegisteredItem], a - scf + +Function11be0: ; 11be0 + ld hl, PlayerSDefLevel + ld a, [hli] + ld h, [hl] + ld l, a + ld [hl], $f2 + inc hl + ld a, [$c6d3] + dec a + ld c, a + ld a, $eb +.asm_11bf0 + ld [hli], a + dec c + jr nz, .asm_11bf0 + ld [hl], $50 ret -; 133a6 +; 11bf7 +INCBIN "baserom.gbc", $11bf7, $11c51 - $11bf7 -.CheckRegisteredNo ; 133a6 - ld a, [WhichRegisteredItem] - and REGISTERED_NUMBER - dec a - cp [hl] - jr nc, .NotEnoughItems - ld [$d107], a - and a - ret -.NotEnoughItems - scf +Function11c51: ; 11c51 + call ClearSprites + callab Function8cf53 + call $0e51 + call Functione5f + ld de, $5e65 + ld hl, $8eb0 + ld bc, $0401 + call Functionf9d + ld de, $5e6d + ld hl, $8f20 + ld bc, $0401 + call Functionf9d + ld de, $9600 + ld hl, $5cb7 + ld bc, $0010 + ld a, $4 + call FarCopyBytes + ld de, $87e0 + ld hl, $5cc7 + ld bc, $0020 + ld a, $4 + call FarCopyBytes + ld a, $5 + ld hl, $c312 + ld [hli], a + ld [hl], $7e + xor a + ld [$ffd0], a + ld [$c3bf], a + ld [$ffcf], a + ld [$c3c0], a + ld [$cf63], a + ld [$cf64], a + ld [hBGMapMode], a + ld [PlayerEvaLevel], a + ld a, $7 + ld [$ffd1], a ret -; 133b6 +; 11cb7 +INCBIN "baserom.gbc", $11cb7, $11ce7 - $11cb7 -.IsSameItem ; 133b6 - ld a, [RegisteredItem] - cp [hl] - jr nz, .NotSameItem - ld [CurItem], a - and a - ret +NameInputLower: + db "a b c d e f g h i" + db "j k l m n o p q r" + db "s t u v w x y z " + db "× ( ) : ; [ ] ", $e1, " ", $e2 + db "UPPER DEL END " +BoxNameInputLower: + db "a b c d e f g h i" + db "j k l m n o p q r" + db "s t u v w x y z " + db "é 'd 'l 'm 'r 's 't 'v 0" + db "1 2 3 4 5 6 7 8 9" + db "UPPER DEL END " +NameInputUpper: + db "A B C D E F G H I" + db "J K L M N O P Q R" + db "S T U V W X Y Z " + db "- ? ! / . , " + db "lower DEL END " +BoxNameInputUpper: + db "A B C D E F G H I" + db "J K L M N O P Q R" + db "S T U V W X Y Z " + db "× ( ) : ; [ ] ", $e1, " ", $e2 + db "- ? ! ♂ ♀ / . , &" + db "lower DEL END " -.NotSameItem - scf - ret -; 133c3 +INCBIN "baserom.gbc", $11e5d, $12513 - $11e5d -UseRegisteredItem: ; 133c3 - callba CheckItemMenu - ld a, [$d142] - ld hl, .SwitchTo - rst JumpTable - ret +HalveMoney: ; 12513 -.SwitchTo - dw .CantUse - dw .NoFunction - dw .NoFunction - dw .NoFunction - dw .Current - dw .Party - dw .Overworld -; 133df +; Empty function... + ld a, $41 + ld hl, $60c7 + rst FarCall -.NoFunction ; 133df - call $2e08 - call CantUseItem - call $2dcf - and a +; Halve the player's money. + ld hl, Money + ld a, [hl] + srl a + ld [hli], a + ld a, [hl] + rra + ld [hli], a + ld a, [hl] + rra + ld [hl], a ret -; 133ea +; 12527 -.Current ; 133ea - call $2e08 - call DoItemEffect - call $2dcf - and a - ret -; 133f5 -.Party ; 133f5 - call ResetWindow - call FadeToMenu - call DoItemEffect - call $2b3c - call $2dcf - and a - ret -; 13406 +INCBIN "baserom.gbc", $12527, $125cd - $12527 -.Overworld ; 13406 - call ResetWindow - ld a, 1 - ld [$d0ef], a - call DoItemEffect - xor a - ld [$d0ef], a - ld a, [$d0ec] - cp 1 - jr nz, .asm_13425 - scf - ld a, $80 - ld [$ffa0], a - ret -; 13422 -.CantUse ; 13422 - call ResetWindow +StartMenu: ; 125cd -.asm_13425 - call CantUseItem - call $2dcf - and a - ret -; 1342d + call Function1fbf + ld de, SFX_MENU + call StartSFX -INCBIN "baserom.gbc", $1342d, $13b87 - $1342d + ld a, $1 + ld hl, $6454 + rst FarCall + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ld hl, .MenuDataHeader + jr z, .GotMenuData + ld hl, .ContestMenuDataHeader +.GotMenuData -GetSquareRoot: ; 13b87 -; Return the square root of de in b. + call Function1d35 + call .SetUpMenuItems + ld a, [$d0d2] + ld [$cf88], a + call .DrawMenuAccount_ + call MenuFunc_1e7f + call .DrawBugContestStatusBox + call $2e31 + call $2e20 + ld a, $1 + ld hl, $64bf + rst $8 + call .DrawBugContestStatus + call Function485 + jr .Select -; Rather than calculating the result, we take the index of the -; first value in a table of squares that isn't lower than de. +.Reopen + call $1ad2 + call Function485 + call .SetUpMenuItems + ld a, [$d0d2] + ld [$cf88], a - ld hl, Squares - ld b, 0 -.loop -; Make sure we don't go past the end of the table. - inc b - ld a, b - cp $ff - ret z +.Select + call .GetInput + jr c, .Exit + call .DrawMenuAccount + ld a, [$cf88] + ld [$d0d2], a + call PlayClickSFX + call $1bee + call .OpenMenu -; Iterate over the table until b**2 >= de. - ld a, [hli] - sub e +; Menu items have different return functions. +; For example, saving exits the menu. + ld hl, .MenuReturns + ld e, a + ld d, 0 + add hl, de + add hl, de ld a, [hli] - sbc d + ld h, [hl] + ld l, a + jp [hl] + +.MenuReturns + dw .Reopen + dw .Exit + dw .ReturnTwo + dw .ReturnThree + dw .ReturnFour + dw .ReturnEnd + dw .ReturnRedraw - jr c, .loop +.Exit + ld a, [hOAMUpdate] + push af + ld a, 1 + ld [hOAMUpdate], a + call Functione5f + pop af + ld [hOAMUpdate], a +.ReturnEnd + call Function1c07 +.ReturnEnd2 + call $2dcf + call Function485 ret -Squares: ; 13b98 -root set 1 - rept $ff - dw root*root -root set root+1 - endr -; 13d96 - +.GetInput +; Return carry on exit, and no-carry on selection. + xor a + ld [hBGMapMode], a + call .DrawMenuAccount + call SetUpMenu + ld a, $ff + ld [MenuSelection], a +.loop + call .PrintMenuAccount + call $1f1a + ld a, [$cf73] + cp BUTTON_B + jr z, .b + cp BUTTON_A + jr z, .a + jr .loop +.a + call PlayClickSFX + and a + ret +.b + scf + ret +; 12691 -SECTION "bank5",DATA,BANK[$5] +.ReturnFour ; 12691 + call Function1c07 + ld a, $80 + ld [$ffa0], a + ret +; 12699 +.ReturnThree ; 12699 + call Function1c07 + ld a, $80 + ld [$ffa0], a + jr .ReturnEnd2 +; 126a2 -INCBIN "baserom.gbc", $14000, $14019 - $14000 +.ReturnTwo ; 126a2 + call Function1c07 + ld hl, $d0e9 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$d0e8] + rst FarCall + jr .ReturnEnd2 +; 126b1 +.ReturnRedraw ; 126b1 + call .Clear + jp .Reopen +; 126b7 -Function14019: ; 14019 - ld a, $a - ld [$0000], a - call LatchClock - ld a, $c - ld [$4000], a - ld a, [$a000] - res 6, a - ld [$a000], a - call CloseSRAM +.Clear ; 126b7 + call WhiteBGMap + call $1d7d + call $2bae + call .DrawMenuAccount_ + call MenuFunc_1e7f + call .DrawBugContestStatus + call $1ad2 + call $0d90 + call $2b5c ret -; 14032 +; 126d3 +.MenuDataHeader + db $40 ; tile backup + db 0, 10 ; start coords + db 17, 19 ; end coords + dw .MenuData + db 1 ; default selection -GetTimeOfDay: ; 14032 -; get time of day based on the current hour - ld a, [hHours] ; hour - ld hl, TimesOfDay - -.check -; if we're within the given time period, -; get the corresponding time of day - cp [hl] - jr c, .match -; else, get the next entry - inc hl - inc hl -; try again - jr .check - -.match -; get time of day - inc hl - ld a, [hl] - ld [TimeOfDay], a - ret -; 14044 +.ContestMenuDataHeader + db $40 ; tile backup + db 2, 10 ; start coords + db 17, 19 ; end coords + dw .MenuData + db 1 ; default selection -TimesOfDay: ; 14044 -; hours for the time of day -; 04-09 morn | 10-17 day | 18-03 nite - db 04, NITE - db 10, MORN - db 18, DAY - db 24, NITE -; 1404c +.MenuData + db %10101000 ; x padding, wrap around, start can close + dn 0, 0 ; rows, columns + dw MenuItemsList + dw .MenuString + dw .Items + +.Items + dw StartMenu_Pokedex, .PokedexString, .PokedexDesc + dw StartMenu_Pokemon, .PartyString, .PartyDesc + dw StartMenu_Pack, .PackString, .PackDesc + dw StartMenu_Status, .StatusString, .StatusDesc + dw StartMenu_Save, .SaveString, .SaveDesc + dw StartMenu_Option, .OptionString, .OptionDesc + dw StartMenu_Exit, .ExitString, .ExitDesc + dw StartMenu_Pokegear, .PokegearString, .PokegearDesc + dw StartMenu_Quit, .QuitString, .QuitDesc +.PokedexString db "#DEX@" +.PartyString db "#MON@" +.PackString db "PACK@" +.StatusString db $52, "@" +.SaveString db "SAVE@" +.OptionString db "OPTION@" +.ExitString db "EXIT@" +.PokegearString db $24, "GEAR@" +.QuitString db "QUIT@" -INCBIN "baserom.gbc", $1404c, $14089 - $1404c +.PokedexDesc db "#MON", $4e, "database@" +.PartyDesc db "Party ", $4a, $4e, "status@" +.PackDesc db "Contains", $4e, "items@" +.PokegearDesc db "Trainer's", $4e, "key device@" +.StatusDesc db "Your own", $4e, "status@" +.SaveDesc db "Save your", $4e, "progress@" +.OptionDesc db "Change", $4e, "settings@" +.ExitDesc db "Close this", $4e, "menu@" +.QuitDesc db "Quit and", $4e, "be judged.@" -Function14089: ; 14089 - call GetClock - call Function1409b - call FixDays - jr nc, .asm_14097 - call Function6d3 +.OpenMenu ; 127e5 + ld a, [MenuSelection] + call .GetMenuAccountTextPointer + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 127ef -.asm_14097 - call Function14019 +.MenuString ; 127ef + push de + ld a, [MenuSelection] + call .GetMenuAccountTextPointer + inc hl + inc hl + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString ret -; 1409b +; 12800 -Function1409b: ; 1409b - ld hl, hRTCDayHi - bit 7, [hl] - jr nz, .asm_140a8 - bit 6, [hl] - jr nz, .asm_140a8 - xor a +.MenuDesc ; 12800 + push de + ld a, [MenuSelection] + cp $ff + jr z, .none + call .GetMenuAccountTextPointer + inc hl + inc hl + inc hl + inc hl + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString ret - -.asm_140a8 - ld a, $80 - call Function6d3 +.none + pop de ret -; 140ae - -INCBIN "baserom.gbc", $140ae, $14183 - $140ae - - -GetPlayerSprite: ; 14183 -; Get Chris or Kris's sprite. +; 12819 - ld hl, .Chris - ld a, [$d45b] - bit 2, a - jr nz, .go - ld a, [PlayerGender] - bit 0, a - jr z, .go - ld hl, .Kris -.go - ld a, [PlayerState] - ld c, a -.loop +.GetMenuAccountTextPointer ; 12819 + ld e, a + ld d, 0 + ld hl, $cf97 ld a, [hli] - cp c - jr z, .asm_141ac - inc hl - cp $ff - jr nz, .loop + ld h, [hl] + ld l, a + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ret +; 12829 -; Any player state not in the array defaults to Chris's sprite. - xor a ; ld a, PLAYER_NORMAL - ld [PlayerState], a - ld a, SPRITE_CHRIS - jr .asm_141ad -.asm_141ac - ld a, [hl] +.SetUpMenuItems ; 12829 + xor a + ld [$cf76], a + call .FillMenuList -.asm_141ad - ld [UsedSprites + 0], a - ld [$d4d6], a - ld [$d71f], a - ret + ld hl, StatusFlags + bit 0, [hl] + jr z, .no_pokedex + ld a, 0 ; pokedex + call .AppendMenuList +.no_pokedex -.Chris - db PLAYER_NORMAL, SPRITE_CHRIS - db PLAYER_BIKE, SPRITE_CHRIS_BIKE - db PLAYER_SURF, SPRITE_SURF - db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU - db $ff + ld a, [PartyCount] + and a + jr z, .no_pokemon + ld a, 1 ; pokemon + call .AppendMenuList +.no_pokemon -.Kris - db PLAYER_NORMAL, SPRITE_KRIS - db PLAYER_BIKE, SPRITE_KRIS_BIKE - db PLAYER_SURF, SPRITE_SURF - db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU - db $ff -; 141c9 + ld a, [InLinkBattle] + and a + jr nz, .no_pack + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + jr nz, .no_pack + ld a, 2 ; pack + call .AppendMenuList +.no_pack + ld hl, $d957 + bit 7, [hl] + jr z, .no_pokegear + ld a, 7 ; pokegear + call .AppendMenuList +.no_pokegear -AddMapSprites: ; 141c9 - call GetMapPermission - call CheckOutdoorMap - jr z, .outdoor - call AddIndoorSprites - ret -.outdoor - call AddOutdoorSprites - ret -; 141d9 + ld a, 3 ; status + call .AppendMenuList + ld a, [InLinkBattle] + and a + jr nz, .no_save + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ld a, 8 ; quit + jr nz, .write + ld a, 4 ; save +.write + call .AppendMenuList +.no_save -AddIndoorSprites: ; 141d9 - ld hl, MapObjects + 1 * OBJECT_LENGTH + 1 ; sprite - ld a, 1 -.loop - push af - ld a, [hl] - call AddSpriteGFX - ld de, OBJECT_LENGTH - add hl, de - pop af - inc a - cp NUM_OBJECTS - jr nz, .loop + ld a, 5 ; option + call .AppendMenuList + ld a, 6 ; exit + call .AppendMenuList + ld a, c + ld [MenuItemsList], a ret -; 141ee +; 1288d -AddOutdoorSprites: ; 141ee - ld a, [MapGroup] - dec a - ld c, a - ld b, 0 - ld hl, OutdoorSprites - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld c, $17 -.loop - push bc - ld a, [hli] - call AddSpriteGFX - pop bc - dec c - jr nz, .loop +.FillMenuList ; 1288d + xor a + ld hl, MenuItemsList + ld [hli], a + ld a, $ff + ld bc, $000f + call ByteFill + ld de, MenuItemsList + 1 + ld c, 0 ret -; 14209 +; 128a0 + +.AppendMenuList ; 128a0 + ld [de], a + inc de + inc c + ret +; 128a4 +.DrawMenuAccount_ ; 128a4 + jp .DrawMenuAccount +; 128a7 -INCBIN "baserom.gbc", $14209, $14236 - $14209 +.PrintMenuAccount ; 128a7 + call .IsMenuAccountOn + ret z + call .DrawMenuAccount + decoord 0, 14 + jp .MenuDesc +; 128b4 +.DrawMenuAccount ; 128b4 + call .IsMenuAccountOn + ret z + hlcoord 0, 13 + ld bc, $050a + call ClearBox + hlcoord 0, 13 + ld b, 3 + ld c, 8 + jp TextBoxPalette +; 128cb -SafeGetSprite: ; 14236 - push hl - call GetSprite - pop hl +.IsMenuAccountOn ; 128cb + ld a, [Options2] + and 1 ret -; 1423c - -GetSprite: ; 1423c - call GetMonSprite - ret c +; 128d1 - ld hl, SpriteHeaders - dec a - ld c, a - ld b, 0 - ld a, 6 - call AddNTimes - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - swap a - ld c, a - ld b, [hl] - ld a, [hli] - ld l, [hl] - ld h, a +.DrawBugContestStatusBox ; 128d1 + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ret z + ld a, $9 + ld hl, $4bdc + rst FarCall ret -; 14259 +; 128de +.DrawBugContestStatus ; 128de + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + jr nz, .contest + ret +.contest + ld a, $9 + ld hl, $4be7 + rst FarCall + ret +; 128ed -GetMonSprite: ; 14259 -; Return carry if a monster sprite was loaded. - cp SPRITE_POKEMON - jr c, .Normal - cp SPRITE_DAYCARE_MON_1 - jr z, .BreedMon1 - cp SPRITE_DAYCARE_MON_2 - jr z, .BreedMon2 - cp SPRITE_VARS - jr nc, .Variable - jr .Icon +StartMenu_Exit: ; 128ed +; Exit the menu. -.Normal - and a + ld a, 1 ret +; 128f0 -.Icon - sub SPRITE_POKEMON - ld e, a - ld d, 0 - ld hl, SpriteMons - add hl, de - ld a, [hl] - jr .Mon - -.BreedMon1 - ld a, [BreedMon1Species] - jr .Mon -.BreedMon2 - ld a, [BreedMon2Species] +StartMenu_Quit: ; 128f0 +; Retire from the bug catching contest. -.Mon - ld e, a - and a - jr z, .asm_1429f + ld hl, .EndTheContestText + call $6cf5 + jr c, .asm_12903 + ld a, $4 + ld hl, $760b + call $31cf + ld a, 4 + ret +.asm_12903 + ld a, 0 + ret - ld a, $23 - ld hl, $682b - rst FarCall ; callba LoadMonSprite +.EndTheContestText + text_jump UnknownText_0x1c1a6c, BANK(UnknownText_0x1c1a6c) + db "@" +; 1290b - ld l, 1 - ld h, 0 - scf - ret -.Variable - sub SPRITE_VARS - ld e, a - ld d, 0 - ld hl, VariableSprites - add hl, de - ld a, [hl] - and a - jp nz, GetMonSprite +StartMenu_Save: ; 1290b +; Save the game. -.asm_1429f + call $2879 + ld a, $5 + ld hl, $4a1a + rst FarCall + jr nc, .asm_12919 + ld a, 0 + ret +.asm_12919 ld a, 1 - ld l, 1 - ld h, 0 - and a ret -; 142a7 +; 1291c -Function142a7: ; 142a7 - cp SPRITE_POKEMON - jr nc, .asm_142c2 +StartMenu_Option: ; 1291c +; Game options. - push hl - push bc - ld hl, SpriteHeaders + 4 - dec a - ld c, a - ld b, 0 + call FadeToMenu + callba OptionsMenu ld a, 6 - call AddNTimes - ld a, [hl] - pop bc - pop hl - cp 3 - jr nz, .asm_142c2 - scf ret +; 12928 -.asm_142c2 - and a + +StartMenu_Status: ; 12928 +; Player status. + + call FadeToMenu + ld a, $9 + ld hl, $5105 + rst FarCall + call $2b3c + ld a, 0 ret -; 142c4 +; 12937 -GetSpritePalette: ; 142c4 - ld a, c - call GetMonSprite - jr c, .asm_142d8 +StartMenu_Pokedex: ; 12937 - ld hl, SpriteHeaders + 5 ; palette - dec a - ld c, a - ld b, 0 - ld a, 6 - call AddNTimes - ld c, [hl] - ret + ld a, [PartyCount] + and a + jr z, .asm_12949 -.asm_142d8 - xor a - ld c, a + call FadeToMenu + ld a, $10 + ld hl, $4000 + rst FarCall + call $2b3c + +.asm_12949 + ld a, 0 ret -; 142db +; 1294c -Function142db: ; 142db - call LoadSpriteGFX - call SortUsedSprites - call ArrangeUsedSprites +StartMenu_Pokegear: ; 1294c + + call FadeToMenu + ld a, $24 + ld hl, $4b8d + rst FarCall + call $2b3c + ld a, 0 ret -; 142e5 +; 1295b -AddSpriteGFX: ; 142e5 -; Add any new sprite ids to a list of graphics to be loaded. -; Return carry if the list is full. +StartMenu_Pack: ; 1295b - push hl - push bc - ld b, a - ld hl, UsedSprites + 2 - ld c, $1f -.loop - ld a, [hl] - cp b - jr z, .exists + call FadeToMenu + ld a, $4 + ld hl, $4000 + rst FarCall + ld a, [$cf66] and a - jr z, .new - inc hl - inc hl - dec c - jr nz, .loop - - pop bc - pop hl - scf + jr nz, .asm_12970 + call $2b3c + ld a, 0 ret - -.exists - pop bc - pop hl - and a +.asm_12970 + call $2b4d + ld a, 4 ret +; 12976 -.new - ld [hl], b - pop bc - pop hl + +StartMenu_Pokemon: ; 12976 + + ld a, [PartyCount] and a - ret -; 14306 + jr z, .return + call FadeToMenu -LoadSpriteGFX: ; 14306 +.choosemenu + xor a + ld [PartyMenuActionText], a ; Choose a POKéMON. + call WhiteBGMap - ld hl, UsedSprites - ld b, $20 -.loop - ld a, [hli] - and a - jr z, .done - push hl - call .LoadSprite - pop hl - ld [hli], a - dec b - jr nz, .loop +.menu + ld a, $14 + ld hl, $404f + rst FarCall ; load gfx + ld a, $14 + ld hl, $4405 + rst FarCall ; setup menu? + ld a, $14 + ld hl, $43e0 + rst FarCall ; load menu pokémon sprites -.done - ret +.menunoreload + callba WritePartyMenuTilemap + callba PrintPartyMenuText + call WaitBGMap + call Function32f9 ; load regular palettes? + call DelayFrame + callba PartyMenuSelect + jr c, .return ; if cancelled or pressed B -.LoadSprite - call GetSprite - ld a, l + call PokemonActionSubmenu + cp 3 + jr z, .menu + cp 0 + jr z, .choosemenu + cp 1 + jr z, .menunoreload + cp 2 + jr z, .quit + +.return + call $2b3c + ld a, 0 ret -; 1431e +.quit + ld a, b + push af + call $2b4d + pop af + ret +; 129d5 -SortUsedSprites: ; 1431e -; Bubble-sort sprites by type. -; Run backwards through UsedSprites to find the last one. +INCBIN "baserom.gbc", $129d5, $12a60 - $129d5 - ld c, $20 - ld de, UsedSprites + ($20 - 1) * 2 -.FindLastSprite - ld a, [de] - and a - jr nz, .FoundLastSprite - dec de - dec de - dec c - jr nz, .FindLastSprite -.FoundLastSprite - dec c - jr z, .quit -; If the length of the current sprite is -; higher than a later one, swap them. +CantUseItem: ; 12a60 + ld hl, CantUseItemText + call $2012 + ret +; 12a67 - inc de - ld hl, UsedSprites + 1 +CantUseItemText: ; 12a67 + text_jump UnknownText_0x1c1b03, BANK(UnknownText_0x1c1b03) + db "@" +; 12a6c -.CheckSprite - push bc - push de - push hl -.CheckFollowing - ld a, [de] - cp [hl] - jr nc, .next +PartyMonItemName: ; 12a6c + ld a, [CurItem] + ld [$d265], a + call GetItemName + call CopyName1 + ret +; 12a79 -; Swap the two sprites. - ld b, a - ld a, [hl] - ld [hl], b - ld [de], a - dec de - dec hl - ld a, [de] - ld b, a - ld a, [hl] - ld [hl], b - ld [de], a - inc de - inc hl +CancelPokemonAction: ; 12a79 + ld a, $14 + ld hl, $4405 + rst FarCall + ld a, $23 + ld hl, $6a71 + rst FarCall + ld a, 1 + ret +; 12a88 -; Keep doing this until everything's in order. -.next - dec de - dec de - dec c - jr nz, .CheckFollowing +PokemonActionSubmenu: ; 12a88 + hlcoord 1, 15 + ld bc, $0212 ; box size + call ClearBox + ld a, $9 + ld hl, $4d19 + rst FarCall + call $389c + ld a, [MenuSelection] + ld hl, .Actions + ld de, 3 + call IsInArray + jr nc, .nothing - pop hl - inc hl inc hl - pop de - pop bc - dec c - jr nz, .CheckSprite + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] -.quit +.nothing + ld a, 0 ret -; 14355 +.Actions + dbw $01, $6e1b + dbw $02, $6e30 + dbw $03, $6ebd + dbw $04, $6e6a + dbw $06, $6e55 + dbw $07, $6e7f + dbw $08, $6ed1 + dbw $09, $6ea9 + dbw $0a, $6ee6 + dbw $0d, $6ee6 + dbw $0b, $6f26 + dbw $05, $6e94 + dbw $0c, $6f3b + dbw $0e, $6f50 + dbw $0f, OpenPartyStats + dbw $10, SwitchPartyMons + dbw $11, GiveTakePartyMonItem + dbw $12, CancelPokemonAction + dbw $13, $6fba ; move + dbw $14, $6d45 ; mail +; 12aec -ArrangeUsedSprites: ; 14355 -; Get the length of each sprite and space them out in VRAM. -; Crystal introduces a second table in VRAM bank 0. - ld hl, UsedSprites - ld c, $20 - ld b, 0 -.FirstTableLength -; Keep going until the end of the list. - ld a, [hli] - and a - jr z, .quit +SwitchPartyMons: ; 12aec - ld a, [hl] - call GetSpriteLength +; Don't try if there's nothing to switch! + ld a, [PartyCount] + cp 2 + jr c, .DontSwitch -; Spill over into the second table after $80 tiles. - add b - cp $80 - jr z, .next - jr nc, .SecondTable + ld a, [CurPartyMon] + inc a + ld [$d0e3], a -.next - ld [hl], b - inc hl - ld b, a + ld a, $23 + ld hl, $6a8c + rst FarCall + ld a, $14 + ld hl, $442d + rst FarCall -; Assumes the next table will be reached before c hits 0. - dec c - jr nz, .FirstTableLength + ld a, 4 + ld [PartyMenuActionText], a + callba WritePartyMenuTilemap + callba PrintPartyMenuText -.SecondTable -; The second tile table starts at tile $80. - ld b, $80 - dec hl -.SecondTableLength -; Keep going until the end of the list. - ld a, [hli] - and a - jr z, .quit + hlcoord 0, 1 + ld bc, 20 * 2 + ld a, [$d0e3] + dec a + call AddNTimes + ld [hl], "▷" + call WaitBGMap + call Function32f9 + call DelayFrame - ld a, [hl] - call GetSpriteLength + callba PartyMenuSelect + bit 1, b + jr c, .DontSwitch -; There are only two tables, so don't go any further than that. - add b - jr c, .quit + ld a, $14 + ld hl, $4f12 + rst FarCall - ld [hl], b - ld b, a - inc hl + xor a + ld [PartyMenuActionText], a - dec c - jr nz, .SecondTableLength + ld a, $14 + ld hl, $404f + rst FarCall + ld a, $14 + ld hl, $4405 + rst FarCall + ld a, $14 + ld hl, $43e0 + rst FarCall -.quit + ld a, 1 ret -; 14386 +.DontSwitch + xor a + ld [PartyMenuActionText], a + call CancelPokemonAction + ret +; 12b60 -GetSpriteLength: ; 14386 -; Return the length of sprite type a in tiles. - cp WALKING_SPRITE - jr z, .AnyDirection - cp STANDING_SPRITE - jr z, .AnyDirection - cp STILL_SPRITE - jr z, .OneDirection +GiveTakePartyMonItem: ; 12b60 - ld a, 12 +; Eggs can't hold items! + ld a, [CurPartySpecies] + cp EGG + jr z, .asm_12ba6 + + ld hl, GiveTakeItemMenuData + call Function1d35 + call Function1d81 + call Function1c07 + jr c, .asm_12ba6 + + call $389c + ld hl, StringBuffer1 + ld de, $d050 + ld bc, $b + call CopyBytes + ld a, [$cfa9] + cp 1 + jr nz, .asm_12ba0 + + call $1d6e + call ClearPalettes + call Function12ba9 + call ClearPalettes + call $0e58 + call Function1c07 + ld a, 0 ret -.AnyDirection - ld a, 12 +.asm_12ba0 + call TakePartyItem + ld a, 3 ret -.OneDirection - ld a, 4 +.asm_12ba6 + ld a, 3 ret -; 1439b +; 12ba9 -INCBIN "baserom.gbc", $1439b, $14495 - $1439b +Function12ba9: ; 12ba9 + ld a, $4 + ld hl, $46a5 + rst FarCall -SpriteMons: ; 14495 - db UNOWN - db GEODUDE - db GROWLITHE - db WEEDLE - db SHELLDER - db ODDISH - db GENGAR - db ZUBAT - db MAGIKARP - db SQUIRTLE - db TOGEPI - db BUTTERFREE - db DIGLETT - db POLIWAG - db PIKACHU - db CLEFAIRY - db CHARMANDER - db JYNX - db STARMIE - db BULBASAUR - db JIGGLYPUFF - db GRIMER - db EKANS - db PARAS - db TENTACOOL - db TAUROS - db MACHOP - db VOLTORB - db LAPRAS - db RHYDON - db MOLTRES - db SNORLAX - db GYARADOS - db LUGIA - db HO_OH -; 144b8 - +.loop + ld a, $4 + ld hl, $46be + rst FarCall -OutdoorSprites: ; 144b8 -; Valid sprite IDs for each map group. + ld a, [$cf66] + and a + jr z, .quit - dw Group1Sprites - dw Group2Sprites - dw Group3Sprites - dw Group4Sprites - dw Group5Sprites - dw Group6Sprites - dw Group7Sprites - dw Group8Sprites - dw Group9Sprites - dw Group10Sprites - dw Group11Sprites - dw Group12Sprites - dw Group13Sprites - dw Group14Sprites - dw Group15Sprites - dw Group16Sprites - dw Group17Sprites - dw Group18Sprites - dw Group19Sprites - dw Group20Sprites - dw Group21Sprites - dw Group22Sprites - dw Group23Sprites - dw Group24Sprites - dw Group25Sprites - dw Group26Sprites -; 144ec + ld a, [$cf65] + cp 2 + jr z, .next + call CheckTossableItem + ld a, [$d142] + and a + jr nz, .next -Group13Sprites: ; 144ec - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_BLUE - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_SWIMMER_GIRL - db SPRITE_SWIMMER_GUY - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14503 + call Function12bd9 + jr .quit -Group23Sprites: ; 14503 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_BLUE - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_SWIMMER_GIRL - db SPRITE_SWIMMER_GUY - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 1451a +.next + ld hl, CantBeHeldText + call $1d67 + jr .loop -Group14Sprites: ; 1451a - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_BLUE - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_SWIMMER_GIRL - db SPRITE_SWIMMER_GUY - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14531 +.quit + ret +; 12bd9 -Group6Sprites: ; 14531 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_BLUE - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_SWIMMER_GIRL - db SPRITE_SWIMMER_GUY - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14548 -Group7Sprites: ; 14548 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_COOLTRAINER_M - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_POKEFAN_M - db SPRITE_ROCKET - db SPRITE_MISTY - db SPRITE_POKE_BALL - db SPRITE_SLOWPOKE -; 1455f +Function12bd9: ; 12bd9 -Group25Sprites: ; 1455f - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_COOLTRAINER_M - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_POKEFAN_M - db SPRITE_ROCKET - db SPRITE_MISTY - db SPRITE_POKE_BALL - db SPRITE_SLOWPOKE -; 14576 + call SpeechTextBox + call PartyMonItemName + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .asm_12bf4 -Group21Sprites: ; 14576 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_FISHER - db SPRITE_POLIWAG - db SPRITE_TEACHER - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_BIKER - db SPRITE_SILVER - db SPRITE_BLUE - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 1458d + push hl + ld d, a + ld a, $2e + ld hl, $5e76 + rst FarCall + pop hl + jr c, .asm_12c01 + ld a, [hl] + jr .asm_12c08 -Group18Sprites: ; 1458d - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM +.asm_12bf4 + call $6cea + ld hl, MadeHoldText + call $1d67 + call GivePartyItem + ret + +.asm_12c01 + ld hl, PleaseRemoveMailText + call $1d67 + ret + +.asm_12c08 + ld [$d265], a + call GetItemName + ld hl, SwitchAlreadyHoldingText + call $6cf5 + jr c, .asm_12c4b + + call $6cea + ld a, [$d265] + push af + ld a, [CurItem] + ld [$d265], a + pop af + ld [CurItem], a + call $6cdf + jr nc, .asm_12c3c + + ld hl, TookAndMadeHoldText + call $1d67 + ld a, [$d265] + ld [CurItem], a + call GivePartyItem + ret + +.asm_12c3c + ld a, [$d265] + ld [CurItem], a + call $6cdf + ld hl, ItemStorageIsFullText + call $1d67 + +.asm_12c4b + ret +; 12c4c + + +GivePartyItem: ; 12c4c + + call GetPartyItemLocation + ld a, [CurItem] + ld [hl], a + ld d, a + ld a, $2e + ld hl, $5e76 + rst FarCall + jr nc, .asm_12c5f + call $6cfe + +.asm_12c5f + ret +; 12c60 + + +TakePartyItem: ; 12c60 + + call SpeechTextBox + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .asm_12c8c + + ld [CurItem], a + call $6cdf + jr nc, .asm_12c94 + + ld a, $2e + ld hl, $5e76 + rst FarCall + call GetPartyItemLocation + ld a, [hl] + ld [$d265], a + ld [hl], NO_ITEM + call GetItemName + ld hl, TookFromText + call $1d67 + jr .asm_12c9a + +.asm_12c8c + ld hl, IsntHoldingAnythingText + call $1d67 + jr .asm_12c9a + +.asm_12c94 + ld hl, ItemStorageIsFullText + call $1d67 + +.asm_12c9a + ret +; 12c9b + + +GiveTakeItemMenuData: ; 12c9b + db %01010000 + db 12, 12 ; start coords + db 17, 19 ; end coords + dw .Items + db 1 ; default option + +.Items + db %10000000 ; x padding + db 2 ; # items + db "GIVE@" + db "TAKE@" +; 12caf + + +TookAndMadeHoldText: ; 12caf + text_jump UnknownText_0x1c1b2c, BANK(UnknownText_0x1c1b2c) + db "@" +; 12cb4 + +MadeHoldText: ; 12cb4 + text_jump UnknownText_0x1c1b57, BANK(UnknownText_0x1c1b57) + db "@" +; 12cb9 + +PleaseRemoveMailText: ; 12cb9 + text_jump UnknownText_0x1c1b6f, BANK(UnknownText_0x1c1b6f) + db "@" +; 12cbe + +IsntHoldingAnythingText: ; 12cbe + text_jump UnknownText_0x1c1b8e, BANK(UnknownText_0x1c1b8e) + db "@" +; 12cc3 + +ItemStorageIsFullText: ; 12cc3 + text_jump UnknownText_0x1c1baa, BANK(UnknownText_0x1c1baa) + db "@" +; 12cc8 + +TookFromText: ; 12cc8 + text_jump UnknownText_0x1c1bc4, BANK(UnknownText_0x1c1bc4) + db "@" +; 12ccd + +SwitchAlreadyHoldingText: ; 12ccd + text_jump UnknownText_0x1c1bdc, BANK(UnknownText_0x1c1bdc) + db "@" +; 12cd2 + +CantBeHeldText: ; 12cd2 + text_jump UnknownText_0x1c1c09, BANK(UnknownText_0x1c1c09) + db "@" +; 12cd7 + + +GetPartyItemLocation: ; 12cd7 + push af + ld a, PartyMon1Item - PartyMon1 + call GetPartyParamLocation + pop af + ret +; 12cdf + + +INCBIN "baserom.gbc", $12cdf, $12e00 - $12cdf + + +OpenPartyStats: ; 12e00 + call $1d6e + call ClearSprites +; PartyMon + xor a + ld [MonType], a + call LowVolume + ld a, $25 + call Predef + call MaxVolume + call $1d7d + ld a, 0 + ret +; 12e1b + + +INCBIN "baserom.gbc", $12e1b, $13327 - $12e1b + + +SelectMenu: ; 13327 + + call CheckRegisteredItem + jr c, .NotRegistered + jp UseRegisteredItem + +.NotRegistered + call $2e08 + ld b, BANK(ItemMayBeRegisteredText) + ld hl, ItemMayBeRegisteredText + call $269a + call $0a46 + jp $2dcf +; 13340 + + +ItemMayBeRegisteredText: ; 13340 + text_jump UnknownText_0x1c1cf3, BANK(UnknownText_0x1c1cf3) + db "@" +; 13345 + + +CheckRegisteredItem: ; 13345 + + ld a, [WhichRegisteredItem] + and a + jr z, .NoRegisteredItem + and REGISTERED_POCKET + rlca + rlca + ld hl, .Pockets + rst JumpTable + ret + +.Pockets + dw .CheckItem + dw .CheckBall + dw .CheckKeyItem + dw .CheckTMHM + +.CheckItem + ld hl, NumItems + call .CheckRegisteredNo + jr c, .NoRegisteredItem + inc hl + ld e, a + ld d, 0 + add hl, de + add hl, de + call .IsSameItem + jr c, .NoRegisteredItem + and a + ret + +.CheckKeyItem + ld a, [RegisteredItem] + ld hl, KeyItems + ld de, 1 + call IsInArray + jr nc, .NoRegisteredItem + ld a, [RegisteredItem] + ld [CurItem], a + and a + ret + +.CheckBall + ld hl, NumBalls + call .CheckRegisteredNo + jr nc, .NoRegisteredItem + inc hl + ld e, a + ld d, 0 + add hl, de + add hl, de + call .IsSameItem + jr c, .NoRegisteredItem + ret + +.CheckTMHM + jr .NoRegisteredItem + +.NoRegisteredItem + xor a + ld [WhichRegisteredItem], a + ld [RegisteredItem], a + scf + ret +; 133a6 + + +.CheckRegisteredNo ; 133a6 + ld a, [WhichRegisteredItem] + and REGISTERED_NUMBER + dec a + cp [hl] + jr nc, .NotEnoughItems + ld [$d107], a + and a + ret + +.NotEnoughItems + scf + ret +; 133b6 + + +.IsSameItem ; 133b6 + ld a, [RegisteredItem] + cp [hl] + jr nz, .NotSameItem + ld [CurItem], a + and a + ret + +.NotSameItem + scf + ret +; 133c3 + + +UseRegisteredItem: ; 133c3 + + callba CheckItemMenu + ld a, [$d142] + ld hl, .SwitchTo + rst JumpTable + ret + +.SwitchTo + dw .CantUse + dw .NoFunction + dw .NoFunction + dw .NoFunction + dw .Current + dw .Party + dw .Overworld +; 133df + +.NoFunction ; 133df + call $2e08 + call CantUseItem + call $2dcf + and a + ret +; 133ea + +.Current ; 133ea + call $2e08 + call DoItemEffect + call $2dcf + and a + ret +; 133f5 + +.Party ; 133f5 + call ResetWindow + call FadeToMenu + call DoItemEffect + call $2b3c + call $2dcf + and a + ret +; 13406 + +.Overworld ; 13406 + call ResetWindow + ld a, 1 + ld [$d0ef], a + call DoItemEffect + xor a + ld [$d0ef], a + ld a, [$d0ec] + cp 1 + jr nz, .asm_13425 + scf + ld a, $80 + ld [$ffa0], a + ret +; 13422 + +.CantUse ; 13422 + call ResetWindow + +.asm_13425 + call CantUseItem + call $2dcf + and a + ret +; 1342d + + +Function1342d: ; 1342d + call $744a + call $747d + jr c, .asm_13448 + ld [$d041], a + call $74dd + jr c, .asm_13448 + ld hl, $d041 + cp [hl] + jr z, .asm_13448 + call $74c0 + and a + ret + +.asm_13448 + scf + ret +; 1344a + +Function1344a: ; 1344a + ld a, b + ld [EngineBuffer1], a + ld a, e + ld [CurFruit], a + ld a, d + ld [$d040], a + call $745a + ret +; 1345a + +Function1345a: ; 1345a + ld de, $d0f0 + ld bc, $0004 + ld hl, CurFruit + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [EngineBuffer1] + call GetFarByte + inc hl + ld [de], a + inc de +.asm_1346f + ld a, [EngineBuffer1] + call GetFarByte + ld [de], a + inc de + add hl, bc + cp $ff + jr nz, .asm_1346f + ret +; 1347d + +Function1347d: ; 1347d + ld hl, CurFruit + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [EngineBuffer1] + call GetFarByte + ld c, a + inc hl + ld a, [BackupMapGroup] + ld d, a + ld a, [BackupMapNumber] + ld e, a + ld b, $0 +.asm_13495 + ld a, [EngineBuffer1] + call GetFarByte + cp $ff + jr z, .asm_134be + inc hl + inc hl + ld a, [EngineBuffer1] + call GetFarByte + inc hl + cp d + jr nz, .asm_134b7 + ld a, [EngineBuffer1] + call GetFarByte + inc hl + cp e + jr nz, .asm_134b8 + jr .asm_134bb + +.asm_134b7 + inc hl + +.asm_134b8 + inc b + jr .asm_13495 + +.asm_134bb + xor a + ld a, b + ret + +.asm_134be + scf + ret +; 134c0 + +Function134c0: ; 134c0 + push af + ld hl, CurFruit + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + pop af + ld bc, $0004 + call AddNTimes + inc hl + ld de, $dcac + ld a, [EngineBuffer1] + ld bc, $0003 + call FarCopyBytes + ret +; 134dd + +Function134dd: ; 134dd + call $1d6e + ld hl, $750d + call PrintText + call $7512 + ld hl, $7550 + call Function1d3c + call $352f + call $1ad2 + xor a + ld [$d0e4], a + call $350c + call Function1c17 + ld a, [$cf73] + cp $2 + jr z, .asm_1350b + xor a + ld a, [$cf77] + ret + +.asm_1350b + scf + ret +; 1350d + +INCBIN "baserom.gbc", $1350d, $13512 - $1350d + + +Function13512: ; 13512 + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + ld hl, TileMap + ld b, $4 + ld c, $8 + call TextBox + ld hl, $c4c9 + ld de, $7537 + call PlaceString + ld hl, $c4f4 + call $753f + pop af + ld [Options], a + ret +; 13537 + +INCBIN "baserom.gbc", $13537, $1353f - $13537 + + +Function1353f: ; 1353f + push hl + ld a, [$d041] + ld e, a + ld d, $0 + ld hl, $d0f1 + add hl, de + ld a, [hl] + pop de + call $756b + ret +; 13550 + +INCBIN "baserom.gbc", $13550, $1356b - $13550 + + +Function1356b: ; 1356b + push de + call $7575 + ld d, h + ld e, l + pop hl + jp PlaceString +; 13575 + +Function13575: ; 13575 + push de + ld e, a + ld d, $0 + ld hl, $7583 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + pop de + ret +; 13583 + +INCBIN "baserom.gbc", $13583, $13b87 - $13583 + + +GetSquareRoot: ; 13b87 +; Return the square root of de in b. + +; Rather than calculating the result, we take the index of the +; first value in a table of squares that isn't lower than de. + + ld hl, Squares + ld b, 0 +.loop +; Make sure we don't go past the end of the table. + inc b + ld a, b + cp $ff + ret z + +; Iterate over the table until b**2 >= de. + ld a, [hli] + sub e + ld a, [hli] + sbc d + + jr c, .loop + ret + +Squares: ; 13b98 +root set 1 + rept $ff + dw root*root +root set root+1 + endr +; 13d96 + + +SECTION "bank5",DATA,BANK[$5] + + +Function14000: ; 14000 + ld a, $a + ld [$0000], a + call LatchClock + ld a, $c + ld [$4000], a + ld a, [$a000] + set 6, a + ld [$a000], a + call CloseSRAM + ret +; 14019 + + + +Function14019: ; 14019 + ld a, $a + ld [$0000], a + call LatchClock + ld a, $c + ld [$4000], a + ld a, [$a000] + res 6, a + ld [$a000], a + call CloseSRAM + ret +; 14032 + + + +GetTimeOfDay: ; 14032 +; get time of day based on the current hour + ld a, [hHours] ; hour + ld hl, TimesOfDay + +.check +; if we're within the given time period, +; get the corresponding time of day + cp [hl] + jr c, .match +; else, get the next entry + inc hl + inc hl +; try again + jr .check + +.match +; get time of day + inc hl + ld a, [hl] + ld [TimeOfDay], a + ret +; 14044 + +TimesOfDay: ; 14044 +; hours for the time of day +; 04-09 morn | 10-17 day | 18-03 nite + db 04, NITE + db 10, MORN + db 18, DAY + db 24, NITE +; 1404c + + +INCBIN "baserom.gbc", $1404c, $14056 - $1404c + + +Function14056: ; 14056 + call UpdateTime + ld hl, $d4ba + ld a, [CurDay] + ld [hli], a + ld a, [hHours] + ld [hli], a + ld a, [hMinutes] + ld [hli], a + ld a, [hSeconds] + ld [hli], a + ret +; 1406a + +Function1406a: ; 1406a + ld a, $a + ld [$0000], a + call LatchClock + ld hl, $a000 + ld a, $c + ld [$4000], a + res 7, [hl] + ld a, $0 + ld [$4000], a + xor a + ld [$ac60], a + call CloseSRAM + ret +; 14089 + + + +Function14089: ; 14089 + call GetClock + call Function1409b + call FixDays + jr nc, .asm_14097 + call Function6d3 + +.asm_14097 + call Function14019 + ret +; 1409b + +Function1409b: ; 1409b + ld hl, hRTCDayHi + bit 7, [hl] + jr nz, .asm_140a8 + bit 6, [hl] + jr nz, .asm_140a8 + xor a + ret + +.asm_140a8 + ld a, $80 + call Function6d3 + ret +; 140ae + +Function140ae: ; 140ae + call $06e3 + ld c, a + and $c0 + jr nz, .asm_140c8 + ld a, c + and $20 + jr z, .asm_140eb + call UpdateTime + ld a, [$d4ba] + ld b, a + ld a, [CurDay] + cp b + jr c, .asm_140eb + +.asm_140c8 + ld a, $4 + ld hl, $53da + rst FarCall + ld a, $5c + ld hl, $4923 + rst FarCall + ld a, $5 + call GetSRAMBank + ld a, [$aa8c] + inc a + ld [$aa8c], a + ld a, [$b2fa] + inc a + ld [$b2fa], a + call CloseSRAM + ret + +.asm_140eb + xor a + ret +; 140ed + + + +Function140ed: ; 140ed + call GetClock + call FixDays + ld hl, hRTCSeconds + ld de, StartSecond + ld a, [$d089] + sub [hl] + dec hl + jr nc, .asm_14102 + add $3c + +.asm_14102 + ld [de], a + dec de + ld a, [$d088] + sbc [hl] + dec hl + jr nc, .asm_1410d + add $3c + +.asm_1410d + ld [de], a + dec de + ld a, [$d087] + sbc [hl] + dec hl + jr nc, .asm_14118 + add $18 + +.asm_14118 + ld [de], a + dec de + ld a, [StringBuffer2] + sbc [hl] + dec hl + jr nc, .asm_14128 + add $8c + ld c, $7 + call SimpleDivide + +.asm_14128 + ld [de], a + ret +; 1412a + +Function1412a: ; 1412a + ld a, $1 + ld [rVBK], a + call Functionf82 + xor a + ld [rVBK], a + ret +; 14135 + +Function14135: ; 14135 + call GetPlayerSprite + ld a, [UsedSprites] + ld [$ffbd], a + ld a, [$d155] + ld [$ffbe], a + call $43c8 + ret +; 14146 + +INCBIN "baserom.gbc", $14146, $14168 - $14146 + + +Function14168: ; 14168 + call $416f + call $4209 + ret +; 1416f + +Function1416f: ; 1416f + xor a + ld bc, $0040 + ld hl, UsedSprites + call ByteFill + call GetPlayerSprite + call AddMapSprites + call Function142db + ret +; 14183 + + + +GetPlayerSprite: ; 14183 +; Get Chris or Kris's sprite. + + ld hl, .Chris + ld a, [$d45b] + bit 2, a + jr nz, .go + ld a, [PlayerGender] + bit 0, a + jr z, .go + ld hl, .Kris + +.go + ld a, [PlayerState] + ld c, a +.loop + ld a, [hli] + cp c + jr z, .asm_141ac + inc hl + cp $ff + jr nz, .loop + +; Any player state not in the array defaults to Chris's sprite. + xor a ; ld a, PLAYER_NORMAL + ld [PlayerState], a + ld a, SPRITE_CHRIS + jr .asm_141ad + +.asm_141ac + ld a, [hl] + +.asm_141ad + ld [UsedSprites + 0], a + ld [$d4d6], a + ld [$d71f], a + ret + +.Chris + db PLAYER_NORMAL, SPRITE_CHRIS + db PLAYER_BIKE, SPRITE_CHRIS_BIKE + db PLAYER_SURF, SPRITE_SURF + db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU + db $ff + +.Kris + db PLAYER_NORMAL, SPRITE_KRIS + db PLAYER_BIKE, SPRITE_KRIS_BIKE + db PLAYER_SURF, SPRITE_SURF + db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU + db $ff +; 141c9 + + +AddMapSprites: ; 141c9 + call GetMapPermission + call CheckOutdoorMap + jr z, .outdoor + call AddIndoorSprites + ret +.outdoor + call AddOutdoorSprites + ret +; 141d9 + + +AddIndoorSprites: ; 141d9 + ld hl, MapObjects + 1 * OBJECT_LENGTH + 1 ; sprite + ld a, 1 +.loop + push af + ld a, [hl] + call AddSpriteGFX + ld de, OBJECT_LENGTH + add hl, de + pop af + inc a + cp NUM_OBJECTS + jr nz, .loop + ret +; 141ee + + +AddOutdoorSprites: ; 141ee + ld a, [MapGroup] + dec a + ld c, a + ld b, 0 + ld hl, OutdoorSprites + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld c, $17 +.loop + push bc + ld a, [hli] + call AddSpriteGFX + pop bc + dec c + jr nz, .loop + ret +; 14209 + + +Function14209: ; 14209 + ld a, $4 + call $263b + call $439b + call $4215 + ret +; 14215 + +Function14215: ; 14215 + ld a, [$d13e] + bit 6, a + ret nz + ld c, $8 + ld a, $5 + ld hl, $442f + rst FarCall + call GetMapPermission + call CheckOutdoorMap + ld c, $b + jr z, .asm_1422f + ld c, $a + +.asm_1422f + ld a, $5 + ld hl, $442f + rst FarCall + ret +; 14236 + + + +SafeGetSprite: ; 14236 + push hl + call GetSprite + pop hl + ret +; 1423c + +GetSprite: ; 1423c + call GetMonSprite + ret c + + ld hl, SpriteHeaders + dec a + ld c, a + ld b, 0 + ld a, 6 + call AddNTimes + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + swap a + ld c, a + ld b, [hl] + ld a, [hli] + ld l, [hl] + ld h, a + ret +; 14259 + + +GetMonSprite: ; 14259 +; Return carry if a monster sprite was loaded. + + cp SPRITE_POKEMON + jr c, .Normal + cp SPRITE_DAYCARE_MON_1 + jr z, .BreedMon1 + cp SPRITE_DAYCARE_MON_2 + jr z, .BreedMon2 + cp SPRITE_VARS + jr nc, .Variable + jr .Icon + +.Normal + and a + ret + +.Icon + sub SPRITE_POKEMON + ld e, a + ld d, 0 + ld hl, SpriteMons + add hl, de + ld a, [hl] + jr .Mon + +.BreedMon1 + ld a, [BreedMon1Species] + jr .Mon + +.BreedMon2 + ld a, [BreedMon2Species] + +.Mon + ld e, a + and a + jr z, .asm_1429f + + ld a, $23 + ld hl, $682b + rst FarCall ; callba LoadMonSprite + + ld l, 1 + ld h, 0 + scf + ret + +.Variable + sub SPRITE_VARS + ld e, a + ld d, 0 + ld hl, VariableSprites + add hl, de + ld a, [hl] + and a + jp nz, GetMonSprite + +.asm_1429f + ld a, 1 + ld l, 1 + ld h, 0 + and a + ret +; 142a7 + + +Function142a7: ; 142a7 + cp SPRITE_POKEMON + jr nc, .asm_142c2 + + push hl + push bc + ld hl, SpriteHeaders + 4 + dec a + ld c, a + ld b, 0 + ld a, 6 + call AddNTimes + ld a, [hl] + pop bc + pop hl + cp 3 + jr nz, .asm_142c2 + scf + ret + +.asm_142c2 + and a + ret +; 142c4 + + +GetSpritePalette: ; 142c4 + ld a, c + call GetMonSprite + jr c, .asm_142d8 + + ld hl, SpriteHeaders + 5 ; palette + dec a + ld c, a + ld b, 0 + ld a, 6 + call AddNTimes + ld c, [hl] + ret + +.asm_142d8 + xor a + ld c, a + ret +; 142db + + +Function142db: ; 142db + call LoadSpriteGFX + call SortUsedSprites + call ArrangeUsedSprites + ret +; 142e5 + + +AddSpriteGFX: ; 142e5 +; Add any new sprite ids to a list of graphics to be loaded. +; Return carry if the list is full. + + push hl + push bc + ld b, a + ld hl, UsedSprites + 2 + ld c, $1f +.loop + ld a, [hl] + cp b + jr z, .exists + and a + jr z, .new + inc hl + inc hl + dec c + jr nz, .loop + + pop bc + pop hl + scf + ret + +.exists + pop bc + pop hl + and a + ret + +.new + ld [hl], b + pop bc + pop hl + and a + ret +; 14306 + + +LoadSpriteGFX: ; 14306 + + ld hl, UsedSprites + ld b, $20 +.loop + ld a, [hli] + and a + jr z, .done + push hl + call .LoadSprite + pop hl + ld [hli], a + dec b + jr nz, .loop + +.done + ret + +.LoadSprite + call GetSprite + ld a, l + ret +; 1431e + + +SortUsedSprites: ; 1431e +; Bubble-sort sprites by type. + +; Run backwards through UsedSprites to find the last one. + + ld c, $20 + ld de, UsedSprites + ($20 - 1) * 2 +.FindLastSprite + ld a, [de] + and a + jr nz, .FoundLastSprite + dec de + dec de + dec c + jr nz, .FindLastSprite +.FoundLastSprite + dec c + jr z, .quit + +; If the length of the current sprite is +; higher than a later one, swap them. + + inc de + ld hl, UsedSprites + 1 + +.CheckSprite + push bc + push de + push hl + +.CheckFollowing + ld a, [de] + cp [hl] + jr nc, .next + +; Swap the two sprites. + + ld b, a + ld a, [hl] + ld [hl], b + ld [de], a + dec de + dec hl + ld a, [de] + ld b, a + ld a, [hl] + ld [hl], b + ld [de], a + inc de + inc hl + +; Keep doing this until everything's in order. + +.next + dec de + dec de + dec c + jr nz, .CheckFollowing + + pop hl + inc hl + inc hl + pop de + pop bc + dec c + jr nz, .CheckSprite + +.quit + ret +; 14355 + + +ArrangeUsedSprites: ; 14355 +; Get the length of each sprite and space them out in VRAM. +; Crystal introduces a second table in VRAM bank 0. + + ld hl, UsedSprites + ld c, $20 + ld b, 0 +.FirstTableLength +; Keep going until the end of the list. + ld a, [hli] + and a + jr z, .quit + + ld a, [hl] + call GetSpriteLength + +; Spill over into the second table after $80 tiles. + add b + cp $80 + jr z, .next + jr nc, .SecondTable + +.next + ld [hl], b + inc hl + ld b, a + +; Assumes the next table will be reached before c hits 0. + dec c + jr nz, .FirstTableLength + +.SecondTable +; The second tile table starts at tile $80. + ld b, $80 + dec hl +.SecondTableLength +; Keep going until the end of the list. + ld a, [hli] + and a + jr z, .quit + + ld a, [hl] + call GetSpriteLength + +; There are only two tables, so don't go any further than that. + add b + jr c, .quit + + ld [hl], b + ld b, a + inc hl + + dec c + jr nz, .SecondTableLength + +.quit + ret +; 14386 + + +GetSpriteLength: ; 14386 +; Return the length of sprite type a in tiles. + + cp WALKING_SPRITE + jr z, .AnyDirection + cp STANDING_SPRITE + jr z, .AnyDirection + cp STILL_SPRITE + jr z, .OneDirection + + ld a, 12 + ret + +.AnyDirection + ld a, 12 + ret + +.OneDirection + ld a, 4 + ret +; 1439b + + +Function1439b: ; 1439b + ld hl, UsedSprites + ld c, $20 +.asm_143a0 + ld a, [$d13e] + res 5, a + ld [$d13e], a + ld a, [hli] + and a + jr z, .asm_143c7 + ld [$ffbd], a + ld a, [hli] + ld [$ffbe], a + bit 7, a + jr z, .asm_143bd + ld a, [$d13e] + set 5, a + ld [$d13e], a + +.asm_143bd + push bc + push hl + call $43c8 + pop hl + pop bc + dec c + jr nz, .asm_143a0 + +.asm_143c7 + ret +; 143c8 + +Function143c8: ; 143c8 + ld a, [$ffbd] + call SafeGetSprite + ld a, [$ffbe] + call $4406 + push hl + push de + push bc + ld a, [$d13e] + bit 7, a + jr nz, .asm_143df + call $4418 + +.asm_143df + pop bc + ld l, c + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + add hl, hl + pop de + add hl, de + ld d, h + ld e, l + pop hl + ld a, [$d13e] + bit 5, a + jr nz, .asm_14405 + bit 6, a + jr nz, .asm_14405 + ld a, [$ffbd] + call Function142a7 + jr c, .asm_14405 + ld a, h + add $8 + ld h, a + call $4418 + +.asm_14405 + ret +; 14406 + +Function14406: ; 14406 + and $7f + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + add hl, hl + ld a, l + add $0 + ld l, a + ld a, h + adc $80 + ld h, a + ret +; 14418 + +Function14418: ; 14418 + ld a, [rVBK] + push af + ld a, [$d13e] + bit 5, a + ld a, $1 + jr z, .asm_14426 + ld a, $0 + +.asm_14426 + ld [rVBK], a + call Functionf82 + pop af + ld [rVBK], a + ret +; 1442f + +Function1442f: ; 1442f + ld a, c + ld bc, $0006 + ld hl, $444d + call AddNTimes + ld e, [hl] + inc hl + ld d, [hl] + inc hl + ld c, [hl] + swap c + inc hl + ld b, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ld a, c + and a + ret z + call $412a + ret +; 1444d + +INCBIN "baserom.gbc", $1444d, $14495 - $1444d + + +SpriteMons: ; 14495 + db UNOWN + db GEODUDE + db GROWLITHE + db WEEDLE + db SHELLDER + db ODDISH + db GENGAR + db ZUBAT + db MAGIKARP + db SQUIRTLE + db TOGEPI + db BUTTERFREE + db DIGLETT + db POLIWAG + db PIKACHU + db CLEFAIRY + db CHARMANDER + db JYNX + db STARMIE + db BULBASAUR + db JIGGLYPUFF + db GRIMER + db EKANS + db PARAS + db TENTACOOL + db TAUROS + db MACHOP + db VOLTORB + db LAPRAS + db RHYDON + db MOLTRES + db SNORLAX + db GYARADOS + db LUGIA + db HO_OH +; 144b8 + + +OutdoorSprites: ; 144b8 +; Valid sprite IDs for each map group. + + dw Group1Sprites + dw Group2Sprites + dw Group3Sprites + dw Group4Sprites + dw Group5Sprites + dw Group6Sprites + dw Group7Sprites + dw Group8Sprites + dw Group9Sprites + dw Group10Sprites + dw Group11Sprites + dw Group12Sprites + dw Group13Sprites + dw Group14Sprites + dw Group15Sprites + dw Group16Sprites + dw Group17Sprites + dw Group18Sprites + dw Group19Sprites + dw Group20Sprites + dw Group21Sprites + dw Group22Sprites + dw Group23Sprites + dw Group24Sprites + dw Group25Sprites + dw Group26Sprites +; 144ec + + +Group13Sprites: ; 144ec + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14503 + +Group23Sprites: ; 14503 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1451a + +Group14Sprites: ; 1451a + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14531 + +Group6Sprites: ; 14531 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_BLUE + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_SWIMMER_GIRL + db SPRITE_SWIMMER_GUY + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14548 + +Group7Sprites: ; 14548 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_COOLTRAINER_M + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_POKEFAN_M + db SPRITE_ROCKET + db SPRITE_MISTY + db SPRITE_POKE_BALL + db SPRITE_SLOWPOKE +; 1455f + +Group25Sprites: ; 1455f + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_COOLTRAINER_M + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_POKEFAN_M + db SPRITE_ROCKET + db SPRITE_MISTY + db SPRITE_POKE_BALL + db SPRITE_SLOWPOKE +; 14576 + +Group21Sprites: ; 14576 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_FISHER + db SPRITE_POLIWAG + db SPRITE_TEACHER + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_BIKER + db SPRITE_SILVER + db SPRITE_BLUE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1458d + +Group18Sprites: ; 1458d + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145a4 + +Group12Sprites: ; 145a4 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145bb + +Group17Sprites: ; 145bb + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_POKEFAN_M + db SPRITE_MACHOP + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD + db SPRITE_BIG_SNORLAX + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 145d2 + +Group16Sprites: ; 145d2 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM db SPRITE_POKEDEX db SPRITE_WILL db SPRITE_KAREN @@ -16094,1090 +22976,5158 @@ Group18Sprites: ; 1458d db SPRITE_SUDOWOODO db SPRITE_BIG_SNORLAX db SPRITE_POKEFAN_M + db SPRITE_BUENA + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_SUPER_NERD db SPRITE_MACHOP + db SPRITE_BIKER + db SPRITE_POKE_BALL + db SPRITE_BOULDER +; 145e9 + +Group24Sprites: ; 145e9 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14600 + +Group26Sprites: ; 14600 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14617 + +Group19Sprites: ; 14617 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SILVER + db SPRITE_TEACHER + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_YOUNGSTER + db SPRITE_MONSTER + db SPRITE_GRAMPS + db SPRITE_BUG_CATCHER + db SPRITE_COOLTRAINER_F + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1462e + +Group10Sprites: ; 1462e + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_FISHER + db SPRITE_LASS + db SPRITE_OFFICER db SPRITE_GRAMPS db SPRITE_YOUNGSTER + db SPRITE_COOLTRAINER_M + db SPRITE_BUG_CATCHER + db SPRITE_SUPER_NERD + db SPRITE_WEIRD_TREE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 14645 + +Group4Sprites: ; 14645 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX db SPRITE_FISHER + db SPRITE_LASS + db SPRITE_OFFICER + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_COOLTRAINER_M + db SPRITE_BUG_CATCHER + db SPRITE_SUPER_NERD + db SPRITE_WEIRD_TREE + db SPRITE_POKE_BALL + db SPRITE_FRUIT_TREE +; 1465c + +Group8Sprites: ; 1465c + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_KURT_OUTSIDE + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_OFFICER + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT db SPRITE_TEACHER + db SPRITE_AZALEA_ROCKET + db SPRITE_LASS + db SPRITE_SILVER + db SPRITE_FRUIT_TREE + db SPRITE_SLOWPOKE +; 14673 + +Group11Sprites: ; 14673 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_POKE_BALL + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_OFFICER + db SPRITE_POKEFAN_M + db SPRITE_DAYCARE_MON_1 + db SPRITE_COOLTRAINER_F + db SPRITE_ROCKET + db SPRITE_LASS + db SPRITE_DAYCARE_MON_2 + db SPRITE_FRUIT_TREE + db SPRITE_SLOWPOKE +; 1468a + +Group22Sprites: ; 1468a + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_STANDING_YOUNGSTER + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_OLIVINE_RIVAL + db SPRITE_POKEFAN_M + db SPRITE_LASS + db SPRITE_BUENA + db SPRITE_SWIMMER_GIRL + db SPRITE_SAILOR + db SPRITE_POKEFAN_F db SPRITE_SUPER_NERD + db SPRITE_TAUROS + db SPRITE_FRUIT_TREE + db SPRITE_ROCK +; 146a1 + +Group1Sprites: ; 146a1 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_STANDING_YOUNGSTER + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO db SPRITE_BIG_SNORLAX - db SPRITE_BIKER + db SPRITE_OLIVINE_RIVAL + db SPRITE_POKEFAN_M + db SPRITE_LASS + db SPRITE_BUENA + db SPRITE_SWIMMER_GIRL + db SPRITE_SAILOR + db SPRITE_POKEFAN_F + db SPRITE_SUPER_NERD + db SPRITE_TAUROS + db SPRITE_FRUIT_TREE + db SPRITE_ROCK +; 146b8 + +Group9Sprites: ; 146b8 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_LANCE + db SPRITE_GRAMPS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_COOLTRAINER_M + db SPRITE_LASS + db SPRITE_YOUNGSTER + db SPRITE_GYARADOS + db SPRITE_FRUIT_TREE + db SPRITE_POKE_BALL +; 146cf + +Group2Sprites: ; 146cf + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_M + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER + db SPRITE_FRUIT_TREE db SPRITE_POKE_BALL +; 146e6 + +Group5Sprites: ; 146e6 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_GRAMPS + db SPRITE_YOUNGSTER + db SPRITE_LASS + db SPRITE_SUPER_NERD + db SPRITE_COOLTRAINER_M + db SPRITE_POKEFAN_M + db SPRITE_BLACK_BELT + db SPRITE_COOLTRAINER_F + db SPRITE_FISHER db SPRITE_FRUIT_TREE -; 145a4 + db SPRITE_POKE_BALL +; 146fd + +Group3Sprites: ; 146fd + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_GAMEBOY_KID + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_LASS + db SPRITE_POKEFAN_F + db SPRITE_TEACHER + db SPRITE_YOUNGSTER + db SPRITE_GROWLITHE + db SPRITE_POKEFAN_M + db SPRITE_ROCKER + db SPRITE_FISHER + db SPRITE_SCIENTIST + db SPRITE_POKE_BALL + db SPRITE_BOULDER +; 14714 + +Group15Sprites: ; 14714 + db SPRITE_SUICUNE + db SPRITE_SILVER_TROPHY + db SPRITE_FAMICOM + db SPRITE_POKEDEX + db SPRITE_WILL + db SPRITE_KAREN + db SPRITE_NURSE + db SPRITE_OLD_LINK_RECEPTIONIST + db SPRITE_BIG_LAPRAS + db SPRITE_BIG_ONIX + db SPRITE_SUDOWOODO + db SPRITE_BIG_SNORLAX + db SPRITE_SAILOR + db SPRITE_FISHING_GURU + db SPRITE_GENTLEMAN + db SPRITE_SUPER_NERD + db SPRITE_HO_OH + db SPRITE_TEACHER + db SPRITE_COOLTRAINER_F + db SPRITE_YOUNGSTER + db SPRITE_FAIRY + db SPRITE_POKE_BALL + db SPRITE_ROCK +; 1472b + +Group20Sprites: ; 1472b + db SPRITE_OAK + db SPRITE_FISHER + db SPRITE_TEACHER + db SPRITE_TWIN + db SPRITE_POKEFAN_M + db SPRITE_GRAMPS + db SPRITE_FAIRY + db SPRITE_SILVER + db SPRITE_FISHING_GURU + db SPRITE_POKE_BALL + db SPRITE_POKEDEX +; 14736 + + +SpriteHeaders: ; 14736 +INCLUDE "gfx/overworld/sprite_headers.asm" +; 1499a + + +Function1499a: ; 1499a + ld a, [StandingTile] + cp $60 + jr z, .asm_149ad + cp $68 + jr z, .asm_149ad + and $f0 + cp $70 + jr z, .asm_149ad + and a + ret + +.asm_149ad + scf + ret +; 149af + +INCBIN "baserom.gbc", $149af, $14a07 - $149af + + +Function14a07: ; 14a07 + ld a, [StandingTile] + ld de, $001f + cp $71 + ret z + ld de, $0013 + cp $7c + ret z + ld de, $0023 + ret +; 14a1a + +INCBIN "baserom.gbc", $14a1a, $14b5f - $14a1a + + +Function14b5f: ; 14b5f + ld a, $1 + call GetSRAMBank + ld hl, $bdd9 + ld de, $be3b + ld bc, $0b1a +.asm_14b6d + ld a, [hld] + ld [de], a + dec de + dec bc + ld a, c + or b + jr nz, .asm_14b6d + ld hl, OverworldMap + ld de, $b2c0 + ld bc, $0062 + call CopyBytes + call CloseSRAM + ret +; 14b85 + +Function14b85: ; 14b85 + call $4c10 + ret +; 14b89 + +INCBIN "baserom.gbc", $14b89, $14c10 - $14b89 + + +Function14c10: ; 14c10 + ld a, $1 + ld [$cfcd], a + ld a, $5 + ld hl, $4056 + rst FarCall + ld a, $41 + ld hl, $50d9 + rst FarCall + call $4da9 + call $4dbb + call $4dd7 + call $4df7 + call $4e0c + call $4e13 + call $4e2d + call $4e40 + call $4e55 + call $4e76 + call $4e8b + call $4c6b + ld a, $11 + ld hl, $4725 + rst FarCall + ld a, $41 + ld hl, $6187 + rst FarCall + ld a, $5 + ld hl, $406a + rst FarCall + ld a, $1 + call GetSRAMBank + ld a, [$be45] + cp $4 + jr nz, .asm_14c67 + xor a + ld [$be45], a + +.asm_14c67 + call CloseSRAM + ret +; 14c6b + +Function14c6b: ; 14c6b + call $4c90 + ld a, $0 + call GetSRAMBank + ld a, [$bf10] + ld e, a + ld a, [$bf11] + ld d, a + or e + jr z, .asm_14c84 + ld a, e + sub l + ld a, d + sbc h + jr c, .asm_14c8c + +.asm_14c84 + ld a, l + ld [$bf10], a + ld a, h + ld [$bf11], a + +.asm_14c8c + call CloseSRAM + ret +; 14c90 + +Function14c90: ; 14c90 + ld hl, $c000 +.asm_14c93 + ld a, [hl] + or a + ret nz + inc hl + jr .asm_14c93 +; 14c99 + +INCBIN "baserom.gbc", $14c99, $14cbb - $14c99 + + +Function14cbb: ; 14cbb + call $51fb + call $4d06 + call $4ce2 + call $4cf4 + call $4d68 + call $4d5c + ld a, $0 + call GetSRAMBank + xor a + ld [$bf10], a + ld [$bf11], a + call CloseSRAM + ld a, $1 + ld [$d4b4], a + ret +; 14ce2 + +Function14ce2: ; 14ce2 + ld a, $1 + call GetSRAMBank + ld hl, $b260 + ld bc, $0060 + xor a + call ByteFill + jp CloseSRAM +; 14cf4 + +Function14cf4: ; 14cf4 + ld a, $0 + call GetSRAMBank + ld hl, $abe4 + ld bc, $004c + xor a + call ByteFill + jp CloseSRAM +; 14d06 + +Function14d06: ; 14d06 + ld a, $1 + call GetSRAMBank + ld hl, $b2c0 + ld bc, $0b7c + xor a + call ByteFill + jp CloseSRAM +; 14d18 + +INCBIN "baserom.gbc", $14d18, $14d5c - $14d18 + + +Function14d5c: ; 14d5c + ld a, $1 + call GetSRAMBank + xor a + ld [$be45], a + jp CloseSRAM +; 14d68 + +Function14d68: ; 14d68 + call $509a + ret +; 14d6c + +INCBIN "baserom.gbc", $14d6c, $14da0 - $14d6c + + +Function14da0: ; 14da0 + ld a, [$d4b4] + and a + ret nz + call $4cbb + ret +; 14da9 + +Function14da9: ; 14da9 + ld a, $1 + call GetSRAMBank + ld a, $63 + ld [$a008], a + ld a, $7f + ld [$ad0f], a + jp CloseSRAM +; 14dbb + +Function14dbb: ; 14dbb + ld a, $1 + call GetSRAMBank + ld hl, Options + ld de, $a000 + ld bc, $0008 + call CopyBytes + ld a, [Options] + and $ef + ld [$a000], a + jp CloseSRAM +; 14dd7 + +Function14dd7: ; 14dd7 + ld a, $1 + call GetSRAMBank + ld hl, PlayerID + ld de, $a009 + ld bc, $082a + call CopyBytes + ld hl, FlypointPerms + ld de, $a833 + ld bc, $0032 + call CopyBytes + jp CloseSRAM +; 14df7 + +Function14df7: ; 14df7 + ld a, $1 + call GetSRAMBank + ld hl, PartyCount + ld de, $a865 + ld bc, $031e + call CopyBytes + call CloseSRAM + ret +; 14e0c + +Function14e0c: ; 14e0c + call $50d8 + call $50f9 + ret +; 14e13 + +Function14e13: ; 14e13 + ld hl, $a009 + ld bc, $0b7a + ld a, $1 + call GetSRAMBank + call $5273 + ld a, e + ld [$ad0d], a + ld a, d + ld [$ad0e], a + call CloseSRAM + ret +; 14e2d + +Function14e2d: ; 14e2d + ld a, $0 + call GetSRAMBank + ld a, $63 + ld [$b208], a + ld a, $7f + ld [$bf0f], a + call CloseSRAM + ret +; 14e40 + +Function14e40: ; 14e40 + ld a, $0 + call GetSRAMBank + ld hl, Options + ld de, $b200 + ld bc, $0008 + call CopyBytes + call CloseSRAM + ret +; 14e55 + +Function14e55: ; 14e55 + ld a, $0 + call GetSRAMBank + ld hl, PlayerID + ld de, $b209 + ld bc, $082a + call CopyBytes + ld hl, FlypointPerms + ld de, $ba33 + ld bc, $0032 + call CopyBytes + call CloseSRAM + ret +; 14e76 + +Function14e76: ; 14e76 + ld a, $0 + call GetSRAMBank + ld hl, PartyCount + ld de, $ba65 + ld bc, $031e + call CopyBytes + call CloseSRAM + ret +; 14e8b + +Function14e8b: ; 14e8b + ld hl, $b209 + ld bc, $0b7a + ld a, $0 + call GetSRAMBank + call $5273 + ld a, e + ld [$bf0d], a + ld a, d + ld [$bf0e], a + call CloseSRAM + ret +; 14ea5 + +INCBIN "baserom.gbc", $14ea5, $14f1c - $14ea5 + + +Function14f1c: ; 14f1c + xor a + ld [$cfcd], a + call Function14f84 + ld a, [$cfcd] + and a + jr z, .asm_14f46 + ld a, $1 + call GetSRAMBank + ld hl, $a044 + ld de, StartDay + ld bc, $0008 + call CopyBytes + ld hl, $a3da + ld de, StatusFlags + ld a, [hl] + ld [de], a + call CloseSRAM + ret + +.asm_14f46 + call Function14faf + ld a, [$cfcd] + and a + jr z, .asm_14f6c + ld a, $0 + call GetSRAMBank + ld hl, $b244 + ld de, StartDay + ld bc, $0008 + call CopyBytes + ld hl, $b5da + ld de, StatusFlags + ld a, [hl] + ld [de], a + call CloseSRAM + ret + +.asm_14f6c + ld hl, $4f7c + ld de, Options + ld bc, $0008 + call CopyBytes + call Function67e + ret +; 14f7c + +INCBIN "baserom.gbc", $14f7c, $14f84 - $14f7c + + +Function14f84: ; 14f84 + ld a, $1 + call GetSRAMBank + ld a, [$a008] + cp $63 + jr nz, .asm_14fab + ld a, [$ad0f] + cp $7f + jr nz, .asm_14fab + ld hl, $a000 + ld de, Options + ld bc, $0008 + call CopyBytes + call CloseSRAM + ld a, $1 + ld [$cfcd], a + +.asm_14fab + call CloseSRAM + ret +; 14faf + +Function14faf: ; 14faf + ld a, $0 + call GetSRAMBank + ld a, [$b208] + cp $63 + jr nz, .asm_14fd3 + ld a, [$bf0f] + cp $7f + jr nz, .asm_14fd3 + ld hl, $b200 + ld de, Options + ld bc, $0008 + call CopyBytes + ld a, $2 + ld [$cfcd], a + +.asm_14fd3 + call CloseSRAM + ret +; 14fd7 + +INCBIN "baserom.gbc", $14fd7, $1509a - $14fd7 + + +Function1509a: ; 1509a + ld a, $1 + call GetSRAMBank + ld hl, PlayerGender + ld de, $be3d + ld bc, $0007 + call CopyBytes + ld hl, $d479 + ld a, [hli] + ld [$a60e], a + ld a, [hli] + ld [$a60f], a + jp CloseSRAM +; 150b9 + +INCBIN "baserom.gbc", $150b9, $150d8 - $150b9 + + +Function150d8: ; 150d8 + ld a, [$db72] + cp $e + jr c, .asm_150e3 + xor a + ld [$db72], a + +.asm_150e3 + ld e, a + ld d, $0 + ld hl, $522d + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld a, [hli] + push af + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld h, [hl] + ld l, a + pop af + ret +; 150f9 + +Function150f9: ; 150f9 + push hl + push af + push de + ld a, $1 + call GetSRAMBank + ld hl, $ad10 + ld de, EnemyMoveAnimation + ld bc, $01e0 + call CopyBytes + call CloseSRAM + pop de + pop af + push af + push de + call GetSRAMBank + ld hl, EnemyMoveAnimation + ld bc, $01e0 + call CopyBytes + call CloseSRAM + ld a, $1 + call GetSRAMBank + ld hl, $aef0 + ld de, EnemyMoveAnimation + ld bc, $01e0 + call CopyBytes + call CloseSRAM + pop de + pop af + ld hl, $01e0 + add hl, de + ld e, l + ld d, h + push af + push de + call GetSRAMBank + ld hl, EnemyMoveAnimation + ld bc, $01e0 + call CopyBytes + call CloseSRAM + ld a, $1 + call GetSRAMBank + ld hl, $b0d0 + ld de, EnemyMoveAnimation + ld bc, $008e + call CopyBytes + call CloseSRAM + pop de + pop af + ld hl, $01e0 + add hl, de + ld e, l + ld d, h + call GetSRAMBank + ld hl, EnemyMoveAnimation + ld bc, $008e + call CopyBytes + call CloseSRAM + pop hl + ret +; 1517d + +INCBIN "baserom.gbc", $1517d, $151fb - $1517d + + +Function151fb: ; 151fb + ld hl, $522d + ld c, $e +.asm_15200 + push bc + ld a, [hli] + call GetSRAMBank + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + xor a + ld [de], a + inc de + ld a, $ff + ld [de], a + inc de + ld bc, $044c +.asm_15213 + xor a + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .asm_15213 + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, $ff + ld [de], a + inc de + xor a + ld [de], a + call CloseSRAM + pop bc + dec c + jr nz, .asm_15200 + ret +; 1522d + +INCBIN "baserom.gbc", $1522d, $15273 - $1522d + + +Function15273: ; 15273 + ld de, $0000 +.asm_15276 + ld a, [hli] + add e + ld e, a + ld a, $0 + adc d + ld d, a + dec bc + ld a, b + or c + jr nz, .asm_15276 + ret +; 15283 + +INCBIN "baserom.gbc", $15283, $152ab - $15283 + + +BlackoutPoints: ; 0x152ab + db GROUP_KRISS_HOUSE_2F, MAP_KRISS_HOUSE_2F, 3, 3 + db GROUP_VIRIDIAN_POKECENTER_1F, MAP_VIRIDIAN_POKECENTER_1F, 5, 3 ; unused + db GROUP_PALLET_TOWN, MAP_PALLET_TOWN, 5, 6 + db GROUP_VIRIDIAN_CITY, MAP_VIRIDIAN_CITY, 23, 26 + db GROUP_PEWTER_CITY, MAP_PEWTER_CITY, 13, 26 + db GROUP_CERULEAN_CITY, MAP_CERULEAN_CITY, 19, 22 + db GROUP_ROUTE_10A, MAP_ROUTE_10A, 11, 2 + db GROUP_VERMILION_CITY, MAP_VERMILION_CITY, 9, 6 + db GROUP_LAVENDER_TOWN, MAP_LAVENDER_TOWN, 5, 6 + db GROUP_SAFFRON_CITY, MAP_SAFFRON_CITY, 9, 30 + db GROUP_CELADON_CITY, MAP_CELADON_CITY, 29, 10 + db GROUP_FUCHSIA_CITY, MAP_FUCHSIA_CITY, 19, 28 + db GROUP_CINNABAR_ISLAND, MAP_CINNABAR_ISLAND, 11, 12 + db GROUP_ROUTE_23, MAP_ROUTE_23, 9, 6 + db GROUP_NEW_BARK_TOWN, MAP_NEW_BARK_TOWN, 13, 6 + db GROUP_CHERRYGROVE_CITY, MAP_CHERRYGROVE_CITY, 29, 4 + db GROUP_VIOLET_CITY, MAP_VIOLET_CITY, 31, 26 + db GROUP_ROUTE_32, MAP_ROUTE_32, 11, 74 + db GROUP_AZALEA_TOWN, MAP_AZALEA_TOWN, 15, 10 + db GROUP_CIANWOOD_CITY, MAP_CIANWOOD_CITY, 23, 44 + db GROUP_GOLDENROD_CITY, MAP_GOLDENROD_CITY, 15, 28 + db GROUP_OLIVINE_CITY, MAP_OLIVINE_CITY, 13, 22 + db GROUP_ECRUTEAK_CITY, MAP_ECRUTEAK_CITY, 23, 28 + db GROUP_MAHOGANY_TOWN, MAP_MAHOGANY_TOWN, 15, 14 + db GROUP_LAKE_OF_RAGE, MAP_LAKE_OF_RAGE, 21, 29 + db GROUP_BLACKTHORN_CITY, MAP_BLACKTHORN_CITY, 21, 30 + db GROUP_SILVER_CAVE_OUTSIDE, MAP_SILVER_CAVE_OUTSIDE, 23, 20 + db GROUP_FAST_SHIP_CABINS_SW_SSW_NW, MAP_FAST_SHIP_CABINS_SW_SSW_NW, 6, 2 + db $ff, $ff, $ff, $ff + +INCBIN "baserom.gbc", $1531f, $15736 - $1531f + +KrissPCMenuData: ; 0x15736 + db %01000000 + db 0, 0 ; top left corner coords (y, x) + db 12, 15 ; bottom right corner coords (y, x) + dw .KrissPCMenuData2 + db 1 ; default selected option + +.KrissPCMenuData2 + db %10100000 ; bit7 + db 0 ; # items? + dw .KrissPCMenuList1 + db $8d + db $1f + dw .KrissPCMenuPointers + +.KrissPCMenuPointers ; 0x15746 + dw KrisWithdrawItemMenu, .WithdrawItem + dw KrisDepositItemMenu, .DepositItem + dw KrisTossItemMenu, .TossItem + dw KrisMailBoxMenu, .MailBox + dw KrisDecorationMenu, .Decoration + dw KrisLogOffMenu, .LogOff + dw KrisLogOffMenu, .TurnOff + +.WithdrawItem db "WITHDRAW ITEM@" +.DepositItem db "DEPOSIT ITEM@" +.TossItem db "TOSS ITEM@" +.MailBox db "MAIL BOX@" +.Decoration db "DECORATION@" +.TurnOff db "TURN OFF@" +.LogOff db "LOG OFF@" + +WITHDRAW_ITEM EQU 0 +DEPOSIT_ITEM EQU 1 +TOSS_ITEM EQU 2 +MAIL_BOX EQU 3 +DECORATION EQU 4 +TURN_OFF EQU 5 +LOG_OFF EQU 6 + +.KrissPCMenuList1 + db 5 + db WITHDRAW_ITEM + db DEPOSIT_ITEM + db TOSS_ITEM + db MAIL_BOX + db TURN_OFF + db $ff + +.KrissPCMenuList2 + db 6 + db WITHDRAW_ITEM + db DEPOSIT_ITEM + db TOSS_ITEM + db MAIL_BOX + db DECORATION + db LOG_OFF + db $ff + +INCBIN "baserom.gbc", $157bb, $157d1 - $157bb + +KrisWithdrawItemMenu: ; 0x157d1 + call $1d6e + ld a, BANK(ClearPCItemScreen) + ld hl, ClearPCItemScreen + rst $8 +.asm_157da + call Function15985 + jr c, .asm_157e4 + call Function157e9 + jr .asm_157da + +.asm_157e4 + call $2b3c + xor a + ret +; 0x157e9 + +Function157e9: ; 0x157e9 + ; check if the item has a quantity + ld a, BANK(_CheckTossableItem) + ld hl, _CheckTossableItem + rst $8 + ld a, [$d142] + and a + jr z, .askquantity + + ; items without quantity are always ×1 + ld a, 1 + ld [$d10c], a + jr .withdraw + +.askquantity + ld hl, .HowManyText + call $1d4f + ld a, $9 + ld hl, $4fbf + rst $8 + call Function1c07 + call Function1c07 + jr c, .done + +.withdraw + ld a, [$d10c] + ld [Buffer1], a ; quantity + ld a, [$d107] + ld [Buffer2], a + ld hl, NumItems + call $2f66 + jr nc, .PackFull + ld a, [Buffer1] + ld [$d10c], a + ld a, [Buffer2] + ld [$d107], a + ld hl, $d8f1 + call $2f53 + ld a, $3b + call Predef + ld hl, .WithdrewText + call $1d4f + xor a + ld [hBGMapMode], a + call Function1c07 + ret + +.PackFull + ld hl, .NoRoomText + call $1d67 + ret + +.done + ret +; 0x15850 + +.HowManyText ; 0x15850 + TX_FAR _KrissPCHowManyWithdrawText + db "@" + +.WithdrewText ; 0x15855 + TX_FAR _KrissPCWithdrewItemsText + db "@" + +.NoRoomText ; 0x1585a + TX_FAR _KrissPCNoRoomWithdrawText + db "@" + + +KrisTossItemMenu: ; 0x1585f + call $1d6e + ld a, BANK(ClearPCItemScreen) + ld hl, ClearPCItemScreen + rst $8 +.asm_15868 + call Function15985 + jr c, .asm_15878 + ld de, $d8f1 + ld a, $4 + ld hl, $69f4 + rst $8 + jr .asm_15868 + +.asm_15878 + call $2b3c + xor a + ret +; 0x1587d + + +KrisDecorationMenu: ; 0x1587d + ld a, BANK(_KrisDecorationMenu) + ld hl, _KrisDecorationMenu + rst $8 + ld a, c + and a + ret z + scf + ret +; 0x15888 + + +KrisLogOffMenu: ; 0x15888 + xor a + scf + ret +; 0x1588b + + +KrisDepositItemMenu: ; 0x1588b + call Function158b8 + jr c, .asm_158b6 + call Function2ed3 + call $1d6e + ld a, $4 + ld hl, $46a5 + rst $8 +.asm_1589c + ld a, $4 + ld hl, $46be + rst $8 + ld a, [$cf66] + and a + jr z, .asm_158b3 + call Function158cc + ld a, $4 + ld hl, CheckRegisteredItem + rst $8 + jr .asm_1589c + +.asm_158b3 + call $2b3c + +.asm_158b6 + xor a + ret +; 0x158b8 + +Function158b8: ; 0x158b8 + ld a, $4 + ld hl, $69d5 + rst $8 + ret nc + ld hl, Text158c7 + call $1d67 + scf + ret +; 0x158c7 + +Text158c7: ; 0x15c87 + TX_FAR UnknownText_0x1c13df + db "@" + + +Function158cc: ; 0x158cc + ld a, [$c2ce] + push af + ld a, $0 + ld [$c2ce], a + ld a, $3 + ld hl, $5453 + rst $8 + ld a, [$d142] + ld hl, JumpTable158e7 + rst JumpTable + pop af + ld [$c2ce], a + ret +; 0x158e7 + +JumpTable158e7: ; 0x158e7 + dw .jump2 + dw .jump1 + dw .jump1 + dw .jump1 + dw .jump2 + dw .jump2 + dw .jump2 + +.jump1: + ret +.jump2: + ld a, [Buffer1] + push af + ld a, [Buffer2] + push af + call Function1590a + pop af + ld [Buffer2], a + pop af + ld [Buffer1], a + ret +; 0x1590a + +Function1590a: ; 0x1590a + ld a, $3 + ld hl, $5427 + rst $8 + ld a, [$d142] + and a + jr z, .asm_1591d + ld a, $1 + ld [$d10c], a + jr .asm_15933 + +.asm_1591d + ld hl, .HowManyText + call $1d4f + ld a, $9 + ld hl, $4fbf + rst $8 + push af + call Function1c07 + call Function1c07 + pop af + jr c, .asm_1596c + +.asm_15933 + ld a, [$d10c] + ld [Buffer1], a + ld a, [$d107] + ld [Buffer2], a + ld hl, $d8f1 + call $2f66 + jr nc, .asm_15965 + ld a, [Buffer1] + ld [$d10c], a + ld a, [Buffer2] + ld [$d107], a + ld hl, NumItems + call $2f53 + ld a, $3b + call Predef + ld hl, .DepositText + call PrintText + ret + +.asm_15965 + ld hl, .NoRoomText + call PrintText + ret + +.asm_1596c + and a + ret +; 0x1596e + + +.HowManyText ; 0x1596e + TX_FAR _KrissPCHowManyDepositText + db "@" + +.DepositText ; 0x15973 + TX_FAR _KrissPCDepositItemsText + db "@" + +.NoRoomText ; 0x15978 + TX_FAR _KrissPCNoRoomDepositText + db "@" + + +KrisMailBoxMenu: ; 0x1597d + ld a, $11 + ld hl, $47a0 + rst $8 + xor a + ret +; 0x15985 + + +Function15985: ; 0x15985 + xor a + ld [$d0e3], a + ld a, [$c2ce] + push af + ld a, $0 + ld [$c2ce], a + ld hl, MenuData15a08 + call Function1d3c + hlcoord 0, 0 + ld b, $a + ld c, $12 + call TextBox + ld a, [$d0d7] + ld [$cf88], a + ld a, [$d0dd] + ld [$d0e4], a + call $350c + ld a, [$d0e4] + ld [$d0dd], a + ld a, [$cfa9] + ld [$d0d7], a + pop af + ld [$c2ce], a + ld a, [$d0e3] + and a + jr nz, .asm_159d8 + ld a, [$cf73] + cp $2 + jr z, .asm_15a06 + cp $1 + jr z, .asm_159fb + cp $4 + jr z, .asm_159f2 + jr .asm_159f8 + +.asm_159d8 + ld a, [$cf73] + cp $2 + jr z, .asm_159e9 + cp $1 + jr z, .asm_159ef + cp $4 + jr z, .asm_159ef + jr .asm_159f8 + +.asm_159e9 + xor a + ld [$d0e3], a + jr .asm_159f8 + +.asm_159ef + call $56c7 + +.asm_159f2 + ld a, $9 + ld hl, $490c + rst $8 + +.asm_159f8 + jp $5989 + +.asm_159fb + ld a, $9 + ld hl, $4706 + rst $8 + call $1bee + and a + ret + +.asm_15a06 + scf + ret +; 0x15a08 + +MenuData15a08: ; 0x15a08 + db %01000000 + db 1, 4 ; top left corner coords (y, x) + db $a, $12 ; bottorm right corner coords (y, x) + dw .MenuData2 + db 1 ; default selected option + +.MenuData2 + db %10110000 + db 4, 8 ; rows/cols? + db 2 ; horizontal spacing? + dbw 0, $d8f1 + dbw BANK(Function24ab4), Function24ab4 + dbw BANK(Function24ac3), Function24ac3 + dbw BANK(Function244c3), Function244c3 + +INCBIN "baserom.gbc", $15a20, $15a45 - $15a20 + + +Function15a45: ; 15a45 + call $5b31 + ld a, c + ld [EngineBuffer1], a + call $5b10 + ld a, [EngineBuffer1] + ld hl, $5a57 + rst JumpTable + ret +; 15a57 + +INCBIN "baserom.gbc", $15a57, $15a6e - $15a57 + + +Function15a6e: ; 15a6e + call $5bbb + call $1d6e + ld hl, $5e4a + call $5fcd + call $5c62 + ld hl, $5e68 + call $5fcd + ret +; 15a84 + +Function15a84: ; 15a84 + ld b, $5 + ld de, $5c51 + call $5b10 + call $5c25 + call $1d6e + ld hl, $5e6d + call $5fcd + call $5c62 + ld hl, WalkingDirection + ld a, [hli] + or [hl] + jr z, .asm_15aa7 + ld hl, $dc1e + set 6, [hl] + +.asm_15aa7 + ld hl, $5e8b + call $5fcd + ret +; 15aae + +Function15aae: ; 15aae + call $5bbb + call $1d6e + ld hl, $5e90 + call $5fcd + call $5c62 + ld hl, $5eae + call $5fcd + ret +; 15ac4 + +Function15ac4: ; 15ac4 + ld b, $5 + ld de, $5aee + ld hl, StatusFlags + bit 6, [hl] + jr z, .asm_15ad5 + ld b, $5 + ld de, $5aff + +.asm_15ad5 + call $5b10 + call $5c25 + call $1d6e + ld hl, $5f83 + call $5fcd + call $5c62 + ld hl, $5fb4 + call $5fcd + ret +; 15aee + +INCBIN "baserom.gbc", $15aee, $15b10 - $15aee + + +Function15b10: ; 15b10 + ld a, b + ld [CurFruit], a + ld a, e + ld [$d040], a + ld a, d + ld [$d041], a + ld hl, $d0f0 + xor a + ld bc, $0010 + call ByteFill + xor a + ld [MovementAnimation], a + ld [WalkingDirection], a + ld [FacingDirection], a + ret +; 15b31 + +Function15b31: ; 15b31 + ld a, e + cp $22 + jr c, .asm_15b3c + ld b, $5 + ld de, $6214 + ret + +.asm_15b3c + ld hl, $60a9 + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld b, $5 + ret +; 15b47 + +Function15b47: ; 15b47 +.asm_15b47 + ld a, [MovementAnimation] + ld hl, $5b56 + rst JumpTable + ld [MovementAnimation], a + cp $ff + jr nz, .asm_15b47 + ret +; 15b56 + +INCBIN "baserom.gbc", $15b56, $15b62 - $15b56 + + +Function15b62: ; 15b62 + call $1d6e + ld hl, $5f83 + call PrintText + ld a, $1 + ret +; 15b6e + +Function15b6e: ; 15b6e + ld hl, $5f88 + call Function1d3c + call Function1d81 + jr c, .asm_15b84 + ld a, [$cfa9] + cp $1 + jr z, .asm_15b87 + cp $2 + jr z, .asm_15b8a + +.asm_15b84 + ld a, $4 + ret + +.asm_15b87 + ld a, $2 + ret + +.asm_15b8a + ld a, $3 + ret +; 15b8d + +Function15b8d: ; 15b8d + call Function1c07 + call $5bbb + call $5c62 + and a + ld a, $5 + ret +; 15b9a + +Function15b9a: ; 15b9a + call Function1c07 + call $5eb3 + ld a, $5 + ret +; 15ba3 + +Function15ba3: ; 15ba3 + call Function1c07 + ld hl, $5fb4 + call $5fcd + ld a, $ff + ret +; 15baf + +Function15baf: ; 15baf + call $1d6e + ld hl, $5fb9 + call PrintText + ld a, $1 + ret +; 15bbb + +Function15bbb: ; 15bbb + ld hl, $d040 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $d0f0 +.asm_15bc4 + ld a, [CurFruit] + call GetFarByte + ld [de], a + inc hl + inc de + cp $ff + jr nz, .asm_15bc4 + ld hl, DefaultFlypoint + ld de, $d0f1 +.asm_15bd7 + ld a, [de] + inc de + cp $ff + jr z, .asm_15be4 + push de + call $5be5 + pop de + jr .asm_15bd7 + +.asm_15be4 + ret +; 15be5 + +Function15be5: ; 15be5 + push hl + ld [CurItem], a + ld a, $3 + ld hl, $5486 + rst FarCall + pop hl + push hl + ld a, d + ld [StringBuffer2], a + ld a, e + ld [$d087], a + ld hl, StringBuffer1 + ld de, StringBuffer2 + ld bc, $8206 + call $3198 + pop hl + ld de, StringBuffer1 + ld c, $3 +.asm_15c0b + call $5c1a + swap a + ld b, a + call $5c1a + or b + ld [hli], a + dec c + jr nz, .asm_15c0b + ret +; 15c1a + +Function15c1a: ; 15c1a + ld a, [de] + inc de + cp $7f + jr nz, .asm_15c22 + ld a, $f6 + +.asm_15c22 + sub $f6 + ret +; 15c25 + +Function15c25: ; 15c25 + ld hl, $d040 + ld a, [hli] + ld h, [hl] + ld l, a + push hl + inc hl + ld bc, DefaultFlypoint + ld de, $d0f1 +.asm_15c33 + ld a, [hli] + ld [de], a + inc de + cp $ff + jr z, .asm_15c4b + push de + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + push hl + ld h, b + ld l, c + call $5bf0 + ld b, h + ld c, l + pop hl + pop de + jr .asm_15c33 + +.asm_15c4b + pop hl + ld a, [hl] + ld [$d0f0], a + ret +; 15c51 + +INCBIN "baserom.gbc", $15c51, $15c62 - $15c51 + + +Function15c62: ; 15c62 + call FadeToMenu + ld a, $2 + ld hl, $4000 + rst FarCall + xor a + ld [WalkingY], a + ld a, $1 + ld [WalkingX], a +.asm_15c74 + call $5cef + jr nc, .asm_15c74 + call $2b3c + ret +; 15c7d + +Function15c7d: ; 15c7d + push af + call $5ca3 + ld a, [hli] + ld h, [hl] + ld l, a + pop af + ld e, a + ld d, $0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + ret +; 15c91 + +Function15c91: ; 15c91 + call $5ca3 + inc hl + inc hl + ld a, [hl] + and a + jp z, $5d83 + cp $1 + jp z, $5da5 + jp $5de2 +; 15ca3 + +Function15ca3: ; 15ca3 + ld a, [EngineBuffer1] + ld e, a + ld d, $0 + ld hl, $5cb0 + add hl, de + add hl, de + add hl, de + ret +; 15cb0 + +INCBIN "baserom.gbc", $15cb0, $15cef - $15cb0 + + +Function15cef: ; 15cef + ld a, $9 + ld hl, $4ae8 + rst FarCall + call $1ad2 + ld hl, $5e18 + call Function1d3c + ld a, [WalkingX] + ld [$cf88], a + ld a, [WalkingY] + ld [$d0e4], a + call $350c + ld a, [$d0e4] + ld [WalkingY], a + ld a, [$cfa9] + ld [WalkingX], a + call SpeechTextBox + ld a, [$cf73] + cp $2 + jr z, .asm_15d6d + cp $1 + jr z, .asm_15d27 + +.asm_15d27 + call $5c91 + jr c, .asm_15d68 + call $5d97 + jr c, .asm_15d68 + ld de, Money + ld bc, $ffc3 + ld a, $3 + call $600b + jr c, .asm_15d79 + ld hl, NumItems + call $2f66 + jr nc, .asm_15d6f + ld a, [$d107] + ld e, a + ld d, $0 + ld b, $1 + ld hl, WalkingDirection + call BitTableFunc + call $5fc3 + ld de, Money + ld bc, $ffc3 + call $5ffa + ld a, $4 + call $5c7d + call $0a36 + +.asm_15d68 + call SpeechTextBox + and a + ret + +.asm_15d6d + scf + ret + +.asm_15d6f + ld a, $3 + call $5c7d + call $0a36 + and a + ret + +.asm_15d79 + ld a, $2 + call $5c7d + call $0a36 + and a + ret +; 15d83 + +Function15d83: ; 15d83 + ld a, $63 + ld [$d10d], a + ld a, $0 + call $5c7d + ld a, $9 + ld hl, $4fc9 + rst FarCall + call Function1c07 + ret +; 15d97 + +Function15d97: ; 15d97 + ld a, $3b + call Predef + ld a, $1 + call $5c7d + call $1dcf + ret +; 15da5 + +Function15da5: ; 15da5 + ld a, $1 + ld [$d10c], a + ld a, [$d107] + ld e, a + ld d, $0 + ld b, $2 + ld hl, WalkingDirection + call BitTableFunc + ld a, c + and a + jr nz, .asm_15dd8 + ld a, [$d107] + ld e, a + ld d, $0 + ld hl, $d040 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + add hl, de + add hl, de + add hl, de + inc hl + ld a, [hli] + ld [$ffc5], a + ld a, [hl] + ld [$ffc4], a + xor a + ld [$ffc3], a + and a + ret + +.asm_15dd8 + ld a, $5 + call $5c7d + call $0a36 + scf + ret +; 15de2 + +Function15de2: ; 15de2 + ld a, $0 + call $5c7d + call $5df9 + ld a, $63 + ld [$d10d], a + ld a, $9 + ld hl, $4fcf + rst FarCall + call Function1c07 + ret +; 15df9 + +Function15df9: ; 15df9 + ld a, [$d107] + ld e, a + ld d, $0 + ld hl, $d040 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + add hl, de + add hl, de + add hl, de + inc hl + ld e, [hl] + inc hl + ld d, [hl] + ret +; 15e0e + +INCBIN "baserom.gbc", $15e0e, $15eb3 - $15e0e + + +Function15eb3: ; 15eb3 + call Function2ed3 + ld a, $4 + ld hl, $46a5 + rst FarCall +.asm_15ebc + ld a, $4 + ld hl, $46be + rst FarCall + ld a, [$cf66] + and a + jp z, $5ece + call $5ee0 + jr .asm_15ebc +; 15ece + +Function15ece: ; 15ece + call Function2b74 + and a + ret +; 15ed3 + +INCBIN "baserom.gbc", $15ed3, $15ee0 - $15ed3 + + +Function15ee0: ; 15ee0 + callba CheckItemMenu + ld a, [$d142] + ld hl, $5eee + rst JumpTable + ret +; 15eee + +INCBIN "baserom.gbc", $15eee, $15efd - $15eee + + +Function15efd: ; 15efd + callba _CheckTossableItem + ld a, [$d142] + and a + jr z, .asm_15f11 + ld hl, $5faf + call PrintText + and a + ret + +.asm_15f11 + ld hl, $5f73 + call PrintText + ld a, $9 + ld hl, $4af8 + rst FarCall + ld a, $9 + ld hl, $4fe1 + rst FarCall + call Function1c07 + jr c, .asm_15f6e + ld hl, $c5b9 + ld bc, $0312 + call ClearBox + ld hl, $5f78 + call PrintTextBoxText + call $1dcf + jr c, .asm_15f6e + ld de, Money + ld bc, $ffc3 + call $5fd7 + ld a, [$d107] + ld hl, NumItems + call $2f53 + ld a, $3b + call Predef + ld hl, $c5b9 + ld bc, $0312 + call ClearBox + ld hl, $5fbe + call PrintTextBoxText + call $5fc3 + ld a, $9 + ld hl, $4af0 + rst FarCall + call $0a36 + +.asm_15f6e + call Function1c07 + and a + ret +; 15f73 + +INCBIN "baserom.gbc", $15f73, $15fc3 - $15f73 + + +Function15fc3: ; 15fc3 + call WaitSFX + ld de, $0022 + call StartSFX + ret +; 15fcd + +Function15fcd: ; 15fcd + call $1d4f + call $0a36 + call Function1c07 + ret +; 15fd7 + +Function15fd7: ; 15fd7 + ld a, $3 + call $6053 + ld bc, $5ff7 + ld a, $3 + call $600b + jr z, .asm_15ff5 + jr c, .asm_15ff5 + ld hl, $5ff7 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + scf + ret + +.asm_15ff5 + and a + ret +; 15ff7 + +INCBIN "baserom.gbc", $15ff7, $15ffa - $15ff7 + + +Function15ffa: ; 15ffa + ld a, $3 + call $6035 + jr nc, .asm_16009 + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + scf + ret + +.asm_16009 + and a + ret +; 1600b + +Function1600b: ; 1600b + ld a, $3 + push hl + push de + push bc + ld h, b + ld l, c + ld c, $0 + ld b, a +.asm_16015 + dec a + jr z, .asm_1601c + inc de + inc hl + jr .asm_16015 + +.asm_1601c + and a +.asm_1601d + ld a, [de] + sbc [hl] + jr z, .asm_16022 + inc c + +.asm_16022 + dec de + dec hl + dec b + jr nz, .asm_1601d + jr c, .asm_1602d + ld a, c + and a + jr .asm_16031 + +.asm_1602d + ld a, $1 + and a + scf + +.asm_16031 + pop bc + pop de + pop hl + ret +; 16035 + +Function16035: ; 16035 + ld a, $3 + push hl + push de + push bc + ld h, b + ld l, c + ld b, a + ld c, $0 +.asm_1603f + dec a + jr z, .asm_16046 + inc de + inc hl + jr .asm_1603f + +.asm_16046 + and a +.asm_16047 + ld a, [de] + sbc [hl] + ld [de], a + dec de + dec hl + dec b + jr nz, .asm_16047 + pop bc + pop de + pop hl + ret +; 16053 + +Function16053: ; 16053 + ld a, $3 + push hl + push de + push bc + ld h, b + ld l, c + ld b, a +.asm_1605b + dec a + jr z, .asm_16062 + inc de + inc hl + jr .asm_1605b + +.asm_16062 + and a +.asm_16063 + ld a, [de] + adc [hl] + ld [de], a + dec de + dec hl + dec b + jr nz, .asm_16063 + pop bc + pop de + pop hl + ret +; 1606f + +Function1606f: ; 1606f + ld a, $2 + ld de, $d855 + call $6055 + ld a, $2 + ld bc, $608d + call $600d + jr c, .asm_1608b + ld hl, $608d + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + scf + ret + +.asm_1608b + and a + ret +; 1608d + +INCBIN "baserom.gbc", $1608d, $1608f - $1608d + + +Function1608f: ; 1608f + ld a, $2 + ld de, $d855 + call $6037 + jr nc, .asm_1609f + xor a + ld [de], a + inc de + ld [de], a + scf + ret + +.asm_1609f + and a + ret +; 160a1 + +Function160a1: ; 160a1 + ld a, $2 + ld de, $d855 + jp $600d +; 160a9 + +INCBIN "baserom.gbc", $160a9, $16ecd - $160a9 + + +Function16ecd: ; 16ecd + rlca + ld b, a + ld a, [$df5b] + and $7 + cp b + ret +; 16ed6 + +INCBIN "baserom.gbc", $16ed6, $174ba - $16ed6 + + +SECTION "bank6",DATA,BANK[$6] + +Tileset03GFX: ; 0x18000 +INCBIN "gfx/tilesets/03.lz" +; 0x18605 + + db $00 + +Tileset03Meta: ; 0x18606 +INCBIN "tilesets/03_metatiles.bin" +; 0x18e06 + +Tileset03Coll: ; 0x18e06 +INCBIN "tilesets/03_collision.bin" +; 0x19006 + +Tileset00GFX: ; 0x19006 +Tileset01GFX: ; 0x19006 +INCBIN "gfx/tilesets/01.lz" +; 0x19c0d + + db $00 + +Tileset00Meta: ; 0x19c0e +Tileset01Meta: ; 0x19c0e +INCBIN "tilesets/01_metatiles.bin" +; 0x1a40e + +Tileset00Coll: ; 0x1a40e +Tileset01Coll: ; 0x1a40e +INCBIN "tilesets/01_collision.bin" +; 0x1a60e + +Tileset29GFX: ; 0x1a60e +INCBIN "gfx/tilesets/29.lz" +; 0x1af38 + + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + +Tileset29Meta: ; 0x1af3e +INCBIN "tilesets/29_metatiles.bin" +; 0x1b33e + +Tileset29Coll: ; 0x1b33e +INCBIN "tilesets/29_collision.bin" +; 0x1b43e + +Tileset20GFX: ; 0x1b43e +INCBIN "gfx/tilesets/20.lz" +; 0x1b8f1 + + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + +Tileset20Meta: ; 0x1b8fe +INCBIN "tilesets/20_metatiles.bin" +; 0x1bcfe + +Tileset20Coll: ; 0x1bcfe +INCBIN "tilesets/20_collision.bin" +; 0x1bdfe + + +SECTION "bank7",DATA,BANK[$7] + +Function1c000: ; 1c000 + ld a, [MapGroup] + ld e, a + ld d, $0 + ld hl, $4021 + add hl, de + ld a, [hl] + cp $ff + ret z + ld hl, $403c + ld bc, $0090 + call AddNTimes + ld de, $90a0 + ld bc, $0090 + call CopyBytes + ret +; 1c021 + +INCBIN "baserom.gbc", $1c021, $1c30c - $1c021 + +Tileset07GFX: ; 0x1c30c +INCBIN "gfx/tilesets/07.lz" +; 0x1c73b + + db $00 + +Tileset07Meta: ; 0x1c73c +INCBIN "tilesets/07_metatiles.bin" +; 0x1cb3c + +Tileset07Coll: ; 0x1cb3c +INCBIN "tilesets/07_collision.bin" +; 0x1cc3c + +Tileset09GFX: ; 0x1cc3c +INCBIN "gfx/tilesets/09.lz" +; 0x1d047 + + db $00 + db $00 + db $00 + db $00 + db $00 + +Tileset09Meta: ; 0x1d04c +INCBIN "tilesets/09_metatiles.bin" +; 0x1d44c + +Tileset09Coll: ; 0x1d44c +INCBIN "tilesets/09_collision.bin" +; 0x1d54c + +Tileset06GFX: ; 0x1d54c +INCBIN "gfx/tilesets/06.lz" +; 0x1d924 + + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + +Tileset06Meta: ; 0x1d92c +INCBIN "tilesets/06_metatiles.bin" +; 0x1dd2c + +Tileset06Coll: ; 0x1dd2c +INCBIN "tilesets/06_collision.bin" +; 0x1de2c + +Tileset13GFX: ; 0x1de2c +INCBIN "gfx/tilesets/13.lz" +; 0x1e58c + +Tileset13Meta: ; 0x1e58c +INCBIN "tilesets/13_metatiles.bin" +; 0x1e98c + +Tileset13Coll: ; 0x1e98c +INCBIN "tilesets/13_collision.bin" +; 0x1ea8c + +Tileset24GFX: ; 0x1ea8c +INCBIN "gfx/tilesets/24.lz" +; 0x1ee0e + + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + +Tileset24Meta: ; 0x1ee1c +Tileset30Meta: ; 0x1ee1c +INCBIN "tilesets/30_metatiles.bin" +; 0x1f21c + +Tileset24Coll: ; 0x1f21c +Tileset30Coll: ; 0x1f21c +INCBIN "tilesets/30_collision.bin" +; 0x1f31c + +; Songs i + +Music_Credits: INCLUDE "audio/music/credits.asm" +Music_Clair: INCLUDE "audio/music/clair.asm" +Music_MobileAdapter: INCLUDE "audio/music/mobileadapter.asm" + + +SECTION "bank8",DATA,BANK[$8] + +INCBIN "baserom.gbc", $20000, $20181 - $20000 + +Tileset23GFX: ; 0x20181 +INCBIN "gfx/tilesets/23.lz" +; 0x206d2 + + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + +Tileset23Meta: ; 0x206e1 +INCBIN "tilesets/23_metatiles.bin" +; 0x20ae1 + +Tileset23Coll: ; 0x20ae1 +INCBIN "tilesets/23_collision.bin" +; 0x20be1 + +Tileset10GFX: ; 0x20be1 +INCBIN "gfx/tilesets/10.lz" +; 0x213e0 + + db $00 + +Tileset10Meta: ; 0x213e1 +INCBIN "tilesets/10_metatiles.bin" +; 0x217e1 + +Tileset10Coll: ; 0x217e1 +INCBIN "tilesets/10_collision.bin" +; 0x218e1 + +Tileset12GFX: ; 0x218e1 +INCBIN "gfx/tilesets/12.lz" +; 0x22026 + + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + +Tileset12Meta: ; 0x22031 +INCBIN "tilesets/12_metatiles.bin" +; 0x22431 + +Tileset12Coll: ; 0x22431 +INCBIN "tilesets/12_collision.bin" +; 0x22531 + +Tileset14GFX: ; 0x22531 +INCBIN "gfx/tilesets/14.lz" +; 0x22ae2 + + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + +Tileset14Meta: ; 0x22af1 +INCBIN "tilesets/14_metatiles.bin" +; 0x22ef1 + +Tileset14Coll: ; 0x22ef1 +INCBIN "tilesets/14_collision.bin" +; 0x22ff1 + +Tileset17GFX: ; 0x22ff1 +INCBIN "gfx/tilesets/17.lz" +; 0x23391 + +Tileset17Meta: ; 0x23391 +INCBIN "tilesets/17_metatiles.bin" +; 0x23791 + +Tileset17Coll: ; 0x23791 +INCBIN "tilesets/17_collision.bin" +; 0x23891 + +; todo +Tileset31Meta: ; 0x23891 +INCBIN "tilesets/31_metatiles.bin", $0, $280 +; 0x23b11 + +EggMovePointers: ; 0x23b11 +INCLUDE "stats/egg_move_pointers.asm" + +INCLUDE "stats/egg_moves.asm" + + +SECTION "bank9",DATA,BANK[$9] + +INCBIN "baserom.gbc", $24000, $24177 - $24000 + + +Function24177: ; 24177 + rst FarCall + ret +; 24179 + +INCBIN "baserom.gbc", $24179, $241a8 - $24179 + + +Function241a8: ; 241a8 + call $4329 + ld hl, $cfa6 + res 7, [hl] + ld a, [hBGMapMode] + push af + call $4216 + pop af + ld [hBGMapMode], a + ret +; 241ba + +INCBIN "baserom.gbc", $241ba, $24216 - $241ba + + +Function24216: ; 24216 +.asm_24216 + call $431a + call $4238 + call $4249 + jr nc, .asm_24237 + call $4270 + jr c, .asm_24237 + ld a, [$cfa5] + bit 7, a + jr nz, .asm_24237 + call $1bdd + ld b, a + ld a, [$cfa8] + and b + jr z, .asm_24216 + +.asm_24237 + ret +; 24238 + +Function24238: ; 24238 + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call WaitBGMap + pop af + ld [hOAMUpdate], a + xor a + ld [hBGMapMode], a + ret +; 24249 + +Function24249: ; 24249 +.asm_24249 + call RTC + call $4259 + ret c + ld a, [$cfa5] + bit 7, a + jr z, .asm_24249 + and a + ret +; 24259 + +Function24259: ; 24259 + ld a, [$cfa5] + bit 6, a + jr z, .asm_24266 + ld hl, $4f62 + ld a, $23 + rst FarCall + +.asm_24266 + call Functiona57 + call $1bdd + and a + ret z + scf + ret +; 24270 + +Function24270: ; 24270 + call $1bdd + bit 0, a + jp nz, $4318 + bit 1, a + jp nz, $4318 + bit 2, a + jp nz, $4318 + bit 3, a + jp nz, $4318 + bit 4, a + jr nz, .asm_242fa + bit 5, a + jr nz, .asm_242dc + bit 6, a + jr nz, .asm_242be + bit 7, a + jr nz, .asm_242a0 + and a + ret + + ld hl, $cfa6 + set 7, [hl] + scf + ret + +.asm_242a0 + ld hl, $cfa9 + ld a, [$cfa3] + cp [hl] + jr z, .asm_242ac + inc [hl] + xor a + ret + +.asm_242ac + ld a, [$cfa5] + bit 5, a + jr nz, .asm_242ba + bit 3, a + jp nz, $4299 + xor a + ret + +.asm_242ba + ld [hl], $1 + xor a + ret + +.asm_242be + ld hl, $cfa9 + ld a, [hl] + dec a + jr z, .asm_242c8 + ld [hl], a + xor a + ret + +.asm_242c8 + ld a, [$cfa5] + bit 5, a + jr nz, .asm_242d6 + bit 2, a + jp nz, $4299 + xor a + ret + +.asm_242d6 + ld a, [$cfa3] + ld [hl], a + xor a + ret + +.asm_242dc + ld hl, $cfaa + ld a, [hl] + dec a + jr z, .asm_242e6 + ld [hl], a + xor a + ret + +.asm_242e6 + ld a, [$cfa5] + bit 4, a + jr nz, .asm_242f4 + bit 1, a + jp nz, $4299 + xor a + ret + +.asm_242f4 + ld a, [$cfa4] + ld [hl], a + xor a + ret + +.asm_242fa + ld hl, $cfaa + ld a, [$cfa4] + cp [hl] + jr z, .asm_24306 + inc [hl] + xor a + ret + +.asm_24306 + ld a, [$cfa5] + bit 4, a + jr nz, .asm_24314 + bit 0, a + jp nz, $4299 + xor a + ret + +.asm_24314 + ld [hl], $1 + xor a + ret +; 24318 + +Function24318: ; 24318 + xor a + ret +; 2431a + +Function2431a: ; 2431a + ld hl, $cfac + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hl] + cp $ed + jr nz, .asm_24329 + ld a, [$cfab] + ld [hl], a + +.asm_24329 + ld a, [$cfa1] + ld b, a + ld a, [$cfa2] + ld c, a + call $1d05 + ld a, [$cfa7] + swap a + and $f + ld c, a + ld a, [$cfa9] + ld b, a + xor a + dec b + jr z, .asm_24348 +.asm_24344 + add c + dec b + jr nz, .asm_24344 + +.asm_24348 + ld c, $14 + call AddNTimes + ld a, [$cfa7] + and $f + ld c, a + ld a, [$cfaa] + ld b, a + xor a + dec b + jr z, .asm_2435f +.asm_2435b + add c + dec b + jr nz, .asm_2435b + +.asm_2435f + ld c, a + add hl, bc + ld a, [hl] + cp $ed + jr z, .asm_2436b + ld [$cfab], a + ld [hl], $ed + +.asm_2436b + ld a, l + ld [$cfac], a + ld a, h + ld [$cfad], a + ret +; 24374 + +Function24374: ; 24374 + ld a, [rSVBK] + push af + ld a, $7 + ld [rSVBK], a + ld hl, $cf71 + ld e, [hl] + inc hl + ld d, [hl] + push de + ld b, $10 + ld hl, $cf81 +.asm_24387 + ld a, [hli] + ld [de], a + dec de + dec b + jr nz, .asm_24387 + ld a, [$cf81] + bit 6, a + jr nz, .asm_24398 + bit 7, a + jr z, .asm_243ae + +.asm_24398 + ld hl, $cf71 + ld a, [hli] + ld h, [hl] + ld l, a + set 0, [hl] + call $1cfd + call $43cd + call $1d19 + call $43cd + jr .asm_243b5 + +.asm_243ae + pop hl + push hl + ld a, [hld] + ld l, [hl] + ld h, a + res 0, [hl] + +.asm_243b5 + pop hl + call $43e7 + ld a, h + ld [de], a + dec de + ld a, l + ld [de], a + dec de + ld hl, $cf71 + ld [hl], e + inc hl + ld [hl], d + pop af + ld [rSVBK], a + ld hl, $cf78 + inc [hl] + ret +; 243cd + +Function243cd: ; 243cd + call Function1c53 + inc b + inc c + call $43e7 +.asm_243d5 + push bc + push hl +.asm_243d7 + ld a, [hli] + ld [de], a + dec de + dec c + jr nz, .asm_243d7 + pop hl + ld bc, $0014 + add hl, bc + pop bc + dec b + jr nz, .asm_243d5 + ret +; 243e7 + +Function243e7: ; 243e7 + ret +; 243e8 + +Function243e8: ; 243e8 + xor a + ld [hBGMapMode], a + ld a, [rSVBK] + push af + ld a, $7 + ld [rSVBK], a + call $1c7e + ld a, l + or h + jp z, $445d + ld a, l + ld [$cf71], a + ld a, h + ld [$cf72], a + call Function1c47 + ld a, [$cf81] + bit 0, a + jr z, .asm_24411 + ld d, h + ld e, l + call Function1c23 + +.asm_24411 + call $1c7e + ld a, h + or l + jr z, .asm_2441b + call Function1c47 + +.asm_2441b + pop af + ld [rSVBK], a + ld hl, $cf78 + dec [hl] + ret +; 24423 + +INCBIN "baserom.gbc", $24423, $24426 - $24423 + + +Function24426: ; 24426 + bit 0, a + ret z + xor a + call GetSRAMBank + ld hl, TileMap + ld de, $a000 + ld bc, $0168 + call CopyBytes + call CloseSRAM + call $2173 + xor a + call GetSRAMBank + ld hl, $a000 + ld de, TileMap + ld bc, $0168 +.asm_2444c + ld a, [hl] + cp $61 + jr c, .asm_24452 + ld [de], a + +.asm_24452 + inc hl + inc de + dec bc + ld a, c + or b + jr nz, .asm_2444c + call CloseSRAM + ret +; 2445d + +Function2445d: ; 2445d + ld hl, $4468 + call PrintText + call WaitBGMap +.asm_24466 + jr .asm_24466 +; 24468 + +INCBIN "baserom.gbc", $24468, $2446d - $24468 + + +Function2446d: ; 2446d + ld a, [$cf91] + ld b, a + ld hl, $cfa1 + ld a, [$cf82] + inc a + bit 6, b + jr nz, .asm_2447d + inc a + +.asm_2447d + ld [hli], a + ld a, [$cf83] + inc a + ld [hli], a + ld a, [$cf92] + ld [hli], a + ld a, $1 + ld [hli], a + ld [hl], $0 + bit 5, b + jr z, .asm_24492 + set 5, [hl] + +.asm_24492 + ld a, [$cf81] + bit 4, a + jr z, .asm_2449b + set 6, [hl] + +.asm_2449b + inc hl + xor a + ld [hli], a + ld a, $20 + ld [hli], a + ld a, $1 + bit 0, b + jr nz, .asm_244a9 + add $2 + +.asm_244a9 + ld [hli], a + ld a, [$cf88] + and a + jr z, .asm_244b7 + ld c, a + ld a, [$cf92] + cp c + jr nc, .asm_244b9 + +.asm_244b7 + ld c, $1 + +.asm_244b9 + ld [hl], c + inc hl + ld a, $1 + ld [hli], a + xor a + ld [hli], a + ld [hli], a + ld [hli], a + ret +; 244c3 + + +Function244c3: ; 0x244c3 + ld a, [MenuSelection] + ld [CurSpecies], a + hlcoord 0, 12 + ld b, $4 + ld c, $12 + call TextBox + ld a, [MenuSelection] + cp $ff + ret z + ld de, $c5b9 + ld a, BANK(GetItemDescription) + ld hl, GetItemDescription + rst $8 + ret +; 0x244e3 + +Function244e3: ; 244e3 + ld hl, $4547 + call Function1d3c + call $1cbb + call $1ad2 + call $321c + ld b, $12 + call GetSGBLayout + xor a + ld [hBGMapMode], a + ld a, [CurPartySpecies] + ld [CurSpecies], a + call GetBaseData + ld de, VTiles1 + ld a, $3c + call Predef + ld a, [$cf82] + inc a + ld b, a + ld a, [$cf83] + inc a + ld c, a + call $1d05 + ld a, $80 + ld [$ffad], a + ld bc, $0707 + ld a, $13 + call Predef + call WaitBGMap + ret +; 24528 + +Function24528: ; 24528 + ld hl, $4547 + call Function1d3c + call $1ce1 + call WaitBGMap + call ClearSGB + xor a + ld [hBGMapMode], a + call $2173 + call $321c + call $1ad2 + call $0e51 + ret +; 24547 + +INCBIN "baserom.gbc", $24547, $245af - $24547 + + +Function245af: ; 245af + xor a + ld [$cf73], a + ld [hBGMapMode], a + inc a + ld [$ffaa], a + call $471a + call $4764 + call $47dd + call $45f1 + call $321c + xor a + ld [hBGMapMode], a + ret +; 245cb + +Function245cb: ; 245cb +.asm_245cb + call $4609 + jp c, $45d6 + call z, $45e1 + jr .asm_245cb +; 245d6 + +Function245d6: ; 245d6 + call $1ff8 + ld [$cf73], a + ld a, $0 + ld [$ffaa], a + ret +; 245e1 + +Function245e1: ; 245e1 + call $45f1 + ld a, $1 + ld [hBGMapMode], a + ld c, $3 + call DelayFrames + xor a + ld [hBGMapMode], a + ret +; 245f1 + +Function245f1: ; 245f1 + xor a + ld [hBGMapMode], a + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + call $47f0 + call $488b + call $48b8 + pop af + ld [Options], a + ret +; 24609 + +Function24609: ; 24609 +.asm_24609 + call $1bd3 + ld a, [$ffa9] + and $f0 + ld b, a + ld a, [hJoyPressed] + and $f + or b + bit 0, a + jp nz, $4644 + bit 1, a + jp nz, $466f + bit 2, a + jp nz, $4673 + bit 3, a + jp nz, $4695 + bit 4, a + jp nz, $46b5 + bit 5, a + jp nz, $46a1 + bit 6, a + jp nz, $46c9 + bit 7, a + jp nz, $46df + jr .asm_24609 +; 24640 + +INCBIN "baserom.gbc", $24640, $24644 - $24640 + + +Function24644: ; 24644 + call $1bee + ld a, [$cfa9] + dec a + call $48d5 + ld a, [MenuSelection] + ld [CurItem], a + ld a, [$cf75] + ld [$d10d], a + call $46fc + dec a + ld [$cf77], a + ld [$d107], a + ld a, [MenuSelection] + cp $ff + jr z, .asm_2466f + ld a, $1 + scf + ret + +.asm_2466f + ld a, $2 + scf + ret +; 24673 + +Function24673: ; 24673 + ld a, [$cf91] + bit 7, a + jp z, $2ec8 + ld a, [$cfa9] + dec a + call $48d5 + ld a, [MenuSelection] + cp $ff + jp z, $2ec8 + call $46fc + dec a + ld [$cf77], a + ld a, $4 + scf + ret +; 24695 + +Function24695: ; 24695 + ld a, [$cf91] + bit 6, a + jp z, $2ec8 + ld a, $8 + scf + ret +; 246a1 + +Function246a1: ; 246a1 + ld hl, $cfa6 + bit 7, [hl] + jp z, $2ec8 + ld a, [$cf91] + bit 3, a + jp z, $2ec8 + ld a, $20 + scf + ret +; 246b5 + +Function246b5: ; 246b5 + ld hl, $cfa6 + bit 7, [hl] + jp z, $2ec8 + ld a, [$cf91] + bit 2, a + jp z, $2ec8 + ld a, $10 + scf + ret +; 246c9 + +Function246c9: ; 246c9 + ld hl, $cfa6 + bit 7, [hl] + jp z, $2ec6 + ld hl, $d0e4 + ld a, [hl] + and a + jr z, .asm_246dc + dec [hl] + jp $2ec6 + +.asm_246dc + jp $2ec8 +; 246df + +Function246df: ; 246df + ld hl, $cfa6 + bit 7, [hl] + jp z, $2ec6 + ld hl, $d0e4 + ld a, [$cf92] + add [hl] + ld b, a + ld a, [$d144] + cp b + jr c, .asm_246f9 + inc [hl] + jp $2ec6 + +.asm_246f9 + jp $2ec8 +; 246fc + +Function246fc: ; 246fc + ld a, [$d0e4] + ld c, a + ld a, [$cfa9] + add c + ld c, a + ret +; 24706 + +INCBIN "baserom.gbc", $24706, $2471a - $24706 + + +Function2471a: ; 2471a + ld hl, $cf96 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$cf95] + call GetFarByte + ld [$d144], a + ld a, [$cf92] + ld c, a + ld a, [$d0e4] + add c + ld c, a + ld a, [$d144] + inc a + cp c + jr nc, .asm_24748 + ld a, [$cf92] + ld c, a + ld a, [$d144] + inc a + sub c + jr nc, .asm_24745 + xor a + +.asm_24745 + ld [$d0e4], a + +.asm_24748 + ld a, [$d0e4] + ld c, a + ld a, [$cf88] + add c + ld b, a + ld a, [$d144] + inc a + cp b + jr c, .asm_2475a + jr nc, .asm_24763 + +.asm_2475a + xor a + ld [$d0e4], a + ld a, $1 + ld [$cf88], a + +.asm_24763 + ret +; 24764 + +Function24764: ; 24764 + ld a, [$cf91] + ld c, a + ld a, [$d144] + ld b, a + ld a, [$cf82] + add $1 + ld [$cfa1], a + ld a, [$cf83] + add $0 + ld [$cfa2], a + ld a, [$cf92] + cp b + jr c, .asm_24786 + jr z, .asm_24786 + ld a, b + inc a + +.asm_24786 + ld [$cfa3], a + ld a, $1 + ld [$cfa4], a + ld a, $8c + bit 2, c + jr z, .asm_24796 + set 0, a + +.asm_24796 + bit 3, c + jr z, .asm_2479c + set 1, a + +.asm_2479c + ld [$cfa5], a + xor a + ld [$cfa6], a + ld a, $20 + ld [$cfa7], a + ld a, $c3 + bit 7, c + jr z, .asm_247b0 + add $4 + +.asm_247b0 + bit 6, c + jr z, .asm_247b6 + add $8 + +.asm_247b6 + ld [$cfa8], a + ld a, [$cfa3] + ld b, a + ld a, [$cf88] + and a + jr z, .asm_247c8 + cp b + jr z, .asm_247ca + jr c, .asm_247ca + +.asm_247c8 + ld a, $1 + +.asm_247ca + ld [$cfa9], a + ld a, $1 + ld [$cfaa], a + xor a + ld [$cfac], a + ld [$cfad], a + ld [$cfab], a + ret +; 247dd + +Function247dd: ; 247dd + ld a, [$d144] + ld c, a + ld a, [$d0e3] + and a + jr z, .asm_247ef + dec a + cp c + jr c, .asm_247ef + xor a + ld [$d0e3], a + +.asm_247ef + ret +; 247f0 + +Function247f0: ; 247f0 + call $1cf1 + ld a, [$cf91] + bit 4, a + jr z, .asm_2480d + ld a, [$d0e4] + and a + jr z, .asm_2480d + ld a, [$cf82] + ld b, a + ld a, [$cf85] + ld c, a + call $1d05 + ld [hl], $61 + +.asm_2480d + call $1cfd + ld bc, $0015 + add hl, bc + ld a, [$cf92] + ld b, a + ld c, $0 +.asm_2481a + ld a, [$d0e4] + add c + ld [$cf77], a + ld a, c + call $48d5 + ld a, [MenuSelection] + cp $ff + jr z, .asm_24851 + push bc + push hl + call $486e + pop hl + ld bc, $0028 + add hl, bc + pop bc + inc c + ld a, c + cp b + jr nz, .asm_2481a + ld a, [$cf91] + bit 4, a + jr z, .asm_24850 + ld a, [$cf84] + ld b, a + ld a, [$cf85] + ld c, a + call $1d05 + ld [hl], $ee + +.asm_24850 + ret + +.asm_24851 + ld a, [$cf91] + bit 0, a + jr nz, .asm_24866 + ld de, .data_2485f + call PlaceString + ret + +.data_2485f + db $82 + db $80 + db $8d + db $82 + db $84 + db $8b + db $50 + +.asm_24866 + ld d, h + ld e, l + ld hl, $cf98 + jp $31be +; 2486e + +Function2486e: ; 2486e + push hl + ld d, h + ld e, l + ld hl, $cf98 + call $31be + pop hl + ld a, [$cf93] + and a + jr z, .asm_2488a + ld e, a + ld d, $0 + add hl, de + ld d, h + ld e, l + ld hl, $cf9b + call $31be + +.asm_2488a + ret +; 2488b + +Function2488b: ; 2488b + ld a, [$d0e3] + and a + jr z, .asm_248b7 + ld b, a + ld a, [$d0e4] + cp b + jr nc, .asm_248b7 + ld c, a + ld a, [$cf92] + add c + cp b + jr c, .asm_248b7 + ld a, b + sub c + dec a + add a + add $1 + ld c, a + ld a, [$cf82] + add c + ld b, a + ld a, [$cf83] + add $0 + ld c, a + call $1d05 + ld [hl], $ec + +.asm_248b7 + ret +; 248b8 + +Function248b8: ; 248b8 + ld a, [$cf91] + bit 5, a + ret z + bit 1, a + jr z, .asm_248c7 + ld a, [$d0e3] + and a + ret nz + +.asm_248c7 + ld a, [$cfa9] + dec a + call $48d5 + ld hl, $cf9e + call $31be + ret +; 248d5 + +Function248d5: ; 248d5 + push de + push hl + ld e, a + ld a, [$d0e4] + add e + ld e, a + ld d, $0 + ld hl, $cf96 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + ld a, [$cf94] + cp $1 + jr z, .asm_248f2 + cp $2 + jr z, .asm_248f1 + +.asm_248f1 + add hl, de + +.asm_248f2 + add hl, de + ld a, [$cf95] + call GetFarByte + ld [MenuSelection], a + ld [CurItem], a + inc hl + ld a, [$cf95] + call GetFarByte + ld [$cf75], a + pop hl + pop de + ret +; 2490c + +INCBIN "baserom.gbc", $2490c, $24ab4 - $2490c + +Function24ab4: ; 0x24ab4 + push de + ld a, [MenuSelection] + ld [$d265], a + call GetItemName + pop hl + call PlaceString + ret +; 0x24ac3 + +Function24ac3: ; 0x24ac3 + push de + ld a, [MenuSelection] + ld [CurItem], a + ld a, BANK(_CheckTossableItem) + ld hl, _CheckTossableItem + rst $8 + ld a, [$d142] + pop hl + and a + jr nz, .done + ld de, $0015 + add hl, de + ld [hl], $f1 + inc hl + ld de, $cf75 + ld bc, $0102 + call $3198 + +.done + ret +; 0x24ae8 + +Function24ae8: ; 24ae8 + ld hl, $4b15 + call Function1d3c + jr .asm_24b01 + + ld hl, $4b1d + call Function1d3c + jr .asm_24b01 + + ld hl, $4b15 + ld de, $000b + call $1e2e + +.asm_24b01 + call $1cbb + call $1cfd + ld de, $0015 + add hl, de + ld de, Money + ld bc, $2306 + call $3198 + ret +; 24b15 + +INCBIN "baserom.gbc", $24b15, $24b25 - $24b15 + + +Function24b25: ; 24b25 + ld hl, $c4ab + ld b, $1 + ld c, $7 + call TextBox + ld hl, $c4ac + ld de, $4b89 + call PlaceString + ld hl, $c4c5 + ld de, $4b8e + call PlaceString + ld de, $d855 + ld bc, $0204 + ld hl, $c4c1 + call $3198 + ret +; 24b4e + +INCBIN "baserom.gbc", $24b4e, $24ef2 - $24b4e + + +Function24ef2: ; 4ef2 + ld hl, $4f2c + call Function1d35 + ld a, [$d0d2] + ld [$cf88], a + call $2039 + ld a, [$cf88] + ld [$d0d2], a + call Function1c07 + ret +; 24f0b + + +Function24f0b: ; 24f0b + ld hl, $4f4e + call Function1d35 + jr .asm_24f19 + + ld hl, $4f89 + call Function1d35 + +.asm_24f19 + ld a, [$d0d2] + ld [$cf88], a + call $202a + ld a, [$cf88] + ld [$d0d2], a + call Function1c07 + ret +; 24f2c + + +INCBIN "baserom.gbc", $24f2c, $24fc9 - $24f2c + + +Function24fc9: ; 24fc9 + ld a, $3 + ld hl, $5486 + rst FarCall + ld a, d + ld [MagikarpLength], a + ld a, e + ld [Buffer2], a + ld hl, $50f5 + call Function1d35 + call $4ff9 + ret +; 24fe1 + +Function24fe1: ; 24fe1 + ld a, $3 + ld hl, $5486 + rst FarCall + ld a, d + ld [MagikarpLength], a + ld a, e + ld [Buffer2], a + ld hl, $50fd + call Function1d35 + call $4ff9 + ret +; 24ff9 + +Function24ff9: ; 24ff9 + ld a, $1 + ld [$d10c], a +.asm_24ffe + call $5072 + call $500e + jr nc, .asm_24ffe + cp $ff + jr nz, .asm_2500c + scf + ret + +.asm_2500c + and a + ret +; 2500e + +Function2500e: ; 2500e + call $354b + bit 1, c + jr nz, .asm_2502b + bit 0, c + jr nz, .asm_2502f + bit 7, c + jr nz, .asm_25033 + bit 6, c + jr nz, .asm_2503f + bit 5, c + jr nz, .asm_2504d + bit 4, c + jr nz, .asm_2505f + and a + ret + +.asm_2502b + ld a, $ff + scf + ret + +.asm_2502f + ld a, $0 + scf + ret + +.asm_25033 + ld hl, $d10c + dec [hl] + jr nz, .asm_2503d + ld a, [$d10d] + ld [hl], a + +.asm_2503d + and a + ret + +.asm_2503f + ld hl, $d10c + inc [hl] + ld a, [$d10d] + cp [hl] + jr nc, .asm_2504b + ld [hl], $1 + +.asm_2504b + and a + ret + +.asm_2504d + ld a, [$d10c] + sub $a + jr c, .asm_25058 + jr z, .asm_25058 + jr .asm_2505a + +.asm_25058 + ld a, $1 + +.asm_2505a + ld [$d10c], a + and a + ret + +.asm_2505f + ld a, [$d10c] + add $a + ld b, a + ld a, [$d10d] + cp b + jr nc, .asm_2506c + ld b, a + +.asm_2506c + ld a, b + ld [$d10c], a + and a + ret +; 25072 + +Function25072: ; 25072 + call $1cbb + call $1cfd + ld de, $0015 + add hl, de + ld [hl], $f1 + inc hl + ld de, $d10c + ld bc, $8102 + call $3198 + ld a, [$cf86] + ld e, a + ld a, [$cf87] + ld d, a + ld a, [$cf8a] + call $2d54 + ret +; 25097 + +INCBIN "baserom.gbc", $25097, $265d3 - $25097 + +ProfOaksPC: ; 0x265d3 + ld hl, OakPCText1 + call $1d4f + call $1dcf + jr c, .shutdown + call ProfOaksPCBoot ; player chose "yes"? +.shutdown + ld hl, OakPCText4 + call PrintText + call $0a36 + call Function1c07 + ret +; 0x265ee + +ProfOaksPCBoot ; 0x265ee + ld hl, OakPCText2 + call PrintText + call Rate + call StartSFX ; sfx loaded by previous Rate function call + call $0a36 + call WaitSFX + ret +; 0x26601 + +Function26601: ; 0x26601 + call Rate + push de + ld de, MUSIC_NONE + call StartMusic + pop de + call StartSFX + call $0a36 + call WaitSFX + ret +; 0x26616 + +Rate: ; 0x26616 +; calculate Seen/Owned + ld hl, PokedexCaught + ld b, EndPokedexCaught - PokedexCaught + call CountSetBits + ld [DefaultFlypoint], a + ld hl, PokedexSeen + ld b, EndPokedexSeen - PokedexSeen + call CountSetBits + ld [$d003], a + +; print appropriate rating + call ClearOakRatingBuffers + ld hl, OakPCText3 + call PrintText + call $0a36 + ld a, [$d003] + ld hl, OakRatings + call FindOakRating + push de + call PrintText + pop de + ret +; 0x26647 -Group12Sprites: ; 145a4 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_POKEFAN_M - db SPRITE_MACHOP - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_SUPER_NERD - db SPRITE_BIG_SNORLAX - db SPRITE_BIKER - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 145bb +ClearOakRatingBuffers: ; 0x26647 + ld hl, StringBuffer3 + ld de, DefaultFlypoint + call ClearOakRatingBuffer + ld hl, StringBuffer4 + ld de, $d003 + call ClearOakRatingBuffer + ret +; 0x2665a -Group17Sprites: ; 145bb - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_POKEFAN_M - db SPRITE_MACHOP - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_SUPER_NERD - db SPRITE_BIG_SNORLAX - db SPRITE_BIKER - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 145d2 +ClearOakRatingBuffer: ; 0x2665a + push hl + ld a, "@" + ld bc, $000d + call ByteFill + pop hl + ld bc, $4103 + call $3198 + ret +; 0x2666b -Group16Sprites: ; 145d2 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_POKEFAN_M - db SPRITE_BUENA - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_SUPER_NERD - db SPRITE_MACHOP - db SPRITE_BIKER - db SPRITE_POKE_BALL - db SPRITE_BOULDER -; 145e9 +FindOakRating: ; 0x2666b +; return sound effect in de +; return text pointer in hl + nop + ld c, a +.loop + ld a, [hli] + cp c + jr nc, .match + inc hl + inc hl + inc hl + inc hl + jr .loop -Group24Sprites: ; 145e9 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_SILVER - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_COOLTRAINER_M - db SPRITE_YOUNGSTER - db SPRITE_MONSTER - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14600 +.match + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld a, [hli] + ld h, [hl] + ld l, a + ret +; 0x2667f -Group26Sprites: ; 14600 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_SILVER - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_COOLTRAINER_M - db SPRITE_YOUNGSTER - db SPRITE_MONSTER - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14617 +OakRatings: ; 0x2667f +; db count (if number caught ≤ this number, then this entry is used) +; dw sound effect +; dw text pointer -Group19Sprites: ; 14617 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_SILVER - db SPRITE_TEACHER - db SPRITE_FISHER - db SPRITE_COOLTRAINER_M - db SPRITE_YOUNGSTER - db SPRITE_MONSTER - db SPRITE_GRAMPS - db SPRITE_BUG_CATCHER - db SPRITE_COOLTRAINER_F - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 1462e + db 9 + dw SFX_DEX_FANFARE_LESS_THAN_20 + dw OakRating01 -Group10Sprites: ; 1462e - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_FISHER - db SPRITE_LASS - db SPRITE_OFFICER - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_COOLTRAINER_M - db SPRITE_BUG_CATCHER - db SPRITE_SUPER_NERD - db SPRITE_WEIRD_TREE - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 14645 + db 19 + dw SFX_DEX_FANFARE_LESS_THAN_20 + dw OakRating02 -Group4Sprites: ; 14645 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_FISHER - db SPRITE_LASS - db SPRITE_OFFICER - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_COOLTRAINER_M - db SPRITE_BUG_CATCHER - db SPRITE_SUPER_NERD - db SPRITE_WEIRD_TREE - db SPRITE_POKE_BALL - db SPRITE_FRUIT_TREE -; 1465c + db 34 + dw SFX_DEX_FANFARE_20_49 + dw OakRating03 -Group8Sprites: ; 1465c - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_KURT_OUTSIDE - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_OFFICER - db SPRITE_POKEFAN_M - db SPRITE_BLACK_BELT - db SPRITE_TEACHER - db SPRITE_AZALEA_ROCKET - db SPRITE_LASS - db SPRITE_SILVER - db SPRITE_FRUIT_TREE - db SPRITE_SLOWPOKE -; 14673 + db 49 + dw SFX_DEX_FANFARE_20_49 + dw OakRating04 -Group11Sprites: ; 14673 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_POKE_BALL - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_OFFICER - db SPRITE_POKEFAN_M - db SPRITE_DAYCARE_MON_1 - db SPRITE_COOLTRAINER_F - db SPRITE_ROCKET - db SPRITE_LASS - db SPRITE_DAYCARE_MON_2 - db SPRITE_FRUIT_TREE - db SPRITE_SLOWPOKE -; 1468a + db 64 + dw SFX_DEX_FANFARE_50_79 + dw OakRating05 + + db 79 + dw SFX_DEX_FANFARE_50_79 + dw OakRating06 + + db 94 + dw SFX_DEX_FANFARE_80_109 + dw OakRating07 + + db 109 + dw SFX_DEX_FANFARE_80_109 + dw OakRating08 + + db 124 + dw SFX_CAUGHT_MON + dw OakRating09 + + db 139 + dw SFX_CAUGHT_MON + dw OakRating10 + + db 154 + dw SFX_DEX_FANFARE_140_169 + dw OakRating11 + + db 169 + dw SFX_DEX_FANFARE_140_169 + dw OakRating12 + + db 184 + dw SFX_DEX_FANFARE_170_199 + dw OakRating13 + + db 199 + dw SFX_DEX_FANFARE_170_199 + dw OakRating14 + + db 214 + dw SFX_DEX_FANFARE_200_229 + dw OakRating15 + + db 229 + dw SFX_DEX_FANFARE_200_229 + dw OakRating16 + + db 239 + dw SFX_DEX_FANFARE_230_PLUS + dw OakRating17 + + db 248 + dw SFX_DEX_FANFARE_230_PLUS + dw OakRating18 + + db 255 + dw SFX_DEX_FANFARE_230_PLUS + dw OakRating19 + +OakPCText1: ; 0x266de + TX_FAR _OakPCText1 + db "@" + +OakPCText2: ; 0x266e3 + TX_FAR _OakPCText2 + db "@" + +OakPCText3: ; 0x266e8 + TX_FAR _OakPCText3 + db "@" + +OakRating01: + TX_FAR _OakRating01 + db "@" + +OakRating02: + TX_FAR _OakRating02 + db "@" + +OakRating03: + TX_FAR _OakRating03 + db "@" + +OakRating04: + TX_FAR _OakRating04 + db "@" + +OakRating05: + TX_FAR _OakRating05 + db "@" + +OakRating06: + TX_FAR _OakRating06 + db "@" + +OakRating07: + TX_FAR _OakRating07 + db "@" + +OakRating08: + TX_FAR _OakRating08 + db "@" + +OakRating09: + TX_FAR _OakRating09 + db "@" + +OakRating10: + TX_FAR _OakRating10 + db "@" + +OakRating11: + TX_FAR _OakRating11 + db "@" + +OakRating12: + TX_FAR _OakRating12 + db "@" + +OakRating13: + TX_FAR _OakRating13 + db "@" + +OakRating14: + TX_FAR _OakRating14 + db "@" + +OakRating15: + TX_FAR _OakRating15 + db "@" + +OakRating16: + TX_FAR _OakRating16 + db "@" + +OakRating17: + TX_FAR _OakRating17 + db "@" + +OakRating18: + TX_FAR _OakRating18 + db "@" + +OakRating19: + TX_FAR _OakRating19 + db "@" + +OakPCText4: ; 0x2674c + TX_FAR _OakPCText4 + db "@" + +INCBIN "baserom.gbc", $26751, $2675c - $26751 + +_KrisDecorationMenu: ; 0x2675c + ld a, [$cf76] + push af + ld hl, $679a + call Function1d35 + xor a + ld [$d1ee], a + ld a, $1 + ld [$d1ef], a +.asm_2676f + ld a, [$d1ef] + ld [$cf88], a + call $6806 + call $1e5d + ld a, [$cfa9] + ld [$d1ef], a + jr c, .asm_2678e + ld a, [MenuSelection] + ld hl, $67aa + call $1fa7 + jr nc, .asm_2676f + +.asm_2678e + call Function1c07 + pop af + ld [$cf76], a + ld a, [$d1ee] + ld c, a + ret +; 0x2679a + +INCBIN "baserom.gbc", $2679a, $269dd - $2679a + + +Function269dd: ; 269dd + ld hl, $6a4f + ld bc, $0006 + call AddNTimes + ret +; 269e7 + +Function269e7: ; 269e7 + push hl + call $69dd + call $6c72 + pop hl + call CopyName2 + ret +; 269f3 + +INCBIN "baserom.gbc", $269f3, $26a30 - $269f3 + + +Function26a30: ; 26a30 + call $69dd + ld de, $0003 + add hl, de + ld a, [hli] + ld d, [hl] + ld e, a + ret +; 26a3b -Group22Sprites: ; 1468a - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_STANDING_YOUNGSTER - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_OLIVINE_RIVAL - db SPRITE_POKEFAN_M - db SPRITE_LASS - db SPRITE_BUENA - db SPRITE_SWIMMER_GIRL - db SPRITE_SAILOR - db SPRITE_POKEFAN_F - db SPRITE_SUPER_NERD - db SPRITE_TAUROS - db SPRITE_FRUIT_TREE - db SPRITE_ROCK -; 146a1 +Function26a3b: ; 26a3b + push bc + call $6a30 + pop bc + call BitTable1Func + ret +; 26a44 -Group1Sprites: ; 146a1 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_STANDING_YOUNGSTER - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_OLIVINE_RIVAL - db SPRITE_POKEFAN_M - db SPRITE_LASS - db SPRITE_BUENA - db SPRITE_SWIMMER_GIRL - db SPRITE_SAILOR - db SPRITE_POKEFAN_F - db SPRITE_SUPER_NERD - db SPRITE_TAUROS - db SPRITE_FRUIT_TREE - db SPRITE_ROCK -; 146b8 +INCBIN "baserom.gbc", $26a44, $26c72 - $26a44 -Group9Sprites: ; 146b8 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_LANCE - db SPRITE_GRAMPS - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_COOLTRAINER_M - db SPRITE_LASS - db SPRITE_YOUNGSTER - db SPRITE_GYARADOS - db SPRITE_FRUIT_TREE - db SPRITE_POKE_BALL -; 146cf -Group2Sprites: ; 146cf - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_M - db SPRITE_POKEFAN_M - db SPRITE_BLACK_BELT - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_FRUIT_TREE - db SPRITE_POKE_BALL -; 146e6 +Function26c72: ; 26c72 + ld a, [hli] + ld e, [hl] + ld bc, StringBuffer2 + push bc + ld hl, $6c7e + rst JumpTable + pop de + ret +; 26c7e -Group5Sprites: ; 146e6 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_GRAMPS - db SPRITE_YOUNGSTER - db SPRITE_LASS - db SPRITE_SUPER_NERD - db SPRITE_COOLTRAINER_M - db SPRITE_POKEFAN_M - db SPRITE_BLACK_BELT - db SPRITE_COOLTRAINER_F - db SPRITE_FISHER - db SPRITE_FRUIT_TREE - db SPRITE_POKE_BALL -; 146fd +INCBIN "baserom.gbc", $26c7e, $26c8c - $26c7e -Group3Sprites: ; 146fd - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_GAMEBOY_KID - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_LASS - db SPRITE_POKEFAN_F - db SPRITE_TEACHER - db SPRITE_YOUNGSTER - db SPRITE_GROWLITHE - db SPRITE_POKEFAN_M - db SPRITE_ROCKER - db SPRITE_FISHER - db SPRITE_SCIENTIST - db SPRITE_POKE_BALL - db SPRITE_BOULDER -; 14714 -Group15Sprites: ; 14714 - db SPRITE_SUICUNE - db SPRITE_SILVER_TROPHY - db SPRITE_FAMICOM - db SPRITE_POKEDEX - db SPRITE_WILL - db SPRITE_KAREN - db SPRITE_NURSE - db SPRITE_OLD_LINK_RECEPTIONIST - db SPRITE_BIG_LAPRAS - db SPRITE_BIG_ONIX - db SPRITE_SUDOWOODO - db SPRITE_BIG_SNORLAX - db SPRITE_SAILOR - db SPRITE_FISHING_GURU - db SPRITE_GENTLEMAN - db SPRITE_SUPER_NERD - db SPRITE_HO_OH - db SPRITE_TEACHER - db SPRITE_COOLTRAINER_F - db SPRITE_YOUNGSTER - db SPRITE_FAIRY - db SPRITE_POKE_BALL - db SPRITE_ROCK -; 1472b +Function26c8c: ; 26c8c + ret +; 26c8d -Group20Sprites: ; 1472b - db SPRITE_OAK - db SPRITE_FISHER - db SPRITE_TEACHER - db SPRITE_TWIN - db SPRITE_POKEFAN_M - db SPRITE_GRAMPS - db SPRITE_FAIRY - db SPRITE_SILVER - db SPRITE_FISHING_GURU - db SPRITE_POKE_BALL - db SPRITE_POKEDEX -; 14736 +Function26c8d: ; 26c8d + ld a, e + jr .asm_26cca + call $6c8d + ld a, $d + jr .asm_26cca -SpriteHeaders: ; 14736 -INCLUDE "gfx/overworld/sprite_headers.asm" -; 1499a + call $6c8d + ld a, $e + jr .asm_26cca + ld a, e + call $6cc0 + ld a, $f + jr .asm_26cca -INCBIN "baserom.gbc", $1499a, $14f1c - $1499a + ld a, e + call $6cc0 + ld a, $10 + jr .asm_26cca + push de + ld a, $11 + call $6cca + pop de + ld a, e + jr .asm_26cc0 -Function14f1c: ; 14f1c - xor a - ld [$cfcd], a - call Function14f84 - ld a, [$cfcd] - and a - jr z, .asm_14f46 - ld a, $1 - call GetSRAMBank - ld hl, $a044 - ld de, StartDay - ld bc, $0008 - call CopyBytes - ld hl, $a3da - ld de, StatusFlags - ld a, [hl] - ld [de], a - call CloseSRAM + push de + call $6cca + pop de + ld a, e + jr .asm_26cca + +.asm_26cc0 + push bc + ld [$d265], a + call GetPokemonName + pop bc + jr .asm_26cda + +.asm_26cca + call $6ccf + jr .asm_26cda + + push bc + ld hl, $6b8d + call GetNthString + ld d, h + ld e, l + pop bc ret -.asm_14f46 - call Function14faf - ld a, [$cfcd] - and a - jr z, .asm_14f6c - ld a, $0 - call GetSRAMBank - ld hl, $b244 - ld de, StartDay - ld bc, $0008 - call CopyBytes - ld hl, $b5da - ld de, StatusFlags - ld a, [hl] - ld [de], a - call CloseSRAM +.asm_26cda + ld h, b + ld l, c + call CopyName2 + dec hl + ld b, h + ld c, l ret +; 26ce3 -.asm_14f6c - ld hl, $4f7c - ld de, Options - ld bc, $0008 - call CopyBytes - call Function67e +INCBIN "baserom.gbc", $26ce3, $26eea - $26ce3 + + +Function26eea: ; 26eea + ld a, c + ld h, d + ld l, e + call $69e7 ret -; 14f7c +; 26ef1 -INCBIN "baserom.gbc", $14f7c, $14f84 - $14f7c +Function26ef1: ; 26ef1 + ld a, c + jp $6a3b +; 26ef5 +INCBIN "baserom.gbc", $26ef5, $26f59 - $26ef5 -Function14f84: ; 14f84 - ld a, $1 - call GetSRAMBank - ld a, [$a008] - cp $63 - jr nz, .asm_14fab - ld a, [$ad0f] - cp $7f - jr nz, .asm_14fab - ld hl, $a000 - ld de, Options - ld bc, $0008 - call CopyBytes - call CloseSRAM - ld a, $1 - ld [$cfcd], a -.asm_14fab - call CloseSRAM +Function26f59: ; 26f59 + ld a, b + ld hl, $6f5f + rst JumpTable ret -; 14faf +; 26f5f -Function14faf: ; 14faf - ld a, $0 - call GetSRAMBank - ld a, [$b208] - cp $63 - jr nz, .asm_14fd3 - ld a, [$bf0f] - cp $7f - jr nz, .asm_14fd3 - ld hl, $b200 - ld de, Options - ld bc, $0008 - call CopyBytes - ld a, $2 - ld [$cfcd], a +INCBIN "baserom.gbc", $26f5f, $26fb9 - $26f5f -.asm_14fd3 - call CloseSRAM + +Function26fb9: ; 26fb9 + ld a, [LeftOrnament] + jr .asm_26fc8 + + ld a, [RightOrnament] + jr .asm_26fc8 + + ld a, [Console] + jr .asm_26fc8 + +.asm_26fc8 + ld c, a + ld de, StringBuffer3 + call $6eea + ld b, $9 + ld de, $6fd5 ret -; 14fd7 +; 26fd5 -INCBIN "baserom.gbc", $14fd7, $152ab - $14fd7 +INCBIN "baserom.gbc", $26fd5, $26fdd - $26fd5 -BlackoutPoints: ; 0x152ab - db GROUP_KRISS_HOUSE_2F, MAP_KRISS_HOUSE_2F, 3, 3 - db GROUP_VIRIDIAN_POKECENTER_1F, MAP_VIRIDIAN_POKECENTER_1F, 5, 3 ; unused - db GROUP_PALLET_TOWN, MAP_PALLET_TOWN, 5, 6 - db GROUP_VIRIDIAN_CITY, MAP_VIRIDIAN_CITY, 23, 26 - db GROUP_PEWTER_CITY, MAP_PEWTER_CITY, 13, 26 - db GROUP_CERULEAN_CITY, MAP_CERULEAN_CITY, 19, 22 - db GROUP_ROUTE_10A, MAP_ROUTE_10A, 11, 2 - db GROUP_VERMILION_CITY, MAP_VERMILION_CITY, 9, 6 - db GROUP_LAVENDER_TOWN, MAP_LAVENDER_TOWN, 5, 6 - db GROUP_SAFFRON_CITY, MAP_SAFFRON_CITY, 9, 30 - db GROUP_CELADON_CITY, MAP_CELADON_CITY, 29, 10 - db GROUP_FUCHSIA_CITY, MAP_FUCHSIA_CITY, 19, 28 - db GROUP_CINNABAR_ISLAND, MAP_CINNABAR_ISLAND, 11, 12 - db GROUP_ROUTE_23, MAP_ROUTE_23, 9, 6 - db GROUP_NEW_BARK_TOWN, MAP_NEW_BARK_TOWN, 13, 6 - db GROUP_CHERRYGROVE_CITY, MAP_CHERRYGROVE_CITY, 29, 4 - db GROUP_VIOLET_CITY, MAP_VIOLET_CITY, 31, 26 - db GROUP_ROUTE_32, MAP_ROUTE_32, 11, 74 - db GROUP_AZALEA_TOWN, MAP_AZALEA_TOWN, 15, 10 - db GROUP_CIANWOOD_CITY, MAP_CIANWOOD_CITY, 23, 44 - db GROUP_GOLDENROD_CITY, MAP_GOLDENROD_CITY, 15, 28 - db GROUP_OLIVINE_CITY, MAP_OLIVINE_CITY, 13, 22 - db GROUP_ECRUTEAK_CITY, MAP_ECRUTEAK_CITY, 23, 28 - db GROUP_MAHOGANY_TOWN, MAP_MAHOGANY_TOWN, 15, 14 - db GROUP_LAKE_OF_RAGE, MAP_LAKE_OF_RAGE, 21, 29 - db GROUP_BLACKTHORN_CITY, MAP_BLACKTHORN_CITY, 21, 30 - db GROUP_SILVER_CAVE_OUTSIDE, MAP_SILVER_CAVE_OUTSIDE, 23, 20 - db GROUP_FAST_SHIP_CABINS_SW_SSW_NW, MAP_FAST_SHIP_CABINS_SW_SSW_NW, 6, 2 - db $ff, $ff, $ff, $ff +Function26fdd: ; 26fdd + ld b, $9 + ld de, $6fe3 + ret +; 26fe3 -INCBIN "baserom.gbc", $1531f, $15736 - $1531f +INCBIN "baserom.gbc", $26fe3, $270c4 - $26fe3 + +GetTrainerDVs: ; 270c4 +; get dvs based on trainer class +; output: bc + push hl +; dec trainer class so there's no filler entry for $00 + ld a, [OtherTrainerClass] + dec a + ld c, a + ld b, $0 +; seek table + ld hl, TrainerClassDVs + add hl, bc + add hl, bc +; get dvs + ld a, [hli] + ld b, a + ld c, [hl] +; we're done + pop hl + ret +; 270d6 + +TrainerClassDVs ; 270d6 +; AtkDef, SpdSpc + db $9A, $77 ; falkner + db $88, $88 ; bugsy + db $98, $88 ; whitney + db $98, $88 ; morty + db $98, $88 ; pryce + db $98, $88 ; jasmine + db $98, $88 ; chuck + db $7C, $DD ; clair + db $DD, $DD ; rival1 + db $98, $88 ; pokemon prof + db $DC, $DD ; will + db $DC, $DD ; cal + db $DC, $DD ; bruno + db $7F, $DF ; karen + db $DC, $DD ; koga + db $DC, $DD ; champion + db $98, $88 ; brock + db $78, $88 ; misty + db $98, $88 ; lt surge + db $98, $88 ; scientist + db $78, $88 ; erika + db $98, $88 ; youngster + db $98, $88 ; schoolboy + db $98, $88 ; bird keeper + db $58, $88 ; lass + db $98, $88 ; janine + db $D8, $C8 ; cooltrainerm + db $7C, $C8 ; cooltrainerf + db $69, $C8 ; beauty + db $98, $88 ; pokemaniac + db $D8, $A8 ; gruntm + db $98, $88 ; gentleman + db $98, $88 ; skier + db $68, $88 ; teacher + db $7D, $87 ; sabrina + db $98, $88 ; bug catcher + db $98, $88 ; fisher + db $98, $88 ; swimmerm + db $78, $88 ; swimmerf + db $98, $88 ; sailor + db $98, $88 ; super nerd + db $98, $88 ; rival2 + db $98, $88 ; guitarist + db $A8, $88 ; hiker + db $98, $88 ; biker + db $98, $88 ; blaine + db $98, $88 ; burglar + db $98, $88 ; firebreather + db $98, $88 ; juggler + db $98, $88 ; blackbelt + db $D8, $A8 ; executivem + db $98, $88 ; psychic + db $6A, $A8 ; picnicker + db $98, $88 ; camper + db $7E, $A8 ; executivef + db $98, $88 ; sage + db $78, $88 ; medium + db $98, $88 ; boarder + db $98, $88 ; pokefanm + db $68, $8A ; kimono girl + db $68, $A8 ; twins + db $6D, $88 ; pokefanf + db $FD, $DE ; red + db $9D, $DD ; blue + db $98, $88 ; officer + db $7E, $A8 ; gruntf + db $98, $88 ; mysticalman +; 2715c + +INCBIN "baserom.gbc", $2715c, $271f4 - $2715c + +MoveEffectsPointers: ; 271f4 +INCLUDE "battle/moves/move_effects_pointers.asm" + +MoveEffects: ; 2732e +INCLUDE "battle/moves/move_effects.asm" + +INCBIN "baserom.gbc", $27a28, $27a2d - $27a28 + + +SECTION "bankA",DATA,BANK[$A] + +INCBIN "baserom.gbc", $28000, $2a2a0 - $28000 + +SpecialRoamMons: ; 2a2a0 +; initialize RoamMon structs +; include commented-out parts from the gs function + +; species + ld a, RAIKOU + ld [RoamMon1Species], a + ld a, ENTEI + ld [RoamMon2Species], a +; ld a, SUICUNE +; ld [RoamMon3Species], a + +; level + ld a, 40 + ld [RoamMon1Level], a + ld [RoamMon2Level], a +; ld [RoamMon3Level], a + +; raikou starting map + ld a, GROUP_ROUTE_42 + ld [RoamMon1MapGroup], a + ld a, MAP_ROUTE_42 + ld [RoamMon1MapNumber], a + +; entei starting map + ld a, GROUP_ROUTE_37 + ld [RoamMon2MapGroup], a + ld a, MAP_ROUTE_37 + ld [RoamMon2MapNumber], a + +; suicune starting map +; ld a, GROUP_ROUTE_38 +; ld [RoamMon3MapGroup], a +; ld a, MAP_ROUTE_38 +; ld [RoamMon3MapNumber], a + +; hp + xor a ; generate new stats + ld [RoamMon1CurHP], a + ld [RoamMon2CurHP], a +; ld [RoamMon3CurHP], a -KrissPCMenuData: ; 0x15736 - db %01000000 - db 0, 0 ; top left corner coords (y, x) - db 12, 15 ; bottom right corner coords (y, x) - dw .KrissPCMenuData2 - db 1 ; default selected option + ret +; 2a2ce -.KrissPCMenuData2 - db %10100000 ; bit7 - db 0 ; # items? - dw .KrissPCMenuList1 - db $8d - db $1f - dw .KrissPCMenuPointers +INCBIN "baserom.gbc", $2a2ce, $2a5e9 - $2a2ce -.KrissPCMenuPointers ; 0x15746 - dw KrisWithdrawItemMenu, .WithdrawItem - dw KrisDepositItemMenu, .DepositItem - dw KrisTossItemMenu, .TossItem - dw KrisMailBoxMenu, .MailBox - dw KrisDecorationMenu, .Decoration - dw KrisLogOffMenu, .LogOff - dw KrisLogOffMenu, .TurnOff -.WithdrawItem db "WITHDRAW ITEM@" -.DepositItem db "DEPOSIT ITEM@" -.TossItem db "TOSS ITEM@" -.MailBox db "MAIL BOX@" -.Decoration db "DECORATION@" -.TurnOff db "TURN OFF@" -.LogOff db "LOG OFF@" +WildMons1: ; 0x2a5e9 +INCLUDE "stats/wild/johto_grass.asm" -WITHDRAW_ITEM EQU 0 -DEPOSIT_ITEM EQU 1 -TOSS_ITEM EQU 2 -MAIL_BOX EQU 3 -DECORATION EQU 4 -TURN_OFF EQU 5 -LOG_OFF EQU 6 +WildMons2: ; 0x2b11d +INCLUDE "stats/wild/johto_water.asm" -.KrissPCMenuList1 - db 5 - db WITHDRAW_ITEM - db DEPOSIT_ITEM - db TOSS_ITEM - db MAIL_BOX - db TURN_OFF - db $ff +WildMons3: ; 0x2b274 +INCLUDE "stats/wild/kanto_grass.asm" -.KrissPCMenuList2 - db 6 - db WITHDRAW_ITEM - db DEPOSIT_ITEM - db TOSS_ITEM - db MAIL_BOX - db DECORATION - db LOG_OFF - db $ff +WildMons4: ; 0x2b7f7 +INCLUDE "stats/wild/kanto_water.asm" -INCBIN "baserom.gbc", $157bb, $157d1 - $157bb +WildMons5: ; 0x2b8d0 +INCLUDE "stats/wild/swarm_grass.asm" -KrisWithdrawItemMenu: ; 0x157d1 - call $1d6e - ld a, BANK(ClearPCItemScreen) - ld hl, ClearPCItemScreen - rst $8 -.asm_157da - call Function15985 - jr c, .asm_157e4 - call Function157e9 - jr .asm_157da +WildMons6: ; 0x2b92f +INCLUDE "stats/wild/swarm_water.asm" -.asm_157e4 - call $2b3c - xor a - ret -; 0x157e9 -Function157e9: ; 0x157e9 - ; check if the item has a quantity - ld a, BANK(_CheckTossableItem) - ld hl, _CheckTossableItem - rst $8 - ld a, [$d142] - and a - jr z, .askquantity +INCBIN "baserom.gbc", $2b930, $2ba1a - $2b930 - ; items without quantity are always ×1 - ld a, 1 - ld [$d10c], a - jr .withdraw +ChrisBackpic: ; 2ba1a +INCBIN "gfx/misc/player.lz" +; 2bba1 -.askquantity - ld hl, .HowManyText - call $1d4f - ld a, $9 - ld hl, $4fbf - rst $8 - call Function1c07 - call Function1c07 - jr c, .done +db 0, 0, 0, 0, 0, 0, 0, 0, 0 ; filler -.withdraw - ld a, [$d10c] - ld [Buffer1], a ; quantity - ld a, [$d107] - ld [Buffer2], a - ld hl, NumItems - call $2f66 - jr nc, .PackFull - ld a, [Buffer1] - ld [$d10c], a - ld a, [Buffer2] - ld [$d107], a - ld hl, $d8f1 - call $2f53 - ld a, $3b - call Predef - ld hl, .WithdrewText - call $1d4f - xor a - ld [hBGMapMode], a - call Function1c07 - ret +DudeBackpic: ; 2bbaa +INCBIN "gfx/misc/dude.lz" +; 2bce1 -.PackFull - ld hl, .NoRoomText - call $1d67 - ret -.done - ret -; 0x15850 +SECTION "bankB",DATA,BANK[$B] -.HowManyText ; 0x15850 - TX_FAR _KrissPCHowManyWithdrawText - db "@" +INCBIN "baserom.gbc", $2C000, $2c1ef - $2C000 -.WithdrewText ; 0x15855 - TX_FAR _KrissPCWithdrewItemsText - db "@" +TrainerClassNames: ; 2c1ef + db "LEADER@" + db "LEADER@" + db "LEADER@" + db "LEADER@" + db "LEADER@" + db "LEADER@" + db "LEADER@" + db "LEADER@" + db "RIVAL@" + db "#MON PROF.@" + db "ELITE FOUR@" + db $4a, " TRAINER@" + db "ELITE FOUR@" + db "ELITE FOUR@" + db "ELITE FOUR@" + db "CHAMPION@" + db "LEADER@" + db "LEADER@" + db "LEADER@" + db "SCIENTIST@" + db "LEADER@" + db "YOUNGSTER@" + db "SCHOOLBOY@" + db "BIRD KEEPER@" + db "LASS@" + db "LEADER@" + db "COOLTRAINER@" + db "COOLTRAINER@" + db "BEAUTY@" + db "#MANIAC@" + db "ROCKET@" + db "GENTLEMAN@" + db "SKIER@" + db "TEACHER@" + db "LEADER@" + db "BUG CATCHER@" + db "FISHER@" + db "SWIMMER♂@" + db "SWIMMER♀@" + db "SAILOR@" + db "SUPER NERD@" + db "RIVAL@" + db "GUITARIST@" + db "HIKER@" + db "BIKER@" + db "LEADER@" + db "BURGLAR@" + db "FIREBREATHER@" + db "JUGGLER@" + db "BLACKBELT@" + db "ROCKET@" + db "PSYCHIC@" + db "PICNICKER@" + db "CAMPER@" + db "ROCKET@" + db "SAGE@" + db "MEDIUM@" + db "BOARDER@" + db "#FAN@" + db "KIMONO GIRL@" + db "TWINS@" + db "#FAN@" + db $4a, " TRAINER@" + db "LEADER@" + db "OFFICER@" + db "ROCKET@" + db "MYSTICALMAN@" -.NoRoomText ; 0x1585a - TX_FAR _KrissPCNoRoomWithdrawText - db "@" +INCBIN "baserom.gbc", $2c41a, $2c7fb - $2c41a -KrisTossItemMenu: ; 0x1585f - call $1d6e - ld a, BANK(ClearPCItemScreen) - ld hl, ClearPCItemScreen - rst $8 -.asm_15868 - call Function15985 - jr c, .asm_15878 - ld de, $d8f1 - ld a, $4 - ld hl, $69f4 - rst $8 - jr .asm_15868 -.asm_15878 - call $2b3c - xor a +Function2c7fb: ; 2c7fb + ld hl, StringBuffer2 + ld de, $d066 + ld bc, $000c + call CopyBytes + call WhiteBGMap + ld a, $14 + ld hl, $404f + rst FarCall + ld a, $14 + ld hl, $4405 + rst FarCall + ld a, $14 + ld hl, $43e0 + rst FarCall + ld a, $3 + ld [PartyMenuActionText], a +.asm_2c821 + callba WritePartyMenuTilemap + callba PrintPartyMenuText + call WaitBGMap + call Function32f9 + call DelayFrame + callba PartyMenuSelect + push af + ld a, [CurPartySpecies] + cp $fd + pop bc + jr z, .asm_2c854 + push bc + ld hl, $d066 + ld de, StringBuffer2 + ld bc, $000c + call CopyBytes + pop af ret -; 0x1587d +.asm_2c854 + push hl + push de + push bc + push af + ld de, $0019 + call StartSFX + call WaitSFX + pop af + pop bc + pop de + pop hl + jr .asm_2c821 +; 2c867 -KrisDecorationMenu: ; 0x1587d - ld a, BANK(_KrisDecorationMenu) - ld hl, _KrisDecorationMenu - rst $8 - ld a, c - and a - ret z - scf - ret -; 0x15888 +INCBIN "baserom.gbc", $2c867, $2ee6c - $2c867 -KrisLogOffMenu: ; 0x15888 +PlayBattleMusic: ; 2ee6c + + push hl + push de + push bc + xor a - scf - ret -; 0x1588b + ld [MusicFade], a + ld de, MUSIC_NONE + call StartMusic + call DelayFrame + call MaxVolume + ld a, [BattleType] + cp BATTLETYPE_SUICUNE + ld de, MUSIC_SUICUNE_BATTLE + jp z, .done + cp BATTLETYPE_ROAMING + jp z, .done -KrisDepositItemMenu: ; 0x1588b - call Function158b8 - jr c, .asm_158b6 - call Function2ed3 - call $1d6e - ld a, $4 - ld hl, $46a5 - rst $8 -.asm_1589c - ld a, $4 - ld hl, $46be - rst $8 - ld a, [$cf66] + ; Are we fighting a trainer? + ld a, [OtherTrainerClass] and a - jr z, .asm_158b3 - call Function158cc - ld a, $4 - ld hl, CheckRegisteredItem - rst $8 - jr .asm_1589c + jr nz, .trainermusic -.asm_158b3 - call $2b3c + ld a, BANK(RegionCheck) + ld hl, RegionCheck + rst FarCall + ld a, e + and a + jr nz, .kantowild -.asm_158b6 - xor a - ret -; 0x158b8 + ld de, MUSIC_JOHTO_WILD_BATTLE + ld a, [TimeOfDay] + cp NITE + jr nz, .done + ld de, MUSIC_JOHTO_WILD_BATTLE_NIGHT + jr .done -Function158b8: ; 0x158b8 - ld a, $4 - ld hl, $69d5 - rst $8 - ret nc - ld hl, Text158c7 - call $1d67 - scf - ret -; 0x158c7 +.kantowild + ld de, MUSIC_KANTO_WILD_BATTLE + jr .done -Text158c7: ; 0x15c87 - TX_FAR UnknownText_0x1c13df - db "@" +.trainermusic + ld de, MUSIC_CHAMPION_BATTLE + cp CHAMPION + jr z, .done + cp RED + jr z, .done + ; really, they should have included admins and scientists here too... + ld de, MUSIC_ROCKET_BATTLE + cp GRUNTM + jr z, .done + cp GRUNTF + jr z, .done -Function158cc: ; 0x158cc - ld a, [$c2ce] - push af - ld a, $0 - ld [$c2ce], a - ld a, $3 - ld hl, $5453 - rst $8 - ld a, [$d142] - ld hl, JumpTable158e7 - rst JumpTable - pop af - ld [$c2ce], a - ret -; 0x158e7 + ld de, MUSIC_KANTO_GYM_LEADER_BATTLE + ld a, BANK(IsKantoGymLeader) + ld hl, IsKantoGymLeader + rst FarCall + jr c, .done -JumpTable158e7: ; 0x158e7 - dw .jump2 - dw .jump1 - dw .jump1 - dw .jump1 - dw .jump2 - dw .jump2 - dw .jump2 + ld de, MUSIC_JOHTO_GYM_LEADER_BATTLE + ld a, BANK(IsJohtoGymLeader) + ld hl, IsJohtoGymLeader + rst FarCall + jr c, .done -.jump1: - ret -.jump2: - ld a, [Buffer1] - push af - ld a, [Buffer2] - push af - call Function1590a - pop af - ld [Buffer2], a - pop af - ld [Buffer1], a - ret -; 0x1590a + ld de, MUSIC_RIVAL_BATTLE + ld a, [OtherTrainerClass] + cp RIVAL1 + jr z, .done + cp RIVAL2 + jr nz, .othertrainer -Function1590a: ; 0x1590a - ld a, $3 - ld hl, $5427 - rst $8 - ld a, [$d142] + ld a, [OtherTrainerID] + cp 4 ; Rival in Indigo Plateau + jr c, .done + ld de, MUSIC_CHAMPION_BATTLE + jr .done + +.othertrainer + ld a, [InLinkBattle] and a - jr z, .asm_1591d - ld a, $1 - ld [$d10c], a - jr .asm_15933 + jr nz, .johtotrainer -.asm_1591d - ld hl, .HowManyText - call $1d4f - ld a, $9 - ld hl, $4fbf - rst $8 - push af - call Function1c07 - call Function1c07 - pop af - jr c, .asm_1596c + ld a, BANK(RegionCheck) + ld hl, RegionCheck + rst FarCall + ld a, e + and a + jr nz, .kantotrainer -.asm_15933 - ld a, [$d10c] - ld [Buffer1], a - ld a, [$d107] - ld [Buffer2], a - ld hl, $d8f1 - call $2f66 - jr nc, .asm_15965 - ld a, [Buffer1] - ld [$d10c], a - ld a, [Buffer2] - ld [$d107], a - ld hl, NumItems - call $2f53 - ld a, $3b - call Predef - ld hl, .DepositText - call PrintText - ret +.johtotrainer + ld de, MUSIC_JOHTO_TRAINER_BATTLE + jr .done -.asm_15965 - ld hl, .NoRoomText - call PrintText - ret +.kantotrainer + ld de, MUSIC_KANTO_TRAINER_BATTLE -.asm_1596c - and a +.done + call StartMusic + + pop bc + pop de + pop hl ret -; 0x1596e +; 2ef18 -.HowManyText ; 0x1596e - TX_FAR _KrissPCHowManyDepositText - db "@" +ClearBattleRAM: ; 2ef18 + xor a + ld [$d0ec], a + ld [$d0ee], a -.DepositText ; 0x15973 - TX_FAR _KrissPCDepositItemsText - db "@" + ld hl, $d0d8 + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a -.NoRoomText ; 0x15978 - TX_FAR _KrissPCNoRoomDepositText - db "@" + ld [$d0e4], a + ld [CriticalHit], a + ld [BattleMonSpecies], a + ld [$c664], a + ld [CurBattleMon], a + ld [$d232], a + ld [TimeOfDayPal], a + ld [PlayerTurnsTaken], a + ld [EnemyTurnsTaken], a + ld [EvolvableFlags], a + ld hl, PlayerHPPal + ld [hli], a + ld [hl], a -KrisMailBoxMenu: ; 0x1597d - ld a, $11 - ld hl, $47a0 - rst $8 - xor a - ret -; 0x15985 + ld hl, BattleMonDVs + ld [hli], a + ld [hl], a + ld hl, EnemyMonDVs + ld [hli], a + ld [hl], a -Function15985: ; 0x15985 +; Clear the entire BattleMons area + ld hl, EnemyMoveStruct + ld bc, $0139 xor a - ld [$d0e3], a - ld a, [$c2ce] - push af - ld a, $0 - ld [$c2ce], a - ld hl, MenuData15a08 - call Function1d3c - hlcoord 0, 0 - ld b, $a - ld c, $12 - call TextBox - ld a, [$d0d7] - ld [$cf88], a - ld a, [$d0dd] - ld [$d0e4], a - call $350c - ld a, [$d0e4] - ld [$d0dd], a - ld a, [$cfa9] - ld [$d0d7], a - pop af - ld [$c2ce], a - ld a, [$d0e3] - and a - jr nz, .asm_159d8 - ld a, [$cf73] - cp $2 - jr z, .asm_15a06 - cp $1 - jr z, .asm_159fb - cp $4 - jr z, .asm_159f2 - jr .asm_159f8 + call ByteFill -.asm_159d8 - ld a, [$cf73] - cp $2 - jr z, .asm_159e9 - cp $1 - jr z, .asm_159ef - cp $4 - jr z, .asm_159ef - jr .asm_159f8 + ld hl, $5867 + ld a, $f + rst FarCall -.asm_159e9 + call Function1fbf + + ld hl, hBGMapAddress xor a - ld [$d0e3], a - jr .asm_159f8 + ld [hli], a + ld [hl], $98 + ret +; 2ef6e -.asm_159ef - call $56c7 -.asm_159f2 - ld a, $9 - ld hl, $490c - rst $8 +FillBox: ; 2ef6e +; Fill $c2c6-aligned box width b height c +; with iterating tile starting from $ffad at hl. +; Predef $13 -.asm_159f8 - jp $5989 + ld de, 20 -.asm_159fb - ld a, $9 - ld hl, $4706 - rst $8 - call $1bee + ld a, [$c2c6] and a - ret + jr nz, .left -.asm_15a06 - scf - ret -; 0x15a08 + ld a, [$ffad] +.x1 + push bc + push hl -MenuData15a08: ; 0x15a08 - db %01000000 - db 1, 4 ; top left corner coords (y, x) - db $a, $12 ; bottorm right corner coords (y, x) - dw .MenuData2 - db 1 ; default selected option +.y1 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .y1 -.MenuData2 - db %10110000 - db 4, 8 ; rows/cols? - db 2 ; horizontal spacing? - dbw 0, $d8f1 - dbw BANK(Function24ab4), Function24ab4 - dbw BANK(Function24ac3), Function24ac3 - dbw BANK(Function244c3), Function244c3 + pop hl + inc hl + pop bc + dec b + jr nz, .x1 + ret -INCBIN "baserom.gbc", $15a20, $174ba - $15a20 +.left +; Right-aligned. + push bc + ld b, 0 + dec c + add hl, bc + pop bc + ld a, [$ffad] +.x2 + push bc + push hl -SECTION "bank6",DATA,BANK[$6] +.y2 + ld [hl], a + add hl, de + inc a + dec c + jr nz, .y2 -Tileset03GFX: ; 0x18000 -INCBIN "gfx/tilesets/03.lz" -; 0x18605 + pop hl + dec hl + pop bc + dec b + jr nz, .x2 + ret +; 2ef9f - db $00 -Tileset03Meta: ; 0x18606 -INCBIN "tilesets/03_metatiles.bin" -; 0x18e06 -Tileset03Coll: ; 0x18e06 -INCBIN "tilesets/03_collision.bin" -; 0x19006 +SECTION "bankC",DATA,BANK[$C] -Tileset00GFX: ; 0x19006 -Tileset01GFX: ; 0x19006 -INCBIN "gfx/tilesets/01.lz" -; 0x19c0d +Tileset15GFX: ; 0x30000 +INCBIN "gfx/tilesets/15.lz" +; 0x304d7 db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 + db $00 -Tileset00Meta: ; 0x19c0e -Tileset01Meta: ; 0x19c0e -INCBIN "tilesets/01_metatiles.bin" -; 0x1a40e +Tileset15Meta: ; 0x304e0 +INCBIN "tilesets/15_metatiles.bin" +; 0x308e0 -Tileset00Coll: ; 0x1a40e -Tileset01Coll: ; 0x1a40e -INCBIN "tilesets/01_collision.bin" -; 0x1a60e +Tileset15Coll: ; 0x308e0 +INCBIN "tilesets/15_collision.bin" +; 0x309e0 -Tileset29GFX: ; 0x1a60e -INCBIN "gfx/tilesets/29.lz" -; 0x1af38 +Tileset25GFX: ; 0x309e0 +INCBIN "gfx/tilesets/25.lz" +; 0x30e78 db $00 db $00 @@ -17185,23 +28135,39 @@ INCBIN "gfx/tilesets/29.lz" db $00 db $00 db $00 + db $00 + db $00 -Tileset29Meta: ; 0x1af3e -INCBIN "tilesets/29_metatiles.bin" -; 0x1b33e +Tileset25Meta: ; 0x30e80 +INCBIN "tilesets/25_metatiles.bin" +; 0x31280 -Tileset29Coll: ; 0x1b33e -INCBIN "tilesets/29_collision.bin" -; 0x1b43e +Tileset25Coll: ; 0x31280 +INCBIN "tilesets/25_collision.bin" +; 0x31380 -Tileset20GFX: ; 0x1b43e -INCBIN "gfx/tilesets/20.lz" -; 0x1b8f1 +Tileset27GFX: ; 0x31380 +INCBIN "gfx/tilesets/27.lz" +; 0x318dc db $00 db $00 db $00 db $00 + +Tileset27Meta: ; 0x318e0 +INCBIN "tilesets/27_metatiles.bin" +; 0x31ce0 + +Tileset27Coll: ; 0x31ce0 +INCBIN "tilesets/27_collision.bin" +; 0x31de0 + +Tileset28GFX: ; 0x31de0 +INCBIN "gfx/tilesets/28.lz" +; 0x321a6 + + db $00 db $00 db $00 db $00 @@ -17212,4843 +28178,6575 @@ INCBIN "gfx/tilesets/20.lz" db $00 db $00 -Tileset20Meta: ; 0x1b8fe -INCBIN "tilesets/20_metatiles.bin" -; 0x1bcfe +Tileset28Meta: ; 0x321b0 +INCBIN "tilesets/28_metatiles.bin" +; 0x325b0 -Tileset20Coll: ; 0x1bcfe -INCBIN "tilesets/20_collision.bin" -; 0x1bdfe +Tileset28Coll: ; 0x325b0 +INCBIN "tilesets/28_collision.bin" +; 0x326b0 +Tileset30GFX: ; 0x326b0 +INCBIN "gfx/tilesets/30.lz" +; 0x329ed -SECTION "bank7",DATA,BANK[$7] +INCBIN "baserom.gbc", $329ed, $333f0 - $329ed -INCBIN "baserom.gbc", $1c000, $1c30c - $1c000 -Tileset07GFX: ; 0x1c30c -INCBIN "gfx/tilesets/07.lz" -; 0x1c73b +SECTION "bankD",DATA,BANK[$D] - db $00 +INCLUDE "battle/effect_commands.asm" -Tileset07Meta: ; 0x1c73c -INCBIN "tilesets/07_metatiles.bin" -; 0x1cb3c -Tileset07Coll: ; 0x1cb3c -INCBIN "tilesets/07_collision.bin" -; 0x1cc3c +SECTION "bankE",DATA,BANK[$E] -Tileset09GFX: ; 0x1cc3c -INCBIN "gfx/tilesets/09.lz" -; 0x1d047 +INCBIN "baserom.gbc", $38000, $38591 - $38000 - db $00 - db $00 - db $00 - db $00 - db $00 -Tileset09Meta: ; 0x1d04c -INCBIN "tilesets/09_metatiles.bin" -; 0x1d44c +AIScoring: ; 38591 +INCLUDE "battle/ai/scoring.asm" -Tileset09Coll: ; 0x1d44c -INCBIN "tilesets/09_collision.bin" -; 0x1d54c -Tileset06GFX: ; 0x1d54c -INCBIN "gfx/tilesets/06.lz" -; 0x1d924 +INCBIN "baserom.gbc", $3952d, $39939 - $3952d + + +Function39939: ; 39939 + ld a, [$cfc0] + bit 0, a + ld hl, $d26b + jp nz, $5984 + ld a, [OtherTrainerID] + ld b, a + ld a, [OtherTrainerClass] + ld c, a + ld a, c + cp $c + jr nz, .asm_3996d + ld a, $0 + call GetSRAMBank + ld a, [$abfd] + and a + call CloseSRAM + jr z, .asm_3996d + ld a, $0 + call GetSRAMBank + ld hl, $abfe + call $5984 + jp CloseSRAM + +.asm_3996d + dec c + push bc + ld b, $0 + ld hl, TrainerGroups + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + pop bc +.asm_3997a + dec b + jr z, .asm_39984 +.asm_3997d + ld a, [hli] + cp $ff + jr nz, .asm_3997d + jr .asm_3997a + +.asm_39984 + ld de, StringBuffer1 + push de + ld bc, $000b + call CopyBytes + pop de + ret +; 39990 + +INCBIN "baserom.gbc", $39990, $39999 - $39990 + + +TrainerGroups: ; 0x39999 +INCLUDE "trainers/trainer_pointers.asm" + +INCLUDE "trainers/trainers.asm" + + +SECTION "bankF",DATA,BANK[$F] + +INCBIN "baserom.gbc", $3c000, $3cc83 - $3c000 + +GetEighthMaxHP: ; 3cc83 +; output: bc + call GetQuarterMaxHP +; assumes nothing can have 1024 or more hp +; halve result + srl c +; round up + ld a, c + and a + jr nz, .end + inc c +.end + ret +; 3cc8e + + +GetQuarterMaxHP: ; 3cc8e +; output: bc + call GetMaxHP + +; quarter result + srl b + rr c + srl b + rr c + +; assumes nothing can have 1024 or more hp +; round up + ld a, c + and a + jr nz, .end + inc c +.end + ret +; 3cc9f + + +GetHalfMaxHP: ; 3cc9f +; output: bc + call GetMaxHP + +; halve reslut + srl b + rr c + +; floor = 1 + ld a, c + or b + jr nz, .end + inc c +.end + ret +; 3ccac + + +GetMaxHP: ; 3ccac +; output: bc, MagikarpLength-b + +; player + ld hl, BattleMonMaxHP + +; whose turn? + ld a, [hBattleTurn] + and a + jr z, .gethp + +; enemy + ld hl, EnemyMonMaxHP + +.gethp + ld a, [hli] + ld [Buffer2], a + ld b, a + + ld a, [hl] + ld [MagikarpLength], a + ld c, a + ret +; 3ccc2 + + +INCBIN "baserom.gbc", $3ccc2, $3d123 - $3ccc2 + + +; These functions check if the current opponent is a gym leader or one of a +; few other special trainers. + +; Note: KantoGymLeaders is a subset of JohtoGymLeaders. If you wish to +; differentiate between the two, call IsKantoGymLeader first. + +; The Lance and Red entries are unused for music checks; those trainers are +; accounted for elsewhere. + +IsKantoGymLeader: ; 0x3d123 + ld hl, KantoGymLeaders + jr IsGymLeaderCommon + +IsJohtoGymLeader: ; 0x3d128 + ld hl, JohtoGymLeaders +IsGymLeaderCommon: + push de + ld a, [OtherTrainerClass] + ld de, $0001 + call IsInArray + pop de + ret +; 0x3d137 + +JohtoGymLeaders: + db FALKNER + db WHITNEY + db BUGSY + db MORTY + db PRYCE + db JASMINE + db CHUCK + db CLAIR + db WILL + db BRUNO + db KAREN + db KOGA +; fallthrough +; these two entries are unused + db CHAMPION + db RED +; fallthrough +KantoGymLeaders: + db BROCK + db MISTY + db LT_SURGE + db ERIKA + db JANINE + db SABRINA + db BLAINE + db BLUE + db $ff + + +INCBIN "baserom.gbc", $3d14e, $3d38e - $3d14e - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 -Tileset06Meta: ; 0x1d92c -INCBIN "tilesets/06_metatiles.bin" -; 0x1dd2c +LostBattle: ; 3d38e + ld a, 1 + ld [BattleEnded], a -Tileset06Coll: ; 0x1dd2c -INCBIN "tilesets/06_collision.bin" -; 0x1de2c + ld a, [$cfc0] + bit 0, a + jr nz, .asm_3d3bd -Tileset13GFX: ; 0x1de2c -INCBIN "gfx/tilesets/13.lz" -; 0x1e58c + ld a, [BattleType] + cp BATTLETYPE_CANLOSE + jr nz, .asm_3d3e3 -Tileset13Meta: ; 0x1e58c -INCBIN "tilesets/13_metatiles.bin" -; 0x1e98c +; Remove the enemy from the screen. + hlcoord 0, 0 + ld bc, $0815 + call ClearBox + call $6bd8 -Tileset13Coll: ; 0x1e98c -INCBIN "tilesets/13_collision.bin" -; 0x1ea8c + ld c, 40 + call DelayFrames -Tileset24GFX: ; 0x1ea8c -INCBIN "gfx/tilesets/24.lz" -; 0x1ee0e + ld a, [$c2cc] + bit 0, a + jr nz, .asm_3d3bc + call $3718 +.asm_3d3bc + ret - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 +.asm_3d3bd +; Remove the enemy from the screen. + hlcoord 0, 0 + ld bc, $0815 + call ClearBox + call $6bd8 -Tileset24Meta: ; 0x1ee1c -Tileset30Meta: ; 0x1ee1c -INCBIN "tilesets/30_metatiles.bin" -; 0x1f21c + ld c, 40 + call DelayFrames -Tileset24Coll: ; 0x1f21c -Tileset30Coll: ; 0x1f21c -INCBIN "tilesets/30_collision.bin" -; 0x1f31c + call $6dd1 + ld c, 2 + ld a, $47 + ld hl, $4000 + rst FarCall + call $0a80 + call ClearTileMap + call WhiteBGMap + ret -; Songs i +.asm_3d3e3 + ld a, [InLinkBattle] + and a + jr nz, .LostLinkBattle -Music_Credits: INCLUDE "audio/music/credits.asm" -Music_Clair: INCLUDE "audio/music/clair.asm" -Music_MobileAdapter: INCLUDE "audio/music/mobileadapter.asm" +; Greyscale + ld b, 0 + call GetSGBLayout + call Function32f9 + jr .end +.LostLinkBattle + call UpdateEnemyMonInParty + call $4f35 + jr nz, .asm_3d40a + ld hl, TiedAgainstText + ld a, [$d0ee] + and $c0 + add 2 + ld [$d0ee], a + jr .asm_3d412 -SECTION "bank8",DATA,BANK[$8] +.asm_3d40a + ld hl, LostAgainstText + call $52f1 + jr z, .asm_3d417 -INCBIN "baserom.gbc", $20000, $20181 - $20000 +.asm_3d412 + call FarBattleTextBox -Tileset23GFX: ; 0x20181 -INCBIN "gfx/tilesets/23.lz" -; 0x206d2 +.end + scf + ret - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 +.asm_3d417 +; Remove the enemy from the screen. + hlcoord 0, 0 + ld bc, $0815 + call ClearBox + call $6bd8 -Tileset23Meta: ; 0x206e1 -INCBIN "tilesets/23_metatiles.bin" -; 0x20ae1 + ld c, 40 + call DelayFrames -Tileset23Coll: ; 0x20ae1 -INCBIN "tilesets/23_collision.bin" -; 0x20be1 + ld c, $3 + ld a, $13 + ld hl, $6a0a + rst FarCall + scf + ret +; 3d432 -Tileset10GFX: ; 0x20be1 -INCBIN "gfx/tilesets/10.lz" -; 0x213e0 - db $00 +INCBIN "baserom.gbc", $3d432, $3dabd - $3d432 -Tileset10Meta: ; 0x213e1 -INCBIN "tilesets/10_metatiles.bin" -; 0x217e1 -Tileset10Coll: ; 0x217e1 -INCBIN "tilesets/10_collision.bin" -; 0x218e1 +Function3dabd: ; 3dabd + ld a, [CurPartyMon] + ld hl, OTPartyMon1Species + call GetPartyLocation + ld de, EnemyMonSpecies + ld bc, $0006 + call CopyBytes + ld bc, $000f + add hl, bc + ld de, EnemyMonAtkDefDV + ld bc, $0007 + call CopyBytes + inc hl + inc hl + inc hl + ld de, EnemyMonLevel + ld bc, $0011 + call CopyBytes + ld a, [EnemyMonSpecies] + ld [CurSpecies], a + call GetBaseData + ld hl, OTPartyMon1Nickname + ld a, [CurPartyMon] + call SkipNames + ld de, EnemyMonNick + ld bc, $000b + call CopyBytes + ld hl, EnemyMonAtk + ld de, EnemyStats + ld bc, $000a + call CopyBytes + call $6c30 + ld hl, BaseType1 + ld de, EnemyMonType1 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ld hl, BaseHP + ld de, EnemyMonBaseStats + ld b, $5 +.asm_3db25 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_3db25 + ld a, [CurPartyMon] + ld [CurOTMon], a + ret +; 3db32 -Tileset12GFX: ; 0x218e1 -INCBIN "gfx/tilesets/12.lz" -; 0x22026 +INCBIN "baserom.gbc", $3db32, $3ddc2 - $3db32 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 + ld hl, RecoveredUsingText + jp FarBattleTextBox +; 0x3ddc8 -Tileset12Meta: ; 0x22031 -INCBIN "tilesets/12_metatiles.bin" -; 0x22431 +INCBIN "baserom.gbc", $3ddc8, $3e8eb - $3ddc8 -Tileset12Coll: ; 0x22431 -INCBIN "tilesets/12_collision.bin" -; 0x22531 +LoadEnemyMon: ; 3e8eb +; Initialize enemy monster parameters +; To do this we pull the species from TempEnemyMonSpecies -Tileset14GFX: ; 0x22531 -INCBIN "gfx/tilesets/14.lz" -; 0x22ae2 +; Notes: +; FarBattleRNG is used to ensure sync between Game Boys - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 +; Clear the whole EnemyMon struct + xor a + ld hl, EnemyMonSpecies + ld bc, EnemyMonEnd - EnemyMon + call ByteFill + +; We don't need to be here if we're in a link battle + ld a, [InLinkBattle] + and a + jp nz, $5abd + + ld a, [$cfc0] ; ???? + bit 0, a + jp nz, $5abd + +; Make sure everything knows what species we're working with + ld a, [TempEnemyMonSpecies] + ld [EnemyMonSpecies], a + ld [CurSpecies], a + ld [CurPartySpecies], a + +; Grab the BaseData for this species + call GetBaseData + -Tileset14Meta: ; 0x22af1 -INCBIN "tilesets/14_metatiles.bin" -; 0x22ef1 +; Let's get the item: -Tileset14Coll: ; 0x22ef1 -INCBIN "tilesets/14_collision.bin" -; 0x22ff1 +; Is the item predetermined? + ld a, [IsInBattle] + dec a + jr z, .WildItem + +; If we're in a trainer battle, the item is in the party struct + ld a, [CurPartyMon] + ld hl, OTPartyMon1Item + call GetPartyLocation ; bc = PartyMon[CurPartyMon] - PartyMons + ld a, [hl] + jr .UpdateItem + + +.WildItem +; In a wild battle, we pull from the item slots in BaseData -Tileset17GFX: ; 0x22ff1 -INCBIN "gfx/tilesets/17.lz" -; 0x23391 +; Force Item1 +; Used for Ho-Oh, Lugia and Snorlax encounters + ld a, [BattleType] + cp BATTLETYPE_FORCEITEM + ld a, [BaseItems] + jr z, .UpdateItem + +; Failing that, it's all up to chance +; Effective chances: +; 75% None +; 23% Item1 +; 2% Item2 -Tileset17Meta: ; 0x23391 -INCBIN "tilesets/17_metatiles.bin" -; 0x23791 +; 25% chance of getting an item + call FarBattleRNG + cp a, $c0 + ld a, NO_ITEM + jr c, .UpdateItem + +; From there, an 8% chance for Item2 + call FarBattleRNG + cp a, $14 ; 8% of 25% = 2% Item2 + ld a, [BaseItems] + jr nc, .UpdateItem + ld a, [BaseItems+1] + + +.UpdateItem + ld [EnemyMonItem], a + + +; Initialize DVs + +; If we're in a trainer battle, DVs are predetermined + ld a, [IsInBattle] + and a + jr z, .InitDVs + +; ???? + ld a, [EnemySubStatus5] + bit 3, a + jr z, .InitDVs + +; Unknown + ld hl, $c6f2 + ld de, EnemyMonDVs + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + jp .Happiness + + +.InitDVs + +; Trainer DVs + +; All trainers have preset DVs, determined by class +; See GetTrainerDVs for more on that + callba GetTrainerDVs +; These are the DVs we'll use if we're actually in a trainer battle + ld a, [IsInBattle] + dec a + jr nz, .UpdateDVs + + +; Wild DVs +; Here's where the fun starts -Tileset17Coll: ; 0x23791 -INCBIN "tilesets/17_collision.bin" -; 0x23891 +; Roaming monsters (Entei, Raikou) work differently +; They have their own structs, which are shorter than normal + ld a, [BattleType] + cp a, BATTLETYPE_ROAMING + jr nz, .NotRoaming + +; Grab HP + call GetRoamMonHP + ld a, [hl] +; Check if the HP has been initialized + and a +; We'll do something with the result in a minute + push af + +; Grab DVs + call GetRoamMonDVs + inc hl + ld a, [hld] + ld c, a + ld b, [hl] -; todo -Tileset31Meta: ; 0x23891 -INCBIN "tilesets/31_metatiles.bin", $0, $280 -; 0x23b11 +; Get back the result of our check + pop af +; If the RoamMon struct has already been initialized, we're done + jr nz, .UpdateDVs + +; If it hasn't, we need to initialize the DVs +; (HP is initialized at the end of the battle) + call GetRoamMonDVs + inc hl + call FarBattleRNG + ld [hld], a + ld c, a + call FarBattleRNG + ld [hl], a + ld b, a +; We're done with DVs + jr .UpdateDVs -EggMovePointers: ; 0x23b11 -INCLUDE "stats/egg_move_pointers.asm" + +.NotRoaming +; Register a contains BattleType + +; Forced shiny battle type +; Used by Red Gyarados at Lake of Rage + cp a, BATTLETYPE_SHINY + jr nz, .GenerateDVs + + ld b, ATKDEFDV_SHINY ; $ea + ld c, SPDSPCDV_SHINY ; $aa + jr .UpdateDVs + +.GenerateDVs +; Generate new random DVs + call FarBattleRNG + ld b, a + call FarBattleRNG + ld c, a + +.UpdateDVs +; Input DVs in register bc + ld hl, EnemyMonDVs + ld a, b + ld [hli], a + ld [hl], c + + +; We've still got more to do if we're dealing with a wild monster + ld a, [IsInBattle] + dec a + jr nz, .Happiness + + +; Species-specfic: + + +; Unown + ld a, [TempEnemyMonSpecies] + cp a, UNOWN + jr nz, .Magikarp + +; Get letter based on DVs + ld hl, EnemyMonDVs + ld a, PREDEF_GETUNOWNLETTER + call Predef +; Can't use any letters that haven't been unlocked +; If combined with forced shiny battletype, causes an infinite loop + call CheckUnownLetter + jr c, .GenerateDVs ; try again + + +.Magikarp +; Skimming this part recommended + + ld a, [TempEnemyMonSpecies] + cp a, MAGIKARP + jr nz, .Happiness + +; Get Magikarp's length + ld de, EnemyMonDVs + ld bc, PlayerID + callab CalcMagikarpLength + +; We're clear if the length is < 1536 + ld a, [MagikarpLength] + cp a, $06 ; $600 = 1536 + jr nz, .CheckMagikarpArea + +; 5% chance of skipping size checks + call RNG + cp a, $0c ; / $100 + jr c, .CheckMagikarpArea +; Try again if > 1614 + ld a, [MagikarpLength + 1] + cp a, $50 + jr nc, .GenerateDVs + +; 20% chance of skipping this check + call RNG + cp a, $32 ; / $100 + jr c, .CheckMagikarpArea +; Try again if > 1598 + ld a, [MagikarpLength + 1] + cp a, $40 + jr nc, .GenerateDVs + +.CheckMagikarpArea +; The z checks are supposed to be nz +; Instead, all maps in GROUP_LAKE_OF_RAGE (mahogany area) +; and routes 20 and 44 are treated as Lake of Rage + +; This also means Lake of Rage Magikarp can be smaller than ones +; caught elsewhere rather than the other way around + +; Intended behavior enforces a minimum size at Lake of Rage +; The real behavior prevents size flooring in the Lake of Rage area + ld a, [MapGroup] + cp a, GROUP_LAKE_OF_RAGE + jr z, .Happiness + ld a, [MapNumber] + cp a, MAP_LAKE_OF_RAGE + jr z, .Happiness +; 40% chance of not flooring + call RNG + cp a, $64 ; / $100 + jr c, .Happiness +; Floor at length 1024 + ld a, [MagikarpLength] + cp a, 1024 >> 8 + jr c, .GenerateDVs ; try again + + +; Finally done with DVs + +.Happiness +; Set happiness + ld a, BASE_HAPPINESS + ld [EnemyMonHappiness], a +; Set level + ld a, [CurPartyLevel] + ld [EnemyMonLevel], a +; Fill stats + ld de, EnemyMonMaxHP + ld b, $00 + ld hl, $d201 ; ? + ld a, PREDEF_FILLSTATS + call Predef + +; If we're in a trainer battle, +; get the rest of the parameters from the party struct + ld a, [IsInBattle] + cp a, TRAINER_BATTLE + jr z, .OpponentParty + +; If we're in a wild battle, check wild-specific stuff + and a + jr z, .TreeMon + +; ???? + ld a, [EnemySubStatus5] + bit 3, a + jp nz, .Moves + +.TreeMon +; If we're headbutting trees, some monsters enter battle asleep + call CheckSleepingTreeMon + ld a, 7 ; Asleep for 7 turns + jr c, .UpdateStatus +; Otherwise, no status + xor a + +.UpdateStatus + ld hl, EnemyMonStatus + ld [hli], a + +; Unused byte + xor a + ld [hli], a + +; Full HP... + ld a, [EnemyMonMaxHPHi] + ld [hli], a + ld a, [EnemyMonMaxHPLo] + ld [hl], a + +; ...unless it's a RoamMon + ld a, [BattleType] + cp a, BATTLETYPE_ROAMING + jr nz, .Moves + +; Grab HP + call GetRoamMonHP + ld a, [hl] +; Check if it's been initialized again + and a + jr z, .InitRoamHP +; Update from the struct if it has + ld a, [hl] + ld [EnemyMonHPLo], a + jr .Moves + +.InitRoamHP +; HP only uses the lo byte in the RoamMon struct since +; Raikou/Entei/Suicune will have < 256 hp at level 40 + ld a, [EnemyMonHPLo] + ld [hl], a + jr .Moves + + +.OpponentParty +; Get HP from the party struct + ld hl, (PartyMon1CurHP + 1) - PartyMon1 + OTPartyMon1 + ld a, [CurPartyMon] + call GetPartyLocation + ld a, [hld] + ld [EnemyMonHPLo], a + ld a, [hld] + ld [EnemyMonHPHi], a + +; Make sure everything knows which monster the opponent is using + ld a, [CurPartyMon] + ld [CurOTMon], a + +; Get status from the party struct + dec hl + ld a, [hl] ; OTPartyMonStatus + ld [EnemyMonStatus], a + + +.Moves +; ???? + ld hl, BaseType1 + ld de, EnemyMonType1 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + +; Get moves + ld de, EnemyMonMoves +; Are we in a trainer battle? + ld a, [IsInBattle] + cp a, TRAINER_BATTLE + jr nz, .WildMoves +; Then copy moves from the party struct + ld hl, OTPartyMon1Moves + ld a, [CurPartyMon] + call GetPartyLocation + ld bc, NUM_MOVES + call CopyBytes + jr .PP + +.WildMoves +; Clear EnemyMonMoves + xor a + ld h, d + ld l, e + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a +; Make sure the predef knows this isn't a partymon + ld [MagikarpLength], a +; Fill moves based on level + ld a, PREDEF_FILLMOVES + call Predef + +.PP +; Trainer battle? + ld a, [IsInBattle] + cp a, TRAINER_BATTLE + jr z, .TrainerPP + +; Fill wild PP + ld hl, EnemyMonMoves + ld de, EnemyMonPP + ld a, PREDEF_FILLPP + call Predef + jr .Finish + +.TrainerPP +; Copy PP from the party struct + ld hl, OTPartyMon1PP + ld a, [CurPartyMon] + call GetPartyLocation + ld de, EnemyMonPP + ld bc, NUM_MOVES + call CopyBytes + +.Finish +; Only the first five base stats are copied... + ld hl, BaseStats + ld de, EnemyMonBaseStats + ld b, BaseSpecialDefense - BaseStats +.loop + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .loop -INCLUDE "stats/egg_moves.asm" + ld a, [BaseCatchRate] + ld [de], a + inc de + ld a, [BaseExp] + ld [de], a -SECTION "bank9",DATA,BANK[$9] + ld a, [TempEnemyMonSpecies] + ld [$d265], a -INCBIN "baserom.gbc", $24000, $244c3 - $24000 + call GetPokemonName -Function244c3: ; 0x244c3 - ld a, [MenuSelection] - ld [CurSpecies], a - hlcoord 0, 12 - ld b, $4 - ld c, $12 - call TextBox - ld a, [MenuSelection] - cp $ff +; Did we catch it? + ld a, [IsInBattle] + and a ret z - ld de, $c5b9 - ld a, BANK(GetItemDescription) - ld hl, GetItemDescription - rst $8 - ret -; 0x244e3 -INCBIN "baserom.gbc", $244e3, $24ab4 - $244e3 +; Update enemy nick + ld hl, StringBuffer1 + ld de, EnemyMonNick + ld bc, PKMN_NAME_LENGTH + call CopyBytes -Function24ab4: ; 0x24ab4 - push de - ld a, [MenuSelection] - ld [$d265], a - call GetItemName - pop hl - call PlaceString - ret -; 0x24ac3 +; Caught this mon + ld a, [TempEnemyMonSpecies] + dec a + ld c, a + ld b, 1 ; set + ld hl, PokedexCaught + ld a, PREDEF_FLAG + call Predef -Function24ac3: ; 0x24ac3 - push de - ld a, [MenuSelection] - ld [CurItem], a - ld a, BANK(_CheckTossableItem) - ld hl, _CheckTossableItem - rst $8 - ld a, [$d142] - pop hl - and a - jr nz, .done - ld de, $0015 - add hl, de - ld [hl], $f1 - inc hl - ld de, $cf75 - ld bc, $0102 - call $3198 + ld hl, EnemyMonStats + ld de, EnemyStats + ld bc, EnemyMonStatsEnd - EnemyMonStats + call CopyBytes -.done ret -; 0x24ae8 - -INCBIN "baserom.gbc", $24ae8, $265d3 - $24ae8 +; 3eb38 -ProfOaksPC: ; 0x265d3 - ld hl, OakPCText1 - call $1d4f - call $1dcf - jr c, .shutdown - call ProfOaksPCBoot ; player chose "yes"? -.shutdown - ld hl, OakPCText4 - call PrintText - call $0a36 - call Function1c07 - ret -; 0x265ee -ProfOaksPCBoot ; 0x265ee - ld hl, OakPCText2 - call PrintText - call Rate - call StartSFX ; sfx loaded by previous Rate function call - call $0a36 - call WaitSFX - ret -; 0x26601 +CheckSleepingTreeMon: ; 3eb38 +; Return carry if species is in the list +; for the current time of day -Function26601: ; 0x26601 - call Rate - push de - ld de, MUSIC_NONE - call StartMusic - pop de - call StartSFX - call $0a36 - call WaitSFX +; Don't do anything if this isn't a tree encounter + ld a, [BattleType] + cp a, BATTLETYPE_TREE + jr nz, .NotSleeping + +; Get list for the time of day + ld hl, .Morn + ld a, [TimeOfDay] + cp a, DAY + jr c, .Check + ld hl, .Day + jr z, .Check + ld hl, .Nite + +.Check + ld a, [TempEnemyMonSpecies] + ld de, 1 ; length of species id + call IsInArray +; If it's a match, the opponent is asleep + ret c + +.NotSleeping + and a ret -; 0x26616 -Rate: ; 0x26616 -; calculate Seen/Owned - ld hl, PokedexCaught - ld b, EndPokedexCaught - PokedexCaught - call CountSetBits - ld [DefaultFlypoint], a - ld hl, PokedexSeen - ld b, EndPokedexSeen - PokedexSeen - call CountSetBits - ld [$d003], a +.Nite + db CATERPIE + db METAPOD + db BUTTERFREE + db WEEDLE + db KAKUNA + db BEEDRILL + db SPEAROW + db EKANS + db EXEGGCUTE + db LEDYBA + db AIPOM + db $ff ; end -; print appropriate rating - call ClearOakRatingBuffers - ld hl, OakPCText3 - call PrintText - call $0a36 - ld a, [$d003] - ld hl, OakRatings - call FindOakRating - push de - call PrintText - pop de - ret -; 0x26647 +.Day + db VENONAT + db HOOTHOOT + db NOCTOWL + db SPINARAK + db HERACROSS + db $ff ; end -ClearOakRatingBuffers: ; 0x26647 - ld hl, StringBuffer3 - ld de, DefaultFlypoint - call ClearOakRatingBuffer - ld hl, StringBuffer4 - ld de, $d003 - call ClearOakRatingBuffer - ret -; 0x2665a +.Morn + db VENONAT + db HOOTHOOT + db NOCTOWL + db SPINARAK + db HERACROSS + db $ff ; end +; 3eb75 -ClearOakRatingBuffer: ; 0x2665a - push hl - ld a, "@" - ld bc, $000d - call ByteFill - pop hl - ld bc, $4103 - call $3198 - ret -; 0x2666b -FindOakRating: ; 0x2666b -; return sound effect in de -; return text pointer in hl - nop +CheckUnownLetter: ; 3eb75 +; Return carry if the Unown letter hasn't been unlocked yet + + ld a, [UnlockedUnowns] ld c, a + ld de, 0 + .loop - ld a, [hli] - cp c - jr nc, .match - inc hl - inc hl - inc hl - inc hl - jr .loop - -.match - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a + +; Don't check this set unless it's been unlocked + srl c + jr nc, .next + +; Is our letter in the set? + ld hl, .LetterSets + add hl, de ld a, [hli] ld h, [hl] ld l, a + + push de + ld a, [UnownLetter] + ld de, 1 + push bc + call IsInArray + pop bc + pop de + + jr c, .match + +.next +; Make sure we haven't gone past the end of the table + inc e + inc e + ld a, e + cp a, .Set1 - .LetterSets + jr c, .loop + +; Hasn't been unlocked, or the letter is invalid + scf ret -; 0x2667f - -OakRatings: ; 0x2667f -; db count (if number caught ≤ this number, then this entry is used) -; dw sound effect -; dw text pointer - - db 9 - dw SFX_DEX_FANFARE_LESS_THAN_20 - dw OakRating01 - - db 19 - dw SFX_DEX_FANFARE_LESS_THAN_20 - dw OakRating02 - - db 34 - dw SFX_DEX_FANFARE_20_49 - dw OakRating03 - - db 49 - dw SFX_DEX_FANFARE_20_49 - dw OakRating04 - - db 64 - dw SFX_DEX_FANFARE_50_79 - dw OakRating05 - - db 79 - dw SFX_DEX_FANFARE_50_79 - dw OakRating06 - - db 94 - dw SFX_DEX_FANFARE_80_109 - dw OakRating07 - - db 109 - dw SFX_DEX_FANFARE_80_109 - dw OakRating08 - - db 124 - dw SFX_CAUGHT_MON - dw OakRating09 - - db 139 - dw SFX_CAUGHT_MON - dw OakRating10 + +.match +; Valid letter + and a + ret + +.LetterSets + dw .Set1 + dw .Set2 + dw .Set3 + dw .Set4 + +.Set1 + ; A B C D E F G H I J K + db 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, $ff +.Set2 + ; L M N O P Q R + db 12, 13, 14, 15, 16, 17, 18, $ff +.Set3 + ; S T U V W + db 19, 20, 21, 22, 23, $ff +.Set4 + ; X Y Z + db 24, 25, 26, $ff + +; 3ebc7 - db 154 - dw SFX_DEX_FANFARE_140_169 - dw OakRating11 - db 169 - dw SFX_DEX_FANFARE_140_169 - dw OakRating12 +INCBIN "baserom.gbc", $3ebc7, $3ec30 - $3ebc7 - db 184 - dw SFX_DEX_FANFARE_170_199 - dw OakRating13 - db 199 - dw SFX_DEX_FANFARE_170_199 - dw OakRating14 +Function3ec30: ; 3ec30 + xor a + ld [hBattleTurn], a + call $6c39 + jp $6c76 +; 3ec39 - db 214 - dw SFX_DEX_FANFARE_200_229 - dw OakRating15 +Function3ec39: ; 3ec39 + ld a, [hBattleTurn] + and a + jr z, .asm_3ec5a + ld a, [BattleMonStatus] + and $40 + ret z + ld hl, $c645 + ld a, [hld] + ld b, a + ld a, [hl] + srl a + rr b + srl a + rr b + ld [hli], a + or b + jr nz, .asm_3ec58 + ld b, $1 - db 229 - dw SFX_DEX_FANFARE_200_229 - dw OakRating16 +.asm_3ec58 + ld [hl], b + ret - db 239 - dw SFX_DEX_FANFARE_230_PLUS - dw OakRating17 +.asm_3ec5a + ld a, [EnemyMonStatus] + and $40 + ret z + ld hl, $d21f + ld a, [hld] + ld b, a + ld a, [hl] + srl a + rr b + srl a + rr b + ld [hli], a + or b + jr nz, .asm_3ec74 + ld b, $1 - db 248 - dw SFX_DEX_FANFARE_230_PLUS - dw OakRating18 +.asm_3ec74 + ld [hl], b + ret +; 3ec76 - db 255 - dw SFX_DEX_FANFARE_230_PLUS - dw OakRating19 +Function3ec76: ; 3ec76 + ld a, [hBattleTurn] + and a + jr z, .asm_3ec93 + ld a, [BattleMonStatus] + and $10 + ret z + ld hl, $c641 + ld a, [hld] + ld b, a + ld a, [hl] + srl a + rr b + ld [hli], a + or b + jr nz, .asm_3ec91 + ld b, $1 -OakPCText1: ; 0x266de - TX_FAR _OakPCText1 - db "@" +.asm_3ec91 + ld [hl], b + ret -OakPCText2: ; 0x266e3 - TX_FAR _OakPCText2 - db "@" +.asm_3ec93 + ld a, [EnemyMonStatus] + and $10 + ret z + ld hl, $d21b + ld a, [hld] + ld b, a + ld a, [hl] + srl a + rr b + ld [hli], a + or b + jr nz, .asm_3eca9 + ld b, $1 -OakPCText3: ; 0x266e8 - TX_FAR _OakPCText3 - db "@" +.asm_3eca9 + ld [hl], b + ret +; 3ecab -OakRating01: - TX_FAR _OakRating01 - db "@" +INCBIN "baserom.gbc", $3ecab, $3ed4a - $3ecab -OakRating02: - TX_FAR _OakRating02 - db "@" -OakRating03: - TX_FAR _OakRating03 - db "@" +BadgeStatBoosts: ; 3ed4a +; Raise BattleMon stats depending on which badges have been obtained. -OakRating04: - TX_FAR _OakRating04 - db "@" +; Every other badge boosts a stat, starting from the first. -OakRating05: - TX_FAR _OakRating05 - db "@" +; ZephyrBadge: Attack +; PlainBadge: Speed +; MineralBadge: Defense +; GlacierBadge: Special Attack +; RisingBadge: Special Defense -OakRating06: - TX_FAR _OakRating06 - db "@" +; The boosted stats are in order, except PlainBadge and MineralBadge's boosts are swapped. -OakRating07: - TX_FAR _OakRating07 - db "@" + ld a, [$cfc0] + and a + ret nz -OakRating08: - TX_FAR _OakRating08 - db "@" + ld a, [JohtoBadges] -OakRating09: - TX_FAR _OakRating09 - db "@" +; Swap badges 3 (PlainBadge) and 5 (MineralBadge). + ld d, a + and %00000100 + add a + add a + ld b, a + ld a, d + and %00010000 + rrca + rrca + ld c, a + ld a, d + and %11101011 + or b + or c + ld b, a -OakRating10: - TX_FAR _OakRating10 - db "@" + ld hl, BattleMonAtk + ld c, 4 +.CheckBadge + ld a, b + srl b + call c, BoostStat + inc hl + inc hl +; Check every other badge. + srl b + dec c + jr nz, .CheckBadge +; And the last one (RisingBadge) too. + srl a + call c, BoostStat + ret +; 3ed7c -OakRating11: - TX_FAR _OakRating11 - db "@" -OakRating12: - TX_FAR _OakRating12 - db "@" +BoostStat: ; 3ed7c +; Raise stat at hl by 1/8. -OakRating13: - TX_FAR _OakRating13 - db "@" + ld a, [hli] + ld d, a + ld e, [hl] + srl d + rr e + srl d + rr e + srl d + rr e + ld a, [hl] + add e + ld [hld], a + ld a, [hl] + adc d + ld [hli], a -OakRating14: - TX_FAR _OakRating14 - db "@" +; Cap at 999. + ld a, [hld] + sub 999 % $100 + ld a, [hl] + sbc 999 / $100 + ret c + ld a, 999 / $100 + ld [hli], a + ld a, 999 % $100 + ld [hld], a + ret +; 3ed9f -OakRating15: - TX_FAR _OakRating15 - db "@" -OakRating16: - TX_FAR _OakRating16 - db "@" +INCBIN "baserom.gbc", $3ed9f, $3edd8 - $3ed9f -OakRating17: - TX_FAR _OakRating17 - db "@" -OakRating18: - TX_FAR _OakRating18 - db "@" +BattleRNG: ; 3edd8 +; If the normal RNG is used in a link battle it'll desync. +; To circumvent this a shared PRNG is used instead. -OakRating19: - TX_FAR _OakRating19 - db "@" +; But if we're in a non-link battle we're safe to use it + ld a, [InLinkBattle] + and a + jp z, RNG -OakPCText4: ; 0x2674c - TX_FAR _OakPCText4 - db "@" +; The PRNG operates in streams of 8 values +; The reasons for this are unknown -INCBIN "baserom.gbc", $26751, $2675c - $26751 +; Which value are we trying to pull? + push hl + push bc + ld a, [LinkBattleRNCount] + ld c, a + ld b, $0 + ld hl, LinkBattleRNs + add hl, bc + inc a + ld [LinkBattleRNCount], a -_KrisDecorationMenu: ; 0x2675c - ld a, [$cf76] +; If we haven't hit the end yet, we're good + cp 9 ; Exclude last value. See the closing comment + ld a, [hl] + pop bc + pop hl + ret c + + +; If we have, we have to generate new pseudorandom data +; Instead of having multiple PRNGs, ten seeds are used + push hl + push bc push af - ld hl, $679a - call Function1d35 + +; Reset count to 0 xor a - ld [$d1ee], a - ld a, $1 - ld [$d1ef], a -.asm_2676f - ld a, [$d1ef] - ld [$cf88], a - call $6806 - call $1e5d - ld a, [$cfa9] - ld [$d1ef], a - jr c, .asm_2678e - ld a, [MenuSelection] - ld hl, $67aa - call $1fa7 - jr nc, .asm_2676f + ld [LinkBattleRNCount], a + ld hl, LinkBattleRNs + ld b, 10 ; number of seeds + +; Generate next number in the sequence for each seed +; The algorithm takes the form *5 + 1 % 256 +.loop + ; get last # + ld a, [hl] + + ; a * 5 + 1 + ld c, a + add a + add a + add c + inc a + + ; update # + ld [hli], a + dec b + jr nz, .loop -.asm_2678e - call Function1c07 +; This has the side effect of pulling the last value first, +; then wrapping around. As a result, when we check to see if +; we've reached the end, we have to take this into account. pop af - ld [$cf76], a - ld a, [$d1ee] - ld c, a + pop bc + pop hl ret -; 0x2679a +; 3ee0f -INCBIN "baserom.gbc", $2679a, $270c4 - $2679a +INCBIN "baserom.gbc", $3ee0f, $3fa01 - $3ee0f -GetTrainerDVs: ; 270c4 -; get dvs based on trainer class -; output: bc - push hl -; dec trainer class so there's no filler entry for $00 - ld a, [OtherTrainerClass] - dec a - ld c, a - ld b, $0 -; seek table - ld hl, TrainerClassDVs - add hl, bc - add hl, bc -; get dvs - ld a, [hli] +GetRoamMonHP: ; 3fa01 +; output: hl = RoamMonCurHP + ld a, [TempEnemyMonSpecies] ld b, a - ld c, [hl] -; we're done - pop hl + ld a, [RoamMon1Species] + cp b + ld hl, RoamMon1CurHP + ret z + ld a, [RoamMon2Species] + cp b + ld hl, RoamMon2CurHP + ret z +; remnant of the GS function +; we know this will be $00 because it's never initialized + ld hl, RoamMon3CurHP ret -; 270d6 - -TrainerClassDVs ; 270d6 -; AtkDef, SpdSpc - db $9A, $77 ; falkner - db $88, $88 ; bugsy - db $98, $88 ; whitney - db $98, $88 ; morty - db $98, $88 ; pryce - db $98, $88 ; jasmine - db $98, $88 ; chuck - db $7C, $DD ; clair - db $DD, $DD ; rival1 - db $98, $88 ; pokemon prof - db $DC, $DD ; will - db $DC, $DD ; cal - db $DC, $DD ; bruno - db $7F, $DF ; karen - db $DC, $DD ; koga - db $DC, $DD ; champion - db $98, $88 ; brock - db $78, $88 ; misty - db $98, $88 ; lt surge - db $98, $88 ; scientist - db $78, $88 ; erika - db $98, $88 ; youngster - db $98, $88 ; schoolboy - db $98, $88 ; bird keeper - db $58, $88 ; lass - db $98, $88 ; janine - db $D8, $C8 ; cooltrainerm - db $7C, $C8 ; cooltrainerf - db $69, $C8 ; beauty - db $98, $88 ; pokemaniac - db $D8, $A8 ; gruntm - db $98, $88 ; gentleman - db $98, $88 ; skier - db $68, $88 ; teacher - db $7D, $87 ; sabrina - db $98, $88 ; bug catcher - db $98, $88 ; fisher - db $98, $88 ; swimmerm - db $78, $88 ; swimmerf - db $98, $88 ; sailor - db $98, $88 ; super nerd - db $98, $88 ; rival2 - db $98, $88 ; guitarist - db $A8, $88 ; hiker - db $98, $88 ; biker - db $98, $88 ; blaine - db $98, $88 ; burglar - db $98, $88 ; firebreather - db $98, $88 ; juggler - db $98, $88 ; blackbelt - db $D8, $A8 ; executivem - db $98, $88 ; psychic - db $6A, $A8 ; picnicker - db $98, $88 ; camper - db $7E, $A8 ; executivef - db $98, $88 ; sage - db $78, $88 ; medium - db $98, $88 ; boarder - db $98, $88 ; pokefanm - db $68, $8A ; kimono girl - db $68, $A8 ; twins - db $6D, $88 ; pokefanf - db $FD, $DE ; red - db $9D, $DD ; blue - db $98, $88 ; officer - db $7E, $A8 ; gruntf - db $98, $88 ; mysticalman -; 2715c - -INCBIN "baserom.gbc", $2715c, $271f4 - $2715c - -MoveEffectsPointers: ; 271f4 -INCLUDE "battle/moves/move_effects_pointers.asm" - -MoveEffects: ; 2732e -INCLUDE "battle/moves/move_effects.asm" - -INCBIN "baserom.gbc", $27a28, $27a2d - $27a28 - - -SECTION "bankA",DATA,BANK[$A] - -INCBIN "baserom.gbc", $28000, $2a2a0 - $28000 - -SpecialRoamMons: ; 2a2a0 -; initialize RoamMon structs -; include commented-out parts from the gs function - -; species - ld a, RAIKOU - ld [RoamMon1Species], a - ld a, ENTEI - ld [RoamMon2Species], a -; ld a, SUICUNE -; ld [RoamMon3Species], a - -; level - ld a, 40 - ld [RoamMon1Level], a - ld [RoamMon2Level], a -; ld [RoamMon3Level], a - -; raikou starting map - ld a, GROUP_ROUTE_42 - ld [RoamMon1MapGroup], a - ld a, MAP_ROUTE_42 - ld [RoamMon1MapNumber], a - -; entei starting map - ld a, GROUP_ROUTE_37 - ld [RoamMon2MapGroup], a - ld a, MAP_ROUTE_37 - ld [RoamMon2MapNumber], a - -; suicune starting map -; ld a, GROUP_ROUTE_38 -; ld [RoamMon3MapGroup], a -; ld a, MAP_ROUTE_38 -; ld [RoamMon3MapNumber], a - -; hp - xor a ; generate new stats - ld [RoamMon1CurHP], a - ld [RoamMon2CurHP], a -; ld [RoamMon3CurHP], a +; 3fa19 +GetRoamMonDVs: ; 3fa19 +; output: hl = RoamMonDVs + ld a, [TempEnemyMonSpecies] + ld b, a + ld a, [RoamMon1Species] + cp b + ld hl, RoamMon1DVs + ret z + ld a, [RoamMon2Species] + cp b + ld hl, RoamMon2DVs + ret z +; remnant of the GS function +; we know this will be $0000 because it's never initialized + ld hl, RoamMon3DVs ret -; 2a2ce - -INCBIN "baserom.gbc", $2a2ce, $2a5e9 - $2a2ce - - -WildMons1: ; 0x2a5e9 -INCLUDE "stats/wild/johto_grass.asm" - -WildMons2: ; 0x2b11d -INCLUDE "stats/wild/johto_water.asm" - -WildMons3: ; 0x2b274 -INCLUDE "stats/wild/kanto_grass.asm" - -WildMons4: ; 0x2b7f7 -INCLUDE "stats/wild/kanto_water.asm" +; 3fa31 -WildMons5: ; 0x2b8d0 -INCLUDE "stats/wild/swarm_grass.asm" -WildMons6: ; 0x2b92f -INCLUDE "stats/wild/swarm_water.asm" +INCBIN "baserom.gbc", $3fa31, $3fbff - $3fa31 -INCBIN "baserom.gbc", $2b930, $2ba1a - $2b930 +GetPlayerBackpic: ; 3fbff +; Load the player character's backpic (6x6) into VRAM starting from $9310. -ChrisBackpic: ; 2ba1a -INCBIN "gfx/misc/player.lz" -; 2bba1 +; Special exception for Dude. + ld b, BANK(DudeBackpic) + ld hl, DudeBackpic + ld a, [BattleType] + cp BATTLETYPE_TUTORIAL + jr z, .Decompress -db 0, 0, 0, 0, 0, 0, 0, 0, 0 ; filler +; What gender are we? + ld a, [$d45b] + bit 2, a + jr nz, .Chris + ld a, [PlayerGender] + bit 0, a + jr z, .Chris -DudeBackpic: ; 2bbaa -INCBIN "gfx/misc/dude.lz" -; 2bce1 +; It's a girl. + callba GetKrisBackpic + ret +.Chris +; It's a boy. + ld b, BANK(ChrisBackpic) + ld hl, ChrisBackpic -SECTION "bankB",DATA,BANK[$B] +.Decompress + ld de, $9310 + ld c, $31 + ld a, PREDEF_DECOMPRESS + call Predef + ret +; 3fc30 -INCBIN "baserom.gbc", $2C000, $2c1ef - $2C000 -TrainerClassNames: ; 2c1ef - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "RIVAL@" - db "#MON PROF.@" - db "ELITE FOUR@" - db $4a, " TRAINER@" - db "ELITE FOUR@" - db "ELITE FOUR@" - db "ELITE FOUR@" - db "CHAMPION@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "SCIENTIST@" - db "LEADER@" - db "YOUNGSTER@" - db "SCHOOLBOY@" - db "BIRD KEEPER@" - db "LASS@" - db "LEADER@" - db "COOLTRAINER@" - db "COOLTRAINER@" - db "BEAUTY@" - db "#MANIAC@" - db "ROCKET@" - db "GENTLEMAN@" - db "SKIER@" - db "TEACHER@" - db "LEADER@" - db "BUG CATCHER@" - db "FISHER@" - db "SWIMMER♂@" - db "SWIMMER♀@" - db "SAILOR@" - db "SUPER NERD@" - db "RIVAL@" - db "GUITARIST@" - db "HIKER@" - db "BIKER@" - db "LEADER@" - db "BURGLAR@" - db "FIREBREATHER@" - db "JUGGLER@" - db "BLACKBELT@" - db "ROCKET@" - db "PSYCHIC@" - db "PICNICKER@" - db "CAMPER@" - db "ROCKET@" - db "SAGE@" - db "MEDIUM@" - db "BOARDER@" - db "#FAN@" - db "KIMONO GIRL@" - db "TWINS@" - db "#FAN@" - db $4a, " TRAINER@" - db "LEADER@" - db "OFFICER@" - db "ROCKET@" - db "MYSTICALMAN@" +INCBIN "baserom.gbc", $3fc30, $3fc8b - $3fc30 -INCBIN "baserom.gbc", $2c41a, $2ee6c - $2c41a +BattleStartMessage ; 3fc8b + ld a, [IsInBattle] + dec a + jr z, .asm_3fcaa + ld de, SFX_SHINE + call StartSFX + call WaitSFX -PlayBattleMusic: ; 2ee6c + ld c, 20 + call DelayFrames - push hl - push de - push bc + ld a, $e + ld hl, $5939 + rst FarCall - xor a - ld [MusicFade], a - ld de, MUSIC_NONE - call StartMusic - call DelayFrame - call MaxVolume + ld hl, WantsToBattleText + jr .asm_3fd0e - ld a, [BattleType] - cp BATTLETYPE_SUICUNE - ld de, MUSIC_SUICUNE_BATTLE - jp z, .done - cp BATTLETYPE_ROAMING - jp z, .done +.asm_3fcaa + call $5a79 + jr nc, .asm_3fcc2 - ; Are we fighting a trainer? - ld a, [OtherTrainerClass] - and a - jr nz, .trainermusic + xor a + ld [$cfca], a + ld a, 1 + ld [hBattleTurn], a + ld a, 1 + ld [$c689], a + ld de, $0101 + call $6e17 - ld a, BANK(RegionCheck) - ld hl, RegionCheck +.asm_3fcc2 + ld a, $f + ld hl, CheckSleepingTreeMon rst FarCall - ld a, e - and a - jr nz, .kantowild + jr c, .asm_3fceb - ld de, MUSIC_JOHTO_WILD_BATTLE - ld a, [TimeOfDay] - cp NITE - jr nz, .done - ld de, MUSIC_JOHTO_WILD_BATTLE_NIGHT - jr .done + ld a, $13 + ld hl, $6a44 + rst FarCall + jr c, .asm_3fce0 -.kantowild - ld de, MUSIC_KANTO_WILD_BATTLE - jr .done + hlcoord 12, 0 + ld d, $0 + ld e, $1 + ld a, $47 + call Predef + jr .asm_3fceb -.trainermusic - ld de, MUSIC_CHAMPION_BATTLE - cp CHAMPION - jr z, .done - cp RED - jr z, .done +.asm_3fce0 + ld a, $0f + ld [CryTracks], a + ld a, [TempEnemyMonSpecies] + call $37b6 - ; really, they should have included admins and scientists here too... - ld de, MUSIC_ROCKET_BATTLE - cp GRUNTM - jr z, .done - cp GRUNTF - jr z, .done +.asm_3fceb + ld a, [BattleType] + cp BATTLETYPE_FISH + jr nz, .asm_3fcfd - ld de, MUSIC_KANTO_GYM_LEADER_BATTLE - ld a, BANK(IsKantoGymLeader) - ld hl, IsKantoGymLeader + ld a, $41 + ld hl, $6086 rst FarCall - jr c, .done - ld de, MUSIC_JOHTO_GYM_LEADER_BATTLE - ld a, BANK(IsJohtoGymLeader) - ld hl, IsJohtoGymLeader + ld hl, HookedPokemonAttackedText + jr .asm_3fd0e + +.asm_3fcfd + ld hl, PokemonFellFromTreeText + cp BATTLETYPE_TREE + jr z, .asm_3fd0e + ld hl, WildPokemonAppearedText2 + cp $b + jr z, .asm_3fd0e + ld hl, WildPokemonAppearedText + +.asm_3fd0e + push hl + ld a, $b + ld hl, $4000 rst FarCall - jr c, .done - ld de, MUSIC_RIVAL_BATTLE - ld a, [OtherTrainerClass] - cp RIVAL1 - jr z, .done - cp RIVAL2 - jr nz, .othertrainer + pop hl + call FarBattleTextBox - ld a, [OtherTrainerID] - cp 4 ; Rival in Indigo Plateau - jr c, .done - ld de, MUSIC_CHAMPION_BATTLE - jr .done + call $7830 -.othertrainer - ld a, [InLinkBattle] - and a - jr nz, .johtotrainer + ret nz - ld a, BANK(RegionCheck) - ld hl, RegionCheck + ld c, $2 + ld a, $13 + ld hl, $6a0a rst FarCall - ld a, e - and a - jr nz, .kantotrainer -.johtotrainer - ld de, MUSIC_JOHTO_TRAINER_BATTLE - jr .done + ret +; 3fd26 -.kantotrainer - ld de, MUSIC_KANTO_TRAINER_BATTLE -.done - call StartMusic + dw $0000 ; padding - pop bc - pop de - pop hl - ret -; 2ef18 +BattleCommandPointers: ; 3fd28 -ClearBattleRAM: ; 2ef18 - xor a - ld [$d0ec], a - ld [$d0ee], a +INCLUDE "battle/effect_command_pointers.asm" - ld hl, $d0d8 - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld [$d0e4], a - ld [CriticalHit], a - ld [BattleMonSpecies], a - ld [$c664], a - ld [CurBattleMon], a - ld [$d232], a - ld [TimeOfDayPal], a - ld [PlayerTurnsTaken], a - ld [EnemyTurnsTaken], a - ld [EvolvableFlags], a - ld hl, PlayerHPPal - ld [hli], a - ld [hl], a +SECTION "bank10",DATA,BANK[$10] - ld hl, BattleMonDVs - ld [hli], a - ld [hl], a +Function40000: ; 40000 + ld a, [$ffd1] + ld l, a + ld a, [$ffd2] + ld h, a + push hl + ld a, [$ffcf] + push af + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + ld a, [VramState] + push af + xor a + ld [VramState], a + ld a, [$ffaa] + push af + ld a, $1 + ld [$ffaa], a + xor a + ld [$ffde], a + call $4063 + call DelayFrame +.asm_40029 + call Functiona57 + ld a, [$cf63] + bit 7, a + jr nz, .asm_4003b + call $410b + call DelayFrame + jr .asm_40029 - ld hl, EnemyMonDVs - ld [hli], a - ld [hl], a +.asm_4003b + ld de, $0008 + call StartSFX + call WaitSFX + call ClearSprites + ld a, [$c7d4] + ld [$d959], a + pop af + ld [$ffaa], a + pop af + ld [VramState], a + pop af + ld [Options], a + pop af + ld [$ffcf], a + pop hl + ld a, l + ld [$ffd1], a + ld a, h + ld [$ffd2], a + ret +; 40063 -; Clear the entire BattleMons area - ld hl, EnemyMoveStruct - ld bc, $0139 +Function40063: ; 40063 + call WhiteBGMap + call ClearSprites + call ClearTileMap + call $54b7 + ld hl, PlayerSDefLevel + ld bc, $0115 xor a call ByteFill - - ld hl, $5867 - ld a, $f + xor a + ld [$cf63], a + ld [$cf64], a + ld [$cf65], a + ld [$cf66], a + call $40a2 + ld a, [$d959] + ld [$c7d4], a + call $4bdc + call $40b4 + call $40ed + ld a, $77 + ld hl, $6247 rst FarCall + call $5af7 + ret +; 400a2 - call Function1fbf - - ld hl, hBGMapAddress +Function400a2: ; 400a2 + ld a, [StatusFlags] + bit 1, a + jr nz, .asm_400ae xor a - ld [hli], a - ld [hl], $98 + ld [$c7dc], a ret -; 2ef6e +.asm_400ae + ld a, $1 + ld [$c7dc], a + ret +; 400b4 -FillBox: ; 2ef6e -; Fill $c2c6-aligned box width b height c -; with iterating tile starting from $ffad at hl. -; Predef $13 - - ld de, 20 - - ld a, [$c2c6] +Function400b4: ; 400b4 + ld hl, PlayerSDefLevel + ld a, [$c2d6] and a - jr nz, .left - - ld a, [$ffad] -.x1 - push bc - push hl - -.y1 - ld [hl], a - add hl, de + jr z, .asm_400ec + cp $fc + jr nc, .asm_400ec + ld b, a + ld a, [$c7d2] + cp $8 + jr c, .asm_400db + sub $7 + ld c, a +.asm_400cc + ld a, b + cp [hl] + jr z, .asm_400ec + inc hl + ld a, [$c7d0] inc a + ld [$c7d0], a dec c - jr nz, .y1 + jr nz, .asm_400cc - pop hl +.asm_400db + ld c, $7 +.asm_400dd + ld a, b + cp [hl] + jr z, .asm_400ec inc hl - pop bc - dec b - jr nz, .x1 - ret - -.left -; Right-aligned. - push bc - ld b, 0 + ld a, [$c7d1] + inc a + ld [$c7d1], a dec c - add hl, bc - pop bc + jr nz, .asm_400dd - ld a, [$ffad] -.x2 - push bc - push hl +.asm_400ec + ret +; 400ed -.y2 - ld [hl], a - add hl, de - inc a - dec c - jr nz, .y2 +Function400ed: ; 400ed + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + cp $0 + jr nz, .asm_40107 + ld a, [BackupMapGroup] + ld b, a + ld a, [BackupMapNumber] + ld c, a + call GetWorldMapLocation - pop hl - dec hl - pop bc - dec b - jr nz, .x2 +.asm_40107 + ld [$c7e4], a ret -; 2ef9f +; 4010b +Function4010b: ; 4010b + ld a, [$cf63] + ld hl, $4115 + call $5432 + jp [hl] +; 40115 +INCBIN "baserom.gbc", $40115, $40ad5 - $40115 -SECTION "bankC",DATA,BANK[$C] -Tileset15GFX: ; 0x30000 -INCBIN "gfx/tilesets/15.lz" -; 0x304d7 +Function40ad5: ; 40ad5 + push hl + ld a, $33 + ld [hli], a + ld d, $34 + call $4b06 + ld a, $35 + ld [hl], a + pop hl + ld de, $0014 + add hl, de +.asm_40ae6 + push hl + ld a, $36 + ld [hli], a + ld d, $7f + call $4b06 + ld a, $37 + ld [hl], a + pop hl + ld de, $0014 + add hl, de + dec b + jr nz, .asm_40ae6 + ld a, $38 + ld [hli], a + ld d, $39 + call $4b06 + ld a, $3a + ld [hl], a + ret +; 40b06 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 +Function40b06: ; 40b06 + ld e, c +.asm_40b07 + ld a, e + and a + ret z + ld a, d + ld [hli], a + dec e + jr .asm_40b07 +; 40b0f -Tileset15Meta: ; 0x304e0 -INCBIN "tilesets/15_metatiles.bin" -; 0x308e0 +INCBIN "baserom.gbc", $40b0f, $40bb1 - $40b0f -Tileset15Coll: ; 0x308e0 -INCBIN "tilesets/15_collision.bin" -; 0x309e0 -Tileset25GFX: ; 0x309e0 -INCBIN "gfx/tilesets/25.lz" -; 0x30e78 +Function40bb1: ; 40bb1 + ld a, [$c7d1] + ld hl, $c7d0 + add [hl] + ld e, a + ld d, $0 + ld hl, PlayerSDefLevel + add hl, de + ld a, [hl] + ld [$d265], a + ret +; 40bc4 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 +INCBIN "baserom.gbc", $40bc4, $40bd0 - $40bc4 -Tileset25Meta: ; 0x30e80 -INCBIN "tilesets/25_metatiles.bin" -; 0x31280 -Tileset25Coll: ; 0x31280 -INCBIN "tilesets/25_collision.bin" -; 0x31380 +Function40bd0: ; 40bd0 + push de + push hl + ld a, [$d265] + dec a + call CheckCaughtMon + pop hl + pop de + ret +; 40bdc -Tileset27GFX: ; 0x31380 -INCBIN "gfx/tilesets/27.lz" -; 0x318dc - db $00 - db $00 - db $00 - db $00 -Tileset27Meta: ; 0x318e0 -INCBIN "tilesets/27_metatiles.bin" -; 0x31ce0 +Function40bdc: ; 40bdc + ld hl, PlayerSDefLevel + ld bc, Start + xor a + call ByteFill + ld a, [$c7d4] + ld hl, $4bf0 + call $5432 + jp [hl] +; 40bf0 -Tileset27Coll: ; 0x31ce0 -INCBIN "tilesets/27_collision.bin" -; 0x31de0 +INCBIN "baserom.gbc", $40bf0, $40c65 - $40bf0 -Tileset28GFX: ; 0x31de0 -INCBIN "gfx/tilesets/28.lz" -; 0x321a6 +AlphabeticalPokedexOrder: ; 0x40c65 +INCLUDE "stats/pokedex/order_alpha.asm" - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 - db $00 +NewPokedexOrder: ; 0x40d60 +INCLUDE "stats/pokedex/order_new.asm" -Tileset28Meta: ; 0x321b0 -INCBIN "tilesets/28_metatiles.bin" -; 0x325b0 +Function40e5b: ; 40e5b + xor a + ld [hBGMapMode], a + ld hl, $c590 + ld bc, $0412 + call $4ad5 + ld a, [$c7d8] + ld hl, $4e7d + call $5432 + ld e, l + ld d, h + ld hl, $c5b9 + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ret +; 40e7d -Tileset28Coll: ; 0x325b0 -INCBIN "tilesets/28_collision.bin" -; 0x326b0 +INCBIN "baserom.gbc", $40e7d, $41432 - $40e7d -Tileset30GFX: ; 0x326b0 -INCBIN "gfx/tilesets/30.lz" -; 0x329ed -INCBIN "baserom.gbc", $329ed, $333f0 - $329ed +Function41432: ; 41432 + ld e, a + ld d, $0 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret +; 4143b +Function4143b: ; 4143b + call $4bb1 + call $4bd0 + jr z, .asm_4145b + ld a, [$def4] + ld [UnownLetter], a + ld a, [$d265] + ld [CurPartySpecies], a + call GetBaseData + ld de, VTiles2 + ld a, $3c + call Predef + ret -SECTION "bankD",DATA,BANK[$D] +.asm_4145b + ld a, $0 + call GetSRAMBank + ld a, $77 + ld hl, $60d7 + rst FarCall + ld hl, VTiles2 + ld de, $a000 + ld c, $31 + ld a, [hROMBank] + ld b, a + call Functionf82 + call CloseSRAM + ret +; 41478 -INCLUDE "battle/effect_commands.asm" +INCBIN "baserom.gbc", $41478, $414b7 - $41478 -SECTION "bankE",DATA,BANK[$E] +Function414b7: ; 414b7 + call DisableLCD + ld hl, VTiles2 + ld bc, $0310 + xor a + call ByteFill + call $54fb + call Functione5f + ld hl, $9600 + ld bc, $0200 + call $5504 + call $5a24 + jr nz, .asm_414e0 + ld a, $77 + ld hl, $5f1c + rst FarCall + jr .asm_414e9 -INCBIN "baserom.gbc", $38000, $38591 - $38000 +.asm_414e0 + ld hl, $550e + ld de, $9310 + call Decompress +.asm_414e9 + ld hl, $56b0 + ld de, VTiles0 + call Decompress + ld a, $6 + call $3cb4 + call EnableLCD + ret +; 414fb -AIScoring: ; 38591 -INCLUDE "battle/ai/scoring.asm" +Function414fb: ; 414fb + call $0e51 + ld hl, VTiles1 + ld bc, $0800 +.asm_41504 + ld a, [hl] + xor $ff + ld [hli], a + dec bc + ld a, b + or c + jr nz, .asm_41504 + ret +; 4150e +INCBIN "baserom.gbc", $4150e, $41a24 - $4150e -INCBIN "baserom.gbc", $3952d, $39939 - $3952d +Function41a24: ; 41a24 + ld a, [hCGB] + or a + ret nz + ld a, [hSGB] + dec a + ret +; 41a2c -Function39939: ; 39939 - ld a, [$cfc0] - bit 0, a - ld hl, $d26b - jp nz, $5984 - ld a, [OtherTrainerID] - ld b, a - ld a, [OtherTrainerClass] - ld c, a - ld a, c - cp $c - jr nz, .asm_3996d +Function41a2c: ; 41a2c ld a, $0 call GetSRAMBank - ld a, [$abfd] - and a + ld hl, $4000 + ld de, $a188 + ld bc, Function270 + ld a, $77 + call FarCopyBytes + ld hl, $a188 + ld bc, $01b0 + call $5504 + ld de, $a188 + ld hl, $9400 + ld bc, $101b + call Functioneba call CloseSRAM - jr z, .asm_3996d - ld a, $0 - call GetSRAMBank - ld hl, $abfe - call $5984 - jp CloseSRAM + ret +; 41a58 -.asm_3996d - dec c +INCBIN "baserom.gbc", $41a58, $41af7 - $41a58 + + +Function41af7: ; 41af7 + xor a + ld [hBGMapMode], a + ret +; 41afb + + +Moves: ; 0x41afb +INCLUDE "battle/moves/moves.asm" + +Function421d8: ; 421d8 + ld hl, EvolvableFlags + xor a + ld [hl], a + ld a, [CurPartyMon] + ld c, a + ld b, $1 + call $6577 + xor a + ld [$d268], a + dec a + ld [CurPartyMon], a + push hl push bc + push de + ld hl, PartyCount + push hl +.asm_421f5 + ld hl, CurPartyMon + inc [hl] + pop hl + inc hl + ld a, [hl] + cp $ff + jp z, $63ff + ld [MagikarpLength], a + push hl + ld a, [CurPartyMon] + ld c, a + ld hl, EvolvableFlags + ld b, $2 + call $6577 + ld a, c + and a + jp z, $61f5 + ld a, [MagikarpLength] + dec a ld b, $0 - ld hl, TrainerGroups + ld c, a + ld hl, EvosAttacksPointers add hl, bc add hl, bc ld a, [hli] ld h, [hl] ld l, a - pop bc -.asm_3997a - dec b - jr z, .asm_39984 -.asm_3997d + push hl + xor a + ld [MonType], a + ld a, $1f + call Predef + pop hl ld a, [hli] - cp $ff - jr nz, .asm_3997d - jr .asm_3997a + and a + jr z, .asm_421f5 + ld b, a + cp $3 + jr z, .asm_422ae + ld a, [InLinkBattle] + and a + jp nz, $63f9 + ld a, b + cp $2 + jp z, $62d5 + ld a, [$d1e9] + and a + jp nz, $63f9 + ld a, b + cp $1 + jp z, $62ee + cp $4 + jr z, .asm_42283 + ld a, [TempMonLevel] + cp [hl] + jp c, $63f8 + call $6461 + jp z, $63f8 + push hl + ld de, TempMonAtk + ld hl, TempMonDef + ld c, $2 + call StringCmp + ld a, $3 + jr z, .asm_4227a + ld a, $2 + jr c, .asm_4227a + ld a, $1 -.asm_39984 - ld de, StringBuffer1 - push de - ld bc, $000b - call CopyBytes - pop de - ret -; 39990 +.asm_4227a + pop hl + inc hl + cp [hl] + jp nz, $63f9 + inc hl + jr .asm_422fd -INCBIN "baserom.gbc", $39990, $39999 - $39990 +.asm_42283 + ld a, [TempMonHappiness] + cp $dc + jp c, $63f9 + call $6461 + jp z, $63f9 + ld a, [hli] + cp $1 + jr z, .asm_422fd + cp $2 + jr z, .asm_422a4 + ld a, [TimeOfDay] + cp $2 + jp nz, $63fa + jr .asm_422fd +.asm_422a4 + ld a, [TimeOfDay] + cp $2 + jp z, $63fa + jr .asm_422fd -TrainerGroups: ; 0x39999 -INCLUDE "trainers/trainer_pointers.asm" +.asm_422ae + ld a, [InLinkBattle] + and a + jp z, $63f9 + call $6461 + jp z, $63f9 + ld a, [hli] + ld b, a + inc a + jr z, .asm_422fd + ld a, [InLinkBattle] + cp $1 + jp z, $63fa + ld a, [TempMonItem] + cp b + jp nz, $63fa + xor a + ld [TempMonItem], a + jr .asm_422fd -INCLUDE "trainers/trainers.asm" + ld a, [hli] + ld b, a + ld a, [CurItem] + cp b + jp nz, $63fa + ld a, [$d1e9] + and a + jp z, $63fa + ld a, [InLinkBattle] + and a + jp nz, $63fa + jr .asm_422fd + + ld a, [hli] + ld b, a + ld a, [TempMonLevel] + cp b + jp c, $63fa + call $6461 + jp z, $63fa + +.asm_422fd + ld a, [TempMonLevel] + ld [CurPartyLevel], a + ld a, $1 + ld [$d268], a + push hl + ld a, [hl] + ld [Buffer2], a + ld a, [CurPartyMon] + ld hl, PartyMon1Nickname + call GetNick + call CopyName1 + ld hl, $6482 + call PrintText + ld c, $32 + call DelayFrames + xor a + ld [hBGMapMode], a + ld hl, TileMap + ld bc, $0c14 + call ClearBox + ld a, $1 + ld [hBGMapMode], a + call ClearSprites + ld a, $13 + ld hl, $65e1 + rst FarCall + push af + call ClearSprites + pop af + jp c, $6454 + ld hl, $6473 + call PrintText + pop hl + ld a, [hl] + ld [CurSpecies], a + ld [TempMonSpecies], a + ld [Buffer2], a + ld [$d265], a + call GetPokemonName + push hl + ld hl, $6478 + call PrintTextBoxText + ld a, $41 + ld hl, $6094 + rst FarCall + ld de, $0000 + call StartMusic + ld de, $0002 + call StartSFX + call WaitSFX + ld c, $28 + call DelayFrames + call ClearTileMap + call $6414 + call GetBaseData + ld hl, $d118 + ld de, TempMonMaxHP + ld b, $1 + ld a, $c + call Predef + ld a, [CurPartyMon] + ld hl, PartyMon1Species + ld bc, $0030 + call AddNTimes + ld e, l + ld d, h + ld bc, $0024 + add hl, bc + ld a, [hli] + ld b, a + ld c, [hl] + ld hl, $d133 + ld a, [hld] + sub c + ld c, a + ld a, [hl] + sbc b + ld b, a + ld hl, $d131 + ld a, [hl] + add c + ld [hld], a + ld a, [hl] + adc b + ld [hl], a + ld hl, TempMonSpecies + ld bc, $0030 + call CopyBytes + ld a, [CurSpecies] + ld [$d265], a + xor a + ld [MonType], a + call $6487 + ld a, [$d265] + dec a + call SetSeenAndCaughtMon + ld a, [$d265] + cp $c9 + jr nz, .asm_423ec + ld hl, TempMonDVs + ld a, $2d + call Predef + ld hl, $7a18 + ld a, $3e + rst FarCall +.asm_423ec + pop de + pop hl + ld a, [TempMonSpecies] + ld [hl], a + push hl + ld l, e + ld h, d + jp $61f5 +; 423f8 -SECTION "bankF",DATA,BANK[$F] +Function423f8: ; 423f8 + inc hl + inc hl + inc hl + jp $6230 +; 423fe -INCBIN "baserom.gbc", $3c000, $3cc83 - $3c000 +INCBIN "baserom.gbc", $423fe, $423ff - $423fe -GetEighthMaxHP: ; 3cc83 -; output: bc - call GetQuarterMaxHP -; assumes nothing can have 1024 or more hp -; halve result - srl c -; round up - ld a, c + +Function423ff: ; 423ff + pop de + pop bc + pop hl + ld a, [InLinkBattle] and a - jr nz, .end - inc c -.end + ret nz + ld a, [IsInBattle] + and a + ret nz + ld a, [$d268] + and a + call nz, $3d47 ret -; 3cc8e +; 42414 + +Function42414: ; 42414 + ld a, [CurSpecies] + push af + ld a, [BaseDexNo] + ld [$d265], a + call GetPokemonName + pop af + ld [CurSpecies], a + ld hl, StringBuffer1 + ld de, StringBuffer2 +.asm_4242b + ld a, [de] + inc de + cp [hl] + inc hl + ret nz + cp $50 + jr nz, .asm_4242b + ld a, [CurPartyMon] + ld bc, $000b + ld hl, PartyMon1Nickname + call AddNTimes + push hl + ld a, [CurSpecies] + ld [$d265], a + call GetPokemonName + ld hl, StringBuffer1 + pop de + ld bc, $000b + jp CopyBytes +; 42454 +Function42454: ; 42454 + ld hl, $647d + call PrintText + call ClearTileMap + pop hl + jp $61f5 +; 42461 -GetQuarterMaxHP: ; 3cc8e -; output: bc - call GetMaxHP +Function42461: ; 42461 + push hl + ld a, [CurPartyMon] + ld hl, PartyMon1Item + ld bc, $0030 + call AddNTimes + ld a, [hl] + cp $70 + pop hl + ret +; 42473 -; quarter result - srl b - rr c - srl b - rr c +INCBIN "baserom.gbc", $42473, $42487 - $42473 -; assumes nothing can have 1024 or more hp -; round up - ld a, c + +Function42487: ; 42487 + ld a, [$d265] + ld [CurPartySpecies], a + dec a + ld b, $0 + ld c, a + ld hl, EvosAttacksPointers + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a +.asm_42499 + ld a, [hli] and a - jr nz, .end - inc c -.end + jr nz, .asm_42499 +.asm_4249d + ld a, [hli] + and a + jr z, .asm_424da + ld b, a + ld a, [CurPartyLevel] + cp b + ld a, [hli] + jr nz, .asm_4249d + push hl + ld d, a + ld hl, PartyMon1Move1 + ld a, [CurPartyMon] + ld bc, $0030 + call AddNTimes + ld b, $4 +.asm_424b9 + ld a, [hli] + cp d + jr z, .asm_424c2 + dec b + jr nz, .asm_424b9 + jr .asm_424c5 + +.asm_424c2 + pop hl + jr .asm_4249d + +.asm_424c5 + ld a, d + ld [$d262], a + ld [$d265], a + call GetMoveName + call CopyName1 + ld a, $0 + call Predef + pop hl + jr .asm_4249d + +.asm_424da + ld a, [CurPartySpecies] + ld [$d265], a ret -; 3cc9f +; 424e1 +INCBIN "baserom.gbc", $424e1, $42577 - $424e1 -GetHalfMaxHP: ; 3cc9f -; output: bc - call GetMaxHP -; halve reslut - srl b - rr c +Function42577: ; 42577 + push de + ld d, $0 + ld a, $3 + call Predef + pop de + ret +; 42581 -; floor = 1 +Function42581: ; 42581 + ld c, $0 +.asm_42583 + ld hl, EvosAttacksPointers + ld b, $0 + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a +.asm_4258d + ld a, [hli] + and a + jr z, .asm_425a2 + cp $5 + jr nz, .asm_42596 + inc hl + +.asm_42596 + inc hl + ld a, [CurPartySpecies] + cp [hl] + jr z, .asm_425aa + inc hl + ld a, [hl] + and a + jr nz, .asm_4258d + +.asm_425a2 + inc c ld a, c - or b - jr nz, .end + cp $fb + jr c, .asm_42583 + and a + ret + +.asm_425aa inc c -.end + ld a, c + ld [CurPartySpecies], a + scf ret -; 3ccac +; 425b1 -GetMaxHP: ; 3ccac -; output: bc, MagikarpLength-b +EvosAttacksPointers: ; 0x425b1 +INCLUDE "stats/evos_attacks_pointers.asm" + +INCLUDE "stats/evos_attacks.asm" -; player - ld hl, BattleMonMaxHP -; whose turn? - ld a, [hBattleTurn] - and a - jr z, .gethp +SECTION "bank11",DATA,BANK[$11] -; enemy - ld hl, EnemyMonMaxHP +FruitTreeScript: ; 44000 + 3callasm BANK(GetCurTreeFruit), GetCurTreeFruit + loadfont + copybytetovar CurFruit + itemtotext $0, $0 + 2writetext FruitBearingTreeText + keeptextopen + 3callasm BANK(TryResetFruitTrees), TryResetFruitTrees + 3callasm BANK(CheckFruitTree), CheckFruitTree + iffalse .fruit + 2writetext NothingHereText + closetext + 2jump .end -.gethp - ld a, [hli] - ld [Buffer2], a - ld b, a +.fruit + 2writetext HeyItsFruitText + copybytetovar CurFruit + giveitem $ff, 1 + iffalse .packisfull + keeptextopen + 2writetext ObtainedFruitText + 3callasm BANK(PickedFruitTree), PickedFruitTree + specialsound + itemnotify + 2jump .end - ld a, [hl] - ld [MagikarpLength], a - ld c, a - ret -; 3ccc2 +.packisfull + keeptextopen + 2writetext FruitPackIsFullText + closetext +.end + loadmovesprites + end +; 44041 -INCBIN "baserom.gbc", $3ccc2, $3d123 - $3ccc2 +GetCurTreeFruit: ; 44041 + ld a, [CurFruitTree] + dec a + call GetFruitTreeItem + ld [CurFruit], a + ret +; 4404c +TryResetFruitTrees: ; 4404c + ld hl, $dc1e + bit 4, [hl] + ret nz + jp ResetFruitTrees +; 44055 -; These functions check if the current opponent is a gym leader or one of a -; few other special trainers. +CheckFruitTree: ; 44055 + ld b, 2 + call GetFruitTreeFlag + ld a, c + ld [ScriptVar], a + ret +; 4405f -; Note: KantoGymLeaders is a subset of JohtoGymLeaders. If you wish to -; differentiate between the two, call IsKantoGymLeader first. +PickedFruitTree: ; 4405f + ld a, $41 + ld hl, $609b + rst FarCall ; empty function -; The Lance and Red entries are unused for music checks; those trainers are -; accounted for elsewhere. + ld b, 1 + jp GetFruitTreeFlag +; 4406a -IsKantoGymLeader: ; 0x3d123 - ld hl, KantoGymLeaders - jr IsGymLeaderCommon +ResetFruitTrees: ; 4406a + xor a + ld hl, FruitTreeFlags + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, $dc1e + set 4, [hl] + ret +; 44078 -IsJohtoGymLeader: ; 0x3d128 - ld hl, JohtoGymLeaders -IsGymLeaderCommon: +GetFruitTreeFlag: ; 44078 + push hl push de - ld a, [OtherTrainerClass] - ld de, $0001 - call IsInArray + ld a, [CurFruitTree] + dec a + ld e, a + ld d, 0 + ld hl, FruitTreeFlags + call BitTableFunc pop de + pop hl ret -; 0x3d137 - -JohtoGymLeaders: - db FALKNER - db WHITNEY - db BUGSY - db MORTY - db PRYCE - db JASMINE - db CHUCK - db CLAIR - db WILL - db BRUNO - db KAREN - db KOGA -; fallthrough -; these two entries are unused - db CHAMPION - db RED -; fallthrough -KantoGymLeaders: - db BROCK - db MISTY - db LT_SURGE - db ERIKA - db JANINE - db SABRINA - db BLAINE - db BLUE - db $ff - +; 4408a -INCBIN "baserom.gbc", $3d14e, $3d38e - $3d14e +GetFruitTreeItem: ; 4408a + push hl + push de + ld e, a + ld d, 0 + ld hl, FruitTreeItems + add hl, de + ld a, [hl] + pop de + pop hl + ret +; 44097 +FruitTreeItems: ; 44097 + db BERRY + db BERRY + db BERRY + db BERRY + db PSNCUREBERRY + db PSNCUREBERRY + db BITTER_BERRY + db BITTER_BERRY + db PRZCUREBERRY + db PRZCUREBERRY + db MYSTERYBERRY + db MYSTERYBERRY + db ICE_BERRY + db ICE_BERRY + db MINT_BERRY + db BURNT_BERRY + db RED_APRICORN + db BLU_APRICORN + db BLK_APRICORN + db WHT_APRICORN + db PNK_APRICORN + db GRN_APRICORN + db YLW_APRICORN + db BERRY + db PSNCUREBERRY + db BITTER_BERRY + db PRZCUREBERRY + db ICE_BERRY + db MINT_BERRY + db BURNT_BERRY +; 440b5 -LostBattle: ; 3d38e - ld a, 1 - ld [BattleEnded], a +FruitBearingTreeText: ; 440b5 + text_jump _FruitBearingTreeText, BANK(_FruitBearingTreeText) + db "@" +; 440ba - ld a, [$cfc0] - bit 0, a - jr nz, .asm_3d3bd +HeyItsFruitText: ; 440ba + text_jump _HeyItsFruitText, BANK(_HeyItsFruitText) + db "@" +; 440bf - ld a, [BattleType] - cp BATTLETYPE_CANLOSE - jr nz, .asm_3d3e3 +ObtainedFruitText: ; 440bf + text_jump _ObtainedFruitText, BANK(_ObtainedFruitText) + db "@" +; 440c4 -; Remove the enemy from the screen. - hlcoord 0, 0 - ld bc, $0815 - call ClearBox - call $6bd8 +FruitPackIsFullText: ; 440c4 + text_jump _FruitPackIsFullText, BANK(_FruitPackIsFullText) + db "@" +; 440c9 - ld c, 40 - call DelayFrames +NothingHereText: ; 440c9 + text_jump _NothingHereText, BANK(_NothingHereText) + db "@" +; 440ce - ld a, [$c2cc] - bit 0, a - jr nz, .asm_3d3bc - call $3718 -.asm_3d3bc - ret -.asm_3d3bd -; Remove the enemy from the screen. - hlcoord 0, 0 - ld bc, $0815 - call ClearBox - call $6bd8 - ld c, 40 - call DelayFrames +AIChooseMove: ; 440ce +; Score each move in EnemyMonMoves starting from Buffer1. Lower is better. +; Pick the move with the lowest score. - call $6dd1 - ld c, 2 - ld a, $47 - ld hl, $4000 - rst FarCall - call $0a80 - call ClearTileMap - call WhiteBGMap - ret +; Wildmons attack at random. + ld a, [IsInBattle] + dec a + ret z -.asm_3d3e3 ld a, [InLinkBattle] and a - jr nz, .LostLinkBattle - -; Greyscale - ld b, 0 - call GetSGBLayout - call Function32f9 - jr .end - -.LostLinkBattle - call UpdateEnemyMonInParty - call $4f35 - jr nz, .asm_3d40a - ld hl, TiedAgainstText - ld a, [$d0ee] - and $c0 - add 2 - ld [$d0ee], a - jr .asm_3d412 - -.asm_3d40a - ld hl, LostAgainstText - call $52f1 - jr z, .asm_3d417 + ret nz -.asm_3d412 - call FarBattleTextBox +; No use picking a move if there's no choice. + ld a, $f + ld hl, $68d1 + rst FarCall ; CheckLockedEnemyMove + ret nz -.end - scf - ret -.asm_3d417 -; Remove the enemy from the screen. - hlcoord 0, 0 - ld bc, $0815 - call ClearBox - call $6bd8 +; The default score is 20. Unusable moves are given a score of 80. + ld a, 20 + ld hl, Buffer1 + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a - ld c, 40 - call DelayFrames +; Don't pick disabled moves. + ld a, [EnemyDisabledMove] + and a + jr z, .CheckPP - ld c, $3 - ld a, $13 - ld hl, $6a0a - rst FarCall - scf - ret -; 3d432 + ld hl, EnemyMonMove1 + ld c, 0 +.CheckDisabledMove + cp [hl] + jr z, .ScoreDisabledMove + inc c + inc hl + jr .CheckDisabledMove +.ScoreDisabledMove + ld hl, Buffer1 + ld b, 0 + add hl, bc + ld [hl], 80 +; Don't pick moves with 0 PP. +.CheckPP + ld hl, Buffer1 - 1 + ld de, EnemyMonPP + ld b, 0 +.CheckMovePP + inc b + ld a, b + cp EnemyMonMovesEnd - EnemyMonMoves + 1 + jr z, .ApplyLayers + inc hl + ld a, [de] + inc de + and $3f + jr nz, .CheckMovePP + ld [hl], 80 + jr .CheckMovePP -INCBIN "baserom.gbc", $3d432, $3ddc2 - $3d432 - ld hl, RecoveredUsingText - jp FarBattleTextBox -; 0x3ddc8 +; Apply AI scoring layers depending on the trainer class. +.ApplyLayers + ld hl, $559f ; TrainerAI + 3 ; e:559c-5771 -INCBIN "baserom.gbc", $3ddc8, $3e8eb - $3ddc8 + ld a, [$cfc0] + bit 0, a + jr nz, .asm_4412f -LoadEnemyMon: ; 3e8eb -; Initialize enemy monster parameters -; To do this we pull the species from TempEnemyMonSpecies + ld a, [TrainerClass] + dec a + ld bc, 7 ; Trainer2AI - Trainer1AI + call AddNTimes -; Notes: -; FarBattleRNG is used to ensure sync between Game Boys +.asm_4412f + ld bc, (CHECK_FLAG << 8) | 0 + push bc + push hl -; Clear the whole EnemyMon struct - xor a - ld hl, EnemyMonSpecies - ld bc, EnemyMonEnd - EnemyMon - call ByteFill - -; We don't need to be here if we're in a link battle - ld a, [InLinkBattle] - and a - jp nz, $5abd - - ld a, [$cfc0] ; ???? - bit 0, a - jp nz, $5abd - -; Make sure everything knows what species we're working with - ld a, [TempEnemyMonSpecies] - ld [EnemyMonSpecies], a - ld [CurSpecies], a - ld [CurPartySpecies], a - -; Grab the BaseData for this species - call GetBaseData - +.CheckLayer + pop hl + pop bc -; Let's get the item: + ld a, c + cp 16 ; up to 16 scoring layers + jr z, .asm_4415e -; Is the item predetermined? - ld a, [IsInBattle] - dec a - jr z, .WildItem - -; If we're in a trainer battle, the item is in the party struct - ld a, [CurPartyMon] - ld hl, OTPartyMon1Item - call GetPartyLocation ; bc = PartyMon[CurPartyMon] - PartyMons - ld a, [hl] - jr .UpdateItem - - -.WildItem -; In a wild battle, we pull from the item slots in BaseData + push bc + ld d, $e ; BANK(TrainerAI) + ld a, PREDEF_FLAG + call Predef + ld d, c + pop bc -; Force Item1 -; Used for Ho-Oh, Lugia and Snorlax encounters - ld a, [BattleType] - cp BATTLETYPE_FORCEITEM - ld a, [BaseItems] - jr z, .UpdateItem - -; Failing that, it's all up to chance -; Effective chances: -; 75% None -; 23% Item1 -; 2% Item2 + inc c + push bc + push hl -; 25% chance of getting an item - call FarBattleRNG - cp a, $c0 - ld a, NO_ITEM - jr c, .UpdateItem - -; From there, an 8% chance for Item2 - call FarBattleRNG - cp a, $14 ; 8% of 25% = 2% Item2 - ld a, [BaseItems] - jr nc, .UpdateItem - ld a, [BaseItems+1] - - -.UpdateItem - ld [EnemyMonItem], a - - -; Initialize DVs - -; If we're in a trainer battle, DVs are predetermined - ld a, [IsInBattle] + ld a, d and a - jr z, .InitDVs - -; ???? - ld a, [EnemySubStatus5] - bit 3, a - jr z, .InitDVs - -; Unknown - ld hl, $c6f2 - ld de, EnemyMonDVs - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - jp .Happiness - - -.InitDVs - -; Trainer DVs - -; All trainers have preset DVs, determined by class -; See GetTrainerDVs for more on that - callba GetTrainerDVs -; These are the DVs we'll use if we're actually in a trainer battle - ld a, [IsInBattle] - dec a - jr nz, .UpdateDVs - - -; Wild DVs -; Here's where the fun starts + jr z, .CheckLayer -; Roaming monsters (Entei, Raikou) work differently -; They have their own structs, which are shorter than normal - ld a, [BattleType] - cp a, BATTLETYPE_ROAMING - jr nz, .NotRoaming - -; Grab HP - call GetRoamMonHP - ld a, [hl] -; Check if the HP has been initialized + ld hl, AIScoringPointers + dec c + ld b, 0 + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, BANK(AIScoring) + call FarJpHl + + jr .CheckLayer + +.asm_4415e + ld hl, Buffer1 + ld de, EnemyMonMoves + ld c, EnemyMonMovesEnd - EnemyMonMoves +.asm_44166 + ld a, [de] + inc de and a -; We'll do something with the result in a minute - push af - -; Grab DVs - call GetRoamMonDVs - inc hl - ld a, [hld] - ld c, a - ld b, [hl] + jr z, .asm_4415e + + dec [hl] + jr z, .asm_44174 -; Get back the result of our check - pop af -; If the RoamMon struct has already been initialized, we're done - jr nz, .UpdateDVs - -; If it hasn't, we need to initialize the DVs -; (HP is initialized at the end of the battle) - call GetRoamMonDVs inc hl - call FarBattleRNG - ld [hld], a - ld c, a - call FarBattleRNG - ld [hl], a - ld b, a -; We're done with DVs - jr .UpdateDVs + dec c + jr z, .asm_4415e - -.NotRoaming -; Register a contains BattleType + jr .asm_44166 -; Forced shiny battle type -; Used by Red Gyarados at Lake of Rage - cp a, BATTLETYPE_SHINY - jr nz, .GenerateDVs +.asm_44174 + ld a, c +.asm_44175 + inc [hl] + dec hl + inc a + cp EnemyMonMovesEnd - EnemyMonMoves + 1 + jr nz, .asm_44175 - ld b, ATKDEFDV_SHINY ; $ea - ld c, SPDSPCDV_SHINY ; $aa - jr .UpdateDVs - -.GenerateDVs -; Generate new random DVs - call FarBattleRNG - ld b, a - call FarBattleRNG - ld c, a - -.UpdateDVs -; Input DVs in register bc - ld hl, EnemyMonDVs - ld a, b - ld [hli], a - ld [hl], c - - -; We've still got more to do if we're dealing with a wild monster - ld a, [IsInBattle] - dec a - jr nz, .Happiness - - -; Species-specfic: - - -; Unown - ld a, [TempEnemyMonSpecies] - cp a, UNOWN - jr nz, .Magikarp - -; Get letter based on DVs - ld hl, EnemyMonDVs - ld a, PREDEF_GETUNOWNLETTER - call Predef -; Can't use any letters that haven't been unlocked -; If combined with forced shiny battletype, causes an infinite loop - call CheckUnownLetter - jr c, .GenerateDVs ; try again - - -.Magikarp -; Skimming this part recommended - - ld a, [TempEnemyMonSpecies] - cp a, MAGIKARP - jr nz, .Happiness - -; Get Magikarp's length - ld de, EnemyMonDVs - ld bc, PlayerID - callab CalcMagikarpLength - -; We're clear if the length is < 1536 - ld a, [MagikarpLength] - cp a, $06 ; $600 = 1536 - jr nz, .CheckMagikarpArea - -; 5% chance of skipping size checks - call RNG - cp a, $0c ; / $100 - jr c, .CheckMagikarpArea -; Try again if > 1614 - ld a, [MagikarpLength + 1] - cp a, $50 - jr nc, .GenerateDVs - -; 20% chance of skipping this check - call RNG - cp a, $32 ; / $100 - jr c, .CheckMagikarpArea -; Try again if > 1598 - ld a, [MagikarpLength + 1] - cp a, $40 - jr nc, .GenerateDVs - -.CheckMagikarpArea -; The z checks are supposed to be nz -; Instead, all maps in GROUP_LAKE_OF_RAGE (mahogany area) -; and routes 20 and 44 are treated as Lake of Rage - -; This also means Lake of Rage Magikarp can be smaller than ones -; caught elsewhere rather than the other way around - -; Intended behavior enforces a minimum size at Lake of Rage -; The real behavior prevents size flooring in the Lake of Rage area - ld a, [MapGroup] - cp a, GROUP_LAKE_OF_RAGE - jr z, .Happiness - ld a, [MapNumber] - cp a, MAP_LAKE_OF_RAGE - jr z, .Happiness -; 40% chance of not flooring - call RNG - cp a, $64 ; / $100 - jr c, .Happiness -; Floor at length 1024 - ld a, [MagikarpLength] - cp a, 1024 >> 8 - jr c, .GenerateDVs ; try again - - -; Finally done with DVs - -.Happiness -; Set happiness - ld a, BASE_HAPPINESS - ld [EnemyMonHappiness], a -; Set level - ld a, [CurPartyLevel] - ld [EnemyMonLevel], a -; Fill stats - ld de, EnemyMonMaxHP - ld b, $00 - ld hl, $d201 ; ? - ld a, PREDEF_FILLSTATS - call Predef - -; If we're in a trainer battle, -; get the rest of the parameters from the party struct - ld a, [IsInBattle] - cp a, TRAINER_BATTLE - jr z, .OpponentParty - -; If we're in a wild battle, check wild-specific stuff + ld hl, Buffer1 + ld de, EnemyMonMoves + ld c, EnemyMonMovesEnd - EnemyMonMoves +.asm_44184 + ld a, [de] and a - jr z, .TreeMon - -; ???? - ld a, [EnemySubStatus5] - bit 3, a - jp nz, .Moves - -.TreeMon -; If we're headbutting trees, some monsters enter battle asleep - call CheckSleepingTreeMon - ld a, 7 ; Asleep for 7 turns - jr c, .UpdateStatus -; Otherwise, no status - xor a - -.UpdateStatus - ld hl, EnemyMonStatus - ld [hli], a - -; Unused byte + jr nz, .asm_44189 + ld [hl], a +.asm_44189 + ld a, [hl] + dec a + jr z, .asm_44191 xor a ld [hli], a - -; Full HP... - ld a, [EnemyMonMaxHPHi] + jr .asm_44193 +.asm_44191 + ld a, [de] ld [hli], a - ld a, [EnemyMonMaxHPLo] - ld [hl], a - -; ...unless it's a RoamMon - ld a, [BattleType] - cp a, BATTLETYPE_ROAMING - jr nz, .Moves - -; Grab HP - call GetRoamMonHP +.asm_44193 + inc de + dec c + jr nz, .asm_44184 + +.asm_44197 + ld hl, Buffer1 + call RNG + and 3 + ld c, a + ld b, 0 + add hl, bc ld a, [hl] -; Check if it's been initialized again and a - jr z, .InitRoamHP -; Update from the struct if it has - ld a, [hl] - ld [EnemyMonHPLo], a - jr .Moves - -.InitRoamHP -; HP only uses the lo byte in the RoamMon struct since -; Raikou/Entei/Suicune will have < 256 hp at level 40 - ld a, [EnemyMonHPLo] - ld [hl], a - jr .Moves - - -.OpponentParty -; Get HP from the party struct - ld hl, (PartyMon1CurHP + 1) - PartyMon1 + OTPartyMon1 - ld a, [CurPartyMon] - call GetPartyLocation - ld a, [hld] - ld [EnemyMonHPLo], a - ld a, [hld] - ld [EnemyMonHPHi], a - -; Make sure everything knows which monster the opponent is using - ld a, [CurPartyMon] - ld [CurOTMon], a - -; Get status from the party struct - dec hl - ld a, [hl] ; OTPartyMonStatus - ld [EnemyMonStatus], a - - -.Moves -; ???? - ld hl, BaseType1 - ld de, EnemyMonType1 + jr z, .asm_44197 + + ld [CurEnemyMove], a + ld a, c + ld [CurEnemyMoveNum], a + ret +; 441af + + +AIScoringPointers: ; 441af + dw AIScoring_RedStatus + dw AIScoring_RedStatMods + dw AIScoring_RedSuperEffective + dw AIScoring_Offensive + dw AIScoring_Smart + dw AIScoring_Opportunist + dw AIScoring_Aggressive + dw AIScoring_Cautious + dw AIScoring_StatusImmunity + dw AIScoring_Risky + dw AIScoring_None + dw AIScoring_None + dw AIScoring_None + dw AIScoring_None + dw AIScoring_None + dw AIScoring_None +; 441cf + + +Function441cf: ; 441cf + ld hl, $41fc + ld b, $19 +.asm_441d4 + ld a, [hli] + cp $fe + jr nz, .asm_441dd + ld hl, $41fc + ld a, [hli] + +.asm_441dd + ld [$c7db], a + ld a, [hli] + ld c, a + push bc + push hl + call $4207 + pop hl + pop bc + call DelayFrames + dec b + jr nz, .asm_441d4 + xor a + ld [$c7db], a + call $4207 + ld c, $20 + call DelayFrames + ret +; 441fc + +INCBIN "baserom.gbc", $441fc, $44207 - $441fc + + +Function44207: ; 44207 + ld a, [$c7db] + ld hl, $4228 + ld de, Sprites +.asm_44210 ld a, [hli] + cp $ff + ret z ld [de], a inc de - ld a, [hl] + ld a, [hli] ld [de], a - -; Get moves - ld de, EnemyMonMoves -; Are we in a trainer battle? - ld a, [IsInBattle] - cp a, TRAINER_BATTLE - jr nz, .WildMoves -; Then copy moves from the party struct - ld hl, OTPartyMon1Moves + inc de + ld a, [$c7db] + ld b, a + add a + add b + add [hl] + inc hl + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + jr .asm_44210 +; 44228 + +INCBIN "baserom.gbc", $44228, $44378 - $44228 + + +PokedexDataPointerTable: ; 0x44378 +INCLUDE "stats/pokedex/entry_pointers.asm" + + +Function4456e: ; 4456e + ld a, $1 + call GetPartyParamLocation + ld d, [hl] + ld a, $2e + ld hl, $5e76 + rst FarCall + jr nc, .asm_445be + call $4648 + cp $a + jr nc, .asm_445be + ld bc, $002f + ld hl, $a835 + call AddNTimes + ld d, h + ld e, l ld a, [CurPartyMon] - call GetPartyLocation - ld bc, NUM_MOVES + ld bc, $002f + ld hl, $a600 + call AddNTimes + push hl + ld a, $0 + call GetSRAMBank + ld bc, $002f call CopyBytes - jr .PP - -.WildMoves -; Clear EnemyMonMoves + pop hl xor a - ld h, d - ld l, e - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a -; Make sure the predef knows this isn't a partymon - ld [MagikarpLength], a -; Fill moves based on level - ld a, PREDEF_FILLMOVES - call Predef - -.PP -; Trainer battle? - ld a, [IsInBattle] - cp a, TRAINER_BATTLE - jr z, .TrainerPP - -; Fill wild PP - ld hl, EnemyMonMoves - ld de, EnemyMonPP - ld a, PREDEF_FILLPP - call Predef - jr .Finish - -.TrainerPP -; Copy PP from the party struct - ld hl, OTPartyMon1PP + ld bc, $002f + call ByteFill + ld a, $1 + call GetPartyParamLocation + ld [hl], $0 + ld hl, $a834 + inc [hl] + call CloseSRAM + xor a + ret + +.asm_445be + scf + ret +; 445c0 + +INCBIN "baserom.gbc", $445c0, $44648 - $445c0 + + +Function44648: ; 44648 + ld a, $0 + call GetSRAMBank + ld a, [$a834] + ld c, a + jp CloseSRAM +; 44654 + +Function44654: ; 44654 + push bc + push de + ld a, $14 + ld hl, $4000 + rst FarCall + ld a, $2 + jr c, .asm_446c6 ld a, [CurPartyMon] - call GetPartyLocation - ld de, EnemyMonPP - ld bc, NUM_MOVES + ld hl, PartyMon1Item + ld bc, $0030 + call AddNTimes + ld d, [hl] + ld a, $2e + ld hl, $5e76 + rst FarCall + ld a, $3 + jr nc, .asm_446c6 + ld a, $0 + call GetSRAMBank + ld a, [CurPartyMon] + ld hl, $a600 + ld bc, $002f + call AddNTimes + ld d, h + ld e, l + pop hl + pop bc + ld a, $20 + ld [$d265], a +.asm_44691 + ld a, [de] + ld c, a + ld a, b + call GetFarByte + cp $50 + jr z, .asm_446ab + cp c + ld a, $0 + jr nz, .asm_446c1 + inc hl + inc de + ld a, [$d265] + dec a + ld [$d265], a + jr nz, .asm_44691 + +.asm_446ab + ld a, $3 + ld hl, $6538 + rst FarCall + ld a, $4 + jr c, .asm_446c1 + xor a + ld [$d10b], a + ld a, $3 + ld hl, $6039 + rst FarCall + ld a, $1 + +.asm_446c1 + call CloseSRAM + jr .asm_446c8 + +.asm_446c6 + pop de + pop bc + +.asm_446c8 + ld [ScriptVar], a + ret +; 446cc + +Function446cc: ; 446cc + ld a, [PartyCount] + dec a + push af + push bc + ld hl, PartyMon1Item + ld bc, $0030 + call AddNTimes + pop bc + ld [hl], b + pop af + push bc + push af + ld hl, $a600 + ld bc, $002f + call AddNTimes + ld d, h + ld e, l + ld hl, DefaultFlypoint + ld bc, $0021 + ld a, $0 + call GetSRAMBank call CopyBytes - -.Finish -; Only the first five base stats are copied... - ld hl, BaseStats - ld de, EnemyMonBaseStats - ld b, BaseSpecialDefense - BaseStats -.loop + pop af + push af + ld hl, PartyMon1OT + ld bc, $000b + call AddNTimes + ld bc, $000a + call CopyBytes + pop af + ld hl, PartyMon1ID + ld bc, $0030 + call AddNTimes ld a, [hli] ld [de], a inc de - dec b - jr nz, .loop - - ld a, [BaseCatchRate] + ld a, [hl] ld [de], a inc de - - ld a, [BaseExp] + ld a, [CurPartySpecies] ld [de], a + inc de + pop bc + ld a, b + ld [de], a + jp CloseSRAM +; 44725 - ld a, [TempEnemyMonSpecies] - ld [$d265], a - - call GetPokemonName - -; Did we catch it? - ld a, [IsInBattle] - and a - ret z - -; Update enemy nick - ld hl, StringBuffer1 - ld de, EnemyMonNick - ld bc, PKMN_NAME_LENGTH +Function44725: ; 44725 + ld a, $0 + call GetSRAMBank + ld hl, $a600 + ld de, $a71a + ld bc, $011a call CopyBytes - -; Caught this mon - ld a, [TempEnemyMonSpecies] - dec a - ld c, a - ld b, 1 ; set - ld hl, PokedexCaught - ld a, PREDEF_FLAG - call Predef - - ld hl, EnemyMonStats - ld de, EnemyStats - ld bc, EnemyMonStatsEnd - EnemyMonStats + ld hl, $a834 + ld de, $aa0b + ld bc, $01d7 call CopyBytes + jp CloseSRAM +; 44745 - ret -; 3eb38 +INCBIN "baserom.gbc", $44745, $447a0 - $44745 + +_KrisMailBoxMenu: ; 0x447a0 + call InitMail + jr z, .nomail + call $1d6e + call Function44806 + jp Function1c17 +.nomail + ld hl, .EmptyMailboxText + jp $1d67 +; 0x447b4 -CheckSleepingTreeMon: ; 3eb38 -; Return carry if species is in the list -; for the current time of day +.EmptyMailboxText ; 0x447b4 + TX_FAR _EmptyMailboxText + db "@" -; Don't do anything if this isn't a tree encounter - ld a, [BattleType] - cp a, BATTLETYPE_TREE - jr nz, .NotSleeping - -; Get list for the time of day - ld hl, .Morn - ld a, [TimeOfDay] - cp a, DAY - jr c, .Check - ld hl, .Day - jr z, .Check - ld hl, .Nite - -.Check - ld a, [TempEnemyMonSpecies] - ld de, 1 ; length of species id - call IsInArray -; If it's a match, the opponent is asleep - ret c - -.NotSleeping +InitMail: ; 0x447b9 +; initialize $d0f2 and beyond with incrementing values, one per mail +; set z if no mail + ld a, $0 + call GetSRAMBank + ld a, [$a834] + call CloseSRAM + ld hl, $d0f2 + ld [hli], a and a - ret -.Nite - db CATERPIE - db METAPOD - db BUTTERFREE - db WEEDLE - db KAKUNA - db BEEDRILL - db SPEAROW - db EKANS - db EXEGGCUTE - db LEDYBA - db AIPOM - db $ff ; end - -.Day - db VENONAT - db HOOTHOOT - db NOCTOWL - db SPINARAK - db HERACROSS - db $ff ; end + jr z, .done ; if no mail, we're done -.Morn - db VENONAT - db HOOTHOOT - db NOCTOWL - db SPINARAK - db HERACROSS - db $ff ; end -; 3eb75 + ; load values in memory with incrementing values starting at $d0f2 + ld b, a + ld a, $1 +.loop + ld [hli], a + inc a + dec b + jr nz, .loop +.done + ld [hl], $ff ; terminate + ld a, [$d0f2] + and a + ret +; 0x447da -CheckUnownLetter: ; 3eb75 -; Return carry if the Unown letter hasn't been unlocked yet - - ld a, [UnlockedUnowns] - ld c, a - ld de, 0 - -.loop - -; Don't check this set unless it's been unlocked - srl c - jr nc, .next - -; Is our letter in the set? - ld hl, .LetterSets - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - +Function447da: ; 0x447da + dec a + ld hl, $a856 + ld bc, $002f + call AddNTimes + ld a, $0 + call GetSRAMBank + ld de, StringBuffer2 push de - ld a, [UnownLetter] - ld de, 1 - push bc - call IsInArray - pop bc + ld bc, $a + call CopyBytes + ld a, $50 + ld [de], a + call CloseSRAM pop de - - jr c, .match - -.next -; Make sure we haven't gone past the end of the table - inc e - inc e - ld a, e - cp a, .Set1 - .LetterSets - jr c, .loop - -; Hasn't been unlocked, or the letter is invalid - scf - ret - -.match -; Valid letter - and a ret - -.LetterSets - dw .Set1 - dw .Set2 - dw .Set3 - dw .Set4 - -.Set1 - ; A B C D E F G H I J K - db 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, $ff -.Set2 - ; L M N O P Q R - db 12, 13, 14, 15, 16, 17, 18, $ff -.Set3 - ; S T U V W - db 19, 20, 21, 22, 23, $ff -.Set4 - ; X Y Z - db 24, 25, 26, $ff - -; 3ebc7 - - -INCBIN "baserom.gbc", $3ebc7, $3ed4a - $3ebc7 - - -BadgeStatBoosts: ; 3ed4a -; Raise BattleMon stats depending on which badges have been obtained. - -; Every other badge boosts a stat, starting from the first. - -; ZephyrBadge: Attack -; PlainBadge: Speed -; MineralBadge: Defense -; GlacierBadge: Special Attack -; RisingBadge: Special Defense - -; The boosted stats are in order, except PlainBadge and MineralBadge's boosts are swapped. - - ld a, [$cfc0] - and a - ret nz +; 0x447fb - ld a, [JohtoBadges] +Function447fb: ; 0x447fb + push de + ld a, [MenuSelection] + call Function447da + pop hl + jp PlaceString +; 0x44806 -; Swap badges 3 (PlainBadge) and 5 (MineralBadge). - ld d, a - and %00000100 - add a - add a - ld b, a - ld a, d - and %00010000 - rrca - rrca - ld c, a - ld a, d - and %11101011 - or b - or c - ld b, a +Function44806: ; 0x44806 + xor a + ld [$d0f0], a + ld a, $1 + ld [$d0f1], a +.asm_4480f + call InitMail + ld hl, MenuData4494c + call Function1d3c + xor a + ld [hBGMapMode], a + call $352f + call $1ad2 + ld a, [$d0f1] + ld [$cf88], a + ld a, [$d0f0] + ld [$d0e4], a + call $350c + ld a, [$d0e4] + ld [$d0f0], a + ld a, [$cfa9] + ld [$d0f1], a + ld a, [$cf73] + cp $2 + jr z, .asm_44848 + call Function4484a + jr .asm_4480f - ld hl, BattleMonAtk - ld c, 4 -.CheckBadge - ld a, b - srl b - call c, BoostStat - inc hl - inc hl -; Check every other badge. - srl b - dec c - jr nz, .CheckBadge -; And the last one (RisingBadge) too. - srl a - call c, BoostStat +.asm_44848 + xor a ret -; 3ed7c - - -BoostStat: ; 3ed7c -; Raise stat at hl by 1/8. +; 0x4484a - ld a, [hli] - ld d, a - ld e, [hl] - srl d - rr e - srl d - rr e - srl d - rr e - ld a, [hl] - add e - ld [hld], a - ld a, [hl] - adc d - ld [hli], a +Function4484a: ; 0x4484a + ld hl, MenuData44964 + call Function1d35 + call Function1d81 + call Function1c07 + jr c, .asm_44860 + ld a, [$cfa9] + dec a + ld hl, $4861 + rst JumpTable -; Cap at 999. - ld a, [hld] - sub 999 % $100 - ld a, [hl] - sbc 999 / $100 - ret c - ld a, 999 / $100 - ld [hli], a - ld a, 999 % $100 - ld [hld], a +.asm_44860 ret -; 3ed9f +; 0x44861 +.JumpTable + dw .ReadMail + dw .PutInPack + dw .AttachMail + dw .Cancel -INCBIN "baserom.gbc", $3ed9f, $3edd8 - $3ed9f +.ReadMail ; 0x44869 + call FadeToMenu + ld a, [MenuSelection] + dec a + ld b, a + call $45f4 + jp $2b3c +; 0x44877 +.PutInPack ; 0x44877 + ld hl, .MessageLostText + call $1d4f + call $1dcf + call Function1c07 + ret c + ld a, [MenuSelection] + dec a + call .Function448bb + ld a, $1 + ld [$d10c], a + ld hl, NumItems + call $2f66 + jr c, .asm_4489e + ld hl, .PackFullText + jp $1d67 -BattleRNG: ; 3edd8 -; If the normal RNG is used in a link battle it'll desync. -; To circumvent this a shared PRNG is used instead. +.asm_4489e + ld a, [MenuSelection] + dec a + ld b, a + call $45c0 + ld hl, .PutAwayText + jp $1d67 +; 0x448ac -; But if we're in a non-link battle we're safe to use it - ld a, [InLinkBattle] - and a - jp z, RNG +.PutAwayText ; 0x448ac + TX_FAR ClearedMailPutAwayText + db "@" -; The PRNG operates in streams of 8 values -; The reasons for this are unknown +.PackFullText ; 0x448b1 + TX_FAR MailPackFullText + db "@" -; Which value are we trying to pull? - push hl - push bc - ld a, [LinkBattleRNCount] - ld c, a - ld b, $0 - ld hl, LinkBattleRNs - add hl, bc - inc a - ld [LinkBattleRNCount], a +.MessageLostText ; 0x448b6 + TX_FAR MailMessageLostText + db "@" -; If we haven't hit the end yet, we're good - cp 9 ; Exclude last value. See the closing comment - ld a, [hl] - pop bc - pop hl - ret c - - -; If we have, we have to generate new pseudorandom data -; Instead of having multiple PRNGs, ten seeds are used - push hl - push bc +.Function448bb: ; 0x448bb push af - -; Reset count to 0 - xor a - ld [LinkBattleRNCount], a - ld hl, LinkBattleRNs - ld b, 10 ; number of seeds - -; Generate next number in the sequence for each seed -; The algorithm takes the form *5 + 1 % 256 -.loop - ; get last # + ld a, $0 + call GetSRAMBank + pop af + ld hl, $a863 + ld bc, $002f + call AddNTimes ld a, [hl] - - ; a * 5 + 1 - ld c, a - add a - add a - add c - inc a - - ; update # - ld [hli], a - dec b - jr nz, .loop + ld [CurItem], a + jp CloseSRAM +; 0x448d2 -; This has the side effect of pulling the last value first, -; then wrapping around. As a result, when we check to see if -; we've reached the end, we have to take this into account. - pop af - pop bc - pop hl - ret -; 3ee0f +.AttachMail ; 0x448d2 + call FadeToMenu + xor a + ld [PartyMenuActionText], a + call WhiteBGMap +.asm_448dc + ld a, $14 + ld hl, $404f + rst $8 + ld a, $14 + ld hl, $4405 + rst $8 + ld a, $14 + ld hl, $43e0 + rst $8 + ld a, $14 + ld hl, PickedFruitTree + rst $8 + ld a, $14 + ld hl, $449a + rst $8 + call WaitBGMap + call Function32f9 + call DelayFrame + ld a, $14 + ld hl, $4457 + rst $8 + jr c, .asm_44939 + ld a, [CurPartySpecies] + cp $fd + jr z, .asm_44923 + ld a, $1 + call GetPartyParamLocation + ld a, [hl] + and a + jr z, .asm_4492b + ld hl, .HoldingMailText + call PrintText + jr .asm_448dc -INCBIN "baserom.gbc", $3ee0f, $3fa01 - $3ee0f +.asm_44923 + ld hl, .EggText + call PrintText + jr .asm_448dc -GetRoamMonHP: ; 3fa01 -; output: hl = RoamMonCurHP - ld a, [TempEnemyMonSpecies] +.asm_4492b + ld a, [MenuSelection] + dec a ld b, a - ld a, [RoamMon1Species] - cp b - ld hl, RoamMon1CurHP - ret z - ld a, [RoamMon2Species] - cp b - ld hl, RoamMon2CurHP - ret z -; remnant of the GS function -; we know this will be $00 because it's never initialized - ld hl, RoamMon3CurHP - ret -; 3fa19 + call $4607 + ld hl, .MailMovedText + call PrintText -GetRoamMonDVs: ; 3fa19 -; output: hl = RoamMonDVs - ld a, [TempEnemyMonSpecies] - ld b, a - ld a, [RoamMon1Species] - cp b - ld hl, RoamMon1DVs - ret z - ld a, [RoamMon2Species] - cp b - ld hl, RoamMon2DVs - ret z -; remnant of the GS function -; we know this will be $0000 because it's never initialized - ld hl, RoamMon3DVs - ret -; 3fa31 +.asm_44939 + jp $2b3c +; 0x4493c +.HoldingMailText ; 0x4493c + TX_FAR MailAlreadyHoldingItemText + db "@" -INCBIN "baserom.gbc", $3fa31, $3fbff - $3fa31 +.EggText ; 0x44941 + TX_FAR MailEggText + db "@" +.MailMovedText ; 0x44946 + TX_FAR MailMovedFromBoxText + db "@" -GetPlayerBackpic: ; 3fbff -; Load the player character's backpic (6x6) into VRAM starting from $9310. +.Cancel + ret -; Special exception for Dude. - ld b, BANK(DudeBackpic) - ld hl, DudeBackpic - ld a, [BattleType] - cp BATTLETYPE_TUTORIAL - jr z, .Decompress +MenuData4494c: ; 0x4494c + db %01000000 ; flags + db 1, 8 ; start coords + db $a, $12 ; end coords + dw .MenuData2 + db 1 ; default option -; What gender are we? - ld a, [$d45b] - bit 2, a - jr nz, .Chris - ld a, [PlayerGender] - bit 0, a - jr z, .Chris +.MenuData2 + db %00010000 ; flags + db 4, 0 ; rows/columns? + db 1 ; horizontal spacing? + dbw 0,$d0f2 ; text pointer + dbw BANK(Function447fb), Function447fb + dbw 0,0 + dbw 0,0 -; It's a girl. - callba GetKrisBackpic - ret +MenuData44964: ; 0x44964 + db %01000000 ; flags + db 0, 0 ; start coords + db 9, $d ; end coords + dw .MenuData2 + db 1 ; default option -.Chris -; It's a boy. - ld b, BANK(ChrisBackpic) - ld hl, ChrisBackpic +.MenuData2 + db %10000000 ; flags + db 4 ; items + db "READ MAIL@" + db "PUT IN PACK@" + db "ATTACH MAIL@" + db "CANCEL@" -.Decompress - ld de, $9310 - ld c, $31 - ld a, PREDEF_DECOMPRESS - call Predef +SECTION "bank12",DATA,BANK[$12] + +Function48000: ; 48000 + ld a, $1 + ld [$d474], a + xor a + ld [$d473], a + ld [PlayerGender], a + ld [$d475], a + ld [$d476], a + ld [$d477], a + ld [$d478], a + ld [DefaultFlypoint], a + ld [$d003], a + ld a, [$d479] + res 0, a + ld [$d479], a + ld a, [$d479] + res 1, a + ld [$d479], a ret -; 3fc30 +; 4802f +INCBIN "baserom.gbc", $4802f, $48e81 - $4802f -INCBIN "baserom.gbc", $3fc30, $3fc8b - $3fc30 +Function48e81: ; 48e81 + ld hl, $4e93 + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + ld hl, $9500 + ld bc, $120f + call Functioneba + ret +; 48e93 -BattleStartMessage ; 3fc8b - ld a, [IsInBattle] - dec a - jr z, .asm_3fcaa +INCBIN "baserom.gbc", $48e93, $48e9b - $48e93 - ld de, SFX_SHINE - call StartSFX - call WaitSFX +PackFGFX: +INCBIN "gfx/misc/pack_f.2bpp" - ld c, 20 - call DelayFrames +Function4925b: ; 4925b + call FadeToMenu + call WhiteBGMap + call Functionfdb + call DelayFrame + ld b, $14 + call GetSGBLayout + xor a + ld [$d142], a + call $52a5 + ld [$d265], a + ld [$d262], a + call GetMoveName + call CopyName1 + ld a, $b + ld hl, $47fb + rst FarCall + jr c, .asm_4929c + jr .asm_49291 - ld a, $e - ld hl, $5939 +.asm_49289 + ld a, $b + ld hl, $480a rst FarCall + jr c, .asm_4929c - ld hl, WantsToBattleText - jr .asm_3fd0e +.asm_49291 + call $52b9 + jr nc, .asm_49289 + xor a + ld [ScriptVar], a + jr .asm_492a1 -.asm_3fcaa - call $5a79 - jr nc, .asm_3fcc2 +.asm_4929c + ld a, $ff + ld [ScriptVar], a - xor a - ld [$cfca], a - ld a, 1 - ld [hBattleTurn], a - ld a, 1 - ld [$c689], a - ld de, $0101 - call $6e17 +.asm_492a1 + call $2b3c + ret +; 492a5 -.asm_3fcc2 - ld a, $f - ld hl, CheckSleepingTreeMon - rst FarCall - jr c, .asm_3fceb +Function492a5: ; 492a5 + ld a, [ScriptVar] + cp $1 + jr z, .asm_492b3 + cp $2 + jr z, .asm_492b6 + ld a, $3a + ret - ld a, $13 - ld hl, $6a44 - rst FarCall - jr c, .asm_3fce0 +.asm_492b3 + ld a, $35 + ret - hlcoord 12, 0 - ld d, $0 - ld e, $1 - ld a, $47 +.asm_492b6 + ld a, $55 + ret +; 492b9 + +Function492b9: ; 492b9 + ld hl, $530a + call Function1d35 + ld a, $e call Predef - jr .asm_3fceb + push bc + ld a, [CurPartyMon] + ld hl, PartyMon1Nickname + call GetNick + pop bc + ld a, c + and a + jr nz, .asm_492e5 + push de + ld de, $0019 + call StartSFX + pop de + ld a, $b + ld hl, $48ce + call $31b0 + jr .asm_49300 -.asm_3fce0 - ld a, $0f - ld [CryTracks], a - ld a, [TempEnemyMonSpecies] - call $37b6 +.asm_492e5 + ld hl, $79ea + ld a, $3 + rst FarCall + jr c, .asm_49300 + ld a, $0 + call Predef + ld a, b + and a + jr z, .asm_49300 + ld c, $5 + ld hl, $71c2 + ld a, $1 + rst FarCall + jr .asm_49305 -.asm_3fceb - ld a, [BattleType] - cp BATTLETYPE_FISH - jr nz, .asm_3fcfd +.asm_49300 + call Function1c07 + and a + ret - ld a, $41 - ld hl, $6086 - rst FarCall +.asm_49305 + call Function1c07 + scf + ret +; 4930a - ld hl, HookedPokemonAttackedText - jr .asm_3fd0e +INCBIN "baserom.gbc", $4930a, $49409 - $4930a -.asm_3fcfd - ld hl, PokemonFellFromTreeText - cp BATTLETYPE_TREE - jr z, .asm_3fd0e - ld hl, WildPokemonAppearedText2 - cp $b - jr z, .asm_3fd0e - ld hl, WildPokemonAppearedText -.asm_3fd0e - push hl - ld a, $b - ld hl, $4000 - rst FarCall +Function49409: ; 49409 + ld hl, $5418 + ld de, $d038 + ld bc, $0008 + ld a, $5 + call $306b + ret +; 49418 - pop hl - call FarBattleTextBox +INCBIN "baserom.gbc", $49418, $49962 - $49418 - call $7830 +SpecialCelebiGFX: +INCBIN "gfx/special/celebi/leaf.2bpp" +INCBIN "gfx/special/celebi/1.2bpp" +INCBIN "gfx/special/celebi/2.2bpp" +INCBIN "gfx/special/celebi/3.2bpp" +INCBIN "gfx/special/celebi/4.2bpp" - ret nz +INCBIN "baserom.gbc", $49aa2, $49cdc - $49aa2 - ld c, $2 - ld a, $13 - ld hl, $6a0a - rst FarCall +MainMenu: ; 49cdc + xor a + ld [$c2d7], a + call Function49ed0 + ld b, $8 + call GetSGBLayout + call Function32f9 + ld hl, GameTimerPause + res 0, [hl] + call Function49da4 + ld [$cf76], a + call Function49e09 + ld hl, MenuDataHeader_0x49d14 + call Function1d35 + call Function49de4 + call Function1c17 + jr c, .quit + call ClearTileMap + ld a, [MenuSelection] + ld hl, Label49d60 + rst JumpTable + jr MainMenu +.quit ret -; 3fd26 +; 49d14 +MenuDataHeader_0x49d14: ; 49d14 + db $40 ; flags + db 00, 00 ; start coords + db 07, 16 ; end coords + dw MenuData2_0x49d1c + db 1 ; default option +; 49d1c - dw $0000 ; padding +MenuData2_0x49d1c: ; 49d1c + db $80 ; flags + db 0 ; items + dw MainMenuItems + dw $1f79 + dw MainMenuText +; 49d20 +MainMenuText: +ContinueText: ; 0x49d24 + db "CONTINUE@" +NewGameText: ; 0x49d2d + db "NEW GAME@" +OptionText: ; 0x49d36 + db "OPTION@" +MysteryGiftText: ; 0x49d3d + db "MYSTERY GIFT@" +MobileText: ; 0x49d4a + db "MOBILE@" +MobileStudiumText: ; 0x49d51 + db "MOBILE STUDIUM@" -BattleCommandPointers: ; 3fd28 +Label49d60: ; 0x49d60 + dw MainMenu_Continue + dw MainMenu_NewGame + dw MainMenu_Options + dw MainMenu_MysteryGift + dw MainMenu_Mobile + dw MainMenu_MobileStudium +; 0x49d6c -INCLUDE "battle/effect_command_pointers.asm" +CONTINUE EQU 0 +NEW_GAME EQU 1 +OPTION EQU 2 +MYSTERY_GIFT EQU 3 +MOBILE EQU 4 +MOBILE_STUDIUM EQU 5 +MainMenuItems: +NewGameMenu: ; 0x49d6c + db 2 + db NEW_GAME + db OPTION + db $ff -SECTION "bank10",DATA,BANK[$10] +ContinueMenu: ; 0x49d70 + db 3 + db CONTINUE + db NEW_GAME + db OPTION + db $ff -INCBIN "baserom.gbc", $40000, $40c65-$40000 +MobileMysteryMenu: ; 0x49d75 + db 5 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db MOBILE + db $ff -AlphabeticalPokedexOrder: ; 0x40c65 -INCLUDE "stats/pokedex/order_alpha.asm" +MobileMenu: ; 0x49d7c + db 4 + db CONTINUE + db NEW_GAME + db OPTION + db MOBILE + db $ff -NewPokedexOrder: ; 0x40d60 -INCLUDE "stats/pokedex/order_new.asm" +MobileStudiumMenu: ; 0x49d82 + db 5 + db CONTINUE + db NEW_GAME + db OPTION + db MOBILE + db MOBILE_STUDIUM + db $ff -INCBIN "baserom.gbc", $40e5b, $41afb-$40e5b +MysteryMobileStudiumMenu: ; 0x49d89 + db 6 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db MOBILE + db MOBILE_STUDIUM + db $ff -Moves: ; 0x41afb -INCLUDE "battle/moves/moves.asm" +MysteryMenu: ; 0x49d91 + db 4 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db $ff -INCBIN "baserom.gbc", $421d8, $425b1-$421d8 +MysteryStudiumMenu: ; 0x49d97 + db 5 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db MOBILE_STUDIUM + db $ff -EvosAttacksPointers: ; 0x425b1 -INCLUDE "stats/evos_attacks_pointers.asm" +StudiumMenu: ; 0x49d9e + db 4 + db CONTINUE + db NEW_GAME + db OPTION + db MOBILE_STUDIUM + db $ff -INCLUDE "stats/evos_attacks.asm" +Function49da4: ; 49da4 + nop + nop + nop + ld a, [$cfcd] + and a + jr nz, .asm_49db0 + ld a, $0 + ret -SECTION "bank11",DATA,BANK[$11] +.asm_49db0 + ld a, [hCGB] + cp $1 + ld a, $1 + ret nz + ld a, $0 + call GetSRAMBank + ld a, [$abe5] + cp $ff + call CloseSRAM + jr nz, .asm_49dd6 + ld a, [StatusFlags] + bit 7, a + ld a, $1 + jr z, .asm_49dd1 + jr .asm_49dd1 -FruitTreeScript: ; 44000 - 3callasm BANK(GetCurTreeFruit), GetCurTreeFruit - loadfont - copybytetovar CurFruit - itemtotext $0, $0 - 2writetext FruitBearingTreeText - keeptextopen - 3callasm BANK(TryResetFruitTrees), TryResetFruitTrees - 3callasm BANK(CheckFruitTree), CheckFruitTree - iffalse .fruit - 2writetext NothingHereText - closetext - 2jump .end +.asm_49dd1 + jr .asm_49dd3 -.fruit - 2writetext HeyItsFruitText - copybytetovar CurFruit - giveitem $ff, 1 - iffalse .packisfull - keeptextopen - 2writetext ObtainedFruitText - 3callasm BANK(PickedFruitTree), PickedFruitTree - specialsound - itemnotify - 2jump .end +.asm_49dd3 + ld a, $1 + ret -.packisfull - keeptextopen - 2writetext FruitPackIsFullText - closetext +.asm_49dd6 + ld a, [StatusFlags] + bit 7, a + jr z, .asm_49ddf + jr .asm_49ddf -.end - loadmovesprites - end -; 44041 +.asm_49ddf + jr .asm_49de1 + +.asm_49de1 + ld a, $6 + ret +; 49de4 + +Function49de4: ; 49de4 + call SetUpMenu +.asm_49de7 + call Function49e09 + ld a, [$cfa5] + set 5, a + ld [$cfa5], a + call $1f1a + ld a, [$cf73] + cp $2 + jr z, .asm_49e07 + cp $1 + jr z, .asm_49e02 + jr .asm_49de7 -GetCurTreeFruit: ; 44041 - ld a, [CurFruitTree] - dec a - call GetFruitTreeItem - ld [CurFruit], a +.asm_49e02 + call PlayClickSFX + and a ret -; 4404c - -TryResetFruitTrees: ; 4404c - ld hl, $dc1e - bit 4, [hl] - ret nz - jp ResetFruitTrees -; 44055 -CheckFruitTree: ; 44055 - ld b, 2 - call GetFruitTreeFlag - ld a, c - ld [ScriptVar], a +.asm_49e07 + scf ret -; 4405f - -PickedFruitTree: ; 4405f - ld a, $41 - ld hl, $609b - rst FarCall ; empty function - - ld b, 1 - jp GetFruitTreeFlag -; 4406a +; 49e09 -ResetFruitTrees: ; 4406a +Function49e09: ; 49e09 + ld a, [$cfcd] + and a + ret z xor a - ld hl, FruitTreeFlags - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld hl, $dc1e + ld [hBGMapMode], a + call Function49e27 + ld hl, Options + ld a, [hl] + push af set 4, [hl] + call Function49e3d + pop af + ld [Options], a + ld a, $1 + ld [hBGMapMode], a ret -; 44078 +; 49e27 -GetFruitTreeFlag: ; 44078 - push hl - push de - ld a, [CurFruitTree] - dec a - ld e, a - ld d, 0 - ld hl, FruitTreeFlags - call BitTableFunc - pop de - pop hl + +Function49e27: ; 49e27 + call $06e3 + and $80 + jr nz, .asm_49e39 + ld hl, $c5b8 + ld b, $2 + ld c, $12 + call TextBox ret -; 4408a -GetFruitTreeItem: ; 4408a - push hl - push de - ld e, a - ld d, 0 - ld hl, FruitTreeItems - add hl, de - ld a, [hl] - pop de - pop hl +.asm_49e39 + call SpeechTextBox ret -; 44097 +; 49e3d -FruitTreeItems: ; 44097 - db BERRY - db BERRY - db BERRY - db BERRY - db PSNCUREBERRY - db PSNCUREBERRY - db BITTER_BERRY - db BITTER_BERRY - db PRZCUREBERRY - db PRZCUREBERRY - db MYSTERYBERRY - db MYSTERYBERRY - db ICE_BERRY - db ICE_BERRY - db MINT_BERRY - db BURNT_BERRY - db RED_APRICORN - db BLU_APRICORN - db BLK_APRICORN - db WHT_APRICORN - db PNK_APRICORN - db GRN_APRICORN - db YLW_APRICORN - db BERRY - db PSNCUREBERRY - db BITTER_BERRY - db PRZCUREBERRY - db ICE_BERRY - db MINT_BERRY - db BURNT_BERRY -; 440b5 -FruitBearingTreeText: ; 440b5 - text_jump _FruitBearingTreeText, BANK(_FruitBearingTreeText) - db "@" -; 440ba +Function49e3d: ; 49e3d + ld a, [$cfcd] + and a + ret z + call $06e3 + and $80 + jp nz, Function49e75 + call UpdateTime + call GetWeekday + ld b, a + decoord 1, 15 + call Function49e91 + decoord 4, 16 + ld a, [hHours] + ld c, a + ld a, $24 + ld hl, $4b3e + rst FarCall + ld [hl], $9c + inc hl + ld de, hMinutes + ld bc, $8102 + call $3198 + ret +; 49e70 -HeyItsFruitText: ; 440ba - text_jump _HeyItsFruitText, BANK(_HeyItsFruitText) - db "@" -; 440bf +; 49e70 + db "min.@" +; 49e75 -ObtainedFruitText: ; 440bf - text_jump _ObtainedFruitText, BANK(_ObtainedFruitText) - db "@" -; 440c4 +Function49e75: ; 49e75 + hlcoord 1, 14 + ld de, .TimeNotSet + call PlaceString + ret +; 49e7f -FruitPackIsFullText: ; 440c4 - text_jump _FruitPackIsFullText, BANK(_FruitPackIsFullText) - db "@" -; 440c9 +.TimeNotSet ; 49e7f + db "TIME NOT SET@" +; 49e8c -NothingHereText: ; 440c9 - text_jump _NothingHereText, BANK(_NothingHereText) +UnknownText_0x49e8c: ; 49e8c + text_jump UnknownText_0x1c5182, BANK(UnknownText_0x1c5182) db "@" -; 440ce - - - -AIChooseMove: ; 440ce -; Score each move in EnemyMonMoves starting from Buffer1. Lower is better. -; Pick the move with the lowest score. +; 49e91 -; Wildmons attack at random. - ld a, [IsInBattle] - dec a - ret z +Function49e91: ; 49e91 + push de + ld hl, .Days + ld a, b + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + ld h, b + ld l, c + ld de, .Day + call PlaceString + ret +; 49ea8 - ld a, [InLinkBattle] - and a - ret nz +.Days + db "SUN@" + db "MON@" + db "TUES@" + db "WEDNES@" + db "THURS@" + db "FRI@" + db "SATUR@" +.Day + db "DAY@" +; 49ed0 -; No use picking a move if there's no choice. - ld a, $f - ld hl, $68d1 - rst FarCall ; CheckLockedEnemyMove - ret nz +Function49ed0: ; 49ed0 + xor a + ld [$ffde], a + call ClearTileMap + call Functione5f + call $0e51 + call Function1fbf + ret +; 49ee0 -; The default score is 20. Unusable moves are given a score of 80. - ld a, 20 - ld hl, Buffer1 - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a +MainMenu_NewGame: ; 49ee0 + callba NewGame + ret +; 49ee7 -; Don't pick disabled moves. - ld a, [EnemyDisabledMove] - and a - jr z, .CheckPP +MainMenu_Options: ; 49ee7 + callba OptionsMenu + ret +; 49eee - ld hl, EnemyMonMove1 - ld c, 0 -.CheckDisabledMove - cp [hl] - jr z, .ScoreDisabledMove - inc c - inc hl - jr .CheckDisabledMove -.ScoreDisabledMove - ld hl, Buffer1 - ld b, 0 - add hl, bc - ld [hl], 80 +MainMenu_Continue: ; 49eee + callba Continue + ret +; 49ef5 -; Don't pick moves with 0 PP. -.CheckPP - ld hl, Buffer1 - 1 - ld de, EnemyMonPP - ld b, 0 -.CheckMovePP - inc b - ld a, b - cp EnemyMonMovesEnd - EnemyMonMoves + 1 - jr z, .ApplyLayers - inc hl - ld a, [de] - inc de - and $3f - jr nz, .CheckMovePP - ld [hl], 80 - jr .CheckMovePP +MainMenu_MysteryGift: ; 49ef5 + callba MysteryGift + ret +; 49efc +MainMenu_Mobile: ; 49efc + call WhiteBGMap + ld a, MUSIC_MOBILE_ADAPTER_MENU + ld [CurMusic], a + ld de, MUSIC_MOBILE_ADAPTER_MENU + call $66c5 + call WhiteBGMap + call $63a7 + call $6492 + call WhiteBGMap + call $6071 + ld c, $c + call DelayFrames + ld hl, $c4a4 + ld b, $a + ld c, $a + call $4cdc + ld hl, $c4ce + ld de, MobileString1 + call PlaceString + ld hl, $c590 + ld b, $4 + ld c, $12 + call TextBox + xor a + ld de, String_0x49fe9 + ld hl, $c5b9 + call PlaceString + call Function3200 + call Function32f9 + call $1bc9 + ld hl, $cfa9 + ld b, [hl] + push bc + jr .asm_49f5d -; Apply AI scoring layers depending on the trainer class. -.ApplyLayers - ld hl, $559f ; TrainerAI + 3 ; e:559c-5771 +.asm_49f55 + call $1bd3 + ld hl, $cfa9 + ld b, [hl] + push bc - ld a, [$cfc0] +.asm_49f5d bit 0, a - jr nz, .asm_4412f - - ld a, [TrainerClass] - dec a - ld bc, 7 ; Trainer2AI - Trainer1AI - call AddNTimes + jr nz, .asm_49f67 + bit 1, a + jr nz, .asm_49f84 + jr .asm_49f97 -.asm_4412f - ld bc, (CHECK_FLAG << 8) | 0 - push bc - push hl +.asm_49f67 + ld hl, $cfa9 + ld a, [hl] + cp $1 + jp z, $6098 + cp $2 + jp z, $60b9 + cp $3 + jp z, $60c2 + cp $4 + jp z, $6100 + ld a, $1 + call $1ff8 -.CheckLayer - pop hl +.asm_49f84 pop bc + call WhiteBGMap + call ClearTileMap + ld a, MUSIC_MAIN_MENU + ld [CurMusic], a + ld de, MUSIC_MAIN_MENU + call $66c5 + ret - ld a, c - cp 16 ; up to 16 scoring layers - jr z, .asm_4415e +.asm_49f97 + ld hl, $cfa9 + ld a, [hl] + dec a + ld hl, MobileStrings2 + call GetNthString + ld d, h + ld e, l + ld hl, $c5a5 + ld b, $4 + ld c, $12 + call ClearBox + ld hl, $c5b9 + call PlaceString + jp .asm_49fb7 - push bc - ld d, $e ; BANK(TrainerAI) - ld a, PREDEF_FLAG - call Predef - ld d, c +.asm_49fb7 + call $6071 pop bc + ld hl, $cfa9 + ld [hl], b + ld b, $a + ld c, $1 + ld hl, $c4b9 + call ClearBox + jp .asm_49f55 +; 49fcc - inc c - push bc - push hl - ld a, d - and a - jr z, .CheckLayer +MobileString1: ; 49fcc + db "めいしフ,ルダー", $4e + db "あいさつ", $4e + db "プロフィール", $4e + db "せ", $1e, "い", $4e + db "もどる@" +; 49fe9 - ld hl, AIScoringPointers - dec c - ld b, 0 - add hl, bc - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, BANK(AIScoring) - call FarJpHl - jr .CheckLayer +MobileStrings2: -.asm_4415e - ld hl, Buffer1 - ld de, EnemyMonMoves - ld c, EnemyMonMovesEnd - EnemyMonMoves -.asm_44166 - ld a, [de] - inc de - and a - jr z, .asm_4415e +String_0x49fe9: ; 49fe9 + db "めいし", $1f, "つくったり", $4e + db "ほぞんしておける フ,ルダーです@" +; 4a004 - dec [hl] - jr z, .asm_44174 +String_0x4a004: ; 4a004 + db "モバイルたいせんや じぶんのめいしで", $4e + db "つかう あいさつ", $1f, "つくります@" +; 4a026 - inc hl - dec c - jr z, .asm_4415e +String_0x4a026: ; 4a026 + db "あなた", $25, "じゅうしょや ねんれいの", $4e + db "せ", $1e, "い", $1f, "かえられます@" +; 4a042 - jr .asm_44166 +String_0x4a042: ; 4a042 + db "モバイルセンター", $1d, "せつぞくするとき", $4e + db "ひつような こと", $1f, "きめます@" +; 4a062 -.asm_44174 - ld a, c -.asm_44175 - inc [hl] - dec hl - inc a - cp EnemyMonMovesEnd - EnemyMonMoves + 1 - jr nz, .asm_44175 +String_0x4a062: ; 4a062 + db "まえ", $25, "がめん ", $1d, "もどります", $4e + db "@" +; 4a071 - ld hl, Buffer1 - ld de, EnemyMonMoves - ld c, EnemyMonMovesEnd - EnemyMonMoves -.asm_44184 - ld a, [de] - and a - jr nz, .asm_44189 - ld [hl], a -.asm_44189 - ld a, [hl] - dec a - jr z, .asm_44191 - xor a - ld [hli], a - jr .asm_44193 -.asm_44191 - ld a, [de] - ld [hli], a -.asm_44193 - inc de - dec c - jr nz, .asm_44184 -.asm_44197 - ld hl, Buffer1 - call RNG - and 3 - ld c, a - ld b, 0 - add hl, bc - ld a, [hl] - and a - jr z, .asm_44197 +INCBIN "baserom.gbc", $4a071, $4a496 - $4a071 - ld [CurEnemyMove], a + +MainMenu_MobileStudium: ; 4a496 + ld a, [StartDay] + ld b, a + ld a, [StartHour] + ld c, a + ld a, [StartMinute] + ld d, a + ld a, [StartSecond] + ld e, a + push bc + push de + callba MobileStudium + call WhiteBGMap + pop de + pop bc + ld a, b + ld [StartDay], a ld a, c - ld [CurEnemyMoveNum], a + ld [StartHour], a + ld a, d + ld [StartMinute], a + ld a, e + ld [StartSecond], a ret -; 441af +; 4a4c4 -AIScoringPointers: ; 441af - dw AIScoring_RedStatus - dw AIScoring_RedStatMods - dw AIScoring_RedSuperEffective - dw AIScoring_Offensive - dw AIScoring_Smart - dw AIScoring_Opportunist - dw AIScoring_Aggressive - dw AIScoring_Cautious - dw AIScoring_StatusImmunity - dw AIScoring_Risky - dw AIScoring_None - dw AIScoring_None - dw AIScoring_None - dw AIScoring_None - dw AIScoring_None - dw AIScoring_None -; 441cf +INCBIN "baserom.gbc", $4a4c4, $4a6e8 - $4a4c4 -INCBIN "baserom.gbc", $441cf, $44378 - $441cf +SpecialBeastsCheck: ; 0x4a6e8 +; Check if the player owns all three legendary beasts. +; They must exist in either party or PC, and have the player's OT and ID. +; outputs: +; ScriptVar is 1 if the Pokémon exist, otherwise 0. -PokedexDataPointerTable: ; 0x44378 -INCLUDE "stats/pokedex/entry_pointers.asm" + ld a, RAIKOU + ld [ScriptVar], a + call CheckOwnMonAnywhere + jr nc, .notexist + ld a, ENTEI + ld [ScriptVar], a + call CheckOwnMonAnywhere + jr nc, .notexist -INCBIN "baserom.gbc", $4456e, $447a0 - $4456e + ld a, SUICUNE + ld [ScriptVar], a + call CheckOwnMonAnywhere + jr nc, .notexist -_KrisMailBoxMenu: ; 0x447a0 - call InitMail - jr z, .nomail - call $1d6e - call Function44806 - jp Function1c17 + ; they exist + ld a, $1 + ld [ScriptVar], a + ret -.nomail - ld hl, .EmptyMailboxText - jp $1d67 -; 0x447b4 +.notexist + xor a + ld [ScriptVar], a + ret -.EmptyMailboxText ; 0x447b4 - TX_FAR _EmptyMailboxText - db "@" +SpecialMonCheck: ; 0x4a711 +; Check if a Pokémon exists in PC or party. +; It must exist in either party or PC, and have the player's OT and ID. -InitMail: ; 0x447b9 -; initialize $d0f2 and beyond with incrementing values, one per mail -; set z if no mail - ld a, $0 - call GetSRAMBank - ld a, [$a834] - call CloseSRAM - ld hl, $d0f2 - ld [hli], a - and a +; inputs: +; ScriptVar contains species to search for + call CheckOwnMonAnywhere + jr c, .exists - jr z, .done ; if no mail, we're done + ; doesn't exist + xor a + ld [ScriptVar], a + ret - ; load values in memory with incrementing values starting at $d0f2 - ld b, a +.exists ld a, $1 + ld [ScriptVar], a + ret + +CheckOwnMonAnywhere: ; 0x4a721 + ld a, [PartyCount] + and a + ret z ; no pokémon in party + + ld d, a + ld e, $0 + ld hl, PartyMon1Species + ld bc, PartyMon1OT + +; run CheckOwnMon on each Pokémon in the party .loop - ld [hli], a - inc a - dec b - jr nz, .loop -.done - ld [hl], $ff ; terminate + call CheckOwnMon + ret c ; found! - ld a, [$d0f2] + push bc + ld bc, PartyMon2 - PartyMon1 + add hl, bc + pop bc + call UpdateOTPointer + dec d + jr nz, .loop ; 0x4a73d $f0 + +; XXX the below could use some cleanup +; run CheckOwnMon on each Pokémon in the PC + ld a, $1 + call GetSRAMBank + ld a, [$ad10] and a + jr z, .asm_4a766 ; 0x4a748 $1c + ld d, a + ld hl, $ad26 + ld bc, $afa6 +.asm_4a751 + call CheckOwnMon + jr nc, .asm_4a75a ; 0x4a754 $4 + call CloseSRAM ret -; 0x447da - -Function447da: ; 0x447da - dec a - ld hl, $a856 - ld bc, $002f - call AddNTimes - ld a, $0 +.asm_4a75a + push bc + ld bc, $0020 + add hl, bc + pop bc + call UpdateOTPointer + dec d + jr nz, .asm_4a751 ; 0x4a764 $eb +.asm_4a766 + call CloseSRAM + ld c, $0 +.asm_4a76b + ld a, [$db72] + and $f + cp c + jr z, .asm_4a7af ; 0x4a771 $3c + ld hl, $6810 + ld b, $0 + add hl, bc + add hl, bc + add hl, bc + ld a, [hli] call GetSRAMBank - ld de, StringBuffer2 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [hl] + and a + jr z, .asm_4a7af ; 0x4a784 $29 + push bc + push hl + ld de, $0016 + add hl, de + ld d, h + ld e, l + pop hl push de - ld bc, $a - call CopyBytes - ld a, $50 - ld [de], a + ld de, $0296 + add hl, de + ld b, h + ld c, l + pop hl + ld d, a +.asm_4a798 + call CheckOwnMon + jr nc, .asm_4a7a2 ; 0x4a79b $5 + pop bc call CloseSRAM - pop de ret -; 0x447fb +.asm_4a7a2 + push bc + ld bc, $0020 + add hl, bc + pop bc + call UpdateOTPointer + dec d + jr nz, .asm_4a798 ; 0x4a7ac $ea + pop bc +.asm_4a7af + inc c + ld a, c + cp $e + jr c, .asm_4a76b ; 0x4a7b3 $b6 + call CloseSRAM + and a ; clear carry + ret -Function447fb: ; 0x447fb +CheckOwnMon: ; 0x4a7ba +; Check if a Pokémon belongs to the player and is of a specific species. + +; inputs: +; hl, pointer to PartyMonNSpecies +; bc, pointer to PartyMonNOT +; ScriptVar should contain the species we're looking for + +; outputs: +; sets carry if monster matches species, ID, and OT name. + + push bc + push hl push de - ld a, [MenuSelection] - call Function447da - pop hl - jp PlaceString -; 0x44806 + ld d, b + ld e, c -Function44806: ; 0x44806 - xor a - ld [$d0f0], a - ld a, $1 - ld [$d0f1], a -.asm_4480f - call InitMail - ld hl, MenuData4494c - call Function1d3c - xor a - ld [hBGMapMode], a - call $352f - call $1ad2 - ld a, [$d0f1] - ld [$cf88], a - ld a, [$d0f0] - ld [$d0e4], a - call $350c - ld a, [$d0e4] - ld [$d0f0], a - ld a, [$cfa9] - ld [$d0f1], a - ld a, [$cf73] - cp $2 - jr z, .asm_44848 - call Function4484a - jr .asm_4480f +; check species + ld a, [ScriptVar] ; species we're looking for + ld b, [hl] ; species we have + cp b + jr nz, .notfound ; species doesn't match -.asm_44848 - xor a - ret -; 0x4484a +; check ID number + ld bc, PartyMon1ID - PartyMon1Species + add hl, bc ; now hl points to ID number + ld a, [PlayerID] + cp [hl] + jr nz, .notfound ; ID doesn't match + inc hl + ld a, [PlayerID + 1] + cp [hl] + jr nz, .notfound ; ID doesn't match -Function4484a: ; 0x4484a - ld hl, MenuData44964 - call Function1d35 - call Function1d81 - call Function1c07 - jr c, .asm_44860 - ld a, [$cfa9] - dec a - ld hl, $4861 - rst JumpTable +; check OT +; This only checks five characters, which is fine for the Japanese version, +; but in the English version the player name is 7 characters, so this is wrong. -.asm_44860 - ret -; 0x44861 + ld hl, PlayerName -.JumpTable - dw .ReadMail - dw .PutInPack - dw .AttachMail - dw .Cancel + ld a, [de] + cp [hl] + jr nz, .notfound + cp "@" + jr z, .found ; reached end of string + inc hl + inc de -.ReadMail ; 0x44869 - call FadeToMenu - ld a, [MenuSelection] - dec a - ld b, a - call $45f4 - jp $2b3c -; 0x44877 + ld a, [de] + cp [hl] + jr nz, .notfound + cp $50 + jr z, .found + inc hl + inc de -.PutInPack ; 0x44877 - ld hl, .MessageLostText - call $1d4f - call $1dcf - call Function1c07 - ret c - ld a, [MenuSelection] - dec a - call .Function448bb - ld a, $1 - ld [$d10c], a - ld hl, NumItems - call $2f66 - jr c, .asm_4489e - ld hl, .PackFullText - jp $1d67 + ld a, [de] + cp [hl] + jr nz, .notfound + cp $50 + jr z, .found + inc hl + inc de -.asm_4489e - ld a, [MenuSelection] - dec a - ld b, a - call $45c0 - ld hl, .PutAwayText - jp $1d67 -; 0x448ac + ld a, [de] + cp [hl] + jr nz, .notfound + cp $50 + jr z, .found + inc hl + inc de -.PutAwayText ; 0x448ac - TX_FAR ClearedMailPutAwayText - db "@" + ld a, [de] + cp [hl] + jr z, .found -.PackFullText ; 0x448b1 - TX_FAR MailPackFullText - db "@" +.notfound + pop de + pop hl + pop bc + and a ; clear carry + ret +.found + pop de + pop hl + pop bc + scf + ret -.MessageLostText ; 0x448b6 - TX_FAR MailMessageLostText - db "@" +; 0x4a810 +INCBIN "baserom.gbc", $4a810, $4a83a - $4a810 -.Function448bb: ; 0x448bb - push af - ld a, $0 - call GetSRAMBank - pop af - ld hl, $a863 - ld bc, $002f - call AddNTimes +UpdateOTPointer: ; 0x4a83a + push hl + ld hl, PartyMon2OT - PartyMon1OT + add hl, bc + ld b, h + ld c, l + pop hl + ret +; 0x4a843 + +INCBIN "baserom.gbc", $4a843, $4ae78 - $4a843 + + +SECTION "bank13",DATA,BANK[$13] + +Function4c000: ; 4c000 + ld hl, TileMap + ld de, AttrMap + ld b, $12 +.asm_4c008 + push bc + ld c, $14 +.asm_4c00b ld a, [hl] - ld [CurItem], a - jp CloseSRAM -; 0x448d2 + push hl + srl a + jr c, .asm_4c021 + ld hl, TileSetPalettes + add [hl] + ld l, a + ld a, [$d1e7] + adc $0 + ld h, a + ld a, [hl] + and $f + jr .asm_4c031 -.AttachMail ; 0x448d2 - call FadeToMenu - xor a - ld [PartyMenuActionText], a - call WhiteBGMap -.asm_448dc - ld a, $14 - ld hl, $404f - rst $8 - ld a, $14 - ld hl, $4405 - rst $8 - ld a, $14 - ld hl, $43e0 - rst $8 - ld a, $14 - ld hl, PickedFruitTree - rst $8 - ld a, $14 - ld hl, $449a - rst $8 - call WaitBGMap - call Function32f9 - call DelayFrame - ld a, $14 - ld hl, $4457 - rst $8 - jr c, .asm_44939 - ld a, [CurPartySpecies] - cp $fd - jr z, .asm_44923 - ld a, $1 - call GetPartyParamLocation +.asm_4c021 + ld hl, TileSetPalettes + add [hl] + ld l, a + ld a, [$d1e7] + adc $0 + ld h, a ld a, [hl] - and a - jr z, .asm_4492b - ld hl, .HoldingMailText - call PrintText - jr .asm_448dc + swap a + and $f -.asm_44923 - ld hl, .EggText - call PrintText - jr .asm_448dc +.asm_4c031 + pop hl + ld [de], a + res 7, [hl] + inc hl + inc de + dec c + jr nz, .asm_4c00b + pop bc + dec b + jr nz, .asm_4c008 + ret +; 4c03f -.asm_4492b - ld a, [MenuSelection] - dec a - ld b, a - call $4607 - ld hl, .MailMovedText - call PrintText +INCBIN "baserom.gbc", $4c03f, $4c075 - $4c03f -.asm_44939 - jp $2b3c -; 0x4493c +Tileset03PalMap: ; 0x4c075 +INCBIN "tilesets/03_palette_map.bin" +; 0x4c0e5 + +Tileset00PalMap: ; 0x4c0e5 +Tileset01PalMap: ; 0x4c0e5 +INCBIN "tilesets/01_palette_map.bin" +; 0x4c155 -.HoldingMailText ; 0x4493c - TX_FAR MailAlreadyHoldingItemText - db "@" +Tileset02PalMap: ; 0x4c155 +INCBIN "tilesets/02_palette_map.bin" +; 0x4c1c5 -.EggText ; 0x44941 - TX_FAR MailEggText - db "@" +Tileset05PalMap: ; 0x4c1c5 +INCBIN "tilesets/05_palette_map.bin" +; 0x4c235 -.MailMovedText ; 0x44946 - TX_FAR MailMovedFromBoxText - db "@" +Tileset06PalMap: ; 0x4c235 +INCBIN "tilesets/06_palette_map.bin" +; 0x4c2a5 -.Cancel - ret +Tileset07PalMap: ; 0x4c2a5 +INCBIN "tilesets/07_palette_map.bin" +; 0x4c315 -MenuData4494c: ; 0x4494c - db %01000000 ; flags - db 1, 8 ; start coords - db $a, $12 ; end coords - dw .MenuData2 - db 1 ; default option +Tileset08PalMap: ; 0x4c315 +INCBIN "tilesets/08_palette_map.bin" +; 0x4c385 -.MenuData2 - db %00010000 ; flags - db 4, 0 ; rows/columns? - db 1 ; horizontal spacing? - dbw 0,$d0f2 ; text pointer - dbw BANK(Function447fb), Function447fb - dbw 0,0 - dbw 0,0 +Tileset09PalMap: ; 0x4c385 +INCBIN "tilesets/09_palette_map.bin" +; 0x4c3f5 -MenuData44964: ; 0x44964 - db %01000000 ; flags - db 0, 0 ; start coords - db 9, $d ; end coords - dw .MenuData2 - db 1 ; default option +Tileset10PalMap: ; 0x4c3f5 +INCBIN "tilesets/10_palette_map.bin" +; 0x4c465 -.MenuData2 - db %10000000 ; flags - db 4 ; items - db "READ MAIL@" - db "PUT IN PACK@" - db "ATTACH MAIL@" - db "CANCEL@" +Tileset11PalMap: ; 0x4c465 +INCBIN "tilesets/11_palette_map.bin" +; 0x4c4d5 -SECTION "bank12",DATA,BANK[$12] +Tileset12PalMap: ; 0x4c4d5 +INCBIN "tilesets/12_palette_map.bin" +; 0x4c545 -INCBIN "baserom.gbc", $48000, $48e9b - $48000 +Tileset13PalMap: ; 0x4c545 +INCBIN "tilesets/13_palette_map.bin" +; 0x4c5b5 -PackFGFX: -INCBIN "gfx/misc/pack_f.2bpp" +Tileset14PalMap: ; 0x4c5b5 +INCBIN "tilesets/14_palette_map.bin" +; 0x4c625 -INCBIN "baserom.gbc", $4925b, $49962 - $4925b +Tileset15PalMap: ; 0x4c625 +INCBIN "tilesets/15_palette_map.bin" +; 0x4c695 -SpecialCelebiGFX: -INCBIN "gfx/special/celebi/leaf.2bpp" -INCBIN "gfx/special/celebi/1.2bpp" -INCBIN "gfx/special/celebi/2.2bpp" -INCBIN "gfx/special/celebi/3.2bpp" -INCBIN "gfx/special/celebi/4.2bpp" +Tileset16PalMap: ; 0x4c695 +INCBIN "tilesets/16_palette_map.bin" +; 0x4c705 -INCBIN "baserom.gbc", $49aa2, $49cdc - $49aa2 +Tileset23PalMap: ; 0x4c705 +INCBIN "tilesets/23_palette_map.bin" +; 0x4c775 -MainMenu: ; 49cdc - xor a - ld [$c2d7], a - call Function49ed0 - ld b, $8 - call GetSGBLayout - call Function32f9 - ld hl, GameTimerPause - res 0, [hl] - call Function49da4 - ld [$cf76], a - call Function49e09 - ld hl, MenuDataHeader_0x49d14 - call Function1d35 - call Function49de4 - call Function1c17 - jr c, .quit - call ClearTileMap - ld a, [MenuSelection] - ld hl, Label49d60 - rst JumpTable - jr MainMenu +Tileset24PalMap: ; 0x4c775 +Tileset30PalMap: ; 0x4c775 +INCBIN "tilesets/30_palette_map.bin" +; 0x4c7e5 -.quit - ret -; 49d14 +Tileset25PalMap: ; 0x4c7e5 +INCBIN "tilesets/25_palette_map.bin" +; 0x4c855 -MenuDataHeader_0x49d14: ; 49d14 - db $40 ; flags - db 00, 00 ; start coords - db 07, 16 ; end coords - dw MenuData2_0x49d1c - db 1 ; default option -; 49d1c +Tileset26PalMap: ; 0x4c855 +Tileset32PalMap: ; 0x4c855 +Tileset33PalMap: ; 0x4c855 +Tileset34PalMap: ; 0x4c855 +Tileset35PalMap: ; 0x4c855 +Tileset36PalMap: ; 0x4c855 +INCBIN "tilesets/36_palette_map.bin" +; 0x4c8c5 -MenuData2_0x49d1c: ; 49d1c - db $80 ; flags - db 0 ; items - dw MainMenuItems - dw $1f79 - dw MainMenuText -; 49d20 +Tileset27PalMap: ; 0x4c8c5 +INCBIN "tilesets/27_palette_map.bin" +; 0x4c935 -MainMenuText: -ContinueText: ; 0x49d24 - db "CONTINUE@" -NewGameText: ; 0x49d2d - db "NEW GAME@" -OptionText: ; 0x49d36 - db "OPTION@" -MysteryGiftText: ; 0x49d3d - db "MYSTERY GIFT@" -MobileText: ; 0x49d4a - db "MOBILE@" -MobileStudiumText: ; 0x49d51 - db "MOBILE STUDIUM@" +Tileset17PalMap: ; 0x4c935 +INCBIN "tilesets/17_palette_map.bin" +; 0x4c9a5 -Label49d60: ; 0x49d60 - dw MainMenu_Continue - dw MainMenu_NewGame - dw MainMenu_Options - dw MainMenu_MysteryGift - dw MainMenu_Mobile - dw MainMenu_MobileStudium -; 0x49d6c +Tileset28PalMap: ; 0x4c9a5 +INCBIN "tilesets/28_palette_map.bin" +; 0x4ca15 -CONTINUE EQU 0 -NEW_GAME EQU 1 -OPTION EQU 2 -MYSTERY_GIFT EQU 3 -MOBILE EQU 4 -MOBILE_STUDIUM EQU 5 +Tileset18PalMap: ; 0x4ca15 +INCBIN "tilesets/18_palette_map.bin" +; 0x4ca85 -MainMenuItems: +Tileset19PalMap: ; 0x4ca85 +INCBIN "tilesets/19_palette_map.bin" +; 0x4caf5 -NewGameMenu: ; 0x49d6c - db 2 - db NEW_GAME - db OPTION - db $ff +Tileset20PalMap: ; 0x4caf5 +INCBIN "tilesets/20_palette_map.bin" +; 0x4cb65 -ContinueMenu: ; 0x49d70 - db 3 - db CONTINUE - db NEW_GAME - db OPTION - db $ff +INCBIN "baserom.gbc", $4cb65, $4cbd5-$4cb65 -MobileMysteryMenu: ; 0x49d75 - db 5 - db CONTINUE - db NEW_GAME - db OPTION - db MYSTERY_GIFT - db MOBILE - db $ff +Tileset29PalMap: ; 0x4cbd5 +INCBIN "tilesets/29_palette_map.bin" +; 0x4cc45 -MobileMenu: ; 0x49d7c - db 4 - db CONTINUE - db NEW_GAME - db OPTION - db MOBILE - db $ff +Tileset31PalMap: ; 0x4cc45 +INCBIN "tilesets/31_palette_map.bin" +; 0x4ccb5 -MobileStudiumMenu: ; 0x49d82 - db 5 - db CONTINUE - db NEW_GAME - db OPTION - db MOBILE - db MOBILE_STUDIUM - db $ff +Tileset21PalMap: ; 0x4ccb5 +INCBIN "tilesets/21_palette_map.bin" +; 0x4cd25 -MysteryMobileStudiumMenu: ; 0x49d89 - db 6 - db CONTINUE - db NEW_GAME - db OPTION - db MYSTERY_GIFT - db MOBILE - db MOBILE_STUDIUM - db $ff +Tileset22PalMap: ; 0x4cd25 +INCBIN "tilesets/22_palette_map.bin" +; 0x4cd95 -MysteryMenu: ; 0x49d91 - db 4 - db CONTINUE - db NEW_GAME - db OPTION - db MYSTERY_GIFT - db $ff +Tileset04PalMap: ; 0x4cd95 +INCBIN "tilesets/04_palette_map.bin" +; 0x4ce05 -MysteryStudiumMenu: ; 0x49d97 - db 5 - db CONTINUE - db NEW_GAME - db OPTION - db MYSTERY_GIFT - db MOBILE_STUDIUM - db $ff +INCBIN "baserom.gbc", $4ce05, $4ce1f - $4ce05 -StudiumMenu: ; 0x49d9e - db 4 - db CONTINUE - db NEW_GAME - db OPTION - db MOBILE_STUDIUM - db $ff +TileTypeTable: ; 4ce1f +; 256 tiletypes +; 00 = land +; 01 = water + db $00, $00, $00, $00, $00, $00, $00, $0f + db $00, $00, $00, $00, $00, $00, $00, $0f + db $00, $00, $1f, $00, $00, $1f, $00, $00 + db $00, $00, $1f, $00, $00, $1f, $00, $00 + db $01, $01, $11, $00, $11, $01, $01, $0f + db $01, $01, $11, $00, $11, $01, $01, $0f + db $01, $01, $01, $01, $01, $01, $01, $01 + db $01, $01, $01, $01, $01, $01, $01, $01 + + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $0f, $00, $00, $00, $00, $00 + db $00, $00, $0f, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + + db $0f, $0f, $0f, $0f, $0f, $00, $00, $00 + db $0f, $0f, $0f, $0f, $0f, $00, $00, $00 + db $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f + db $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + + db $01, $01, $01, $01, $01, $01, $01, $01 + db $01, $01, $01, $01, $01, $01, $01, $01 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $00 + db $00, $00, $00, $00, $00, $00, $00, $0f +; 4cf1f +INCBIN "baserom.gbc", $4cf1f, $4cffe - $4cf1f -Function49da4: ; 49da4 - nop - nop - nop - ld a, [$cfcd] - and a - jr nz, .asm_49db0 - ld a, $0 - ret -.asm_49db0 - ld a, [hCGB] - cp $1 +Function4cffe: ; 4cffe ld a, $1 - ret nz - ld a, $0 call GetSRAMBank - ld a, [$abe5] - cp $ff + ld a, [$a008] + ld b, a + ld a, [$ad0f] + ld c, a call CloseSRAM - jr nz, .asm_49dd6 - ld a, [StatusFlags] - bit 7, a - ld a, $1 - jr z, .asm_49dd1 - jr .asm_49dd1 - -.asm_49dd1 - jr .asm_49dd3 - -.asm_49dd3 - ld a, $1 + ld a, b + cp $63 + jr nz, .asm_4d01b + ld a, c + cp $7f + jr nz, .asm_4d01b + ld c, $1 ret -.asm_49dd6 - ld a, [StatusFlags] - bit 7, a - jr z, .asm_49ddf - jr .asm_49ddf +.asm_4d01b + ld c, $0 + ret +; 4d01e -.asm_49ddf - jr .asm_49de1 +INCBIN "baserom.gbc", $4d01e, $4d15b - $4d01e -.asm_49de1 - ld a, $6 - ret -; 49de4 -Function49de4: ; 49de4 - call SetUpMenu -.asm_49de7 - call Function49e09 - ld a, [$cfa5] - set 5, a - ld [$cfa5], a - call $1f1a - ld a, [$cf73] - cp $2 - jr z, .asm_49e07 - cp $1 - jr z, .asm_49e02 - jr .asm_49de7 +Function4d15b: ; 4d15b + ld hl, EnemyMoveAnimation + ld a, [$d196] + and a + jr z, .asm_4d168 + ld bc, $0030 + add hl, bc -.asm_49e02 - call PlayClickSFX +.asm_4d168 + ld a, [$d197] and a - ret + jr z, .asm_4d170 + inc hl + inc hl -.asm_49e07 - scf +.asm_4d170 + ld de, TileMap + ld b, $12 +.asm_4d175 + ld c, $14 +.asm_4d177 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_4d177 + ld a, l + add $4 + ld l, a + jr nc, .asm_4d184 + inc h + +.asm_4d184 + dec b + jr nz, .asm_4d175 ret -; 49e09 +; 4d188 -Function49e09: ; 49e09 - ld a, [$cfcd] +Function4d188: ; 4d188 + ld a, [hCGB] and a - ret z + jp z, WaitBGMap + ld a, [$c2ce] + cp $0 + jp z, WaitBGMap + ld a, [hBGMapMode] + push af xor a ld [hBGMapMode], a - call Function49e27 - ld hl, Options - ld a, [hl] + ld a, [$ffde] push af - set 4, [hl] - call Function49e3d - pop af - ld [Options], a + xor a + ld [$ffde], a +.asm_4d1a2 + ld a, [rLY] + cp $8f + jr c, .asm_4d1a2 + di ld a, $1 + ld [rVBK], a + ld hl, AttrMap + call $51cb + ld a, $0 + ld [rVBK], a + ld hl, TileMap + call $51cb +.asm_4d1bd + ld a, [rLY] + cp $8f + jr c, .asm_4d1bd + ei + pop af + ld [$ffde], a + pop af ld [hBGMapMode], a ret -; 49e27 +; 4d1cb + +Function4d1cb: ; 4d1cb + ld [hSPBuffer], sp + ld sp, hl + ld a, [$ffd7] + ld h, a + ld l, $0 + ld a, $12 + ld [$ffd3], a + ld b, $2 + ld c, $41 +.asm_4d1dc + pop de +.asm_4d1dd + ld a, [$ff00+c] + and b + jr nz, .asm_4d1dd + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d1e6 + ld a, [$ff00+c] + and b + jr nz, .asm_4d1e6 + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d1ef + ld a, [$ff00+c] + and b + jr nz, .asm_4d1ef + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d1f8 + ld a, [$ff00+c] + and b + jr nz, .asm_4d1f8 + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d201 + ld a, [$ff00+c] + and b + jr nz, .asm_4d201 + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d20a + ld a, [$ff00+c] + and b + jr nz, .asm_4d20a + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d213 + ld a, [$ff00+c] + and b + jr nz, .asm_4d213 + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d21c + ld a, [$ff00+c] + and b + jr nz, .asm_4d21c + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d225 + ld a, [$ff00+c] + and b + jr nz, .asm_4d225 + ld [hl], e + inc l + ld [hl], d + inc l + pop de +.asm_4d22e + ld a, [$ff00+c] + and b + jr nz, .asm_4d22e + ld [hl], e + inc l + ld [hl], d + inc l + ld de, $000c + add hl, de + ld a, [$ffd3] + dec a + ld [$ffd3], a + jr nz, .asm_4d1dc + ld a, [hSPBuffer] + ld l, a + ld a, [$ffda] + ld h, a + ld sp, hl + ret +; 4d249 + +INCBIN "baserom.gbc", $4d249, $4d35b - $4d249 + + +Function4d35b: ; 4d35b + ld h, d + ld l, e + push bc + push hl + call $537e + pop hl + pop bc + ld de, $0939 + add hl, de + inc b + inc b + inc c + inc c + ld a, $7 +.asm_4d36e + push bc + push hl +.asm_4d370 + ld [hli], a + dec c + jr nz, .asm_4d370 + pop hl + ld de, $0014 + add hl, de + pop bc + dec b + jr nz, .asm_4d36e + ret +; 4d37e - -Function49e27: ; 49e27 - call $06e3 - and $80 - jr nz, .asm_49e39 - ld hl, $c5b8 - ld b, $2 - ld c, $12 - call TextBox +Function4d37e: ; 4d37e + push hl + ld a, $76 + ld [hli], a + inc a + call $53ab + inc a + ld [hl], a + pop hl + ld de, $0014 + add hl, de +.asm_4d38d + push hl + ld a, $79 + ld [hli], a + ld a, $7f + call $53ab + ld [hl], $7a + pop hl + ld de, $0014 + add hl, de + dec b + jr nz, .asm_4d38d + ld a, $7b + ld [hli], a + ld a, $7c + call $53ab + ld [hl], $7d ret +; 4d3ab -.asm_49e39 - call SpeechTextBox +Function4d3ab: ; 4d3ab + ld d, c +.asm_4d3ac + ld [hli], a + dec d + jr nz, .asm_4d3ac ret -; 49e3d +; 4d3b1 +INCBIN "baserom.gbc", $4d3b1, $4d596 - $4d3b1 -Function49e3d: ; 49e3d - ld a, [$cfcd] - and a - ret z - call $06e3 - and $80 - jp nz, Function49e75 - call UpdateTime - call GetWeekday - ld b, a - decoord 1, 15 - call Function49e91 - decoord 4, 16 - ld a, [hHours] - ld c, a - ld a, $24 - ld hl, $4b3e - rst FarCall - ld [hl], $9c - inc hl - ld de, hMinutes - ld bc, $8102 - call $3198 - ret -; 49e70 +Tilesets: -; 49e70 - db "min.@" -; 49e75 +Tileset00: ; 0x4d596 + dbw BANK(Tileset00GFX), Tileset00GFX + dbw BANK(Tileset00Meta), Tileset00Meta + dbw BANK(Tileset00Coll), Tileset00Coll + dw Tileset00Anim + dw $0000 + dw Tileset00PalMap -Function49e75: ; 49e75 - hlcoord 1, 14 - ld de, .TimeNotSet - call PlaceString - ret -; 49e7f +Tileset01: ; 0x4d5a5 + dbw BANK(Tileset01GFX), Tileset01GFX + dbw BANK(Tileset01Meta), Tileset01Meta + dbw BANK(Tileset01Coll), Tileset01Coll + dw Tileset01Anim + dw $0000 + dw Tileset01PalMap -.TimeNotSet ; 49e7f - db "TIME NOT SET@" -; 49e8c +Tileset02: ; 0x4d5b4 + dbw BANK(Tileset02GFX), Tileset02GFX + dbw BANK(Tileset02Meta), Tileset02Meta + dbw BANK(Tileset02Coll), Tileset02Coll + dw Tileset02Anim + dw $0000 + dw Tileset02PalMap -UnknownText_0x49e8c: ; 49e8c - text_jump UnknownText_0x1c5182, BANK(UnknownText_0x1c5182) - db "@" -; 49e91 +Tileset03: ; 0x4d5c3 + dbw BANK(Tileset03GFX), Tileset03GFX + dbw BANK(Tileset03Meta), Tileset03Meta + dbw BANK(Tileset03Coll), Tileset03Coll + dw Tileset03Anim + dw $0000 + dw Tileset03PalMap -Function49e91: ; 49e91 - push de - ld hl, .Days - ld a, b - call GetNthString - ld d, h - ld e, l - pop hl - call PlaceString - ld h, b - ld l, c - ld de, .Day - call PlaceString - ret -; 49ea8 +Tileset04: ; 0x4d5d2 + dbw BANK(Tileset04GFX), Tileset04GFX + dbw BANK(Tileset04Meta), Tileset04Meta + dbw BANK(Tileset04Coll), Tileset04Coll + dw Tileset04Anim + dw $0000 + dw Tileset04PalMap -.Days - db "SUN@" - db "MON@" - db "TUES@" - db "WEDNES@" - db "THURS@" - db "FRI@" - db "SATUR@" -.Day - db "DAY@" -; 49ed0 +Tileset05: ; 0x4d5e1 + dbw BANK(Tileset05GFX), Tileset05GFX + dbw BANK(Tileset05Meta), Tileset05Meta + dbw BANK(Tileset05Coll), Tileset05Coll + dw Tileset05Anim + dw $0000 + dw Tileset05PalMap -Function49ed0: ; 49ed0 - xor a - ld [$ffde], a - call ClearTileMap - call Functione5f - call $0e51 - call Function1fbf - ret -; 49ee0 +Tileset06: ; 0x4d5f0 + dbw BANK(Tileset06GFX), Tileset06GFX + dbw BANK(Tileset06Meta), Tileset06Meta + dbw BANK(Tileset06Coll), Tileset06Coll + dw Tileset06Anim + dw $0000 + dw Tileset06PalMap +Tileset07: ; 0x4d5ff + dbw BANK(Tileset07GFX), Tileset07GFX + dbw BANK(Tileset07Meta), Tileset07Meta + dbw BANK(Tileset07Coll), Tileset07Coll + dw Tileset07Anim + dw $0000 + dw Tileset07PalMap -MainMenu_NewGame: ; 49ee0 - callba NewGame - ret -; 49ee7 +Tileset08: ; 0x4d60e + dbw BANK(Tileset08GFX), Tileset08GFX + dbw BANK(Tileset08Meta), Tileset08Meta + dbw BANK(Tileset08Coll), Tileset08Coll + dw Tileset08Anim + dw $0000 + dw Tileset08PalMap -MainMenu_Options: ; 49ee7 - callba OptionsMenu - ret -; 49eee +Tileset09: ; 0x4d61d + dbw BANK(Tileset09GFX), Tileset09GFX + dbw BANK(Tileset09Meta), Tileset09Meta + dbw BANK(Tileset09Coll), Tileset09Coll + dw Tileset09Anim + dw $0000 + dw Tileset09PalMap -MainMenu_Continue: ; 49eee - callba Continue - ret -; 49ef5 +Tileset10: ; 0x4d62c + dbw BANK(Tileset10GFX), Tileset10GFX + dbw BANK(Tileset10Meta), Tileset10Meta + dbw BANK(Tileset10Coll), Tileset10Coll + dw Tileset10Anim + dw $0000 + dw Tileset10PalMap -MainMenu_MysteryGift: ; 49ef5 - callba MysteryGift - ret -; 49efc +Tileset11: ; 0x4d63b + dbw BANK(Tileset11GFX), Tileset11GFX + dbw BANK(Tileset11Meta), Tileset11Meta + dbw BANK(Tileset11Coll), Tileset11Coll + dw Tileset11Anim + dw $0000 + dw Tileset11PalMap -MainMenu_Mobile: ; 49efc - call WhiteBGMap - ld a, MUSIC_MOBILE_ADAPTER_MENU - ld [CurMusic], a - ld de, MUSIC_MOBILE_ADAPTER_MENU - call $66c5 - call WhiteBGMap - call $63a7 - call $6492 - call WhiteBGMap - call $6071 - ld c, $c - call DelayFrames - ld hl, $c4a4 - ld b, $a - ld c, $a - call $4cdc - ld hl, $c4ce - ld de, MobileString1 - call PlaceString - ld hl, $c590 - ld b, $4 - ld c, $12 - call TextBox - xor a - ld de, String_0x49fe9 - ld hl, $c5b9 - call PlaceString - call Function3200 - call Function32f9 - call $1bc9 - ld hl, $cfa9 - ld b, [hl] - push bc - jr .asm_49f5d +Tileset12: ; 0x4d64a + dbw BANK(Tileset12GFX), Tileset12GFX + dbw BANK(Tileset12Meta), Tileset12Meta + dbw BANK(Tileset12Coll), Tileset12Coll + dw Tileset12Anim + dw $0000 + dw Tileset12PalMap -.asm_49f55 - call $1bd3 - ld hl, $cfa9 - ld b, [hl] - push bc +Tileset13: ; 0x4d659 + dbw BANK(Tileset13GFX), Tileset13GFX + dbw BANK(Tileset13Meta), Tileset13Meta + dbw BANK(Tileset13Coll), Tileset13Coll + dw Tileset13Anim + dw $0000 + dw Tileset13PalMap -.asm_49f5d - bit 0, a - jr nz, .asm_49f67 - bit 1, a - jr nz, .asm_49f84 - jr .asm_49f97 +Tileset14: ; 0x4d668 + dbw BANK(Tileset14GFX), Tileset14GFX + dbw BANK(Tileset14Meta), Tileset14Meta + dbw BANK(Tileset14Coll), Tileset14Coll + dw Tileset14Anim + dw $0000 + dw Tileset14PalMap -.asm_49f67 - ld hl, $cfa9 - ld a, [hl] - cp $1 - jp z, $6098 - cp $2 - jp z, $60b9 - cp $3 - jp z, $60c2 - cp $4 - jp z, $6100 - ld a, $1 - call $1ff8 +Tileset15: ; 0x4d677 + dbw BANK(Tileset15GFX), Tileset15GFX + dbw BANK(Tileset15Meta), Tileset15Meta + dbw BANK(Tileset15Coll), Tileset15Coll + dw Tileset15Anim + dw $0000 + dw Tileset15PalMap -.asm_49f84 - pop bc - call WhiteBGMap - call ClearTileMap - ld a, MUSIC_MAIN_MENU - ld [CurMusic], a - ld de, MUSIC_MAIN_MENU - call $66c5 - ret +Tileset16: ; 0x4d686 + dbw BANK(Tileset16GFX), Tileset16GFX + dbw BANK(Tileset16Meta), Tileset16Meta + dbw BANK(Tileset16Coll), Tileset16Coll + dw Tileset16Anim + dw $0000 + dw Tileset16PalMap -.asm_49f97 - ld hl, $cfa9 - ld a, [hl] - dec a - ld hl, MobileStrings2 - call GetNthString - ld d, h - ld e, l - ld hl, $c5a5 - ld b, $4 - ld c, $12 - call ClearBox - ld hl, $c5b9 - call PlaceString - jp .asm_49fb7 +Tileset17: ; 0x4d695 + dbw BANK(Tileset17GFX), Tileset17GFX + dbw BANK(Tileset17Meta), Tileset17Meta + dbw BANK(Tileset17Coll), Tileset17Coll + dw Tileset17Anim + dw $0000 + dw Tileset17PalMap -.asm_49fb7 - call $6071 - pop bc - ld hl, $cfa9 - ld [hl], b - ld b, $a - ld c, $1 - ld hl, $c4b9 - call ClearBox - jp .asm_49f55 -; 49fcc +Tileset18: ; 0x4d6a4 + dbw BANK(Tileset18GFX), Tileset18GFX + dbw BANK(Tileset18Meta), Tileset18Meta + dbw BANK(Tileset18Coll), Tileset18Coll + dw Tileset18Anim + dw $0000 + dw Tileset18PalMap +Tileset19: ; 0x4d6b3 + dbw BANK(Tileset19GFX), Tileset19GFX + dbw BANK(Tileset19Meta), Tileset19Meta + dbw BANK(Tileset19Coll), Tileset19Coll + dw Tileset19Anim + dw $0000 + dw Tileset19PalMap -MobileString1: ; 49fcc - db "めいしフ,ルダー", $4e - db "あいさつ", $4e - db "プロフィール", $4e - db "せ", $1e, "い", $4e - db "もどる@" -; 49fe9 +Tileset20: ; 0x4d6c2 + dbw BANK(Tileset20GFX), Tileset20GFX + dbw BANK(Tileset20Meta), Tileset20Meta + dbw BANK(Tileset20Coll), Tileset20Coll + dw Tileset20Anim + dw $0000 + dw Tileset20PalMap +Tileset21: ; 0x4d6d1 + dbw BANK(Tileset21GFX), Tileset21GFX + dbw BANK(Tileset21Meta), Tileset21Meta + dbw BANK(Tileset21Coll), Tileset21Coll + dw Tileset21Anim + dw $0000 + dw Tileset21PalMap -MobileStrings2: +Tileset22: ; 0x4d6e0 + dbw BANK(Tileset22GFX), Tileset22GFX + dbw BANK(Tileset22Meta), Tileset22Meta + dbw BANK(Tileset22Coll), Tileset22Coll + dw Tileset22Anim + dw $0000 + dw Tileset22PalMap -String_0x49fe9: ; 49fe9 - db "めいし", $1f, "つくったり", $4e - db "ほぞんしておける フ,ルダーです@" -; 4a004 +Tileset23: ; 0x4d6ef + dbw BANK(Tileset23GFX), Tileset23GFX + dbw BANK(Tileset23Meta), Tileset23Meta + dbw BANK(Tileset23Coll), Tileset23Coll + dw Tileset23Anim + dw $0000 + dw Tileset23PalMap -String_0x4a004: ; 4a004 - db "モバイルたいせんや じぶんのめいしで", $4e - db "つかう あいさつ", $1f, "つくります@" -; 4a026 +Tileset24: ; 0x4d6fe + dbw BANK(Tileset24GFX), Tileset24GFX + dbw BANK(Tileset24Meta), Tileset24Meta + dbw BANK(Tileset24Coll), Tileset24Coll + dw Tileset24Anim + dw $0000 + dw Tileset24PalMap -String_0x4a026: ; 4a026 - db "あなた", $25, "じゅうしょや ねんれいの", $4e - db "せ", $1e, "い", $1f, "かえられます@" -; 4a042 +Tileset25: ; 0x4d70d + dbw BANK(Tileset25GFX), Tileset25GFX + dbw BANK(Tileset25Meta), Tileset25Meta + dbw BANK(Tileset25Coll), Tileset25Coll + dw Tileset25Anim + dw $0000 + dw Tileset25PalMap -String_0x4a042: ; 4a042 - db "モバイルセンター", $1d, "せつぞくするとき", $4e - db "ひつような こと", $1f, "きめます@" -; 4a062 +Tileset26: ; 0x4d71c + dbw BANK(Tileset26GFX), Tileset26GFX + dbw BANK(Tileset26Meta), Tileset26Meta + dbw BANK(Tileset26Coll), Tileset26Coll + dw Tileset26Anim + dw $0000 + dw Tileset26PalMap -String_0x4a062: ; 4a062 - db "まえ", $25, "がめん ", $1d, "もどります", $4e - db "@" -; 4a071 +Tileset27: ; 0x4d72b + dbw BANK(Tileset27GFX), Tileset27GFX + dbw BANK(Tileset27Meta), Tileset27Meta + dbw BANK(Tileset27Coll), Tileset27Coll + dw Tileset27Anim + dw $0000 + dw Tileset27PalMap +Tileset28: ; 0x4d73a + dbw BANK(Tileset28GFX), Tileset28GFX + dbw BANK(Tileset28Meta), Tileset28Meta + dbw BANK(Tileset28Coll), Tileset28Coll + dw Tileset28Anim + dw $0000 + dw Tileset28PalMap -INCBIN "baserom.gbc", $4a071, $4a496 - $4a071 +Tileset29: ; 0x4d749 + dbw BANK(Tileset29GFX), Tileset29GFX + dbw BANK(Tileset29Meta), Tileset29Meta + dbw BANK(Tileset29Coll), Tileset29Coll + dw Tileset29Anim + dw $0000 + dw Tileset29PalMap +Tileset30: ; 0x4d758 + dbw BANK(Tileset30GFX), Tileset30GFX + dbw BANK(Tileset30Meta), Tileset30Meta + dbw BANK(Tileset30Coll), Tileset30Coll + dw Tileset30Anim + dw $0000 + dw Tileset30PalMap -MainMenu_MobileStudium: ; 4a496 - ld a, [StartDay] - ld b, a - ld a, [StartHour] - ld c, a - ld a, [StartMinute] - ld d, a - ld a, [StartSecond] - ld e, a - push bc - push de - callba MobileStudium - call WhiteBGMap - pop de - pop bc - ld a, b - ld [StartDay], a - ld a, c - ld [StartHour], a - ld a, d - ld [StartMinute], a - ld a, e - ld [StartSecond], a - ret -; 4a4c4 +Tileset31: ; 0x4d767 + dbw BANK(Tileset31GFX), Tileset31GFX + dbw BANK(Tileset31Meta), Tileset31Meta + dbw BANK(Tileset31Coll), Tileset31Coll + dw Tileset31Anim + dw $0000 + dw Tileset31PalMap +Tileset32: ; 0x4d776 + dbw BANK(Tileset32GFX), Tileset32GFX + dbw BANK(Tileset32Meta), Tileset32Meta + dbw BANK(Tileset32Coll), Tileset32Coll + dw Tileset32Anim + dw $0000 + dw Tileset32PalMap -INCBIN "baserom.gbc", $4a4c4, $4a6e8 - $4a4c4 +Tileset33: ; 0x4d785 + dbw BANK(Tileset33GFX), Tileset33GFX + dbw BANK(Tileset33Meta), Tileset33Meta + dbw BANK(Tileset33Coll), Tileset33Coll + dw Tileset33Anim + dw $0000 + dw Tileset33PalMap +Tileset34: ; 0x4d794 + dbw BANK(Tileset34GFX), Tileset34GFX + dbw BANK(Tileset34Meta), Tileset34Meta + dbw BANK(Tileset34Coll), Tileset34Coll + dw Tileset34Anim + dw $0000 + dw Tileset34PalMap -SpecialBeastsCheck: ; 0x4a6e8 -; Check if the player owns all three legendary beasts. -; They must exist in either party or PC, and have the player's OT and ID. +Tileset35: ; 0x4d7a3 + dbw BANK(Tileset35GFX), Tileset35GFX + dbw BANK(Tileset35Meta), Tileset35Meta + dbw BANK(Tileset35Coll), Tileset35Coll + dw Tileset35Anim + dw $0000 + dw Tileset35PalMap -; outputs: -; ScriptVar is 1 if the Pokémon exist, otherwise 0. +Tileset36: ; 0x4d7b2 + dbw BANK(Tileset36GFX), Tileset36GFX + dbw BANK(Tileset36Meta), Tileset36Meta + dbw BANK(Tileset36Coll), Tileset36Coll + dw Tileset36Anim + dw $0000 + dw Tileset36PalMap - ld a, RAIKOU - ld [ScriptVar], a - call CheckOwnMonAnywhere - jr nc, .notexist +; 0x4d7c1 - ld a, ENTEI - ld [ScriptVar], a - call CheckOwnMonAnywhere - jr nc, .notexist +INCBIN "baserom.gbc", $4d7c1, $4d860 - $4d7c1 - ld a, SUICUNE - ld [ScriptVar], a - call CheckOwnMonAnywhere - jr nc, .notexist +CheckPokerus: ; 4d860 +; Return carry if a monster in your party has Pokerus - ; they exist - ld a, $1 - ld [ScriptVar], a +; Get number of monsters to iterate over + ld a, [PartyCount] + and a + jr z, .NoPokerus + ld b, a +; Check each monster in the party for Pokerus + ld hl, PartyMon1PokerusStatus + ld de, PartyMon2 - PartyMon1 +.Check + ld a, [hl] + and $0f ; only the bottom nybble is used + jr nz, .HasPokerus +; Next PartyMon + add hl, de + dec b + jr nz, .Check +.NoPokerus + and a ret - -.notexist - xor a - ld [ScriptVar], a +.HasPokerus + scf ret +; 4d87a -SpecialMonCheck: ; 0x4a711 -; Check if a Pokémon exists in PC or party. -; It must exist in either party or PC, and have the player's OT and ID. - -; inputs: -; ScriptVar contains species to search for - call CheckOwnMonAnywhere - jr c, .exists +INCBIN "baserom.gbc", $4d87a, $4db3b - $4d87a - ; doesn't exist - xor a - ld [ScriptVar], a - ret -.exists - ld a, $1 - ld [ScriptVar], a - ret +Function4db3b: ; 4db3b + ld hl, $5b44 + call PrintText + jp $1dcf +; 4db44 -CheckOwnMonAnywhere: ; 0x4a721 - ld a, [PartyCount] - and a - ret z ; no pokémon in party +INCBIN "baserom.gbc", $4db44, $4db49 - $4db44 - ld d, a - ld e, $0 - ld hl, PartyMon1Species - ld bc, PartyMon1OT -; run CheckOwnMon on each Pokémon in the party -.loop - call CheckOwnMon - ret c ; found! +Function4db49: ; 4db49 + ld a, [PartyCount] + dec a + ld hl, PartyMon1CaughtLevel + call GetPartyLocation + ld a, [TimeOfDay] + inc a + rrca + rrca + ld b, a + ld a, [CurPartyLevel] + or b + ld [hli], a + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + cp $1 + jr nz, .asm_4db78 + ld a, b + cp $14 + jr nz, .asm_4db78 + ld a, [BackupMapGroup] + ld b, a + ld a, [BackupMapNumber] + ld c, a - push bc - ld bc, PartyMon2 - PartyMon1 - add hl, bc - pop bc - call UpdateOTPointer - dec d - jr nz, .loop ; 0x4a73d $f0 +.asm_4db78 + call GetWorldMapLocation + ld b, a + ld a, [PlayerGender] + rrca + or b + ld [hl], a + ret +; 4db83 -; XXX the below could use some cleanup -; run CheckOwnMon on each Pokémon in the PC +Function4db83: ; 4db83 ld a, $1 call GetSRAMBank - ld a, [$ad10] - and a - jr z, .asm_4a766 ; 0x4a748 $1c - ld d, a - ld hl, $ad26 - ld bc, $afa6 -.asm_4a751 - call CheckOwnMon - jr nc, .asm_4a75a ; 0x4a754 $4 + ld hl, $ad43 + call $5b53 call CloseSRAM ret -.asm_4a75a +; 4db92 + +Function4db92: ; 4db92 push bc - ld bc, $0020 - add hl, bc - pop bc - call UpdateOTPointer - dec d - jr nz, .asm_4a751 ; 0x4a764 $eb -.asm_4a766 - call CloseSRAM - ld c, $0 -.asm_4a76b - ld a, [$db72] - and $f - cp c - jr z, .asm_4a7af ; 0x4a771 $3c - ld hl, $6810 - ld b, $0 - add hl, bc - add hl, bc - add hl, bc - ld a, [hli] + ld a, $1 call GetSRAMBank - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [hl] - and a - jr z, .asm_4a7af ; 0x4a784 $29 - push bc - push hl - ld de, $0016 - add hl, de - ld d, h - ld e, l - pop hl - push de - ld de, $0296 - add hl, de - ld b, h - ld c, l - pop hl - ld d, a -.asm_4a798 - call CheckOwnMon - jr nc, .asm_4a7a2 ; 0x4a79b $5 + ld hl, $ad43 pop bc + call $5baf call CloseSRAM ret -.asm_4a7a2 +; 4dba3 + +Function4dba3: ; 4dba3 + ld a, [PartyCount] + dec a + ld hl, PartyMon1CaughtLevel push bc - ld bc, $0020 - add hl, bc - pop bc - call UpdateOTPointer - dec d - jr nz, .asm_4a798 ; 0x4a7ac $ea + call GetPartyLocation pop bc -.asm_4a7af - inc c - ld a, c - cp $e - jr c, .asm_4a76b ; 0x4a7b3 $b6 - call CloseSRAM - and a ; clear carry + xor a + ld [hli], a + ld a, $7e + rrc b + or b + ld [hl], a ret +; 4dbb8 -CheckOwnMon: ; 0x4a7ba -; Check if a Pokémon belongs to the player and is of a specific species. - -; inputs: -; hl, pointer to PartyMonNSpecies -; bc, pointer to PartyMonNOT -; ScriptVar should contain the species we're looking for - -; outputs: -; sets carry if monster matches species, ID, and OT name. +INCBIN "baserom.gbc", $4dbb8, $4dc8a - $4dbb8 +StatsScreenInit: ; 4dc8a + ld hl, StatsScreenMain + jr .gotaddress + ld hl, $5cf7 + jr .gotaddress +.gotaddress + ld a, [$ffde] + push af + xor a + ld [$ffde], a ; disable overworld tile animations + ld a, [$c2c6] ; whether sprite is to be mirrorred + push af + ld a, [$cf63] + ld b, a + ld a, [$cf64] + ld c, a push bc push hl - push de - ld d, b - ld e, c - -; check species - ld a, [ScriptVar] ; species we're looking for - ld b, [hl] ; species we have - cp b - jr nz, .notfound ; species doesn't match - -; check ID number - ld bc, PartyMon1ID - PartyMon1Species - add hl, bc ; now hl points to ID number - ld a, [PlayerID] - cp [hl] - jr nz, .notfound ; ID doesn't match - inc hl - ld a, [PlayerID + 1] - cp [hl] - jr nz, .notfound ; ID doesn't match - -; check OT -; This only checks five characters, which is fine for the Japanese version, -; but in the English version the player name is 7 characters, so this is wrong. - - ld hl, PlayerName - - ld a, [de] - cp [hl] - jr nz, .notfound - cp "@" - jr z, .found ; reached end of string - inc hl - inc de - - ld a, [de] - cp [hl] - jr nz, .notfound - cp $50 - jr z, .found - inc hl - inc de - - ld a, [de] - cp [hl] - jr nz, .notfound - cp $50 - jr z, .found - inc hl - inc de - - ld a, [de] - cp [hl] - jr nz, .notfound - cp $50 - jr z, .found - inc hl - inc de - - ld a, [de] - cp [hl] - jr z, .found - -.notfound - pop de - pop hl - pop bc - and a ; clear carry - ret -.found - pop de + call WhiteBGMap + call ClearTileMap + call $1ad2 + ld a, $3e + ld hl, $753e + rst FarCall ; this loads graphics pop hl + call JpHl + call WhiteBGMap + call ClearTileMap pop bc - scf + ; restore old values + ld a, b + ld [$cf63], a + ld a, c + ld [$cf64], a + pop af + ld [$c2c6], a + pop af + ld [$ffde], a ret +; 0x4dcd2 -; 0x4a810 -INCBIN "baserom.gbc", $4a810, $4a83a - $4a810 - -UpdateOTPointer: ; 0x4a83a - push hl - ld hl, PartyMon2OT - PartyMon1OT - add hl, bc - ld b, h - ld c, l - pop hl +StatsScreenMain: ; 0x4dcd2 + xor a + ld [$cf63], a + ld [$cf64], a + ld a, [$cf64] + and $fc + or $1 + ld [$cf64], a +.loop ; 4dce3 + ld a, [$cf63] + and $7f + ld hl, StatsScreenPointerTable + rst JumpTable + call $5d3a ; check for keys? + ld a, [$cf63] + bit 7, a + jr z, .loop ret -; 0x4a843 - -INCBIN "baserom.gbc", $4a843, $4ae78 - $4a843 - - -SECTION "bank13",DATA,BANK[$13] - -INCBIN "baserom.gbc", $4c000, $4c075 - $4c000 - -Tileset03PalMap: ; 0x4c075 -INCBIN "tilesets/03_palette_map.bin" -; 0x4c0e5 - -Tileset00PalMap: ; 0x4c0e5 -Tileset01PalMap: ; 0x4c0e5 -INCBIN "tilesets/01_palette_map.bin" -; 0x4c155 - -Tileset02PalMap: ; 0x4c155 -INCBIN "tilesets/02_palette_map.bin" -; 0x4c1c5 - -Tileset05PalMap: ; 0x4c1c5 -INCBIN "tilesets/05_palette_map.bin" -; 0x4c235 +; 0x4dcf7 -Tileset06PalMap: ; 0x4c235 -INCBIN "tilesets/06_palette_map.bin" -; 0x4c2a5 +INCBIN "baserom.gbc", $4dcf7, $4dd2a - $4dcf7 -Tileset07PalMap: ; 0x4c2a5 -INCBIN "tilesets/07_palette_map.bin" -; 0x4c315 +StatsScreenPointerTable: ; 4dd2a + dw $5d72 ; regular pokémon + dw EggStatsInit ; egg + dw $5de6 + dw $5dac + dw $5dc6 + dw $5de6 + dw $5dd6 + dw $5d6c -Tileset08PalMap: ; 0x4c315 -INCBIN "tilesets/08_palette_map.bin" -; 0x4c385 +; 4dd3a -Tileset09PalMap: ; 0x4c385 -INCBIN "tilesets/09_palette_map.bin" -; 0x4c3f5 +INCBIN "baserom.gbc", $4dd3a, $4dda1 - $4dd3a -Tileset10PalMap: ; 0x4c3f5 -INCBIN "tilesets/10_palette_map.bin" -; 0x4c465 +EggStatsInit: ; 4dda1 + call EggStatsScreen + ld a, [$cf63] + inc a + ld [$cf63], a + ret +; 0x4ddac -Tileset11PalMap: ; 0x4c465 -INCBIN "tilesets/11_palette_map.bin" -; 0x4c4d5 +INCBIN "baserom.gbc", $4ddac, $4e21e - $4ddac -Tileset12PalMap: ; 0x4c4d5 -INCBIN "tilesets/12_palette_map.bin" -; 0x4c545 +IDNoString: ; 4e21e + db $73, "№.@" -Tileset13PalMap: ; 0x4c545 -INCBIN "tilesets/13_palette_map.bin" -; 0x4c5b5 +OTString: ; 4e222 + db "OT/@" +; 4e226 -Tileset14PalMap: ; 0x4c5b5 -INCBIN "tilesets/14_palette_map.bin" -; 0x4c625 +INCBIN "baserom.gbc", $4e226, $4e33a - $4e226 -Tileset15PalMap: ; 0x4c625 -INCBIN "tilesets/15_palette_map.bin" -; 0x4c695 +EggStatsScreen: ; 4e33a + xor a + ld [hBGMapMode], a + ld hl, $cda1 + call SetHPPal + ld b, $3 + call GetSGBLayout + call $5f8f + ld de, EggString + hlcoord 8, 1 ; $c4bc + call PlaceString + ld de, IDNoString + hlcoord 8, 3 ; $c4e4 + call PlaceString + ld de, OTString + hlcoord 8, 5 ; $c50c + call PlaceString + ld de, FiveQMarkString + hlcoord 11, 3 ; $c4e7 + call PlaceString + ld de, FiveQMarkString + hlcoord 11, 5 ; $c50f + call PlaceString + ld a, [TempMonHappiness] ; egg status + ld de, EggSoonString + cp $6 + jr c, .picked + ld de, EggCloseString + cp $b + jr c, .picked + ld de, EggMoreTimeString + cp $29 + jr c, .picked + ld de, EggALotMoreTimeString +.picked + hlcoord 1, 9 ; $c555 + call PlaceString + ld hl, $cf64 + set 5, [hl] + call Function32f9 ; pals + call DelayFrame + ld hl, TileMap + call $3786 + ld a, $41 + ld hl, $402d + rst FarCall + call $6497 -Tileset16PalMap: ; 0x4c695 -INCBIN "tilesets/16_palette_map.bin" -; 0x4c705 + ld a, [TempMonHappiness] + cp 6 + ret nc + ld de, SFX_2_BOOPS + call StartSFX + ret +; 0x4e3c0 -Tileset23PalMap: ; 0x4c705 -INCBIN "tilesets/23_palette_map.bin" -; 0x4c775 +EggString: ; 4e3c0 + db "EGG@" -Tileset24PalMap: ; 0x4c775 -Tileset30PalMap: ; 0x4c775 -INCBIN "tilesets/30_palette_map.bin" -; 0x4c7e5 +FiveQMarkString: ; 4e3c4 + db "?????@" -Tileset25PalMap: ; 0x4c7e5 -INCBIN "tilesets/25_palette_map.bin" -; 0x4c855 +EggSoonString: ; 0x4e3ca + db "It's making sounds", $4e, "inside. It's going", $4e, "to hatch soon!@" -Tileset26PalMap: ; 0x4c855 -Tileset32PalMap: ; 0x4c855 -Tileset33PalMap: ; 0x4c855 -Tileset34PalMap: ; 0x4c855 -Tileset35PalMap: ; 0x4c855 -Tileset36PalMap: ; 0x4c855 -INCBIN "tilesets/36_palette_map.bin" -; 0x4c8c5 +EggCloseString: ; 0x4e3fd + db "It moves around", $4e, "inside sometimes.", $4e, "It must be close", $4e, "to hatching.@" -Tileset27PalMap: ; 0x4c8c5 -INCBIN "tilesets/27_palette_map.bin" -; 0x4c935 +EggMoreTimeString: ; 0x4e43d + db "Wonder what's", $4e, "inside? It needs", $4e, "more time, though.@" -Tileset17PalMap: ; 0x4c935 -INCBIN "tilesets/17_palette_map.bin" -; 0x4c9a5 +EggALotMoreTimeString: ; 0x4e46e + db "This EGG needs a", $4e, "lot more time to", $4e, "hatch.@" -Tileset28PalMap: ; 0x4c9a5 -INCBIN "tilesets/28_palette_map.bin" -; 0x4ca15 +; 0x4e497 -Tileset18PalMap: ; 0x4ca15 -INCBIN "tilesets/18_palette_map.bin" -; 0x4ca85 +INCBIN "baserom.gbc", $4e497, $4e53f - $4e497 -Tileset19PalMap: ; 0x4ca85 -INCBIN "tilesets/19_palette_map.bin" -; 0x4caf5 -Tileset20PalMap: ; 0x4caf5 -INCBIN "tilesets/20_palette_map.bin" -; 0x4cb65 +Function4e53f: ; 4e53f + ld hl, $0022 + add hl, bc + ld a, [hli] + or [hl] + jr z, .asm_4e552 + ld hl, $0020 + add hl, bc + ld a, [hl] + and $27 + jr nz, .asm_4e552 + and a + ret -INCBIN "baserom.gbc", $4cb65, $4cbd5-$4cb65 +.asm_4e552 + scf + ret +; 4e554 -Tileset29PalMap: ; 0x4cbd5 -INCBIN "tilesets/29_palette_map.bin" -; 0x4cc45 +INCBIN "baserom.gbc", $4e554, $4e5e1 - $4e554 -Tileset31PalMap: ; 0x4cc45 -INCBIN "tilesets/31_palette_map.bin" -; 0x4ccb5 -Tileset21PalMap: ; 0x4ccb5 -INCBIN "tilesets/21_palette_map.bin" -; 0x4cd25 +Function4e5e1: ; 4e5e1 + push hl + push de + push bc + ld a, [CurSpecies] + push af + ld a, [rOBP0] + push af + ld a, [BaseDexNo] + push af + call $6607 + pop af + ld [BaseDexNo], a + pop af + ld [rOBP0], a + pop af + ld [CurSpecies], a + pop bc + pop de + pop hl + ld a, [$d1ed] + and a + ret z + scf + ret +; 4e607 -Tileset22PalMap: ; 0x4cd25 -INCBIN "tilesets/22_palette_map.bin" -; 0x4cd95 +Function4e607: ; 4e607 + ld a, $e4 + ld [rOBP0], a + ld de, $0000 + call StartMusic + callba Function8cf53 + ld de, $6831 + ld hl, VTiles0 + ld bc, $1308 + call Functioneba + xor a + ld [Danger], a + call WaitBGMap + xor a + ld [hBGMapMode], a + ld a, [MagikarpLength] + ld [PlayerHPPal], a + ld c, $0 + call $6703 + ld a, [MagikarpLength] + ld [CurPartySpecies], a + ld [CurSpecies], a + call $6708 + ld de, VTiles2 + ld hl, $9310 + ld bc, $0031 + call Functioneba + ld a, $31 + ld [$d1ec], a + call $6755 + ld a, [Buffer2] + ld [CurPartySpecies], a + ld [CurSpecies], a + call $6711 + ld a, [MagikarpLength] + ld [CurPartySpecies], a + ld [CurSpecies], a + ld a, $1 + ld [hBGMapMode], a + call $6794 + jr c, .asm_4e67c + ld a, [MagikarpLength] + call $37ce -Tileset04PalMap: ; 0x4cd95 -INCBIN "tilesets/04_palette_map.bin" -; 0x4ce05 +.asm_4e67c + ld de, $0022 + call StartMusic + ld c, $50 + call DelayFrames + ld c, $1 + call $6703 + call $6726 + jr c, .asm_4e6df + ld a, $cf + ld [$d1ec], a + call $6755 + xor a + ld [$d1ed], a + ld a, [Buffer2] + ld [PlayerHPPal], a + ld c, $0 + call $6703 + call $67a6 + callba Function8cf53 + call $6794 + jr c, .asm_4e6de + ld a, [$c2c6] + push af + ld a, $1 + ld [$c2c6], a + ld a, [CurPartySpecies] + push af + ld a, [PlayerHPPal] + ld [CurPartySpecies], a + ld hl, $c4cf + ld d, $0 + ld e, $4 + ld a, $47 + call Predef + pop af + ld [CurPartySpecies], a + pop af + ld [$c2c6], a + ret -INCBIN "baserom.gbc", $4ce05, $4ce1f - $4ce05 +.asm_4e6de + ret -TileTypeTable: ; 4ce1f -; 256 tiletypes -; 00 = land -; 01 = water - db $00, $00, $00, $00, $00, $00, $00, $0f - db $00, $00, $00, $00, $00, $00, $00, $0f - db $00, $00, $1f, $00, $00, $1f, $00, $00 - db $00, $00, $1f, $00, $00, $1f, $00, $00 - db $01, $01, $11, $00, $11, $01, $01, $0f - db $01, $01, $11, $00, $11, $01, $01, $0f - db $01, $01, $01, $01, $01, $01, $01, $01 - db $01, $01, $01, $01, $01, $01, $01, $01 - - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $0f, $00, $00, $00, $00, $00 - db $00, $00, $0f, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - - db $0f, $0f, $0f, $0f, $0f, $00, $00, $00 - db $0f, $0f, $0f, $0f, $0f, $00, $00, $00 - db $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f - db $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - - db $01, $01, $01, $01, $01, $01, $01, $01 - db $01, $01, $01, $01, $01, $01, $01, $01 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $00 - db $00, $00, $00, $00, $00, $00, $00, $0f -; 4cf1f +.asm_4e6df + ld a, $1 + ld [$d1ed], a + ld a, [MagikarpLength] + ld [PlayerHPPal], a + ld c, $0 + call $6703 + call $67a6 + callba Function8cf53 + call $6794 + ret c + ld a, [PlayerHPPal] + call $37ce + ret +; 4e703 -INCBIN "baserom.gbc", $4cf1f, $4d596 - $4cf1f +Function4e703: ; 4e703 + ld b, $b + jp GetSGBLayout +; 4e708 -Tilesets: +Function4e708: ; 4e708 + call GetBaseData + ld hl, $c4cf + jp $3786 +; 4e711 -Tileset00: ; 0x4d596 - dbw BANK(Tileset00GFX), Tileset00GFX - dbw BANK(Tileset00Meta), Tileset00Meta - dbw BANK(Tileset00Coll), Tileset00Coll - dw Tileset00Anim - dw $0000 - dw Tileset00PalMap +Function4e711: ; 4e711 + call GetBaseData + ld a, $1 + ld [$c2c6], a + ld de, VTiles2 + ld a, $3e + call Predef + xor a + ld [$c2c6], a + ret +; 4e726 -Tileset01: ; 0x4d5a5 - dbw BANK(Tileset01GFX), Tileset01GFX - dbw BANK(Tileset01Meta), Tileset01Meta - dbw BANK(Tileset01Coll), Tileset01Coll - dw Tileset01Anim - dw $0000 - dw Tileset01PalMap +Function4e726: ; 4e726 + call ClearJoypadPublic + ld bc, $010e +.asm_4e72c + push bc + call $6779 + pop bc + jr c, .asm_4e73f + push bc + call $6741 + pop bc + inc b + dec c + dec c + jr nz, .asm_4e72c + and a + ret -Tileset02: ; 0x4d5b4 - dbw BANK(Tileset02GFX), Tileset02GFX - dbw BANK(Tileset02Meta), Tileset02Meta - dbw BANK(Tileset02Coll), Tileset02Coll - dw Tileset02Anim - dw $0000 - dw Tileset02PalMap +.asm_4e73f + scf + ret +; 4e741 -Tileset03: ; 0x4d5c3 - dbw BANK(Tileset03GFX), Tileset03GFX - dbw BANK(Tileset03Meta), Tileset03Meta - dbw BANK(Tileset03Coll), Tileset03Coll - dw Tileset03Anim - dw $0000 - dw Tileset03PalMap +Function4e741: ; 4e741 +.asm_4e741 + ld a, $cf + ld [$d1ec], a + call $6755 + ld a, $31 + ld [$d1ec], a + call $6755 + dec b + jr nz, .asm_4e741 + ret +; 4e755 -Tileset04: ; 0x4d5d2 - dbw BANK(Tileset04GFX), Tileset04GFX - dbw BANK(Tileset04Meta), Tileset04Meta - dbw BANK(Tileset04Coll), Tileset04Coll - dw Tileset04Anim - dw $0000 - dw Tileset04PalMap +Function4e755: ; 4e755 + push bc + xor a + ld [hBGMapMode], a + ld hl, $c4cf + ld bc, $0707 + ld de, $000d +.asm_4e762 + push bc +.asm_4e763 + ld a, [$d1ec] + add [hl] + ld [hli], a + dec c + jr nz, .asm_4e763 + pop bc + add hl, de + dec b + jr nz, .asm_4e762 + ld a, $1 + ld [hBGMapMode], a + call WaitBGMap + pop bc + ret +; 4e779 -Tileset05: ; 0x4d5e1 - dbw BANK(Tileset05GFX), Tileset05GFX - dbw BANK(Tileset05Meta), Tileset05Meta - dbw BANK(Tileset05Coll), Tileset05Coll - dw Tileset05Anim - dw $0000 - dw Tileset05PalMap +Function4e779: ; 4e779 +.asm_4e779 + call DelayFrame + push bc + call Functiona57 + ld a, [hJoyDown] + pop bc + and $2 + jr nz, .asm_4e78c +.asm_4e787 + dec c + jr nz, .asm_4e779 + and a + ret -Tileset06: ; 0x4d5f0 - dbw BANK(Tileset06GFX), Tileset06GFX - dbw BANK(Tileset06Meta), Tileset06Meta - dbw BANK(Tileset06Coll), Tileset06Coll - dw Tileset06Anim - dw $0000 - dw Tileset06PalMap +.asm_4e78c + ld a, [$d1e9] + and a + jr nz, .asm_4e787 + scf + ret +; 4e794 -Tileset07: ; 0x4d5ff - dbw BANK(Tileset07GFX), Tileset07GFX - dbw BANK(Tileset07Meta), Tileset07Meta - dbw BANK(Tileset07Coll), Tileset07Coll - dw Tileset07Anim - dw $0000 - dw Tileset07PalMap +Function4e794: ; 4e794 + ld a, [CurPartyMon] + ld hl, PartyMon1Species + call GetPartyLocation + ld b, h + ld c, l + ld a, $13 + ld hl, $653f + rst FarCall + ret +; 4e7a6 -Tileset08: ; 0x4d60e - dbw BANK(Tileset08GFX), Tileset08GFX - dbw BANK(Tileset08Meta), Tileset08Meta - dbw BANK(Tileset08Coll), Tileset08Coll - dw Tileset08Anim - dw $0000 - dw Tileset08PalMap +Function4e7a6: ; 4e7a6 + ld a, [$d1ed] + and a + ret nz + ld de, $00a4 + call StartSFX + ld hl, $cf63 + ld a, [hl] + push af + ld [hl], $0 +.asm_4e7b8 + call $67cf + jr nc, .asm_4e7c2 + call $680c + jr .asm_4e7b8 -Tileset09: ; 0x4d61d - dbw BANK(Tileset09GFX), Tileset09GFX - dbw BANK(Tileset09Meta), Tileset09Meta - dbw BANK(Tileset09Coll), Tileset09Coll - dw Tileset09Anim - dw $0000 - dw Tileset09PalMap +.asm_4e7c2 + ld c, $20 +.asm_4e7c4 + call $680c + dec c + jr nz, .asm_4e7c4 + pop af + ld [$cf63], a + ret +; 4e7cf -Tileset10: ; 0x4d62c - dbw BANK(Tileset10GFX), Tileset10GFX - dbw BANK(Tileset10Meta), Tileset10Meta - dbw BANK(Tileset10Coll), Tileset10Coll - dw Tileset10Anim - dw $0000 - dw Tileset10PalMap +Function4e7cf: ; 4e7cf + ld hl, $cf63 + ld a, [hl] + cp $20 + ret nc + ld d, a + inc [hl] + and $1 + jr nz, .asm_4e7e6 + ld e, $0 + call $67e8 + ld e, $10 + call $67e8 -Tileset11: ; 0x4d63b - dbw BANK(Tileset11GFX), Tileset11GFX - dbw BANK(Tileset11Meta), Tileset11Meta - dbw BANK(Tileset11Coll), Tileset11Coll - dw Tileset11Anim - dw $0000 - dw Tileset11PalMap +.asm_4e7e6 + scf + ret +; 4e7e8 -Tileset12: ; 0x4d64a - dbw BANK(Tileset12GFX), Tileset12GFX - dbw BANK(Tileset12Meta), Tileset12Meta - dbw BANK(Tileset12Coll), Tileset12Coll - dw Tileset12Anim - dw $0000 - dw Tileset12PalMap +Function4e7e8: ; 4e7e8 + push de + ld de, $4858 + ld a, $13 + call Function3b2a + ld hl, $000b + add hl, bc + ld a, [$cf63] + and $e + sla a + pop de + add e + ld [hl], a + ld hl, $0003 + add hl, bc + ld [hl], $0 + ld hl, $000c + add hl, bc + ld [hl], $10 + ret +; 4e80c -Tileset13: ; 0x4d659 - dbw BANK(Tileset13GFX), Tileset13GFX - dbw BANK(Tileset13Meta), Tileset13Meta - dbw BANK(Tileset13Coll), Tileset13Coll - dw Tileset13Anim - dw $0000 - dw Tileset13PalMap +Function4e80c: ; 4e80c + push bc + callab Function8cf69 + ld a, [$ff9b] + and $e + srl a + inc a + inc a + and $7 + ld b, a + ld hl, $c403 + ld c, $28 +.asm_4e823 + ld a, [hl] + or b + ld [hli], a + inc hl + inc hl + inc hl + dec c + jr nz, .asm_4e823 + pop bc + call DelayFrame + ret +; 4e831 -Tileset14: ; 0x4d668 - dbw BANK(Tileset14GFX), Tileset14GFX - dbw BANK(Tileset14Meta), Tileset14Meta - dbw BANK(Tileset14Coll), Tileset14Coll - dw Tileset14Anim - dw $0000 - dw Tileset14PalMap -Tileset15: ; 0x4d677 - dbw BANK(Tileset15GFX), Tileset15GFX - dbw BANK(Tileset15Meta), Tileset15Meta - dbw BANK(Tileset15Coll), Tileset15Coll - dw Tileset15Anim - dw $0000 - dw Tileset15PalMap +EvolutionGFX: +INCBIN "gfx/evo/bubble_large.2bpp" +INCBIN "gfx/evo/bubble.2bpp" -Tileset16: ; 0x4d686 - dbw BANK(Tileset16GFX), Tileset16GFX - dbw BANK(Tileset16Meta), Tileset16Meta - dbw BANK(Tileset16Coll), Tileset16Coll - dw Tileset16Anim - dw $0000 - dw Tileset16PalMap +Function4e881: ; 4e881 + call WhiteBGMap + call ClearTileMap + call ClearSprites + call DisableLCD + call $0e51 + call $0e58 + ld hl, VBGMap0 + ld bc, VBlank5 + ld a, $7f + call ByteFill + ld hl, AttrMap + ld bc, $0168 + xor a + call ByteFill + xor a + ld [$ffd0], a + ld [$ffcf], a + call EnableLCD + ld hl, $68bd + call PrintText + call Function3200 + call Function32f9 + ret +; 4e8bd -Tileset17: ; 0x4d695 - dbw BANK(Tileset17GFX), Tileset17GFX - dbw BANK(Tileset17Meta), Tileset17Meta - dbw BANK(Tileset17Coll), Tileset17Coll - dw Tileset17Anim - dw $0000 - dw Tileset17PalMap +INCBIN "baserom.gbc", $4e8bd, $4e8c2 - $4e8bd -Tileset18: ; 0x4d6a4 - dbw BANK(Tileset18GFX), Tileset18GFX - dbw BANK(Tileset18Meta), Tileset18Meta - dbw BANK(Tileset18Coll), Tileset18Coll - dw Tileset18Anim - dw $0000 - dw Tileset18PalMap -Tileset19: ; 0x4d6b3 - dbw BANK(Tileset19GFX), Tileset19GFX - dbw BANK(Tileset19Meta), Tileset19Meta - dbw BANK(Tileset19Coll), Tileset19Coll - dw Tileset19Anim - dw $0000 - dw Tileset19PalMap +Function4e8c2: ; 4e8c2 + call WhiteBGMap + call ClearTileMap + call ClearSprites + call DisableLCD + call $0e51 + call $0e58 + ld hl, VBGMap0 + ld bc, VBlank5 + ld a, $7f + call ByteFill + ld hl, AttrMap + ld bc, $0168 + xor a + call ByteFill + ld hl, $d000 + ld c, $40 +.asm_4e8ee + ld a, $ff + ld [hli], a + ld a, $7f + ld [hli], a + dec c + jr nz, .asm_4e8ee + xor a + ld [$ffd0], a + ld [$ffcf], a + call EnableLCD + call Function3200 + call Function32f9 + ret +; 4e906 -Tileset20: ; 0x4d6c2 - dbw BANK(Tileset20GFX), Tileset20GFX - dbw BANK(Tileset20Meta), Tileset20Meta - dbw BANK(Tileset20Coll), Tileset20Coll - dw Tileset20Anim - dw $0000 - dw Tileset20PalMap +Function4e906: ; 4e906 + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld hl, $d000 + ld bc, VBlank5 + ld a, $7f + call ByteFill + ld hl, VBGMap0 + ld de, $d000 + ld b, $0 + ld c, $40 + call Functioneba + pop af + ld [rSVBK], a + ret +; 4e929 -Tileset21: ; 0x4d6d1 - dbw BANK(Tileset21GFX), Tileset21GFX - dbw BANK(Tileset21Meta), Tileset21Meta - dbw BANK(Tileset21Coll), Tileset21Coll - dw Tileset21Anim - dw $0000 - dw Tileset21PalMap +INCBIN "baserom.gbc", $4e929, $4ea82 - $4e929 -Tileset22: ; 0x4d6e0 - dbw BANK(Tileset22GFX), Tileset22GFX - dbw BANK(Tileset22Meta), Tileset22Meta - dbw BANK(Tileset22Coll), Tileset22Coll - dw Tileset22Anim - dw $0000 - dw Tileset22PalMap -Tileset23: ; 0x4d6ef - dbw BANK(Tileset23GFX), Tileset23GFX - dbw BANK(Tileset23Meta), Tileset23Meta - dbw BANK(Tileset23Coll), Tileset23Coll - dw Tileset23Anim - dw $0000 - dw Tileset23PalMap +Function4ea82: ; 4ea82 + ld a, [hCGB] + and a + ret nz + ld de, $0000 + call StartMusic + call ClearTileMap + ld hl, $6b76 + ld de, $d000 + ld a, [rSVBK] + push af + ld a, $0 + ld [rSVBK], a + call Decompress + pop af + ld [rSVBK], a + ld de, $d000 + ld hl, VTiles2 + ld bc, Text_1354 + call Functionf82 + ld de, $4200 + ld hl, VTiles1 + ld bc, $3e80 + call Functionf9d + call Function4eac5 + call WaitBGMap +.asm_4eac0 + call DelayFrame + jr .asm_4eac0 +; 4eac5 -Tileset24: ; 0x4d6fe - dbw BANK(Tileset24GFX), Tileset24GFX - dbw BANK(Tileset24Meta), Tileset24Meta - dbw BANK(Tileset24Coll), Tileset24Coll - dw Tileset24Anim - dw $0000 - dw Tileset24PalMap +Function4eac5: ; 4eac5 + call Function4eaea + ld hl, $c4cb + ld b, $e + ld c, $4 + ld a, $8 + call Function4eb27 + ld hl, $c51d + ld b, $a + ld c, $2 + ld a, $40 + call Function4eb27 + ld de, $6b38 + ld hl, $c569 + call PlaceString + ret +; 4eaea -Tileset25: ; 0x4d70d - dbw BANK(Tileset25GFX), Tileset25GFX - dbw BANK(Tileset25Meta), Tileset25Meta - dbw BANK(Tileset25Coll), Tileset25Coll - dw Tileset25Anim - dw $0000 - dw Tileset25PalMap +Function4eaea: ; 4eaea + ld hl, TileMap + ld [hl], $0 + inc hl + ld a, $1 + call Function4eb15 + ld [hl], $2 + ld hl, $c4b4 + ld a, $3 + call Function4eb1c + ld hl, $c4c7 + ld a, $4 + call Function4eb1c + ld hl, $c5f4 + ld [hl], $5 + inc hl + ld a, $6 + call Function4eb15 + ld [hl], $7 + ret +; 4eb15 -Tileset26: ; 0x4d71c - dbw BANK(Tileset26GFX), Tileset26GFX - dbw BANK(Tileset26Meta), Tileset26Meta - dbw BANK(Tileset26Coll), Tileset26Coll - dw Tileset26Anim - dw $0000 - dw Tileset26PalMap +Function4eb15: ; 4eb15 + ld c, $12 +.asm_4eb17 + ld [hli], a + dec c + jr nz, .asm_4eb17 + ret +; 4eb1c -Tileset27: ; 0x4d72b - dbw BANK(Tileset27GFX), Tileset27GFX - dbw BANK(Tileset27Meta), Tileset27Meta - dbw BANK(Tileset27Coll), Tileset27Coll - dw Tileset27Anim - dw $0000 - dw Tileset27PalMap +Function4eb1c: ; 4eb1c + ld de, $0014 + ld c, $10 +.asm_4eb21 + ld [hl], a + add hl, de + dec c + jr nz, .asm_4eb21 + ret +; 4eb27 -Tileset28: ; 0x4d73a - dbw BANK(Tileset28GFX), Tileset28GFX - dbw BANK(Tileset28Meta), Tileset28Meta - dbw BANK(Tileset28Coll), Tileset28Coll - dw Tileset28Anim - dw $0000 - dw Tileset28PalMap +Function4eb27: ; 4eb27 + ld de, $0014 +.asm_4eb2a + push bc + push hl +.asm_4eb2c + ld [hli], a + inc a + dec b + jr nz, .asm_4eb2c + pop hl + add hl, de + pop bc + dec c + jr nz, .asm_4eb2a + ret +; 4eb38 -Tileset29: ; 0x4d749 - dbw BANK(Tileset29GFX), Tileset29GFX - dbw BANK(Tileset29Meta), Tileset29Meta - dbw BANK(Tileset29Coll), Tileset29Coll - dw Tileset29Anim - dw $0000 - dw Tileset29PalMap +INCBIN "baserom.gbc", $4eb38, $4f301 - $4eb38 -Tileset30: ; 0x4d758 - dbw BANK(Tileset30GFX), Tileset30GFX - dbw BANK(Tileset30Meta), Tileset30Meta - dbw BANK(Tileset30Coll), Tileset30Coll - dw Tileset30Anim - dw $0000 - dw Tileset30PalMap -Tileset31: ; 0x4d767 - dbw BANK(Tileset31GFX), Tileset31GFX - dbw BANK(Tileset31Meta), Tileset31Meta - dbw BANK(Tileset31Coll), Tileset31Coll - dw Tileset31Anim - dw $0000 - dw Tileset31PalMap +Function4f301: ; 4f301 + ld hl, $001e + add hl, bc + ld a, [hl] + and $7f + jr z, .asm_4f319 + cp $7f + jr z, .asm_4f319 + ld a, [hl] + and $80 + jr nz, .asm_4f316 + ld c, $1 + ret -Tileset32: ; 0x4d776 - dbw BANK(Tileset32GFX), Tileset32GFX - dbw BANK(Tileset32Meta), Tileset32Meta - dbw BANK(Tileset32Coll), Tileset32Coll - dw Tileset32Anim - dw $0000 - dw Tileset32PalMap +.asm_4f316 + ld c, $2 + ret -Tileset33: ; 0x4d785 - dbw BANK(Tileset33GFX), Tileset33GFX - dbw BANK(Tileset33Meta), Tileset33Meta - dbw BANK(Tileset33Coll), Tileset33Coll - dw Tileset33Anim - dw $0000 - dw Tileset33PalMap +.asm_4f319 + ld c, $0 + ret +; 4f31c -Tileset34: ; 0x4d794 - dbw BANK(Tileset34GFX), Tileset34GFX - dbw BANK(Tileset34Meta), Tileset34Meta - dbw BANK(Tileset34Coll), Tileset34Coll - dw Tileset34Anim - dw $0000 - dw Tileset34PalMap -Tileset35: ; 0x4d7a3 - dbw BANK(Tileset35GFX), Tileset35GFX - dbw BANK(Tileset35Meta), Tileset35Meta - dbw BANK(Tileset35Coll), Tileset35Coll - dw Tileset35Anim - dw $0000 - dw Tileset35PalMap -Tileset36: ; 0x4d7b2 - dbw BANK(Tileset36GFX), Tileset36GFX - dbw BANK(Tileset36Meta), Tileset36Meta - dbw BANK(Tileset36Coll), Tileset36Coll - dw Tileset36Anim - dw $0000 - dw Tileset36PalMap +SECTION "bank14",DATA,BANK[$14] -; 0x4d7c1 +INCBIN "baserom.gbc", $50000, $5001d - $50000 -INCBIN "baserom.gbc", $4d7c1, $4d860 - $4d7c1 -CheckPokerus: ; 4d860 -; Return carry if a monster in your party has Pokerus +Function5001d: ; 5001d + ld a, b + ld [PartyMenuActionText], a + call Function2ed3 + call WhiteBGMap + call $403f + call WaitBGMap + ld b, $a + call GetSGBLayout + call Function32f9 + call DelayFrame + call PartyMenuSelect + call Function2b74 + ret +; 5003f -; Get number of monsters to iterate over - ld a, [PartyCount] - and a - jr z, .NoPokerus - ld b, a -; Check each monster in the party for Pokerus - ld hl, PartyMon1PokerusStatus - ld de, PartyMon2 - PartyMon1 -.Check - ld a, [hl] - and $0f ; only the bottom nybble is used - jr nz, .HasPokerus -; Next PartyMon - add hl, de - dec b - jr nz, .Check -.NoPokerus - and a +Function5003f: ; 5003f + call $404f + call $4405 + call $43e0 + call WritePartyMenuTilemap + call PrintPartyMenuText ret -.HasPokerus - scf +; 5004f + +Function5004f: ; 5004f + call $0e58 + ld hl, $4ad1 + ld a, $2 + rst FarCall + ld hl, $6814 + ld a, $23 + rst FarCall ret -; 4d87a +; 5005f -INCBIN "baserom.gbc", $4d87a, $4dc8a - $4d87a -StatsScreenInit: ; 4dc8a - ld hl, StatsScreenMain - jr .gotaddress - ld hl, $5cf7 - jr .gotaddress -.gotaddress - ld a, [$ffde] +WritePartyMenuTilemap: ; 0x5005f + ld hl, Options + ld a, [hl] push af + set 4, [hl] ; Disable text delay xor a - ld [$ffde], a ; disable overworld tile animations - ld a, [$c2c6] ; whether sprite is to be mirrorred - push af - ld a, [$cf63] - ld b, a - ld a, [$cf64] - ld c, a - push bc + ld [hBGMapMode], a + ld hl, TileMap + ld bc, $0168 + ld a, " " + call ByteFill ; blank the tilemap + call $4396 ; This reads from a pointer table??? +.asm_50077 + ld a, [hli] + cp $ff + jr z, .asm_50084 ; 0x5007a $8 push hl - call WhiteBGMap - call ClearTileMap - call $1ad2 - ld a, $3e - ld hl, $753e - rst FarCall ; this loads graphics + ld hl, $4089 + rst JumpTable pop hl - call JpHl - call WhiteBGMap - call ClearTileMap - pop bc - ; restore old values - ld a, b - ld [$cf63], a - ld a, c - ld [$cf64], a - pop af - ld [$c2c6], a + jr .asm_50077 ; 0x50082 $f3 +.asm_50084 pop af - ld [$ffde], a - ret -; 0x4dcd2 - -StatsScreenMain: ; 0x4dcd2 - xor a - ld [$cf63], a - ld [$cf64], a - ld a, [$cf64] - and $fc - or $1 - ld [$cf64], a -.loop ; 4dce3 - ld a, [$cf63] - and $7f - ld hl, StatsScreenPointerTable - rst JumpTable - call $5d3a ; check for keys? - ld a, [$cf63] - bit 7, a - jr z, .loop + ld [Options], a ret -; 0x4dcf7 - -INCBIN "baserom.gbc", $4dcf7, $4dd2a - $4dcf7 +; 0x50089 -StatsScreenPointerTable: ; 4dd2a - dw $5d72 ; regular pokémon - dw EggStatsInit ; egg - dw $5de6 - dw $5dac - dw $5dc6 - dw $5de6 - dw $5dd6 - dw $5d6c +INCBIN "baserom.gbc", $50089, $500cf - $50089 -; 4dd3a -INCBIN "baserom.gbc", $4dd3a, $4dda1 - $4dd3a +Function500cf: ; 500cf + xor a + ld [$cda9], a + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + ld hl, $c4d3 +.asm_500de + push bc + push hl + call $4389 + jr z, .asm_50103 + push hl + call $4117 + pop hl + ld d, $6 + ld b, $0 + call $3750 + ld hl, $cd9b + ld a, [$cda9] + ld c, a + ld b, $0 + add hl, bc + call SetHPPal + ld b, $fc + call GetSGBLayout -EggStatsInit: ; 4dda1 - call EggStatsScreen - ld a, [$cf63] - inc a - ld [$cf63], a +.asm_50103 + ld hl, $cda9 + inc [hl] + pop hl + ld de, $0028 + add hl, de + pop bc + inc b + dec c + jr nz, .asm_500de + ld b, $a + call GetSGBLayout ret -; 0x4ddac - -INCBIN "baserom.gbc", $4ddac, $4e21e - $4ddac - -IDNoString: ; 4e21e - db $73, "№.@" +; 50117 -OTString: ; 4e222 - db "OT/@" -; 4e226 +Function50117: ; 50117 + ld a, b + ld bc, $0030 + ld hl, PartyMon1CurHP + call AddNTimes + ld a, [hli] + or [hl] + jr nz, .asm_50129 + xor a + ld e, a + ld c, a + ret -INCBIN "baserom.gbc", $4e226, $4e33a - $4e226 +.asm_50129 + dec hl + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + ld a, [hli] + ld d, a + ld a, [hli] + ld e, a + ld a, $4 + call Predef + ret +; 50138 -EggStatsScreen: ; 4e33a - xor a - ld [hBGMapMode], a - ld hl, $cda1 - call SetHPPal - ld b, $3 - call GetSGBLayout - call $5f8f - ld de, EggString - hlcoord 8, 1 ; $c4bc - call PlaceString - ld de, IDNoString - hlcoord 8, 3 ; $c4e4 - call PlaceString - ld de, OTString - hlcoord 8, 5 ; $c50c - call PlaceString - ld de, FiveQMarkString - hlcoord 11, 3 ; $c4e7 - call PlaceString - ld de, FiveQMarkString - hlcoord 11, 5 ; $c50f - call PlaceString - ld a, [TempMonHappiness] ; egg status - ld de, EggSoonString - cp $6 - jr c, .picked - ld de, EggCloseString - cp $b - jr c, .picked - ld de, EggMoreTimeString - cp $29 - jr c, .picked - ld de, EggALotMoreTimeString -.picked - hlcoord 1, 9 ; $c555 - call PlaceString - ld hl, $cf64 - set 5, [hl] - call Function32f9 ; pals - call DelayFrame - ld hl, TileMap - call $3786 - ld a, $41 - ld hl, $402d - rst FarCall - call $6497 +Function50138: ; 50138 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + ld hl, $c4c1 +.asm_50143 + push bc + push hl + call $4389 + jr z, .asm_5016b + push hl + ld a, b + ld bc, $0030 + ld hl, PartyMon1CurHP + call AddNTimes + ld e, l + ld d, h + pop hl + push de + ld bc, $0203 + call $3198 + pop de + ld a, $f3 + ld [hli], a + inc de + inc de + ld bc, $0203 + call $3198 - ld a, [TempMonHappiness] - cp 6 - ret nc - ld de, SFX_2_BOOPS - call StartSFX +.asm_5016b + pop hl + ld de, $0028 + add hl, de + pop bc + inc b + dec c + jr nz, .asm_50143 ret -; 0x4e3c0 +; 50176 -EggString: ; 4e3c0 - db "EGG@" +Function50176: ; 50176 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + ld hl, $c4d0 +.asm_50181 + push bc + push hl + call $4389 + jr z, .asm_501a7 + push hl + ld a, b + ld bc, $0030 + ld hl, PartyMon1Level + call AddNTimes + ld e, l + ld d, h + pop hl + ld a, [de] + cp $64 + jr nc, .asm_501a1 + ld a, $6e + ld [hli], a + ld bc, $4102 -FiveQMarkString: ; 4e3c4 - db "?????@" +.asm_501a1 + ld bc, $4103 + call $3198 -EggSoonString: ; 0x4e3ca - db "It's making sounds", $4e, "inside. It's going", $4e, "to hatch soon!@" +.asm_501a7 + pop hl + ld de, $0028 + add hl, de + pop bc + inc b + dec c + jr nz, .asm_50181 + ret +; 501b2 -EggCloseString: ; 0x4e3fd - db "It moves around", $4e, "inside sometimes.", $4e, "It must be close", $4e, "to hatching.@" +Function501b2: ; 501b2 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + ld hl, $c4cd +.asm_501bd + push bc + push hl + call $4389 + jr z, .asm_501d5 + push hl + ld a, b + ld bc, $0030 + ld hl, PartyMon1Status + call AddNTimes + ld e, l + ld d, h + pop hl + call $4d0a -EggMoreTimeString: ; 0x4e43d - db "Wonder what's", $4e, "inside? It needs", $4e, "more time, though.@" +.asm_501d5 + pop hl + ld de, $0028 + add hl, de + pop bc + inc b + dec c + jr nz, .asm_501bd + ret +; 501e0 -EggALotMoreTimeString: ; 0x4e46e - db "This EGG needs a", $4e, "lot more time to", $4e, "hatch.@" +Function501e0: ; 501e0 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + ld hl, $c4d4 +.asm_501eb + push bc + push hl + call $4389 + jr z, .asm_5020a + push hl + ld hl, PartySpecies + ld e, b + ld d, $0 + add hl, de + ld a, [hl] + ld [CurPartySpecies], a + ld a, $e + call Predef + pop hl + call $4215 + call PlaceString -; 0x4e497 +.asm_5020a + pop hl + ld de, $0028 + add hl, de + pop bc + inc b + dec c + jr nz, .asm_501eb + ret +; 50215 -INCBIN "baserom.gbc", $4e497, $4e831 - $4e497 +Function50215: ; 50215 + ld a, c + and a + jr nz, .asm_5021d + ld de, $4226 + ret -EvolutionGFX: -INCBIN "gfx/evo/bubble_large.2bpp" -INCBIN "gfx/evo/bubble.2bpp" +.asm_5021d + ld de, $4221 + ret +; 50221 -INCBIN "baserom.gbc", $4e881, $4ea82 - $4e881 +INCBIN "baserom.gbc", $50221, $5022f - $50221 -Function4ea82: ; 4ea82 - ld a, [hCGB] +Function5022f: ; 5022f + ld a, [PartyCount] and a - ret nz - ld de, $0000 - call StartMusic - call ClearTileMap - ld hl, $6b76 - ld de, $d000 - ld a, [rSVBK] - push af - ld a, $0 - ld [rSVBK], a - call Decompress - pop af - ld [rSVBK], a - ld de, $d000 - ld hl, VTiles2 - ld bc, Text_1354 - call Functionf82 - ld de, $4200 - ld hl, VTiles1 - ld bc, $3e80 - call Functionf9d - call Function4eac5 - call WaitBGMap -.asm_4eac0 - call DelayFrame - jr .asm_4eac0 -; 4eac5 - -Function4eac5: ; 4eac5 - call Function4eaea - ld hl, $c4cb - ld b, $e - ld c, $4 - ld a, $8 - call Function4eb27 - ld hl, $c51d - ld b, $a - ld c, $2 - ld a, $40 - call Function4eb27 - ld de, $6b38 - ld hl, $c569 + ret z + ld c, a + ld b, $0 + ld hl, $c4d4 +.asm_5023a + push bc + push hl + call $4389 + jr z, .asm_5025d + push hl + ld a, b + ld bc, $0030 + ld hl, PartyMon1Species + call AddNTimes + ld a, [hl] + dec a + ld e, a + ld d, $0 + ld hl, $65b1 + add hl, de + add hl, de + call $4268 + pop hl call PlaceString + +.asm_5025d + pop hl + ld de, $0028 + add hl, de + pop bc + inc b + dec c + jr nz, .asm_5023a ret -; 4eaea +; 50268 -Function4eaea: ; 4eaea - ld hl, TileMap - ld [hl], $0 +Function50268: ; 50268 + ld de, StringBuffer1 + ld a, $10 + ld bc, $0002 + call FarCopyBytes + ld hl, StringBuffer1 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, StringBuffer1 + ld a, $10 + ld bc, $000a + call FarCopyBytes + ld hl, StringBuffer1 +.asm_50287 + ld a, [hli] + and a + jr z, .asm_5029f inc hl - ld a, $1 - call Function4eb15 - ld [hl], $2 - ld hl, $c4b4 - ld a, $3 - call Function4eb1c - ld hl, $c4c7 - ld a, $4 - call Function4eb1c - ld hl, $c5f4 - ld [hl], $5 inc hl - ld a, $6 - call Function4eb15 - ld [hl], $7 + cp $2 + jr nz, .asm_50287 + dec hl + dec hl + ld a, [CurItem] + cp [hl] + inc hl + inc hl + jr nz, .asm_50287 + ld de, $42a3 ret -; 4eb15 -Function4eb15: ; 4eb15 - ld c, $12 -.asm_4eb17 - ld [hli], a - dec c - jr nz, .asm_4eb17 +.asm_5029f + ld de, $42a8 ret -; 4eb1c +; 502a3 -Function4eb1c: ; 4eb1c - ld de, $0014 - ld c, $10 -.asm_4eb21 - ld [hl], a +INCBIN "baserom.gbc", $502a3, $502b1 - $502a3 + + +Function502b1: ; 502b1 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + ld hl, $c4d4 +.asm_502bc + push bc + push hl + call $4389 + jr z, .asm_502e3 + ld [CurPartySpecies], a + push hl + ld a, b + ld [CurPartyMon], a + xor a + ld [MonType], a + call GetGender + ld de, $42fe + jr c, .asm_502df + ld de, $42ee + jr nz, .asm_502df + ld de, $42f5 + +.asm_502df + pop hl + call PlaceString + +.asm_502e3 + pop hl + ld de, $0028 add hl, de + pop bc + inc b dec c - jr nz, .asm_4eb21 + jr nz, .asm_502bc ret -; 4eb27 +; 502ee -Function4eb27: ; 4eb27 - ld de, $0014 -.asm_4eb2a +INCBIN "baserom.gbc", $502ee, $50307 - $502ee + + +Function50307: ; 50307 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + ld hl, $c4c0 +.asm_50312 push bc push hl -.asm_4eb2c - ld [hli], a - inc a - dec b - jr nz, .asm_4eb2c + ld de, $4372 + call PlaceString pop hl + ld de, $0028 add hl, de pop bc + inc b dec c - jr nz, .asm_4eb2a + jr nz, .asm_50312 + ld a, l + ld e, $b + sub e + ld l, a + ld a, h + sbc $0 + ld h, a + ld de, $4379 + call PlaceString + ld b, $3 + ld c, $0 + ld hl, DefaultFlypoint + ld a, [hl] +.asm_5033b + push hl + push bc + ld hl, $c4c0 +.asm_50340 + and a + jr z, .asm_5034a + ld de, $0028 + add hl, de + dec a + jr .asm_50340 + +.asm_5034a + ld de, $436b + push hl + call PlaceString + pop hl + pop bc + push bc + push hl + ld a, c + ld hl, $4383 + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + pop bc + pop hl + inc hl + ld a, [hl] + inc c + dec b + ret z + jr .asm_5033b +; 5036b + +INCBIN "baserom.gbc", $5036b, $50389 - $5036b + + +Function50389: ; 50389 + ld a, $d8 + add b + ld e, a + ld a, $dc + adc $0 + ld d, a + ld a, [de] + cp $fd ret -; 4eb38 +; 50396 -INCBIN "baserom.gbc", $4eb38, $4f31c - $4eb38 +Function50396: ; 50396 + ld a, [PartyMenuActionText] + and $f0 + jr nz, .asm_503ae + ld a, [PartyMenuActionText] + and $f + ld e, a + ld d, $0 + ld hl, $43b2 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret +.asm_503ae + ld hl, $43c6 + ret +; 503b2 -SECTION "bank14",DATA,BANK[$14] +INCBIN "baserom.gbc", $503b2, $503e0 - $503b2 -INCBIN "baserom.gbc", $50000, $5005f-$50000 -WritePartyMenuTilemap: ; 0x5005f - ld hl, Options - ld a, [hl] - push af - set 4, [hl] ; Disable text delay - xor a - ld [hBGMapMode], a - ld hl, TileMap - ld bc, $0168 - ld a, " " - call ByteFill ; blank the tilemap - call $4396 ; This reads from a pointer table??? -.asm_50077 +Function503e0: ; 503e0 + ld hl, PartyCount ld a, [hli] - cp $ff - jr z, .asm_50084 ; 0x5007a $8 + and a + ret z + ld c, a + xor a + ld [hConnectedMapWidth], a +.asm_503ea + push bc push hl - ld hl, $4089 - rst JumpTable + ld hl, $683f + ld a, $23 + ld e, $0 + rst FarCall + ld a, [hConnectedMapWidth] + inc a + ld [hConnectedMapWidth], a pop hl - jr .asm_50077 ; 0x50082 $f3 -.asm_50084 - pop af - ld [Options], a + pop bc + dec c + jr nz, .asm_503ea + callab Function8cf69 ret -; 0x50089 +; 50405 + +Function50405: ; 50405 + xor a + ld [$d0e3], a + ld de, $444f + call $1bb1 + ld a, [PartyCount] + inc a + ld [$cfa3], a + dec a + ld b, a + ld a, [$d0d8] + and a + jr z, .asm_50422 + inc b + cp b + jr c, .asm_50424 + +.asm_50422 + ld a, $1 + +.asm_50424 + ld [$cfa9], a + ld a, $3 + ld [$cfa8], a + ret +; 5042d -INCBIN "baserom.gbc", $50089, $50457-$50089 +INCBIN "baserom.gbc", $5042d, $50457 - $5042d PartyMenuSelect: ; 0x50457 ; sets carry if exitted menu. @@ -22403,7 +35101,193 @@ GetGender: ; 50bdd ret ; 50c50 -INCBIN "baserom.gbc", $50c50, $5125d - $50c50 +INCBIN "baserom.gbc", $50c50, $50d0a - $50c50 + + +Function50d0a: ; 50d0a + push de + inc de + inc de + ld a, [de] + ld b, a + inc de + ld a, [de] + or b + pop de + jr nz, .asm_50d2e + push de + ld de, .data_50d21 + call $4d25 + pop de + ld a, $1 + and a + ret + +.data_50d21 + db $85 + db $8d + db $93 + db $50 + db $1a + db $13 + db $22 + db $1a + db $13 + db $22 + db $1a + db $77 + db $c9 + +.asm_50d2e + push de + ld a, [de] + ld de, $4d5f + bit 3, a + jr nz, .asm_50d53 + ld de, $4d63 + bit 4, a + jr nz, .asm_50d53 + ld de, $4d67 + bit 5, a + jr nz, .asm_50d53 + ld de, $4d6b + bit 6, a + jr nz, .asm_50d53 + ld de, $4d5b + and $7 + jr z, .asm_50d59 + +.asm_50d53 + call $4d25 + ld a, $1 + and a + +.asm_50d59 + pop de + ret +; 50d5b + +INCBIN "baserom.gbc", $50d5b, $50e47 - $50d5b + + +Function50e47: ; 50e47 + ld a, [BaseGrowthRate] + add a + add a + ld c, a + ld b, $0 + ld hl, $4efa + add hl, bc + call $4eed + ld a, d + ld [hMultiplier], a + call Multiply + ld a, [hl] + and $f0 + swap a + ld [hMultiplier], a + call Multiply + ld a, [hli] + and $f + ld [hMultiplier], a + ld b, $4 + call Divide + ld a, [hMultiplicand] + push af + ld a, [$ffb5] + push af + ld a, [$ffb6] + push af + call $4eed + ld a, [hl] + and $7f + ld [hMultiplier], a + call Multiply + ld a, [hMultiplicand] + push af + ld a, [$ffb5] + push af + ld a, [$ffb6] + push af + ld a, [hli] + push af + xor a + ld [hMultiplicand], a + ld [$ffb5], a + ld a, d + ld [$ffb6], a + ld a, [hli] + ld [hMultiplier], a + call Multiply + ld b, [hl] + ld a, [$ffb6] + sub b + ld [$ffb6], a + ld b, $0 + ld a, [$ffb5] + sbc b + ld [$ffb5], a + ld a, [hMultiplicand] + sbc b + ld [hMultiplicand], a + pop af + and $80 + jr nz, .asm_50ec8 + pop bc + ld a, [$ffb6] + add b + ld [$ffb6], a + pop bc + ld a, [$ffb5] + adc b + ld [$ffb5], a + pop bc + ld a, [hMultiplicand] + adc b + ld [hMultiplicand], a + jr .asm_50eda + +.asm_50ec8 + pop bc + ld a, [$ffb6] + sub b + ld [$ffb6], a + pop bc + ld a, [$ffb5] + sbc b + ld [$ffb5], a + pop bc + ld a, [hMultiplicand] + sbc b + ld [hMultiplicand], a + +.asm_50eda + pop bc + ld a, [$ffb6] + add b + ld [$ffb6], a + pop bc + ld a, [$ffb5] + adc b + ld [$ffb5], a + pop bc + ld a, [hMultiplicand] + adc b + ld [hMultiplicand], a + ret +; 50eed + +Function50eed: ; 50eed + xor a + ld [hMultiplicand], a + ld [$ffb5], a + ld a, d + ld [$ffb6], a + ld [hMultiplier], a + jp Multiply +; 50efa + +INCBIN "baserom.gbc", $50efa, $5125d - $50efa DecompressPredef: ; 5125d @@ -23612,7 +36496,23 @@ INCBIN "baserom.gbc", $82153, $823c8-$82153 SECTION "bank21",DATA,BANK[$21] -INCBIN "baserom.gbc", $84000, $84a2e - $84000 +INCBIN "baserom.gbc", $84000, $842db - $84000 + + +Function842db: ; 842db + ld a, [$c2d5] + add a + ld e, a + ld d, $0 + ld hl, $42ea + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 842ea + +INCBIN "baserom.gbc", $842ea, $84a2e - $842ea FX00GFX: FX01GFX: ; 84a2e @@ -23890,7 +36790,494 @@ HallOfFame3: ; 0x8640e ret ; 0x86455 -INCBIN "baserom.gbc", $86455, $88000 - $86455 +Function86455: ; 86455 + ld a, $0 + ld [MusicFadeIDLo], a + ld a, $0 + ld [MusicFadeIDHi], a + ld a, $a + ld [MusicFade], a + ld a, $23 + ld hl, $4084 + rst FarCall + xor a + ld [VramState], a + ld [$ffde], a + ld a, $13 + ld hl, $68c2 + rst FarCall + ld c, $8 + call DelayFrames + call Function2ed3 + ld a, $2 + ld [$d4b5], a + ld a, [StatusFlags] + ld b, a + ld a, $42 + ld hl, $5847 + rst FarCall + ret +; 8648e + +Function8648e: ; 8648e + ld a, $0 + ld [MusicFadeIDLo], a + ld a, $0 + ld [MusicFadeIDHi], a + ld a, $a + ld [MusicFade], a + ld a, $23 + ld hl, $4084 + rst FarCall + xor a + ld [VramState], a + ld [$ffde], a + ld a, $13 + ld hl, $6881 + rst FarCall + ld c, $64 + jp DelayFrames +; 864b4 + +Function864b4: ; 864b4 + push de + ld de, $0000 + call StartMusic + call DelayFrame + pop de + call StartMusic + ret +; 864c3 + +Function864c3: ; 864c3 + xor a + ld [$cf63], a + call $671c + jr c, .asm_864fb + ld de, $0014 + call $64b4 + xor a + ld [$cf64], a +.asm_864d6 + ld a, [$cf64] + cp $6 + jr nc, .asm_864fb + ld hl, EnemyMoveEffect + ld bc, $0010 + call AddNTimes + ld a, [hl] + cp $ff + jr z, .asm_864fb + push hl + call $65b5 + pop hl + call $650c + jr c, .asm_864fb + ld hl, $cf64 + inc [hl] + jr .asm_864d6 + +.asm_864fb + call $6810 + ld a, $4 + ld [MusicFade], a + call $04b6 + ld c, $8 + call DelayFrames + ret +; 8650c + +Function8650c: ; 8650c + call $6748 + ld de, $652c + ld hl, $c4c9 + call PlaceString + call WaitBGMap + ld de, $c50a + ld c, $6 + ld a, $49 + call Predef + ld c, $3c + call DelayFrames + and a + ret +; 8652c + +INCBIN "baserom.gbc", $8652c, $8653f - $8652c + + +Function8653f: ; 8653f + ld hl, OverworldMap + ld bc, $0062 + xor a + call ByteFill + ld a, [$d95e] + ld de, OverworldMap + ld [de], a + inc de + ld hl, PartySpecies + ld c, $0 +.asm_86556 + ld a, [hli] + cp $ff + jr z, .asm_865b1 + cp $fd + jr nz, .asm_86562 + inc c + jr .asm_86556 + +.asm_86562 + push hl + push de + push bc + ld a, c + ld hl, PartyMon1Species + ld bc, $0030 + call AddNTimes + ld c, l + ld b, h + ld hl, $0000 + add hl, bc + ld a, [hl] + ld [de], a + inc de + ld hl, $0006 + add hl, bc + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + ld hl, $0015 + add hl, bc + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + ld hl, $001f + add hl, bc + ld a, [hl] + ld [de], a + inc de + pop bc + push bc + ld a, c + ld hl, PartyMon1Nickname + ld bc, $000b + call AddNTimes + ld bc, $000a + call CopyBytes + pop bc + inc c + pop de + ld hl, $0010 + add hl, de + ld e, l + ld d, h + pop hl + jr .asm_86556 + +.asm_865b1 + ld a, $ff + ld [de], a + ret +; 865b5 + +Function865b5: ; 865b5 + push hl + call WhiteBGMap + ld a, $13 + ld hl, $6906 + rst FarCall + pop hl + ld a, [hli] + ld [TempMonSpecies], a + ld [CurPartySpecies], a + inc hl + inc hl + ld a, [hli] + ld [TempMonDVs], a + ld a, [hli] + ld [$d124], a + ld hl, TempMonDVs + ld a, $2d + call Predef + ld hl, TileMap + ld bc, $0168 + ld a, $7f + call ByteFill + ld de, $9310 + ld a, $3d + call Predef + ld a, $31 + ld [$ffad], a + ld hl, $c51e + ld bc, $0606 + ld a, $13 + call Predef + ld a, $d0 + ld [$ffd0], a + ld a, $90 + ld [$ffcf], a + call WaitBGMap + xor a + ld [hBGMapMode], a + ld b, $1a + call GetSGBLayout + call Function32f9 + call $6635 + xor a + ld [$c2c6], a + ld hl, TileMap + ld bc, $0168 + ld a, $7f + call ByteFill + ld hl, $c50a + call $378b + call WaitBGMap + xor a + ld [hBGMapMode], a + ld [$ffd0], a + call $6643 + ret +; 86635 + +Function86635: ; 86635 +.asm_86635 + ld a, [$ffcf] + cp $70 + ret z + add $4 + ld [$ffcf], a + call DelayFrame + jr .asm_86635 +; 86643 + +Function86643: ; 86643 +.asm_86643 + ld a, [$ffcf] + and a + ret z + dec a + dec a + ld [$ffcf], a + call DelayFrame + jr .asm_86643 +; 86650 + +INCBIN "baserom.gbc", $86650, $8671c - $86650 + + +Function8671c: ; 8671c + ld a, [$cf63] + cp $1e + jr nc, .asm_86746 + ld hl, $b2c0 + ld bc, $0062 + call AddNTimes + ld a, $1 + call GetSRAMBank + ld a, [hl] + and a + jr z, .asm_86743 + ld de, EnemyMoveAnimation + ld bc, $0062 + call CopyBytes + call CloseSRAM + and a + ret + +.asm_86743 + call CloseSRAM + +.asm_86746 + scf + ret +; 86748 + +Function86748: ; 86748 + xor a + ld [hBGMapMode], a + ld a, [hli] + ld [TempMonSpecies], a + ld a, [hli] + ld [TempMonID], a + ld a, [hli] + ld [$d115], a + ld a, [hli] + ld [TempMonDVs], a + ld a, [hli] + ld [$d124], a + ld a, [hli] + ld [TempMonLevel], a + ld de, StringBuffer2 + ld bc, $000a + call CopyBytes + ld a, $50 + ld [$d090], a + ld hl, TileMap + ld bc, $0168 + ld a, $7f + call ByteFill + ld hl, TileMap + ld bc, $0312 + call TextBox + ld hl, $c590 + ld bc, $0412 + call TextBox + ld a, [TempMonSpecies] + ld [CurPartySpecies], a + ld [$d265], a + ld hl, TempMonDVs + ld a, $2d + call Predef + xor a + ld [$c2c6], a + ld hl, $c50a + call $378b + ld a, [CurPartySpecies] + cp $fd + jr z, .asm_867f8 + ld hl, $c5a5 + ld a, $74 + ld [hli], a + ld [hl], $f2 + ld hl, $c5a7 + ld de, $d265 + ld bc, $8103 + call $3198 + call GetBasePokemonName + ld hl, $c5ab + call PlaceString + ld a, $3 + ld [MonType], a + callba GetGender + ld a, $7f + jr c, .asm_867e2 + ld a, $ef + jr nz, .asm_867e2 + ld a, $f5 + +.asm_867e2 + ld hl, $c5b6 + ld [hli], a + ld hl, $c5c0 + ld a, $f3 + ld [hli], a + ld de, StringBuffer2 + call PlaceString + ld hl, $c5e1 + call $382d + +.asm_867f8 + ld hl, $c5e7 + ld a, $73 + ld [hli], a + ld a, $74 + ld [hli], a + ld [hl], $f3 + ld hl, $c5ea + ld de, TempMonID + ld bc, $8205 + call $3198 + ret +; 86810 + +Function86810: ; 86810 + call WhiteBGMap + ld hl, $9630 + ld de, $40d0 + ld bc, $3e01 + call Functioneba + ld hl, TileMap + ld bc, $0168 + ld a, $7f + call ByteFill + ld a, $22 + ld hl, $4825 + rst FarCall + ld a, $31 + ld [$ffad], a + ld hl, $c51e + ld bc, $0606 + ld a, $13 + call Predef + ld a, $d0 + ld [$ffd0], a + ld a, $90 + ld [$ffcf], a + call WaitBGMap + xor a + ld [hBGMapMode], a + ld [CurPartySpecies], a + ld b, $1a + call GetSGBLayout + call Function32f9 + call $6635 + xor a + ld [$c2c6], a + ld hl, TileMap + ld bc, $0168 + ld a, $7f + call ByteFill + ld a, $22 + ld hl, $4840 + rst FarCall + xor a + ld [$ffad], a + ld hl, $c510 + ld bc, $0707 + ld a, $13 + call Predef + ld a, $c0 + ld [$ffcf], a + call WaitBGMap + xor a + ld [hBGMapMode], a + ld [$ffd0], a + call $6643 + xor a + ld [hBGMapMode], a + ld hl, $c4c8 + ld bc, $0809 + call TextBox + ld hl, $c590 + ld bc, $0412 + call TextBox + ld hl, $c4f2 + ld de, PlayerName + call PlaceString + ld hl, $c519 + ld a, $73 + ld [hli], a + ld a, $74 + ld [hli], a + ld [hl], $f3 + ld hl, $c51c + ld de, PlayerID + ld bc, $8205 + call $3198 + ld hl, $c541 + ld de, $68ed + call PlaceString + ld hl, $c557 + ld de, GameTimeHours + ld bc, $0203 + call $3198 + ld [hl], $63 + inc hl + ld de, GameTimeMinutes + ld bc, $8102 + call $3198 + call WaitBGMap + callba Function26601 + ret +; 868ed + +INCBIN "baserom.gbc", $868ed, $88000 - $868ed SECTION "bank22",DATA,BANK[$22] @@ -23977,7 +37364,56 @@ GetPlayerIcon: ; 8832c ; 8833e -INCBIN "baserom.gbc", $8833e, $88874 - $8833e +INCBIN "baserom.gbc", $8833e, $88825 - $8833e + + +Function88825: ; 88825 + ld a, [PlayerGender] + bit 0, a + jr z, .asm_88830 + call GetKrisBackpic + ret + +.asm_88830 + ld hl, $7a1a + ld b, $a + ld de, $9310 + ld c, $31 + ld a, $40 + call Predef + ret +; 88840 + +Function88840: ; 88840 + call WaitBGMap + xor a + ld [hBGMapMode], a + ld e, $0 + ld a, [PlayerGender] + bit 0, a + jr z, .asm_88851 + ld e, $1 + +.asm_88851 + ld a, e + ld [TrainerClass], a + ld de, ChrisPic + ld a, [PlayerGender] + bit 0, a + jr z, .asm_88862 + ld de, KrisPic + +.asm_88862 + ld hl, VTiles2 + ld b, $22 + ld c, $31 + call Functionf82 + call WaitBGMap + ld a, $1 + ld [hBGMapMode], a + ret +; 88874 + DrawIntroPlayerPic: ; 88874 @@ -24202,12 +37638,53 @@ GetNthPartyMon: ; 0x8b1ce scf ret -INCBIN "baserom.gbc", $8b1e1, $8ba24-$8b1e1 +INCBIN "baserom.gbc", $8b1e1, $8b342 - $8b1e1 + + +Function8b342: ; 8b342 + call GetSecondaryMapHeaderPointer + ld d, h + ld e, l + xor a +.asm_8b348 + push af + ld hl, $7354 + rst JumpTable + pop af + inc a + cp $3 + jr nz, .asm_8b348 + ret +; 8b354 + +INCBIN "baserom.gbc", $8b354, $8b35b - $8b354 + + +Function8b35b: ; 8b35b + ret +; 8b35c + +Function8b35c: ; 8b35c + ret +; 8b35d + +INCBIN "baserom.gbc", $8b35d, $8ba24 - $8b35d SECTION "bank23",DATA,BANK[$23] -INCBIN "baserom.gbc", $8c000, $8c011 - $8c000 +INCBIN "baserom.gbc", $8c000, $8c001 - $8c000 + + +Function8c001: ; 8c001 + call UpdateTime + ld a, [TimeOfDay] + ld [CurTimeOfDay], a + call GetTimePalette + ld [TimeOfDayPal], a + ret +; 8c011 + _TimeOfDayPals: ; 8c011 ; return carry if pals are changed @@ -24317,7 +37794,57 @@ UpdateTimePals: ; 8c070 ret ; 8c079 -INCBIN "baserom.gbc", $8c079, $8c117 - $8c079 +Function8c079: ; 8c079 + ld c, $12 + call GetTimePalFade + ld b, $4 + call $416d + ret +; 8c084 + +Function8c084: ; 8c084 + call $40c1 + ld c, $9 + call GetTimePalFade + ld b, $4 + call $415e + ret +; 8c092 + +INCBIN "baserom.gbc", $8c092, $8c0c1 - $8c092 + + +Function8c0c1: ; 8c0c1 + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d000 + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + ld hl, $d008 + ld c, $6 +.asm_8c0d4 + ld a, e + ld [hli], a + ld a, d + ld [hli], a + inc hl + inc hl + inc hl + inc hl + inc hl + inc hl + dec c + jr nz, .asm_8c0d4 + pop af + ld [rSVBK], a + ret +; 8c0e5 + +INCBIN "baserom.gbc", $8c0e5, $8c117 - $8c0e5 GetTimePalette: ; 8c117 ; get time of day @@ -24386,7 +37913,32 @@ DmgToCgbTimePals: ; 8c14e ret ; 8c15e -INCBIN "baserom.gbc", $8c15e, $8c17c - $8c15e +Function8c15e: ; 8c15e +.asm_8c15e + call DmgToCgbTimePals + inc hl + inc hl + inc hl + ld c, $2 + call DelayFrames + dec b + jr nz, .asm_8c15e + ret +; 8c16d + +Function8c16d: ; 8c16d +.asm_8c16d + call DmgToCgbTimePals + dec hl + dec hl + dec hl + ld c, $2 + call DelayFrames + dec b + jr nz, .asm_8c16d + ret +; 8c17c + GetTimePalFade: ; 8c17c ; check cgb @@ -24597,7 +38149,12 @@ Function8cf53: ; 8cf53 ret ; 8cf62 -INCBIN "baserom.gbc", $8cf62, $8cf69 - $8cf62 +Function8cf62: ; 8cf62 + call Function8cf69 + call DelayFrame + ret +; 8cf69 + Function8cf69: ; 8cf69 @@ -25025,7 +38582,47 @@ Function8d24b: ; 8d24b jp [hl] ; 8d25b -INCBIN "baserom.gbc", $8d25b, $8e9ac - $8d25b +INCBIN "baserom.gbc", $8d25b, $8e814 - $8d25b + + +Function8e814: ; 8e814 + push hl + push de + push bc + push af + ld hl, $c300 + ld bc, $00c1 +.asm_8e81e + ld [hl], $0 + inc hl + dec bc + ld a, c + or b + jr nz, .asm_8e81e + pop af + pop bc + pop de + pop hl + ret +; 8e82b + +Function8e82b: ; 8e82b + ld a, e + call ReadMonMenuIcon + ld l, a + ld h, $0 + add hl, hl + ld de, IconPointers + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + ld b, $23 + ld c, $8 + ret +; 8e83f + +INCBIN "baserom.gbc", $8e83f, $8e9ac - $8e83f GetSpeciesIcon: ; 8e9ac ; Load species icon into VRAM at tile a @@ -25463,7 +39060,189 @@ BigmonIcon: INCBIN "gfx/icon/bigmon.2bpp" ; 0x8fe8d SECTION "bank24",DATA,BANK[$24] -INCBIN "baserom.gbc", $90000, $909F2-$90000 +INCBIN "baserom.gbc", $90000, $9000f - $90000 + + +Function9000f: ; 9000f + call $401c + jr nc, .asm_90017 + xor a + ld [hl], a + ret + +.asm_90017 + scf + ret +; 90019 + +Function90019: ; 90019 + jp $401c +; 9001c + +Function9001c: ; 9001c + ld hl, $dc7c + ld b, $a +.asm_90021 + ld a, [hli] + cp c + jr z, .asm_9002a + dec b + jr nz, .asm_90021 + xor a + ret + +.asm_9002a + dec hl + scf + ret +; 9002d + +INCBIN "baserom.gbc", $9002d, $90069 - $9002d + + +Function90069: ; 90069 + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + call PlaceString + pop af + rst Bankswitch + + ret +; 90074 + +INCBIN "baserom.gbc", $90074, $9029a - $90074 + + +Function9029a: ; 9029a + ld a, b + ld [DefaultFlypoint], a + ld a, e + ld [$d003], a + ld a, d + ld [$d004], a + call $42b3 + call $42b3 + ld a, $41 + ld hl, $60d3 + rst FarCall + ret +; 902b3 + +Function902b3: ; 902b3 + call $433f + call $4357 + call $42c9 + call $4357 + call $4375 + call $4357 + call $42c9 + ret +; 902c9 + +Function902c9: ; 902c9 + call $4375 + ld hl, $c4c9 + ld [hl], $62 + inc hl + inc hl + ld a, [DefaultFlypoint] + ld b, a + ld a, [$d003] + ld e, a + ld a, [$d004] + ld d, a + call $4069 + ret +; 902e3 + +INCBIN "baserom.gbc", $902e3, $902eb - $902e3 + + +Function902eb: ; 902eb + call $431d + call $4355 + call $432f + call $4355 + call $433b + call $4355 + call $432f + call $4355 + call $433b + call $4355 + call $432f + call $4355 + call $433b + call $4355 + ret +; 90316 + +INCBIN "baserom.gbc", $90316, $9031d - $90316 + + +Function9031d: ; 9031d + ld hl, $432a + call PrintText + ld de, $006b + call StartSFX + ret +; 9032a + +INCBIN "baserom.gbc", $9032a, $9032f - $9032a + + +Function9032f: ; 9032f + ld hl, $4336 + call PrintText + ret +; 90336 + +INCBIN "baserom.gbc", $90336, $9033b - $90336 + + +Function9033b: ; 9033b + call SpeechTextBox + ret +; 9033f + +Function9033f: ; 9033f + call WaitSFX + ld de, $006a + call StartSFX + call $4375 + call $1ad2 + ld a, $13 + ld hl, $5188 + rst FarCall + ret +; 90355 + +Function90355: ; 90355 + jr .asm_90357 + +.asm_90357 + ld c, $14 + call DelayFrames + ld a, $13 + ld hl, $5188 + rst FarCall + ret +; 90363 + +INCBIN "baserom.gbc", $90363, $90375 - $90363 + + +Function90375: ; 90375 + ld hl, TileMap + ld b, $2 + ld c, $12 + call TextBox + ret +; 90380 + +INCBIN "baserom.gbc", $90380, $909f2 - $90380 dw Sunday dw Monday @@ -29257,7 +43036,207 @@ INCBIN "tilesets/16_collision.bin" SECTION "bank2E",DATA,BANK[$2E] -INCBIN "baserom.gbc", $B8000, $b8219 - $b8000 +Functionb8000: ; b8000 + xor a + ld [hBGMapMode], a + ld a, $2e + ld hl, $400a + rst FarCall + ret +; b800a + +Functionb800a: ; b800a + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call GetWorldMapLocation + ld [$c2d9], a + call $4089 + jr z, .asm_b8024 + call GetMapPermission + cp $6 + jr nz, .asm_b8029 + +.asm_b8024 + ld a, $ff + ld [$c2d9], a + +.asm_b8029 + ld hl, $d83e + bit 1, [hl] + res 1, [hl] + jr nz, .asm_b8054 + call $4064 + jr z, .asm_b8054 + ld a, [$c2d9] + ld [$c2d8], a + call $4070 + jr z, .asm_b8054 + ld a, $3c + ld [$c2da], a + call $40c6 + call $40d3 + ld a, $41 + ld hl, $4303 + rst FarCall + ret + +.asm_b8054 + ld a, [$c2d9] + ld [$c2d8], a + ld a, $90 + ld [rWY], a + ld [$ffd2], a + xor a + ld [hLCDStatCustom], a + ret +; b8064 + +Functionb8064: ; b8064 + ld a, [$c2d9] + ld c, a + ld a, [$c2d8] + cp c + ret z + cp $0 + ret +; b8070 + +Functionb8070: ; b8070 + cp $ff + ret z + cp $0 + ret z + cp $11 + ret z + cp $46 + ret z + cp $3b + ret z + cp $5a + ret z + cp $44 + ret z + ld a, $1 + and a + ret +; b8089 + +Functionb8089: ; b8089 + ld a, [MapGroup] + cp $a + ret nz + ld a, [MapNumber] + cp $f + ret z + cp $11 + ret +; b8098 + +INCBIN "baserom.gbc", $b8098, $b80c6 - $b8098 + + +Functionb80c6: ; b80c6 + ld de, $5344 + ld hl, $9600 + ld bc, $3e0e + call Functionf82 + ret +; b80d3 + +Functionb80d3: ; b80d3 + ld hl, TileMap + ld b, $2 + ld c, $12 + call $4115 + call $412f + ret +; b80e1 + +INCBIN "baserom.gbc", $b80e1, $b8115 - $b80e1 + + +Functionb8115: ; b8115 + ld de, $0939 + add hl, de + inc b + inc b + inc c + inc c + ld a, $87 +.asm_b811f + push bc + push hl +.asm_b8121 + ld [hli], a + dec c + jr nz, .asm_b8121 + pop hl + ld de, $0014 + add hl, de + pop bc + dec b + jr nz, .asm_b811f + ret +; b812f + +Functionb812f: ; b812f + ld hl, TileMap + ld a, $61 + ld [hli], a + ld a, $62 + call $4164 + ld a, $64 + ld [hli], a + ld a, $65 + ld [hli], a + call $415b + ld a, $6b + ld [hli], a + ld a, $66 + ld [hli], a + call $415b + ld a, $6c + ld [hli], a + ld a, $67 + ld [hli], a + ld a, $68 + call $4164 + ld a, $6a + ld [hl], a + ret +; b815b + +Functionb815b: ; b815b + ld c, $12 + ld a, $6d +.asm_b815f + ld [hli], a + dec c + jr nz, .asm_b815f + ret +; b8164 + +Functionb8164: ; b8164 + ld c, $5 + jr .asm_b816a + +.asm_b8168 + ld [hli], a + ld [hli], a + +.asm_b816a + inc a + ld [hli], a + ld [hli], a + dec a + dec c + jr nz, .asm_b8168 + ret +; b8172 + +INCBIN "baserom.gbc", $b8172, $b8219 - $b8172 Functionb8219: ; b8219 ; deals strictly with rockmon encounter @@ -29497,7 +43476,17 @@ WildRockMonTable: ; b83de db $ff ; end ; b83e5 -INCBIN "baserom.gbc", $b83e5, $b9e8b - $b83e5 +INCBIN "baserom.gbc", $b83e5, $b9e76 - $b83e5 + + +Functionb9e76: ; b9e76 + ld a, d + ld hl, $5e80 + ld de, $0001 + jp IsInArray +; b9e80 + +INCBIN "baserom.gbc", $b9e80, $b9e8b - $b9e80 SECTION "bank2F",DATA,BANK[$2F] @@ -29944,7 +43933,82 @@ INCBIN "baserom.gbc", $c8000, $cbe2b - $c8000 SECTION "bank33",DATA,BANK[$33] -INCBIN "baserom.gbc", $cc000, $cfd9e - $cc000 +Functioncc000: ; cc000 + call WhiteBGMap + call ClearTileMap + call ClearSprites + call $0e58 + ld hl, Options + ld a, [hl] + push af + set 4, [hl] + ld hl, TileMap + ld b, $4 + ld c, $d + call TextBox + ld hl, $c518 + ld b, $4 + ld c, $d + call TextBox + ld hl, $c4a2 + ld de, $40ae + call PlaceString + ld hl, $c51a + ld de, $40b8 + call PlaceString + ld hl, $c4f5 + ld de, $40a7 + call PlaceString + ld hl, $c56d + ld de, $40a7 + call PlaceString + ld a, [$df9c] + ld [$d265], a + call GetPokemonName + ld de, StringBuffer1 + ld hl, $c4c9 + call PlaceString + ld h, b + ld l, c + ld a, [$dfbb] + ld [TempMonLevel], a + call $382d + ld de, EnemyMonNick + ld hl, $c541 + call PlaceString + ld h, b + ld l, c + ld a, [EnemyMonLevel] + ld [TempMonLevel], a + call $382d + ld hl, $c4fb + ld de, $dfc0 + ld bc, $0203 + call $3198 + ld hl, $c573 + ld de, EnemyMonMaxHPHi + call $3198 + ld hl, $40c2 + call PrintText + pop af + ld [Options], a + call WaitBGMap + ld b, $8 + call GetSGBLayout + call Function32f9 + ret +; cc0a7 + +INCBIN "baserom.gbc", $cc0a7, $cc0c7 - $cc0a7 + + +Functioncc0c7: ; cc0c7 + call GetPokemonName + ld hl, $40d0 + jp PrintText +; cc0d0 + +INCBIN "baserom.gbc", $cc0d0, $cfd9e - $cc0d0 ; Songs iii @@ -30278,7 +44342,80 @@ Functione4670: ; e4670 jp [hl] ; e467f -INCBIN "baserom.gbc", $e467f, $e555d - $e467f +INCBIN "baserom.gbc", $e467f, $e48ac - $e467f + + +Functione48ac: ; e48ac + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld a, [$ffaa] + push af + ld a, [$ff9e] + push af + call $4901 + call Functiona57 + ld a, [$ffa9] + and $f + jr nz, .asm_e48db + ld a, [$cf63] + bit 7, a + jr nz, .asm_e48e1 + call $490f + callba Function8cf69 + call DelayFrame + jp $48bc + +.asm_e48db + ld de, $0000 + call StartMusic + +.asm_e48e1 + call WhiteBGMap + call ClearSprites + call ClearTileMap + xor a + ld [$ffcf], a + ld [$ffd0], a + ld a, $7 + ld [$ffd1], a + ld a, $90 + ld [$ffd2], a + pop af + ld [$ff9e], a + pop af + ld [$ffaa], a + pop af + ld [rSVBK], a + ret +; e4901 + +Functione4901: ; e4901 + xor a + ld [$ff9e], a + ld a, $1 + ld [$ffaa], a + xor a + ld [$ffde], a + ld [$cf63], a + ret +; e490f + +Functione490f: ; e490f + ld a, [$cf63] + ld e, a + ld d, $0 + ld hl, $491e + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; e491e + +INCBIN "baserom.gbc", $e491e, $e555d - $e491e IntroSuicuneRunGFX: ; e555d INCBIN "gfx/intro/suicune_run.lz" @@ -30595,7 +44732,35 @@ TownMapGFX: ; f8ba0 INCBIN "gfx/misc/town_map.lz" ; f8ea3 -INCBIN "baserom.gbc", $f8ea3, $fb48a - $f8ea3 +INCBIN "baserom.gbc", $f8ea3, $fb449 - $f8ea3 + + +Functionfb449: ; fb449 + ld de, $4200 + ld hl, VTiles1 + ld bc, $3e80 + ld a, [rLCDC] + bit 7, a + jp z, $0fa4 + ld de, $4200 + ld hl, VTiles1 + ld bc, $3e20 + call Functionddc + ld de, $4300 + ld hl, $8a00 + ld bc, $3e20 + call Functionddc + ld de, $4400 + ld hl, $8c00 + ld bc, $3e20 + call Functionddc + ld de, $4500 + ld hl, $8e00 + ld bc, $3e20 + call Functionddc + ret +; fb48a + Functionfb48a: ; fb48a @@ -30644,7 +44809,31 @@ Functionfb48a: ; fb48a ret ; fb4f2 -INCBIN "baserom.gbc", $fb4f2, $fbbfc - $fb4f2 +INCBIN "baserom.gbc", $fb4f2, $fba18 - $fb4f2 + + +Functionfba18: ; fba18 + ld a, [UnownLetter] + ld c, a + ld b, $1a + ld hl, UnownDex +.asm_fba21 + ld a, [hli] + and a + jr z, .asm_fba2b + cp c + ret z + dec b + jr nz, .asm_fba21 + ret + +.asm_fba2b + dec hl + ld [hl], c + ret +; fba2e + +INCBIN "baserom.gbc", $fba2e, $fbbfc - $fba2e INCLUDE "battle/magikarp_length.asm" @@ -31847,7 +46036,268 @@ SproutPillarTile10: ; fca98 -INCBIN "baserom.gbc", $fca98, $fcdc2 - $fca98 +INCBIN "baserom.gbc", $fca98, $fcba8 - $fca98 + + +Functionfcba8: ; fcba8 + ld a, e + ld [$cf63], a + call $4c59 + ld b, $2 + call $4c4a + ld a, $4 + jr nz, .asm_fcc03 + ld a, $0 + call $4f38 + call $1dcf + ld a, $1 + jr c, .asm_fcc03 + ld b, $6 + ld a, $14 + ld hl, $401d + rst FarCall + ld a, $1 + jr c, .asm_fcc03 + ld e, $1 + call LoadTradesPointer + ld a, [CurPartySpecies] + cp [hl] + ld a, $2 + jr nz, .asm_fcc03 + call $4c23 + ld a, $2 + jr c, .asm_fcc03 + ld b, $1 + call $4c4a + ld hl, $4f7b + call PrintText + call $4c63 + call $4c07 + call $4e1b + ld hl, $4f80 + call PrintText + call $3d47 + ld a, $3 + +.asm_fcc03 + call $4f38 + ret +; fcc07 + +Functionfcc07: ; fcc07 + call Function2ed3 + ld a, [$cf63] + push af + ld a, [$cf64] + push af + ld a, $1e + call Predef + pop af + ld [$cf64], a + pop af + ld [$cf63], a + call Function2b74 + ret +; fcc23 + +Functionfcc23: ; fcc23 + xor a + ld [MonType], a + ld e, $1e + call LoadTradesPointer + ld a, [hl] + and a + jr z, .asm_fcc46 + cp $1 + jr z, .asm_fcc3e + callba GetGender + jr nz, .asm_fcc48 + jr .asm_fcc46 + +.asm_fcc3e + callba GetGender + jr z, .asm_fcc48 + +.asm_fcc46 + and a + ret + +.asm_fcc48 + scf + ret +; fcc4a + +Functionfcc4a: ; fcc4a + ld hl, $d960 + ld a, [$cf63] + ld c, a + ld a, $3 + call Predef + ld a, c + and a + ret +; fcc59 + +Functionfcc59: ; fcc59 + ld e, $0 + call LoadTradesPointer + ld a, [hl] + ld [$cf64], a + ret +; fcc63 + +Functionfcc63: ; fcc63 + ld e, $1 + call LoadTradesPointer + ld a, [hl] + ld [PlayerSDefLevel], a + ld e, $2 + call LoadTradesPointer + ld a, [hl] + ld [PlayerLightScreenCount], a + ld a, [PlayerSDefLevel] + ld de, PlayerAccLevel + call $4de8 + call $4df4 + ld a, [PlayerLightScreenCount] + ld de, PlayerReflectCount + call $4de8 + call $4df4 + ld hl, PartyMon1OT + ld bc, $000b + call $4dd7 + ld de, $c6f2 + call $4df4 + ld hl, PlayerName + ld de, $c6e7 + call $4df4 + ld hl, PartyMon1ID + ld bc, $0030 + call $4dd7 + ld de, PlayerScreens + call $4e0f + ld hl, PartyMon1DVs + ld bc, $0030 + call $4dd7 + ld de, $c6fd + call $4e0f + ld hl, PartyMon1Species + ld bc, $0030 + call $4dd7 + ld b, h + ld c, l + ld a, $13 + ld hl, $7301 + rst FarCall + ld a, c + ld [$c701], a + ld e, $0 + call LoadTradesPointer + ld a, [hl] + cp $3 + ld a, $1 + jr c, .asm_fcce6 + ld a, $2 + +.asm_fcce6 + ld [$c733], a + ld hl, PartyMon1Level + ld bc, $0030 + call $4dd7 + ld a, [hl] + ld [CurPartyLevel], a + ld a, [PlayerLightScreenCount] + ld [CurPartySpecies], a + xor a + ld [MonType], a + ld [$d10b], a + ld hl, $6039 + ld a, $3 + rst FarCall + ld a, $6 + call Predef + ld e, $0 + call LoadTradesPointer + ld a, [hl] + cp $3 + ld b, $0 + jr c, .asm_fcd1c + ld b, $1 + +.asm_fcd1c + ld a, $13 + ld hl, $5ba3 + rst FarCall + ld e, $3 + call LoadTradesPointer + ld de, FailedMessage + call $4df4 + ld hl, PartyMon1Nickname + ld bc, $000b + call $4dde + ld hl, FailedMessage + call $4df4 + ld e, $13 + call LoadTradesPointer + push hl + ld de, $c724 + call $4df4 + pop hl + ld de, $c719 + call $4df4 + ld hl, PartyMon1OT + ld bc, $000b + call $4dde + ld hl, $c724 + call $4df4 + ld e, $e + call LoadTradesPointer + ld de, $c72f + call $4e0f + ld hl, PartyMon1DVs + ld bc, $0030 + call $4dde + ld hl, $c72f + call $4e0f + ld e, $11 + call LoadTradesPointer + ld de, $c732 + call $4e15 + ld hl, PartyMon1ID + ld bc, $0030 + call $4dde + ld hl, $c731 + call $4e0f + ld e, $10 + call LoadTradesPointer + push hl + ld hl, PartyMon1Item + ld bc, $0030 + call $4dde + pop hl + ld a, [hl] + ld [de], a + push af + push bc + push de + push hl + ld a, [CurPartyMon] + push af + ld a, [PartyCount] + dec a + ld [CurPartyMon], a + ld a, $3 + ld hl, $6134 + rst FarCall + pop af + ld [CurPartyMon], a + pop hl + pop de + pop bc + pop af + ret +; fcdc2 + LoadTradesPointer: ; 0xfcdc2 @@ -31866,7 +46316,94 @@ LoadTradesPointer: ; 0xfcdc2 ret ; 0xfcdd7 -INCBIN "baserom.gbc", $fcdd7, $fce58-$fcdd7 +Functionfcdd7: ; fcdd7 + ld a, [CurPartyMon] + call AddNTimes + ret +; fcdde + +Functionfcdde: ; fcdde + ld a, [PartyCount] + dec a + call AddNTimes + ld e, l + ld d, h + ret +; fcde8 + +Functionfcde8: ; fcde8 + push de + ld [$d265], a + call GetBasePokemonName + ld hl, StringBuffer1 + pop de + ret +; fcdf4 + +Functionfcdf4: ; fcdf4 + ld bc, $000b + call CopyBytes + ret +; fcdfb + +INCBIN "baserom.gbc", $fcdfb, $fce0f - $fcdfb + + +Functionfce0f: ; fce0f + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + ret +; fce15 + +Functionfce15: ; fce15 + ld a, [hli] + ld [de], a + dec de + ld a, [hl] + ld [de], a + ret +; fce1b + +Functionfce1b: ; fce1b + ld e, $2 + call LoadTradesPointer + ld a, [hl] + call $4de8 + ld de, StringBuffer2 + call $4df4 + ld e, $1 + call LoadTradesPointer + ld a, [hl] + call $4de8 + ld de, $d050 + call $4df4 + ld hl, StringBuffer1 +.asm_fce3c + ld a, [hli] + cp $50 + jr nz, .asm_fce3c + dec hl + push hl + ld e, $1e + call LoadTradesPointer + ld a, [hl] + pop hl + and a + ret z + cp $1 + ld a, $ef + jr z, .asm_fce54 + ld a, $f5 + +.asm_fce54 + ld [hli], a + ld [hl], $50 + ret +; fce58 + Trades: ; 0xfce58 ; byte 1: dialog @@ -31888,7 +46425,176 @@ Trades: ; 0xfce58 db 3,CHANSEY,AERODACTYL,"AEROY@@@@@@", $96, $66,GOLD_BERRY, $7b, $67,"KIM@@@@@@@@",0,0 db 0,DUGTRIO,MAGNETON,"MAGGIE@@@@@", $96, $66,METAL_COAT, $a2, $c3,"FOREST@@@@@",0,0 -INCBIN "baserom.gbc", $fcf38, $fd1d2-$fcf38 +Functionfcf38: ; fcf38 + push af + call $4e1b + pop af + ld bc, $0008 + ld hl, $4f53 + call AddNTimes + ld a, [$cf64] + ld c, a + add hl, bc + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + call PrintText + ret +; fcf53 + +INCBIN "baserom.gbc", $fcf53, $fcfec - $fcf53 + + +Functionfcfec: ; fcfec + ld a, [$d45c] + and a + ret nz + call $2d05 + and a + ret nz + xor a + ld [$dc18], a + call $5044 + ret nc + call $50c3 + ret nc + ld b, $3f + ld de, $500f + callba Function97c4f + scf + ret +; fd00f + +INCBIN "baserom.gbc", $fd00f, $fd044 - $fd00f + + +Functionfd044: ; fd044 + ld a, [$dc17] + cp $a + jr nc, .asm_fd065 + call $5117 + ld a, [hli] + ld [$ffc3], a + ld a, [hli] + ld [$ffc4], a + ld a, [hli] + ld [$ffc5], a + ld de, $d851 + ld bc, $ffc3 + ld a, $5 + ld hl, $600b + rst FarCall + jr nc, .asm_fd067 + +.asm_fd065 + jr .asm_fd069 + +.asm_fd067 + scf + ret + +.asm_fd069 + ld hl, $ffc3 + ld [hl], $0 + inc hl + ld [hl], $8 + inc hl + ld [hl], $fc +.asm_fd074 + ld de, $dc19 + ld bc, $d851 + ld a, $5 + ld hl, $600b + rst FarCall + jr z, .asm_fd08b + jr nc, .asm_fd089 + call $5099 + jr .asm_fd074 + +.asm_fd089 + xor a + ret + +.asm_fd08b + call $5099 + ld a, $5 + call Function2fb1 + inc a + ld [$dc18], a + scf + ret +; fd099 + +Functionfd099: ; fd099 + ld de, $dc19 + ld bc, $ffc3 + ld a, $5 + ld hl, $6053 + rst FarCall + ret +; fd0a6 + +INCBIN "baserom.gbc", $fd0a6, $fd0c3 - $fd0a6 + + +Functionfd0c3: ; fd0c3 + call $5117 + ld de, $0006 + add hl, de + ld a, [hli] + cp $1 + jr z, .asm_fd0db + ld a, [hl] + ld c, a + ld b, $1 + ld a, $9 + ld hl, $6ef1 + rst FarCall + scf + ret + +.asm_fd0db + ld a, [hl] + ld [CurItem], a + ld a, $1 + ld [$d10c], a + ld hl, $d8f1 + call $2f66 + ret +; fd0eb + +INCBIN "baserom.gbc", $fd0eb, $fd117 - $fd0eb + + +Functionfd117: ; fd117 + ld a, [$dc18] + and a + jr z, .asm_fd123 + dec a + ld de, $5136 + jr .asm_fd12e + +.asm_fd123 + ld a, [$dc17] + cp $a + jr c, .asm_fd12b + xor a + +.asm_fd12b + ld de, $515e + +.asm_fd12e + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + add hl, de + ret +; fd136 + +INCBIN "baserom.gbc", $fd136, $fd1d2 - $fd136 SECTION "bank40",DATA,BANK[$40] @@ -31898,7 +46604,61 @@ INCBIN "baserom.gbc", $100000, $10389d - $100000 SECTION "bank41",DATA,BANK[$41] -INCBIN "baserom.gbc", $104000, $104209 - $104000 +Function104000: ; 104000 + ld hl, $4006 + jp $4177 +; 104006 + +INCBIN "baserom.gbc", $104006, $104061 - $104006 + + +Function104061: ; 104061 + ld hl, $4067 + jp $4177 +; 104067 + +INCBIN "baserom.gbc", $104067, $104110 - $104067 + + +Function104110: ; 104110 + ld hl, $4116 + jp $4177 +; 104116 + +INCBIN "baserom.gbc", $104116, $104177 - $104116 + + +Function104177: ; 104177 + ld a, [hBGMapMode] + push af + ld a, [$ffde] + push af + xor a + ld [hBGMapMode], a + ld [$ffde], a + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld a, [rVBK] + push af + call $419c + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + pop af + ld [$ffde], a + pop af + ld [hBGMapMode], a + ret +; 10419c + +Function10419c: ; 10419c + jp [hl] +; 10419d + +INCBIN "baserom.gbc", $10419d, $104209 - $10419d Function104209: ; 104209 @@ -32047,7 +46807,12 @@ Function1042d6: ; 1042d6 ret ; 104303 -INCBIN "baserom.gbc", $104303, $104350 - $104303 +Function104303: ; 104303 + ld hl, $4309 + jp $4177 +; 104309 + +INCBIN "baserom.gbc", $104309, $104350 - $104309 INCBIN "gfx/ow/misc.2bpp" @@ -32203,7 +46968,30 @@ EnteredConnection: ; 1046c4 ; 1046c6 -INCBIN "baserom.gbc", $1046c6, $105258 - $1046c6 +INCBIN "baserom.gbc", $1046c6, $1050d9 - $1046c6 + + +Function1050d9: ; 1050d9 + call $5106 + ld hl, $abe2 + ld de, $abe4 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + jp CloseSRAM +; 1050ea + +INCBIN "baserom.gbc", $1050ea, $105106 - $1050ea + + +Function105106: ; 105106 + ld a, $0 + jp GetSRAMBank +; 10510b + +INCBIN "baserom.gbc", $10510b, $105258 - $10510b MysteryGiftGFX: INCBIN "gfx/misc/mystery_gift.2bpp" @@ -32582,14 +47370,59 @@ INCBIN "baserom.gbc", $105ef7, $106078 - $105ef7 HallOfFame1: ; 0x106078 ret -INCBIN "baserom.gbc", $106079, $1060bb - $106079 +INCBIN "baserom.gbc", $106079, $106094 - $106079 + + +Function106094: ; 106094 + ret +; 106095 + +INCBIN "baserom.gbc", $106095, $1060bb - $106095 Function1060bb: ; 1060bb ; commented out ret ; 1060bc -INCBIN "baserom.gbc", $1060bc, $106dbc - $1060bc +INCBIN "baserom.gbc", $1060bc, $1060d3 - $1060bc + + +Function1060d3: ; 1060d3 + ret +; 1060d4 + +INCBIN "baserom.gbc", $1060d4, $106187 - $1060d4 + + +Function106187: ; 106187 + ld a, $1 + call GetSRAMBank + ld a, [$be3c] + push af + ld a, $1 + call GetSRAMBank + pop af + ld [$be44], a + call CloseSRAM + ret +; 10619d + +INCBIN "baserom.gbc", $10619d, $106594 - $10619d + + +Function106594: ; 106594 + ld de, $65ad + ld hl, VTiles1 + ld bc, $4180 + call Functionf82 + ld de, $6dad + ld hl, $97f0 + ld bc, $4101 + call Functionf82 + ret +; 1065ad + +INCBIN "baserom.gbc", $1065ad, $106dbc - $1065ad SECTION "bank42",DATA,BANK[$42] @@ -32600,7 +47433,146 @@ IntroLogoGFX: ; 109407 INCBIN "gfx/intro/logo.lz" ; 10983f -INCBIN "baserom.gbc", $10983f, $1099aa - $10983f +INCBIN "baserom.gbc", $10983f, $109847 - $10983f + + +Function109847: ; 109847 + bit 6, b + ld a, $0 + jr z, .asm_10984f + ld a, $40 + +.asm_10984f + ld [$cf63], a + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + call WhiteBGMap + call ClearTileMap + call ClearSprites + ld hl, $ca00 + ld c, $80 + ld de, rJOYP +.asm_10986a + ld a, e + ld [hli], a + ld a, d + ld [hli], a + dec c + jr nz, .asm_10986a + ld de, $5c24 + ld hl, $9200 + ld bc, $4209 + call Functioneba + ld de, $4000 + ld hl, $9600 + ld bc, $391d + call Functioneba + ld de, $7d2e + ld hl, $9400 + ld bc, $3210 + call Functioneba + ld a, $ff + ld [$cf64], a + xor a + ld [$cf65], a + call $5bca + ld e, l + ld d, h + ld hl, VTiles2 + ld bc, $4210 + call Functioneba + call $5a95 + xor a + ld [$cf66], a + ld hl, $d100 + ld bc, Start + xor a + call ByteFill + ld a, $43 + ld [hLCDStatCustom], a + call GetCreditsPalette + call Function32f9 + ld a, [$ff9e] + push af + ld a, $5 + ld [$ff9e], a + ld a, $1 + ld [$ffaa], a + xor a + ld [hBGMapMode], a + ld [CreditsPos], a + ld [$cd21], a + ld [CreditsTimer], a +.asm_1098de + call $5908 + call $58fd + jr nz, .asm_1098ee + call $5926 + call DelayFrame + jr .asm_1098de + +.asm_1098ee + call WhiteBGMap + xor a + ld [hLCDStatCustom], a + ld [hBGMapAddress], a + pop af + ld [$ff9e], a + pop af + ld [rSVBK], a + ret +; 1098fd + +Function1098fd: ; 1098fd + ld a, [hJoypadDown] + and $1 + ret z + ld a, [$cf63] + bit 7, a + ret +; 109908 + +Function109908: ; 109908 + ld a, [hJoypadDown] + and $2 + ret z + ld a, [$cf63] + bit 6, a + ret z + ld hl, CreditsPos + ld a, [hli] + cp $d + jr nc, .asm_10991e + ld a, [hli] + and a + ret z + +.asm_10991e + ld hl, CreditsTimer + ld a, [hl] + and a + ret z + dec [hl] + ret +; 109926 + +Function109926: ; 109926 + ld a, [$cf63] + and $f + ld e, a + ld d, $0 + ld hl, $5937 + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 109937 + +INCBIN "baserom.gbc", $109937, $1099aa - $109937 ; Credits INCLUDE "engine/credits.asm" @@ -34317,12 +49289,39 @@ INCBIN "gfx/pics/201r/back.lz" SECTION "bank5B",DATA,BANK[$5B] -INCBIN "baserom.gbc", $16c000, $16d7fe - $16c000 +INCBIN "baserom.gbc", $16c000, $16d69a - $16c000 + + +Function16d69a: ; 16d69a + ld de, $52c1 + ld hl, $9760 + ld bc, $5b08 + call Functionf82 + ret +; 16d6a7 + +INCBIN "baserom.gbc", $16d6a7, $16d7fe - $16d6a7 SECTION "bank5C",DATA,BANK[$5C] -INCBIN "baserom.gbc", $170000, $17367f - $170000 +INCBIN "baserom.gbc", $170000, $170923 - $170000 + + +Function170923: ; 170923 + ld a, $5 + call GetSRAMBank + xor a + ld [$aa48], a + ld [$aa47], a + ld hl, $aa5d + ld bc, $0011 + call ByteFill + call CloseSRAM + ret +; 17093c + +INCBIN "baserom.gbc", $17093c, $17367f - $17093c SECTION "bank5D",DATA,BANK[$5D] @@ -34355,7 +49354,75 @@ INCBIN "baserom.gbc", $17a68f, $17b629 - $17a68f SECTION "bank5F",DATA,BANK[$5F] -INCBIN "baserom.gbc", $17c000, $17f036 - $17c000 +Function17c000: ; 17c000 + call DisableLCD + ld hl, VTiles2 + ld bc, $0310 + xor a + call ByteFill + call $0e51 + call Functione5f + ld hl, $4b83 + ld de, TileMap + ld bc, AttrMap + ld a, $12 +.asm_17c01e + push af + ld a, $14 + push hl +.asm_17c022 + push af + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [bc], a + inc bc + pop af + dec a + jr nz, .asm_17c022 + pop hl + push bc + ld bc, $0040 + add hl, bc + pop bc + pop af + dec a + jr nz, .asm_17c01e + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $4ff3 + ld de, $d000 + ld bc, $0080 + call CopyBytes + pop af + ld [rSVBK], a + ld hl, $4983 + ld de, $8300 + ld bc, $0200 + call CopyBytes + ld a, $1 + ld [rVBK], a + ld hl, $4083 + ld de, VTiles2 + ld bc, $0800 + call CopyBytes + ld hl, $4883 + ld de, VTiles1 + ld bc, Start + call CopyBytes + xor a + ld [rVBK], a + call EnableLCD + ld a, $41 + ld hl, $4061 + rst FarCall + ret +; 17c083 + +INCBIN "baserom.gbc", $17c083, $17f036 - $17c083 Function17f036: ; 17f036 @@ -34841,7 +49908,74 @@ Tileset26Coll: ; 0x1dd5a9 INCBIN "tilesets/26_collision.bin" ; 0x1dd6a9 -INCBIN "baserom.gbc", $1dd6a9, $1de28a - $1dd6a9 +INCBIN "baserom.gbc", $1dd6a9, $1ddf1c - $1dd6a9 + + +Function1ddf1c: ; 1ddf1c + ld hl, $5f33 + ld de, $9310 + call Decompress + ret +; 1ddf26 + +INCBIN "baserom.gbc", $1ddf26, $1de0d7 - $1ddf26 + + +Function1de0d7: ; 1de0d7 + ld hl, $60e1 + ld de, $a000 + call Decompress + ret +; 1de0e1 + +INCBIN "baserom.gbc", $1de0e1, $1de247 - $1de0e1 + + +Function1de247: ; 1de247 + ld a, [hBGMapAddress] + ld l, a + ld a, [$ffd7] + ld h, a + push hl + inc hl + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [$ffd7], a + ld hl, $c4b3 + ld [hl], $66 + ld hl, $c4c7 + ld a, $67 + ld b, $f + call $627f + ld [hl], $68 + ld hl, $c607 + ld [hl], $3c + xor a + ld b, $12 + ld hl, $cdec + call $627f + call Function3200 + pop hl + ld a, l + ld [hBGMapAddress], a + ld a, h + ld [$ffd7], a + ret +; 1de27f + +Function1de27f: ; 1de27f + push de + ld de, $0014 +.asm_1de283 + ld [hl], a + add hl, de + dec b + jr nz, .asm_1de283 + pop de + ret +; 1de28a + Function1de28a: ; 1de28a @@ -34937,12 +50071,197 @@ INCBIN "baserom.gbc", $1f0000, $1f09d8 - $1f0000 SECTION "bank7D",DATA,BANK[$7D] -INCBIN "baserom.gbc", $1f4000, $1f636a - $1f4000 +Function1f4000: ; 1f4000 + call z, $1e6b + ld a, $6 + call GetSRAMBank + ld hl, $4018 + ld de, $a000 + ld bc, $1000 + call CopyBytes + call CloseSRAM + ret +; 1f4018 + +INCBIN "baserom.gbc", $1f4018, $1f636a - $1f4018 SECTION "bank7E",DATA,BANK[$7E] -INCBIN "baserom.gbc", $1f8000, $1fb8a8 - $1f8000 +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, $414e + ld bc, $000b + call AddNTimes + ld bc, $000b + call CopyBytes + call $4081 + pop af + ld hl, $4000 + 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, $4450 + ld bc, $04d7 + call AddNTimes + ld a, [hRandomAdd] + ld b, a +.asm_1f8099 + call RNG + ld a, [hRandomAdd] + add b + ld b, a + and $1f + cp $15 + jr nc, .asm_1f8099 + ld bc, $003b + 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, $003b + call CopyBytes + ld a, [$d265] + push af + push de + ld hl, $ffc5 + 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 + +INCBIN "baserom.gbc", $1f814e, $1fb8a8 - $1f814e SECTION "bank7F",DATA,BANK[$7F] -- cgit v1.2.3