Prev: AF8E Up: Map Next: AFDF
AF8F: Touch
This tests for characters meeting obstacles like doors and map bounds.
Also assigns saved_pos to specified vischar's pos and sets the sprite_index.
Used by the routine at animate.
Input
A' Flip flag and sprite offset.
IY Pointer to visible character block.
Output
F Z/NZ => inside/outside bounds.
touch AF8F EX AF,AF' Exchange A registers
AF90 LD ($81AA),A Stash the flip flag and sprite offset
AF93 SET 6,(IY+$07) Set the vischar's vischar_BYTE7_DONT_MOVE_MAP flag
AF97 SET 7,(IY+$07) Set the vischar's vischar_DRAWABLE flag
AF9B PUSH IY HL = IY
AF9D POP HL
If the hero is player controlled then check for door transitions.
AF9E LD A,L Which vischar are we processing?
AF9F AND A
AFA0 PUSH AF Preserve the vischar low byte
AFA1 JR NZ,touch_0 Jump forward if not the hero's vischar
AFA3 LD A,($A139) If the automatic player counter is positive (under player control)... call door_handling
AFA6 AND A
AFA7 CALL NZ,door_handling
touch_0 AFAA POP AF Restore vischar low byte
Check bounds if this is a non-player character or the hero is not cutting the fence.
AFAB AND A If it's a non-player vischar... jump foward to bounds check
AFAC JR NZ,touch_1
AFAE LD A,($8001) OR if it's the hero's vischar and its flags (vischar_FLAGS_PICKING_LOCK | vischar_FLAGS_CUTTING_WIRE) don't equal vischar_FLAGS_CUTTING_WIRE call bounds_check
AFB1 AND $03
AFB3 CP $02
touch_1 AFB5 CALL NZ,bounds_check
AFB8 RET NZ Return if a wall was hit
Check "real" characters for collisions.
AFB9 LD A,(IY+$00) Get this vischar's character index
AFBC CP $1A Is it >= character_26_STOVE_1?
AFBE JR NC,touch_2 Jump forward if so
AFC0 CALL collision Call collision
AFC3 RET NZ Return if there was a collision
At this point we handle non-colliding characters and items only.
touch_2 AFC4 RES 6,(IY+$07) Clear vischar_BYTE7_DONT_MOVE_MAP
AFC8 LD HL,$81A4 Copy saved_pos to vischar's position
AFCB PUSH IY
AFCD POP DE
AFCE LD A,$0F
AFD0 ADD A,E
AFD1 LD E,A
AFD2 LD BC,$0006
AFD5 LDIR
AFD7 LD A,($81AA) Unstash the flip flag and sprite offset
AFDA LD (IY+$17),A Set it in the vischar's sprite_index field
AFDD XOR A Set flags to Z
AFDE RET Return
Prev: AF8E Up: Map Next: AFDF