Skip to navigation

Main loop: Main game loop (Part 1 of 6)

[Acorn Electron version]

Name: Main game loop (Part 1 of 6) [Show more] Type: Subroutine Category: Main loop Summary: Spawn a trader (a peaceful Cobra Mk III) Deep dive: Program flow of the main game loop Ship data blocks Aggression and hostility in ship tactics
Context: See this subroutine in context in the source code Variations: See code variations for this subroutine in the different versions References: No direct references to this subroutine in this source file

This is part of the main game loop. This is where the core loop of the game lives, and it's in two parts. The shorter loop (just parts 5 and 6) is iterated when we are docked, while the entire loop from part 1 to 6 iterates if we are in space. This section covers the following: * Spawn a trader, i.e. a Cobra Mk III with AI disabled, a 50% chance of it having an E.C.M., a speed between 16 and 31, a random aggression level and a gentle clockwise roll We call this from within the main loop, with A set to a random number.
.MTT4 LSR A \ Clear bit 7 of our random number in A and set the C \ flag to bit 0 of A, which is random STA INWK+32 \ Store this in the ship's AI flag, so this ship does \ not have AI STA INWK+29 \ Store A in the ship's roll counter, giving it a \ clockwise roll (as bit 7 is clear), and a 1 in 127 \ chance of it having no damping ROL INWK+31 \ This instruction would appear to set bit 0 of the \ ship's missile count randomly (as the C flag was set), \ giving the ship either no missiles or one missile \ \ However, INWK+31 is overwritten in the call to the \ NWSHP routine below, where it is set to the number of \ missiles from the ship blueprint, and the value of the \ C flag is not used, so this instruction actually has \ no effect \ \ Interestingly, the original source code for the NWSPS \ routine also has an instruction that sets INWK+31 and \ which gets overwritten when it falls through into \ NWSHP, but in this case the instruction is commented \ out in the source. Perhaps the original version of \ NWSHP didn't set the missile count and instead relied \ on the calling code to set it, and when the authors \ changed it, they commented out the INWK+31 instruction \ in NWSPS and forgot about this one. Who knows? AND #31 \ Set the ship speed to our random number, set to a ORA #16 \ minimum of 16 and a maximum of 31 STA INWK+27 LDA #CYL \ Add a new Cobra Mk III to the local bubble and fall JSR NWSHP \ through into the main game loop again