pokecrystal-board/engine/events/mom_phone.asm

240 lines
3.6 KiB
NASM
Raw Normal View History

DEF NUM_MOM_ITEMS_1 EQUS "((MomItems_1.End - MomItems_1) / 8)"
DEF NUM_MOM_ITEMS_2 EQUS "((MomItems_2.End - MomItems_2) / 8)"
const_def 1
const MOM_ITEM
const MOM_DOLL
2018-06-24 07:09:41 -07:00
MomTriesToBuySomething::
2015-11-19 15:07:20 -08:00
ld a, [wMapReentryScriptQueueFlag]
and a
ret nz
call GetMapPhoneService
2015-11-19 15:07:20 -08:00
and a
ret nz
xor a
ld [wWhichMomItemSet], a
2015-11-19 15:07:20 -08:00
call CheckBalance_MomItem2
ret nc
2015-12-18 17:07:09 -08:00
call Mom_GiveItemOrDoll
2015-11-19 15:07:20 -08:00
ret nc
2015-12-18 17:07:09 -08:00
ld b, BANK(.Script)
ld de, .Script
2023-09-15 11:04:16 -07:00
farcall LoadMemScript
2015-11-19 15:07:20 -08:00
scf
ret
.Script:
2015-12-18 17:07:09 -08:00
callasm .ASMFunction
farsjump Script_ReceivePhoneCall
2015-11-19 15:07:20 -08:00
2018-06-24 07:09:41 -07:00
.ASMFunction:
2015-11-19 15:07:20 -08:00
call MomBuysItem_DeductFunds
2015-12-18 17:07:09 -08:00
call Mom_GetScriptPointer
ld a, [wWhichMomItemSet]
2015-11-19 15:07:20 -08:00
and a
jr nz, .ok
ld hl, wWhichMomItem
2015-11-19 15:07:20 -08:00
inc [hl]
.ok
2015-12-18 17:07:09 -08:00
ld a, PHONE_MOM
2018-09-09 12:09:51 -07:00
ld [wCurCaller], a
ld bc, wCallerContact
ld hl, PHONE_CONTACT_TRAINER_CLASS
2015-11-19 15:07:20 -08:00
add hl, bc
ld [hl], TRAINER_NONE
2015-11-19 15:07:20 -08:00
inc hl
ld [hl], PHONE_MOM
ld hl, PHONE_CONTACT_SCRIPT2_BANK
2015-11-19 15:07:20 -08:00
add hl, bc
2015-12-18 17:07:09 -08:00
ld a, BANK(Mom_GetScriptPointer)
2015-11-19 15:07:20 -08:00
ld [hli], a
ld a, e
ld [hli], a
ld a, d
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
CheckBalance_MomItem2:
ld a, [wWhichMomItem]
cp NUM_MOM_ITEMS_2
2015-11-19 15:07:20 -08:00
jr nc, .nope
call GetItemFromMom
ld a, [hli]
ldh [hCoinsTemp], a
2015-11-19 15:07:20 -08:00
ld a, [hli]
ldh [hCoinsTemp + 1], a
2015-11-19 15:07:20 -08:00
ld a, [hli]
ldh [hCoinsTemp + 2], a
ld de, wMomsCoins
ld bc, hCoinsTemp
farcall CompareCoins
jr nc, .have_enough_coins
2015-11-19 15:07:20 -08:00
.nope
jr .check_have_2300
.have_enough_coins
2015-11-19 15:07:20 -08:00
scf
ret
.check_have_2300
ld hl, hCoinsTemp
ld [hl], HIGH(MOM_COINS >> 8)
2015-11-19 15:07:20 -08:00
inc hl
ld [hl], HIGH(MOM_COINS) ; mid
2015-11-19 15:07:20 -08:00
inc hl
ld [hl], LOW(MOM_COINS)
2015-11-19 15:07:20 -08:00
.loop
2018-01-23 14:39:09 -08:00
ld de, wMomItemTriggerBalance
ld bc, wMomsCoins
farcall CompareCoins
2015-11-19 15:07:20 -08:00
jr z, .exact
jr nc, .less_than
call .AddCoins
2015-11-19 15:07:20 -08:00
jr .loop
.less_than
xor a
ret
.exact
call .AddCoins
ld a, NUM_MOM_ITEMS_1
2015-11-19 15:07:20 -08:00
call RandomRange
inc a
ld [wWhichMomItemSet], a
2015-11-19 15:07:20 -08:00
scf
ret
.AddCoins:
2018-01-23 14:39:09 -08:00
ld de, wMomItemTriggerBalance
ld bc, hCoinsTemp
farcall AddCoins
2015-11-19 15:07:20 -08:00
ret
2018-06-24 07:09:41 -07:00
MomBuysItem_DeductFunds:
2015-11-19 15:07:20 -08:00
call GetItemFromMom
2015-12-18 17:07:09 -08:00
ld de, 3 ; cost
2015-11-19 15:07:20 -08:00
add hl, de
ld a, [hli]
ldh [hCoinsTemp], a
2015-11-19 15:07:20 -08:00
ld a, [hli]
ldh [hCoinsTemp + 1], a
2015-11-19 15:07:20 -08:00
ld a, [hli]
ldh [hCoinsTemp + 2], a
ld de, wMomsCoins
ld bc, hCoinsTemp
farcall TakeCoins
2015-11-19 15:07:20 -08:00
ret
2018-06-24 07:09:41 -07:00
Mom_GiveItemOrDoll:
2015-11-19 15:07:20 -08:00
call GetItemFromMom
2015-12-18 17:07:09 -08:00
ld de, 6 ; item type
2015-11-19 15:07:20 -08:00
add hl, de
ld a, [hli]
2015-12-18 17:07:09 -08:00
cp MOM_ITEM
2015-11-19 15:07:20 -08:00
jr z, .not_doll
ld a, [hl]
ld c, a
ld b, 1
2017-12-24 09:47:30 -08:00
farcall DecorationFlagAction_c
2015-11-19 15:07:20 -08:00
scf
ret
.not_doll
ld a, [hl]
2018-01-23 14:39:09 -08:00
ld [wCurItem], a
2015-12-18 17:07:09 -08:00
ld a, 1
ld [wItemQuantityChange], a
2019-03-18 08:43:58 -07:00
ld hl, wNumPCItems
2015-11-19 15:07:20 -08:00
call ReceiveItem
ret
2018-06-24 07:09:41 -07:00
Mom_GetScriptPointer:
2015-11-19 15:07:20 -08:00
call GetItemFromMom
2015-12-18 17:07:09 -08:00
ld de, 6 ; item type
2015-11-19 15:07:20 -08:00
add hl, de
ld a, [hli]
2015-12-18 17:07:09 -08:00
ld de, .ItemScript
cp MOM_ITEM
2015-11-19 15:07:20 -08:00
ret z
2015-12-18 17:07:09 -08:00
ld de, .DollScript
2015-11-19 15:07:20 -08:00
ret
.ItemScript:
writetext MomHiHowAreYouText
writetext MomFoundAnItemText
writetext MomBoughtWithYourCoinsText
writetext MomItsInPCText
2015-11-19 15:07:20 -08:00
end
.DollScript:
writetext MomHiHowAreYouText
writetext MomFoundADollText
writetext MomBoughtWithYourCoinsText
writetext MomItsInYourRoomText
2015-11-19 15:07:20 -08:00
end
2018-06-24 07:09:41 -07:00
GetItemFromMom:
ld a, [wWhichMomItemSet]
2015-11-19 15:07:20 -08:00
and a
jr z, .zero
dec a
ld de, MomItems_1
2015-12-18 17:07:09 -08:00
jr .GetFromList1
2015-11-19 15:07:20 -08:00
.zero
ld a, [wWhichMomItem]
cp NUM_MOM_ITEMS_2
2015-11-19 15:07:20 -08:00
jr c, .ok
xor a
.ok
ld de, MomItems_2
.GetFromList1:
2015-11-19 15:07:20 -08:00
ld l, a
ld h, 0
rept 3 ; multiply hl by 8
add hl, hl
endr
add hl, de
ret
INCLUDE "data/items/mom_phone.asm"
2015-11-19 15:07:20 -08:00
MomHiHowAreYouText:
text_far _MomHiHowAreYouText
text_end
2015-11-19 15:07:20 -08:00
MomFoundAnItemText:
text_far _MomFoundAnItemText
text_end
2015-11-19 15:07:20 -08:00
MomBoughtWithYourCoinsText:
text_far _MomBoughtWithYourCoinsText
text_end
2015-11-19 15:07:20 -08:00
MomItsInPCText:
text_far _MomItsInPCText
text_end
2015-11-19 15:07:20 -08:00
MomFoundADollText:
text_far _MomFoundADollText
text_end
2015-11-19 15:07:20 -08:00
MomItsInYourRoomText:
text_far _MomItsInYourRoomText
text_end
2015-11-19 15:07:20 -08:00
DummyPredef3A_DummyData: ; unreferenced
db 0
2015-11-19 15:07:20 -08:00
2018-06-24 07:09:41 -07:00
DummyPredef3A:
2015-11-19 15:07:20 -08:00
ret
DummyPredef3A_DummyFunction: ; unreferenced
ret