diff options
author | YamaArashi <shadow962@live.com> | 2012-02-10 19:09:00 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2012-02-10 19:09:00 -0800 |
commit | aafbc2f602154694a86dd743315d75f41ad1b1dc (patch) | |
tree | 2bfdd7e80a8d2257eb95796ef6eaa102b568d721 /main.asm | |
parent | d527e05cd82887e451043f52106898650c340e96 (diff) |
disasm of item menu and misc functions
hg-commit-id: c3d464202198
Diffstat (limited to 'main.asm')
-rw-r--r-- | main.asm | 506 |
1 files changed, 451 insertions, 55 deletions
@@ -2777,7 +2777,7 @@ LoadMapData: ; 1241 ld [$d119],a ld [$d11a],a ld [$d3a8],a - call $36a0 ; transfer tile pattern data for text windows into VRAM + call LoadTextBoxTilePatterns call LoadMapHeader ld b,$05 ld hl,$785b @@ -5736,7 +5736,7 @@ RedisplayStartMenu: ; 2ADF ld [$cc2d],a ; save current menu item ID ld a,b and a,%00001010 ; was the Start button or B button pressed? - jp nz,.closeMenu\@ + jp nz,CloseStartMenu call $36f4 ; copy background from $C3A0 to $CD81 ld a,[$d74b] bit 5,a ; does the player have the pokedex? @@ -5749,20 +5749,21 @@ RedisplayStartMenu: ; 2ADF cp a,1 jp z,DisplayPokemonMenu ; POKEMON cp a,2 - jp z,$7302 ; ITEM + jp z,DisplayItemMenu ; ITEM cp a,3 jp z,$7460 ; Trainer Info cp a,4 jp z,$75e3 ; SAVE / RESET cp a,5 jp z,$75f6 ; OPTION + ; EXIT falls through to here -.closeMenu\@ +CloseStartMenu: ; 2B70 call GetJoypadState ld a,[$ffb3] bit 0,a ; was A button newly pressed? - jr nz,.closeMenu\@ - call $36a0 ; transfer tile pattern data for text windows into VRAM + jr nz,CloseStartMenu + call LoadTextBoxTilePatterns jp CloseTextDisplay ; function to count how many bits are set in a string of bytes @@ -6328,7 +6329,7 @@ PrintListMenuEntries: ; 2E5A .printItemQuantity\@ ld a,[$d11e] ld [$cf91],a - call $30d9 ; check if item is unsellable + call IsKeyItem ; check if item is unsellable ld a,[$d124] and a ; is the item unsellable? jr nz,.skipPrintingItemQuantity\@ ; if so, don't print the quantity @@ -6528,7 +6529,103 @@ GetMoveName: ; 3058 pop hl ret -INCBIN "baserom.gbc",$3071,$30E8 - $3071 +; reloads text box tile patterns, current map view, and tileset tile patterns +ReloadMapData: ; 3071 + ld a,[$ffb8] + push af + ld a,[W_CURMAP] + call SwitchToMapRomBank + call DisableLCD + call LoadTextBoxTilePatterns + call LoadCurrentMapView + call LoadTilesetTilePatternData + call EnableLCD + pop af + ld [$ffb8],a + ld [$2000],a + ret + +; reloads tileset tile patterns +ReloadTilesetTilePatterns: ; 3090 + ld a,[$ffb8] + push af + ld a,[W_CURMAP] + call SwitchToMapRomBank + call DisableLCD + call LoadTilesetTilePatternData + call EnableLCD + pop af + ld [$ffb8],a + ld [$2000],a + ret + +; shows the town map and lets the player choose a destination to fly to +ChooseFlyDestination: ; 30A9 + ld hl,$d72e + res 4,[hl] + ld b,$1c + ld hl,$4f90 + jp Bankswitch + +; causes the text box to close waithout waiting for a button press after displaying text +DisableWaitingAfterTextDisplay: ; 30B6 + ld a,$01 + ld [$cc3c],a + ret + +; uses an item +; UseItem is used with dummy items to perform certain other functions as well +; INPUT: +; [$cf91] = item ID +; OUTPUT: +; [$cd6a] = success +; 00: unsucessful +; 01: successful +; 02: not able to be used right now, no extra menu displayed (only certain items use this) +UseItem: ; 30BC + ld b,BANK(UseItem_) + ld hl,UseItem_ + jp Bankswitch + +; confirms the item toss and then tosses the item +; INPUT: +; hl = address of inventory (either W_NUMBAGITEMS or W_NUMBOXITEMS) +; [$cf91] = item ID +; [$cf92] = index of item within inventory +; [$cf96] = quantity to toss +; OUTPUT: +; clears carry flag if the item is tossed, sets carry flag if not +TossItem: ; 30C4 + ld a,[$ffb8] + push af + ld a,BANK(TossItem_) + ld [$ffb8],a + ld [$2000],a + call TossItem_ + pop de + ld a,d + ld [$ffb8],a + ld [$2000],a + ret + +; checks if an item is a key item +; INPUT: +; [$cf91] = item ID +; OUTPUT: +; [$d124] = result +; 00: item is not key item +; 01: item is key item +IsKeyItem: ; 30D9 + push hl + push de + push bc + ld b,BANK(IsKeyItem_) + ld hl,IsKeyItem_ + call Bankswitch + pop bc + pop de + pop hl + ret ; function to draw various text boxes ; INPUT: @@ -8918,7 +9015,7 @@ DisplayPokemartDialogue_: ; 6C20 call DisplayListMenuID jp c,.returnToMainPokemartMenu\@ ; if the player closed the menu .confirmItemSale\@ ; if the player is trying to sell a specific item - call $30d9 ; check if item is unsellable + call IsKeyItem ; check if item is unsellable ld a,[$d124] and a jr nz,.unsellableItem\@ @@ -15056,7 +15153,7 @@ CaveMons: ENDC -GetItemUse: ; $D5C7 +UseItem_: ; $D5C7 ld a,1 ld [$cd6a],a ld a,[$cf91] ;contains item_ID @@ -15762,24 +15859,130 @@ UnnamedText_e601: ; 0xe601 db $50 ; 0xe601 + 5 bytes -INCBIN "baserom.gbc",$e606,$e755 - $e606 +INCBIN "baserom.gbc",$e606,$e6f1 - $e606 -UnnamedText_e755: ; 0xe755 - TX_FAR _UnnamedText_e755 +; confirms the item toss and then tosses the item +; INPUT: +; hl = address of inventory (either W_NUMBAGITEMS or W_NUMBOXITEMS) +; [$cf91] = item ID +; [$cf92] = index of item within inventory +; [$cf96] = quantity to toss +; OUTPUT: +; clears carry flag if the item is tossed, sets carry flag if not +TossItem_: ; 66F1 + push hl + ld a,[$cf91] + call IsItemHM + pop hl + jr c,.tooImportantToToss\@ + push hl + call IsKeyItem_ + ld a,[$d124] + pop hl + and a + jr nz,.tooImportantToToss\@ + push hl + ld a,[$cf91] + ld [$d11e],a + call GetItemName + call $3826 ; copy name to $cf4b + ld hl,IsItOKToTossItemText + call PrintText + FuncCoord 14,7 + ld hl,Coord + ld bc,$080f + ld a,$14 + ld [$d125],a + call DisplayTextBoxID ; yes/no menu + ld a,[$d12e] + cp a,2 + pop hl + scf + ret z +; if the player chose Yes + push hl + ld a,[$cf92] + call RemoveItemFromInventory + ld a,[$cf91] + ld [$d11e],a + call GetItemName + call $3826 ; copy name to $cf4b + ld hl,ThrewAwayItemText + call PrintText + pop hl + and a + ret +.tooImportantToToss\@ + push hl + ld hl,TooImportantToTossText + call PrintText + pop hl + scf + ret + +ThrewAwayItemText: ; 0xe755 + TX_FAR _ThrewAwayItemText db $50 -; 0xe755 + 5 bytes -UnnamedText_e75a: ; 0xe75a - TX_FAR _UnnamedText_e75a +IsItOKToTossItemText: ; 0xe75a + TX_FAR _IsItOKToTossItemText db $50 -; 0xe75a + 5 bytes -UnnamedText_e75f: ; 0xe75f - TX_FAR _UnnamedText_e75f +TooImportantToTossText: ; 0xe75f + TX_FAR _TooImportantToTossText db $50 -; 0xe75f + 5 bytes -INCBIN "baserom.gbc",$e764,$e8ea - $e764 +; checks if an item is a key item +; INPUT: +; [$cf91] = item ID +; OUTPUT: +; [$d124] = result +; 00: item is not key item +; 01: item is key item +IsKeyItem_: ; 6764 + ld a,$01 + ld [$d124],a + ld a,[$cf91] + cp a,HM_01 ; is the item an HM or TM? + jr nc,.checkIfItemIsHM\@ +; if the item is not an HM or TM + push af + ld hl,KeyItemBitfield + ld de,$cee9 + ld bc,15 ; only 11 bytes are actually used + call CopyData + pop af + dec a + ld c,a + ld hl,$cee9 + ld b,$02 ; test bit + ld a,$10 + call Predef ; bitfield operation function + ld a,c + and a + ret nz +.checkIfItemIsHM\@ + ld a,[$cf91] + call IsItemHM + ret c + xor a + ld [$d124],a + ret + +KeyItemBitfield: ; 6799 + db %11110000 + db %00000001 + db %11110000 + db %01001111 + db %00000000 + db %10011111 + db %00000000 + db %11000000 + db %11110000 + db %00111011 + db %00000000 + +INCBIN "baserom.gbc",$e7a4,$68ea - $67a4 ; 68EA 0xe8ea ReadSuperRodData: @@ -16550,7 +16753,7 @@ DisplayPokemonMenu: ; 70A9 call Predef ld a,$37 call Predef - call $3071 + call ReloadMapData jp DisplayPokemonMenu .choseOutOfBattleMove\@ push hl @@ -16592,7 +16795,7 @@ DisplayPokemonMenu: ; 70A9 call PrintText jp .loop\@ .canFly\@ - call $30a9 ; allow player to pick fly destination on map + call ChooseFlyDestination ld a,[$d732] bit 3,a ; did the player decide to fly? jp nz,.goBackToMap\@ @@ -16619,10 +16822,10 @@ DisplayPokemonMenu: ; 70A9 bit 1,[hl] res 1,[hl] jp z,.loop\@ - ld a,$07 + ld a,SURFBOARD ld [$cf91],a ld [$d152],a - call $30bc + call UseItem ld a,[$cd6a] and a jp z,.loop\@ @@ -16648,10 +16851,10 @@ DisplayPokemonMenu: ; 70A9 TX_FAR _FlashLightsAreaText db $50 .dig\@ - ld a,$1d + ld a,ESCAPE_ROPE ld [$cf91],a ld [$d152],a - call $30bc + call UseItem ld a,[$cd6a] and a jp z,.loop\@ @@ -16713,10 +16916,10 @@ DisplayPokemonMenu: ; 70A9 jp nc,.notHealthyEnough\@ ld a,[$cc2b] push af - ld a,$14 + ld a,POTION ld [$cf91],a ld [$d152],a - call $30bc + call UseItem pop af ld [$cc2b],a jp .loop\@ @@ -16751,19 +16954,212 @@ ErasePartyMenuCursors: ; 72ED jr nz,.loop\@ ret -INCBIN "baserom.gbc",$132fc,$1342a - $132fc +ItemMenuLoop: ; 72FC + call $3709 ; restore saved screen + call GoPAL_SET_CF1C -UnnamedText_1342a: ; 0x1342a - TX_FAR _UnnamedText_1342a - db $50 -; 0x1342a + 5 bytes +DisplayItemMenu: ; 7302 + ld a,[W_ISLINKBATTLE] + dec a + jr nz,.notInLinkBattle\@ + ld hl,CannotUseItemsHereText + call PrintText + jr .exitMenu\@ +.notInLinkBattle\@ + ld bc,W_NUMBAGITEMS + ld hl,$cf8b + ld a,c + ld [hli],a + ld [hl],b ; store item bag pointer at $cf8b (for DisplayListMenuID) + xor a + ld [$cf93],a + ld a,ITEMLISTMENU + ld [W_LISTMENUID],a + ld a,[$cc2c] + ld [W_CURMENUITEMID],a + call DisplayListMenuID + ld a,[W_CURMENUITEMID] + ld [$cc2c],a + jr nc,.choseItem\@ +.exitMenu\@ + call $3701 ; restore saved screen + call LoadTextBoxTilePatterns + call $2429 ; move sprites + jp RedisplayStartMenu +.choseItem\@ +; erase menu cursor (blank each tile in front of an item name) + ld a,$7f ; blank space + FuncCoord 5,4 + ld [Coord],a + FuncCoord 5,6 + ld [Coord],a + FuncCoord 5,8 + ld [Coord],a + FuncCoord 5,10 + ld [Coord],a + call PlaceUnfilledArrowMenuCursor + xor a + ld [$cc35],a + ld a,[$cf91] + cp a,BICYCLE + jp z,.useOrTossItem\@ +.notBicycle1\@ + ld a,$06 ; use/toss menu + ld [$d125],a + call DisplayTextBoxID + ld hl,W_TOPMENUITEMY + ld a,11 + ld [hli],a ; top menu item Y + ld a,14 + ld [hli],a ; top menu item X + xor a + ld [hli],a ; current menu item ID + inc hl + inc a ; a = 1 + 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 ; old menu item id + call HandleMenuInput + call PlaceUnfilledArrowMenuCursor + bit 1,a ; was the B button pressed? + jr z,.useOrTossItem\@ + jp ItemMenuLoop +.useOrTossItem\@ ; if the player made the choice to use or toss the item + ld a,[$cf91] + ld [$d11e],a + call GetItemName + call $3826 ; copy name to $cf4b + ld a,[$cf91] + cp a,BICYCLE + jr nz,.notBicycle2\@ + ld a,[$d732] + bit 5,a + jr z,.useItem_closeMenu\@ + ld hl,CannotGetOffHereText + call PrintText + jp ItemMenuLoop +.notBicycle2\@ + ld a,[W_CURMENUITEMID] + and a + jr nz,.tossItem\@ +.useItem\@ + ld [$d152],a + ld a,[$cf91] + cp a,HM_01 + jr nc,.useItem_partyMenu\@ + ld hl,UsableItems_CloseMenu + ld de,1 + call IsInArray + jr c,.useItem_closeMenu\@ + ld a,[$cf91] + ld hl,UsableItems_PartyMenu + ld de,1 + call IsInArray + jr c,.useItem_partyMenu\@ + call UseItem + jp ItemMenuLoop +.useItem_closeMenu\@ + xor a + ld [$d152],a + call UseItem + ld a,[$cd6a] + and a + jp z,ItemMenuLoop + jp CloseStartMenu +.useItem_partyMenu\@ + ld a,[$cfcb] + push af + call UseItem + ld a,[$cd6a] + cp a,$02 + jp z,.partyMenuNotDisplayed\@ + call GBPalWhiteOutWithDelay3 + call $3dbe + pop af + ld [$cfcb],a + jp DisplayItemMenu +.partyMenuNotDisplayed\@ + pop af + ld [$cfcb],a + jp ItemMenuLoop +.tossItem\@ + call IsKeyItem + ld a,[$d124] + and a + jr nz,.skipAskingQuantity\@ + ld a,[$cf91] + call IsItemHM + jr c,.skipAskingQuantity\@ + call DisplayChooseQuantityMenu + inc a + jr z,.tossZeroItems\@ +.skipAskingQuantity\@ + ld hl,W_NUMBAGITEMS + call TossItem +.tossZeroItems\@ + jp ItemMenuLoop + +CannotUseItemsHereText: ; 742A + TX_FAR _CannotUseItemsHereText + db $50 + +CannotGetOffHereText: ; 742F + TX_FAR _CannotGetOffHereText + db $50 + +; items which bring up the party menu when used +UsableItems_PartyMenu: ; 7434 + db MOON_STONE + db ANTIDOTE + db BURN_HEAL + db ICE_HEAL + db AWAKENING + db PARLYZ_HEAL + db FULL_RESTORE + db MAX_POTION + db HYPER_POTION + db SUPER_POTION + db POTION + db FIRE_STONE + db THUNDER_STONE + db WATER_STONE + db HP_UP + db PROTEIN + db IRON + db CARBOS + db CALCIUM + db RARE_CANDY + db LEAF_STONE + db FULL_HEAL + db REVIVE + db MAX_REVIVE + db FRESH_WATER + db SODA_POP + db LEMONADE + db X_ATTACK + db X_DEFEND + db X_SPEED + db X_SPECIAL + db PP_UP + db ETHER + db MAX_ETHER + db ELIXER + db MAX_ELIXER + db $ff -UnnamedText_1342f: ; 0x1342f - TX_FAR _UnnamedText_1342f - db $50 -; 0x1342f + 5 bytes +; items which close the item menu when used +UsableItems_CloseMenu: ; 7459 + db ESCAPE_ROPE + db ITEMFINDER + db POKE_FLUTE + db OLD_ROD + db GOOD_ROD + db SUPER_ROD + db $ff -INCBIN "baserom.gbc",$13434,$13773 - $13434 +INCBIN "baserom.gbc",$13460,$13773 - $13460 TechnicalMachines: ; 0x13773 db MEGA_PUNCH @@ -21547,7 +21943,7 @@ asm_1d157: ; 0x1d157 call Predef ld hl, $d730 res 6, [hl] - call $3071 + call ReloadMapData ld c, $a call $3739 ld a, [$cf13] @@ -36989,7 +37385,7 @@ DisplayPokedexMenu_: ; 4000 ld [W_LISTSCROLLOFFSET],a call GBPalWhiteOutWithDelay3 call GoPAL_SET_CF1C - jp $3071 ; reloads map data + jp ReloadMapData .goToSideMenu\@ call HandlePokedexSideMenu dec b @@ -42273,7 +42669,7 @@ MomHealPokemon: ; 0x4818a ld hl, MomHealText1 call PrintText call GBFadeOut2 - call $3071 + call ReloadMapData ld a, 7 call Predef ld a, $E8 @@ -43111,7 +43507,7 @@ CeladonGymText1: ; 0x48a11 bit 0, a jr nz, .asm_3b22c ; 0x48a1b call z, $4963 - call $30b6 + call DisableWaitingAfterTextDisplay jr .asm_96252 ; 0x48a23 .asm_3b22c ; 0x48a25 ld hl, UnnamedText_48a68 @@ -56896,7 +57292,7 @@ PewterGymText1: ; 0x5c44e bit 6, a jr nz, .asm_ff7d0 ; 0x5c458 call z, $43df - call $30b6 + call DisableWaitingAfterTextDisplay jr .asm_e0ffb ; 0x5c460 .asm_ff7d0 ; 0x5c462 ld hl, UnnamedText_5c4a3 @@ -57266,7 +57662,7 @@ CeruleanGymText1: ; 0x5c771 bit 6, a jr nz, .asm_37a1b ; 0x5c77b call z, $470d - call $30b6 + call DisableWaitingAfterTextDisplay jr .asm_95b04 ; 0x5c783 .asm_37a1b ; 0x5c785 ld hl, UnnamedText_5c7c3 @@ -57728,7 +58124,7 @@ VermilionGymText1: ; 0x5cb1d bit 6, a jr nz, .asm_41203 ; 0x5cb27 call z, $4aaa - call $30b6 + call DisableWaitingAfterTextDisplay jr .asm_23621 ; 0x5cb2f .asm_41203 ; 0x5cb31 ld hl, UnnamedText_5cb72 @@ -58447,7 +58843,7 @@ SaffronGymText1: ; 0x5d118 bit 0, a jr nz, .asm_8d2f6 ; 0x5d122 call z, $5068 - call $30b6 + call DisableWaitingAfterTextDisplay jr .asm_34c2c ; 0x5d12a .asm_8d2f6 ; 0x5d12c ld hl, UnnamedText_5d16e @@ -64362,7 +64758,7 @@ ViridianGymText1: ; 0x74a69 bit 0, a jr nz, .asm_9fc95 ; 0x74a73 call z, $4995 - call $30b6 + call DisableWaitingAfterTextDisplay jr .asm_6dff7 ; 0x74a7b .asm_9fc95 ; 0x74a7d ld a, $1 @@ -65641,7 +66037,7 @@ FuchsiaGymText1: ; 0x75534 bit 0, a jr nz, .asm_adc3b ; 0x7553e call z, $5497 - call $30b6 + call DisableWaitingAfterTextDisplay jr .asm_e84c6 ; 0x75546 .asm_adc3b ; 0x75548 ld hl, UnnamedText_7558b @@ -66088,7 +66484,7 @@ CinnabarGymText1: ; 0x758df bit 0, a jr nz, .asm_3012f ; 0x758e9 $9 call z, $5857 - call $30b6 + call DisableWaitingAfterTextDisplay jp TextScriptEnd .asm_3012f ; 0x758f4 ld hl, UnnamedText_75920 @@ -82698,12 +83094,12 @@ _NewBadgeRequiredText: ; 0xa4130 db "is required.", $58 ; 0xa4130 + 30 bytes -_UnnamedText_1342a: ; 0xa414e +_CannotUseItemsHereText: ; 0xa414e db $0, "You can't use items", $4f db "here.", $58 ; 0xa414e + 26 bytes -_UnnamedText_1342f: ; 0xa4168 +_CannotGetOffHereText: ; 0xa4168 db $0, "You can't get off", $4f db "here.", $58 ; 0xa4168 + 24 bytes @@ -84016,7 +84412,7 @@ _UnnamedText_e601: ; 0xa8030 db $0, ".", $58 ; 0xa803c -_UnnamedText_e755: ; 0xa803c +_ThrewAwayItemText: ; 0xa803c db $0, "Threw away", $4f db "@" ; 0xa803c + 13 bytes @@ -84026,7 +84422,7 @@ UnnamedText_a8049: ; 0xa8049 db $0, ".", $58 ; 0xa804f -_UnnamedText_e75a: ; 0xa804f +_IsItOKToTossItemText: ; 0xa804f db $0, "Is it OK to toss", $4f db "@" ; 0xa804f + 19 bytes @@ -84036,7 +84432,7 @@ UnnamedText_a8062: ; 0xa8062 db $0, "?", $58 ; 0xa8068 -_UnnamedText_e75f: ; 0xa8068 +_TooImportantToTossText: ; 0xa8068 db $0, "That's too impor-", $4f db "tant to toss!", $58 ; 0xa8068 + 32 bytes |