pokecrystal-board/engine/items/buy_sell_toss.asm
2023-09-02 23:17:20 +02:00

222 lines
3.3 KiB
NASM
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

SelectQuantityToToss:
ld hl, TossItem_MenuHeader
call LoadMenuHeader
call Toss_Sell_Loop
ret
SelectQuantityToBuy:
farcall GetItemPrice
RooftopSale_SelectQuantityToBuy:
ld a, d
ld [wBuySellItemPrice + 0], a
ld a, e
ld [wBuySellItemPrice + 1], a
ld hl, BuyItem_MenuHeader
call LoadMenuHeader
call Toss_Sell_Loop
ret
SelectQuantityToSell:
farcall GetItemPrice
ld a, d
ld [wBuySellItemPrice + 0], a
ld a, e
ld [wBuySellItemPrice + 1], a
ld hl, SellItem_MenuHeader
call LoadMenuHeader
call Toss_Sell_Loop
ret
Toss_Sell_Loop:
ld a, 1
ld [wItemQuantityChange], a
.loop
call BuySellToss_UpdateQuantityDisplay ; update display
call BuySellToss_InterpretJoypad ; joy action
jr nc, .loop
cp -1
jr nz, .nope ; pressed B
scf
ret
.nope
and a
ret
BuySellToss_InterpretJoypad:
call JoyTextDelay_ForcehJoyDown ; get joypad
bit B_BUTTON_F, c
jr nz, .b
bit A_BUTTON_F, c
jr nz, .a
bit D_DOWN_F, c
jr nz, .down
bit D_UP_F, c
jr nz, .up
bit D_LEFT_F, c
jr nz, .left
bit D_RIGHT_F, c
jr nz, .right
and a
ret
.b
ld a, -1
scf
ret
.a
ld a, 0
scf
ret
.down
ld hl, wItemQuantityChange
dec [hl]
jr nz, .finish_down
ld a, [wItemQuantity]
ld [hl], a
.finish_down
and a
ret
.up
ld hl, wItemQuantityChange
inc [hl]
ld a, [wItemQuantity]
cp [hl]
jr nc, .finish_up
ld [hl], 1
.finish_up
and a
ret
.left
ld a, [wItemQuantityChange]
sub 10
jr c, .load_1
jr z, .load_1
jr .finish_left
.load_1
ld a, 1
.finish_left
ld [wItemQuantityChange], a
and a
ret
.right
ld a, [wItemQuantityChange]
add 10
ld b, a
ld a, [wItemQuantity]
cp b
jr nc, .finish_right
ld b, a
.finish_right
ld a, b
ld [wItemQuantityChange], a
and a
ret
BuySellToss_UpdateQuantityDisplay:
call MenuBox
call MenuBoxCoord2Tile
ld de, SCREEN_WIDTH + 1
add hl, de
ld [hl], "×"
inc hl
ld de, wItemQuantityChange
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
call PrintNum
ld a, [wMenuDataPointer]
ld e, a
ld a, [wMenuDataPointer + 1]
ld d, a
ld a, [wMenuDataBank]
call FarCall_de
ret
NoPriceToDisplay:
; Does nothing.
ret
DisplayPurchasePrice:
call BuySell_MultiplyPrice
call BuySell_DisplaySubtotal
ret
DisplaySellingPrice:
call BuySell_MultiplyPrice
call Sell_HalvePrice
call BuySell_DisplaySubtotal
ret
BuySell_MultiplyPrice:
xor a
ldh [hMultiplicand + 0], a
ld a, [wBuySellItemPrice + 0]
ldh [hMultiplicand + 1], a
ld a, [wBuySellItemPrice + 1]
ldh [hMultiplicand + 2], a
ld a, [wItemQuantityChange]
ldh [hMultiplier], a
push hl
call Multiply
pop hl
ret
Sell_HalvePrice:
push hl
ld hl, hProduct + 1
ld a, [hl]
srl a
ld [hli], a
ld a, [hl]
rra
ld [hli], a
ld a, [hl]
rra
ld [hl], a
pop hl
ret
BuySell_DisplaySubtotal:
push hl
ld hl, hCoinsTemp
ldh a, [hProduct + 1]
ld [hli], a
ldh a, [hProduct + 2]
ld [hli], a
ldh a, [hProduct + 3]
ld [hl], a
pop hl
inc hl
ld de, hCoinsTemp
lb bc, PRINTNUM_COINS | 3, 6
call PrintNum
call WaitBGMap
ret
TossItem_MenuHeader:
db MENU_BACKUP_TILES ; flags
menu_coords 15, 9, SCREEN_WIDTH - 1, TEXTBOX_Y - 1
dw NoPriceToDisplay
db 0 ; default option
BuyItem_MenuHeader:
db MENU_BACKUP_TILES ; flags
menu_coords 7, 15, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw DisplayPurchasePrice
db -1 ; default option
SellItem_MenuHeader:
db MENU_BACKUP_TILES ; flags
menu_coords 7, 15, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
dw DisplaySellingPrice
db 0 ; default option