Dun Darach | Routines |
Prev: A017 | Up: Map |
Finds nearest junctions, both sides of actor, and calculates the distance.
|
|||||||||||||
Actor_NearestJunctions | A07A | PUSH IX | Copy path axis / vector into temporary memory. | ||||||||||
A07C | POP HL | ||||||||||||
A07D | LD DE,TempBl | ||||||||||||
A080 | LD BC,$0006 | ||||||||||||
A083 | LDIR | ||||||||||||
A085 | LD IX,(Actor_CurrentPtr) | Get address of current actor. | |||||||||||
A089 | BIT 0,A | Check compass | |||||||||||
A08B | JR NZ,Actor_NearestJunctions_0 | ||||||||||||
Compass N/S
|
|||||||||||||
A08D | LD L,(IX+$07) | Get actors E/W coord. | |||||||||||
A090 | LD H,(IX+$08) | ||||||||||||
A093 | LD IX,(_5be8_PathNS) | Check for paths running N/S. | |||||||||||
A097 | JR Actor_NearestJunctions_1 | ||||||||||||
Compass E/W
|
|||||||||||||
Actor_NearestJunctions_0 | A099 | LD L,(IX+$05) | Get actors N/W coord. | ||||||||||
A09C | LD H,(IX+$06) | ||||||||||||
A09F | LD IX,(_5be6_PathEW) | Check for paths running E/W. | |||||||||||
Actor_NearestJunctions_1 | A0A3 | LD DE,$0004 | Offset actors coords. | ||||||||||
A0A6 | AND A | ||||||||||||
A0A7 | SBC HL,DE | ||||||||||||
A0A9 | LD (TempAl),HL | ||||||||||||
A0AC | LD HL,$0000 | ||||||||||||
A0AF | LD (DistanceA),HL | ||||||||||||
A0B2 | LD (DistanceB),HL | ||||||||||||
A0B5 | LD DE,(Bitmap_PtrTableOffHeight) | Get end of path (A) being tested. | |||||||||||
See if a path's axis intersects the actors path.
|
|||||||||||||
Actor_NearestJunctions_2 | A0B9 | LD BC,(Bitmap_PtrTable) | Get start of path (A) being tested. | ||||||||||
A0BD | LD L,(IX+$00) | Get next path (B) axis to test with. | |||||||||||
A0C0 | LD H,(IX+$01) | ||||||||||||
A0C3 | AND A | See if axis is greater than path A start. | |||||||||||
A0C4 | SBC HL,BC | ||||||||||||
A0C6 | JR C,Actor_NearestJunctions_3 | No; move onto next path in list. | |||||||||||
A0C8 | ADD HL,BC | See if axis is less than path A end. | |||||||||||
A0C9 | SCF | ||||||||||||
A0CA | SBC HL,DE | If not then all further paths will also be greater than path A's end. | |||||||||||
A0CC | RET NC | ||||||||||||
A0CD | LD BC,(TempBl) | See if path (A) axis intersects with path (B) start and end. | |||||||||||
A0D1 | LD L,(IX+$02) | ||||||||||||
A0D4 | LD H,(IX+$03) | ||||||||||||
A0D7 | SCF | ||||||||||||
A0D8 | SBC HL,BC | ||||||||||||
A0DA | JR NC,Actor_NearestJunctions_3 | ||||||||||||
A0DC | LD L,(IX+$04) | ||||||||||||
A0DF | LD H,(IX+$05) | ||||||||||||
A0E2 | AND A | ||||||||||||
A0E3 | SBC HL,BC | ||||||||||||
A0E5 | JR NC,Actor_NearestJunctions_4 | Paths intersect... | |||||||||||
Next path.
|
|||||||||||||
Actor_NearestJunctions_3 | A0E7 | LD BC,$000C | Move onto next path in list. | ||||||||||
A0EA | ADD IX,BC | ||||||||||||
A0EC | JR Actor_NearestJunctions_2 | ||||||||||||
Path found.
|
|||||||||||||
Actor_NearestJunctions_4 | A0EE | LD BC,(TempAl) | Get actors coords in direction of travel. | ||||||||||
A0F2 | LD L,(IX+$00) | Get axis for intersecting path. | |||||||||||
A0F5 | LD H,(IX+$01) | ||||||||||||
A0F8 | AND A | Calculate difference and position. | |||||||||||
A0F9 | SBC HL,BC | ||||||||||||
A0FB | JR NC,Actor_NearestJunctions_5 | ||||||||||||
Path before actor.
|
|||||||||||||
A0FD | LD C,L | ||||||||||||
A0FE | LD B,H | ||||||||||||
A0FF | LD HL,$0004 | ||||||||||||
A102 | AND A | ||||||||||||
A103 | SBC HL,BC | ||||||||||||
A105 | LD (DistanceA),HL | ||||||||||||
A108 | JR Actor_NearestJunctions_3 | ||||||||||||
Path after actor.
|
|||||||||||||
Actor_NearestJunctions_5 | A10A | LD BC,$0009 | |||||||||||
A10D | AND A | ||||||||||||
A10E | SBC HL,BC | ||||||||||||
A110 | JR C,Actor_NearestJunctions_3 | ||||||||||||
A112 | LD BC,$0005 | ||||||||||||
A115 | ADD HL,BC | ||||||||||||
A116 | LD (DistanceB),HL | ||||||||||||
A119 | RET |
Prev: A017 | Up: Map |