mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-11-11 07:44:47 +13:00
disasm of pokemon menu function
hg-commit-id: 47d36266a0ae
This commit is contained in:
parent
6a90847eb6
commit
d527e05cd8
|
|
@ -600,6 +600,8 @@ W_PARTYMON6NAME EQU $D2EC
|
|||
|
||||
W_RIVALNAME EQU $D34A ; 11 characters, including null
|
||||
|
||||
W_OBTAINEDBADGES EQU $D356
|
||||
|
||||
W_PLAYERIDHI EQU $D359
|
||||
W_PLAYERIDLO EQU $D35A
|
||||
|
||||
|
|
|
|||
340
main.asm
340
main.asm
|
|
@ -5681,6 +5681,8 @@ DisplayStartMenu: ; 2ACD
|
|||
ld [$d11a],a
|
||||
ld a,$8f ; Start menu sound
|
||||
call $23b1
|
||||
|
||||
RedisplayStartMenu: ; 2ADF
|
||||
ld b,BANK(DrawStartMenu)
|
||||
ld hl,DrawStartMenu
|
||||
call Bankswitch
|
||||
|
|
@ -5743,17 +5745,17 @@ DisplayStartMenu: ; 2ACD
|
|||
inc a ; adjust position to account for missing pokedex menu item
|
||||
.displayMenuItem\@
|
||||
cp a,0
|
||||
jp z,$7095 ; POKEDEX
|
||||
jp z,$7095 ; POKEDEX
|
||||
cp a,1
|
||||
jp z,$70a9 ; POKEMON
|
||||
jp z,DisplayPokemonMenu ; POKEMON
|
||||
cp a,2
|
||||
jp z,$7302 ; ITEM
|
||||
jp z,$7302 ; ITEM
|
||||
cp a,3
|
||||
jp z,$7460 ; Trainer Info
|
||||
jp z,$7460 ; Trainer Info
|
||||
cp a,4
|
||||
jp z,$75e3 ; SAVE / RESET
|
||||
jp z,$75e3 ; SAVE / RESET
|
||||
cp a,5
|
||||
jp z,$75f6 ; OPTION
|
||||
jp z,$75f6 ; OPTION
|
||||
; EXIT falls through to here
|
||||
.closeMenu\@
|
||||
call GetJoypadState
|
||||
|
|
@ -6971,8 +6973,7 @@ Multiply: ; 38AC
|
|||
; INPUT
|
||||
; FF95-FF98 = dividend
|
||||
; FF99 = divisor
|
||||
; b = number of signficant bytes in the dividend (starting from FF95)
|
||||
; all bytes considered "not signifcant" will be treated as 0
|
||||
; b = number of bytes in the dividend (starting from FF95)
|
||||
; OUTPUT
|
||||
; FF95-FF98 = quotient
|
||||
; FF99 = remainder
|
||||
|
|
@ -15268,7 +15269,7 @@ ItemUseBall: ; 03:5687
|
|||
ld a,8
|
||||
.next7\@ ;$574d
|
||||
ld [H_DIVISOR],a
|
||||
ld b,4 ;number of significant bytes
|
||||
ld b,4 ; number of bytes in dividend
|
||||
call Divide
|
||||
ld hl,W_ENEMYMONCURHP
|
||||
ld a,[hli]
|
||||
|
|
@ -16452,43 +16453,290 @@ ShrinkPic1:
|
|||
ShrinkPic2:
|
||||
INCBIN "pic/trainer/shrink2.pic"
|
||||
|
||||
INCBIN "baserom.gbc",$13074,$13228 - $13074
|
||||
INCBIN "baserom.gbc",$13074,$130A9 - $13074
|
||||
|
||||
UnnamedText_13228: ; 0x13228
|
||||
TX_FAR _UnnamedText_13228
|
||||
DisplayPokemonMenu: ; 70A9
|
||||
ld a,[W_NUMINPARTY]
|
||||
and a
|
||||
jp z,RedisplayStartMenu
|
||||
xor a
|
||||
ld [$cc35],a
|
||||
ld [$d07d],a
|
||||
ld [$cfcb],a
|
||||
call DisplayPartyMenu
|
||||
jr .checkIfPokemonChosen\@
|
||||
.loop\@
|
||||
xor a
|
||||
ld [$cc35],a
|
||||
ld [$d07d],a
|
||||
call GoBackToPartyMenu
|
||||
.checkIfPokemonChosen\@
|
||||
jr nc,.chosePokemon\@
|
||||
.exitMenu\@
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call $3dbe
|
||||
call LoadGBPal
|
||||
jp RedisplayStartMenu
|
||||
.chosePokemon\@
|
||||
call $3719 ; save screen
|
||||
ld a,$04
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; display pokemon menu options
|
||||
ld hl,$cd3d
|
||||
ld bc,$020c ; max menu item ID, top menu item Y
|
||||
ld e,5
|
||||
.adjustMenuVariablesLoop\@
|
||||
dec e
|
||||
jr z,.storeMenuVariables\@
|
||||
ld a,[hli]
|
||||
and a
|
||||
jr z,.storeMenuVariables\@
|
||||
inc b
|
||||
dec c
|
||||
dec c
|
||||
jr .adjustMenuVariablesLoop\@
|
||||
.storeMenuVariables\@
|
||||
ld hl,W_TOPMENUITEMY
|
||||
ld a,c
|
||||
ld [hli],a ; top menu item Y
|
||||
ld a,[$fff7]
|
||||
ld [hli],a ; top menu item X
|
||||
xor a
|
||||
ld [hli],a ; current menu item ID
|
||||
inc hl
|
||||
ld a,b
|
||||
ld [hli],a ; max menu item ID
|
||||
ld a,%00000011 ; A button, B button
|
||||
ld [hli],a ; menu watched keys
|
||||
xor a
|
||||
ld [hl],a
|
||||
call HandleMenuInput
|
||||
push af
|
||||
call $3725 ; restore saved screen
|
||||
pop af
|
||||
bit 1,a ; was the B button pressed?
|
||||
jp nz,.loop\@
|
||||
; if the B button wasn't pressed
|
||||
ld a,[W_MAXMENUITEMID]
|
||||
ld b,a
|
||||
ld a,[W_CURMENUITEMID] ; menu selection
|
||||
cp b
|
||||
jp z,.exitMenu\@ ; if the player chose Cancel
|
||||
dec b
|
||||
cp b
|
||||
jr z,.choseSwitch\@
|
||||
dec b
|
||||
cp b
|
||||
jp z,.choseStats\@
|
||||
ld c,a
|
||||
ld b,0
|
||||
ld hl,$cd3d
|
||||
add hl,bc
|
||||
jp .choseOutOfBattleMove\@
|
||||
.choseSwitch\@
|
||||
ld a,[W_NUMINPARTY]
|
||||
cp a,2 ; is there more than one pokemon in the party?
|
||||
jp c,DisplayPokemonMenu ; if not, no switching
|
||||
call $7653
|
||||
ld a,$04 ; swap pokemon positions menu
|
||||
ld [$d07d],a
|
||||
call GoBackToPartyMenu
|
||||
jp .checkIfPokemonChosen\@
|
||||
.choseStats\@
|
||||
call CleanLCD_OAM
|
||||
xor a
|
||||
ld [$cc49],a
|
||||
ld a,$36
|
||||
call Predef
|
||||
ld a,$37
|
||||
call Predef
|
||||
call $3071
|
||||
jp DisplayPokemonMenu
|
||||
.choseOutOfBattleMove\@
|
||||
push hl
|
||||
ld a,[$cf92]
|
||||
ld hl,W_PARTYMON1NAME
|
||||
call GetPartyMonName
|
||||
pop hl
|
||||
ld a,[hl]
|
||||
dec a
|
||||
add a
|
||||
ld b,0
|
||||
ld c,a
|
||||
ld hl,.outOfBattleMovePointers\@
|
||||
add hl,bc
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
ld a,[W_OBTAINEDBADGES] ; badges obtained
|
||||
jp [hl]
|
||||
.outOfBattleMovePointers\@
|
||||
dw .cut\@
|
||||
dw .fly\@
|
||||
dw .surf\@
|
||||
dw .surf\@
|
||||
dw .strength\@
|
||||
dw .flash\@
|
||||
dw .dig\@
|
||||
dw .teleport\@
|
||||
dw .softboiled\@
|
||||
.fly\@
|
||||
bit 2,a ; does the player have the Thunder Badge?
|
||||
jp z,.newBadgeRequired\@
|
||||
call CheckIfInOutsideMap
|
||||
jr z,.canFly\@
|
||||
ld a,[$cf92]
|
||||
ld hl,W_PARTYMON1NAME
|
||||
call GetPartyMonName
|
||||
ld hl,.cannotFlyHereText\@
|
||||
call PrintText
|
||||
jp .loop\@
|
||||
.canFly\@
|
||||
call $30a9 ; allow player to pick fly destination on map
|
||||
ld a,[$d732]
|
||||
bit 3,a ; did the player decide to fly?
|
||||
jp nz,.goBackToMap\@
|
||||
call LoadFontTilePatterns
|
||||
ld hl,$d72e
|
||||
set 1,[hl]
|
||||
jp DisplayPokemonMenu
|
||||
.cut\@
|
||||
bit 1,a ; does the player have the Cascade Badge?
|
||||
jp z,.newBadgeRequired\@
|
||||
ld a,$3c
|
||||
call Predef
|
||||
ld a,[$cd6a]
|
||||
and a
|
||||
jp z,.loop\@
|
||||
jp CloseTextDisplay
|
||||
.surf\@
|
||||
bit 4,a ; does the player have the Soul Badge?
|
||||
jp z,.newBadgeRequired\@
|
||||
ld b,$03
|
||||
ld hl,$4dc0
|
||||
call Bankswitch
|
||||
ld hl,$d728
|
||||
bit 1,[hl]
|
||||
res 1,[hl]
|
||||
jp z,.loop\@
|
||||
ld a,$07
|
||||
ld [$cf91],a
|
||||
ld [$d152],a
|
||||
call $30bc
|
||||
ld a,[$cd6a]
|
||||
and a
|
||||
jp z,.loop\@
|
||||
call GBPalWhiteOutWithDelay3
|
||||
jp .goBackToMap\@
|
||||
.strength\@
|
||||
bit 3,a ; does the player have the Rainbow Badge?
|
||||
jp z,.newBadgeRequired\@
|
||||
ld a,$5b
|
||||
call Predef
|
||||
call GBPalWhiteOutWithDelay3
|
||||
jp .goBackToMap\@
|
||||
.flash\@
|
||||
bit 0,a ; does the player have the Boulder Badge?
|
||||
jp z,.newBadgeRequired\@
|
||||
xor a
|
||||
ld [$d35d],a
|
||||
ld hl,.flashLightsAreaText\@
|
||||
call PrintText
|
||||
call GBPalWhiteOutWithDelay3
|
||||
jp .goBackToMap\@
|
||||
.flashLightsAreaText\@
|
||||
TX_FAR _FlashLightsAreaText
|
||||
db $50
|
||||
; 0x13228 + 5 bytes
|
||||
|
||||
INCBIN "baserom.gbc",$1322d,$1327b - $1322d
|
||||
|
||||
UnnamedText_1327b: ; 0x1327b
|
||||
TX_FAR _UnnamedText_1327b
|
||||
.dig\@
|
||||
ld a,$1d
|
||||
ld [$cf91],a
|
||||
ld [$d152],a
|
||||
call $30bc
|
||||
ld a,[$cd6a]
|
||||
and a
|
||||
jp z,.loop\@
|
||||
call GBPalWhiteOutWithDelay3
|
||||
jp .goBackToMap\@
|
||||
.teleport\@
|
||||
call CheckIfInOutsideMap
|
||||
jr z,.canTeleport\@
|
||||
ld a,[$cf92]
|
||||
ld hl,W_PARTYMON1NAME
|
||||
call GetPartyMonName
|
||||
ld hl,.cannotUseTeleportNowText\@
|
||||
call PrintText
|
||||
jp .loop\@
|
||||
.canTeleport\@
|
||||
ld hl,.warpToLastPokemonCenterText\@
|
||||
call PrintText
|
||||
ld hl,$d732
|
||||
set 3,[hl]
|
||||
set 6,[hl]
|
||||
ld hl,$d72e
|
||||
set 1,[hl]
|
||||
res 4,[hl]
|
||||
ld c,60
|
||||
call DelayFrames
|
||||
call GBPalWhiteOutWithDelay3 ; zero all three palettes and wait 3 V-blanks
|
||||
jp .goBackToMap\@
|
||||
.warpToLastPokemonCenterText\@
|
||||
TX_FAR _WarpToLastPokemonCenterText
|
||||
db $50
|
||||
; 0x1327b + 5 bytes
|
||||
|
||||
UnnamedText_13280: ; 0x13280
|
||||
TX_FAR _UnnamedText_13280
|
||||
.cannotUseTeleportNowText\@
|
||||
TX_FAR _CannotUseTeleportNowText
|
||||
db $50
|
||||
; 0x13280 + 5 bytes
|
||||
|
||||
UnnamedText_13285: ; 0x13285
|
||||
TX_FAR _UnnamedText_13285
|
||||
.cannotFlyHereText\@
|
||||
TX_FAR _CannotFlyHereText
|
||||
db $50
|
||||
; 0x13285 + 5 bytes
|
||||
|
||||
INCBIN "baserom.gbc",$1328a,$132d4 - $1328a
|
||||
|
||||
UnnamedText_132d4: ; 0x132d4
|
||||
TX_FAR _UnnamedText_132d4
|
||||
.softboiled\@
|
||||
ld hl,W_PARTYMON1_MAXHP
|
||||
ld a,[$cf92]
|
||||
ld bc,44
|
||||
call AddNTimes
|
||||
ld a,[hli]
|
||||
ld [H_DIVIDEND],a
|
||||
ld a,[hl]
|
||||
ld [H_DIVIDEND + 1],a
|
||||
ld a,5
|
||||
ld [H_DIVISOR],a
|
||||
ld b,2 ; number of bytes
|
||||
call Divide
|
||||
ld bc,-33
|
||||
add hl,bc
|
||||
ld a,[hld]
|
||||
ld b,a
|
||||
ld a,[H_QUOTIENT + 3]
|
||||
sub b
|
||||
ld b,[hl]
|
||||
ld a,[H_QUOTIENT + 2]
|
||||
sbc b
|
||||
jp nc,.notHealthyEnough\@
|
||||
ld a,[$cc2b]
|
||||
push af
|
||||
ld a,$14
|
||||
ld [$cf91],a
|
||||
ld [$d152],a
|
||||
call $30bc
|
||||
pop af
|
||||
ld [$cc2b],a
|
||||
jp .loop\@
|
||||
.notHealthyEnough\@ ; if current HP is less than 1/5 of max HP
|
||||
ld hl,.notHealthyEnoughText\@
|
||||
call PrintText
|
||||
jp .loop\@
|
||||
.notHealthyEnoughText\@
|
||||
TX_FAR _NotHealthyEnoughText
|
||||
db $50
|
||||
; 0x132d4 + 5 bytes
|
||||
|
||||
INCBIN "baserom.gbc",$132d9,$132e8 - $132d9
|
||||
|
||||
UnnamedText_132e8: ; 0x132e8
|
||||
TX_FAR _UnnamedText_132e8
|
||||
.goBackToMap\@
|
||||
call $3dbe
|
||||
jp CloseTextDisplay
|
||||
.newBadgeRequired\@
|
||||
ld hl,.newBadgeRequiredText\@
|
||||
call PrintText
|
||||
jp .loop\@
|
||||
.newBadgeRequiredText\@
|
||||
TX_FAR _NewBadgeRequiredText
|
||||
db $50
|
||||
; 0x132e8 + 5 bytes
|
||||
|
||||
; writes a blank tile to all possible menu cursor positions on the party menu
|
||||
ErasePartyMenuCursors: ; 72ED
|
||||
|
|
@ -36483,7 +36731,7 @@ CalcHitChance: ; 6624
|
|||
call Multiply
|
||||
ld a,[hl]
|
||||
ld [H_DIVISOR],a ; set divisor to the the denominator of the ratio (the dividend is the product of the previous multiplication)
|
||||
ld b,$04 ; number of significant bytes in the dividend
|
||||
ld b,$04 ; number of bytes in the dividend
|
||||
call Divide
|
||||
ld a,[H_QUOTIENT + 3]
|
||||
ld b,a
|
||||
|
|
@ -82418,34 +82666,34 @@ _UnnamedText_cdff: ; 0xa4088
|
|||
db "Forget SURFing!", $58
|
||||
; 0xa4088 + 33 bytes
|
||||
|
||||
_UnnamedText_13228: ; 0xa40a9
|
||||
_FlashLightsAreaText: ; 0xa40a9
|
||||
db $0, "A blinding FLASH", $4f
|
||||
db "lights the area!", $58
|
||||
; 0xa40a9 + 35 bytes
|
||||
|
||||
_UnnamedText_1327b: ; 0xa40cc
|
||||
_WarpToLastPokemonCenterText: ; 0xa40cc
|
||||
db $0, "Warp to the last", $4f
|
||||
db "#MON CENTER.", $57
|
||||
; 0xa40cc + 31 bytes
|
||||
|
||||
_UnnamedText_13280: ; 0xa40eb
|
||||
_CannotUseTeleportNowText: ; 0xa40eb
|
||||
TX_RAM $cd6d
|
||||
db $0, " can't", $4f
|
||||
db "use TELEPORT now.", $58
|
||||
; 0xa40eb + 28 bytes
|
||||
|
||||
_UnnamedText_13285: ; 0xa4107
|
||||
_CannotFlyHereText: ; 0xa4107
|
||||
TX_RAM $cd6d
|
||||
db $0, " can't", $4f
|
||||
db "FLY here.", $58
|
||||
; 0xa4107 + 20 bytes
|
||||
|
||||
_UnnamedText_132d4: ; 0xa411b
|
||||
_NotHealthyEnoughText: ; 0xa411b
|
||||
db $0, "Not healthy", $4f
|
||||
db "enough.", $58
|
||||
; 0xa411b + 21 bytes
|
||||
|
||||
_UnnamedText_132e8: ; 0xa4130
|
||||
_NewBadgeRequiredText: ; 0xa4130
|
||||
db $0, "No! A new BADGE", $4f
|
||||
db "is required.", $58
|
||||
; 0xa4130 + 30 bytes
|
||||
|
|
|
|||
Loading…
Reference in a new issue