Prev: 36116 Up: Map Next: 36367
36296: Make Berk drop the entity he is holding and load IY with its complex state data address
Used by the routines at 35735, 36116, 36390, 36638, 39151, 39278, 39776, 48920 and 53723.
Input
IX Address of complex state data (current level) for Berk
Output
IY Address of complex state data for entity dropped by Berk
36296 LD A,(34221) If Berk is not holding anything...
36299 OR A ...
36300 RET Z ...then return
36301 XOR A Set class of entity held by Berk to zero (i.e. nothing)...
36302 LD (34221),A ...
36305 LD IY,(34260) Load IY with address of complex state data for entity last held by Berk
36309 LD (IY+12),2 Set this dropped entity's velocity factor to 2...
36313 RES 5,(IY+10) ...reset its is-being-carried flag...
36317 SET 6,(IY+10) ...and set its can-fall flag
36321 RES 4,(IX+9) Reset Berk's carrying-something flag
36325 BIT 0,(IX+11) If Berk's walking-right flag is reset...
36329 JR Z,36339 ...then skip ahead to 36339
36331 INC (IY+7) Move dropped entity right one character...
36334 INC (IY+5) ...
36337 JR 36351 Skip ahead to 36351
36339 BIT 1,(IX+11) If Berk's walking-left flag is reset...
36343 JR Z,36351 ...then skip ahead to 36351
36345 DEC (IY+7) Move dropped entity left one character...
36348 DEC (IY+5) ...
36351 LD A,(IY+5) If entity at IY has the x-coordinate of its left side less than 100...
36354 CP 100 ...
36356 JR C,36331 ...then move right until left x-coordinate is 100
36358 LD A,(34235) Load A with width of current room (chars) + 99
36361 CP (IY+7) If entity at IY has the x-coordinate of its right side greater than the width of the current room...
36364 JR C,36345 ...then move right until left x-coordinate is less than room width
36366 RET Return
Prev: 36116 Up: Map Next: 36367