summaryrefslogtreecommitdiff
path: root/event/kurt.asm
diff options
context:
space:
mode:
Diffstat (limited to 'event/kurt.asm')
-rw-r--r--event/kurt.asm415
1 files changed, 415 insertions, 0 deletions
diff --git a/event/kurt.asm b/event/kurt.asm
new file mode 100644
index 000000000..d88f5b7f8
--- /dev/null
+++ b/event/kurt.asm
@@ -0,0 +1,415 @@
+Kurt_PrintTextWhichApricorn: ; 88000
+ ld hl, UnknownText_0x88007
+ call PrintText
+ ret
+; 88007
+
+UnknownText_0x88007: ; 0x88007
+ ; Which APRICORN should I use?
+ text_jump UnknownText_0x1bc06b
+ db "@"
+; 0x8800c
+
+Kurt_PrintTextHowMany: ; 8800c
+ ld hl, UnknownText_0x88013
+ call PrintText
+ ret
+; 88013
+
+UnknownText_0x88013: ; 0x88013
+ ; How many should I make?
+ text_jump UnknownText_0x1bc089
+ db "@"
+; 0x88018
+
+Special_SelectApricornForKurt: ; 88018
+ call LoadMenuDataHeader_0x1d75
+ ld c, $1
+ xor a
+ ld [wd0e4], a
+ ld [wKurtApricornQuantity], a
+.loop
+ push bc
+ call Kurt_PrintTextWhichApricorn
+ pop bc
+ ld a, c
+ ld [MenuSelection], a
+ call Kurt_SelectApricorn
+ ld a, c
+ ld [ScriptVar], a
+ and a
+ jr z, .done
+ ld [CurItem], a
+ ld a, [wcfa9]
+ ld c, a
+ push bc
+ call Kurt_PrintTextHowMany
+ call Kurt_SelectQuantity
+ pop bc
+ jr nc, .loop
+ ld a, [wd10c]
+ ld [wKurtApricornQuantity], a
+ call Kurt_GiveUpSelectedQuantityOfSelectedApricorn
+
+.done
+ call Call_ExitMenu
+ ret
+; 88055
+
+Kurt_SelectApricorn: ; 88055
+ callba FindApricornsInBag
+ jr c, .nope
+ ld hl, .MenuDataHeader
+ call CopyMenuDataHeader
+ ld a, [MenuSelection]
+ ld [wPocketCursorBuffer], a
+ xor a
+ ld [hBGMapMode], a
+ call Function352f
+ call UpdateSprites
+ call Function350c
+ ld a, [wcf73]
+ cp $2
+ jr z, .nope
+ ld a, [MenuSelection]
+ cp -1
+ jr nz, .done
+
+.nope
+ xor a
+
+.done
+ ld c, a
+ ret
+; 88086
+
+.MenuDataHeader: ; 0x88086
+ db $40 ; flags
+ db 01, 01 ; start coords
+ db 10, 13 ; end coords
+ dw .MenuData2
+ db 1 ; default option
+; 0x8808e
+
+ db 0
+
+.MenuData2: ; 0x8808f
+ db $10 ; flags
+ db 4, 7
+ db 1
+ dbw 0, Buffer1
+ dbw BANK(.Name), .Name
+ dbw BANK(.Quantity), .Quantity
+ dbw BANK(NULL), NULL
+
+.Name: ; 8809f
+ ld a, [MenuSelection]
+ and a
+ ret z
+ callba PlaceMenuItemName
+ ret
+; 880ab
+
+.Quantity: ; 880ab
+ ld a, [MenuSelection]
+ ld [CurItem], a
+ call Kurt_GetQuantityOfApricorn
+ ret z
+ ld a, [wd10c]
+ ld [wcf75], a
+ callba PlaceMenuItemQuantity
+ ret
+; 880c2
+
+Kurt_SelectQuantity: ; 880c2
+ ld a, [CurItem]
+ ld [MenuSelection], a
+ call Kurt_GetQuantityOfApricorn
+ jr z, .done
+ ld a, [wd10c]
+ ld [wd10d], a
+ ld a, $1
+ ld [wd10c], a
+ ld hl, .MenuDataHeader
+ call LoadMenuDataHeader
+.loop
+ xor a
+ ld [hBGMapMode], a
+ call Function1cbb
+ call UpdateSprites
+ call .PlaceApricornName
+ call PlaceApricornQuantity
+ call Function321c
+ callba Function27a28
+ jr nc, .loop
+
+ push bc
+ call PlayClickSFX
+ pop bc
+ ld a, b
+ cp -1
+ jr z, .done
+ ld a, [wd10c]
+ ld [wd10c], a ; What is the point of this operation?
+ scf
+
+.done
+ call WriteBackup
+ ret
+; 8810d
+
+.MenuDataHeader: ; 0x8810d
+ db $40 ; flags
+ db 09, 06 ; start coords
+ db 12, 19 ; end coords
+
+ db 0, 0, -1, 0 ; XXX
+
+.PlaceApricornName: ; 88116
+ call GetMemTileCoord
+ ld de, $0015
+ add hl, de
+ ld d, h
+ ld e, l
+ callba PlaceMenuItemName
+ ret
+; 88126
+
+PlaceApricornQuantity: ; 88126
+ call GetMemTileCoord
+ ld de, $0032
+ add hl, de
+ ld [hl], "×"
+ inc hl
+ ld de, wd10c
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ jp PrintNum
+; 88139
+
+Kurt_GetQuantityOfApricorn: ; 88139
+ push bc
+ ld hl, NumItems
+ ld a, [CurItem]
+ ld c, a
+ ld b, $0
+.loop
+ inc hl
+ ld a, [hli]
+ cp -1
+ jr z, .done
+ cp c
+ jr nz, .loop
+ ld a, [hl]
+ add b
+ ld b, a
+ jr nc, .loop
+ ld b, -1
+
+.done
+ ld a, b
+ sub 99
+ jr c, .done2
+ ld b, 99
+
+.done2
+ ld a, b
+ ld [wd10c], a
+ and a
+ pop bc
+ ret
+; 88161
+
+Kurt_GiveUpSelectedQuantityOfSelectedApricorn: ; 88161
+; Get the quantity of Apricorns of type [CurItem]
+; in the bag. Compatible with multiple stacks.
+
+; Initialize the search.
+ push de
+ push bc
+ ld hl, NumItems
+ ld a, [CurItem]
+ ld c, a
+ ld e, $0
+ xor a
+ ld [ItemCountBuffer], a
+ ld a, -1
+ ld [MiscBuffer2], a
+
+; Search for [CurItem] in the bag.
+.loop1
+; Increase the total count.
+ ld a, [ItemCountBuffer]
+ inc a
+ ld [ItemCountBuffer], a
+; Get the index of the next item.
+ inc hl
+ ld a, [hli]
+; If we've reached the end of the pocket, break.
+ cp -1
+ jr z, .okay1
+; If we haven't found what we're looking for, continue.
+ cp c
+ jr nz, .loop1
+; Increment the result counter and store the bag index of the match.
+ ld d, $0
+ push hl
+ ld hl, MiscBuffer2
+ add hl, de
+ inc e
+ ld a, [ItemCountBuffer]
+ dec a
+ ld [hli], a
+ ld a, -1
+ ld [hl], a
+ pop hl
+ jr .loop1
+
+.okay1
+; How many stacks have we found?
+ ld a, e
+ and a
+ jr z, .done
+ dec a
+ jr z, .OnlyOne
+ ld hl, MiscBuffer2
+
+.loop2
+ ld a, [hl]
+ ld c, a
+ push hl
+.loop3
+ inc hl
+ ld a, [hl]
+ cp -1
+ jr z, .okay2
+ ld b, a
+ ld a, c
+ call Kurt_GetAddressOfApricornQuantity
+ ld e, a
+ ld a, b
+ call Kurt_GetAddressOfApricornQuantity
+ sub e
+ jr z, .equal
+ jr c, .less
+ jr .loop3
+
+.equal
+ ld a, c
+ sub b
+ jr nc, .loop3
+
+.less
+ ld a, c
+ ld c, b
+ ld [hl], a
+ ld a, c
+ pop hl
+ ld [hl], a
+ push hl
+ jr .loop3
+
+.okay2
+ pop hl
+ inc hl
+ ld a, [hl]
+ cp -1
+ jr nz, .loop2
+
+.OnlyOne
+ ld hl, MiscBuffer2
+.loop4
+ ld a, [hl]
+ cp -1
+ jr z, .done
+ push hl
+ ld [ItemCountBuffer], a
+ call Kurt_GetRidOfItem
+ pop hl
+ ld a, [wd10c]
+ and a
+ jr z, .done
+ push hl
+ ld a, [hli]
+ ld c, a
+.loop5
+ ld a, [hli]
+ cp -1
+ jr z, .okay3
+ cp c
+ jr c, .loop5
+ dec a
+ dec hl
+ ld [hli], a
+ jr .loop5
+
+.okay3
+ pop hl
+ inc hl
+ jr .loop4
+
+.done
+ ld a, [wd10c]
+ and a
+ pop bc
+ pop de
+ ret
+; 88201
+
+Kurt_GetAddressOfApricornQuantity: ; 88201
+ push hl
+ push bc
+ ld hl, NumItems
+ inc hl
+ ld c, a
+ ld b, $0
+rept 2
+ add hl, bc
+endr
+ inc hl
+ ld a, [hl]
+ pop bc
+ pop hl
+ ret
+; 88211
+
+Kurt_GetRidOfItem: ; 88211
+ push bc
+ ld hl, NumItems
+ ld a, [ItemCountBuffer]
+ ld c, a
+ ld b, $0
+ inc hl
+rept 2
+ add hl, bc
+endr
+ ld a, [CurItem]
+ ld c, a
+ ld a, [hli]
+ cp -1
+ jr z, .done
+ cp c
+ jr nz, .done
+ ld a, [wd10c]
+ ld c, a
+ ld a, [hl]
+ sub c
+ ld b, c
+ jr nc, .okay
+ add c
+ ld b, a
+
+.okay
+ push bc
+ ld hl, NumItems
+ ld a, b
+ ld [wd10c], a
+ call TossItem
+ pop bc
+ ld a, c
+ sub b
+
+.done
+ ld [wd10c], a
+ pop bc
+ ret
+; 88248