Elite on the BBC Micro and NES

Tactics: TACTICS (Part 4 of 7)

[BBC Micro cassette version]

```       Name: TACTICS (Part 4 of 7)                                   [Show more]
Type: Subroutine
Category: Tactics
Summary: Apply tactics: Check energy levels, maybe launch escape pod if low
Deep dive: Program flow of the tactics routine
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 section works out what kind of condition the ship is in. Specifically:

* Rarely (2.5% chance) roll the ship by a noticeable amount

* If the ship has at least half its energy banks full, jump to part 6 to
consider firing the lasers

* If the ship is not into the last 1/8th of its energy, jump to part 5 to
consider firing a missile

* If the ship is into the last 1/8th of its energy, then rarely (10% chance)
the ship launches an escape pod and is left drifting in space

LDA TYPE               \ If this is not a missile, skip the following
CMP #MSL               \ instruction
BNE P%+5

JMP TA20               \ This is a missile, so jump down to TA20 to get
\ straight into some aggressive manoeuvring

JSR DORND              \ Set A and X to random numbers

CMP #250               \ If A < 250 (97.5% chance), jump down to TA7 to skip
BCC TA7                \ the following

JSR DORND              \ Set A and X to random numbers

ORA #104               \ Bump A up to at least 104 and store in the roll
STA INWK+29            \ counter, to gives the ship a noticeable roll

.TA7

LDY #14                \ Set A = the ship's maximum energy / 2
LDA (XX0),Y
LSR A

CMP INWK+35            \ If the ship's current energy in byte #35 > A, i.e. the
BCC TA3                \ ship has at least half of its energy banks charged,
\ jump down to TA3

LSR A                  \ If the ship's current energy in byte #35 > A / 4, i.e.
LSR A                  \ the ship is not into the last 1/8th of its energy,
CMP INWK+35            \ jump down to ta3 to consider firing a missile
BCC ta3

JSR DORND              \ Set A and X to random numbers

CMP #230               \ If A < 230 (90% chance), jump down to ta3 to consider
BCC ta3                \ firing a missile

LDA TYPE               \ If this is a Thargoid, jump down to ta3 to consider
CMP #THG               \ launching a Thargon
BEQ ta3

\ By this point, the ship has run out of both energy and
\ luck, so it's time to bail

LDA #0                 \ Set the AI flag to 0 to disable AI, hostility and
STA INWK+32            \ E.C.M., so the ship's a sitting duck

JMP SESCP              \ Jump to SESCP to spawn an escape pod from the ship,
\ returning from the subroutine using a tail call
```