Jet Set Willy: Routine at 38137

| Routines

38137: Move the conveyor in the current room

Used by the routine at 35245.
38137 | LD HL,(32983) | Pick up the address of the conveyor's location in the attribute buffer at 24064 from 32983
38140 | LD A,H | Point DE and HL at the location of the left end of the conveyor in the screen buffer at 28672
38141 | AND 1
38143 | RLCA
38144 | RLCA
38145 | RLCA
38146 | ADD A,112
38148 | LD H,A
38149 | LD E,L
38150 | LD D,H
38151 | LD A,(32985) | Pick up the length of the conveyor from 32985
38154 | OR A | Is there a conveyor in the room?
38155 | RET Z | Return if not
38156 | LD B,A | B will count the conveyor tiles
38157 | LD A,(32982) | Pick up the direction of the conveyor from 32982 (0=left, 1=right)
38160 | OR A | Is the conveyor moving right?
38161 | JR NZ,38182 | Jump if so
The conveyor is moving left.
38163 | LD A,(HL) | Copy the first pixel row of the conveyor tile to A
38164 | RLC A | Rotate it left twice
38166 | RLC A
38168 | INC H | Point HL at the third pixel row of the conveyor tile
38169 | INC H
38170 | LD C,(HL) | Copy this pixel row to C
38171 | RRC C | Rotate it right twice
38173 | RRC C
38175 | LD (DE),A | Update the first and third pixel rows of every conveyor tile in the screen buffer at 28672
38176 | LD (HL),C
38177 | INC L
38178 | INC E
38179 | DJNZ 38175
38181 | RET |
The conveyor is moving right.
38182 | LD A,(HL) | Copy the first pixel row of the conveyor tile to A
38183 | RRC A | Rotate it right twice
38185 | RRC A
38187 | INC H | Point HL at the third pixel row of the conveyor tile
38188 | INC H
38189 | LD C,(HL) | Copy this pixel row to C
38190 | RLC C | Rotate it left twice
38192 | RLC C
38194 | JR 38175 | Jump back to update the first and third pixel rows of every conveyor tile