Skip to navigation

Tactics: ANGRY

[BBC Micro disc version, Flight]

Name: ANGRY [Show more] Type: Subroutine Category: Tactics Summary: Make a ship hostile
Context: See this subroutine in context in the source code Variations: See code variations for this subroutine in the different versions References: This subroutine is called as follows: * FRMIS calls ANGRY * Main flight loop (Part 11 of 16) calls ANGRY

All this routine does is set the ship's hostile flag, start it turning and give it a kick of acceleration - later calls to TACTICS will make the ship start to attack us.
Arguments: A The type of ship we're going to irritate INF The address of the data block for the ship we're going to infuriate
.ANGRY CMP #SST \ If this is the space station, jump to AN2 to make the BEQ AN2 \ space station hostile LDY #36 \ Fetch the ship's NEWB flags from byte #36 LDA (INF),Y AND #%00100000 \ If bit 5 of the ship's NEWB flags is clear, skip the BEQ P%+5 \ following instruction, otherwise bit 5 is set, meaning \ this ship is an innocent bystander, and attacking it \ will annoy the space station JSR AN2 \ Call AN2 to make the space station hostile LDY #32 \ Fetch the ship's byte #32 (AI flag) LDA (INF),Y BEQ HI1 \ If the AI flag is zero then this ship has no AI and \ it can't get hostile, so return from the subroutine \ (as HI1 contains an RTS) ORA #%10000000 \ Otherwise set bit 7 (AI enabled) to ensure AI is STA (INF),Y \ definitely enabled LDY #28 \ Set the ship's byte #28 (acceleration) to 2, so it LDA #2 \ speeds up STA (INF),Y ASL A \ Set the ship's byte #30 (pitch counter) to 4, so it LDY #30 \ starts diving STA (INF),Y LDA TYPE \ If the ship's type is < #CYL (i.e. a missile, Coriolis CMP #CYL \ space station, escape pod, plate, cargo canister, BCC AN3 \ boulder, asteroid, splinter, Shuttle or Transporter), \ then jump to AN3 to skip the following LDY #36 \ Set bit 2 of the ship's NEWB flags in byte #36 to LDA (INF),Y \ make this ship hostile ORA #%00000100 STA (INF),Y .AN3 RTS \ Return from the subroutine .AN2 LDA K%+NI%+36 \ Set bit 2 of the NEWB flags in byte #36 of the second ORA #%00000100 \ ship in the ship data workspace at K%, which is STA K%+NI%+36 \ reserved for the sun or the space station (in this \ case it's the latter), to make it hostile RTS \ Return from the subroutine