mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-16 18:30:50 +12:00

I am shaky on using this area of WRAM but it seems to make the party menu work as desired. Crashes when trying to load the opponent.
353 lines
6.5 KiB
NASM
353 lines
6.5 KiB
NASM
DrawPartyMenu_::
|
|
xor a
|
|
ldh [hAutoBGTransferEnabled], a
|
|
call ClearScreen
|
|
call UpdateSprites
|
|
|
|
RedrawPartyMenu__:
|
|
farcall LoadMonPartySpriteGfxWithLCDDisabled ; load pokemon icon graphics
|
|
|
|
RedrawPartyMenu_::
|
|
ld a, [wPartyMenuTypeOrMessageID]
|
|
cp SWAP_MONS_PARTY_MENU
|
|
jp z, .printMessage
|
|
call ErasePartyMenuCursors
|
|
farcall InitPartyMenuBlkPacket
|
|
hlcoord 3, 0
|
|
ld de, wPartySpecies
|
|
xor a
|
|
ld c, a
|
|
ldh [hPartyMonIndex], a
|
|
ld [wWhichPartyMenuHPBar], a
|
|
.loop
|
|
ld a, [de]
|
|
cp $FF ; reached the terminator?
|
|
jp z, .afterDrawingMonEntries
|
|
push bc
|
|
push de
|
|
push hl
|
|
ld a, c
|
|
push hl
|
|
ld hl, wPartyMonNicks
|
|
call GetPartyMonName
|
|
pop hl
|
|
call PlaceString ; print the pokemon's name
|
|
farcall WriteMonPartySpriteOAMByPartyIndex ; place the appropriate pokemon icon
|
|
ldh a, [hPartyMonIndex]
|
|
ld [wWhichPokemon], a
|
|
inc a
|
|
ldh [hPartyMonIndex], a
|
|
call LoadMonData
|
|
pop hl
|
|
push hl
|
|
ld a, [wMenuItemToSwap]
|
|
and a ; is the player swapping pokemon positions?
|
|
jr z, .skipUnfilledRightArrow
|
|
; if the player is swapping pokemon positions
|
|
dec a
|
|
ld b, a
|
|
ld a, [wWhichPokemon]
|
|
cp b ; is the player swapping the current pokemon in the list?
|
|
jr nz, .skipUnfilledRightArrow
|
|
; the player is swapping the current pokemon in the list
|
|
dec hl
|
|
dec hl
|
|
dec hl
|
|
ld a, "▷" ; unfilled right arrow menu cursor
|
|
ld [hli], a ; place the cursor
|
|
inc hl
|
|
inc hl
|
|
.skipUnfilledRightArrow
|
|
ld a, [wPartyMenuTypeOrMessageID] ; menu type
|
|
cp TMHM_PARTY_MENU
|
|
jr z, .teachMoveMenu
|
|
cp EVO_STONE_PARTY_MENU
|
|
jp z, .evolutionStoneMenu ; battle tent stuff
|
|
cp a, $06
|
|
jr z, .battleTentMenu
|
|
push hl
|
|
ld bc, 14 ; 14 columns to the right
|
|
add hl, bc
|
|
ld de, wLoadedMonStatus
|
|
call PrintStatusCondition
|
|
pop hl
|
|
push hl
|
|
ld bc, SCREEN_WIDTH + 1 ; down 1 row and right 1 column
|
|
ldh a, [hUILayoutFlags]
|
|
set 0, a
|
|
ldh [hUILayoutFlags], a
|
|
add hl, bc
|
|
predef DrawHP2 ; draw HP bar and prints current / max HP
|
|
ldh a, [hUILayoutFlags]
|
|
res 0, a
|
|
ldh [hUILayoutFlags], a
|
|
call SetPartyMenuHPBarColor ; color the HP bar (on SGB)
|
|
pop hl
|
|
jr .printLevel
|
|
.teachMoveMenu
|
|
push hl
|
|
predef CanLearnTM ; check if the pokemon can learn the move
|
|
pop hl
|
|
ld de, .ableToLearnMoveText
|
|
ld a, c
|
|
and a
|
|
jr nz, .placeMoveLearnabilityString
|
|
ld de, .notAbleToLearnMoveText
|
|
.placeMoveLearnabilityString
|
|
ld bc, 20 + 9 ; down 1 row and right 9 columns
|
|
push hl
|
|
add hl, bc
|
|
call PlaceString
|
|
pop hl
|
|
.placeMoveLearnabilityString2
|
|
push hl
|
|
add hl,bc
|
|
call PlaceString
|
|
pop hl
|
|
.printLevel
|
|
ld bc, 10 ; move 10 columns to the right
|
|
add hl, bc
|
|
call PrintLevel
|
|
pop hl
|
|
pop de
|
|
inc de
|
|
ld bc, 2 * 20
|
|
add hl, bc
|
|
pop bc
|
|
inc c
|
|
jp .loop
|
|
.ableToLearnMoveText
|
|
db "ABLE@"
|
|
.notAbleToLearnMoveText
|
|
db "NOT ABLE@"
|
|
;battletent
|
|
.battleTentMenu
|
|
ld a, [wWhichPokemon]
|
|
inc a
|
|
ld b, a
|
|
ld a, [wBTOrder]
|
|
and $7
|
|
cp b
|
|
ld de,.BTFirstText
|
|
jr z,.placeMoveLearnabilityString
|
|
ld a, [wBTOrder]
|
|
swap a
|
|
and $7
|
|
cp b
|
|
ld de,.BTSecondText
|
|
jr z,.placeMoveLearnabilityString
|
|
ld a, [wBTOrder+1]
|
|
cp b
|
|
ld de,.BTThirdText
|
|
jr z,.placeMoveLearnabilityString
|
|
ld de,.BTNotEnteredText
|
|
ld bc,20 + 6
|
|
jr .placeMoveLearnabilityString2
|
|
.BTNotEnteredText
|
|
db "NOT ENTERED@"
|
|
.BTFirstText
|
|
db "FIRST@"
|
|
.BTSecondText
|
|
db "SECOND@"
|
|
.BTThirdText
|
|
db "THIRD@"
|
|
;bt end
|
|
.evolutionStoneMenu
|
|
push hl
|
|
ld hl, EvosMovesPointerTable
|
|
ld b, 0
|
|
ld a, [wLoadedMonSpecies]
|
|
dec a
|
|
add a
|
|
rl b
|
|
ld c, a
|
|
add hl, bc
|
|
ld de, wEvosMoves
|
|
ld a, BANK(EvosMovesPointerTable)
|
|
ld bc, 2
|
|
call FarCopyData
|
|
ld hl, wEvosMoves
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld de, wEvosMoves
|
|
ld a, BANK(EvosMovesPointerTable)
|
|
ld bc, wEvosMovesEnd - wEvosMoves
|
|
call FarCopyData
|
|
ld hl, wEvosMoves
|
|
ld de, .notAbleToEvolveText
|
|
; loop through the pokemon's evolution entries
|
|
.checkEvolutionsLoop
|
|
ld a, [hli]
|
|
and a ; reached terminator?
|
|
jr z, .placeEvolutionStoneString ; if so, place the "NOT ABLE" string
|
|
inc hl
|
|
inc hl
|
|
cp EV_ITEM
|
|
jr nz, .checkEvolutionsLoop
|
|
; if it's a stone evolution entry
|
|
dec hl
|
|
dec hl
|
|
ld b, [hl]
|
|
ld a, [wEvoStoneItemID] ; the stone the player used
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
cp b ; does the player's stone match this evolution entry's stone?
|
|
jr nz, .checkEvolutionsLoop
|
|
; if it does match
|
|
ld de, .ableToEvolveText
|
|
.placeEvolutionStoneString
|
|
ld bc, 20 + 9 ; down 1 row and right 9 columns
|
|
pop hl
|
|
push hl
|
|
add hl, bc
|
|
call PlaceString
|
|
pop hl
|
|
jp .printLevel
|
|
.ableToEvolveText
|
|
db "ABLE@"
|
|
.notAbleToEvolveText
|
|
db "NOT ABLE@"
|
|
.afterDrawingMonEntries
|
|
ld b, SET_PAL_PARTY_MENU
|
|
call RunPaletteCommand
|
|
.printMessage
|
|
ld hl, wd730
|
|
ld a, [hl]
|
|
push af
|
|
push hl
|
|
set 6, [hl] ; turn off letter printing delay
|
|
ld a, [wPartyMenuTypeOrMessageID] ; message ID
|
|
cp FIRST_PARTY_MENU_TEXT_ID
|
|
jr nc, .printItemUseMessage
|
|
add a
|
|
ld hl, PartyMenuMessagePointers
|
|
ld b, 0
|
|
ld c, a
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
call PrintText
|
|
.done
|
|
pop hl
|
|
pop af
|
|
ld [hl], a
|
|
ld a, 1
|
|
ldh [hAutoBGTransferEnabled], a
|
|
call Delay3
|
|
jp GBPalNormal
|
|
.printItemUseMessage
|
|
and $0F
|
|
ld hl, PartyMenuItemUseMessagePointers
|
|
add a
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
push hl
|
|
ld a, [wUsedItemOnWhichPokemon]
|
|
ld hl, wPartyMonNicks
|
|
call GetPartyMonName
|
|
pop hl
|
|
call PrintText
|
|
jr .done
|
|
|
|
PartyMenuItemUseMessagePointers:
|
|
dw AntidoteText
|
|
dw BurnHealText
|
|
dw IceHealText
|
|
dw AwakeningText
|
|
dw ParlyzHealText
|
|
dw PotionText
|
|
dw FullHealText
|
|
dw ReviveText
|
|
dw RareCandyText
|
|
|
|
PartyMenuMessagePointers:
|
|
dw PartyMenuNormalText
|
|
dw PartyMenuItemUseText
|
|
dw PartyMenuBattleText
|
|
dw PartyMenuUseTMText
|
|
dw PartyMenuSwapMonText
|
|
dw PartyMenuItemUseText
|
|
dw PartyMenuBattleTentText
|
|
|
|
PartyMenuNormalText:
|
|
text_far _PartyMenuNormalText
|
|
text_end
|
|
|
|
PartyMenuItemUseText:
|
|
text_far _PartyMenuItemUseText
|
|
text_end
|
|
|
|
PartyMenuBattleText:
|
|
text_far _PartyMenuBattleText
|
|
text_end
|
|
|
|
PartyMenuUseTMText:
|
|
text_far _PartyMenuUseTMText
|
|
text_end
|
|
|
|
PartyMenuSwapMonText:
|
|
text_far _PartyMenuSwapMonText
|
|
text_end
|
|
|
|
PartyMenuBattleTentText: ; 12e93 (4:6e93)
|
|
text_far _PartyMenuBattleTentText
|
|
text_end
|
|
|
|
PotionText:
|
|
text_far _PotionText
|
|
text_end
|
|
|
|
AntidoteText:
|
|
text_far _AntidoteText
|
|
text_end
|
|
|
|
ParlyzHealText:
|
|
text_far _ParlyzHealText
|
|
text_end
|
|
|
|
BurnHealText:
|
|
text_far _BurnHealText
|
|
text_end
|
|
|
|
IceHealText:
|
|
text_far _IceHealText
|
|
text_end
|
|
|
|
AwakeningText:
|
|
text_far _AwakeningText
|
|
text_end
|
|
|
|
FullHealText:
|
|
text_far _FullHealText
|
|
text_end
|
|
|
|
ReviveText:
|
|
text_far _ReviveText
|
|
text_end
|
|
|
|
RareCandyText:
|
|
text_far _RareCandyText
|
|
sound_get_item_1 ; probably supposed to play SFX_LEVEL_UP but the wrong music bank is loaded
|
|
text_promptbutton
|
|
text_end
|
|
|
|
SetPartyMenuHPBarColor:
|
|
ld hl, wPartyMenuHPBarColors
|
|
ld a, [wWhichPartyMenuHPBar]
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
call GetHealthBarColor
|
|
ld b, SET_PAL_PARTY_MENU_HP_BARS
|
|
call RunPaletteCommand
|
|
ld hl, wWhichPartyMenuHPBar
|
|
inc [hl]
|
|
ret
|