summaryrefslogtreecommitdiff
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
parentbfddbf6b11ca4a6220b5b03d66ed1208931a59de (diff)
Add engine/events/mom_phone.asm and engine/link/mystery_gift_3.asm.
-rw-r--r--data/items/mom_phone.asm27
-rw-r--r--engine/events/mom_phone.asm231
-rw-r--r--engine/link/mystery_gift_3.asm190
-rw-r--r--gfx/mystery_gift/mystery_gift.2bppbin0 -> 512 bytes
-rw-r--r--main.asm11
-rw-r--r--wram.asm2
6 files changed, 454 insertions, 7 deletions
diff --git a/data/items/mom_phone.asm b/data/items/mom_phone.asm
new file mode 100644
index 00000000..407a9a01
--- /dev/null
+++ b/data/items/mom_phone.asm
@@ -0,0 +1,27 @@
+momitem: MACRO
+; money to trigger, cost, kind, item
+ dt \1
+ dt \2
+ db \3, \4
+ENDM
+
+MomItems_1:
+ momitem 0, 600, MOM_ITEM, SUPER_POTION
+ momitem 0, 90, MOM_ITEM, ANTIDOTE
+ momitem 0, 180, MOM_ITEM, POKE_BALL
+ momitem 0, 450, MOM_ITEM, ESCAPE_ROPE
+ momitem 0, 500, MOM_ITEM, GREAT_BALL
+.End
+
+MomItems_2:
+ momitem 900, 600, MOM_ITEM, SUPER_POTION
+ momitem 4000, 270, MOM_ITEM, REPEL
+ momitem 7000, 600, MOM_ITEM, SUPER_POTION
+ momitem 10000, 1800, MOM_DOLL, DECO_CHARMANDER_DOLL
+ momitem 15000, 3000, MOM_ITEM, MOON_STONE
+ momitem 19000, 600, MOM_ITEM, SUPER_POTION
+ momitem 30000, 4800, MOM_DOLL, DECO_CLEFAIRY_DOLL
+ momitem 40000, 900, MOM_ITEM, HYPER_POTION
+ momitem 50000, 8000, MOM_DOLL, DECO_PIKACHU_DOLL
+ momitem 100000, 22800, MOM_DOLL, DECO_BIG_SNORLAX_DOLL
+.End
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
diff --git a/engine/link/mystery_gift_3.asm b/engine/link/mystery_gift_3.asm
new file mode 100644
index 00000000..b7053679
--- /dev/null
+++ b/engine/link/mystery_gift_3.asm
@@ -0,0 +1,190 @@
+StagePartyDataForMysteryGift:
+; You will be sending this data to your mystery gift partner.
+; Structure is the same as a trainer with species and moves
+; defined.
+ ld a, BANK(sPokemonData)
+ call OpenSRAM
+ ld de, wMysteryGiftStaging
+ ld bc, sPokemonData + wPartyMons - wPokemonData
+ ld hl, sPokemonData + wPartySpecies - wPokemonData
+.loop
+ ld a, [hli]
+ cp -1
+ jr z, .party_end
+ cp EGG
+ jr z, .next
+ push hl
+ ; copy level
+ ld hl, MON_LEVEL
+ add hl, bc
+ ld a, [hl]
+ ld [de], a
+ inc de
+ ; copy species
+ ld hl, MON_SPECIES
+ add hl, bc
+ ld a, [hl]
+ ld [de], a
+ inc de
+ ; copy moves
+ ld hl, MON_MOVES
+ add hl, bc
+ push bc
+ ld bc, NUM_MOVES
+ call CopyBytes
+ pop bc
+ pop hl
+.next
+ push hl
+ ld hl, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ ld b, h
+ ld c, l
+ pop hl
+ jr .loop
+.party_end
+ ld a, -1
+ ld [de], a
+ ld a, $26
+ ld [wc900], a
+ jp CloseSRAM
+
+InitMysteryGiftLayout:
+ call ClearBGPalettes
+ call DisableLCD
+ ld hl, MysteryGiftGFX
+ ld de, vTiles2 tile $00
+ ld a, BANK(MysteryGiftGFX)
+ ld bc, $20 tiles
+ call FarCopyBytes
+ farcall Function1704d
+ farcall Function1706b
+ ld hl, vTiles2 tile $3d
+ ld a, $ff
+ ld bc, 1 tiles
+ call ByteFill
+ hlcoord 0, 0
+ ld a, $3d
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ call ByteFill
+ hlcoord 3, 7
+ lb bc, 9, 15
+ call ClearBox
+ hlcoord 0, 0
+ ld a, $1e
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 0, 1
+ ld a, $33
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 3, 1
+ ld a, 0
+ call .Load15GFX
+ hlcoord 3, 2
+ ld a, $f
+ call .Load15GFX
+ hlcoord 8, 0
+ ld a, $20
+ call .Load4GFX
+ hlcoord 9, 3
+ ld a, $24
+ call .Load3GFX
+ hlcoord 9, 4
+ ld [hl], $27
+ hlcoord 1, 2
+ ld a, $2e
+ call .Load15Column
+ hlcoord 18, 5
+ ld a, $2a
+ call .Load11Column
+ hlcoord 2, 5
+ ld a, $28
+ call .Load16Row
+ hlcoord 2, 16
+ ld a, $2c
+ call .Load16Row
+ hlcoord 2, 5
+ ld a, $35
+ call .Load4GFX
+ hlcoord 18, 5
+ ld [hl], $29
+ hlcoord 18, 16
+ ld [hl], $2b
+ hlcoord 1, 16
+ ld [hl], $2d
+ hlcoord 2, 6
+ ld a, $39
+ call .Load16Row
+ hlcoord 2, 15
+ ld a, $3b
+ call .Load16Row
+ hlcoord 2, 6
+ ld a, $3c
+ call .Load9Column
+ hlcoord 17, 6
+ ld a, $3a
+ call .Load9Column
+ hlcoord 2, 6
+ ld [hl], $2f
+ hlcoord 17, 6
+ ld [hl], $30
+ hlcoord 2, 15
+ ld [hl], $32
+ hlcoord 17, 15
+ ld [hl], $31
+ call EnableLCD
+ call WaitBGMap
+ ld b, SCGB_MYSTERY_GIFT
+ call GetSGBLayout
+ jp SetPalettes
+
+.Load3GFX:
+ ld b, 3
+ jr .gfx_loop
+
+.Load4GFX:
+ ld b, 4
+ jr .gfx_loop
+
+.Load15GFX:
+ ld b, 15
+
+.gfx_loop
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, .gfx_loop
+ ret
+
+.Load9Column:
+ ld b, 9
+ jr .col_loop
+
+.Load11Column:
+ ld b, 11
+ jr .col_loop
+
+.Load15Column:
+ ld b, 15
+
+.col_loop
+ ld [hl], a
+ ld de, SCREEN_WIDTH
+ add hl, de
+ dec b
+ jr nz, .col_loop
+ ret
+
+.Load16Row:
+ ld b, 16
+.row_loop
+ ld [hli], a
+ dec b
+ jr nz, .row_loop
+ ret
+
+MysteryGiftGFX:
+INCBIN "gfx/mystery_gift/mystery_gift.2bpp"
diff --git a/gfx/mystery_gift/mystery_gift.2bpp b/gfx/mystery_gift/mystery_gift.2bpp
new file mode 100644
index 00000000..a0c9fc68
--- /dev/null
+++ b/gfx/mystery_gift/mystery_gift.2bpp
Binary files differ
diff --git a/main.asm b/main.asm
index 730b68ad..cdfc412e 100644
--- a/main.asm
+++ b/main.asm
@@ -831,12 +831,11 @@ SECTION "bank3f", ROMX
INCLUDE "engine/tilesets/tileset_anims.asm"
INCLUDE "engine/events/npc_trade.asm"
-MomTriesToBuySomething::
- dr $fcd87, $fcf6a
-StagePartyDataForMysteryGift::
- dr $fcf6a, $fcfb2
-InitMysteryGiftLayout::
- dr $fcfb2, $fde20
+INCLUDE "engine/events/mom_phone.asm"
+INCLUDE "engine/link/mystery_gift_3.asm"
+ColorTest::
+ dr $fd2c9, $fde20
+
SECTION "Standard Scripts", ROMX
diff --git a/wram.asm b/wram.asm
index 0cc05370..f8518028 100644
--- a/wram.asm
+++ b/wram.asm
@@ -2511,7 +2511,7 @@ wDecoBigDoll:: db ; d960
; Items bought from Mom
wWhichMomItem:: db ; d961
-wd962:: ds 1 ; d962
+wWhichMomItemSet:: db ; d962
wMomItemTriggerBalance:: ds 3 ; d963
wDailyResetTimer:: dw ; d966