diff options
Diffstat (limited to 'engine/party_menu.asm')
-rw-r--r-- | engine/party_menu.asm | 944 |
1 files changed, 944 insertions, 0 deletions
diff --git a/engine/party_menu.asm b/engine/party_menu.asm new file mode 100644 index 000000000..4d50ee8e4 --- /dev/null +++ b/engine/party_menu.asm @@ -0,0 +1,944 @@ +SelectMonFromParty: ; 50000 + call DisableSpriteUpdates + xor a + ld [PartyMenuActionText], a + call ClearBGPalettes + call Function5003f + call WaitBGMap + call SetPalettes + call DelayFrame + call PartyMenuSelect + call Function2b74 + ret +; 5001d + + +Function5001d: ; 5001d + ld a, b + ld [PartyMenuActionText], a + call DisableSpriteUpdates + call ClearBGPalettes + call Function5003f + call WaitBGMap + ld b, $a + call GetSGBLayout + call SetPalettes + call DelayFrame + call PartyMenuSelect + call Function2b74 + ret +; 5003f + +Function5003f: ; 5003f + call Function5004f + call Function50405 + call Function503e0 + call WritePartyMenuTilemap + call PrintPartyMenuText + ret +; 5004f + +Function5004f: ; 5004f + call LoadFontsBattleExtra + callab Function8ad1 ; engine/color.asm + callab InefficientlyClear121BytesAtwc300 + ret +; 5005f + + +WritePartyMenuTilemap: ; 0x5005f + ld hl, Options + ld a, [hl] + push af + set 4, [hl] ; Disable text delay + xor a + ld [hBGMapMode], a + hlcoord 0, 0 + ld bc, SCREEN_WIDTH * SCREEN_HEIGHT + ld a, " " + call ByteFill ; blank the tilemap + call GetPartyMenuTilemapPointers ; This reads from a pointer table??? +.loop + ld a, [hli] + cp $ff + jr z, .end ; 0x5007a $8 + push hl + ld hl, .Jumptable + rst JumpTable + pop hl + jr .loop ; 0x50082 $f3 +.end + pop af + ld [Options], a + ret +; 0x50089 + +.Jumptable: ; 50089 + dw PlacePartyNicknames + dw PlacePartyHPBar + dw PlacePartyMenuHPDigits + dw PlacePartyMonLevel + dw PlacePartyMonStatus + dw PlacePartyMonTMHMCompatibility + dw PlacePartyMonEvoStoneCompatibility + dw PlacePartyMonGender + dw PlacePartyMonMobileBattleSelection +; 5009b + +PlacePartyNicknames: ; 5009b + hlcoord 3, 1 + ld a, [PartyCount] + and a + jr z, .end + ld c, a + ld b, $0 +.loop + push bc + push hl + push hl + ld hl, PartyMonNicknames + ld a, b + call GetNick + pop hl + call PlaceString + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + +.end +rept 2 + dec hl +endr + ld de, .CANCEL + call PlaceString + ret +; 500c8 + +.CANCEL: ; 500c8 + db "CANCEL@" +; 500cf + + +PlacePartyHPBar: ; 500cf + xor a + ld [wcda9], a + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + hlcoord 11, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .skip + push hl + call PlacePartymonHPBar + pop hl + ld d, $6 + ld b, $0 + call DrawBattleHPBar + ld hl, wcd9b + ld a, [wcda9] + ld c, a + ld b, $0 + add hl, bc + call SetHPPal + ld b, $fc + call GetSGBLayout + +.skip + ld hl, wcda9 + inc [hl] + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ld b, $a + call GetSGBLayout + ret +; 50117 + +PlacePartymonHPBar: ; 50117 + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1HP + call AddNTimes + ld a, [hli] + or [hl] + jr nz, .not_fainted + xor a + ld e, a + ld c, a + ret + +.not_fainted + dec hl + ld a, [hli] + ld b, a + ld a, [hli] + ld c, a + ld a, [hli] + ld d, a + ld a, [hli] + ld e, a + predef DrawPartyMenuHPBar + ret +; 50138 + +PlacePartyMenuHPDigits: ; 50138 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, $0 + hlcoord 13, 1 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1HP + call AddNTimes + ld e, l + ld d, h + pop hl + push de + lb bc, 2, 3 + call PrintNum + pop de + ld a, "/" + ld [hli], a +rept 2 + inc de +endr + lb bc, 2, 3 + call PrintNum + +.next + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 50176 + +PlacePartyMonLevel: ; 50176 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 8, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1Level + call AddNTimes + ld e, l + ld d, h + pop hl + ld a, [de] + cp 100 ; This is distinct from MAX_LEVEL. + jr nc, .ThreeDigits + ld a, "<LV>" + ld [hli], a + lb bc, PRINTNUM_RIGHTALIGN | 1, 2 + ; jr .okay +.ThreeDigits + lb bc, PRINTNUM_RIGHTALIGN | 1, 3 +; .okay + call PrintNum + +.next + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 501b2 + +PlacePartyMonStatus: ; 501b2 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 5, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1Status + call AddNTimes + ld e, l + ld d, h + pop hl + call PlaceStatusString + +.next + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 501e0 + +PlacePartyMonTMHMCompatibility: ; 501e0 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 12, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld hl, PartySpecies + ld e, b + ld d, 0 + add hl, de + ld a, [hl] + ld [CurPartySpecies], a + predef CanLearnTMHMMove + pop hl + call .PlaceAbleNotAble + call PlaceString + +.next + pop hl + ld de, SCREEN_WIDTH * 2 + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 50215 + +.PlaceAbleNotAble: ; 50215 + ld a, c + and a + jr nz, .able + ld de, .string_not_able + ret + +.able + ld de, .string_able + ret +; 50221 + +.string_able: ; 50221 + db "ABLE@" +; 50226 + +.string_not_able: ; 50226 + db "NOT ABLE@" +; 5022f + + +PlacePartyMonEvoStoneCompatibility: ; 5022f + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 12, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + push hl + ld a, b + ld bc, PARTYMON_STRUCT_LENGTH + ld hl, PartyMon1Species + call AddNTimes + ld a, [hl] + dec a + ld e, a + ld d, 0 + ld hl, EvosAttacksPointers +rept 2 + add hl, de +endr + call .DetermineCompatibility + pop hl + call PlaceString + +.next + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 50268 + +.DetermineCompatibility: ; 50268 + ld de, StringBuffer1 + ld a, BANK(EvosAttacksPointers) + ld bc, 2 + call FarCopyBytes + ld hl, StringBuffer1 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, StringBuffer1 + ld a, BANK(EvosAttacks) + ld bc, $a + call FarCopyBytes + ld hl, StringBuffer1 +.loop2 + ld a, [hli] + and a + jr z, .nope +rept 2 + inc hl +endr + cp EVOLVE_ITEM + jr nz, .loop2 +rept 2 + dec hl +endr + ld a, [CurItem] + cp [hl] +rept 2 + inc hl +endr + jr nz, .loop2 + ld de, .string_able + ret + +.nope + ld de, .string_not_able + ret +; 502a3 + +.string_able: ; 502a3 + db "ABLE@" +; 502a8 +.string_not_able: ; 502a8 + db "NOT ABLE@" +; 502b1 + + +PlacePartyMonGender: ; 502b1 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 12, 2 +.loop + push bc + push hl + call PartyMenuCheckEgg + jr z, .next + ld [CurPartySpecies], a + push hl + ld a, b + ld [CurPartyMon], a + xor a + ld [MonType], a + call GetGender + ld de, .unknown + jr c, .got_gender + ld de, .male + jr nz, .got_gender + ld de, .female + +.got_gender + pop hl + call PlaceString + +.next + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ret +; 502ee + +.male: ; 502ee + db "♂…MALE@" +; 502f5 + +.female: ; 502f5 + db "♀…FEMALE@" +; 502fe + +.unknown: ; 502fe + db "…UNKNOWN@" +; 50307 + + +PlacePartyMonMobileBattleSelection: ; 50307 + ld a, [PartyCount] + and a + ret z + ld c, a + ld b, 0 + hlcoord 12, 1 +.loop + push bc + push hl + ld de, .String_Sanka_Shinai + call PlaceString + pop hl + ld de, 2 * SCREEN_WIDTH + add hl, de + pop bc + inc b + dec c + jr nz, .loop + ld a, l + ld e, PKMN_NAME_LENGTH + sub e + ld l, a + ld a, h + sbc $0 + ld h, a + ld de, .String_Kettei_Yameru + call PlaceString + ld b, $3 + ld c, $0 + ld hl, wd002 + ld a, [hl] +.loop2 + push hl + push bc + hlcoord 12, 1 +.loop3 + and a + jr z, .done + ld de, 2 * SCREEN_WIDTH + add hl, de + dec a + jr .loop3 + +.done + ld de, .String_Banme + push hl + call PlaceString + pop hl + pop bc + push bc + push hl + ld a, c + ld hl, .Strings_1_2_3 + call GetNthString + ld d, h + ld e, l + pop hl + call PlaceString + pop bc + pop hl + inc hl + ld a, [hl] + inc c + dec b + ret z + jr .loop2 +; 5036b + +.String_Banme: ; 5036b + db " ばんめ @" ; Place +; 50372 +.String_Sanka_Shinai: ; 50372 + db "さんかしない@" ; Cancel +; 50379 +.String_Kettei_Yameru: ; 50379 + db "けってい やめる@" ; Quit +; 50383 +.Strings_1_2_3: ; 50383 + db "1@", "2@", "3@" ; 1st, 2nd, 3rd +; 50389 + + +PartyMenuCheckEgg: ; 50389 + ld a, PartySpecies % $100 + add b + ld e, a + ld a, PartySpecies / $100 + adc 0 + ld d, a + ld a, [de] + cp EGG + ret +; 50396 + +GetPartyMenuTilemapPointers: ; 50396 + ld a, [PartyMenuActionText] + and $f0 + jr nz, .skip + ld a, [PartyMenuActionText] + and $f + ld e, a + ld d, 0 + ld hl, .Pointers +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ret + +.skip + ld hl, .Default + ret +; 503b2 + +.Pointers: ; 503b2 + dw .Default + dw .Default + dw .Default + dw .TMHM + dw .Default + dw .EvoStone + dw .Gender + dw .Gender + dw .Default + dw .Mobile +; 503c6 + +.Default: db 0, 1, 2, 3, 4, $ff +.TMHM: db 0, 5, 3, 4, $ff +.EvoStone: db 0, 6, 3, 4, $ff +.Gender: db 0, 7, 3, 4, $ff +.Mobile: db 0, 8, 3, 4, $ff +; 503e0 + + +Function503e0: ; 503e0 + ld hl, PartyCount + ld a, [hli] + and a + ret z + ld c, a + xor a + ld [hObjectStructIndexBuffer], a +.asm_503ea + push bc + push hl + ld hl, Function8e83f + ld a, BANK(Function8e83f) + ld e, $0 + rst FarCall + ld a, [hObjectStructIndexBuffer] + inc a + ld [hObjectStructIndexBuffer], a + pop hl + pop bc + dec c + jr nz, .asm_503ea + callab Function8cf69 + ret +; 50405 + +Function50405: ; 50405 + xor a + ld [wd0e3], a + ld de, Unknown_5044f + call Function1bb1 + ld a, [PartyCount] + inc a + ld [wcfa3], a + dec a + ld b, a + ld a, [wd0d8] + and a + jr z, .asm_50422 + inc b + cp b + jr c, .asm_50424 + +.asm_50422 + ld a, $1 + +.asm_50424 + ld [MenuSelection2], a + ld a, $3 + ld [wcfa8], a + ret +; 5042d + +Function5042d: ; 0x5042d + ld de, Unknown_5044f + call Function1bb1 + ld a, [PartyCount] + ld [wcfa3], a + ld b, a + ld a, [wd0d8] + and a + jr z, .asm_50444 + inc b + cp b + jr c, .asm_50446 +.asm_50444 + ld a, $1 +.asm_50446 + ld [MenuSelection2], a + ld a, $3 + ld [wcfa8], a + ret +; 5044f (14:444f) + +Unknown_5044f: ; 5044f +; cursor y +; cursor x +; list length +; ? +; bit 6: animate sprites bit 5: wrap around +; ? +; distance between items (hi: y, lo: x) +; allowed buttons (mask) + db $01, $00, $00, $01, $60, $00, $20, $00 +; 50457 + +PartyMenuSelect: ; 0x50457 +; sets carry if exitted menu. + call Function1bc9 + call Function1bee + ld a, [PartyCount] + inc a + ld b, a + ld a, [MenuSelection2] ; menu selection? + cp b + jr z, .exitmenu ; CANCEL + ld [wd0d8], a + ld a, [hJoyLast] + ld b, a + bit 1, b + jr nz, .exitmenu ; B button? + ld a, [MenuSelection2] + dec a + ld [CurPartyMon], a + ld c, a + ld b, $0 + ld hl, PartySpecies + add hl, bc + ld a, [hl] + ld [CurPartySpecies], a + + ld de, SFX_READ_TEXT_2 + call PlaySFX + call WaitSFX + and a + ret + +.exitmenu + ld de, SFX_READ_TEXT_2 + call PlaySFX + call WaitSFX + scf + ret +; 0x5049a + + +PrintPartyMenuText: ; 5049a + hlcoord 0, 14 + lb bc, 2, 18 + call TextBox + ld a, [PartyCount] + and a + jr nz, .haspokemon + ld de, YouHaveNoPKMNString + jr .gotstring +.haspokemon ; 504ae + ld a, [PartyMenuActionText] + and $f ; drop high nibble + ld hl, PartyMenuStrings + ld e, a + ld d, $0 +rept 2 + add hl, de +endr + ld a, [hli] + ld d, [hl] + ld e, a +.gotstring ; 504be + ld a, [Options] + push af + set 4, a ; disable text delay + ld [Options], a + hlcoord 1, 16 ; Coord + call PlaceString + pop af + ld [Options], a + ret +; 0x504d2 + +PartyMenuStrings: ; 0x504d2 + dw ChooseAMonString + dw UseOnWhichPKMNString + dw WhichPKMNString + dw TeachWhichPKMNString + dw MoveToWhereString + dw UseOnWhichPKMNString + dw ChooseAMonString ; Probably used to be ChooseAFemalePKMNString + dw ChooseAMonString ; Probably used to be ChooseAMalePKMNString + dw ToWhichPKMNString + +ChooseAMonString: ; 0x504e4 + db "Choose a #MON.@" +UseOnWhichPKMNString: ; 0x504f3 + db "Use on which <PK><MN>?@" +WhichPKMNString: ; 0x50504 + db "Which <PK><MN>?@" +TeachWhichPKMNString: ; 0x5050e + db "Teach which <PK><MN>?@" +MoveToWhereString: ; 0x5051e + db "Move to where?@" +ChooseAFemalePKMNString: ; 0x5052d ; UNUSED + db "Choose a ♀<PK><MN>.@" +ChooseAMalePKMNString: ; 0x5053b ; UNUSED + db "Choose a ♂<PK><MN>.@" +ToWhichPKMNString: ; 0x50549 + db "To which <PK><MN>?@" + +YouHaveNoPKMNString: ; 0x50556 + db "You have no <PK><MN>!@" + + +Function50566: ; 50566 + ld a, [CurPartyMon] + ld hl, PartyMonNicknames + call GetNick + ld a, [PartyMenuActionText] + and $f + ld hl, Unknown_5057b + call Function505c1 + ret +; 5057b + +Unknown_5057b: ; 5057b + dw UnknownText_0x50594 + dw UnknownText_0x5059e + dw UnknownText_0x505a3 + dw UnknownText_0x505a8 + dw UnknownText_0x50599 + dw UnknownText_0x5058f + dw UnknownText_0x505ad + dw UnknownText_0x505b2 + dw UnknownText_0x505b7 + dw UnknownText_0x505bc +; 5058f + +UnknownText_0x5058f: ; 0x5058f + ; recovered @ HP! + text_jump UnknownText_0x1bc0a2 + db "@" +; 0x50594 + +UnknownText_0x50594: ; 0x50594 + ; 's cured of poison. + text_jump UnknownText_0x1bc0bb + db "@" +; 0x50599 + +UnknownText_0x50599: ; 0x50599 + ; 's rid of paralysis. + text_jump UnknownText_0x1bc0d2 + db "@" +; 0x5059e + +UnknownText_0x5059e: ; 0x5059e + ; 's burn was healed. + text_jump UnknownText_0x1bc0ea + db "@" +; 0x505a3 + +UnknownText_0x505a3: ; 0x505a3 + ; was defrosted. + text_jump UnknownText_0x1bc101 + db "@" +; 0x505a8 + +UnknownText_0x505a8: ; 0x505a8 + ; woke up. + text_jump UnknownText_0x1bc115 + db "@" +; 0x505ad + +UnknownText_0x505ad: ; 0x505ad + ; 's health returned. + text_jump UnknownText_0x1bc123 + db "@" +; 0x505b2 + +UnknownText_0x505b2: ; 0x505b2 + ; is revitalized. + text_jump UnknownText_0x1bc13a + db "@" +; 0x505b7 + +UnknownText_0x505b7: ; 0x505b7 + ; grew to level @ !@ @ + text_jump UnknownText_0x1bc14f + db "@" +; 0x505bc + +UnknownText_0x505bc: ; 0x505bc + ; came to its senses. + text_jump UnknownText_0x1bc16e + db "@" +; 0x505c1 + + +Function505c1: ; 505c1 + ld e, a + ld d, 0 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [Options] + push af + set 4, a + ld [Options], a + call PrintText + pop af + ld [Options], a + ret +; 505da |