![]() |
Routines |
| Prev: 35180 | Up: Map | Next: 35335 |
|
Used by the routine at GameInitialise.
|
||||
|
This routine uses Bresenham's line algorithm to plot a point between the source and destination co-ordinates to show Trashman travelling from one location to another.
|
||||
| Handler_FlightPath | 35228 | LD B,1 | B=1. | |
| 35230 | LD HL,61439 | Set bit 0 of *61439. | ||
| 35233 | SET 0,(HL) | |||
| 35235 | CALL 32853 | Call 32853. | ||
| 35238 | LD A,(61436) | A=*61436. | ||
| 35241 | AND %00001111 | Keep only bits 0-3. | ||
| 35243 | CP 8 | Jump to Handler_FlightPath if A is not equal to 8. | ||
| 35245 | JR NZ,Handler_FlightPath | |||
| 35247 | LD BC,(30721) | BC=*Flightpath_X_MovementVector. | ||
| 35251 | LD DE,(30723) | DE=*Flightpath_Y_MovementVector. | ||
| 35255 | LD HL,(30725) | HL=*CurrentLocationCoordinates. | ||
| 35258 | LD A,C | Compare C and B to determine the movement direction. Jump to FlightPath_NegativeDirection if C is lower than B. | ||
| 35259 | CP B | |||
| 35260 | JR C,FlightPath_NegativeDirection | |||
|
Handle movement in positive X direction.
|
||||
| 35262 | SUB B | C-=B. | ||
| 35263 | LD C,A | |||
|
Move in Y direction.
|
||||
| 35264 | LD A,E | L+=E. | ||
| 35265 | ADD A,L | |||
| 35266 | LD L,A | |||
| 35267 | LD A,(30730) | Load *Flightpath_Maximum_Y_Coordinate into B. | ||
| 35270 | LD B,A | |||
|
Compare with remaining X movement.
|
||||
| 35271 | CP C | Jump to FlightPath_CheckArrived if *Flightpath_Maximum_Y_Coordinate is lower than C. | ||
| 35272 | JR C,FlightPath_CheckArrived | |||
| 35274 | SUB C | Adjust Y co-ordinate. | ||
| 35275 | LD B,A | |||
| 35276 | LD A,(30729) | Load *Flightpath_Minimum_Y_Coordinate into C. | ||
| 35279 | LD C,A | |||
| 35280 | LD A,(30724) | Adjust X co-ordinate. | ||
| 35283 | ADD A,H | |||
| 35284 | LD H,A | |||
| 35285 | JR FlightPath_CheckArrived | Jump to FlightPath_CheckArrived. | ||
|
Handle movement in negative X direction.
|
||||
| FlightPath_NegativeDirection | 35287 | LD A,B | B-=C (remaining X movement). | |
| 35288 | SUB C | |||
| 35289 | LD B,A | |||
| 35290 | LD A,D | Move in Y direction. | ||
| 35291 | ADD A,H | |||
| 35292 | LD H,A | |||
| 35293 | LD A,(30729) | Load *Flightpath_Minimum_Y_Coordinate into C. | ||
| 35296 | LD C,A | |||
| 35297 | CP B | Jump to FlightPath_CheckArrived if C is lower than B. | ||
| 35298 | JR C,FlightPath_CheckArrived | |||
| 35300 | SUB B | Adjust Y co-ordinate. | ||
| 35301 | LD C,A | |||
| 35302 | LD A,(30730) | Load *Flightpath_Maximum_Y_Coordinate into B. | ||
| 35305 | LD B,A | |||
| 35306 | LD A,(30723) | Adjust X co-ordinate. | ||
| 35309 | ADD A,L | |||
| 35310 | LD L,A | |||
| 35311 | JR FlightPath_CheckArrived | Jump to FlightPath_CheckArrived. | ||
|
Update position and check if destination reached.
|
||||
| FlightPath_CheckArrived | 35313 | LD (30725),HL | Write new X/ Y co-ordinates to *CurrentLocationCoordinates. | |
| 35316 | LD (30721),BC | Write updated movement vector to *Flightpath_X_MovementVector. | ||
| 35320 | AND A | Compare current position with destination. | ||
| 35321 | LD DE,(30727) | |||
| 35325 | SBC HL,DE | |||
| 35327 | JR NZ,Handler_FlightPath | Jump to Handler_FlightPath until destination is reached. | ||
| 35329 | LD HL,61435 | Reset bit 1 ("Flightpath Complete") of *GameState_2. | ||
| 35332 | RES 1,(HL) | |||
| 35334 | RET | Return. | ||
| Prev: 35180 | Up: Map | Next: 35335 |