summaryrefslogtreecommitdiff
path: root/engine/overworld/select_menu.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/overworld/select_menu.asm')
-rw-r--r--engine/overworld/select_menu.asm172
1 files changed, 172 insertions, 0 deletions
diff --git a/engine/overworld/select_menu.asm b/engine/overworld/select_menu.asm
new file mode 100644
index 00000000..18532eda
--- /dev/null
+++ b/engine/overworld/select_menu.asm
@@ -0,0 +1,172 @@
+SelectMenu::
+ call CheckRegisteredItem
+ jr c, .NotRegistered
+ jp UseRegisteredItem
+
+.NotRegistered:
+ call OpenText
+ ld b, BANK(MayRegisterItemText)
+ ld hl, MayRegisterItemText
+ call MapTextbox
+ call WaitButton
+ jp CloseText
+
+MayRegisterItemText:
+ text_far _MayRegisterItemText
+ text_end
+
+CheckRegisteredItem:
+ ld a, [wWhichRegisteredItem]
+ and a
+ jr z, .NoRegisteredItem
+ and REGISTERED_POCKET
+ rlca
+ rlca
+ ld hl, .Pockets
+ rst JumpTable
+ ret
+
+.Pockets:
+; entries correspond to *_POCKET constants
+ dw .CheckItem
+ dw .CheckBall
+ dw .CheckKeyItem
+ dw .CheckTMHM
+
+.CheckItem:
+ ld hl, wNumItems
+ call .CheckRegisteredNo
+ jr c, .NoRegisteredItem
+ inc hl
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ call .IsSameItem
+ jr c, .NoRegisteredItem
+ and a
+ ret
+
+.CheckKeyItem:
+ ld a, [wRegisteredItem]
+ ld hl, wKeyItems
+ ld de, 1
+ call IsInArray
+ jr nc, .NoRegisteredItem
+ ld a, [wRegisteredItem]
+ ld [wCurItem], a
+ and a
+ ret
+
+.CheckBall:
+ ld hl, wNumBalls
+ call .CheckRegisteredNo
+ jr nc, .NoRegisteredItem
+ inc hl
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ call .IsSameItem
+ jr c, .NoRegisteredItem
+ ret
+
+.CheckTMHM:
+ jr .NoRegisteredItem
+
+.NoRegisteredItem:
+ xor a
+ ld [wWhichRegisteredItem], a
+ ld [wRegisteredItem], a
+ scf
+ ret
+
+.CheckRegisteredNo:
+ ld a, [wWhichRegisteredItem]
+ and REGISTERED_NUMBER
+ dec a
+ cp [hl]
+ jr nc, .NotEnoughItems
+ ld [wCurItemQuantity], a
+ and a
+ ret
+
+.NotEnoughItems:
+ scf
+ ret
+
+.IsSameItem:
+ ld a, [wRegisteredItem]
+ cp [hl]
+ jr nz, .NotSameItem
+ ld [wCurItem], a
+ and a
+ ret
+
+.NotSameItem:
+ scf
+ ret
+
+UseRegisteredItem:
+ farcall CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .SwitchTo
+ rst JumpTable
+ ret
+
+.SwitchTo:
+; entries correspond to ITEMMENU_* constants
+ dw .CantUse
+ dw .NoFunction
+ dw .NoFunction
+ dw .NoFunction
+ dw .Current
+ dw .Party
+ dw .Overworld
+
+.NoFunction:
+ call OpenText
+ call CantUseItem
+ call CloseText
+ and a
+ ret
+
+.Current:
+ call OpenText
+ call DoItemEffect
+ call CloseText
+ and a
+ ret
+
+.Party:
+ call RefreshScreen
+ call FadeToMenu
+ call DoItemEffect
+ call CloseSubmenu
+ call CloseText
+ and a
+ ret
+
+.Overworld:
+ call RefreshScreen
+ ld a, 1
+ ld [wUsingItemWithSelect], a
+ call DoItemEffect
+ xor a
+ ld [wUsingItemWithSelect], a
+ ld a, [wItemEffectSucceeded]
+ cp 1
+ jr nz, ._cantuse
+ scf
+ ld a, HMENURETURN_SCRIPT
+ ldh [hMenuReturn], a
+ ret
+
+.CantUse:
+ call RefreshScreen
+
+._cantuse
+ call CantUseItem
+ call CloseText
+ and a
+ ret