pokecrystal-board/event/mom.asm

752 lines
12 KiB
NASM
Raw Normal View History

Special_BankOfMom: ; 16218
2015-10-16 10:35:43 -07:00
ld a, [hInMenu]
push af
ld a, $1
2015-10-16 10:35:43 -07:00
ld [hInMenu], a
xor a
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
2015-12-18 17:07:09 -08:00
.loop
2015-10-24 16:49:19 -07:00
ld a, [wJumptableIndex]
bit 7, a
2015-12-18 17:07:09 -08:00
jr nz, .done
call .RunJumptable
jr .loop
2015-12-18 17:07:09 -08:00
.done
pop af
2015-10-16 10:35:43 -07:00
ld [hInMenu], a
ret
; 16233
2015-12-18 17:07:09 -08:00
.RunJumptable: ; 16233
2015-10-24 16:49:19 -07:00
ld a, [wJumptableIndex]
ld e, a
ld d, 0
2015-10-19 13:49:29 -07:00
ld hl, .jumptable
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
; 16242
2015-10-19 13:49:29 -07:00
.jumptable: ; 16242
2015-12-18 17:07:09 -08:00
jumptable_start
jumptable .CheckIfBankInitialized
jumptable .InitializeBank
jumptable .IsThisAboutYourMoney
jumptable .AccessBankOfMom
jumptable .StoreMoney
jumptable .TakeMoney
jumptable .StopOrStartSavingMoney
jumptable .AskDST
jumptable .JustDoWhatYouCan
; 16254
2015-10-19 13:49:29 -07:00
.CheckIfBankInitialized: ; 16254
2015-11-12 21:49:27 -08:00
ld a, [wMomSavingMoney]
bit 7, a
2015-10-19 13:49:29 -07:00
jr nz, .savingmoneyalready
set 7, a
2015-11-12 21:49:27 -08:00
ld [wMomSavingMoney], a
ld a, $1
2015-10-19 13:49:29 -07:00
jr .done_0
2015-10-19 13:49:29 -07:00
.savingmoneyalready
ld a, $2
2015-10-19 13:49:29 -07:00
.done_0
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
ret
; 1626a
2015-10-19 13:49:29 -07:00
.InitializeBank: ; 1626a
ld hl, UnknownText_0x16649
call PrintText
call YesNoBox
2015-10-19 13:49:29 -07:00
jr c, .DontSaveMoney
ld hl, UnknownText_0x1664e
call PrintText
2015-10-19 13:49:29 -07:00
ld a, %10000001
jr .done_1
2015-10-19 13:49:29 -07:00
.DontSaveMoney
ld a, %10000000
2015-10-19 13:49:29 -07:00
.done_1
2015-11-12 21:49:27 -08:00
ld [wMomSavingMoney], a
ld hl, UnknownText_0x16653
call PrintText
ld a, $8
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
ret
; 16290
2015-10-19 13:49:29 -07:00
.IsThisAboutYourMoney: ; 16290
ld hl, UnknownText_0x16658
call PrintText
call YesNoBox
2015-10-19 13:49:29 -07:00
jr c, .nope
ld a, $3
2015-10-19 13:49:29 -07:00
jr .done_2
2015-10-19 13:49:29 -07:00
.nope
call DSTChecks
ld a, $7
2015-10-19 13:49:29 -07:00
.done_2
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
ret
; 162a8
2015-10-19 13:49:29 -07:00
.AccessBankOfMom: ; 162a8
ld hl, UnknownText_0x1665d
call PrintText
2015-11-11 13:11:08 -08:00
call LoadStandardMenuDataHeader
ld hl, MenuDataHeader_0x166b5
call CopyMenuDataHeader
2015-12-15 15:59:49 -08:00
call VerticalMenu
call CloseWindow
2015-10-19 13:49:29 -07:00
jr c, .cancel
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
cp $1
2015-10-19 13:49:29 -07:00
jr z, .withdraw
cp $2
2015-10-19 13:49:29 -07:00
jr z, .deposit
cp $3
2015-10-19 13:49:29 -07:00
jr z, .stopsaving
2015-10-19 13:49:29 -07:00
.cancel
ld a, $7
2015-10-19 13:49:29 -07:00
jr .done_3
2015-10-19 13:49:29 -07:00
.withdraw
ld a, $5
2015-10-19 13:49:29 -07:00
jr .done_3
2015-10-19 13:49:29 -07:00
.deposit
ld a, $4
2015-10-19 13:49:29 -07:00
jr .done_3
2015-10-19 13:49:29 -07:00
.stopsaving
ld a, $6
2015-10-19 13:49:29 -07:00
.done_3
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
ret
; 162e0
2015-10-19 13:49:29 -07:00
.StoreMoney: ; 162e0
ld hl, UnknownText_0x16662
call PrintText
xor a
ld hl, StringBuffer2
rept 2
ld [hli], a
endr
ld [hl], a
ld a, $5
ld [wcf64], a
2015-11-11 13:11:08 -08:00
call LoadStandardMenuDataHeader
call Function16517
call Function1656b
call Function16571
call CloseWindow
2015-10-19 13:49:29 -07:00
jr c, .CancelDeposit
ld hl, StringBuffer2
ld a, [hli]
or [hl]
inc hl
or [hl]
2015-10-19 13:49:29 -07:00
jr z, .CancelDeposit
ld de, Money
ld bc, StringBuffer2
callba CompareMoney
2015-10-19 13:49:29 -07:00
jr c, .DontHaveThatMuchToDeposit
ld hl, StringBuffer2
ld de, StringBuffer2 + 3
2015-10-19 13:49:29 -07:00
ld bc, 3
call CopyBytes
2015-11-12 21:49:27 -08:00
ld bc, wMomsMoney
ld de, StringBuffer2
callba GiveMoney
2015-10-19 13:49:29 -07:00
jr c, .CantDepositThatMuch
ld bc, StringBuffer2 + 3
ld de, Money
callba TakeMoney
ld hl, StringBuffer2
2015-11-12 21:49:27 -08:00
ld de, wMomsMoney
2015-10-19 13:49:29 -07:00
ld bc, 3
call CopyBytes
ld de, SFX_TRANSACTION
call PlaySFX
call WaitSFX
ld hl, UnknownText_0x1668a
call PrintText
ld a, $8
2015-10-19 13:49:29 -07:00
jr .done_4
2015-10-19 13:49:29 -07:00
.DontHaveThatMuchToDeposit
ld hl, UnknownText_0x1667b
call PrintText
ret
2015-10-19 13:49:29 -07:00
.CantDepositThatMuch
ld hl, UnknownText_0x16680
call PrintText
ret
2015-10-19 13:49:29 -07:00
.CancelDeposit
ld a, $7
2015-10-19 13:49:29 -07:00
.done_4
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
ret
; 16373
2015-10-19 13:49:29 -07:00
.TakeMoney: ; 16373
ld hl, UnknownText_0x16667
call PrintText
xor a
ld hl, StringBuffer2
rept 2
ld [hli], a
endr
ld [hl], a
ld a, $5
ld [wcf64], a
2015-11-11 13:11:08 -08:00
call LoadStandardMenuDataHeader
call Function16512
call Function1656b
call Function16571
call CloseWindow
2015-10-19 13:49:29 -07:00
jr c, .CancelWithdraw
ld hl, StringBuffer2
ld a, [hli]
or [hl]
inc hl
or [hl]
2015-10-19 13:49:29 -07:00
jr z, .CancelWithdraw
ld hl, StringBuffer2
ld de, StringBuffer2 + 3
ld bc, 3
call CopyBytes
2015-11-12 21:49:27 -08:00
ld de, wMomsMoney
ld bc, StringBuffer2
callba CompareMoney
2015-10-19 13:49:29 -07:00
jr c, .InsufficientFundsInBank
ld bc, Money
ld de, StringBuffer2
callba GiveMoney
2015-10-19 13:49:29 -07:00
jr c, .NotEnoughRoomInWallet
ld bc, StringBuffer2 + 3
2015-11-12 21:49:27 -08:00
ld de, wMomsMoney
callba 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
2015-10-19 13:49:29 -07:00
jr .done_5
2015-10-19 13:49:29 -07:00
.InsufficientFundsInBank
ld hl, UnknownText_0x16671
call PrintText
ret
2015-10-19 13:49:29 -07:00
.NotEnoughRoomInWallet
ld hl, UnknownText_0x16676
call PrintText
ret
2015-10-19 13:49:29 -07:00
.CancelWithdraw
ld a, $7
2015-10-19 13:49:29 -07:00
.done_5
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
ret
; 16406
2015-10-19 13:49:29 -07:00
.StopOrStartSavingMoney: ; 16406
ld hl, UnknownText_0x1666c
call PrintText
call YesNoBox
2015-10-19 13:49:29 -07:00
jr c, .StopSavingMoney
ld a, $81
2015-11-12 21:49:27 -08:00
ld [wMomSavingMoney], a
ld hl, UnknownText_0x16685
call PrintText
ld a, $8
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
ret
2015-10-19 13:49:29 -07:00
.StopSavingMoney
ld a, $80
2015-11-12 21:49:27 -08:00
ld [wMomSavingMoney], a
ld a, $7
2015-10-24 16:49:19 -07:00
ld [wJumptableIndex], a
ret
; 1642d
2015-10-19 13:49:29 -07:00
.AskDST: ; 1642d
ld hl, UnknownText_0x16694
call PrintText
2015-10-19 13:49:29 -07:00
.JustDoWhatYouCan: ; 16433
2015-10-24 16:49:19 -07:00
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]
2015-12-18 17:07:09 -08:00
jr z, .NotDST
and a ; within one hour of 00:00?
jr z, .LostBooklet
jr .loop
2015-12-18 17:07:09 -08:00
.NotDST
cp 23 ; within one hour of 23:00?
jr nz, .loop
; fallthrough
.LostBooklet
2015-12-18 17:07:09 -08:00
call .ClearBox
bccoord 1, 14
2015-12-18 17:07:09 -08:00
ld hl, .Text_AdjustClock
call PlaceWholeStringInBoxAtOnce
call YesNoBox
ret c
2015-12-18 17:07:09 -08:00
call .ClearBox
bccoord 1, 14
2015-12-18 17:07:09 -08:00
ld hl, .Text_LostInstructionBooklet
call PlaceWholeStringInBoxAtOnce
ret
.loop
2015-12-18 17:07:09 -08:00
call .ClearBox
bccoord 1, 14
ld a, [wDST]
bit 7, a
2015-12-18 17:07:09 -08:00
jr z, .SetDST
ld hl, .Text_IsDSTOver
call PlaceWholeStringInBoxAtOnce
call YesNoBox
ret c
ld a, [wDST]
res 7, a
ld [wDST], a
2015-12-18 17:07:09 -08:00
call .SetClockBack
call .ClearBox
bccoord 1, 14
2015-12-18 17:07:09 -08:00
ld hl, .Text_SetClockBack
call PlaceWholeStringInBoxAtOnce
ret
2015-12-18 17:07:09 -08:00
.SetDST
ld hl, .Text_SwitchToDST
call PlaceWholeStringInBoxAtOnce
call YesNoBox
ret c
ld a, [wDST]
set 7, a
ld [wDST], a
2015-12-18 17:07:09 -08:00
call .SetClockForward
call .ClearBox
bccoord 1, 14
2015-12-18 17:07:09 -08:00
ld hl, .Text_SetClockForward
call PlaceWholeStringInBoxAtOnce
ret
; 164b9
2015-12-18 17:07:09 -08:00
.SetClockForward: ; 164b9
ld a, [StartHour]
add 1
sub 24
2015-12-18 17:07:09 -08:00
jr nc, .DontLoopHourForward
add 24
2015-12-18 17:07:09 -08:00
.DontLoopHourForward
ld [StartHour], a
ccf
ld a, [StartDay]
adc 0
ld [StartDay], a
ret
; 164d1
2015-12-18 17:07:09 -08:00
.SetClockBack: ; 164d1
ld a, [StartHour]
sub 1
2015-12-18 17:07:09 -08:00
jr nc, .DontLoopHourBack
add 24
2015-12-18 17:07:09 -08:00
.DontLoopHourBack
ld [StartHour], a
ld a, [StartDay]
sbc 0
2015-12-18 17:07:09 -08:00
jr nc, .DontLoopDayBack
add 7
2015-12-18 17:07:09 -08:00
.DontLoopDayBack
ld [StartDay], a
ret
; 164ea
2015-12-18 17:07:09 -08:00
.ClearBox: ; 164ea
hlcoord 1, 14
lb bc, 3, 18
call ClearBox
ret
; 164f4
2015-12-18 17:07:09 -08:00
.Text_AdjustClock: ; 0x164f4
; Do you want to adjust your clock for Daylight Saving Time?
text_jump UnknownText_0x1c6095
db "@"
; 0x164f9
2015-12-18 17:07:09 -08:00
.Text_LostInstructionBooklet: ; 0x164f9
; I lost the instruction booklet for the POKéGEAR.
; Come back again in a while.
text_jump UnknownText_0x1c60d1
db "@"
; 0x164fe
2015-12-18 17:07:09 -08:00
.Text_SwitchToDST: ; 0x164fe
; Do you want to switch to Daylight Saving Time?
text_jump UnknownText_0x1c6000
db "@"
; 0x16503
2015-12-18 17:07:09 -08:00
.Text_SetClockForward: ; 0x16503
; I set the clock forward by one hour.
text_jump UnknownText_0x1c6030
db "@"
; 0x16508
2015-12-18 17:07:09 -08:00
.Text_IsDSTOver: ; 0x16508
; Is Daylight Saving Time over?
text_jump UnknownText_0x1c6056
db "@"
; 0x1650d
2015-12-18 17:07:09 -08:00
.Text_SetClockBack: ; 0x1650d
; I put the clock back one hour.
text_jump UnknownText_0x1c6075
db "@"
; 0x16512
Function16512: ; 16512
ld de, String_1669f
jr Function1651a
Function16517: ; 16517
ld de, String_166a8
Function1651a: ; 1651a
push de
xor a
ld [hBGMapMode], a
hlcoord 0, 0
lb bc, 6, 18
call TextBox
hlcoord 1, 2
ld de, String_16699
call PlaceString
hlcoord 12, 2
2015-11-12 21:49:27 -08:00
ld de, wMomsMoney
lb bc, PRINTNUM_MONEY | 3, 6
call PrintNum
hlcoord 1, 4
ld de, String_166b0
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 Function3238
ret
; 1656b
Function1656b: ; 1656b
ld c, 10
call DelayFrames
ret
; 16571
Function16571: ; 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
; 165b9
.dpadaction: ; 165b9
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
callba GiveMoney
ret
.decrementdigit
ld hl, .DigitQuantities
call .getdigitquantity
ld c, l
ld b, h
ld de, StringBuffer2
callba TakeMoney
ret
; 16607
.getdigitquantity: ; 16607
ld a, [wMomBankDigitCursorPosition]
push de
ld e, a
ld d, 0
rept 3
add hl, de
endr
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
String_16699: ; 16699
db "SAVED@"
; 1669f
String_1669f: ; 1669f
db "WITHDRAW@"
; 166a8
String_166a8: ; 166a8
db "DEPOSIT@"
; 166b0
String_166b0: ; 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