disasm of options menu

hg-commit-id: 9122bf61b409
This commit is contained in:
YamaArashi 2012-02-12 16:28:29 -08:00
parent 61b0c12165
commit 3316118125
2 changed files with 327 additions and 16 deletions

View file

@ -600,6 +600,18 @@ W_PARTYMON6NAME EQU $D2EC
W_RIVALNAME EQU $D34A ; 11 characters, including null
W_OPTIONS EQU $D355
; bit 7 = battle animation
; 0: On
; 1: Off
; bit 6 = battle style
; 0: Shift
; 1: Set
; bits 0-3 = text speed (number of frames to delay after printing a letter)
; 1: Fast
; 3: Medium
; 5: Slow
W_OBTAINEDBADGES EQU $D356
W_PLAYERIDHI EQU $D359

331
main.asm
View file

@ -5745,17 +5745,17 @@ RedisplayStartMenu: ; 2ADF
inc a ; adjust position to account for missing pokedex menu item
.displayMenuItem\@
cp a,0
jp z,$7095 ; POKEDEX
jp z,StartMenu_Pokedex
cp a,1
jp z,DisplayPokemonMenu ; POKEMON
jp z,StartMenu_Pokemon
cp a,2
jp z,DisplayItemMenu ; ITEM
jp z,StartMenu_Item
cp a,3
jp z,DisplayTrainerInfo ; Trainer Info
jp z,StartMenu_TrainerInfo
cp a,4
jp z,$75e3 ; SAVE / RESET
jp z,StartMenu_SaveReset
cp a,5
jp z,$75f6 ; OPTION
jp z,StartMenu_Option
; EXIT falls through to here
CloseStartMenu: ; 2B70
@ -8416,7 +8416,275 @@ UnnamedText_5d4d: ; 0x5d4d
db $50
; 0x5d4d + 5 bytes
INCBIN "baserom.gbc",$5d52,$3c3
INCBIN "baserom.gbc",$5d52,$5e8a - $5d52
DisplayOptionMenu: ; 5E8A
FuncCoord 0,0
ld hl,Coord
ld b,3
ld c,18
call TextBoxBorder
FuncCoord 0,5
ld hl,Coord
ld b,3
ld c,18
call TextBoxBorder
FuncCoord 0,10
ld hl,Coord
ld b,3
ld c,18
call TextBoxBorder
FuncCoord 1,1
ld hl,Coord
ld de,TextSpeedOptionText
call PlaceString
FuncCoord 1,6
ld hl,Coord
ld de,BattleAnimationOptionText
call PlaceString
FuncCoord 1,11
ld hl,Coord
ld de,BattleStyleOptionText
call PlaceString
FuncCoord 2,16
ld hl,Coord
ld de,OptionMenuCancelText
call PlaceString
xor a
ld [W_CURMENUITEMID],a
ld [W_OLDMENUITEMID],a
inc a
ld [$d358],a
ld [$cd40],a
ld a,3 ; text speed cursor Y coordinate
ld [W_TOPMENUITEMY],a
call SetCursorPositionsFromOptions
ld a,[$cd3d] ; text speed cursor X coordinate
ld [W_TOPMENUITEMX],a
ld a,$01
ld [H_AUTOBGTRANSFERENABLED],a ; enable auto background transfer
call Delay3
.loop\@
call PlaceMenuCursor
call SetOptionsFromCursorPositions
.getJoypadStateLoop\@
call GetJoypadStateLowSensitivity
ld a,[$ffb5]
ld b,a
and a,%11111011 ; any key besides select pressed?
jr z,.getJoypadStateLoop\@
bit 1,b ; B button pressed?
jr nz,.exitMenu\@
bit 3,b ; Start button pressed?
jr nz,.exitMenu\@
bit 0,b ; A button pressed?
jr z,.checkDirectionKeys\@
ld a,[W_TOPMENUITEMY]
cp a,16 ; is the cursor on Cancel?
jr nz,.loop\@
.exitMenu\@
ld a,$90
call $23b1 ; play sound
ret
.eraseOldMenuCursor\@
ld [W_TOPMENUITEMX],a
call EraseMenuCursor
jp .loop\@
.checkDirectionKeys\@
ld a,[W_TOPMENUITEMY]
bit 7,b ; Down pressed?
jr nz,.downPressed\@
bit 6,b ; Up pressed?
jr nz,.upPressed\@
cp a,8 ; cursor in Battle Animation section?
jr z,.cursorInBattleAnimation\@
cp a,13 ; cursor in Battle Style section?
jr z,.cursorInBattleStyle\@
cp a,16 ; cursor on Cancel?
jr z,.loop\@
.cursorInTextSpeed\@
bit 5,b ; Left pressed?
jp nz,.pressedLeftInTextSpeed\@
jp .pressedRightInTextSpeed\@
.downPressed\@
cp a,16
ld b,-13
ld hl,$cd3d
jr z,.updateMenuVariables\@
ld b,5
cp a,3
inc hl
jr z,.updateMenuVariables\@
cp a,8
inc hl
jr z,.updateMenuVariables\@
ld b,3
inc hl
jr .updateMenuVariables\@
.upPressed\@
cp a,8
ld b,-5
ld hl,$cd3d
jr z,.updateMenuVariables\@
cp a,13
inc hl
jr z,.updateMenuVariables\@
cp a,16
ld b,-3
inc hl
jr z,.updateMenuVariables\@
ld b,13
inc hl
.updateMenuVariables\@
add b
ld [W_TOPMENUITEMY],a
ld a,[hl]
ld [W_TOPMENUITEMX],a
call PlaceUnfilledArrowMenuCursor
jp .loop\@
.cursorInBattleAnimation\@
ld a,[$cd3e] ; battle animation cursor X coordinate
xor a,$0b ; toggle between 1 and 10
ld [$cd3e],a
jp .eraseOldMenuCursor\@
.cursorInBattleStyle\@
ld a,[$cd3f] ; battle style cursor X coordinate
xor a,$0b ; toggle between 1 and 10
ld [$cd3f],a
jp .eraseOldMenuCursor\@
.pressedLeftInTextSpeed\@
ld a,[$cd3d] ; text speed cursor X coordinate
cp a,1
jr z,.updateTextSpeedXCoord\@
cp a,7
jr nz,.fromSlowToMedium\@
sub a,6
jr .updateTextSpeedXCoord\@
.fromSlowToMedium\@
sub a,7
jr .updateTextSpeedXCoord\@
.pressedRightInTextSpeed\@
ld a,[$cd3d] ; text speed cursor X coordinate
cp a,14
jr z,.updateTextSpeedXCoord\@
cp a,7
jr nz,.fromFastToMedium\@
add a,7
jr .updateTextSpeedXCoord\@
.fromFastToMedium\@
add a,6
.updateTextSpeedXCoord\@
ld [$cd3d],a ; text speed cursor X coordinate
jp .eraseOldMenuCursor\@
TextSpeedOptionText: ; 5FC0
db "TEXT SPEED",$4E
db " FAST MEDIUM SLOW@"
BattleAnimationOptionText: ; 5FDE
db "BATTLE ANIMATION",$4E
db " ON OFF@"
BattleStyleOptionText: ; 5FFD
db "BATTLE STYLE",$4E
db " SHIFT SET@"
OptionMenuCancelText: ; 6018
db "CANCEL@"
; sets the options variable according to the current placement of the menu cursors in the options menu
SetOptionsFromCursorPositions: ; 601F
ld hl,TextSpeedOptionData
ld a,[$cd3d] ; text speed cursor X coordinate
ld c,a
.loop\@
ld a,[hli]
cp c
jr z,.textSpeedMatchFound\@
inc hl
jr .loop\@
.textSpeedMatchFound\@
ld a,[hl]
ld d,a
ld a,[$cd3e] ; battle animation cursor X coordinate
dec a
jr z,.battleAnimationOn\@
.battleAnimationOff\@
set 7,d
jr .checkBattleStyle\@
.battleAnimationOn\@
res 7,d
.checkBattleStyle\@
ld a,[$cd3f] ; battle style cursor X coordinate
dec a
jr z,.battleStyleShift\@
.battleStyleSet\@
set 6,d
jr .storeOptions\@
.battleStyleShift\@
res 6,d
.storeOptions\@
ld a,d
ld [W_OPTIONS],a
ret
; reads the options variable and places menu cursors in the correct positions within the options menu
SetCursorPositionsFromOptions: ; 604C
ld hl,TextSpeedOptionData + 1
ld a,[W_OPTIONS]
ld c,a
and a,$3f
push bc
ld de,2
call IsInArray
pop bc
dec hl
ld a,[hl]
ld [$cd3d],a ; text speed cursor X coordinate
FuncCoord 0,3
ld hl,Coord
call .placeUnfilledRightArrow\@
sla c
ld a,1 ; On
jr nc,.storeBattleAnimationCursorX\@
ld a,10 ; Off
.storeBattleAnimationCursorX\@
ld [$cd3e],a ; battle animation cursor X coordinate
FuncCoord 0,8
ld hl,Coord
call .placeUnfilledRightArrow\@
sla c
ld a,1
jr nc,.storeBattleStyleCursorX\@
ld a,10
.storeBattleStyleCursorX\@
ld [$cd3f],a ; battle style cursor X coordinate
FuncCoord 0,13
ld hl,Coord
call .placeUnfilledRightArrow\@
; cursor in front of Cancel
FuncCoord 0,16
ld hl,Coord
ld a,1
.placeUnfilledRightArrow\@
ld e,a
ld d,0
add hl,de
ld [hl],$ec ; unfilled right arrow menu cursor
ret
; table that indicates how the 3 text speed options affect frame delays
; Format:
; 00: X coordinate of menu cursor
; 01: delay after printing a letter (in frames)
TextSpeedOptionData: ; 6096
db 14,5 ; Slow
db 7,3 ; Medium
db 1,1 ; Fast
db 7 ; default X coordinate (Medium)
db $ff ; terminator
INCBIN "baserom.gbc",$609e,$6115-$609e
OakSpeech: ; 6115
ld a,$FF
@ -16656,9 +16924,18 @@ ShrinkPic1:
ShrinkPic2:
INCBIN "pic/trainer/shrink2.pic"
INCBIN "baserom.gbc",$13074,$130A9 - $13074
INCBIN "baserom.gbc",$13074,$13095 - $13074
DisplayPokemonMenu: ; 70A9
StartMenu_Pokedex: ; 7095
ld a,$29
call Predef
call $3701 ; restore saved screen
call Delay3
call LoadGBPal
call $2429
jp RedisplayStartMenu
StartMenu_Pokemon: ; 70A9
ld a,[W_NUMINPARTY]
and a
jp z,RedisplayStartMenu
@ -16739,7 +17016,7 @@ DisplayPokemonMenu: ; 70A9
.choseSwitch\@
ld a,[W_NUMINPARTY]
cp a,2 ; is there more than one pokemon in the party?
jp c,DisplayPokemonMenu ; if not, no switching
jp c,StartMenu_Pokemon ; if not, no switching
call $7653
ld a,$04 ; swap pokemon positions menu
ld [$d07d],a
@ -16754,7 +17031,7 @@ DisplayPokemonMenu: ; 70A9
ld a,$37
call Predef
call ReloadMapData
jp DisplayPokemonMenu
jp StartMenu_Pokemon
.choseOutOfBattleMove\@
push hl
ld a,[$cf92]
@ -16802,7 +17079,7 @@ DisplayPokemonMenu: ; 70A9
call LoadFontTilePatterns
ld hl,$d72e
set 1,[hl]
jp DisplayPokemonMenu
jp StartMenu_Pokemon
.cut\@
bit 1,a ; does the player have the Cascade Badge?
jp z,.newBadgeRequired\@
@ -16958,7 +17235,7 @@ ItemMenuLoop: ; 72FC
call $3709 ; restore saved screen
call GoPAL_SET_CF1C
DisplayItemMenu: ; 7302
StartMenu_Item: ; 7302
ld a,[W_ISLINKBATTLE]
dec a
jr nz,.notInLinkBattle\@
@ -17079,7 +17356,7 @@ DisplayItemMenu: ; 7302
call $3dbe
pop af
ld [$cfcb],a
jp DisplayItemMenu
jp StartMenu_Item
.partyMenuNotDisplayed\@
pop af
ld [$cfcb],a
@ -17159,7 +17436,7 @@ UsableItems_CloseMenu: ; 7459
db SUPER_ROD
db $ff
DisplayTrainerInfo: ; 7460
StartMenu_TrainerInfo: ; 7460
call GBPalWhiteOut
call ClearScreen
call $2429 ; move sprites
@ -17360,7 +17637,29 @@ TrainerInfo_DrawVerticalLine: ; 75D8
jr nz,.loop\@
ret
INCBIN "baserom.gbc",$135e3,$13773 - $135e3
StartMenu_SaveReset: ; 75E3
ld a,[$d72e]
bit 6,a ; is the player using the link feature?
jp nz,InitGame
ld a,$3f
call Predef ; save the game
call $3701 ; restore saved screen
jp HoldTextDisplayOpen
StartMenu_Option: ; 75F6
xor a
ld [H_AUTOBGTRANSFERENABLED],a
call ClearScreen
call $2429
ld hl,DisplayOptionMenu
ld b,BANK(DisplayOptionMenu)
call Bankswitch
call $3701 ; restore saved screen
call LoadTextBoxTilePatterns
call $2429
jp RedisplayStartMenu
INCBIN "baserom.gbc",$13613,$7773 - $7613
TechnicalMachines: ; 0x13773
db MEGA_PUNCH