BBC Micro Elite

# Main loop: Main flight loop (Part 9 of 16) (6502SP version)

```       Name: Main flight loop (Part 9 of 16)                   [View in context]
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: Docking checks

The main flight loop covers most of the flight-specific aspects of Elite. This
section covers the following:

* Process docking with a space station

For details on the various docking checks in this routine, see the deep dive
on "Docking checks".

Other entry points:

GOIN                 We jump here from part 3 of the main flight loop if the
docking computer is activated by pressing "C"

.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

JSR SPS1               \ Call SPS1 to calculate the vector to the planet and
\ store it in XX15

LDA XX15+2             \ Set A to the z-axis of the vector

CMP #89                \ 4. If z-axis < 89, jump to MA62 to fail docking, as
BCC MA62               \ we are not in the 22.0 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, either the docking computer has
\ been activated, or we just docked successfully

JMP DOENTRY            \ Go to the docking bay (i.e. show the ship hanger)

.MA62

\ If we arrive here, docking has just failed

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
```