LDA screenSection \ If screenSection is positive, jump to main6 to skip BPL main6 \ the following instruction INC screenSection \ If screenSection is negative, then we increment it \ \ This kickstarts the custom screen interrupt handler \ on the first time round the main driving loop, as the \ call to SetCustomScreen at the start of the routine \ sets screenSection to -2, and this increment bumps it \ up to -1, which makes the screen handler start \ applying the custom screen effect \ \ In other words, this displays the driving screen for \ the first time, after waiting for all the drawing \ routines in part 2 to finish, so we don't get to see \ the screen being drawn .main6 LDA crashedIntoFence \ If crashedIntoFence = 0 then we have not crashed into BEQ main10 \ the fence, so jump to main10 to continue with the main \ driving loop in part 5 INC crashedIntoFence \ Otherwise crashedIntoFence must be &FF, which means we \ have crashed into the fence, so increment it back to \ zero, to clear the "we have crashed" flag \ We now pause for a few seconds, before jumping back to \ the relevant starting point for the loop LDA #156 \ Set irqCounter = 156 STA irqCounter .main7 LDA irqCounter \ Fetch irqCounter, which gets incremented every time \ the IRQ routine reaches section 4 of the custom screen BMI main7 \ Loop back to main7 until irqCounter increments round \ to zero (so we wait for it to go from 156 to 0, which \ takes around three seconds at 50 ticks per second) .main8 LDA qualifyingTime \ If bit 7 of qualifyingTime is set then this is a BMI main1 \ practice lap (i.e. qualifyingTime = 255), so jump back \ to main1 LDA raceStarted \ If bit 7 of raceStarted is clear then this is either BPL main2 \ a practice or qualifying lap, but we didn't just jump \ to main1, so this must be qualifying, so jump back to \ main2 LDA raceClass \ If raceClass = 0 then this is a Novice race, so jump BEQ main3 \ back to main3 \ Otherwise this is an Amateur or a Professional race, \ and not a Novice race, practice or a qualifying lapName: MainDrivingLoop (Part 3 of 5) [Show more] Type: Subroutine Category: Main loop Summary: Main driving loop: Process rejoining the race or lap after a crash Deep dive: Program flow of the main game loopContext: See this subroutine in context in the source code References: No direct references to this subroutine in this source file
[X]
Variable crashedIntoFence (category: Car geometry)
Flag that records whether we have crashed into the fence
[X]
Variable irqCounter (category: Screen mode)
Counter that gets incremented every time the IRQ routine reaches section 4 of the custom screen
[X]
Label main1 in subroutine MainDrivingLoop (Part 1 of 5)
[X]
Label main10 in subroutine MainDrivingLoop (Part 5 of 5)
[X]
Label main2 in subroutine MainDrivingLoop (Part 1 of 5)
[X]
Label main3 in subroutine MainDrivingLoop (Part 1 of 5)
[X]
Label main6 is local to this routine
[X]
Label main7 is local to this routine
[X]
Variable qualifyingTime (category: Drivers)
The number of minutes of qualifying lap time
[X]
Variable raceClass (category: Drivers)
The class of the current race
[X]
Variable raceStarted in workspace Zero page
Flag determining whether the race has started
[X]
Variable screenSection (category: Screen mode)
The section of the screen that is currently being drawn by the custom screen interrupt handler (0 to 4)