Prev: 58185 Up: Map Next: 58276
58209: Handler: Bad Door
Used by the routine at Handler_Doors.
Fill the room up with water! This only occurs when opening the CYAN door in room #10.
room-filling-with-water-animation
Turn off any other sounds. Unclear why this isn't just set to 0 (the checks in Controller_GeneralSounds are from 1-6).
Handler_BadDoor 58209 LD A,7 Write 7 to *SoundFlag_General.
58211 LD (65534),A
58214 LD HL,23200 Set the starting address in the attribute buffer (23200).
And the number of lines to fill with "sea water".
58217 LD B,21 B=21 (line counter).
Start filling the room...
Handler_BadDoor_Loop 58219 PUSH HL Stash the attribute buffer pointer and the line counter on the stack.
58220 PUSH BC
58221 LD B,32 B=32 (number of character blocks in one line).
Paint a whole line.
BadDoor_FillLineLoop 58223 LD A,41 Write "INK: BLUE, PAPER: CYAN " to *HL.
58225 LD (HL),A
58226 INC HL Increment the attribute buffer pointer by one.
58227 DJNZ BadDoor_FillLineLoop Decrease the character block counter by one and loop back to BadDoor_FillLineLoop until the whole line is blue.
This sound wave noise is like white noise, so is good for giving the impression of rushing water.
58229 LD B,200 B=200 (wave loop).
Loop over the wave sound 200 times.
BadDoor_Wave_Loop 58231 PUSH BC Stash the wave loop on the stack.
58232 LD BC,65534 BC=65534 (C points to the speaker port).
58235 LD A,(23504) A=*Active_BorderColour.
58238 ADD A,16 Turn on the speaker (A+=16).
58240 OUT (C),A Send A to the speaker port.
Set a random length delay.
58242 CALL GetRandomNumber Call GetRandomNumber.
58245 LD B,A B=the random number.
BadDoor_RandomDelay_Sound 58246 DJNZ BadDoor_RandomDelay_Sound Decrease the random counter by one and loop back to BadDoor_RandomDelay_Sound until it is zero.
58248 LD BC,65534 Send *Active_BorderColour to the speaker port.
58251 LD A,(23504)
58254 OUT (C),A
Set another random length delay.
58256 CALL GetRandomNumber Call GetRandomNumber.
58259 LD B,A B=the random number.
BadDoor_RandomDelay_Silence 58260 DJNZ BadDoor_RandomDelay_Silence Decrease the random counter by one and loop back to BadDoor_RandomDelay_Silence until it is zero.
58262 POP BC Restore the wave loop from the stack.
58263 DJNZ BadDoor_Wave_Loop Decrease the wave loop by one and loop back to BadDoor_Wave_Loop until the counter is zero.
Restore our positions from the start of the main loop.
58265 POP BC Restore the line counter and the attribute buffer pointer from the stack.
58266 POP HL
Move "up" one line in the attribute buffer, ready to start painting again once we loop.
58267 LD DE,32 DE=0032.
58270 XOR A Reset the flags.
58271 SBC HL,DE HL-=DE (with carry).
58273 DJNZ Handler_BadDoor_Loop Decrease the line counter by one and loop back to Handler_BadDoor_Loop until the whole play area is filled.
This entry point is used by the routine at Handler_Explosion.
HousekeepStackThenLoseLife 58275 POP BC Restore BC from the stack.
Continue on to LoseLife.
Prev: 58185 Up: Map Next: 58276