diff options
author | mid-kid <esteve.varela@gmail.com> | 2018-03-13 13:07:16 +0100 |
---|---|---|
committer | mid-kid <esteve.varela@gmail.com> | 2018-03-13 13:21:40 +0100 |
commit | baa0dc5a963a79843b37888bcfe1d2dfe833ade9 (patch) | |
tree | 968c86105bd67a3121d8f3f20018bfc59191f4c9 /engine/overworld/time.asm | |
parent | 12070ca50067d3abe36a730190f88ee43f2cace9 (diff) |
Organize the engine/ directory
This is an informed attempt at reorganizing the engine/ directory by
creating categorized subdirectories, in order to make it easier to
navigate and find things.
The directories created are as follows:
* engine/game: Contains all "minigames", things like the unown puzzle
and slot machine.
* engine/gfx: Contains all handling of graphics. From loading palettes
to playing animations.
* engine/link: Contains all multiplayer functionality.
* engine/menu: Contains all generic/misc. menus and menu code.
Other, more specialized menus are in their own subdirectories (pokedex,
pokegear, party menu, etc).
* engine/overworld: Contains all handling of the overworld. From loading
and connecting maps to wild encounters and the scripting engine.
* engine/pokegear: In the same vein as engine/pokedex, except it could
use some more splitting up.
* engine/pokemon: Contains everything related to manipulating pokemon
data. From the pokemon storage system to evolution and mail.
* engine/printer: Contains everything related to printing things as well
as the printer communication.
* engine/title: Contains intro sequences, title screens and credits.
Diffstat (limited to 'engine/overworld/time.asm')
-rwxr-xr-x | engine/overworld/time.asm | 465 |
1 files changed, 465 insertions, 0 deletions
diff --git a/engine/overworld/time.asm b/engine/overworld/time.asm new file mode 100755 index 000000000..0f83447cc --- /dev/null +++ b/engine/overworld/time.asm @@ -0,0 +1,465 @@ +_InitializeStartDay: ; 113d6 + call InitializeStartDay + ret +; 113da + +ClearDailyTimers: ; 113da + xor a + ld [wLuckyNumberDayBuffer], a + ld [wUnusedTwoDayTimer], a + ld [wDailyResetTimer], a + ret +; 113e5 + +InitCallReceiveDelay:: ; 113e5 + xor a + ld [wTimeCyclesSinceLastCall], a + +NextCallReceiveDelay: ; 113e9 + ld a, [wTimeCyclesSinceLastCall] + cp 3 + jr c, .okay + ld a, 3 + +.okay + ld e, a + ld d, 0 + ld hl, .ReceiveCallDelays + add hl, de + ld a, [hl] + jp RestartReceiveCallDelay +; 113fd + +.ReceiveCallDelays: + db 20, 10, 5, 3 +; 11401 + +CheckReceiveCallTimer: ; 11401 + call CheckReceiveCallDelay ; check timer + ret nc + ld hl, wTimeCyclesSinceLastCall + ld a, [hl] + cp 3 + jr nc, .ok + inc [hl] + +.ok + call NextCallReceiveDelay ; restart timer + scf + ret +; 11413 + +InitOneDayCountdown: ; 11413 + ld a, 1 + +InitNDaysCountdown: ; 11415 + ld [hl], a + push hl + call UpdateTime + pop hl + inc hl + call CopyDayToHL + ret +; 11420 + +CheckDayDependentEventHL: ; 11420 + inc hl + push hl + call CalcDaysSince + call GetDaysSince + pop hl + dec hl + call UpdateTimeRemaining + ret +; 1142e + +RestartReceiveCallDelay: ; 1142e + ld hl, wReceiveCallDelay_MinsRemaining + ld [hl], a + call UpdateTime + ld hl, wReceiveCallDelay_StartTime + call CopyDayHourMinToHL + ret +; 1143c + +CheckReceiveCallDelay: ; 1143c + ld hl, wReceiveCallDelay_StartTime + call CalcMinsHoursDaysSince + call GetMinutesSinceIfLessThan60 + ld hl, wReceiveCallDelay_MinsRemaining + call UpdateTimeRemaining + ret +; 1144c + +RestartDailyResetTimer: ; 1144c + ld hl, wDailyResetTimer + jp InitOneDayCountdown +; 11452 + +CheckDailyResetTimer:: ; 11452 + ld hl, wDailyResetTimer + call CheckDayDependentEventHL + ret nc + xor a + ld hl, wDailyFlags + ld [hli], a ; wDailyFlags + ld [hli], a ; wWeeklyFlags + ld [hli], a ; wSwarmFlags + ld [hl], a ; wSwarmFlags + 1 + ld hl, wDailyRematchFlags +rept 4 + ld [hli], a +endr + ld hl, wDailyPhoneItemFlags +rept 4 + ld [hli], a +endr + ld hl, wDailyPhoneTimeOfDayFlags +rept 4 + ld [hli], a +endr + ld hl, wKenjiBreakTimer + ld a, [hl] + and a + jr z, .RestartKenjiBreakCountdown + dec [hl] + jr nz, .DontRestartKenjiBreakCountdown +.RestartKenjiBreakCountdown: + call SampleKenjiBreakCountdown +.DontRestartKenjiBreakCountdown: + jr RestartDailyResetTimer +; 11485 + +SampleKenjiBreakCountdown: ; 11485 +; Generate a random number between 3 and 6 + call Random + and %11 + add 3 + ld [wKenjiBreakTimer], a + ret +; 11490 + +StartBugContestTimer: ; 11490 + ld a, BUG_CONTEST_MINUTES + ld [wBugContestMinsRemaining], a + ld a, BUG_CONTEST_SECONDS + ld [wBugContestSecsRemaining], a + call UpdateTime + ld hl, wBugContestStartTime + call CopyDayHourMinSecToHL + ret +; 114a4 + + +CheckBugContestTimer:: ; 114a4 (4:54a4) + ld hl, wBugContestStartTime + call CalcSecsMinsHoursDaysSince + ld a, [wDaysSince] + and a + jr nz, .timed_out + ld a, [wHoursSince] + and a + jr nz, .timed_out + ld a, [wSecondsSince] + ld b, a + ld a, [wBugContestSecsRemaining] + sub b + jr nc, .okay + add 60 + +.okay + ld [wBugContestSecsRemaining], a + ld a, [wMinutesSince] + ld b, a + ld a, [wBugContestMinsRemaining] + sbc b + ld [wBugContestMinsRemaining], a + jr c, .timed_out + and a + ret + +.timed_out + xor a + ld [wBugContestMinsRemaining], a + ld [wBugContestSecsRemaining], a + scf + ret + + +InitializeStartDay: ; 114dd + call UpdateTime + ld hl, wTimerEventStartDay + call CopyDayToHL + ret +; 114e7 + +CheckPokerusTick:: ; 114e7 + ld hl, wTimerEventStartDay + call CalcDaysSince + call GetDaysSince + and a + jr z, .done ; not even a day has passed since game start + ld b, a + farcall ApplyPokerusTick +.done + xor a + ret +; 114fc + +SetUnusedTwoDayTimer: ; 114fc + ld a, 2 + ld hl, wUnusedTwoDayTimer + ld [hl], a + call UpdateTime + ld hl, wUnusedTwoDayTimerStartDate + call CopyDayToHL + ret +; 1150c + +CheckUnusedTwoDayTimer: ; 1150c + ld hl, wUnusedTwoDayTimerStartDate + call CalcDaysSince + call GetDaysSince + ld hl, wUnusedTwoDayTimer + call UpdateTimeRemaining + ret +; 1151c + +; unused + ld hl, wDailyFlags + set DAILYFLAGS_FISH_SWARM_F, [hl] + ret +; 11522 + +; unused + and a + ld hl, wDailyFlags + bit DAILYFLAGS_FISH_SWARM_F, [hl] + ret nz + scf + ret +; 1152b + +RestartLuckyNumberCountdown: ; 1152b + call .GetDaysUntilNextFriday + ld hl, wLuckyNumberDayBuffer + jp InitNDaysCountdown +; 11534 + +.GetDaysUntilNextFriday: ; 11534 + call GetWeekday + ld c, a + ld a, FRIDAY + sub c + jr z, .friday_saturday + jr nc, .earlier ; could have done "ret nc" + +.friday_saturday + add 7 + +.earlier + ret +; 11542 + +_CheckLuckyNumberShowFlag: ; 11542 + ld hl, wLuckyNumberDayBuffer + jp CheckDayDependentEventHL +; 11548 + +DoMysteryGiftIfDayHasPassed: ; 11548 + ld a, BANK(sMysteryGiftTimer) + call GetSRAMBank + ld hl, sMysteryGiftTimer + ld a, [hli] + ld [wBuffer1], a + ld a, [hl] + ld [wBuffer2], a + call CloseSRAM + + ld hl, wBuffer1 + call CheckDayDependentEventHL + jr nc, .not_timed_out + ld hl, wBuffer1 + call InitOneDayCountdown + call CloseSRAM + farcall Function1050c8 + +.not_timed_out + ld a, BANK(sMysteryGiftTimer) + call GetSRAMBank + ld hl, wBuffer1 + ld a, [hli] + ld [sMysteryGiftTimer], a + ld a, [hl] + ld [sMysteryGiftTimer + 1], a + call CloseSRAM + ret +; 11586 + +UpdateTimeRemaining: ; 11586 +; If the amount of time elapsed exceeds the capacity of its +; unit, skip this part. + cp -1 + jr z, .set_carry + ld c, a + ld a, [hl] ; time remaining + sub c + jr nc, .ok + xor a + +.ok + ld [hl], a + jr z, .set_carry + xor a + ret + +.set_carry + xor a + ld [hl], a + scf + ret +; 11599 + +GetSecondsSinceIfLessThan60: ; 11599 + ld a, [wDaysSince] + and a + jr nz, GetTimeElapsed_ExceedsUnitLimit + ld a, [wHoursSince] + and a + jr nz, GetTimeElapsed_ExceedsUnitLimit + ld a, [wMinutesSince] + jr nz, GetTimeElapsed_ExceedsUnitLimit + ld a, [wSecondsSince] + ret +; 115ae + +GetMinutesSinceIfLessThan60: ; 115ae + ld a, [wDaysSince] + and a + jr nz, GetTimeElapsed_ExceedsUnitLimit + ld a, [wHoursSince] + and a + jr nz, GetTimeElapsed_ExceedsUnitLimit + ld a, [wMinutesSince] + ret +; 115be + +GetHoursSinceIfLessThan24: ; 115be + ld a, [wDaysSince] + and a + jr nz, GetTimeElapsed_ExceedsUnitLimit + ld a, [wHoursSince] + ret +; 115c8 + +GetDaysSince: ; 115c8 + ld a, [wDaysSince] + ret +; 115cc + +GetTimeElapsed_ExceedsUnitLimit: ; 115cc + ld a, -1 + ret +; 115cf + +CalcDaysSince: ; 115cf + xor a + jr _CalcDaysSince +; 115d2 + +CalcHoursDaysSince: ; 115d2 + inc hl + xor a + jr _CalcHoursDaysSince +; 115d6 + +CalcMinsHoursDaysSince: ; 115d6 + inc hl + inc hl + xor a + jr _CalcMinsHoursDaysSince +; 115db + +CalcSecsMinsHoursDaysSince: ; 115db + inc hl + inc hl + inc hl + ld a, [hSeconds] + ld c, a + sub [hl] + jr nc, .skip + add 60 +.skip + ld [hl], c ; current seconds + dec hl + ld [wSecondsSince], a ; seconds since + +_CalcMinsHoursDaysSince: ; 115eb + ld a, [hMinutes] + ld c, a + sbc [hl] + jr nc, .skip + add 60 +.skip + ld [hl], c ; current minutes + dec hl + ld [wMinutesSince], a ; minutes since + +_CalcHoursDaysSince: ; 115f8 + ld a, [hHours] + ld c, a + sbc [hl] + jr nc, .skip + add 24 +.skip + ld [hl], c ; current hours + dec hl + ld [wHoursSince], a ; hours since + +_CalcDaysSince: + ld a, [wCurDay] + ld c, a + sbc [hl] + jr nc, .skip + add 20 * 7 +.skip + ld [hl], c ; current days + ld [wDaysSince], a ; days since + ret +; 11613 + +CopyDayHourMinSecToHL: ; 11613 + ld a, [wCurDay] + ld [hli], a + ld a, [hHours] + ld [hli], a + ld a, [hMinutes] + ld [hli], a + ld a, [hSeconds] + ld [hli], a + ret +; 11621 + +CopyDayToHL: ; 11621 + ld a, [wCurDay] + ld [hl], a + ret +; 11626 + +CopyDayHourToHL: ; 11626 + ld a, [wCurDay] + ld [hli], a + ld a, [hHours] + ld [hli], a + ret +; 1162e + +CopyDayHourMinToHL: ; 1162e + ld a, [wCurDay] + ld [hli], a + ld a, [hHours] + ld [hli], a + ld a, [hMinutes] + ld [hli], a + ret +; 11639 |