Prev: 35211 Up: Map Next: 35563
35245: Main loop (1)
Used by the routines at 35090 and 35591.
35245 CALL 35211 Draw the remaining lives
35248 LD HL,24064 Copy the contents of the attribute buffer at 24064 (the attributes for the empty room) into the attribute buffer at 23552
35251 LD DE,23552
35254 LD BC,512
35257 LDIR
35259 LD HL,28672 Copy the contents of the screen buffer at 28672 (the tiles for the empty room) into the screen buffer at 24576
35262 LD DE,24576
35265 LD BC,4096
35268 LDIR
35270 CALL 37056 Move the rope and guardians in the current room
35273 LD A,(34271) Pick up the game mode indicator from 34271
35276 CP 3 Is Willy's head down the toilet?
35278 CALL NZ,36307 If not, move Willy
35281 LD A,(34255) Pick up Willy's y-coordinate from 34255
35284 CP 225 Has Willy just moved up a ramp or a rope past the top of the screen?
35286 CALL NC,38064 If so, move Willy into the room above
35289 LD A,(34271) Pick up the game mode indicator from 34271
35292 CP 3 Is Willy's head down the toilet?
35294 CALL NZ,38344 If not, check and set the attribute bytes for Willy's sprite in the buffer at 23552, and draw Willy to the screen buffer at 24576
35297 LD A,(34271) Pick up the game mode indicator from 34271
35300 CP 2 Is Willy on his way to the toilet?
35302 CALL Z,38276 If so, check whether he's reached it yet
35305 CALL 38196 Deal with special rooms (Master Bedroom, The Bathroom)
35308 CALL 37310 Draw the rope, arrows and guardians in the current room
35311 CALL 38137 Move the conveyor in the current room (if there is one)
35314 CALL 37841 Draw the items in the current room (if there are any) and collect any that Willy is touching
This entry point is used by the routine at 37046.
35317 LD HL,24576 Copy the contents of the screen buffer at 24576 to the display file
35320 LD DE,16384
35323 LD BC,4096
35326 LDIR
35328 LD A,(34271) Pick up the game mode indicator from 34271
35331 AND 2 Now A=1 if Willy is running to the toilet or already has his head down it, 0 otherwise
35333 RRCA
35334 LD HL,34258 Set Willy's animation frame at 34258 to 1 or 3 if Willy is running to the toilet or already has his head down it; this has the effect of moving Willy at twice his normal speed as he makes his way to the toilet (using animation frames 2 and 0)
35337 OR (HL)
35338 LD (HL),A
35339 LD A,(34253) Pick up the screen flash counter (unused and always 0) from 34253
35342 OR A Is it zero?
35343 JR Z,35366 Jump if so (this jump is always made)
The next section of code is never executed.
35345 DEC A Decrement the screen flash counter at 34253
35346 LD (34253),A
35349 RLCA Move bits 0-2 into bits 3-5 and clear all the other bits
35350 RLCA
35351 RLCA
35352 AND 56
35354 LD HL,23552 Set every attribute byte in the buffer at 23552 to this value
35357 LD DE,23553
35360 LD BC,511
35363 LD (HL),A
35364 LDIR
Normal service resumes here.
35366 LD HL,23552 Copy the contents of the attribute buffer at 23552 to the attribute file
35369 LD DE,22528
35372 LD BC,512
35375 LDIR
35377 LD IX,34175 Print the current time (see 34175) at (19,25)
35381 LD DE,20601
35384 LD C,6
35386 CALL 38528
35389 LD IX,34172 Print the number of items collected (see 34172) at (19,16)
35393 LD DE,20592
35396 LD C,3
35398 CALL 38528
35401 LD A,(34251) Increment the minute counter at 34251
35404 INC A
35405 LD (34251),A
35408 JR NZ,35499 Jump unless the minute counter has ticked over to 0
A minute of game time has passed. Update the game clock accordingly.
35410 LD IX,34175 Point IX at the current time at 34175
35414 INC (IX+4) Increment the units digit of the minute
35417 LD A,(IX+4) Pick up the new units digit
35420 CP 58 Was it '9' before?
35422 JR NZ,35499 Jump if not
35424 LD (IX+4),48 Set the units digit of the minute to '0'
35428 INC (IX+3) Increment the tens digit of the minute
35431 LD A,(IX+3) Pick up the new tens digit
35434 CP 54 Was it '5' before?
35436 JR NZ,35499 Jump if not
35438 LD (IX+3),48 Set the tens digit of the minute to '0'
35442 LD A,(IX+0) Pick up the tens digit of the hour
35445 CP 49 Is it currently '1'?
35447 JR NZ,35481 Jump if not
35449 INC (IX+1) Increment the units digit of the hour
35452 LD A,(IX+1) Pick up the new units digit
35455 CP 51 Was it '2' before?
35457 JR NZ,35499 Jump if not
35459 LD A,(IX+5) Pick up the 'a' or 'p' of 'am/pm'
35462 CP 112 Is it 'p'?
35464 JP Z,34762 If so, quit the game (it's 1am)
35467 LD (IX+0),32 Set the tens digit of the hour to ' ' (space)
35471 LD (IX+1),49 Set the units digit of the hour to '1'
35475 LD (IX+5),112 Change the 'a' of 'am' to 'p'
35479 JR 35499
35481 INC (IX+1) Increment the units digit of the hour
35484 LD A,(IX+1) Pick up the new units digit
35487 CP 58 Was it '9' before?
35489 JR NZ,35499 Jump if not
35491 LD (IX+1),48 Set the units digit of the hour to '0'
35495 LD (IX+0),49 Set the tens digit of the hour to '1'
Now check whether any non-movement keys are being pressed.
35499 LD BC,65278 Read keys SHIFT-Z-X-C-V
35502 IN A,(C)
35504 LD E,A Save the result in E
35505 LD B,127 Read keys B-N-M-SS-SPACE
35507 IN A,(C)
35509 OR E Combine the results
35510 AND 1 Are SHIFT and SPACE being pressed?
35512 JP Z,34762 If so, quit the game
35515 LD A,(34272) Increment the inactivity timer at 34272
35518 INC A
35519 LD (34272),A
35522 JR Z,35537 Jump if the inactivity timer is now 0 (no keys have been pressed for a while)
35524 LD B,253 Read keys A-S-D-F-G
35526 IN A,(C)
35528 AND 31 Are any of these keys being pressed?
35530 CP 31
35532 JR Z,35607 Jump if not
35534 LD DE,0 Prepare the delay counters in D and E for the pause loop that follows
The following loop pauses the game until any key except A, S, D, F or G is pressed.
35537 LD B,2 Read every half-row of keys except A-S-D-F-G
35539 IN A,(C)
35541 AND 31 Are any of these keys being pressed?
35543 CP 31
35545 JR NZ,35591 If so, resume the game
35547 INC E Increment the delay counter in E
35548 JR NZ,35537 Jump back unless it's zero
35550 INC D Increment the delay counter in D
35551 JR NZ,35537 Jump back unless it's zero
35553 LD A,(34275) Pick up the WRITETYPER key counter from 34275
35556 CP 10 Has WRITETYPER been keyed in yet?
35558 CALL NZ,35563 If not, cycle the INK and PAPER colours
35561 JR 35537 Jump back to the beginning of the pause loop
Prev: 35211 Up: Map Next: 35563