Prev: F276 Up: Map Next: F2F7
F277: Move Herbert
Used by the routine at 81AE.
F277 LD A,$02 Touching Herbert reduces endurance by 2.
F279 LD ($F26E),A
F27C LD IX,$F270 Point IX at the movement table.
F280 LD BC,$F2F7 Point BC at the bounds.
F283 CALL $EF35 Update object positions.
F286 LD A,(IX+$00) Get Herbert's current room.
F289 CALL $AC69 Get the "next rooms" table for this room.
F28C INC HL Move to the second byte in the table.
F28D LD A,(HL) Get the target co-ordinate.
F28E CALL $AC5F Get the address of the co-ordinate table.
F291 LD A,(HL) Get the target co-ordinate.
F292 CP (IX-$04) Is it Herbert's current x co-ordinate?
F295 JR NZ,$F2C3 Jump forward if it isn't.
F297 DEC (IX+$01) Decerement Herbert's tick count.
F29A JR NZ,$F2C3 Jump forward while it is 0.
F29C LD A,R Get a random number between 3 and 6.
F29E AND $03
F2A0 ADD A,$03
F2A2 LD (IX+$01),A Set this as the new tick count.
F2A5 CALL $AF01 Set the next room for Herbert to appear in.
F2A8 CP $1F If this is the Sewer, jump back and choose again.
F2AA JR Z,$F2A5
F2AC LD (IX+$00),A Set the new room.
F2AF CALL $AC69 Get the "next rooms" table for this room.
F2B2 INC HL Move to the second byte in the buffer.
F2B3 LD A,(HL) Get the target co-ordinate.
F2B4 CALL $AC5F Get the address of the co-ordinate table.
F2B7 LD A,(HL) Get the x co-ordinate.
F2B8 ADD A,$02 Add 2 to it.
F2BA CP $EE Set a ceiling of EE.
F2BC JR C,$F2C0
F2BE LD A,$EE
F2C0 LD (IX-$04),A Set the new x co-ordinate.
Draw Herbert if he's visible.
F2C3 LD A,(IX+$00) Get Herbert's current room.
F2C6 CP (IY+$0F) Is this the room the player is in?
F2C9 RET NZ Return if not.
Herbert is in the same room as the player, so draw him.
F2CA LD A,(IX-$02) Get the x direction difference.
F2CD LD BC,$4440 Set Herbert to use object IDs 40 - 42 if he's moving right, or 44 - 46 if he is moving left.
F2D0 CP $01
F2D2 JR Z,$F2D7
F2D4 LD BC,$4844
F2D7 LD A,(IX+$02) Get Herbert's current object ID.
F2DA ADD A,$02 Ensure the object ID cycles between the two set values.
F2DC CP B
F2DD JR C,$F2E2
F2DF LD A,C
F2E0 JR $F2E5
F2E2 CP C
F2E3 JR C,$F2DF
F2E5 LD (IX+$02),A Set the new object ID for Herbert.
F2E8 CALL $A8A0 Draw Herbert.
F2EB LD A,$46 Set bright yellow on black.
F2ED LD ($F26F),A
F2F0 CALL $EF91 Set the attributes for the fountain in the Town Square.
F2F3 CALL $E329 Check for collision detection.
F2F6 RET Return.
Prev: F276 Up: Map Next: F2F7