No Game Tick Delay
POKE ABC5,18
Berk's per-frame update at Update_Berk_State_TickCounter returns early while GameTickCounter is non-zero. This changes the JR Z into an absolute JR, so the delay gate is skipped and Berk always continues into the rest of the update.
ABC0 LD HL,72F2 If the tick counter is non-zero, decrease it and return; otherwise continue.
ABC3 LD A,(HL)
ABC4 OR A
ABC5 JR Z,ABC9
ABC7 DEC (HL)
ABC5 JR ABC9
Never Fired On Task Timeout
POKE AC81,00
POKE AC82,00
POKE AC83,00
When the task frame counter runs out in Super Berk mode, AC7D jumps to Update_Berk_State_PrintStatusAndRestart, which prints the ratings (including "YOU'RE FIRED") and restarts. These POKEs remove that jump, so a timed-out Super Berk game continues instead of ending.
AC7D LD A,(Flag_LearnerBerkMode) If Learner Berk mode is clear (Super Berk), jump to the fired / ratings restart at Update_Berk_State_PrintStatusAndRestart.
AC80 OR A
AC81 JP Z,Update_Berk_State_PrintStatusAndRestart
AC81 NOP
AC82 NOP
AC83 NOP
Freeze Task Three Timer
POKE C389,00
While the task-three timer at TaskThreeTimer is non-zero, Update_Task_Three_Entities counts it down with DEC A at C389. This NOPs that decrease, so the timer value stops falling and the countdown side-effects no longer advance.
C37B LD A,(TaskThreeTimer) Load the task-three timer and, when it is non-zero, decrease it.
C37E OR A
C37F JR Z,Update_Task_Three_Entities_RunStateMachine
C389 DEC A
C389 NOP
Learner Or Super Berk
POKE Flag_LearnerBerkMode,00
POKE Flag_LearnerBerkMode,01
Flag_LearnerBerkMode is the Learner Berk mode flag written by the main menu at MainMenu_ChooseLearnerOrSuper. 00 selects Super Berk; 01 selects Learner Berk. Apply after the menu choice (or it will be overwritten). Learner mode softens timing and skips the Super-only timeout jump at AC81.
Start On Task
POKE CurrentTaskIndex,nn
CurrentTaskIndex is the current task index. After a game has started, set it to one of:
The briefing printer at Print_MessageByIndex reads this index through the table at Messaging_BerkGetMeACanOfWorms. You will usually also want CurrentTaskPhase non-zero so the task phase is treated as active (see Update_Berk_State).
Infinite Time
POKE AC6B,18
When the task frame counter at FrameCounter hits zero, AC69 compares the task timer at TaskTimer with A0. The original JR C at AC6B only skips ahead to the attribute-strip path at Update_Berk_State_AttrStripFromSeed when the timer is below that threshold; otherwise control falls into the fanfare / timeout path at AC6D (and can reach the "YOU'RE FIRED" restart at Update_Berk_State_PrintStatusAndRestart). This changes that instruction into an absolute JR, so the timeout path is always skipped.
AC62 LD A,(TaskTimer) Advance the task timer and, if it is less than A0, jump to the attribute-strip path.
AC65 INC A
AC66 LD (TaskTimer),A
AC69 CP A0
AC6B JR C,Update_Berk_State_AttrStripFromSeed
AC6B JR Update_Berk_State_AttrStripFromSeed
Maximum Bonus
POKE ACDB,00
On the quiet frame-tick path, Update_Berk_State_Hit paints the status strip and Update_Berk_State_PartC rotates the timer glyph. ACD5 then counts Pointer_BerkHeldEntity down with DEC HL at ACDB before reprinting it via Initialise_Room_Display_HeldEntity. That word is the bonus. This NOPs the decrease, so the bonus no longer drains on each tick.
ACD5 LD HL,(Pointer_BerkHeldEntity) If the bonus is non-zero, decrease it and reprint it via Initialise_Room_Display_HeldEntity.
ACD8 LD A,H
ACD9 OR L
ACDA RET Z
ACDB DEC HL
ACDB NOP