diff options
author | entrpntr <entrpntr@gmail.com> | 2020-05-23 00:51:50 -0400 |
---|---|---|
committer | entrpntr <entrpntr@gmail.com> | 2020-05-23 00:51:50 -0400 |
commit | 3a50abc46a294ee670beddff327e7f6cf21bb61c (patch) | |
tree | 9d48232303d1419f5d31c0118ecdfc66d6050fec | |
parent | bfddbf6b11ca4a6220b5b03d66ed1208931a59de (diff) |
Add engine/events/mom_phone.asm and engine/link/mystery_gift_3.asm.
-rw-r--r-- | data/items/mom_phone.asm | 27 | ||||
-rw-r--r-- | engine/events/mom_phone.asm | 231 | ||||
-rw-r--r-- | engine/link/mystery_gift_3.asm | 190 | ||||
-rw-r--r-- | gfx/mystery_gift/mystery_gift.2bpp | bin | 0 -> 512 bytes | |||
-rw-r--r-- | main.asm | 11 | ||||
-rw-r--r-- | wram.asm | 2 |
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 Binary files differnew file mode 100644 index 00000000..a0c9fc68 --- /dev/null +++ b/gfx/mystery_gift/mystery_gift.2bpp @@ -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 @@ -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 |