diff options
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 | 
