summaryrefslogtreecommitdiff
path: root/engine/events
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-05-23 00:51:50 -0400
committerentrpntr <entrpntr@gmail.com>2020-05-23 00:51:50 -0400
commit3a50abc46a294ee670beddff327e7f6cf21bb61c (patch)
tree9d48232303d1419f5d31c0118ecdfc66d6050fec /engine/events
parentbfddbf6b11ca4a6220b5b03d66ed1208931a59de (diff)
Add engine/events/mom_phone.asm and engine/link/mystery_gift_3.asm.
Diffstat (limited to 'engine/events')
-rw-r--r--engine/events/mom_phone.asm231
1 files changed, 231 insertions, 0 deletions
diff --git a/engine/events/mom_phone.asm b/engine/events/mom_phone.asm
new file mode 100644
index 00000000..cbd91327
--- /dev/null
+++ b/engine/events/mom_phone.asm
@@ -0,0 +1,231 @@
+NUM_MOM_ITEMS_1 EQUS "((MomItems_1.End - MomItems_1) / 8)"
+NUM_MOM_ITEMS_2 EQUS "((MomItems_2.End - MomItems_2) / 8)"
+
+ const_def 1
+ const MOM_ITEM
+ const MOM_DOLL
+
+MomTriesToBuySomething::
+ ld a, [wMapReentryScriptQueueFlag]
+ and a
+ ret nz
+ call GetMapPhoneService
+ and a
+ ret nz
+ xor a
+ ld [wWhichMomItemSet], a
+ call CheckBalance_MomItem2
+ ret nc
+ call Mom_GiveItemOrDoll
+ ret nc
+ ld b, BANK(.Script)
+ ld de, .Script
+ farcall LoadScriptBDE
+ scf
+ ret
+
+.Script:
+ callasm .ASMFunction
+ farsjump Script_ReceivePhoneCall
+
+.ASMFunction:
+ call MomBuysItem_DeductFunds
+ call Mom_GetScriptPointer
+ ld a, [wWhichMomItemSet]
+ and a
+ jr nz, .ok
+ ld hl, wWhichMomItem
+ inc [hl]
+.ok
+ ld a, PHONE_MOM
+ ld [wCurCaller], a
+ ld bc, wCallerContact
+ ld hl, PHONE_CONTACT_TRAINER_CLASS
+ add hl, bc
+ ld [hl], TRAINER_NONE
+ inc hl
+ ld [hl], PHONE_MOM
+ ld hl, PHONE_CONTACT_SCRIPT2_BANK
+ add hl, bc
+ ld a, BANK(Mom_GetScriptPointer)
+ ld [hli], a
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hl], a
+ ret
+
+CheckBalance_MomItem2:
+ ld a, [wWhichMomItem]
+ cp NUM_MOM_ITEMS_2
+ jr nc, .nope
+ call GetItemFromMom
+ ld a, [hli]
+ ldh [hMoneyTemp], a
+ ld a, [hli]
+ ldh [hMoneyTemp + 1], a
+ ld a, [hli]
+ ldh [hMoneyTemp + 2], a
+ ld de, wMomsMoney
+ ld bc, hMoneyTemp
+ farcall CompareMoney
+ jr nc, .have_enough_money
+
+.nope
+ jr .check_have_2300
+
+.have_enough_money
+ scf
+ ret
+
+.check_have_2300
+ ld hl, hMoneyTemp
+ ld [hl], HIGH(MOM_MONEY >> 8)
+ inc hl
+ ld [hl], HIGH(MOM_MONEY) ; mid
+ inc hl
+ ld [hl], LOW(MOM_MONEY)
+.loop
+ ld de, wMomItemTriggerBalance
+ ld bc, wMomsMoney
+ farcall CompareMoney
+ jr z, .exact
+ jr nc, .less_than
+ call .AddMoney
+ jr .loop
+
+.less_than
+ xor a
+ ret
+
+.exact
+ call .AddMoney
+ ld a, NUM_MOM_ITEMS_1
+ call RandomRange
+ inc a
+ ld [wWhichMomItemSet], a
+ scf
+ ret
+
+.AddMoney:
+ ld de, wMomItemTriggerBalance
+ ld bc, hMoneyTemp
+ farcall AddMoney
+ ret
+
+MomBuysItem_DeductFunds:
+ call GetItemFromMom
+ ld de, 3 ; cost
+ add hl, de
+ ld a, [hli]
+ ldh [hMoneyTemp], a
+ ld a, [hli]
+ ldh [hMoneyTemp + 1], a
+ ld a, [hli]
+ ldh [hMoneyTemp + 2], a
+ ld de, wMomsMoney
+ ld bc, hMoneyTemp
+ farcall TakeMoney
+ ret
+
+Mom_GiveItemOrDoll:
+ call GetItemFromMom
+ ld de, 6 ; item type
+ add hl, de
+ ld a, [hli]
+ cp MOM_ITEM
+ jr z, .not_doll
+ ld a, [hl]
+ ld c, a
+ ld b, 1
+ farcall DecorationFlagAction_c
+ scf
+ ret
+
+.not_doll
+ ld a, [hl]
+ ld [wCurItem], a
+ ld a, 1
+ ld [wItemQuantityChangeBuffer], a
+ ld hl, wNumPCItems
+ call ReceiveItem
+ ret
+
+Mom_GetScriptPointer:
+ call GetItemFromMom
+ ld de, 6 ; item type
+ add hl, de
+ ld a, [hli]
+ ld de, .ItemScript
+ cp MOM_ITEM
+ ret z
+ ld de, .DollScript
+ ret
+
+.ItemScript:
+ writetext MomHiHowAreYouText
+ writetext MomFoundAnItemText
+ writetext MomBoughtWithYourMoneyText
+ writetext MomItsInPCText
+ end
+
+.DollScript:
+ writetext MomHiHowAreYouText
+ writetext MomFoundADollText
+ writetext MomBoughtWithYourMoneyText
+ writetext MomItsInYourRoomText
+ end
+
+GetItemFromMom:
+ ld a, [wWhichMomItemSet]
+ and a
+ jr z, .zero
+ dec a
+ ld de, MomItems_1
+ jr .GetFromList1
+
+.zero
+ ld a, [wWhichMomItem]
+ cp NUM_MOM_ITEMS_2
+ jr c, .ok
+ xor a
+
+.ok
+ ld de, MomItems_2
+
+.GetFromList1:
+ 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"
+
+ db 0, 0, 0 ; unused
+
+MomHiHowAreYouText:
+ text_far _MomHiHowAreYouText
+ text_end
+
+MomFoundAnItemText:
+ text_far _MomFoundAnItemText
+ text_end
+
+MomBoughtWithYourMoneyText:
+ text_far _MomBoughtWithYourMoneyText
+ text_end
+
+MomItsInPCText:
+ text_far _MomItsInPCText
+ text_end
+
+MomFoundADollText:
+ text_far _MomFoundADollText
+ text_end
+
+MomItsInYourRoomText:
+ text_far _MomItsInYourRoomText
+ text_end