Prev: 52047 Up: Map Next: 52098
52053: Move Drutt, or entity he is pushing left one character and start pushed entity falling if appropriate
Drutt will only push other entities when he is under player control. If he is not, then he will just pass through pushable entities.
Used by the routine at 52047.
Input
IX Address of complex state data (current level) for Drutt
52053 CALL 54666 Check entity at IX for collision with another impassable / pushable entity immediately to the left...
52056 JR C,52087 ...and if a collision has not occurred, then skip ahead to 52087
At this point, a collision has occurred, so IY points to the complex state data entry of the entity with which Drutt has collided
52058 CP 22 If collision was with an entity of class of 22 or greater (can't be picked up)...
52060 JR NC,52076 ...then skip ahead to 52076
52062 BIT 1,(IX+9) If Drutt's under-player-control flag is reset...
52066 JR Z,52087 ...then skip ahead to 52087 (move Drutt left without pushing anything)
52068 PUSH IX Store IX (address of current level's complex state data for Drutt)
52070 CALL 52098 Advance position of entity pushed left by Drutt
52073 POP IX Restore IX (address of current level's complex state data for Drutt)
52075 RET Return
Collision with entity of class 22 or greater
52076 CP 129 If collision was with entity of class 129 (causes other entities to start falling)...
52078 JR Z,52087 ...then skip ahead to 52087
At this point, the entity to Drutt's left is neither passable nor pushable.
52080 POP BC Remove top value from stack (i.e. return address to routine that called this routine)
52081 LD HL,51630 Point HL at script data for Drutt swapping depth levels...
52084 JP 48098 ...and execute
No collision, not under player control or collision with entity of class 129
52087 CALL 54348 Move Drutt into room to the left, if appropriate...
52090 RET NC ...and if Drutt can't enter new room then return
52091 DEC (IX+5) Move Drutt left one character...
52094 DEC (IX+7) ...
52097 RET Return
Prev: 52047 Up: Map Next: 52098