.ISDK LDA K%+NI%+36 \ 1. Fetch the NEWB flags (byte #36) of the second ship AND #%00000100 \ in the ship data workspace at K%, which is reserved BNE MA62 \ for the sun or the space station (in this case it's \ the latter), and if bit 2 is set, meaning the station \ is hostile, jump down to MA62 to fail docking (so \ trying to dock at a station that we have annoyed does \ not end well) LDA INWK+14 \ 2. If nosev_z_hi < 214, jump down to MA62 to fail CMP #214 \ docking, as the angle of approach is greater than 26 BCC MA62 \ degrees \ --- Mod: Code removed for Elite-A: ------------------> \JSR SPS1 \ Call SPS1 to calculate the vector to the planet and \ \ store it in XX15 \ --- And replaced by: --------------------------------> LDY #NI% \ Set Y = NI% so the following call to SPS1 calculates \ the vector to the space station rather than the planet JSR SPS1 \ Call SPS1 to calculate the vector to the space station \ and store it in XX15 \ --- End of replacement ------------------------------> LDA XX15+2 \ Set A to the z-axis of the vector \ This version of Elite omits check 3 (which would check \ the sign of the z-axis) CMP #86 \ 4. If z-axis < 86, jump to MA62 to fail docking, as BCC MA62 \ we are not in the 26.3 degree safe cone of approach LDA INWK+16 \ 5. If |roofv_x_hi| < 80, jump to MA62 to fail docking, AND #%01111111 \ as the slot is more than 36.6 degrees from horizontal CMP #80 BCC MA62 .GOIN \ If we arrive here, we just docked successfully JSR RES2 \ Reset a number of flight variables and workspaces LDA #8 \ Set the step size for the launch tunnel rings to 8, so \ there are fewer sections in the rings and they are \ quite polygonal (compared to the step size of 4 used \ in the much rounder hyperspace rings) JSR HFS2 \ Call HFS2 to draw the launch tunnel rings JMP DOENTRY \ Go to the docking bay (i.e. show the ship hangar) .MA62 \ If we arrive here, docking has just failed \ --- Mod: Code removed for Elite-A: ------------------> \LDA DELTA \ If the ship's speed is < 5, jump to MA67 to register \CMP #5 \ some damage, but not a huge amount \BCC MA67 \ \JMP DEATH \ Otherwise we have just crashed into the station, so \ \ process our death \ --- And replaced by: --------------------------------> LDA DELTA \ If the ship's speed is >= 5, jump to n_crunch to CMP #5 \ register a fair amount of damage to our shields (128) BCS n_crunch \ Otherwise we have just crashed gently into the \ station, so we need to check whether it's our fault or \ the docking computer \ --- End of replacement ------------------------------>Name: Main flight loop (Part 9 of 16) [Show more] Type: Subroutine Category: Main loop Summary: For each nearby ship: If it is a space station, check whether we are successfully docking with it Deep dive: Program flow of the main game loop Docking checksContext: See this subroutine in context in the source code References: This subroutine is called as follows: * ESCAPE calls via GOIN
The main flight loop covers most of the flight-specific aspects of Elite. This section covers the following: * Process docking with a space station
Other entry points: GOIN We jump here from part 3 of the main flight loop if the docking computer is activated by pressing "C"
[X]
Subroutine DOENTRY (category: Loader)
Load and run the docked code
[X]
Subroutine HFS2 (category: Drawing circles)
Draw the launch or hyperspace tunnel
[X]
Workspace K% (category: Workspaces)
Ship data blocks and ship line heaps
[X]
Label MA62 is local to this routine
[X]
Configuration variable NI% = 37
The number of bytes in each ship's data block (as stored in INWK and K%)
[X]
Subroutine RES2 (category: Start and end)
Reset a number of flight variables and workspaces
[X]
Subroutine SPS1 (category: Maths (Geometry))
Calculate the vector to the planet, sun or station and store it in XX15
[X]
Label n_crunch in subroutine Main flight loop (Part 10 of 16)