diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-11 16:11:08 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-11 16:15:06 -0500 |
commit | 91068077f05afbbfd6571ceadada2c03ac7c8038 (patch) | |
tree | 5d3ff368c3a31c99cd1967a589403a37ee1377ff /engine | |
parent | b522b0f165b6aae278ca9b4b18bada606d4ae737 (diff) |
Further split bank 4
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/breeding/egg.asm | 4 | ||||
-rwxr-xr-x | engine/clock_reset.asm | 2 | ||||
-rw-r--r-- | engine/events.asm | 2 | ||||
-rwxr-xr-x | engine/evolution_animation.asm | 2 | ||||
-rwxr-xr-x | engine/healmachineanim.asm | 266 | ||||
-rwxr-xr-x | engine/link.asm | 2 | ||||
-rwxr-xr-x | engine/mart.asm | 34 | ||||
-rwxr-xr-x | engine/namingscreen.asm | 959 | ||||
-rw-r--r-- | engine/save.asm | 2 | ||||
-rw-r--r-- | engine/scripting.asm | 8 | ||||
-rwxr-xr-x | engine/selectmenu.asm | 191 | ||||
-rw-r--r-- | engine/specials.asm | 2 | ||||
-rwxr-xr-x | engine/startmenu.asm | 1970 | ||||
-rwxr-xr-x | engine/tmhm.asm | 113 |
14 files changed, 3528 insertions, 29 deletions
diff --git a/engine/breeding/egg.asm b/engine/breeding/egg.asm index 2a2fac5e7..7c4d8ba62 100755 --- a/engine/breeding/egg.asm +++ b/engine/breeding/egg.asm @@ -190,7 +190,7 @@ DoEggStep:: ; 16f3e OverworldHatchEgg:: ; 16f5e call ResetWindow - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader call Function16f70 call Function2b4d call RestartMapMusic @@ -324,7 +324,7 @@ Function16f7a: ; 16f7a (5:6f7a) ld [MonType], a push de ld b, $0 - callba Function116c1 + callba NamingScreen pop hl ld de, StringBuffer1 call InitName diff --git a/engine/clock_reset.asm b/engine/clock_reset.asm index d9d8f3567..e51db6249 100755 --- a/engine/clock_reset.asm +++ b/engine/clock_reset.asm @@ -38,7 +38,7 @@ RestartClock: ; 20021 (8:4021) ld a, [hl] push af set NO_TEXT_SCROLL, [hl] - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader call ClearTileMap ld hl, .Text_SetWithControlPad call PrintText diff --git a/engine/events.asm b/engine/events.asm index 344063aab..ff2f55dbe 100644 --- a/engine/events.asm +++ b/engine/events.asm @@ -1078,7 +1078,7 @@ PlayerEventScriptPointers: ; 96c0c dba UnknownScript_0x96c4d ; 4 dba WarpToNewMapScript ; 5 dba FallIntoMapScript ; 6 - dba UnknownScript_0x124c8 ; 7 + dba Script_OverworldWhiteout ; 7 dba HatchEggScript ; 8 dba UnknownScript_0x96c4f ; 9 dba Invalid_0x96c2d ; 10 diff --git a/engine/evolution_animation.asm b/engine/evolution_animation.asm index 37f51932d..85bc8c5a8 100755 --- a/engine/evolution_animation.asm +++ b/engine/evolution_animation.asm @@ -161,7 +161,7 @@ Function4e703: ; 4e703 Function4e708: ; 4e708 call GetBaseData hlcoord 7, 2 - jp Function3786 + jp PrepMonFrontpic ; 4e711 Function4e711: ; 4e711 diff --git a/engine/healmachineanim.asm b/engine/healmachineanim.asm new file mode 100755 index 000000000..174d1ae5a --- /dev/null +++ b/engine/healmachineanim.asm @@ -0,0 +1,266 @@ +HealMachineAnim: ; 12324 + ; If you have no Pokemon, don't change the buffer. This can lead to some glitchy effects if you have no Pokemon. + ld a, [PartyCount] + and a + ret z + ; The location of the healing machine relative to the player is stored in ScriptVar. + ; 0: Up and left (Pokemon Center) + ; 1: Left (Elm's Lab) + ; 2: Up (Hall of Fame) + ld a, [ScriptVar] + ld [Buffer1], a + ld a, [rOBP1] + ld [Buffer2], a + call .DoJumptableFunctions + ld a, [Buffer2] + call Functiond24 + ret +; 1233e + +.DoJumptableFunctions: ; 1233e + xor a + ld [wd1ec], a +.jumpable_loop + ld a, [Buffer1] + ld e, a + ld d, 0 + ld hl, .Pointers +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wd1ec] + ld e, a + inc a + ld [wd1ec], a + add hl, de + ld a, [hl] + cp 5 + jr z, .finish + ld hl, .Jumptable + rst JumpTable + jr .jumpable_loop + +.finish + ret +; 12365 + +.Pointers: ; 12365 + dw .Pokecenter + dw .ElmLab + dw .HallOfFame +; 1236b + +.Pokecenter: ; 1236b + db 0, 1, 3, 5 +.ElmLab: ; 1236f + db 0, 1, 3, 5 +.HallOfFame: ; 12373 + db 0, 2, 4, 5 +; 12377 + +.Jumptable: ; 12377 + dw .LoadGFX + dw .PC_LoadBallsOntoMachine + dw .HOF_LoadBallsOntoMachine + dw .PlayHealMusic + dw .HOF_PlaySFX + dw .dummy_5 ; never encountered +; 12383 + +.LoadGFX: ; 12383 + call .LoadPalettes + ld de, .HealMachineGFX + ld hl, VTiles0 tile $7c + lb bc, BANK(.HealMachineGFX), $2 + call Request2bpp + ret +; 12393 + +.PC_LoadBallsOntoMachine: ; 12393 + ld hl, Sprites + $80 + ld de, .PC_ElmsLab_TileMap + call .PlaceHealingMachineTile + call .PlaceHealingMachineTile + jr .LoadBallsOntoMachine + +.HOF_LoadBallsOntoMachine: ; 123a1 + ld hl, Sprites + $80 + ld de, .HOF_TileMap + +.LoadBallsOntoMachine: ; 123a7 + ld a, [PartyCount] + ld b, a +.party_loop + call .PlaceHealingMachineTile + push de + ld de, SFX_SECOND_PART_OF_ITEMFINDER + call PlaySFX + pop de + ld c, 30 + call DelayFrames + dec b + jr nz, .party_loop + ret +; 123bf + +.PlayHealMusic: ; 123bf + ld de, MUSIC_HEAL + call PlayMusic + jp .FlashPalettes8Times +; 123c8 + +.HOF_PlaySFX: ; 123c8 + ld de, SFX_GAME_FREAK_LOGO_GS + call PlaySFX + call .FlashPalettes8Times + call WaitSFX + ld de, SFX_BOOT_PC + call PlaySFX + ret +; 123db + +.dummy_5: ; 123db + ret +; 123dc + +.PC_ElmsLab_TileMap: ; 123dc + db $20, $22, $7c, $16 + db $20, $26, $7c, $16 + db $26, $20, $7d, $16 + db $26, $28, $7d, $36 + db $2b, $20, $7d, $16 + db $2b, $28, $7d, $36 + db $30, $20, $7d, $16 + db $30, $28, $7d, $36 +; 123fc + +.HealMachineGFX: ; 123fc +INCBIN "gfx/unknown/0123fc.2bpp" +; 1241c + +.HOF_TileMap: ; 1241c + db $3c, $51, $7d, $16 + db $3c, $56, $7d, $16 + db $3b, $4d, $7d, $16 + db $3b, $5a, $7d, $16 + db $39, $49, $7d, $16 + db $39, $5d, $7d, $16 +; 12434 + +.LoadPalettes: ; 12434 + call IsCGB + jr nz, .cgb + ld a, %11100000 + ld [rOBP1], a + ret + +.cgb + ld hl, .palettes + ld de, OBPals + 8 * 6 + ld bc, 8 + ld a, $5 + call FarCopyWRAM + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 12451 + +.palettes: ; 12451 + RGB 31, 31, 31 + RGB 31, 19, 10 + RGB 31, 07, 01 + RGB 00, 00, 00 +; 12459 + +.FlashPalettes8Times: ; 12459 + ld c, $8 +.palette_loop + push bc + call .FlashPalettes + ld c, 10 + call DelayFrames + pop bc + dec c + jr nz, .palette_loop + ret +; 12469 + +.FlashPalettes: ; 12469 + call IsCGB + jr nz, .go + ld a, [rOBP1] + xor %00101000 + ld [rOBP1], a + ret + +.go + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + + ld hl, OBPals + 8 * 6 + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + push de + ld c, $3 +.palette_loop_2 + ld a, [hli] + ld e, a + ld a, [hld] + ld d, a + dec hl + ld a, d + ld [hld], a + ld a, e + ld [hli], a +rept 3 + inc hl +endr + dec c + jr nz, .palette_loop_2 + pop de + dec hl + ld a, d + ld [hld], a + ld a, e + ld [hl], a + + pop af + ld [rSVBK], a + ld a, $1 + ld [hCGBPalUpdate], a + ret +; 124a3 + +.PlaceHealingMachineTile: ; 124a3 + push bc + ld a, [Buffer1] + lb bc, $10, $20 + cp $1 ; ElmsLab + jr z, .okay + lb bc, $00, $00 + +.okay + ld a, [de] + add c + inc de + ld [hli], a + ld a, [de] + add b + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + pop bc + ret +; 124c1 diff --git a/engine/link.asm b/engine/link.asm index 41e6abfa2..38ac235fb 100755 --- a/engine/link.asm +++ b/engine/link.asm @@ -1676,7 +1676,7 @@ Function28b87: ; 28b87 ld hl, UnknownText_0x28eb8 bccoord 1, 14 call PlaceWholeStringInBoxAtOnce - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader hlcoord 10, 7 ld b, $3 ld c, $7 diff --git a/engine/mart.asm b/engine/mart.asm index 1d01c4228..2c3dac0e7 100755 --- a/engine/mart.asm +++ b/engine/mart.asm @@ -36,7 +36,7 @@ MartDialog: ; 15a61 HerbShop: ; 15a6e call FarReadMart - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader ld hl, Text_HerbShop_Intro call MartTextBox call BuyMenu @@ -50,7 +50,7 @@ BargainShop: ; 15a84 ld de, BargainShopData call LoadMartPointer call ReadMart - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader ld hl, Text_BargainShop_Intro call MartTextBox call BuyMenu @@ -69,7 +69,7 @@ BargainShop: ; 15a84 Pharmacist: ; 15aae call FarReadMart - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader ld hl, UnknownText_0x15e90 call MartTextBox call BuyMenu @@ -90,7 +90,7 @@ RooftopSale: ; 15ac4 .ok call LoadMartPointer call ReadMart - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader ld hl, Text_Mart_HowMayIHelpYou call MartTextBox call BuyMenu @@ -175,7 +175,7 @@ StandardMart: ; 15b47 ; 15b62 .HowMayIHelpYou: ; 15b62 - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader ld hl, Text_Mart_HowMayIHelpYou call PrintText ld a, $1 ; top menu @@ -183,7 +183,7 @@ StandardMart: ; 15b47 ; 15b6e .TopMenu: ; 15b6e - ld hl, MenuDataHeader_0x15f88 + ld hl, MenuDataHeader_BuySell call CopyMenuDataHeader call InterpretMenu2 jr c, .quit @@ -228,7 +228,7 @@ StandardMart: ; 15b47 ; 15baf .AnythingElse: ; 15baf - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader ld hl, Text_Mart_AnythingElse call PrintText ld a, $1 ; top menu @@ -472,7 +472,7 @@ endr BuyMenuLoop: ; 15cef callba Function24ae8 call UpdateSprites - ld hl, MenuDataHeader_0x15e18 + ld hl, MenuDataHeader_Buy call CopyMenuDataHeader ld a, [wd045] ld [wMenuCursorBuffer], a @@ -643,19 +643,19 @@ Text_Mart_CostsThisMuch: ; 0x15e13 db "@" ; 0x15e18 -MenuDataHeader_0x15e18: ; 0x15e18 +MenuDataHeader_Buy: ; 0x15e18 db $40 ; flags db 03, 01 ; start coords db 11, 19 ; end coords - dw MenuData2_0x15e20 + dw .menudata2 db 1 ; default option ; 0x15e20 -MenuData2_0x15e20: ; 0x15e20 - db $30 ; flags +.menudata2: ; 0x15e20 + db $30 ; pointers db 4, 8 ; rows, columns db 1 ; horizontal spacing - dbw 0, OBPals + 8 * 6 + dbw 0, CurMart dba PlaceMenuItemName dba .PrintBCDPrices dba Function244c3 @@ -929,16 +929,16 @@ Text_Mart_HowMayIHelpYou: ; 0x15f83 db "@" ; 0x15f88 -MenuDataHeader_0x15f88: ; 0x15f88 +MenuDataHeader_BuySell: ; 0x15f88 db $40 ; flags db 00, 00 ; start coords db 08, 07 ; end coords - dw MenuData2_0x15f90 + dw .menudata2 db 1 ; default option ; 0x15f90 -MenuData2_0x15f90: ; 0x15f90 - db $80 ; flags +.menudata2: ; 0x15f90 + db $80 ; strings db 3 ; items db "BUY@" db "SELL@" diff --git a/engine/namingscreen.asm b/engine/namingscreen.asm new file mode 100755 index 000000000..4618f4e20 --- /dev/null +++ b/engine/namingscreen.asm @@ -0,0 +1,959 @@ +_NamingScreen: ; 0x116b7 + call DisableSpriteUpdates + call NamingScreen + call Function2b74 + ret +; 0x116c1 + +NamingScreen: ; 116c1 + ld hl, wc6d0 + ld [hl], e + inc hl + ld [hl], d + ld hl, wc6d4 + ld [hl], b + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + ld a, [hMapAnims] + push af + xor a + ld [hMapAnims], a + ld a, [hInMenu] + push af + ld a, $1 + ld [hInMenu], a + call Function116f8 + call DelayFrame +.asm_116e5 + call Function11915 + jr nc, .asm_116e5 + pop af + ld [hInMenu], a + pop af + ld [hMapAnims], a + pop af + ld [Options], a + call ClearJoypad + ret +; 116f8 + +Function116f8: ; 116f8 + call WhiteBGMap + ld b, $8 + call GetSGBLayout + call DisableLCD + call Function11c51 + call Function118a8 + ld a, $e3 + ld [rLCDC], a + call Function1171d + call WaitBGMap + call WaitTop + call SetPalettes + call Function11be0 + ret +; 1171d + +Function1171d: ; 1171d + ld a, [wc6d4] + and 7 + ld e, a + ld d, 0 + ld hl, Jumptable_1172e +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 1172e + + +Jumptable_1172e: ; 1172e (4:572e) + dw Function1173e + dw Function1178d + dw Function117ae + dw Function117d1 + dw Function117f5 + dw Function1182c + dw Function1173e + dw Function1173e + + +Function1173e: ; 1173e (4:573e) + ld a, [CurPartySpecies] + ld [wd265], a + ld hl, Function8e83f + ld a, BANK(Function8e83f) + ld e, $1 + rst FarCall ; ; indirect jump to Function8e83f (8e83f (23:683f)) + ld a, [CurPartySpecies] + ld [wd265], a + call GetPokemonName + hlcoord 5, 2 + call PlaceString + ld l, c + ld h, b + ld de, Strings_11780 + call PlaceString + inc de + hlcoord 5, 4 + call PlaceString + callba GetGender + jr c, .asm_1177c + ld a, $ef + jr nz, .asm_11778 + ld a, $f5 +.asm_11778 + hlcoord 1, 2 + ld [hl], a +.asm_1177c + call Function1187b + ret +; 11780 (4:5780) + +Strings_11780: ; 11780 + db "'S@" + db "NICKNAME?@" +; 1178d + +Function1178d: ; 1178d (4:578d) + callba GetPlayerIcon + call Function11847 + hlcoord 5, 2 + ld de, String_117a3 + call PlaceString + call Function11882 + ret +; 117a3 (4:57a3) + +String_117a3: ; 117a3 + db "YOUR NAME?@" +; 117ae + +Function117ae: ; 117ae (4:57ae) + ld de, SilverSpriteGFX + ld b, BANK(SilverSpriteGFX) + call Function11847 + hlcoord 5, 2 + ld de, String_117c3 + call PlaceString + call Function11882 + ret +; 117c3 (4:57c3) + +String_117c3: ; 117c3 + db "RIVAL'S NAME?@" +; 117d1 + +Function117d1: ; 117d1 (4:57d1) + ld de, MomSpriteGFX + ld b, BANK(MomSpriteGFX) + call Function11847 + hlcoord 5, 2 + ld de, String_117e6 + call PlaceString + call Function11882 + ret +; 117e6 (4:57e6) + +String_117e6: ; 117e6 + db "MOTHER'S NAME?@" +; 117f5 + +Function117f5: ; 117f5 (4:57f5) + ld de, PokeBallSpriteGFX + ld hl, VTiles0 tile $00 + lb bc, BANK(PokeBallSpriteGFX), $4 + call Request2bpp + xor a + ld hl, wc300 + ld [hli], a + ld [hl], a + ld de, $2420 + ld a, $a + call Function3b2a + ld hl, $1 + add hl, bc + ld [hl], $0 + hlcoord 5, 2 + ld de, String_11822 + call PlaceString + call Function11889 + ret +; 11822 (4:5822) + +String_11822: ; 11822 + db "BOX NAME?@" +; 1182c + +Function1182c: ; 1182c (4:582c) + hlcoord 3, 2 + ld de, String_11839 + call PlaceString + call Function11882 + ret +; 11839 (4:5839) + +String_11839: ; 11839 + db "おともだち の なまえは?@" +; 11847 + +Function11847: ; 11847 (4:5847) + push de + ld hl, VTiles0 tile $00 + ld c, $4 + push bc + call Request2bpp + pop bc + ld hl, $c0 + add hl, de + ld e, l + ld d, h + ld hl, VTiles0 tile $04 + call Request2bpp + xor a + ld hl, wc300 + ld [hli], a + ld [hl], a + pop de + ld b, $a + ld a, d + cp $7a + jr nz, .asm_11873 + ld a, e + cp $40 + jr nz, .asm_11873 + ld b, $1e +.asm_11873 + ld a, b + ld de, $2420 + call Function3b2a + ret + +Function1187b: ; 1187b (4:587b) + ld a, $a + hlcoord 5, 6 + jr Function11890 + +Function11882: ; 11882 (4:5882) + ld a, $7 + hlcoord 5, 6 + jr Function11890 + +Function11889: ; 11889 (4:5889) + ld a, $8 + hlcoord 5, 4 + jr Function11890 + +Function11890: ; 11890 (4:5890) + ld [wc6d3], a + ld a, l + ld [wc6d8], a + ld a, h + ld [wc6d9], a + ret + + +Function1189c: ; 1189c + push bc + push af + ld a, [wc6d4] + sub $3 + ld b, a + pop af + dec b + pop bc + ret +; 118a8 + +Function118a8: ; 118a8 + call WaitTop + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, $60 + call ByteFill + hlcoord 1, 1 + lb bc, 6, 18 + call Function1189c + jr nz, .asm_118c4 + lb bc, 4, 18 + +.asm_118c4 + call ClearBox + ld de, NameInputUpper +Function118ca: ; 118ca + call Function1189c + jr nz, .asm_118d5 + ld hl, BoxNameInputLower - NameInputLower + add hl, de + ld d, h + ld e, l + +.asm_118d5 + push de + hlcoord 1, 8 + lb bc, 7, 18 + call Function1189c + jr nz, .asm_118e7 + hlcoord 1, 6 + lb bc, 9, 18 + +.asm_118e7 + call ClearBox + hlcoord 1, 16 + lb bc, 1, 18 + call ClearBox + pop de + hlcoord 2, 8 + ld b, $5 + call Function1189c + jr nz, .asm_11903 + hlcoord 2, 6 + ld b, $6 + +.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, $17 + add hl, de + pop de + dec b + jr nz, .asm_11903 + ret +; 11915 + +Function11915: ; 11915 + call JoyTextDelay + ld a, [wJumptableIndex] + bit 7, a + jr nz, .asm_11930 + call Function11968 + callba Function8cf62 + call Function11940 + call DelayFrame + and a + ret + +.asm_11930 + callab Function8cf53 + call ClearSprites + xor a + ld [hSCX], a + ld [hSCY], a + scf + ret +; 11940 + +Function11940: ; 11940 + xor a + ld [hBGMapMode], a + hlcoord 1, 5 + call Function1189c + jr nz, .asm_1194e + hlcoord 1, 3 + +.asm_1194e + lb bc, 1, 18 + call ClearBox + ld hl, wc6d0 + ld e, [hl] + inc hl + ld d, [hl] + ld hl, wc6d8 + ld a, [hli] + ld h, [hl] + ld l, a + call PlaceString + ld a, $1 + ld [hBGMapMode], a + ret +; 11968 + +Function11968: ; 11968 + ld a, [wJumptableIndex] + ld e, a + ld d, $0 + ld hl, Jumptable_11977 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 11977 + + +Jumptable_11977: ; 11977 (4:5977) + dw Function1197b + dw Function119a1 + + +Function1197b: ; 1197b (4:597b) + lb de, $50, $18 + call Function1189c + jr nz, .asm_11985 + ld d, $40 +.asm_11985 + ld a, $2 + call Function3b2a + ld a, c + ld [wc6d5], a + ld a, b + ld [wc6d6], a + ld hl, $1 + add hl, bc + ld a, [hl] + ld hl, $e + add hl, bc + ld [hl], a + ld hl, wJumptableIndex + inc [hl] + ret + +Function119a1: ; 119a1 (4:59a1) + ld hl, hJoyPressed ; $ffa7 + ld a, [hl] + and A_BUTTON + jr nz, .a + ld a, [hl] + and B_BUTTON + jr nz, .b + ld a, [hl] + and START + jr nz, .start + ld a, [hl] + and SELECT + jr nz, .select + ret + +.a + call Function11a0b + cp $1 + jr z, .select + cp $2 + jr z, .b + cp $3 + jr z, .asm_119eb + call Function11c11 + call Function11b14 + ret nc + +.start + ld hl, wc6d5 + ld c, [hl] + inc hl + ld b, [hl] + ld hl, $c + add hl, bc + ld [hl], $8 + ld hl, $d + add hl, bc + ld [hl], $4 + call Function1189c + ret nz + inc [hl] + ret + +.b + call Function11bbc + ret + +.asm_119eb + call Function11bf7 + ld hl, wJumptableIndex + set 7, [hl] + ret + +.select + ld hl, wcf64 + ld a, [hl] + xor 1 + ld [hl], a + jr z, .asm_11a04 + ld de, NameInputLower + call Function118ca + ret + +.asm_11a04 + ld de, NameInputUpper + call Function118ca + ret + +Function11a0b: ; 11a0b (4:5a0b) + ld hl, wc6d5 + ld c, [hl] + inc hl + ld b, [hl] + +Function11a11: ; 11a11 (4:5a11) + ld hl, $d + add hl, bc + ld a, [hl] + push bc + ld b, $4 + call Function1189c + jr nz, .asm_11a1f + inc b +.asm_11a1f + cp b + pop bc + jr nz, .asm_11a39 + ld hl, $c + add hl, bc + ld a, [hl] + cp $3 + jr c, .asm_11a33 + cp $6 + jr c, .asm_11a36 + ld a, $3 + ret +.asm_11a33 + ld a, $1 + ret +.asm_11a36 + ld a, $2 + ret +.asm_11a39 + xor a + ret + +Function11a3b: ; 11a3b (4:5a3b) + call Function11a8b + ld hl, $d + add hl, bc + ld a, [hl] + ld e, a + swap e + ld hl, $7 + add hl, bc + ld [hl], e + ld d, $4 + call Function1189c + jr nz, .asm_11a53 + inc d +.asm_11a53 + cp d + ld de, Unknown_11a79 + ld a, $0 + jr nz, .asm_11a60 + ld de, Unknown_11a82 + ld a, $1 +.asm_11a60 + ld hl, $e + add hl, bc + add [hl] + ld hl, $1 + add hl, bc + ld [hl], a + ld hl, $c + add hl, bc + ld l, [hl] + ld h, $0 + add hl, de + ld a, [hl] + ld hl, $6 + add hl, bc + ld [hl], a + ret +; 11a79 (4:5a79) + +Unknown_11a79: ; 11a79 + db $00, $10, $20, $30, $40, $50, $60, $70, $80 +Unknown_11a82: ; 11a82 + db $00, $00, $00, $30, $30, $30, $60, $60, $60 +; 11a8b + +Function11a8b: ; 11a8b (4:5a8b) + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .up + ld a, [hl] + and D_DOWN + jr nz, .down + ld a, [hl] + and D_LEFT + jr nz, .left + ld a, [hl] + and D_RIGHT + jr nz, .right + ret +.right + call Function11a11 + and a + jr nz, .asm_11ab7 + ld hl, $c + add hl, bc + ld a, [hl] + cp $8 + jr nc, .asm_11ab4 + inc [hl] + ret +.asm_11ab4 + ld [hl], $0 + ret +.asm_11ab7 + cp $3 + jr nz, .asm_11abc + xor a +.asm_11abc + ld e, a + add a + add e + ld hl, $c + add hl, bc + ld [hl], a + ret +.left + call Function11a11 + and a + jr nz, .asm_11ad8 + ld hl, $c + add hl, bc + ld a, [hl] + and a + jr z, .asm_11ad5 + dec [hl] + ret +.asm_11ad5 + ld [hl], $8 + ret +.asm_11ad8 + cp $1 + jr nz, .asm_11ade + ld a, $4 +.asm_11ade +rept 2 + dec a +endr + ld e, a + add a + add e + ld hl, $c + add hl, bc + ld [hl], a + ret +.down + ld hl, $d + add hl, bc + ld a, [hl] + call Function1189c + jr nz, .asm_11af9 + cp $5 + jr nc, .asm_11aff + inc [hl] + ret +.asm_11af9 + cp $4 + jr nc, .asm_11aff + inc [hl] + ret +.asm_11aff + ld [hl], $0 + ret +.up + ld hl, $d + add hl, bc + ld a, [hl] + and a + jr z, .asm_11b0c + dec [hl] + ret +.asm_11b0c + ld [hl], $4 + call Function1189c + ret nz + inc [hl] + ret + +Function11b14: ; 11b14 (4:5b14) + ld a, [wc6d7] + +Function11b17: ; 11b17 (4:5b17) + ld a, [wc6d3] + ld c, a + ld a, [wc6d2] + cp c + ret nc + + ld a, [wc6d7] + +Function11b23: ; 11b23 + call Function11bd0 + ld [hl], a + +Function11b27: ; 11b27 + ld hl, wc6d2 + inc [hl] + call Function11bd0 + ld a, [hl] + cp $50 + jr z, .asm_11b37 + ld [hl], $f2 + and a + ret +.asm_11b37 + scf + ret +; 11b39 (4:5b39) + +Function11b39: ; 11b39 + ld a, [wc6d2] + and a + ret z + push hl + ld hl, wc6d2 + dec [hl] + call Function11bd0 + ld c, [hl] + pop hl + +.asm_11b48 + ld a, [hli] + cp $ff + jr z, Function11b27 + cp c + jr z, .asm_11b53 + inc hl + jr .asm_11b48 + +.asm_11b53 + ld a, [hl] + jr Function11b23 +; 11b56 + +Dakutens: ; Dummied out + db "かが", "きぎ", "くぐ", "けげ", "こご" + db "さざ", "しじ", "すず", "せぜ", "そぞ" + db "ただ", "ちぢ", "つづ", "てで", "とど" + db "はば", "ひび", "ふぶ", "へべ", "ほぼ" + db "カガ", "キギ", "クグ", "ケゲ", "コゴ" + db "サザ", "シジ", "スズ", "セゼ", "ソゾ" + db "タダ", "チヂ", "ツヅ", "テデ", "トド" + db "ハバ", "ヒビ", "フブ", "へべ", "ホボ" + db $ff + +Handakutens: ; Dummied out + db "はぱ", "ひぴ", "ふぷ", "へぺ", "ほぽ" + db "ハパ", "ヒピ", "フプ", "へぺ", "ホポ" + db $ff +; 11bbc + +Function11bbc: ; 11bbc (4:5bbc) + ld hl, wc6d2 + ld a, [hl] + and a + ret z + dec [hl] + call Function11bd0 + ld [hl], $f2 + inc hl + ld a, [hl] + cp $f2 + ret nz + ld [hl], $eb + ret + +Function11bd0: ; 11bd0 (4:5bd0) + push af + ld hl, wc6d0 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wc6d2] + ld e, a + ld d, 0 + add hl, de + pop af + ret +; 11be0 + +Function11be0: ; 11be0 +; load $f2, ($eb * [wc6d3]), $50 into the dw address at wc6d0 + ld hl, wc6d0 + ld a, [hli] + ld h, [hl] + ld l, a + ld [hl], "·" + inc hl + ld a, [wc6d3] + dec a + ld c, a + ld a, "→" +.loop + ld [hli], a + dec c + jr nz, .loop + ld [hl], "@" + ret +; 11bf7 + + +Function11bf7: ; 11bf7 (4:5bf7) + ld hl, wc6d0 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wc6d3] + ld c, a +.asm_11c01 + ld a, [hl] + cp $eb + jr z, .asm_11c0a + cp $f2 + jr nz, .asm_11c0c +.asm_11c0a + ld [hl], $50 +.asm_11c0c + inc hl + dec c + jr nz, .asm_11c01 + ret + +Function11c11: ; 11c11 (4:5c11) + ld hl, wc6d5 + ld c, [hl] + inc hl + ld b, [hl] + ld hl, $6 + add hl, bc + ld a, [hl] + ld hl, $4 + add hl, bc + add [hl] + sub $8 + srl a + srl a + srl a + ld e, a + ld hl, $7 + add hl, bc + ld a, [hl] + ld hl, $5 + add hl, bc + add [hl] + sub $10 + srl a + srl a + srl a + ld d, a + hlcoord 0, 0 + ld bc, $14 +.asm_11c43 + ld a, d + and a + jr z, .asm_11c4b + add hl, bc + dec d + jr .asm_11c43 +.asm_11c4b + add hl, de + ld a, [hl] + ld [wc6d7], a + ret + + +Function11c51: ; 11c51 + call ClearSprites + callab Function8cf53 + call LoadStandardFont + call LoadFontsExtra + + ld de, GFX_11e65 + ld hl, VTiles1 tile $6b + lb bc, BANK(GFX_11e65), 1 + call Get1bpp + + ld de, GFX_11e6d + ld hl, VTiles1 tile $72 + lb bc, BANK(GFX_11e6d), 1 + call Get1bpp + + ld de, VTiles2 tile $60 + ld hl, GFX_11cb7 + ld bc, $10 + ld a, BANK(GFX_11cb7) + call FarCopyBytes + + ld de, VTiles0 tile $7e + ld hl, GFX_11cc7 + ld bc, $20 + ld a, BANK(GFX_11cc7) + call FarCopyBytes + + ld a, $5 + ld hl, wc312 + ld [hli], a + ld [hl], $7e + xor a + ld [hSCY], a + ld [wc3bf], a + ld [hSCX], a + ld [wc3c0], a + ld [wJumptableIndex], a + ld [wcf64], a + ld [hBGMapMode], a + ld [wc6d2], a + ld a, $7 + ld [hWX], a + ret +; 11cb7 + +GFX_11cb7: ; 11cb7 +INCBIN "gfx/unknown/011cb7.2bpp" +; 11cc7 + +GFX_11cc7: ; 11cc7 +INCBIN "gfx/unknown/011cc7.2bpp" +; 11ce7 + +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 "× ( ) : ; [ ] <PK> <MN>" + 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: ; Unreferenced? + 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 "× ( ) : ; [ ] <PK> <MN>" + db "- ? ! ♂ ♀ / . , &" + db "lower DEL END " +; 11e5d + +GFX_11e5d: ; ???? +INCBIN "gfx/unknown/011e5d.2bpp" +; 11e6d + +GFX_11e65: +INCBIN "gfx/unknown/011e65.2bpp" +; 11e6d + +GFX_11e6d: ; 11e6d +INCBIN "gfx/unknown/011e6d.2bpp" +; 11e75 diff --git a/engine/save.asm b/engine/save.asm index a4afa2a05..de11a8133 100644 --- a/engine/save.asm +++ b/engine/save.asm @@ -1,5 +1,5 @@ Function14a1a: ; 14a1a - call LoadPartyMenuDataHeader + call LoadStandardMenuDataHeader callba Function5e9a call SpeechTextBox call UpdateSprites diff --git a/engine/scripting.asm b/engine/scripting.asm index 57674bd81..f94436f67 100644 --- a/engine/scripting.asm +++ b/engine/scripting.asm @@ -1560,8 +1560,8 @@ Script_returnafterbattle: ; 0x97459 and $3f cp $1 jr nz, .notblackedout ; 0x97466 $8 - ld b, BANK(UnknownScript_0x124c1) - ld hl, UnknownScript_0x124c1 + ld b, BANK(Script_BattleWhiteout) + ld hl, Script_BattleWhiteout jp ScriptJump .notblackedout @@ -2884,9 +2884,9 @@ Script_blackoutmod: ; 0x97a78 ; map_id (MapIdParam) call GetScriptByte - ld [wdcb2], a + ld [wLastSpawnMapGroup], a call GetScriptByte - ld [wdcb3], a + ld [wLastSpawnMapNumber], a ret ; 0x97a85 diff --git a/engine/selectmenu.asm b/engine/selectmenu.asm new file mode 100755 index 000000000..e73f397a5 --- /dev/null +++ b/engine/selectmenu.asm @@ -0,0 +1,191 @@ +SelectMenu:: ; 13327 + + call CheckRegisteredItem + jr c, .NotRegistered + jp UseRegisteredItem + +.NotRegistered + call LoadFont + ld b, BANK(ItemMayBeRegisteredText) + ld hl, ItemMayBeRegisteredText + call MapTextbox + call CloseText + jp LoadMoveSprites +; 13340 + + +ItemMayBeRegisteredText: ; 13340 + text_jump 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 +rept 2 + add hl, de +endr + 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 +rept 2 + add hl, de +endr + 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 [wd107], 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, [wItemAttributeParamBuffer] + 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 LoadFont + call CantUseItem + call LoadMoveSprites + and a + ret +; 133ea + +.Current ; 133ea + call LoadFont + call DoItemEffect + call LoadMoveSprites + and a + ret +; 133f5 + +.Party ; 133f5 + call ResetWindow + call FadeToMenu + call DoItemEffect + call Function2b3c + call LoadMoveSprites + and a + ret +; 13406 + +.Overworld ; 13406 + call ResetWindow + ld a, 1 + ld [wd0ef], a + call DoItemEffect + xor a + ld [wd0ef], a + ld a, [wd0ec] + cp 1 + jr nz, ._cantuse + scf + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + ret +; 13422 + +.CantUse ; 13422 + call ResetWindow + +._cantuse + call CantUseItem + call LoadMoveSprites + and a + ret +; 1342d diff --git a/engine/specials.asm b/engine/specials.asm index 005ee2487..c1e9ff95b 100644 --- a/engine/specials.asm +++ b/engine/specials.asm @@ -42,7 +42,7 @@ SpecialsPointers:: ; c029 ; Map Events add_special BugContestJudging add_special CheckPartyFullAfterContest - add_special CheckFirstMonFainted + add_special ContestDropOffMons add_special ContestReturnMons add_special Special_GiveParkBalls add_special Special_CheckMagikarpLength diff --git a/engine/startmenu.asm b/engine/startmenu.asm new file mode 100755 index 000000000..b7287be83 --- /dev/null +++ b/engine/startmenu.asm @@ -0,0 +1,1970 @@ +StartMenu:: ; 125cd + + call ResetTextRelatedRAM + + ld de, SFX_MENU + call PlaySFX + + callba Function6454 + + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ld hl, .MenuDataHeader + jr z, .GotMenuData + ld hl, .ContestMenuDataHeader +.GotMenuData + + call LoadMenuDataHeader + call .SetUpMenuItems + ld a, [wd0d2] + ld [wMenuCursorBuffer], a + call .DrawMenuAccount_ + call MenuFunc_1e7f + call .DrawBugContestStatusBox + call Function2e31 + call Function2e20 + callba Function64bf + call .DrawBugContestStatus + call UpdateTimePals + jr .Select + +.Reopen + call UpdateSprites + call UpdateTimePals + call .SetUpMenuItems + ld a, [wd0d2] + ld [wMenuCursorBuffer], a + +.Select + call .GetInput + jr c, .Exit + call .DrawMenuAccount + ld a, [wMenuCursorBuffer] + ld [wd0d2], a + call PlayClickSFX + call Function1bee + call .OpenMenu + +; Menu items have different return functions. +; For example, saving exits the menu. + ld hl, .MenuReturns + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.MenuReturns + dw .Reopen + dw .Exit + dw .ExitMenuCallFuncLoadMoveSprites + dw .ExitMenuRunScriptLoadMoveSprites + dw .ExitMenuRunScript + dw .ReturnEnd + dw .ReturnRedraw + +.Exit + ld a, [hOAMUpdate] + push af + ld a, 1 + ld [hOAMUpdate], a + call LoadFontsExtra + pop af + ld [hOAMUpdate], a +.ReturnEnd + call ExitMenu +.ReturnEnd2 + call LoadMoveSprites + call UpdateTimePals + ret + +.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 Function1f1a + ld a, [wcf73] + cp B_BUTTON + jr z, .b + cp A_BUTTON + jr z, .a + jr .loop +.a + call PlayClickSFX + and a + ret +.b + scf + ret +; 12691 + +.ExitMenuRunScript ; 12691 + call ExitMenu + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + ret +; 12699 + +.ExitMenuRunScriptLoadMoveSprites ; 12699 + call ExitMenu + ld a, HMENURETURN_SCRIPT + ld [hMenuReturn], a + jr .ReturnEnd2 +; 126a2 + +.ExitMenuCallFuncLoadMoveSprites ; 126a2 + call ExitMenu + ld hl, wQueuedScriptAddr + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wQueuedScriptBank] + rst FarCall + jr .ReturnEnd2 +; 126b1 + +.ReturnRedraw ; 126b1 + call .Clear + jp .Reopen +; 126b7 + +.Clear ; 126b7 + call WhiteBGMap + call Call_ExitMenu + call Function2bae + call .DrawMenuAccount_ + call MenuFunc_1e7f + call .DrawBugContestStatus + call UpdateSprites + call Functiond90 + call Function2b5c + ret +; 126d3 + + +.MenuDataHeader + db $40 ; tile backup + db 0, 10 ; start coords + db 17, 19 ; end coords + dw .MenuData + db 1 ; default selection + +.ContestMenuDataHeader + db $40 ; tile backup + db 2, 10 ; start coords + db 17, 19 ; end coords + dw .MenuData + db 1 ; default selection + +.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 "<PLAYER>@" +.SaveString db "SAVE@" +.OptionString db "OPTION@" +.ExitString db "EXIT@" +.PokegearString db $24, "GEAR@" +.QuitString db "QUIT@" + +.PokedexDesc db "#MON" + next "database@" + +.PartyDesc db "Party ", $4a + next "status@" + +.PackDesc db "Contains" + next "items@" + +.PokegearDesc db "Trainer's" + next "key device@" + +.StatusDesc db "Your own" + next "status@" + +.SaveDesc db "Save your" + next "progress@" + +.OptionDesc db "Change" + next "settings@" + +.ExitDesc db "Close this" + next "menu@" + +.QuitDesc db "Quit and" + next "be judged.@" + + +.OpenMenu ; 127e5 + ld a, [MenuSelection] + call .GetMenuAccountTextPointer + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 127ef + +.MenuString ; 127ef + push de + ld a, [MenuSelection] + call .GetMenuAccountTextPointer +rept 2 + inc hl +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +; 12800 + +.MenuDesc ; 12800 + push de + ld a, [MenuSelection] + cp $ff + jr z, .none + call .GetMenuAccountTextPointer +rept 4 + inc hl +endr + ld a, [hli] + ld d, [hl] + ld e, a + pop hl + call PlaceString + ret +.none + pop de + ret +; 12819 + + +.GetMenuAccountTextPointer ; 12819 + ld e, a + ld d, 0 + ld hl, wcf97 + ld a, [hli] + ld h, [hl] + ld l, a +rept 6 + add hl, de +endr + ret +; 12829 + + +.SetUpMenuItems ; 12829 + xor a + ld [wcf76], a + call .FillMenuList + + ld hl, StatusFlags + bit 0, [hl] + jr z, .no_pokedex + ld a, 0 ; pokedex + call .AppendMenuList +.no_pokedex + + ld a, [PartyCount] + and a + jr z, .no_pokemon + ld a, 1 ; pokemon + call .AppendMenuList +.no_pokemon + + ld a, [wLinkMode] + 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, wPokegearFlags + bit 7, [hl] + jr z, .no_pokegear + ld a, 7 ; pokegear + call .AppendMenuList +.no_pokegear + + ld a, 3 ; status + call .AppendMenuList + + ld a, [wLinkMode] + 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 + + ld a, 5 ; option + call .AppendMenuList + ld a, 6 ; exit + call .AppendMenuList + ld a, c + ld [MenuItemsList], a + ret +; 1288d + + +.FillMenuList ; 1288d + xor a + ld hl, MenuItemsList + ld [hli], a + ld a, -1 + ld bc, MenuItemsListEnd - (MenuItemsList + 1) + call ByteFill + ld de, MenuItemsList + 1 + ld c, 0 + ret +; 128a0 + +.AppendMenuList ; 128a0 + ld [de], a + inc de + inc c + ret +; 128a4 + +.DrawMenuAccount_ ; 128a4 + jp .DrawMenuAccount +; 128a7 + +.PrintMenuAccount ; 128a7 + call .IsMenuAccountOn + ret z + call .DrawMenuAccount + decoord 0, 14 + jp .MenuDesc +; 128b4 + +.DrawMenuAccount ; 128b4 + call .IsMenuAccountOn + ret z + hlcoord 0, 13 + lb bc, 5, 10 + call ClearBox + hlcoord 0, 13 + ld b, 3 + ld c, 8 + jp TextBoxPalette +; 128cb + +.IsMenuAccountOn ; 128cb + ld a, [Options2] + and 1 + ret +; 128d1 + +.DrawBugContestStatusBox ; 128d1 + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + ret z + callba Function24bdc + ret +; 128de + +.DrawBugContestStatus ; 128de + ld hl, StatusFlags2 + bit 2, [hl] ; bug catching contest + jr nz, .contest + ret +.contest + callba Function24be7 + ret +; 128ed + + +StartMenu_Exit: ; 128ed +; Exit the menu. + + ld a, 1 + ret +; 128f0 + + +StartMenu_Quit: ; 128f0 +; Retire from the bug catching contest. + + ld hl, .EndTheContestText + call Function12cf5 + jr c, .DontEndContest + ld a, BANK(BugCatchingContestReturnToGateScript) + ld hl, BugCatchingContestReturnToGateScript + call FarQueueScript + ld a, 4 + ret + +.DontEndContest + ld a, 0 + ret + +.EndTheContestText + text_jump UnknownText_0x1c1a6c + db "@" +; 1290b + + +StartMenu_Save: ; 1290b +; Save the game. + + call BufferScreen + callba Function14a1a + jr nc, .asm_12919 + ld a, 0 + ret +.asm_12919 + ld a, 1 + ret +; 1291c + + +StartMenu_Option: ; 1291c +; Game options. + + call FadeToMenu + callba OptionsMenu + ld a, 6 + ret +; 12928 + + +StartMenu_Status: ; 12928 +; Player status. + + call FadeToMenu + callba Function25105 + call Function2b3c + ld a, 0 + ret +; 12937 + + +StartMenu_Pokedex: ; 12937 + + ld a, [PartyCount] + and a + jr z, .asm_12949 + + call FadeToMenu + callba Pokedex + call Function2b3c + +.asm_12949 + ld a, 0 + ret +; 1294c + + +StartMenu_Pokegear: ; 1294c + + call FadeToMenu + callba Function90b8d + call Function2b3c + ld a, 0 + ret +; 1295b + + +StartMenu_Pack: ; 1295b + + call FadeToMenu + callba Pack + ld a, [wcf66] + and a + jr nz, .asm_12970 + call Function2b3c + ld a, 0 + ret +.asm_12970 + call Function2b4d + ld a, 4 + ret +; 12976 + + +StartMenu_Pokemon: ; 12976 + + ld a, [PartyCount] + and a + jr z, .return + + call FadeToMenu + +.choosemenu + xor a + ld [PartyMenuActionText], a ; Choose a POKéMON. + call WhiteBGMap + +.menu + callba Function5004f + callba Function50405 + callba Function503e0 + +.menunoreload + callba WritePartyMenuTilemap + callba PrintPartyMenuText + call WaitBGMap + call SetPalettes ; load regular palettes? + call DelayFrame + callba PartyMenuSelect + jr c, .return ; if cancelled or pressed B + + call PokemonActionSubmenu + cp 3 + jr z, .menu + cp 0 + jr z, .choosemenu + cp 1 + jr z, .menunoreload + cp 2 + jr z, .quit + +.return + call Function2b3c + ld a, 0 + ret + +.quit + ld a, b + push af + call Function2b4d + pop af + ret +; 129d5 + +Function129d5: ; 129d5 + ld a, [NumItems] + and a + ret nz + ld a, [NumKeyItems] + and a + ret nz + ld a, [NumBalls] + and a + ret nz + ld hl, TMsHMs + ld b, NUM_TMS + NUM_HMS +.asm_129e9 + ld a, [hli] + and a + jr nz, .asm_129f2 + dec b + jr nz, .asm_129e9 + scf + ret +.asm_129f2 + and a + ret + +Function129f4: ; 129f4 + push de + call PartyMonItemName + callba _CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr nz, .asm_12a3f + ld hl, UnknownText_0x12a45 + call MenuTextBox + callba Function24fbf + push af + call WriteBackup + call ExitMenu + pop af + jr c, .asm_12a42 + ld hl, UnknownText_0x12a4a + call MenuTextBox + call YesNoBox + push af + call ExitMenu + pop af + jr c, .asm_12a42 + pop hl + ld a, [wd107] + call TossItem + call PartyMonItemName + ld hl, UnknownText_0x12a4f + call MenuTextBox + call ExitMenu + and a + ret +.asm_12a3f + call Function12a54 +.asm_12a42 + pop hl + scf + ret +; 12a45 (4:6a45) + +UnknownText_0x12a45: ; 0x12a45 + ; Toss out how many @ (S)? + text_jump UnknownText_0x1c1a90 + db "@" +; 0x12a4a + +UnknownText_0x12a4a: ; 0x12a4a + ; Throw away @ @ (S)? + text_jump UnknownText_0x1c1aad + db "@" +; 0x12a4f + +UnknownText_0x12a4f: ; 0x12a4f + ; Discarded @ (S). + text_jump UnknownText_0x1c1aca + db "@" +; 0x12a54 + +Function12a54: ; 12a54 (4:6a54) + ld hl, UnknownText_0x12a5b + call MenuTextBoxBackup + ret +; 12a5b (4:6a5b) + +UnknownText_0x12a5b: ; 0x12a5b + ; That's too impor- tant to toss out! + text_jump UnknownText_0x1c1adf + db "@" +; 0x12a60 + +CantUseItem: ; 12a60 + ld hl, CantUseItemText + call Function2012 + ret +; 12a67 + +CantUseItemText: ; 12a67 + text_jump UnknownText_0x1c1b03 + db "@" +; 12a6c + + +PartyMonItemName: ; 12a6c + ld a, [CurItem] + ld [wd265], a + call GetItemName + call CopyName1 + ret +; 12a79 + + +CancelPokemonAction: ; 12a79 + callba Function50405 + callba Function8ea71 + ld a, 1 + ret +; 12a88 + + +PokemonActionSubmenu: ; 12a88 + hlcoord 1, 15 + lb bc, 2, 18 + call ClearBox + callba MonSubmenu + call GetCurNick + ld a, [MenuSelection] + ld hl, .Actions + ld de, 3 + call IsInArray + jr nc, .nothing + + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.nothing + ld a, 0 + ret + +.Actions + dbw MONMENU_CUT, MonMenu_Cut ; Cut + dbw MONMENU_FLY, MonMenu_Fly ; Fly + dbw MONMENU_SURF, MonMenu_Surf ; Surf + dbw MONMENU_STRENGTH, MonMenu_Strength ; Strength + dbw MONMENU_FLASH, MonMenu_Flash ; Flash + dbw MONMENU_WHIRLPOOL, MonMenu_Whirlpool ; Whirlpool + dbw MONMENU_DIG, MonMenu_Dig ; Dig + dbw MONMENU_TELEPORT, MonMenu_Teleport ; Teleport + dbw MONMENU_SOFTBOILED, MonMenu_Softboiled_MilkDrink ; Softboiled + dbw MONMENU_MILKDRINK, MonMenu_Softboiled_MilkDrink ; MilkDrink + dbw MONMENU_HEADBUTT, MonMenu_Headbutt ; Headbutt + dbw MONMENU_WATERFALL, MonMenu_Waterfall ; Waterfall + dbw MONMENU_ROCKSMASH, MonMenu_RockSmash ; RockSmash + dbw MONMENU_SWEETSCENT, MonMenu_SweetScent ; SweetScent + dbw MONMENU_STATS, OpenPartyStats + dbw MONMENU_SWITCH, SwitchPartyMons + dbw MONMENU_ITEM, GiveTakePartyMonItem + dbw MONMENU_CANCEL, CancelPokemonAction + dbw MONMENU_MOVE, ManagePokemonMoves ; move + dbw MONMENU_MAIL, MonMailAction ; mail +; 12aec + + +SwitchPartyMons: ; 12aec + +; Don't try if there's nothing to switch! + ld a, [PartyCount] + cp 2 + jr c, .DontSwitch + + ld a, [CurPartyMon] + inc a + ld [wd0e3], a + + callba Function8ea8c + callba Function5042d + + ld a, 4 + ld [PartyMenuActionText], a + callba WritePartyMenuTilemap + callba PrintPartyMenuText + + hlcoord 0, 1 + ld bc, 20 * 2 + ld a, [wd0e3] + dec a + call AddNTimes + ld [hl], "▷" + call WaitBGMap + call SetPalettes + call DelayFrame + + callba PartyMenuSelect + bit 1, b + jr c, .DontSwitch + + callba _SwitchPartyMons + + xor a + ld [PartyMenuActionText], a + + callba Function5004f + callba Function50405 + callba Function503e0 + + ld a, 1 + ret + +.DontSwitch + xor a + ld [PartyMenuActionText], a + call CancelPokemonAction + ret +; 12b60 + + +GiveTakePartyMonItem: ; 12b60 + +; Eggs can't hold items! + ld a, [CurPartySpecies] + cp EGG + jr z, .asm_12ba6 + + ld hl, GiveTakeItemMenuData + call LoadMenuDataHeader + call InterpretMenu2 + call ExitMenu + jr c, .asm_12ba6 + + call GetCurNick + ld hl, StringBuffer1 + ld de, wd050 + ld bc, $b + call CopyBytes + ld a, [MenuSelection2] + cp 1 + jr nz, .asm_12ba0 + + call LoadStandardMenuDataHeader + call ClearPalettes + call Function12ba9 + call ClearPalettes + call LoadFontsBattleExtra + call ExitMenu + ld a, 0 + ret + +.asm_12ba0 + call TakePartyItem + ld a, 3 + ret + +.asm_12ba6 + ld a, 3 + ret +; 12ba9 + + +Function12ba9: ; 12ba9 + + callba Function106a5 + +.loop + callba Function106be + + ld a, [wcf66] + and a + jr z, .quit + + ld a, [wcf65] + cp 2 + jr z, .next + + call CheckTossableItem + ld a, [wItemAttributeParamBuffer] + and a + jr nz, .next + + call Function12bd9 + jr .quit + +.next + ld hl, CantBeHeldText + call MenuTextBoxBackup + jr .loop + +.quit + ret +; 12bd9 + + +Function12bd9: ; 12bd9 + + call SpeechTextBox + call PartyMonItemName + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .asm_12bf4 + + push hl + ld d, a + callba ItemIsMail + pop hl + jr c, .asm_12c01 + ld a, [hl] + jr .asm_12c08 + +.asm_12bf4 + call Function12cea + ld hl, MadeHoldText + call MenuTextBoxBackup + call GivePartyItem + ret + +.asm_12c01 + ld hl, PleaseRemoveMailText + call MenuTextBoxBackup + ret + +.asm_12c08 + ld [wd265], a + call GetItemName + ld hl, SwitchAlreadyHoldingText + call Function12cf5 + jr c, .asm_12c4b + + call Function12cea + ld a, [wd265] + push af + ld a, [CurItem] + ld [wd265], a + pop af + ld [CurItem], a + call Function12cdf + jr nc, .asm_12c3c + + ld hl, TookAndMadeHoldText + call MenuTextBoxBackup + ld a, [wd265] + ld [CurItem], a + call GivePartyItem + ret + +.asm_12c3c + ld a, [wd265] + ld [CurItem], a + call Function12cdf + ld hl, ItemStorageIsFullText + call MenuTextBoxBackup + +.asm_12c4b + ret +; 12c4c + + +GivePartyItem: ; 12c4c + + call GetPartyItemLocation + ld a, [CurItem] + ld [hl], a + ld d, a + callba ItemIsMail + jr nc, .asm_12c5f + call Function12cfe + +.asm_12c5f + ret +; 12c60 + + +TakePartyItem: ; 12c60 + + call SpeechTextBox + call GetPartyItemLocation + ld a, [hl] + and a + jr z, .asm_12c8c + + ld [CurItem], a + call Function12cdf + jr nc, .asm_12c94 + + callba ItemIsMail + call GetPartyItemLocation + ld a, [hl] + ld [wd265], a + ld [hl], NO_ITEM + call GetItemName + ld hl, TookFromText + call MenuTextBoxBackup + jr .asm_12c9a + +.asm_12c8c + ld hl, IsntHoldingAnythingText + call MenuTextBoxBackup + jr .asm_12c9a + +.asm_12c94 + ld hl, ItemStorageIsFullText + call MenuTextBoxBackup + +.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 + db "@" +; 12cb4 + +MadeHoldText: ; 12cb4 + text_jump UnknownText_0x1c1b57 + db "@" +; 12cb9 + +PleaseRemoveMailText: ; 12cb9 + text_jump UnknownText_0x1c1b6f + db "@" +; 12cbe + +IsntHoldingAnythingText: ; 12cbe + text_jump UnknownText_0x1c1b8e + db "@" +; 12cc3 + +ItemStorageIsFullText: ; 12cc3 + text_jump UnknownText_0x1c1baa + db "@" +; 12cc8 + +TookFromText: ; 12cc8 + text_jump UnknownText_0x1c1bc4 + db "@" +; 12ccd + +SwitchAlreadyHoldingText: ; 12ccd + text_jump UnknownText_0x1c1bdc + db "@" +; 12cd2 + +CantBeHeldText: ; 12cd2 + text_jump UnknownText_0x1c1c09 + db "@" +; 12cd7 + + +GetPartyItemLocation: ; 12cd7 + push af + ld a, MON_ITEM + call GetPartyParamLocation + pop af + ret +; 12cdf + + +Function12cdf: ; 12cdf + ld a, $1 + ld [wItemQuantityChangeBuffer], a + ld hl, NumItems + jp ReceiveItem +; 12cea + + +Function12cea: ; 12cea (4:6cea) + ld a, $1 + ld [wItemQuantityChangeBuffer], a + ld hl, NumItems + jp TossItem + +Function12cf5: ; 12cf5 + call MenuTextBox + call YesNoBox + jp ExitMenu +; 12cfe + + +Function12cfe: ; 12cfe (4:6cfe) + ld de, wd002 + callba Function11e75 + ld hl, PlayerName + ld de, wd023 + ld bc, $a + call CopyBytes + ld hl, PlayerID + ld bc, $2 + call CopyBytes + ld a, [CurPartySpecies] + ld [de], a + inc de + ld a, [CurItem] + ld [de], a + ld a, [CurPartyMon] + ld hl, sPartyScratch1 + ld bc, SCRATCHMON_STRUCT_LENGTH + call AddNTimes + ld d, h + ld e, l + ld hl, wd002 + ld bc, SCRATCHMON_STRUCT_LENGTH + ld a, BANK(sPartyScratch1) + call GetSRAMBank + call CopyBytes + call CloseSRAM + ret + +MonMailAction: ; 12d45 +; If in the time capsule or trade center, +; selecting the mail only allows you to +; read the mail. + ld a, [wLinkMode] + cp LINK_TIMECAPSULE + jr z, .read + cp LINK_TRADECENTER + jr z, .read + +; Show the READ/TAKE/QUIT menu. + ld hl, .MenuDataHeader + call LoadMenuDataHeader + call InterpretMenu2 + call ExitMenu + +; Interpret the menu. + jp c, .done + ld a, [MenuSelection2] + cp $1 + jr z, .read + cp $2 + jr z, .take + jp .done + +.read + callba ReadPartyMonMail + ld a, $0 + ret + +.take + ld hl, .sendmailtopctext + call Function12cf5 + jr c, .RemoveMailToBag + ld a, [CurPartyMon] + ld b, a + callba Function4456e + jr c, .MailboxFull + ld hl, .sentmailtopctext + call MenuTextBoxBackup + jr .done + +.MailboxFull + ld hl, .mailboxfulltext + call MenuTextBoxBackup + jr .done + +.RemoveMailToBag + ld hl, .mailwilllosemessagetext + call Function12cf5 + jr c, .done + call GetPartyItemLocation + ld a, [hl] + ld [CurItem], a + call Function12cdf + jr nc, .BagIsFull + call GetPartyItemLocation + ld [hl], $0 + call GetCurNick + ld hl, .tookmailfrommontext + call MenuTextBoxBackup + jr .done + +.BagIsFull + ld hl, .bagfulltext + call MenuTextBoxBackup + jr .done + +.done + ld a, $3 + ret +; 12dc9 + + +.MenuDataHeader: ; 0x12dc9 + db $40 ; flags + db 10, 12 ; start coords + db 17, 19 ; end coords + dw .MenuData2 + db 1 ; default option +; 0x12dd1 + +.MenuData2: ; 0x12dd1 + db $80 ; flags + db 3 ; items + db "READ@" + db "TAKE@" + db "QUIT@" +; 0x12de2 + + +.mailwilllosemessagetext: ; 0x12de2 +; The MAIL will lose its message. OK? + text_jump UnknownText_0x1c1c22 + db "@" +; 0x12de7 + +.tookmailfrommontext: ; 0x12de7 +; MAIL detached from <POKEMON>. + text_jump UnknownText_0x1c1c47 + db "@" +; 0x12dec + +.bagfulltext: ; 0x12dec +; There's no space for removing MAIL. + text_jump UnknownText_0x1c1c62 + db "@" +; 0x12df1 + +.sendmailtopctext: ; 0x12df1 +; Send the removed MAIL to your PC? + text_jump UnknownText_0x1c1c86 + db "@" +; 0x12df6 + +.mailboxfulltext: ; 0x12df6 +; Your PC's MAILBOX is full. + text_jump UnknownText_0x1c1ca9 + db "@" +; 0x12dfb + +.sentmailtopctext: ; 0x12dfb +; The MAIL was sent to your PC. + text_jump UnknownText_0x1c1cc4 + db "@" +; 0x12e00 + + +OpenPartyStats: ; 12e00 + call LoadStandardMenuDataHeader + call ClearSprites +; PartyMon + xor a + ld [MonType], a + call LowVolume + predef StatsScreenInit + call MaxVolume + call Call_ExitMenu + ld a, 0 + ret +; 12e1b + + +MonMenu_Cut: ; 12e1b + callba CutFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12e2d + ld b, $4 + ld a, $2 + ret + +.asm_12e2d + ld a, $3 + ret +; 12e30 + + +MonMenu_Fly: ; 12e30 + callba FlyFunction + ld a, [wd0ec] + cp $2 + jr z, .asm_12e4c + cp $0 + jr z, .asm_12e4f + callba MobileFn_1060b5 + ld b, $4 + ld a, $2 + ret + +.asm_12e4c + ld a, $3 + ret + +.asm_12e4f + ld a, $0 + ret + +.asm_12e52 + ld a, $1 + ret +; 12e55 + +MonMenu_Flash: ; 12e55 + callba Functionc8ac + ld a, [wd0ec] + cp $1 + jr nz, .asm_12e67 + ld b, $4 + ld a, $2 + ret + +.asm_12e67 + ld a, $3 + ret +; 12e6a + +MonMenu_Strength: ; 12e6a + callba StrengthFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12e7c + ld b, $4 + ld a, $2 + ret + +.asm_12e7c + ld a, $3 + ret +; 12e7f + +MonMenu_Whirlpool: ; 12e7f + callba WhirlpoolFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12e91 + ld b, $4 + ld a, $2 + ret + +.asm_12e91 + ld a, $3 + ret +; 12e94 + +MonMenu_Waterfall: ; 12e94 + callba Functioncade + ld a, [wd0ec] + cp $1 + jr nz, .asm_12ea6 + ld b, $4 + ld a, $2 + ret + +.asm_12ea6 + ld a, $3 + ret +; 12ea9 + +MonMenu_Teleport: ; 12ea9 + callba TeleportFunction + ld a, [wd0ec] + and a + jr z, .asm_12eba + ld b, $4 + ld a, $2 + ret + +.asm_12eba + ld a, $3 + ret +; 12ebd + +MonMenu_Surf: ; 12ebd + callba SurfFunction + ld a, [wd0ec] + and a + jr z, .asm_12ece + ld b, $4 + ld a, $2 + ret + +.asm_12ece + ld a, $3 + ret +; 12ed1 + +MonMenu_Dig: ; 12ed1 + callba DigFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12ee3 + ld b, $4 + ld a, $2 + ret + +.asm_12ee3 + ld a, $3 + ret +; 12ee6 + +MonMenu_Softboiled_MilkDrink: ; 12ee6 + call Function12f05 + jr nc, .asm_12ef3 + callba Functionf3df + jr .asm_12ef9 + +.asm_12ef3 + ld hl, UnknownText_0x12f00 + call PrintText + +.asm_12ef9 + xor a + ld [PartyMenuActionText], a + ld a, $3 + ret +; 12f00 + +UnknownText_0x12f00: ; 0x12f00 + ; Not enough HP! + text_jump UnknownText_0x1c1ce3 + db "@" +; 0x12f05 + +Function12f05: ; 12f05 + ld a, MON_MAXHP + call GetPartyParamLocation + ld a, [hli] + ld [hDividend + 0], a + ld a, [hl] + ld [hDividend + 1], a + ld a, $5 + ld [hDivisor], a + ld b, $2 + call Divide + ld a, MON_HP + 1 + call GetPartyParamLocation + ld a, [hQuotient + 2] + sub [hl] + dec hl + ld a, [hQuotient + 1] + sbc [hl] + ret +; 12f26 + +MonMenu_Headbutt: ; 12f26 + callba HeadbuttFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12f38 + ld b, $4 + ld a, $2 + ret + +.asm_12f38 + ld a, $3 + ret +; 12f3b + +MonMenu_RockSmash: ; 12f3b + callba RockSmashFunction + ld a, [wd0ec] + cp $1 + jr nz, .asm_12f4d + ld b, $4 + ld a, $2 + ret + +.asm_12f4d + ld a, $3 + ret +; 12f50 + +MonMenu_SweetScent: ; 12f50 + callba DoMovementFunctionc + ld b, $4 + ld a, $2 + ret +; 12f5b + +Function12f5b: ; 12f5b + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call LoadFontsBattleExtra + call Function12f73 + pop bc + ld a, b + ld [Options], a + push af + call WhiteBGMap + pop af + ret +; 12f73 + +Function12f73: ; 12f73 + call SetUpMoveScreenBG + ld de, Unknown_12fb2 + call Function1bb1 + call Function131ef + ld hl, wcfa5 + set 6, [hl] + jr Function12f93 + +Function12f86: ; 12f86 + call Function1bd3 + bit 1, a + jp nz, Function12f9f + bit 0, a + jp nz, Function12f9c + +Function12f93: ; 12f93 + call PrepareToPlaceMoveData + call PlaceMoveData + jp Function12f86 +; 12f9c + +Function12f9c: ; 12f9c + and a + jr Function12fa0 + +Function12f9f: ; 12f9f + scf + +Function12fa0: ; 12fa0 + push af + xor a + ld [wd0e3], a + ld hl, wcfa5 + res 6, [hl] + call ClearSprites + call ClearTileMap + pop af + ret +; 12fb2 + +Unknown_12fb2: ; 12fb2 + db $03, $01, $03, $01, $40, $00, $20, $c3 +; 12fba + +ManagePokemonMoves: ; 12fba + ld a, [CurPartySpecies] + cp EGG + jr z, .egg + ld hl, Options + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call MoveScreenLoop + pop af + ld [Options], a + call WhiteBGMap + +.egg + ld a, $0 + ret +; 12fd5 + +MoveScreenLoop: ; 12fd5 + ld a, [CurPartyMon] + inc a + ld [wd0d8], a + call SetUpMoveScreenBG + call Function132d3 + ld de, Unknown_13163 + call Function1bb1 +.loop + call Function131ef + ld hl, wcfa5 + set 6, [hl] + jr .skip_joy + +.joy_loop + call Function1bd3 + bit 1, a + jp nz, .b_button + bit 0, a + jp nz, .a_button + bit 4, a + jp nz, .d_right + bit 5, a + jp nz, .d_left + +.skip_joy + call PrepareToPlaceMoveData + ld a, [wMoveSwapBuffer] + and a + jr nz, .moving_move + call PlaceMoveData + jp .joy_loop + +.moving_move + ld a, " " + hlcoord 1, 11 + ld bc, 5 + call ByteFill + hlcoord 1, 12 + lb bc, 5, SCREEN_WIDTH - 2 + call ClearBox + hlcoord 1, 12 + ld de, String_1316b + call PlaceString + jp .joy_loop +.b_button: ; 13038 + call PlayClickSFX + call WaitSFX + ld a, [wMoveSwapBuffer] + and a + jp z, .exit + + ld a, [wMoveSwapBuffer] + ld [MenuSelection2], a + xor a + ld [wMoveSwapBuffer], a + hlcoord 1, 2 + lb bc, 8, SCREEN_WIDTH - 2 + call ClearBox + jp .loop +; 1305b + +.d_right: ; 1305b + ld a, [wMoveSwapBuffer] + and a + jp nz, .joy_loop + + ld a, [CurPartyMon] + ld b, a + push bc + call .cycle_right + pop bc + ld a, [CurPartyMon] + cp b + jp z, .joy_loop + jp MoveScreenLoop + +.d_left: ; 13075 + ld a, [wMoveSwapBuffer] + and a + jp nz, .joy_loop + ld a, [CurPartyMon] + ld b, a + push bc + call .cycle_left + pop bc + ld a, [CurPartyMon] + cp b + jp z, .joy_loop + jp MoveScreenLoop + +.cycle_right + ld a, [CurPartyMon] + inc a + ld [CurPartyMon], a + ld c, a + ld b, 0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + cp -1 + jr z, .cycle_left + cp EGG + ret nz + jr .cycle_right + +.cycle_left + ld a, [CurPartyMon] + and a + ret z +.cycle_left_loop + ld a, [CurPartyMon] + dec a + ld [CurPartyMon], a + ld c, a + ld b, 0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + cp EGG + ret nz + ld a, [CurPartyMon] + and a + jr z, .cycle_right + jr .cycle_left_loop +; 130c6 + +.a_button: ; 130c6 + call PlayClickSFX + call WaitSFX + ld a, [wMoveSwapBuffer] + and a + jr nz, .place_move + ld a, [MenuSelection2] + ld [wMoveSwapBuffer], a + call Function1bee + jp .moving_move + +.place_move + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + push hl + call .copy_move + pop hl + ld bc, $15 + add hl, bc + call .copy_move + ld a, [wBattleMode] + jr z, .swap_moves + ld hl, BattleMonMoves + ld bc, $20 + ld a, [CurPartyMon] + call AddNTimes + push hl + call .copy_move + pop hl + ld bc, 6 + add hl, bc + call .copy_move + +.swap_moves + ld de, SFX_SWITCH_POKEMON + call PlaySFX + call WaitSFX + ld de, SFX_SWITCH_POKEMON + call PlaySFX + call WaitSFX + hlcoord 1, 2 + lb bc, 8, 18 + call ClearBox + hlcoord 10, 10 + lb bc, 1, 9 + call ClearBox + jp .loop +; 1313a + +.copy_move: ; 1313a + push hl + ld a, [MenuSelection2] + dec a + ld c, a + ld b, $0 + add hl, bc + ld d, h + ld e, l + pop hl + ld a, [wMoveSwapBuffer] + dec a + ld c, a + ld b, $0 + add hl, bc + ld a, [de] + ld b, [hl] + ld [hl], a + ld a, b + ld [de], a + ret +; 13154 + +.exit: ; 13154 + xor a + ld [wMoveSwapBuffer], a + ld hl, wcfa5 + res 6, [hl] + call ClearSprites + jp ClearTileMap +; 13163 + +Unknown_13163: ; 13163 + db $03, $01, $03, $01, $40, $00, $20, $f3 +; 1316b + +String_1316b: ; 1316b + db "Where?@" +; 13172 + +SetUpMoveScreenBG: ; 13172 + call WhiteBGMap + call ClearTileMap + call ClearSprites + xor a + ld [hBGMapMode], a + callba Functionfb571 + callba InefficientlyClear121BytesAtwc300 + ld a, [CurPartyMon] + ld e, a + ld d, $0 + ld hl, PartySpecies + add hl, de + ld a, [hl] + ld [wd265], a + ld e, $2 + callba Function8e83f + hlcoord 0, 1 + ld b, 9 + ld c, 18 + call TextBox + hlcoord 0, 11 + ld b, 5 + ld c, 18 + call TextBox + hlcoord 2, 0 + lb bc, 2, 3 + call ClearBox + xor a + ld [MonType], a + ld hl, PartyMonNicknames + ld a, [CurPartyMon] + call GetNick + hlcoord 5, 1 + call PlaceString + push bc + callba CopyPkmnToTempMon + pop hl + call PrintLevel + ld hl, PlayerHPPal + call SetHPPal + ld b, $e + call GetSGBLayout + hlcoord 16, 0 + lb bc, 1, 3 + jp ClearBox +; 131ef + +Function131ef: ; 131ef + xor a + ld [hBGMapMode], a + ld [wMoveSwapBuffer], a + ld [MonType], a + predef CopyPkmnToTempMon + ld hl, TempMonMoves + ld de, wListMoves_MoveIndicesBuffer + ld bc, NUM_MOVES + call CopyBytes + ld a, SCREEN_WIDTH * 2 + ld [Buffer1], a + hlcoord 2, 3 + predef ListMoves + hlcoord 10, 4 + predef Function50c50 + call WaitBGMap + call SetPalettes + ld a, [wd0eb] + inc a + ld [wcfa3], a + hlcoord 0, 11 + ld b, 5 + ld c, 18 + jp TextBox +; 13235 + +PrepareToPlaceMoveData: ; 13235 + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld a, [MenuSelection2] + dec a + ld c, a + ld b, $0 + add hl, bc + ld a, [hl] + ld [CurMove], a + hlcoord 1, 12 + lb bc, 5, 18 + jp ClearBox +; 13256 + +PlaceMoveData: ; 13256 + xor a + ld [hBGMapMode], a + hlcoord 0, 10 + ld de, String_132ba + call PlaceString + hlcoord 0, 11 + ld de, String_132c2 + call PlaceString + hlcoord 12, 12 + ld de, String_132ca + call PlaceString + ld a, [CurMove] + ld b, a + hlcoord 2, 12 + predef PrintMoveType + ld a, [CurMove] + dec a + ld hl, Moves + MOVE_POWER + ld bc, MOVE_LENGTH + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + hlcoord 16, 12 + cp 2 + jr c, .no_power + ld [wd265], a + ld de, wd265 + lb bc, 1, 3 + call PrintNum + jr .description + +.no_power + ld de, String_132cf + call PlaceString + +.description + hlcoord 1, 14 + predef PrintMoveDesc + ld a, $1 + ld [hBGMapMode], a + ret +; 132ba + +String_132ba: ; 132ba + db "┌─────┐@" +; 132c2 +String_132c2: ; 132c2 + db "│TYPE/└@" +; 132ca +String_132ca: ; 132ca + db "ATK/@" +; 132cf +String_132cf: ; 132cf + db "---@" +; 132d3 + +Function132d3: ; 132d3 + call Function132da + call Function132fe + ret +; 132da + +Function132da: ; 132da + ld a, [CurPartyMon] + and a + ret z + ld c, a + ld e, a + ld d, 0 + ld hl, PartyCount + add hl, de +.loop + ld a, [hl] + and a + jr z, .prev + cp EGG + jr z, .prev + cp NUM_POKEMON + 1 + jr c, .legal + +.prev + dec hl + dec c + jr nz, .loop + ret + +.legal + hlcoord 16, 0 + ld [hl], "◀" + ret +; 132fe + +Function132fe: ; 132fe + ld a, [CurPartyMon] + inc a + ld c, a + ld a, [PartyCount] + cp c + ret z + ld e, c + ld d, 0 + ld hl, PartySpecies + add hl, de +.loop + ld a, [hl] + cp -1 + ret z + and a + jr z, .next + cp EGG + jr z, .next + cp NUM_POKEMON + 1 + jr c, .legal + +.next + inc hl + jr .loop + +.legal + hlcoord 18, 0 + ld [hl], "▶" + ret +; 13327 diff --git a/engine/tmhm.asm b/engine/tmhm.asm new file mode 100755 index 000000000..b66131ac9 --- /dev/null +++ b/engine/tmhm.asm @@ -0,0 +1,113 @@ +CanLearnTMHMMove: ; 11639 + ld a, [CurPartySpecies] + ld [CurSpecies], a + call GetBaseData + ld hl, BaseTMHM + push hl + + ld a, [wd262] + ld b, a + ld c, 0 + ld hl, TMHMMoves +.loop + ld a, [hli] + and a + jr z, .end + cp b + jr z, .asm_11659 + inc c + jr .loop + +.asm_11659 + pop hl + ld b, CHECK_FLAG + push de + ld d, 0 + predef FlagPredef + pop de + ret + +.end + pop hl + ld c, 0 + ret +; 1166a + +GetTMHMMove: ; 1166a + ld a, [wd265] + dec a + ld hl, TMHMMoves + ld b, 0 + ld c, a + add hl, bc + ld a, [hl] + ld [wd265], a + ret +; 1167a + +TMHMMoves: ; 1167a + 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 + +; Move tutor + db FLAMETHROWER + db THUNDERBOLT + db ICE_BEAM + + db 0 ; end +; 116b7 |