diff options
author | entrpntr <entrpntr@gmail.com> | 2020-04-12 12:03:05 -0400 |
---|---|---|
committer | entrpntr <entrpntr@gmail.com> | 2020-04-12 12:03:05 -0400 |
commit | 51ad0b240e70c0bebb0cfd921ad365ff27e7617c (patch) | |
tree | e7100eee944790913c74b6b7c61c542080321dd4 | |
parent | ac8070fa92e5295908ae22f6892157baf81b64ce (diff) |
Money, marts, and mom.
-rw-r--r-- | constants/wram_constants.asm | 8 | ||||
-rw-r--r-- | data/items/marts.asm | 406 | ||||
-rwxr-xr-x | data/text/common_1.asm | 32 | ||||
-rw-r--r-- | data/text/common_3.asm | 16 | ||||
-rw-r--r-- | engine/events/mom.asm | 676 | ||||
-rw-r--r-- | engine/events/money.asm | 209 | ||||
-rw-r--r-- | main.asm | 18 | ||||
-rw-r--r-- | wram.asm | 19 |
8 files changed, 1335 insertions, 49 deletions
diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index 40ff3791..4f59a355 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -162,6 +162,14 @@ NUM_OBJECTS EQU 16 const STATUSFLAGS2_REACHED_GOLDENROD_F ; 6 const STATUSFLAGS2_ROCKETS_IN_MAHOGANY_F ; 7 +; wMomSavingMoney:: +MOM_SAVING_SOME_MONEY_F EQU 0 +MOM_SAVING_HALF_MONEY_F EQU 1 +MOM_SAVING_ALL_MONEY_F EQU 2 +MOM_ACTIVE_F EQU 7 + +MOM_SAVING_MONEY_MASK EQU (1 << MOM_SAVING_SOME_MONEY_F) | (1 << MOM_SAVING_HALF_MONEY_F) | (1 << MOM_SAVING_ALL_MONEY_F) + ; wJohtoBadges:: ; d57c const_def const ZEPHYRBADGE diff --git a/data/items/marts.asm b/data/items/marts.asm new file mode 100644 index 00000000..1d48ea53 --- /dev/null +++ b/data/items/marts.asm @@ -0,0 +1,406 @@ +Marts: +; entries correspond to MART_* constants + dw MartCherrygrove + dw MartCherrygroveDex + dw MartViolet + dw MartAzalea + dw MartCianwood + dw MartGoldenrod2F1 + dw MartGoldenrod2F2 + dw MartGoldenrod3F + dw MartGoldenrod4F + dw MartGoldenrod5F1 + dw MartGoldenrod5F2 + dw MartGoldenrod5F3 + dw MartGoldenrod5F4 + dw MartOlivine + dw MartEcruteak + dw MartMahogany1 + dw MartMahogany2 + dw MartBlackthorn + dw MartViridian + dw MartPewter + dw MartCerulean + dw MartLavender + dw MartVermilion + dw MartCeladon2F1 + dw MartCeladon2F2 + dw MartCeladon3F + dw MartCeladon4F + dw MartCeladon5F1 + dw MartCeladon5F2 + dw MartFuchsia + dw MartSaffron + dw MartMtMoon + dw MartIndigoPlateau + dw MartUnderground +.End + +MartCherrygrove: + db 4 ; # items + db POTION + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db -1 ; end + +MartCherrygroveDex: + db 5 ; # items + db POKE_BALL + db POTION + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db -1 ; end + +MartViolet: + db 10 ; # items + db POKE_BALL + db POTION + db ESCAPE_ROPE + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db X_DEFEND + db X_ATTACK + db X_SPEED + db FLOWER_MAIL + db -1 ; end + +MartAzalea: + db 9 ; # items + db CHARCOAL + db POKE_BALL + db POTION + db SUPER_POTION + db ESCAPE_ROPE + db REPEL + db ANTIDOTE + db PARLYZ_HEAL + db FLOWER_MAIL + db -1 ; end + +MartCianwood: + db 5 ; # items + db POTION + db SUPER_POTION + db HYPER_POTION + db FULL_HEAL + db REVIVE + db -1 ; end + +MartGoldenrod2F1: + db 7 ; # items + db POTION + db SUPER_POTION + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db BURN_HEAL + db ICE_HEAL + db -1 ; end + +MartGoldenrod2F2: + db 8 ; # items + db POKE_BALL + db GREAT_BALL + db ESCAPE_ROPE + db REPEL + db REVIVE + db FULL_HEAL + db POKE_DOLL + db FLOWER_MAIL + db -1 ; end + +MartGoldenrod3F: + db 7 ; # items + db X_SPEED + db X_SPECIAL + db X_DEFEND + db X_ATTACK + db DIRE_HIT + db GUARD_SPEC + db X_ACCURACY + db -1 ; end + +MartGoldenrod4F: + db 5 ; # items + db PROTEIN + db IRON + db CARBOS + db CALCIUM + db HP_UP + db -1 ; end + +MartGoldenrod5F1: + db 3 ; # items + db TM_THUNDERPUNCH + db TM_FIRE_PUNCH + db TM_ICE_PUNCH + db -1 ; end + +MartGoldenrod5F2: + db 4 ; # items + db TM_THUNDERPUNCH + db TM_FIRE_PUNCH + db TM_ICE_PUNCH + db TM_HEADBUTT + db -1 ; end + +MartGoldenrod5F3: + db 4 ; # items + db TM_THUNDERPUNCH + db TM_FIRE_PUNCH + db TM_ICE_PUNCH + db TM_ROCK_SMASH + db -1 ; end + +MartGoldenrod5F4: + db 5 ; # items + db TM_THUNDERPUNCH + db TM_FIRE_PUNCH + db TM_ICE_PUNCH + db TM_HEADBUTT + db TM_ROCK_SMASH + db -1 ; end + +MartOlivine: + db 9 ; # items + db GREAT_BALL + db SUPER_POTION + db HYPER_POTION + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db ICE_HEAL + db SUPER_REPEL + db SURF_MAIL + db -1 ; end + +MartEcruteak: + db 10 ; # items + db POKE_BALL + db GREAT_BALL + db POTION + db SUPER_POTION + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db BURN_HEAL + db ICE_HEAL + db REVIVE + db -1 ; end + +MartMahogany1: + db 4 ; # items + db TINYMUSHROOM + db SLOWPOKETAIL + db POKE_BALL + db POTION + db -1 ; end + +MartMahogany2: + db 9 ; # items + db RAGECANDYBAR + db GREAT_BALL + db SUPER_POTION + db HYPER_POTION + db ANTIDOTE + db PARLYZ_HEAL + db SUPER_REPEL + db REVIVE + db FLOWER_MAIL + db -1 ; end + +MartBlackthorn: + db 9 ; # items + db GREAT_BALL + db ULTRA_BALL + db HYPER_POTION + db MAX_POTION + db FULL_HEAL + db REVIVE + db MAX_REPEL + db X_DEFEND + db X_ATTACK + db -1 ; end + +MartViridian: + db 9 ; # items + db ULTRA_BALL + db HYPER_POTION + db FULL_HEAL + db REVIVE + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db BURN_HEAL + db FLOWER_MAIL + db -1 ; end + +MartPewter: + db 7 ; # items + db GREAT_BALL + db SUPER_POTION + db SUPER_REPEL + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db BURN_HEAL + db -1 ; end + +MartCerulean: + db 9 ; # items + db GREAT_BALL + db ULTRA_BALL + db SUPER_POTION + db SUPER_REPEL + db FULL_HEAL + db X_DEFEND + db X_ATTACK + db DIRE_HIT + db SURF_MAIL + db -1 ; end + +MartLavender: + db 8 ; # items + db GREAT_BALL + db POTION + db SUPER_POTION + db MAX_REPEL + db ANTIDOTE + db PARLYZ_HEAL + db AWAKENING + db BURN_HEAL + db -1 ; end + +MartVermilion: + db 8 ; # items + db ULTRA_BALL + db SUPER_POTION + db HYPER_POTION + db REVIVE + db PARLYZ_HEAL + db AWAKENING + db BURN_HEAL + db LITEBLUEMAIL + db -1 ; end + +MartCeladon2F1: + db 7 ; # items + db POTION + db SUPER_POTION + db HYPER_POTION + db MAX_POTION + db REVIVE + db SUPER_REPEL + db MAX_REPEL + db -1 ; end + +MartCeladon2F2: + db 10 ; # items + db POKE_BALL + db GREAT_BALL + db ULTRA_BALL + db ESCAPE_ROPE + db FULL_HEAL + db ANTIDOTE + db BURN_HEAL + db ICE_HEAL + db AWAKENING + db PARLYZ_HEAL + db -1 ; end + +MartCeladon3F: + db 5 ; # items + db TM_HIDDEN_POWER + db TM_SUNNY_DAY + db TM_PROTECT + db TM_RAIN_DANCE + db TM_SANDSTORM + db -1 ; end + +MartCeladon4F: + db 3 ; # items + db POKE_DOLL + db LOVELY_MAIL + db SURF_MAIL + db -1 ; end + +MartCeladon5F1: + db 5 ; # items + db HP_UP + db PROTEIN + db IRON + db CARBOS + db CALCIUM + db -1 ; end + +MartCeladon5F2: + db 7 ; # items + db X_ACCURACY + db GUARD_SPEC + db DIRE_HIT + db X_ATTACK + db X_DEFEND + db X_SPEED + db X_SPECIAL + db -1 ; end + +MartFuchsia: + db 7 ; # items + db GREAT_BALL + db ULTRA_BALL + db SUPER_POTION + db HYPER_POTION + db FULL_HEAL + db MAX_REPEL + db FLOWER_MAIL + db -1 ; end + +MartSaffron: + db 8 ; # items + db GREAT_BALL + db ULTRA_BALL + db HYPER_POTION + db MAX_POTION + db FULL_HEAL + db X_ATTACK + db X_DEFEND + db FLOWER_MAIL + db -1 ; end + +MartMtMoon: + db 6 ; # items + db POKE_DOLL + db FRESH_WATER + db SODA_POP + db LEMONADE + db REPEL + db PORTRAITMAIL + db -1 ; end + +MartIndigoPlateau: + db 7 ; # items + db ULTRA_BALL + db MAX_REPEL + db HYPER_POTION + db MAX_POTION + db FULL_RESTORE + db REVIVE + db FULL_HEAL + db -1 ; end + +MartUnderground: + db 4 ; # items + db ENERGYPOWDER + db ENERGY_ROOT + db HEAL_POWDER + db REVIVAL_HERB + db -1 ; end + +DefaultMart: + db 2 ; # items + db POKE_BALL + db POTION + db -1 ; end diff --git a/data/text/common_1.asm b/data/text/common_1.asm index a4bb9ca4..2747f902 100755 --- a/data/text/common_1.asm +++ b/data/text/common_1.asm @@ -1191,7 +1191,7 @@ UnknownText_0x1bd6f5:: line "so cute!" done -UnknownText_0x1bd77f:: +_MomLeavingText1:: text "Wow, that's a cute" line "#MON." @@ -1219,14 +1219,14 @@ UnknownText_0x1bd77f:: line "save your money?" done -UnknownText_0x1bd868:: +_MomLeavingText2:: text "OK, I'll take care" line "of your money." para "<……><……><……>" prompt -UnknownText_0x1bd88e:: +_MomLeavingText3:: text "Be careful." para "#MON are your" @@ -1236,7 +1236,7 @@ UnknownText_0x1bd88e:: para "Now, go on!" done -UnknownText_0x1bd8da:: +_MomIsThisAboutYourMoneyText:: text "Hi! Welcome home!" line "You're trying very" cont "hard, I see." @@ -1248,47 +1248,47 @@ UnknownText_0x1bd8da:: line "your money?" done -UnknownText_0x1bd942:: +_MomBankWhatDoYouWantToDoText:: text "What do you want" line "to do?" done -UnknownText_0x1bd95b:: +_MomStoreMoneyText:: text "How much do you" line "want to save?" done -UnknownText_0x1bd97a:: +_MomTakeMoneyText:: text "How much do you" line "want to take?" done -UnknownText_0x1bd999:: +_MomSaveMoneyText:: text "Do you want to" line "save some money?" done -UnknownText_0x1bd9ba:: +_MomHaventSavedThatMuchText:: text "You haven't saved" line "that much." prompt -UnknownText_0x1bd9d7:: +_MomNotEnoughRoomInWalletText:: text "You can't take" line "that much." prompt -UnknownText_0x1bd9f1:: +_MomInsufficientFundsInWalletText:: text "You don't have" line "that much." prompt -UnknownText_0x1bda0b:: +_MomNotEnoughRoomInBankText:: text "You can't save" line "that much." prompt -UnknownText_0x1bda25:: +_MomStartSavingMoneyText:: text "OK, I'll save your" line "money. Trust me!" @@ -1296,17 +1296,17 @@ UnknownText_0x1bda25:: line "with it!" done -UnknownText_0x1bda5b:: +_MomStoredMoneyText:: text "Your money's safe" line "here! Get going!" done -UnknownText_0x1bda7e:: +_MomTakenMoneyText:: text "<PLAYER>, don't" line "give up!" done -UnknownText_0x1bda90:: +_MomJustDoWhatYouCanText:: text "Just do what" line "you can." done diff --git a/data/text/common_3.asm b/data/text/common_3.asm index d89d72d2..4a8e0a07 100644 --- a/data/text/common_3.asm +++ b/data/text/common_3.asm @@ -500,39 +500,39 @@ UnknownText_0x1c5fd1:: text "Which #MON?" prompt -Text_DSTIsThatOK:: +_DSTIsThatOKText:: text " DST," line "is that OK?" done -UnknownText_0x1c5ff1:: +_TimeAskOkayText:: text "," line "is that OK?" done -UnknownText_0x1c6000:: +_TimesetAskDSTText:: text "Do you want to" line "switch to Daylight" cont "Saving Time?" done -UnknownText_0x1c6030:: +_TimesetDSTText:: text "I set the clock" line "forward by one" cont "hour." prompt -UnknownText_0x1c6056:: +_TimesetAskNotDSTText:: text "Is Daylight Saving" line "Time over?" done -UnknownText_0x1c6075:: +_TimesetNotDSTText:: text "I put the clock" line "back one hour." prompt -UnknownText_0x1c6095:: +_TimesetAskAdjustDSTText:: text "Do you want to" line "adjust your clock" @@ -540,7 +540,7 @@ UnknownText_0x1c6095:: line "Saving Time?" done -UnknownText_0x1c60d1:: +_MomLostGearBookletText:: text "I lost the in-" line "struction booklet" cont "for the #GEAR." diff --git a/engine/events/mom.asm b/engine/events/mom.asm new file mode 100644 index 00000000..c795bfff --- /dev/null +++ b/engine/events/mom.asm @@ -0,0 +1,676 @@ +BankOfMom: + ldh a, [hInMenu] + push af + ld a, $1 + ldh [hInMenu], a + xor a + ld [wJumptableIndex], a +.loop + ld a, [wJumptableIndex] + bit 7, a + jr nz, .done + call .RunJumptable + jr .loop + +.done + pop af + ldh [hInMenu], a + ret + +.RunJumptable: + ld a, [wJumptableIndex] + ld e, a + ld d, 0 + ld hl, .dw + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.dw + + dw .CheckIfBankInitialized + dw .InitializeBank + dw .IsThisAboutYourMoney + dw .AccessBankOfMom + dw .StoreMoney + dw .TakeMoney + dw .StopOrStartSavingMoney + dw .JustDoWhatYouCan + dw .AskDST + +.CheckIfBankInitialized: + ld a, [wMomSavingMoney] + bit MOM_ACTIVE_F, a + jr nz, .savingmoneyalready + set MOM_ACTIVE_F, a + ld [wMomSavingMoney], a + ld a, $1 + jr .done_0 + +.savingmoneyalready + ld a, $2 + +.done_0 + ld [wJumptableIndex], a + ret + +.InitializeBank: + ld hl, MomLeavingText1 + call PrintText + call YesNoBox + jr c, .DontSaveMoney + ld hl, MomLeavingText2 + call PrintText + ld a, (1 << MOM_ACTIVE_F) | (1 << MOM_SAVING_SOME_MONEY_F) + jr .done_1 + +.DontSaveMoney: + ld a, 1 << MOM_ACTIVE_F + +.done_1 + ld [wMomSavingMoney], a + ld hl, MomLeavingText3 + call PrintText + ld a, $8 + ld [wJumptableIndex], a + ret + +.IsThisAboutYourMoney: + ld hl, MomIsThisAboutYourMoneyText + call PrintText + call YesNoBox + jr c, .nope + ld a, $3 + jr .done_2 + +.nope + call DSTChecks + ld a, $7 + +.done_2 + ld [wJumptableIndex], a + ret + +.AccessBankOfMom: + ld hl, MomBankWhatDoYouWantToDoText + call PrintText + call LoadStandardMenuHeader + ld hl, MenuHeader_0x166b5 + call CopyMenuHeader + call VerticalMenu + call CloseWindow + jr c, .cancel + ld a, [wMenuCursorY] + cp $1 + jr z, .withdraw + cp $2 + jr z, .deposit + cp $3 + jr z, .stopsaving + +.cancel + ld a, $7 + jr .done_3 + +.withdraw + ld a, $5 + jr .done_3 + +.deposit + ld a, $4 + jr .done_3 + +.stopsaving + ld a, $6 + +.done_3 + ld [wJumptableIndex], a + ret + +.StoreMoney: + ld hl, MomStoreMoneyText + call PrintText + xor a + ld hl, wStringBuffer2 + ld [hli], a + ld [hli], a + ld [hl], a + ld a, 5 + ld [wMomBankDigitCursorPosition], a + call LoadStandardMenuHeader + call Mom_SetUpDepositMenu + call Mom_Wait10Frames + call Mom_WithdrawDepositMenuJoypad + call CloseWindow + jr c, .CancelDeposit + ld hl, wStringBuffer2 + ld a, [hli] + or [hl] + inc hl + or [hl] + jr z, .CancelDeposit + ld de, wMoney + ld bc, wStringBuffer2 + farcall CompareMoney + jr c, .InsufficientFundsInWallet + ld hl, wStringBuffer2 + ld de, wStringBuffer2 + 3 + ld bc, 3 + call CopyBytes + ld bc, wMomsMoney + ld de, wStringBuffer2 + farcall GiveMoney + jr c, .NotEnoughRoomInBank + ld bc, wStringBuffer2 + 3 + ld de, wMoney + farcall TakeMoney + ld hl, wStringBuffer2 + ld de, wMomsMoney + ld bc, 3 + call CopyBytes + ld de, SFX_TRANSACTION + call PlaySFX + call WaitSFX + ld hl, MomStoredMoneyText + call PrintText + ld a, $8 + jr .done_4 + +.InsufficientFundsInWallet: + ld hl, MomInsufficientFundsInWalletText + call PrintText + ret + +.NotEnoughRoomInBank: + ld hl, MomNotEnoughRoomInBankText + call PrintText + ret + +.CancelDeposit: + ld a, $7 + +.done_4 + ld [wJumptableIndex], a + ret + +.TakeMoney: + ld hl, MomTakeMoneyText + call PrintText + xor a + ld hl, wStringBuffer2 + ld [hli], a + ld [hli], a + ld [hl], a + ld a, 5 + ld [wMomBankDigitCursorPosition], a + call LoadStandardMenuHeader + call Mom_SetUpWithdrawMenu + call Mom_Wait10Frames + call Mom_WithdrawDepositMenuJoypad + call CloseWindow + jr c, .CancelWithdraw + ld hl, wStringBuffer2 + ld a, [hli] + or [hl] + inc hl + or [hl] + jr z, .CancelWithdraw + ld hl, wStringBuffer2 + ld de, wStringBuffer2 + 3 + ld bc, 3 + call CopyBytes + ld de, wMomsMoney + ld bc, wStringBuffer2 + farcall CompareMoney + jr c, .InsufficientFundsInBank + ld bc, wMoney + ld de, wStringBuffer2 + farcall GiveMoney + jr c, .NotEnoughRoomInWallet + ld bc, wStringBuffer2 + 3 + ld de, wMomsMoney + farcall TakeMoney + ld hl, wStringBuffer2 + ld de, wMoney + ld bc, 3 + call CopyBytes + ld de, SFX_TRANSACTION + call PlaySFX + call WaitSFX + ld hl, MomTakenMoneyText + call PrintText + ld a, $8 + jr .done_5 + +.InsufficientFundsInBank: + ld hl, MomHaventSavedThatMuchText + call PrintText + ret + +.NotEnoughRoomInWallet: + ld hl, MomNotEnoughRoomInWalletText + call PrintText + ret + +.CancelWithdraw: + ld a, $7 + +.done_5 + ld [wJumptableIndex], a + ret + +.StopOrStartSavingMoney: + ld hl, MomSaveMoneyText + call PrintText + call YesNoBox + jr c, .StopSavingMoney + ld a, (1 << MOM_ACTIVE_F) | (1 << MOM_SAVING_SOME_MONEY_F) + ld [wMomSavingMoney], a + ld hl, MomStartSavingMoneyText + call PrintText + ld a, $8 + ld [wJumptableIndex], a + ret + +.StopSavingMoney: + ld a, 1 << MOM_ACTIVE_F + ld [wMomSavingMoney], a + ld a, $7 + ld [wJumptableIndex], a + ret + +.JustDoWhatYouCan: + ld hl, MomJustDoWhatYouCanText + call PrintText + +.AskDST: + ld hl, wJumptableIndex + set 7, [hl] + ret + +DSTChecks: +; check the time; avoid changing DST if doing so would change the current day + ld a, [wDST] + bit 7, a + ldh a, [hHours] + jr z, .NotDST + and a ; within one hour of 00:00? + jr z, .LostBooklet + jr .loop + +.NotDST: + cp 23 ; within one hour of 23:00? + jr nz, .loop + ; fallthrough + +.LostBooklet: + call .ClearBox + bccoord 1, 14 + ld hl, .TimesetAskAdjustDSTText + call PlaceHLTextAtBC + call YesNoBox + ret c + call .ClearBox + bccoord 1, 14 + ld hl, .MomLostGearBookletText + call PlaceHLTextAtBC + ret + +.loop + call .ClearBox + bccoord 1, 14 + ld a, [wDST] + bit 7, a + jr z, .SetDST + ld hl, .TimesetAskNotDSTText + call PlaceHLTextAtBC + call YesNoBox + ret c + ld a, [wDST] + res 7, a + ld [wDST], a + call .SetClockBack + predef UpdateTimePredef + call .ClearBox + bccoord 1, 14 + ld hl, .TimesetNotDSTText + call PlaceHLTextAtBC + ret + +.SetDST: + ld hl, .TimesetAskDSTText + call PlaceHLTextAtBC + call YesNoBox + ret c + ld a, [wDST] + set 7, a + ld [wDST], a + call .SetClockForward + predef UpdateTimePredef + call .ClearBox + bccoord 1, 14 + ld hl, .TimesetDSTText + call PlaceHLTextAtBC + ret + +.SetClockForward: + ld a, [wStartHour] + add 1 + sub 24 + jr nc, .DontLoopHourForward + add 24 +.DontLoopHourForward: + ld [wStartHour], a + ccf + ld a, [wStartDay] + adc 0 + ld [wStartDay], a + ret + +.SetClockBack: + ld a, [wStartHour] + sub 1 + jr nc, .DontLoopHourBack + add 24 +.DontLoopHourBack: + ld [wStartHour], a + ld a, [wStartDay] + sbc 0 + jr nc, .DontLoopDayBack + add 7 +.DontLoopDayBack: + ld [wStartDay], a + ret + +.ClearBox: + hlcoord 1, 14 + lb bc, 3, 18 + call ClearBox + ret + +.TimesetAskAdjustDSTText: + text_far _TimesetAskAdjustDSTText + text_end + +.MomLostGearBookletText: + text_far _MomLostGearBookletText + text_end + +.TimesetAskDSTText: + text_far _TimesetAskDSTText + text_end + +.TimesetDSTText: + text_far _TimesetDSTText + text_end + +.TimesetAskNotDSTText: + text_far _TimesetAskNotDSTText + text_end + +.TimesetNotDSTText: + text_far _TimesetNotDSTText + text_end + +Mom_SetUpWithdrawMenu: + ld de, Mon_WithdrawString + jr Mom_ContinueMenuSetup + +Mom_SetUpDepositMenu: + ld de, Mom_DepositString +Mom_ContinueMenuSetup: + push de + xor a + ldh [hBGMapMode], a + hlcoord 0, 0 + lb bc, 6, 18 + call Textbox + hlcoord 1, 2 + ld de, Mom_SavedString + call PlaceString + hlcoord 12, 2 + ld de, wMomsMoney + lb bc, PRINTNUM_MONEY | 3, 6 + call PrintNum + hlcoord 1, 4 + ld de, Mom_HeldString + call PlaceString + hlcoord 12, 4 + ld de, wMoney + lb bc, PRINTNUM_MONEY | 3, 6 + call PrintNum + hlcoord 1, 6 + pop de + call PlaceString + hlcoord 12, 6 + ld de, wStringBuffer2 + lb bc, PRINTNUM_MONEY | PRINTNUM_LEADINGZEROS | 3, 6 + call PrintNum + call UpdateSprites + call CGBOnly_CopyTilemapAtOnce + ret + +Mom_Wait10Frames: + ld c, 10 + call DelayFrames + ret + +Mom_WithdrawDepositMenuJoypad: +.loop + call JoyTextDelay + ld hl, hJoyPressed + ld a, [hl] + and B_BUTTON + jr nz, .pressedB + ld a, [hl] + and A_BUTTON + jr nz, .pressedA + call .dpadaction + xor a + ldh [hBGMapMode], a + hlcoord 12, 6 + ld bc, 7 + ld a, " " + call ByteFill + hlcoord 12, 6 + ld de, wStringBuffer2 + lb bc, PRINTNUM_MONEY | PRINTNUM_LEADINGZEROS | 3, 6 + call PrintNum + ldh a, [hVBlankCounter] + and $10 + jr nz, .skip + hlcoord 13, 6 + ld a, [wMomBankDigitCursorPosition] + ld c, a + ld b, 0 + add hl, bc + ld [hl], " " + +.skip + call WaitBGMap + jr .loop + +.pressedB + scf + ret + +.pressedA + and a + ret + +.dpadaction + ld hl, hJoyLast + ld a, [hl] + and D_UP + jr nz, .incrementdigit + ld a, [hl] + and D_DOWN + jr nz, .decrementdigit + ld a, [hl] + and D_LEFT + jr nz, .movecursorleft + ld a, [hl] + and D_RIGHT + jr nz, .movecursorright + and a + ret + +.movecursorleft + ld hl, wMomBankDigitCursorPosition + ld a, [hl] + and a + ret z + dec [hl] + ret + +.movecursorright + ld hl, wMomBankDigitCursorPosition + ld a, [hl] + cp 5 + ret nc + inc [hl] + ret + +.incrementdigit + ld hl, .DigitQuantities + call .getdigitquantity + ld c, l + ld b, h + ld de, wStringBuffer2 + farcall GiveMoney + ret + +.decrementdigit + ld hl, .DigitQuantities + call .getdigitquantity + ld c, l + ld b, h + ld de, wStringBuffer2 + farcall TakeMoney + ret + +.getdigitquantity + ld a, [wMomBankDigitCursorPosition] + push de + ld e, a + ld d, 0 + add hl, de + add hl, de + add hl, de + pop de + ret + +.DigitQuantities: + dt 100000 + dt 10000 + dt 1000 + dt 100 + dt 10 + dt 1 + + dt 100000 + dt 10000 + dt 1000 + dt 100 + dt 10 + dt 1 + + dt 900000 + dt 90000 + dt 9000 + dt 900 + dt 90 + dt 9 + +MomLeavingText1: + text_far _MomLeavingText1 + text_end + +MomLeavingText2: + text_far _MomLeavingText2 + text_end + +MomLeavingText3: + text_far _MomLeavingText3 + text_end + +MomIsThisAboutYourMoneyText: + text_far _MomIsThisAboutYourMoneyText + text_end + +MomBankWhatDoYouWantToDoText: + text_far _MomBankWhatDoYouWantToDoText + text_end + +MomStoreMoneyText: + text_far _MomStoreMoneyText + text_end + +MomTakeMoneyText: + text_far _MomTakeMoneyText + text_end + +MomSaveMoneyText: + text_far _MomSaveMoneyText + text_end + +MomHaventSavedThatMuchText: + text_far _MomHaventSavedThatMuchText + text_end + +MomNotEnoughRoomInWalletText: + text_far _MomNotEnoughRoomInWalletText + text_end + +MomInsufficientFundsInWalletText: + text_far _MomInsufficientFundsInWalletText + text_end + +MomNotEnoughRoomInBankText: + text_far _MomNotEnoughRoomInBankText + text_end + +MomStartSavingMoneyText: + text_far _MomStartSavingMoneyText + text_end + +MomStoredMoneyText: + text_far _MomStoredMoneyText + text_end + +MomTakenMoneyText: + text_far _MomTakenMoneyText + text_end + +MomJustDoWhatYouCanText: + text_far _MomJustDoWhatYouCanText + text_end + +Mom_SavedString: + db "SAVED@" + +Mon_WithdrawString: + db "WITHDRAW@" + +Mom_DepositString: + db "DEPOSIT@" + +Mom_HeldString: + db "HELD@" + +MenuHeader_0x166b5: + db MENU_BACKUP_TILES ; flags + menu_coords 0, 0, 10, 10 + dw MenuData_0x166bd + db 1 ; default option + +MenuData_0x166bd: + db STATICMENU_CURSOR ; flags + db 4 ; items + db "GET@" + db "SAVE@" + db "CHANGE@" + db "CANCEL@" diff --git a/engine/events/money.asm b/engine/events/money.asm new file mode 100644 index 00000000..c8f9d058 --- /dev/null +++ b/engine/events/money.asm @@ -0,0 +1,209 @@ +GiveMoney:: + ld a, 3 + call AddMoney + ld bc, MaxMoney + ld a, 3 + call CompareMoney + jr z, .not_maxed_out + jr c, .not_maxed_out + ld hl, MaxMoney + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + scf + ret + +.not_maxed_out + and a + ret + +MaxMoney: + dt MAX_MONEY + +TakeMoney:: + ld a, 3 + call SubtractMoney + jr nc, .okay + ; leave with 0 money + xor a + ld [de], a + inc de + ld [de], a + inc de + ld [de], a + scf + ret + +.okay + and a + ret + +CompareMoney:: + ld a, 3 +CompareFunds: +; a: number of bytes +; bc: start addr of amount (big-endian) +; de: start addr of account (big-endian) + push hl + push de + push bc + ld h, b + ld l, c + ld c, 0 + ld b, a +.loop1 + dec a + jr z, .done + inc de + inc hl + jr .loop1 + +.done + and a +.loop2 + ld a, [de] + sbc [hl] + jr z, .okay + inc c + +.okay + dec de + dec hl + dec b + jr nz, .loop2 + jr c, .set_carry + ld a, c + and a + jr .skip_carry + +.set_carry + ld a, 1 + and a + scf +.skip_carry + pop bc + pop de + pop hl + ret + +SubtractMoney: + ld a, 3 +SubtractFunds: +; a: number of bytes +; bc: start addr of amount (big-endian) +; de: start addr of account (big-endian) + push hl + push de + push bc + ld h, b + ld l, c + ld b, a + ld c, 0 +.loop + dec a + jr z, .done + inc de + inc hl + jr .loop + +.done + and a +.loop2 + ld a, [de] + sbc [hl] + ld [de], a + dec de + dec hl + dec b + jr nz, .loop2 + pop bc + pop de + pop hl + ret + +AddMoney: + ld a, 3 +AddFunds: +; a: number of bytes +; bc: start addr of amount (big-endian) +; de: start addr of account (big-endian) + push hl + push de + push bc + + ld h, b + ld l, c + ld b, a +.loop1 + dec a + jr z, .done + inc de + inc hl + jr .loop1 + +.done + and a +.loop2 + ld a, [de] + adc [hl] + ld [de], a + dec de + dec hl + dec b + jr nz, .loop2 + + pop bc + pop de + pop hl + ret + +GiveCoins:: + ld a, 2 + ld de, wCoins + call AddFunds + ld a, 2 + ld bc, .maxcoins + call CompareFunds + jr c, .not_maxed + ld hl, .maxcoins + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + scf + ret + +.not_maxed + and a + ret + +.maxcoins + bigdw MAX_COINS + +TakeCoins:: + ld a, 2 + ld de, wCoins + call SubtractFunds + jr nc, .okay + ; leave with 0 coins + xor a + ld [de], a + inc de + ld [de], a + scf + ret + +.okay + and a + ret + +CheckCoins:: + ld a, 2 + ld de, wCoins + jp CompareFunds @@ -85,21 +85,9 @@ INCLUDE "engine/overworld/map_setup.asm" dr $156be, $15871 ; ? INCLUDE "engine/events/pokemon_pc.asm" INCLUDE "engine/items/mart.asm" - -GiveMoney: - dr $1622c, $1624f -TakeMoney: - dr $1624f, $16260 -CompareMoney: - dr $16260, $162fe -Marts: - dr $162fe, $16342 -.End: - dr $16342, $16469 -DefaultMart: - dr $16469, $1646d -BankOfMom: - dr $1646d, $16935 +INCLUDE "engine/events/money.asm" +INCLUDE "data/items/marts.asm" +INCLUDE "engine/events/mom.asm" INCLUDE "engine/events/daycare.asm" Function16e3a: dr $16e3a, $16ff7 @@ -2128,16 +2128,17 @@ wNamedObjectTypeBuffer:: ds 1 ; ce61 wce62:: ds 1 ; ce62 wce63:: wJumptableIndex:: - db ; ce63 -wce64:: ds 1 ; ce64 + db +wce64:: +wMomBankDigitCursorPosition:: + db wce65:: wIntroSceneTimer:: wCurPocket:: - db ; ce65 - -wPackUsedItem:: + db wce66:: - db ; ce66 +wPackUsedItem:: + db wRequested2bpp:: ds 1 ; ce67 wRequested2bppSource:: dw ; ce68 @@ -3055,7 +3056,7 @@ wd1e4:: ds 1 ; d1e4 wd1e5:: ds 1 ; d1e5 wd1e6:: ds 1 ; d1e6 wd1e7:: ds 1 ; d1e7 -wd1e8:: ds 1 ; d1e8 +wDST:: db ; d1e8 wd1e9:: ds 1 ; d1e9 wGameTimeCap:: ds 1 ; d1ea @@ -3158,9 +3159,7 @@ wPlayerData3:: wStatusFlags:: ds 1 ; d571 wStatusFlags2:: ds 1 ; d572 wMoney:: ds 3 ; d573 -wd576:: ds 1 ; d576 -wd577:: ds 1 ; d577 -wd578:: ds 1 ; d578 +wMomsMoney:: ds 3 ; d576 wMomSavingMoney:: ds 1 ; d579 wCoins:: dw ; d57a |