Prev: 45035 Up: Map Next: 45150
45087: Move Player To Room
Used by the routine at ChangeRoom.
Input
A Destination room ID
MovePlayerToRoom 45087 LD C,A Load the destination room ID into C.
45088 LD A,(42990) Jump to SetNewCurrentRoomID if *Count_ScenicEvents is zero.
45091 AND A
45092 JR Z,SetNewCurrentRoomID
45094 LD B,A B=Count_ScenicEvents.
45095 LD HL,(42978) HL=*Pointer_ScenicEventLocations.
45098 JR FindScenicEvents Jump to FindScenicEvents.
FindScenicEvents_Loop 45100 INC HL Increment the scenic event location pointer by one.
FindScenicEvents 45101 LD A,(HL) Load the next scenic event location into A.
45102 CALL ValidateItemPresent Call ValidateItemPresent.
45105 JR NZ,FindScenicEvents_Next Jump to FindScenicEvents_Next if the scenic event is not at this location.
A scenic event matched this location!
45107 PUSH HL Stash the scenic event location pointer and scenic events counter on the stack.
45108 PUSH BC
45109 LD B,(HL) Load the current scenic event location into B.
45110 CALL Handler_UpdateItemLocation Call Handler_UpdateItemLocation.
45113 POP BC Restore the scenic events counter and scenic event location pointer from the stack.
45114 POP HL
FindScenicEvents_Next 45115 DJNZ FindScenicEvents_Loop Decrease counter by one and loop back to FindScenicEvents_Loop until counter is zero.
Sets the destination room ID as the new current room ID.
SetNewCurrentRoomID 45117 LD A,C Write C to *CurrentRoom.
45118 LD (42947),A
45121 LD A,(42887) Return if *Flag_EventStates is zero.
45124 AND A
45125 RET Z
45126 LD B,8 B=8.
45128 LD HL,42888 HL=42888.
45131 LD C,A C=A.
45132 JR MovePlayerToRoom_1 Jump to MovePlayerToRoom_1.
MovePlayerToRoom_0 45134 INC HL Increment HL by one.
MovePlayerToRoom_1 45135 SRL C Shift C right.
45137 JR NC,MovePlayerToRoom_2 Jump to MovePlayerToRoom_2 if HL is greater than or equal to A.
45139 LD A,(HL) A=*HL.
45140 PUSH HL Stash HL and BC on the stack.
45141 PUSH BC
45142 CALL Handler_UpdateItemEventCurrentRoom Call Handler_UpdateItemEventCurrentRoom.
45145 POP BC Restore BC and HL from the stack.
45146 POP HL
MovePlayerToRoom_2 45147 DJNZ MovePlayerToRoom_0 Decrease counter by one and loop back to MovePlayerToRoom_0 until counter is zero.
45149 RET Return.
View the equivalent code in The Jewels Of Babylon.
Prev: 45035 Up: Map Next: 45150