|  | Routines | 
| Prev: AD29 | Up: Map | Next: ADBD | 
| 
This decides searchlight movement.
 
Used by the routine at nighttime.
 
 | ||||||||
| searchlight_movement | AD59 | LD E,(HL) | Fetch movement.x | |||||
| AD5A | INC HL | Step over | ||||||
| AD5B | LD D,(HL) | Fetch movement.y | ||||||
| AD5C | INC HL | Step over | ||||||
| AD5D | DEC (HL) | Decrement movement.counter | ||||||
| AD5E | JP NZ,searchlight_movement_6 | Jump if it's non-zero | ||||||
| 
End of previous sweep: work out the next.
 | ||||||||
| AD61 | INC HL | Advance to movement.index | ||||||
| AD62 | INC HL | |||||||
| AD63 | LD A,(HL) | Fetch movement.index | ||||||
| AD64 | BIT 7,A | Is the reverse direction flag set? | ||||||
| AD66 | JP Z,searchlight_movement_2 | Jump if not | ||||||
| AD69 | AND $7F | Clear the reverse direction flag | ||||||
| AD6B | JP NZ,searchlight_movement_0 | Jump if non-zero index | ||||||
| 
Index is zero.
 | ||||||||
| AD6E | RES 7,(HL) | Clear direction bit when index hits zero | ||||||
| AD70 | JR searchlight_movement_1 | (else) | ||||||
| 
Index is non-zero.
 | ||||||||
| searchlight_movement_0 | AD72 | DEC (HL) | Decrement movement.index | |||||
| AD73 | DEC A | Decrement local copy too (sans direction bit) | ||||||
| searchlight_movement_1 | AD74 | JR searchlight_movement_3 | (else) | |||||
| 
Not reverse direction.
 | ||||||||
| searchlight_movement_2 | AD76 | INC A | Count up | |||||
| AD77 | LD (HL),A | Assign to movement.index | ||||||
| searchlight_movement_3 | AD78 | INC HL | Advance to movement.pointer | |||||
| AD79 | LD C,(HL) | Load pointer | ||||||
| AD7A | INC HL | |||||||
| AD7B | LD B,(HL) | |||||||
| AD7C | DEC HL | Backtrack to movement.index | ||||||
| AD7D | DEC HL | |||||||
| AD7E | ADD A,A | Index in A doubled and added to pointer | ||||||
| AD7F | ADD A,C | |||||||
| AD80 | LD C,A | |||||||
| AD81 | JR NC,searchlight_movement_4 | |||||||
| AD83 | INC B | |||||||
| searchlight_movement_4 | AD84 | LD A,(BC) | Fetch movement byte | |||||
| AD85 | CP $FF | End of list? | ||||||
| AD87 | JP NZ,searchlight_movement_5 | |||||||
| AD8A | DEC (HL) | !overshot? count down counter byte | ||||||
| AD8B | SET 7,(HL) | !go negative | ||||||
| AD8D | DEC BC | Pointer -= 2 | ||||||
| AD8E | DEC BC | |||||||
| AD8F | LD A,(BC) | Bug: A is loaded but never used again | ||||||
| searchlight_movement_5 | AD90 | DEC HL | HL -= 2 | |||||
| AD91 | DEC HL | |||||||
| 
Copy counter + direction_t.
 | ||||||||
| AD92 | LD A,(BC) | Copy counter | ||||||
| AD93 | LD (HL),A | |||||||
| AD94 | INC HL | |||||||
| AD95 | INC BC | |||||||
| AD96 | LD A,(BC) | Copy direction | ||||||
| AD97 | LD (HL),A | |||||||
| AD98 | RET | Return | ||||||
| searchlight_movement_6 | AD99 | INC HL | Advance to direction | |||||
| AD9A | LD A,(HL) | Fetch direction | ||||||
| AD9B | INC HL | |||||||
| AD9C | BIT 7,(HL) | !Test sign | ||||||
| AD9E | JR Z,searchlight_movement_7 | Jump if clear | ||||||
| ADA0 | XOR $02 | Toggle direction | ||||||
| searchlight_movement_7 | ADA2 | CP $02 | If direction <= direction_TOP_RIGHT, y-- else y++ | |||||
| ADA4 | JR NC,searchlight_movement_8 | |||||||
| ADA6 | DEC D | |||||||
| ADA7 | DEC D | |||||||
| searchlight_movement_8 | ADA8 | INC D | ||||||
| ADA9 | AND A | If direction is RIGHT, x+=2 else x-=2 | ||||||
| ADAA | JR Z,searchlight_movement_9 | |||||||
| ADAC | CP $03 | |||||||
| ADAE | JR Z,searchlight_movement_9 | |||||||
| ADB0 | INC E | |||||||
| ADB1 | INC E | |||||||
| ADB2 | JR searchlight_movement_10 | |||||||
| searchlight_movement_9 | ADB4 | DEC E | ||||||
| ADB5 | DEC E | |||||||
| searchlight_movement_10 | ADB6 | DEC HL | Backtrack to (x,y) | |||||
| ADB7 | DEC HL | |||||||
| ADB8 | DEC HL | |||||||
| ADB9 | LD (HL),D | Store y | ||||||
| ADBA | DEC HL | |||||||
| ADBB | LD (HL),E | Store x | ||||||
| ADBC | RET | Return | ||||||
| Prev: AD29 | Up: Map | Next: ADBD |