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, "" 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 ?@" WhichPKMNString: ; 0x50504 db "Which ?@" TeachWhichPKMNString: ; 0x5050e db "Teach which ?@" MoveToWhereString: ; 0x5051e db "Move to where?@" ChooseAFemalePKMNString: ; 0x5052d ; UNUSED db "Choose a ♀.@" ChooseAMalePKMNString: ; 0x5053b ; UNUSED db "Choose a ♂.@" ToWhichPKMNString: ; 0x50549 db "To which ?@" YouHaveNoPKMNString: ; 0x50556 db "You have no !@" 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