pokered/scripts/CeladonMartRoof.asm

256 lines
5.6 KiB
NASM

CeladonMartRoof_Script:
jp EnableAutoTextBoxDrawing
CeladonMartRoofScript_GetDrinksInBag:
; construct a list of all drinks in the player's bag
xor a
ld [wFilteredBagItemsCount], a
ld de, wFilteredBagItems
ld hl, CeladonMartRoofDrinkList
.loop
ld a, [hli]
and a
jr z, .done
push hl
push de
ld [wd11e], a
ld b, a
predef GetQuantityOfItemInBag
pop de
pop hl
ld a, b
and a
jr z, .loop ; if the item isn't in the bag
ld a, [wd11e]
ld [de], a
inc de
push hl
ld hl, wFilteredBagItemsCount
inc [hl]
pop hl
jr .loop
.done
ld a, $ff
ld [de], a
ret
CeladonMartRoofDrinkList:
db FRESH_WATER
db SODA_POP
db LEMONADE
db 0 ; end
CeladonMartRoofScript_GiveDrinkToGirl:
ld hl, wStatusFlags5
set BIT_NO_TEXT_DELAY, [hl]
ld hl, CeladonMartRoofLittleGirlGiveHerWhichDrinkText
call PrintText
xor a
ld [wCurrentMenuItem], a
ld a, A_BUTTON | B_BUTTON
ld [wMenuWatchedKeys], a
ld a, [wFilteredBagItemsCount]
dec a
ld [wMaxMenuItem], a
ld a, 2
ld [wTopMenuItemY], a
ld a, 1
ld [wTopMenuItemX], a
ld a, [wFilteredBagItemsCount]
dec a
ld bc, 2
ld hl, 3
call AddNTimes
dec l
ld b, l
ld c, 12
hlcoord 0, 0
call TextBoxBorder
call UpdateSprites
call CeladonMartRoofScript_PrintDrinksInBag
ld hl, wStatusFlags5
res BIT_NO_TEXT_DELAY, [hl]
call HandleMenuInput
bit BIT_B_BUTTON, a
ret nz
ld hl, wFilteredBagItems
ld a, [wCurrentMenuItem]
ld d, 0
ld e, a
add hl, de
ld a, [hl]
ldh [hItemToRemoveID], a
cp FRESH_WATER
jr z, .gaveFreshWater
cp SODA_POP
jr z, .gaveSodaPop
; gave Lemonade
CheckEvent EVENT_GOT_TM49
jr nz, .alreadyGaveDrink
ld hl, CeladonMartRoofLittleGirlYayLemonadeText
call PrintText
call RemoveItemByIDBank12
lb bc, TM_TRI_ATTACK, 1
call GiveItem
jr nc, .bagFull
ld hl, CeladonMartRoofLittleGirlReceivedTM49Text
call PrintText
SetEvent EVENT_GOT_TM49
ret
.gaveSodaPop
CheckEvent EVENT_GOT_TM48
jr nz, .alreadyGaveDrink
ld hl, CeladonMartRoofLittleGirlYaySodaPopText
call PrintText
call RemoveItemByIDBank12
lb bc, TM_ROCK_SLIDE, 1
call GiveItem
jr nc, .bagFull
ld hl, CeladonMartRoofLittleGirlReceivedTM48Text
call PrintText
SetEvent EVENT_GOT_TM48
ret
.gaveFreshWater
CheckEvent EVENT_GOT_TM13
jr nz, .alreadyGaveDrink
ld hl, CeladonMartRoofLittleGirlYayFreshWaterText
call PrintText
call RemoveItemByIDBank12
lb bc, TM_ICE_BEAM, 1
call GiveItem
jr nc, .bagFull
ld hl, CeladonMartRoofLittleGirlReceivedTM13Text
call PrintText
SetEvent EVENT_GOT_TM13
ret
.bagFull
ld hl, CeladonMartRoofLittleGirlNoRoomText
jp PrintText
.alreadyGaveDrink
ld hl, CeladonMartRoofLittleGirlImNotThirstyText
jp PrintText
RemoveItemByIDBank12:
farjp RemoveItemByID
CeladonMartRoofLittleGirlGiveHerWhichDrinkText:
text_far _CeladonMartRoofLittleGirlGiveHerWhichDrinkText
text_end
CeladonMartRoofLittleGirlYayFreshWaterText:
text_far _CeladonMartRoofLittleGirlYayFreshWaterText
text_waitbutton
text_end
CeladonMartRoofLittleGirlReceivedTM13Text:
text_far _CeladonMartRoofLittleGirlReceivedTM13Text
sound_get_item_1
text_far _CeladonMartRoofLittleGirlTM13ExplanationText
text_waitbutton
text_end
CeladonMartRoofLittleGirlYaySodaPopText:
text_far _CeladonMartRoofLittleGirlYaySodaPopText
text_waitbutton
text_end
CeladonMartRoofLittleGirlReceivedTM48Text:
text_far _CeladonMartRoofLittleGirlReceivedTM48Text
sound_get_item_1
text_far _CeladonMartRoofLittleGirlTM48ExplanationText
text_waitbutton
text_end
CeladonMartRoofLittleGirlYayLemonadeText:
text_far _CeladonMartRoofLittleGirlYayLemonadeText
text_waitbutton
text_end
CeladonMartRoofLittleGirlReceivedTM49Text:
text_far _CeladonMartRoofLittleGirlReceivedTM49Text
sound_get_item_1
text_far _CeladonMartRoofLittleGirlTM49ExplanationText
text_waitbutton
text_end
CeladonMartRoofLittleGirlNoRoomText:
text_far _CeladonMartRoofLittleGirlNoRoomText
text_waitbutton
text_end
CeladonMartRoofLittleGirlImNotThirstyText:
text_far _CeladonMartRoofLittleGirlImNotThirstyText
text_waitbutton
text_end
CeladonMartRoofScript_PrintDrinksInBag:
ld hl, wFilteredBagItems
xor a
ldh [hItemCounter], a
.loop
ld a, [hli]
cp $ff
ret z
push hl
ld [wd11e], a
call GetItemName
hlcoord 2, 2
ldh a, [hItemCounter]
ld bc, SCREEN_WIDTH * 2
call AddNTimes
ld de, wNameBuffer
call PlaceString
ld hl, hItemCounter
inc [hl]
pop hl
jr .loop
CeladonMartRoof_TextPointers:
def_text_pointers
dw_const CeladonMartRoofSuperNerdText, TEXT_CELADONMARTROOF_SUPER_NERD
dw_const CeladonMartRoofLittleGirlText, TEXT_CELADONMARTROOF_LITTLE_GIRL
dw_const CeladonMartRoofVendingMachineText, TEXT_CELADONMARTROOF_VENDING_MACHINE1
dw_const CeladonMartRoofVendingMachineText, TEXT_CELADONMARTROOF_VENDING_MACHINE2
dw_const CeladonMartRoofVendingMachineText, TEXT_CELADONMARTROOF_VENDING_MACHINE3
dw_const CeladonMartRoofCurrentFloorSignText, TEXT_CELADONMARTROOF_CURRENT_FLOOR_SIGN
CeladonMartRoofSuperNerdText:
text_far _CeladonMartRoofSuperNerdText
text_end
CeladonMartRoofLittleGirlText:
text_asm
call CeladonMartRoofScript_GetDrinksInBag
ld a, [wFilteredBagItemsCount]
and a
jr z, .noDrinksInBag
ld a, 1
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld hl, .GiveHerADrinkText
call PrintText
call YesNoChoice
ld a, [wCurrentMenuItem]
and a
jr nz, .done
call CeladonMartRoofScript_GiveDrinkToGirl
jr .done
.noDrinksInBag
ld hl, .ImThirstyText
call PrintText
.done
jp TextScriptEnd
.ImThirstyText:
text_far _CeladonMartRoofLittleGirlImThirstyText
text_end
.GiveHerADrinkText:
text_far _CeladonMartRoofLittleGirlGiveHerADrinkText
text_end
CeladonMartRoofVendingMachineText:
script_vending_machine
CeladonMartRoofCurrentFloorSignText:
text_far _CeladonMartRoofCurrentFloorSignText
text_end