Prev: CED4 Up: Map Next: CF3E
CF0B: UNSEEN spell effect on creature movement
Used by the routines at CDD7 and CF3E.
Creatures will move erratically and randomly, if the UNSEEN spell is active - except for the WRAITH and DEMON, who can sense the magic and use it to home in on Maroc's position.
guardians of chaos reacting to UNSEEN spell
You can see (in the animated image) that some creatures have a tendency to cluster towards the bottom right of the screen.
This is because the randomizer routine at CE4F generates:
  • a pseudo-random horizontal speed/direction between 28 and +32 - in multiples of 4 (negative = left, positive = right)
  • a pseudo-random vertical speed/direction between -7 and +8 (negative = up, positive = down)
These values are only very slightly skewed towards down & right, but the randomizer runs often, hence the visible result.
Check if the UNSEEN spell is active:
CF0B LD A,($EAE9) Currently active spell
CF0E CP $09 ...Is it the UNSEEN spell?
CF10 JR NZ,$CF1D
CF12 LD A,($EAAA) If so get the incremental game counter
CF15 AND $0F Check if any of bits 0-3 set
CF17 JP NZ,$CE4F If so, randomize the movement pattern
CF1A JP $D04B Switch back to normal movement every 16 frames
Jump here from CE2E if creature is DEMON or WRAITH and Maroc's active spell number >=4
These two creatures can 'sniff out' powerful magic.
  • If Maroc has UNSEEN active, they are able to home in on his position, making them potentially more dangerous, though DEMONs will not fire missiles which tend to be more difficult to avoid
  • They will also move towards Maroc's screen position if he casts ANY 'powerful' spell (i.e. spell number >=4)
Calculate vertical position in relation to Maroc:
CF1D LD A,($EB4A) Retrieve vertical position within current room, in pixels, from top of room playing area
CF20 LD C,A Store in C register
CF21 LD A,($EAC1) Maroc's vertical (Y-axis) screen position
CF24 SUB C Subtract graphic position to get vertical offset
CF25 RLA Shift bit 7 to determine if creature is higher or lower than Maroc on the screen
CF26 SBC A,A After subtracting, A register will either contain 255 (-1) = below Maroc, or 0 = above Maroc
CF27 XOR $07 Value will now either be 7 or -7 (248)
CF29 LD ($EB4D),A Set as creature's vertical movement speed/direction
Calculate horizontal position in relation to Maroc:
CF2C LD A,($EB48) Retrieve horizontal position within current room, in 4-pixel/half-character steps
CF2F LD C,A
CF30 LD A,($EAC0) Maroc's horizontal (X-axis) screen position
CF33 SUB C Subtract graphic position to get horizontal offset
CF34 RLA Precision used to calculate = 2 pixels whereas the difference is in 4-pixel steps, so double the value
CF35 SBC A,A After subtracting, A register will either contain 255 (-1) = to the right of Maroc, or 0 = to the left of Maroc
CF36 XOR $07 Value will now either be 7 or -7 (248)
CF38 LD ($EB4C),A Store as creature's horizontal movement speed/direction
CF3B JP $D04B
Prev: CED4 Up: Map Next: CF3E