summaryrefslogtreecommitdiff
path: root/engine/items
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-05-01 20:56:15 -0400
committerentrpntr <entrpntr@gmail.com>2020-05-01 20:56:15 -0400
commit9b5b2ac809338ab4f45a3460c98eb30b14910d91 (patch)
treea53f832df3b5afc3d9210eaf2ed446ab0cfbc91b /engine/items
parenta0ebc7fbaecc787929b8143f0e01b7d929e01852 (diff)
Disassemble bank $0b.
Diffstat (limited to 'engine/items')
-rwxr-xr-xengine/items/items.asm12
-rwxr-xr-xengine/items/pack.asm8
-rw-r--r--engine/items/print_item_description.asm32
-rw-r--r--engine/items/tmhm.asm552
4 files changed, 594 insertions, 10 deletions
diff --git a/engine/items/items.asm b/engine/items/items.asm
index 748b3d46..5ab48b2a 100755
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -35,7 +35,7 @@ ReceiveTMHM:
ld l, e
ld a, [wCurItem]
ld c, a
- call GetTMHMNumber
+ call GetNumberedTMHM
jp PutItemInTMPocket
_TossItem:: ; d21a (3:521a)
@@ -65,7 +65,7 @@ RemoveTMHM:
ld l, e
ld a, [wCurItem]
ld c, a
- call GetTMHMNumber
+ call GetNumberedTMHM
jp RemoveTMorHM
RemoveKeyItem:
@@ -106,7 +106,7 @@ CheckTMHM:
ld l, e
ld a, [wCurItem]
ld c, a
- call GetTMHMNumber
+ call GetNumberedTMHM
jp CheckTMorHM
CheckKeyItem:
@@ -419,11 +419,11 @@ RemoveTMorHM: ; d3e5 (3:53e5)
ld [hl], a
ld [wItemQuantityBuffer], a
jr nz, .asm_d404
- ld a, [wcfd2]
+ ld a, [wTMHMPocketScrollPosition]
and a
jr z, .asm_d404
dec a
- ld [wcfd2], a
+ ld [wTMHMPocketScrollPosition], a
.asm_d404
scf
ret
@@ -443,7 +443,7 @@ CheckTMorHM: ; d408 (3:5408)
scf
ret
-GetTMHMNumber:: ; d414 (3:5414)
+GetNumberedTMHM:: ; d414 (3:5414)
ld a, c
cp ITEM_C3
jr c, .asm_d41f
diff --git a/engine/items/pack.asm b/engine/items/pack.asm
index 5225362a..76b0f5e7 100755
--- a/engine/items/pack.asm
+++ b/engine/items/pack.asm
@@ -115,7 +115,7 @@ Pack_InitTMHMPocket:
ret
Pack_TMHMPocketMenu:
- farcall Pack_TMHMPocketMenu_
+ farcall TMHMPocket
ld b, $5
ld c, $1
call Function10cef
@@ -733,7 +733,7 @@ BattlePack_InitTMHMPocket:
ret
BattlePack_TMHMPocketMenu:
- farcall Pack_TMHMPocketMenu_ ; b:457a
+ farcall TMHMPocket ; b:457a
ld b, $5
ld c, $1
call Function10cef
@@ -973,7 +973,7 @@ DepositOrSell_TMHMPocket:
ld a, $3
call Function10b92
call Function10cca
- farcall Pack_TMHMPocketMenu_ ; b:457a
+ farcall TMHMPocket ; b:457a
ld a, [wCurItem]
ld [wCurItem], a
ret
@@ -1126,7 +1126,7 @@ TutorialTMHM:
ld a, $3
call Function10b92
call Function10cca
- farcall Pack_TMHMPocketMenu_
+ farcall TMHMPocket
ld a, [wCurItem]
ld [wCurItem], a
ret
diff --git a/engine/items/print_item_description.asm b/engine/items/print_item_description.asm
new file mode 100644
index 00000000..89a949ad
--- /dev/null
+++ b/engine/items/print_item_description.asm
@@ -0,0 +1,32 @@
+PrintItemDescription:
+; Print the description for item [wCurSpecies] at de.
+
+ ld a, [wCurSpecies]
+ cp TM01
+ jr c, .not_a_tm
+
+ ld [wCurItem], a
+ push de
+ call GetTMHMItemMove
+ pop hl
+ ld a, [wTempTMHM]
+ ld [wCurSpecies], a
+ call PrintMoveDesc
+ ret
+
+.not_a_tm
+ push de
+ ld hl, ItemDescriptions
+ ld a, [wCurSpecies]
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+ ld a, BANK(ItemDescriptions)
+ call GetFarHalfword
+ ld d, h
+ ld e, l
+ pop hl
+ ld a, BANK(ItemDescriptions)
+ jp FarString
diff --git a/engine/items/tmhm.asm b/engine/items/tmhm.asm
new file mode 100644
index 00000000..4095be03
--- /dev/null
+++ b/engine/items/tmhm.asm
@@ -0,0 +1,552 @@
+TMHMPocket:
+ ld a, $1
+ ldh [hInMenu], a
+ call TMHM_PocketLoop
+ ld a, $0
+ ldh [hInMenu], a
+ ret nc
+ call PlaceHollowCursor
+ call WaitBGMap
+ ld a, [wCurItem]
+ dec a
+ ld [wCurItemQuantity], a
+ ld hl, wTMsHMs
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [hl]
+ ld [wItemQuantityBuffer], a
+ call .ConvertItemToTMHMNumber
+ scf
+ ret
+
+.ConvertItemToTMHMNumber:
+ ld a, [wCurItem]
+ ld c, a
+ callfar GetNumberedTM
+ ld a, c
+ ld [wCurItem], a
+ ret
+
+ConvertCurItemIntoCurTMHM:
+ ld a, [wCurItem]
+ ld c, a
+ callfar GetNumberedTMHM
+ ld a, c
+ ld [wTempTMHM], a
+ ret
+
+GetTMHMItemMove:
+ call ConvertCurItemIntoCurTMHM
+ predef GetTMHMMove
+ ret
+
+AskTeachTMHM:
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ res NO_TEXT_SCROLL, [hl]
+ ld a, [wCurItem]
+ cp TM01
+ jr c, .NotTMHM
+ call GetTMHMItemMove
+ ld a, [wTempTMHM]
+ ld [wPutativeTMHMMove], a
+ call GetMoveName
+ call CopyName1
+ ld hl, BootedTMText ; Booted up a TM
+ ld a, [wCurItem]
+ cp HM01
+ jr c, .TM
+ ld hl, BootedHMText ; Booted up an HM
+.TM:
+ call PrintText
+ ld hl, ContainedMoveText
+ call PrintText
+ call YesNoBox
+.NotTMHM:
+ pop bc
+ ld a, b
+ ld [wOptions], a
+ ret
+
+ChooseMonToLearnTMHM:
+ ld hl, wStringBuffer2
+ ld de, wTMHMMoveNameBackup
+ ld bc, 12
+ call CopyBytes
+ call ClearBGPalettes
+ChooseMonToLearnTMHM_NoRefresh:
+ farcall LoadPartyMenuGFX
+ farcall InitPartyMenuWithCancel
+ farcall InitPartyMenuGFX
+ ld a, PARTYMENUACTION_TEACH_TMHM
+ ld [wPartyMenuActionText], a
+.loopback
+ farcall WritePartyMenuTilemap
+ farcall PrintPartyMenuText
+ call WaitBGMap
+ call SetPalettes
+ call DelayFrame
+ farcall PartyMenuSelect
+ push af
+ ld a, [wCurPartySpecies]
+ cp EGG
+ pop bc ; now contains the former contents of af
+ jr z, .egg
+ push bc
+ ld hl, wTMHMMoveNameBackup
+ ld de, wStringBuffer2
+ ld bc, 12
+ call CopyBytes
+ pop af ; now contains the original contents of af
+ ret
+
+.egg
+ push hl
+ push de
+ push bc
+ push af
+ ld de, SFX_WRONG
+ call PlaySFX
+ call WaitSFX
+ pop af
+ pop bc
+ pop de
+ pop hl
+ jr .loopback
+
+TeachTMHM:
+ predef CanLearnTMHMMove
+
+ push bc
+ ld a, [wCurPartyMon]
+ ld hl, wPartyMonNicknames
+ call GetNick
+ pop bc
+
+ ld a, c
+ and a
+ jr nz, .compatible
+ push de
+ ld de, SFX_WRONG
+ call PlaySFX
+ pop de
+ ld hl, TMHMNotCompatibleText
+ call PrintText
+ jr .nope
+
+.compatible
+ callfar KnowsMove
+ jr c, .nope
+
+ predef LearnMove
+ ld a, b
+ and a
+ jr z, .nope
+
+ ld a, [wCurItem]
+ call IsHM
+ ret c
+
+ ld c, HAPPINESS_LEARNMOVE
+ callfar ChangeHappiness
+ call ConsumeTM
+ jr .learned_move
+
+.nope
+ and a
+ ret
+
+.unused
+ ld a, 2
+ ld [wItemEffectSucceeded], a
+.learned_move
+ scf
+ ret
+
+BootedTMText:
+ text_far _BootedTMText
+ text_end
+
+BootedHMText:
+ text_far _BootedHMText
+ text_end
+
+ContainedMoveText:
+ text_far _ContainedMoveText
+ text_end
+
+TMHMNotCompatibleText:
+ text_far _TMHMNotCompatibleText
+ text_end
+
+TMHM_PocketLoop:
+ xor a
+ ldh [hBGMapMode], a
+ call TMHM_DisplayPocketItems
+ ld a, 2
+ ld [w2DMenuCursorInitY], a
+ ld a, 7
+ ld [w2DMenuCursorInitX], a
+ ld a, 1
+ ld [w2DMenuNumCols], a
+ ld a, 5
+ sub d
+ inc a
+ cp 6
+ jr nz, .okay
+ dec a
+.okay
+ ld [w2DMenuNumRows], a
+ ld a, $c
+ ld [w2DMenuFlags1], a
+ xor a
+ ld [w2DMenuFlags2], a
+ ld a, $20
+ ld [w2DMenuCursorOffsets], a
+ ld a, A_BUTTON | B_BUTTON | D_UP | D_DOWN | D_LEFT | D_RIGHT
+ ld [wMenuJoypadFilter], a
+ ld a, [wTMHMPocketCursor]
+ inc a
+ ld [wMenuCursorY], a
+ ld a, $1
+ ld [wMenuCursorX], a
+ jr TMHM_ShowTMMoveDescription
+
+TMHM_JoypadLoop:
+ call TMHM_DisplayPocketItems
+ call StaticMenuJoypad
+ ld b, a
+ ld a, [wMenuCursorY]
+ dec a
+ ld [wTMHMPocketCursor], a
+ xor a
+ ldh [hBGMapMode], a
+ ld a, [w2DMenuFlags2]
+ bit 7, a
+ jp nz, TMHM_ScrollPocket
+ ld a, b
+ ld [wMenuJoypad], a
+ bit A_BUTTON_F, a
+ jp nz, TMHM_ChooseTMorHM
+ bit B_BUTTON_F, a
+ jp nz, TMHM_ExitPack
+ bit D_RIGHT_F, a
+ jp nz, TMHM_ExitPocket
+ bit D_LEFT_F, a
+ jp nz, TMHM_ExitPocket
+TMHM_ShowTMMoveDescription:
+ call TMHM_CheckHoveringOverCancel
+ jp nc, TMHM_ExitPocket
+ hlcoord 0, 12
+ ld b, 4
+ ld c, SCREEN_WIDTH - 2
+ call Textbox
+ ld a, [wCurItem]
+ cp NUM_TMS + NUM_HMS + 1
+ jr nc, TMHM_JoypadLoop
+ ld [wTempTMHM], a
+ predef GetTMHMMove
+ ld a, [wTempTMHM]
+ ld [wCurSpecies], a
+ hlcoord 1, 14
+ call PrintMoveDesc
+ jp TMHM_JoypadLoop
+
+TMHM_ChooseTMorHM:
+ call TMHM_PlaySFX_ReadText2
+ call CountTMsHMs ; This stores the count to wTempTMHM.
+ ld a, [wMenuCursorY]
+ dec a
+ ld b, a
+ ld a, [wTMHMPocketScrollPosition]
+ add b
+ ld b, a
+ ld a, [wTempTMHM]
+ cp b
+ jr z, _TMHM_ExitPack ; our cursor was hovering over CANCEL
+TMHM_CheckHoveringOverCancel:
+ call TMHM_GetCurrentPocketPosition
+ ld a, [wMenuCursorY]
+ ld b, a
+.loop
+ inc c
+ ld a, c
+ cp NUM_TMS + NUM_HMS + 1
+ jr nc, .okay
+ ld a, [hli]
+ and a
+ jr z, .loop
+ dec b
+ jr nz, .loop
+ ld a, c
+.okay
+ ld [wCurItem], a
+ cp -1
+ ret
+
+TMHM_ExitPack:
+ call TMHM_PlaySFX_ReadText2
+_TMHM_ExitPack:
+ ld a, $2
+ ld [wMenuJoypad], a
+ and a
+ ret
+
+TMHM_ExitPocket:
+ and a
+ ret
+
+TMHM_ScrollPocket:
+ ld a, b
+ bit 7, a
+ jr nz, .skip
+ ld hl, wTMHMPocketScrollPosition
+ ld a, [hl]
+ and a
+ jp z, TMHM_JoypadLoop
+ dec [hl]
+ call TMHM_DisplayPocketItems
+ jp TMHM_ShowTMMoveDescription
+
+.skip
+ call TMHM_GetCurrentPocketPosition
+ ld b, 5
+.loop
+ inc c
+ ld a, c
+ cp NUM_TMS + NUM_HMS + 1
+ jp nc, TMHM_JoypadLoop
+ ld a, [hli]
+ and a
+ jr z, .loop
+ dec b
+ jr nz, .loop
+ ld hl, wTMHMPocketScrollPosition
+ inc [hl]
+ call TMHM_DisplayPocketItems
+ jp TMHM_ShowTMMoveDescription
+
+TMHM_DisplayPocketItems:
+ ld a, [wBattleType]
+ cp BATTLETYPE_TUTORIAL
+ jp z, Tutorial_TMHMPocket
+
+ hlcoord 5, 2
+ lb bc, 10, 15
+ ld a, " "
+ call ClearBox
+ call TMHM_GetCurrentPocketPosition
+ ld d, $5
+.loop2
+ inc c
+ ld a, c
+ cp NUM_TMS + NUM_HMS + 1
+ jr nc, .NotTMHM
+ ld a, [hli]
+ and a
+ jr z, .loop2
+ ld b, a
+ ld a, c
+ ld [wTempTMHM], a
+ push hl
+ push de
+ push bc
+ call TMHMPocket_GetCurrentLineCoord
+ push hl
+ ld a, [wTempTMHM]
+ cp NUM_TMS + 1
+ jr nc, .HM
+ ld de, wTempTMHM
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ jr .okay
+
+.HM:
+ push af
+ sub NUM_TMS
+ ld [wTempTMHM], a
+ ld [hl], "H"
+ inc hl
+ ld de, wTempTMHM
+ lb bc, PRINTNUM_LEFTALIGN | 1, 2
+ call PrintNum
+ pop af
+ ld [wTempTMHM], a
+.okay
+ predef GetTMHMMove
+ ld a, [wNamedObjectIndexBuffer]
+ ld [wPutativeTMHMMove], a
+ call GetMoveName
+ pop hl
+ ld bc, 3
+ add hl, bc
+ push hl
+ call PlaceString
+ pop hl
+ pop bc
+ ld a, c
+ push bc
+ cp NUM_TMS + 1
+ jr nc, .hm2
+ ld bc, SCREEN_WIDTH + 9
+ add hl, bc
+ ld [hl], "×"
+ inc hl
+ ld a, "0" ; why are we doing this?
+ pop bc
+ push bc
+ ld a, b
+ ld [wTempTMHM], a
+ ld de, wTempTMHM
+ lb bc, 1, 2
+ call PrintNum
+.hm2
+ pop bc
+ pop de
+ pop hl
+ dec d
+ jr nz, .loop2
+ jr .done
+
+.NotTMHM:
+ call TMHMPocket_GetCurrentLineCoord
+ inc hl
+ inc hl
+ inc hl
+ push de
+ ld de, TMHM_String_Cancel
+ call PlaceString
+ pop de
+.done
+ ret
+
+TMHMPocket_GetCurrentLineCoord:
+ hlcoord 5, 0
+ ld bc, 2 * SCREEN_WIDTH
+ ld a, 6
+ sub d
+ ld e, a
+ ; AddNTimes
+.loop
+ add hl, bc
+ dec e
+ jr nz, .loop
+ ret
+
+Unreferenced_Function2ca95:
+ pop hl
+ ld bc, 3
+ add hl, bc
+ predef GetTMHMMove
+ ld a, [wTempTMHM]
+ ld [wPutativeTMHMMove], a
+ call GetMoveName
+ push hl
+ call PlaceString
+ pop hl
+ ret
+
+TMHM_String_Cancel:
+ db "CANCEL@"
+
+TMHM_GetCurrentPocketPosition:
+ ld hl, wTMsHMs
+ ld a, [wTMHMPocketScrollPosition]
+ ld b, a
+ inc b
+ ld c, 0
+.loop
+ inc c
+ ld a, [hli]
+ and a
+ jr z, .loop
+ dec b
+ jr nz, .loop
+ dec hl
+ dec c
+ ret
+
+Tutorial_TMHMPocket:
+ hlcoord 9, 3
+ push de
+ ld de, TMHM_String_Cancel
+ call PlaceString
+ pop de
+ ret
+
+TMHM_PlaySFX_ReadText2:
+ push de
+ ld de, SFX_READ_TEXT_2
+ call PlaySFX
+ pop de
+ ret
+
+Unreferenced_Function2cadf:
+ call ConvertCurItemIntoCurTMHM
+ call .CheckHaveRoomForTMHM
+ ld hl, .NoRoomTMHMText
+ jr nc, .print
+ ld hl, .ReceivedTMHMText
+.print
+ jp PrintText
+
+.NoRoomTMHMText:
+ text_far _NoRoomTMHMText
+ text_end
+
+.ReceivedTMHMText:
+ text_far _ReceivedTMHMText
+ text_end
+
+.CheckHaveRoomForTMHM:
+ ld a, [wTempTMHM]
+ dec a
+ ld hl, wTMsHMs
+ ld b, 0
+ ld c, a
+ add hl, bc
+ ld a, [hl]
+ inc a
+ cp NUM_TMS * 2
+ ret nc
+ ld [hl], a
+ ret
+
+ConsumeTM:
+ call ConvertCurItemIntoCurTMHM
+ ld a, [wTempTMHM]
+ dec a
+ ld hl, wTMsHMs
+ ld b, 0
+ ld c, a
+ add hl, bc
+ ld a, [hl]
+ and a
+ ret z
+ dec a
+ ld [hl], a
+ ret nz
+ ld a, [wTMHMPocketScrollPosition]
+ and a
+ ret z
+ dec a
+ ld [wTMHMPocketScrollPosition], a
+ ret
+
+CountTMsHMs:
+ ld b, 0
+ ld c, NUM_TMS + NUM_HMS
+ ld hl, wTMsHMs
+.loop
+ ld a, [hli]
+ and a
+ jr z, .skip
+ inc b
+.skip
+ dec c
+ jr nz, .loop
+ ld a, b
+ ld [wTempTMHM], a
+ ret