Routines |
Prev: E349 | Up: Map | Next: E3A4 |
Used by the routine at Handler_Doors.
|
|||||
Fill the room up with water! This only occurs when opening the CYAN door in room #10.
Turn off any other sounds. Unclear why this isn't just set to 00 (the checks in Controller_GeneralSounds are from 01-06).
|
|||||
Handler_BadDoor | E361 | LD A,$07 | Write 07 to *SoundFlag_General. | ||
E363 | LD ($FFFE),A | ||||
E366 | LD HL,$5AA0 | Set the starting address in the attribute buffer (5AA0). | |||
And the number of lines to fill with "sea water".
|
|||||
E369 | LD B,$15 | B=15 (line counter). | |||
Start filling the room...
|
|||||
Handler_BadDoor_Loop | E36B | PUSH HL | Stash the attribute buffer pointer and the line counter on the stack. | ||
E36C | PUSH BC | ||||
E36D | LD B,$20 | B=20 (number of character blocks in one line). | |||
Paint a whole line.
|
|||||
BadDoor_FillLineLoop | E36F | LD A,$29 | Write "INK: BLUE, PAPER: CYAN " to *HL. | ||
E371 | LD (HL),A | ||||
E372 | INC HL | Increment the attribute buffer pointer by one. | |||
E373 | 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.
|
|||||
E375 | LD B,$C8 | B=C8 (wave loop). | |||
Loop over the wave sound C8 times.
|
|||||
BadDoor_Wave_Loop | E377 | PUSH BC | Stash the wave loop on the stack. | ||
E378 | LD BC,$FFFE | BC=FFFE (C points to the speaker port). | |||
E37B | LD A,($5BD0) | A=*Active_BorderColour. | |||
E37E | ADD A,$10 | Turn on the speaker (A+=10). | |||
E380 | OUT (C),A | Send A to the speaker port. | |||
Set a random length delay.
|
|||||
E382 | CALL GetRandomNumber | Call GetRandomNumber. | |||
E385 | LD B,A | B=the random number. | |||
BadDoor_RandomDelay_Sound | E386 | DJNZ BadDoor_RandomDelay_Sound | Decrease the random counter by one and loop back to BadDoor_RandomDelay_Sound until it is zero. | ||
E388 | LD BC,$FFFE | Send *Active_BorderColour to the speaker port. | |||
E38B | LD A,($5BD0) | ||||
E38E | OUT (C),A | ||||
Set another random length delay.
|
|||||
E390 | CALL GetRandomNumber | Call GetRandomNumber. | |||
E393 | LD B,A | B=the random number. | |||
BadDoor_RandomDelay_Silence | E394 | DJNZ BadDoor_RandomDelay_Silence | Decrease the random counter by one and loop back to BadDoor_RandomDelay_Silence until it is zero. | ||
E396 | POP BC | Restore the wave loop from the stack. | |||
E397 | 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.
|
|||||
E399 | POP BC | Restore the line counter and the attribute buffer pointer from the stack. | |||
E39A | POP HL | ||||
Move "up" one line in the attribute buffer, ready to start painting again once we loop.
|
|||||
E39B | LD DE,$0020 | DE=0020. | |||
E39E | XOR A | Reset the flags. | |||
E39F | SBC HL,DE | HL-=DE (with carry). | |||
E3A1 | 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 | E3A3 | POP BC | Restore BC from the stack. | ||
Continue on to LoseLife.
|
Prev: E349 | Up: Map | Next: E3A4 |