Prev: E1CC Up: Map Next: E46C
E3DE: Handler: Actors
Used by the routine at Dispatch_Handlers.
Animates the 0D-byte records at *ReferenceActors.
Handler_Actors E3DE CALL Build_PlayerMask Call Build_PlayerMask.
E3E1 LD IX,($6430) IX=*ReferenceActors.
Handler_Actors_Loop E3E5 LD A,(IX+$00) Return if the terminator FF is reached.
E3E8 INC A
E3E9 RET Z
E3EA BIT 7,A Jump to Handler_Actors_Next if this actor is inactive.
E3EC JR NZ,Handler_Actors_Next
Test this actor against the player.
E3EE PUSH IY Stash IY on the stack.
E3F0 PUSH IX Copy IX to IY (using the stack).
E3F2 POP IY
E3F4 CALL Test_ActorCollision Call Test_ActorCollision.
E3F7 POP IY Restore IY from the stack.
E3F9 CALL JumpTable_UpdateActor Call JumpTable_UpdateActor.
E3FC BIT 7,(IX+$07) Restore the stored row when bit 7 of *IX+07 is set.
E400 JR Z,Handler_Actors_Commit
E402 RES 7,(IX+$07)
E406 LD A,(IX+$0B)
E409 LD (IX+$01),A
Store the new position.
Handler_Actors_Commit E40C CALL JumpTable_AdvanceEntity Call JumpTable_AdvanceEntity.
E40F LD (IX+$00),C Store the new column, row, fine-X and fine-Y.
E412 LD (IX+$01),B
E415 LD (IX+$02),E
E418 LD (IX+$03),D
E41B CALL JumpTable_DrawActor Call JumpTable_DrawActor.
Handler_Actors_Next E41E LD DE,$000D IX+=000D.
E421 ADD IX,DE
E423 JR Handler_Actors_Loop Jump to Handler_Actors_Loop.
E425 RET Return.
Lock or reverse an actor after a collision.
Actor_AfterCollision E426 CP $02 Jump to Actor_Lock if the actor type is 02.
E428 JP Z,Actor_Lock
E42B CALL Actor_SwapDestination Call Actor_SwapDestination.
E42E XOR A Write 00 to both actor deltas.
E42F LD (IY+$08),A
E432 LD (IY+$09),A
E435 RET Return.
Actor_Lock E436 SET 7,(IY+$07) Set bit 7 of *IY+07.
E43A RET Return.
This entry point is used by the routine at Handler_PendulumRooms.
Actor_Reverse E43B LD A,(IY+$0C) Jump to Actor_AfterCollision if *IY+0C is set.
E43E OR A
E43F JR NZ,Actor_AfterCollision
Actor_SwapDestination E441 LD A,(IY+$05) Swap *IY+05 with *IY+0A.
E444 LD C,(IY+$0A)
E447 LD (IY+$05),C
E44A LD (IY+$0A),A
E44D LD A,(IY+$06) Swap *IY+06 with *IY+0B.
E450 LD C,(IY+$0B)
E453 LD (IY+$0B),A
E456 LD (IY+$06),C
E459 LD A,(IY+$08) A=*IY+08-01.
E45C DEC A
E45D XOR %11111111 Invert every bit.
E45F LD (IY+$08),A Write the new horizontal delta.
E462 LD A,(IY+$09) A=*IY+09-01.
E465 DEC A
E466 XOR %11111111 Invert every bit.
E468 LD (IY+$09),A Write the new vertical delta.
E46B RET Return.
Prev: E1CC Up: Map Next: E46C