summaryrefslogtreecommitdiff
path: root/engine/events/mom.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/events/mom.asm')
-rw-r--r--engine/events/mom.asm745
1 files changed, 745 insertions, 0 deletions
diff --git a/engine/events/mom.asm b/engine/events/mom.asm
new file mode 100644
index 000000000..6e3c7b320
--- /dev/null
+++ b/engine/events/mom.asm
@@ -0,0 +1,745 @@
+Special_BankOfMom: ; 16218
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+ xor a
+ ld [wJumptableIndex], a
+.loop
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done
+ call .RunJumptable
+ jr .loop
+
+.done
+ pop af
+ ld [hInMenu], a
+ ret
+; 16233
+
+.RunJumptable: ; 16233
+ 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
+; 16242
+
+.dw ; 16242
+
+ dw .CheckIfBankInitialized
+ dw .InitializeBank
+ dw .IsThisAboutYourMoney
+ dw .AccessBankOfMom
+ dw .StoreMoney
+ dw .TakeMoney
+ dw .StopOrStartSavingMoney
+ dw .AskDST
+ dw .JustDoWhatYouCan
+; 16254
+
+.CheckIfBankInitialized: ; 16254
+ ld a, [wMomSavingMoney]
+ bit 7, a
+ jr nz, .savingmoneyalready
+ set 7, a
+ ld [wMomSavingMoney], a
+ ld a, $1
+ jr .done_0
+
+.savingmoneyalready
+ ld a, $2
+
+.done_0
+ ld [wJumptableIndex], a
+ ret
+; 1626a
+
+.InitializeBank: ; 1626a
+ ld hl, UnknownText_0x16649
+ call PrintText
+ call YesNoBox
+ jr c, .DontSaveMoney
+ ld hl, UnknownText_0x1664e
+ call PrintText
+ ld a, %10000001
+ jr .done_1
+
+.DontSaveMoney:
+ ld a, %10000000
+
+.done_1
+ ld [wMomSavingMoney], a
+ ld hl, UnknownText_0x16653
+ call PrintText
+ ld a, $8
+ ld [wJumptableIndex], a
+ ret
+; 16290
+
+.IsThisAboutYourMoney: ; 16290
+ ld hl, UnknownText_0x16658
+ 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
+; 162a8
+
+.AccessBankOfMom: ; 162a8
+ ld hl, UnknownText_0x1665d
+ call PrintText
+ call LoadStandardMenuDataHeader
+ ld hl, MenuDataHeader_0x166b5
+ call CopyMenuDataHeader
+ 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
+; 162e0
+
+.StoreMoney: ; 162e0
+ ld hl, UnknownText_0x16662
+ call PrintText
+ xor a
+ ld hl, StringBuffer2
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld a, $5
+ ld [wcf64], a
+ call LoadStandardMenuDataHeader
+ call Mom_SetUpDepositMenu
+ call Mom_Wait10Frames
+ call Mom_WithdrawDepositMenuJoypad
+ call CloseWindow
+ jr c, .CancelDeposit
+ ld hl, StringBuffer2
+ ld a, [hli]
+ or [hl]
+ inc hl
+ or [hl]
+ jr z, .CancelDeposit
+ ld de, Money
+ ld bc, StringBuffer2
+ farcall CompareMoney
+ jr c, .DontHaveThatMuchToDeposit
+ ld hl, StringBuffer2
+ ld de, StringBuffer2 + 3
+ ld bc, 3
+ call CopyBytes
+ ld bc, wMomsMoney
+ ld de, StringBuffer2
+ farcall GiveMoney
+ jr c, .CantDepositThatMuch
+ ld bc, StringBuffer2 + 3
+ ld de, Money
+ farcall TakeMoney
+ ld hl, StringBuffer2
+ ld de, wMomsMoney
+ ld bc, 3
+ call CopyBytes
+ ld de, SFX_TRANSACTION
+ call PlaySFX
+ call WaitSFX
+ ld hl, UnknownText_0x1668a
+ call PrintText
+ ld a, $8
+ jr .done_4
+
+.DontHaveThatMuchToDeposit:
+ ld hl, UnknownText_0x1667b
+ call PrintText
+ ret
+
+.CantDepositThatMuch:
+ ld hl, UnknownText_0x16680
+ call PrintText
+ ret
+
+.CancelDeposit:
+ ld a, $7
+
+.done_4
+ ld [wJumptableIndex], a
+ ret
+; 16373
+
+.TakeMoney: ; 16373
+ ld hl, UnknownText_0x16667
+ call PrintText
+ xor a
+ ld hl, StringBuffer2
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld a, $5
+ ld [wcf64], a
+ call LoadStandardMenuDataHeader
+ call Mom_SetUpWithdrawMenu
+ call Mom_Wait10Frames
+ call Mom_WithdrawDepositMenuJoypad
+ call CloseWindow
+ jr c, .CancelWithdraw
+ ld hl, StringBuffer2
+ ld a, [hli]
+ or [hl]
+ inc hl
+ or [hl]
+ jr z, .CancelWithdraw
+ ld hl, StringBuffer2
+ ld de, StringBuffer2 + 3
+ ld bc, 3
+ call CopyBytes
+ ld de, wMomsMoney
+ ld bc, StringBuffer2
+ farcall CompareMoney
+ jr c, .InsufficientFundsInBank
+ ld bc, Money
+ ld de, StringBuffer2
+ farcall GiveMoney
+ jr c, .NotEnoughRoomInWallet
+ ld bc, StringBuffer2 + 3
+ ld de, wMomsMoney
+ farcall TakeMoney
+ ld hl, StringBuffer2
+ ld de, Money
+ ld bc, 3
+ call CopyBytes
+ ld de, SFX_TRANSACTION
+ call PlaySFX
+ call WaitSFX
+ ld hl, UnknownText_0x1668f
+ call PrintText
+ ld a, $8
+ jr .done_5
+
+.InsufficientFundsInBank:
+ ld hl, UnknownText_0x16671
+ call PrintText
+ ret
+
+.NotEnoughRoomInWallet:
+ ld hl, UnknownText_0x16676
+ call PrintText
+ ret
+
+.CancelWithdraw:
+ ld a, $7
+
+.done_5
+ ld [wJumptableIndex], a
+ ret
+; 16406
+
+.StopOrStartSavingMoney: ; 16406
+ ld hl, UnknownText_0x1666c
+ call PrintText
+ call YesNoBox
+ jr c, .StopSavingMoney
+ ld a, $81
+ ld [wMomSavingMoney], a
+ ld hl, UnknownText_0x16685
+ call PrintText
+ ld a, $8
+ ld [wJumptableIndex], a
+ ret
+
+.StopSavingMoney:
+ ld a, $80
+ ld [wMomSavingMoney], a
+ ld a, $7
+ ld [wJumptableIndex], a
+ ret
+; 1642d
+
+.AskDST: ; 1642d
+ ld hl, UnknownText_0x16694
+ call PrintText
+
+.JustDoWhatYouCan: ; 16433
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+; 16439
+
+DSTChecks: ; 16439
+; check the time; avoid changing DST if doing so would change the current day
+ ld a, [wDST]
+ bit 7, a
+ ld 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, .Text_AdjustClock
+ call PlaceHLTextAtBC
+ call YesNoBox
+ ret c
+ call .ClearBox
+ bccoord 1, 14
+ ld hl, .Text_LostInstructionBooklet
+ call PlaceHLTextAtBC
+ ret
+
+.loop
+ call .ClearBox
+ bccoord 1, 14
+ ld a, [wDST]
+ bit 7, a
+ jr z, .SetDST
+ ld hl, .Text_IsDSTOver
+ call PlaceHLTextAtBC
+ call YesNoBox
+ ret c
+ ld a, [wDST]
+ res 7, a
+ ld [wDST], a
+ call .SetClockBack
+ call .ClearBox
+ bccoord 1, 14
+ ld hl, .Text_SetClockBack
+ call PlaceHLTextAtBC
+ ret
+
+.SetDST:
+ ld hl, .Text_SwitchToDST
+ call PlaceHLTextAtBC
+ call YesNoBox
+ ret c
+ ld a, [wDST]
+ set 7, a
+ ld [wDST], a
+ call .SetClockForward
+ call .ClearBox
+ bccoord 1, 14
+ ld hl, .Text_SetClockForward
+ call PlaceHLTextAtBC
+ ret
+; 164b9
+
+.SetClockForward: ; 164b9
+ ld a, [StartHour]
+ add 1
+ sub 24
+ jr nc, .DontLoopHourForward
+ add 24
+.DontLoopHourForward:
+ ld [StartHour], a
+ ccf
+ ld a, [StartDay]
+ adc 0
+ ld [StartDay], a
+ ret
+; 164d1
+
+.SetClockBack: ; 164d1
+ ld a, [StartHour]
+ sub 1
+ jr nc, .DontLoopHourBack
+ add 24
+.DontLoopHourBack:
+ ld [StartHour], a
+ ld a, [StartDay]
+ sbc 0
+ jr nc, .DontLoopDayBack
+ add 7
+.DontLoopDayBack:
+ ld [StartDay], a
+ ret
+; 164ea
+
+.ClearBox: ; 164ea
+ hlcoord 1, 14
+ lb bc, 3, 18
+ call ClearBox
+ ret
+; 164f4
+
+.Text_AdjustClock: ; 0x164f4
+ ; Do you want to adjust your clock for Daylight Saving Time?
+ text_jump UnknownText_0x1c6095
+ db "@"
+; 0x164f9
+
+.Text_LostInstructionBooklet: ; 0x164f9
+ ; I lost the instruction booklet for the POKéGEAR.
+ ; Come back again in a while.
+ text_jump UnknownText_0x1c60d1
+ db "@"
+; 0x164fe
+
+.Text_SwitchToDST: ; 0x164fe
+ ; Do you want to switch to Daylight Saving Time?
+ text_jump UnknownText_0x1c6000
+ db "@"
+; 0x16503
+
+.Text_SetClockForward: ; 0x16503
+ ; I set the clock forward by one hour.
+ text_jump UnknownText_0x1c6030
+ db "@"
+; 0x16508
+
+.Text_IsDSTOver: ; 0x16508
+ ; Is Daylight Saving Time over?
+ text_jump UnknownText_0x1c6056
+ db "@"
+; 0x1650d
+
+.Text_SetClockBack: ; 0x1650d
+ ; I put the clock back one hour.
+ text_jump UnknownText_0x1c6075
+ db "@"
+; 0x16512
+
+Mom_SetUpWithdrawMenu: ; 16512
+ ld de, Mon_WithdrawString
+ jr Mom_ContinueMenuSetup
+
+Mom_SetUpDepositMenu: ; 16517
+ ld de, Mom_DepositString
+Mom_ContinueMenuSetup: ; 1651a
+ push de
+ xor a
+ ld [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, Money
+ lb bc, PRINTNUM_MONEY | 3, 6
+ call PrintNum
+ hlcoord 1, 6
+ pop de
+ call PlaceString
+ hlcoord 12, 6
+ ld de, StringBuffer2
+ lb bc, PRINTNUM_MONEY | PRINTNUM_LEADINGZEROS | 3, 6
+ call PrintNum
+ call UpdateSprites
+ call CGBOnly_CopyTilemapAtOnce
+ ret
+; 1656b
+
+Mom_Wait10Frames: ; 1656b
+ ld c, 10
+ call DelayFrames
+ ret
+; 16571
+
+Mom_WithdrawDepositMenuJoypad: ; 16571
+.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
+ ld [hBGMapMode], a
+ hlcoord 12, 6
+ ld bc, 7
+ ld a, " "
+ call ByteFill
+ hlcoord 12, 6
+ ld de, StringBuffer2
+ lb bc, PRINTNUM_MONEY | PRINTNUM_LEADINGZEROS | 3, 6
+ call PrintNum
+ ld 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, StringBuffer2
+ farcall GiveMoney
+ ret
+
+.decrementdigit
+ ld hl, .DigitQuantities
+ call .getdigitquantity
+ ld c, l
+ ld b, h
+ ld de, StringBuffer2
+ 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
+; 16613
+
+.DigitQuantities: ; 16613
+ 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
+; 16649
+
+UnknownText_0x16649: ; 0x16649
+ ; Wow, that's a cute #MON. Where did you get it? … So, you're leaving on an adventure… OK! I'll help too. But what can I do for you? I know! I'll save money for you. On a long journey, money's important. Do you want me to save your money?
+ text_jump UnknownText_0x1bd77f
+ db "@"
+; 0x1664e
+
+UnknownText_0x1664e: ; 0x1664e
+ ; OK, I'll take care of your money.
+ text_jump UnknownText_0x1bd868
+ db "@"
+; 0x16653
+
+UnknownText_0x16653: ; 0x16653
+ ; Be careful. #MON are your friends. You need to work as a team. Now, go on!
+ text_jump UnknownText_0x1bd88e
+ db "@"
+; 0x16658
+
+UnknownText_0x16658: ; 0x16658
+ ; Hi! Welcome home! You're trying very hard, I see. I've kept your room tidy. Or is this about your money?
+ text_jump UnknownText_0x1bd8da
+ db "@"
+; 0x1665d
+
+UnknownText_0x1665d: ; 0x1665d
+ ; What do you want to do?
+ text_jump UnknownText_0x1bd942
+ db "@"
+; 0x16662
+
+UnknownText_0x16662: ; 0x16662
+ ; How much do you want to save?
+ text_jump UnknownText_0x1bd95b
+ db "@"
+; 0x16667
+
+UnknownText_0x16667: ; 0x16667
+ ; How much do you want to take?
+ text_jump UnknownText_0x1bd97a
+ db "@"
+; 0x1666c
+
+UnknownText_0x1666c: ; 0x1666c
+ ; Do you want to save some money?
+ text_jump UnknownText_0x1bd999
+ db "@"
+; 0x16671
+
+UnknownText_0x16671: ; 0x16671
+ ; You haven't saved that much.
+ text_jump UnknownText_0x1bd9ba
+ db "@"
+; 0x16676
+
+UnknownText_0x16676: ; 0x16676
+ ; You can't take that much.
+ text_jump UnknownText_0x1bd9d7
+ db "@"
+; 0x1667b
+
+UnknownText_0x1667b: ; 0x1667b
+ ; You don't have that much.
+ text_jump UnknownText_0x1bd9f1
+ db "@"
+; 0x16680
+
+UnknownText_0x16680: ; 0x16680
+ ; You can't save that much.
+ text_jump UnknownText_0x1bda0b
+ db "@"
+; 0x16685
+
+UnknownText_0x16685: ; 0x16685
+ ; OK, I'll save your money. Trust me! , stick with it!
+ text_jump UnknownText_0x1bda25
+ db "@"
+; 0x1668a
+
+UnknownText_0x1668a: ; 0x1668a
+ ; Your money's safe here! Get going!
+ text_jump UnknownText_0x1bda5b
+ db "@"
+; 0x1668f
+
+UnknownText_0x1668f: ; 0x1668f
+ ; , don't give up!
+ text_jump UnknownText_0x1bda7e
+ db "@"
+; 0x16694
+
+UnknownText_0x16694: ; 0x16694
+ ; Just do what you can.
+ text_jump UnknownText_0x1bda90
+ db "@"
+; 0x16699
+
+Mom_SavedString: ; 16699
+ db "SAVED@"
+; 1669f
+
+Mon_WithdrawString: ; 1669f
+ db "WITHDRAW@"
+; 166a8
+
+Mom_DepositString: ; 166a8
+ db "DEPOSIT@"
+; 166b0
+
+Mom_HeldString: ; 166b0
+ db "HELD@"
+; 166b5
+
+MenuDataHeader_0x166b5: ; 0x166b5
+ db $40 ; flags
+ db 00, 00 ; start coords
+ db 10, 10 ; end coords
+ dw MenuData2_0x166bd
+ db 1 ; default option
+; 0x166bd
+
+MenuData2_0x166bd: ; 0x166bd
+ db $80 ; flags
+ db 4 ; items
+ db "GET@"
+ db "SAVE@"
+ db "CHANGE@"
+ db "CANCEL@"
+; 0x166d6