Revs on the BBC Micro

# Car geometry: CheckForContact

```       Name: CheckForContact                                         [Show more]
Type: Subroutine
Category: Car geometry
Summary: Check to see if the object is close enough to the player car to
make contact
Context: See this subroutine in context in the source code
References: This subroutine is called as follows:
* GetObjectAngles calls entry point CheckForContact-2

Arguments:

Y                    Contact is made if objectDistanceLo <= Y

(J I)                max(|x-delta|, |z-delta|)

(H G)                min(|x-delta|, |z-delta|)

M                    The smaller yaw angle of the object, where 0 to 255
represents 0 to 45 degrees

objectNumber         The number of the object being checked for contact

Other entry points:

CheckForContact-2    Set Y = 37, so we make contact if (L K) <= 37

LDY #37                \ Set Y = 37, so we make contact if (L K) <= 37

.CheckForContact

JSR GetObjectDistance  \ Set (L K) to the distance between the object and the
\ player's car

LDA L                  \ Set objectDistanceHi to the high byte of (L K)
STA objectDistanceHi

BNE ccon1              \ If objectDistanceHi is non-zero then the objects are
\ too far apart for a collision, so jump to ccon1 to
\ return from the subroutine

CPY K                  \ If K > Y, then the objects are too far apart for a
BCC ccon1              \ collision, this time in terms of the low byte of the
\ subroutine

\ If we get here then K <= Y, so the objects are close
\ enough for a collision

DEC processContact     \ Decrement processContact so it is non-zero, so we
\ check for contact between this car and the player's
\ car in the ProcessContact routine

LDA K                  \ Set (objectDistanceHi objectDistanceLo) = (L K)
STA objectDistanceLo

LDA objectNumber       \ Store the number of the other object in
STA collisionDriver    \ collisionDriver, so we know who's crashing

.ccon1

RTS                    \ Return from the subroutine
```