Prev: 8C01 Up: Map Next: 8D33
8C4A: Display the game over sequence
Used by the routine at 8C01.
Input
Output
8C4A LD HL,$4000 Clear the top two-thirds of the display file
8C4D LD DE,$4001
8C50 LD BC,$0FFF
8C53 LD (HL),$00
8C55 LDIR
8C57 XOR A Initialise the temporary game status buffer variable at 85E4; this variable will determine the distance of the foot from the top of the screen
8C58 LD ($85E4),A
8C5B LD DE,$9D40 Draw Willy at (12,15)
8C5E LD HL,$488F
8C61 LD C,$00
8C63 CALL $9456
8C66 LD DE,$9C60 Draw the barrel underneath Willy at (14,15)
8C69 LD HL,$48CF
8C6C LD C,$00
8C6E CALL $9456
The following loop draws the foot's descent onto the barrel that supports Willy.
8C71 LD A,($85E4) Pick up the distance variable from 85E4
8C74 LD C,A Point BC at the corresponding entry in the screen buffer address lookup table at 8200
8C75 LD B,$82
8C77 LD A,(BC) Point HL at the corresponding location in the display file
8C78 OR $0F
8C7A LD L,A
8C7B INC BC
8C7C LD A,(BC)
8C7D SUB $20
8C7F LD H,A
8C80 LD DE,$9C40 Draw the foot at this location, without erasing the foot at the previous location; this leaves the portion of the foot sprite that's above the ankle in place, and makes the foot appear as if it's at the end of a long, extending leg
8C83 LD C,$00
8C85 CALL $9456
8C88 LD A,($85E4) Pick up the distance variable from 85E4
8C8B CPL A=0xFF-A
8C8C LD E,A Store this value (0x3F-0xFF) in E; it determines the (rising) pitch of the sound effect that will be made
8C8D XOR A A=0 (black border)
8C8E LD BC,$0040 C=0x40; this value determines the duration of the sound effect
8C91 OUT ($FE),A Produce a short note whose pitch is determined by E
8C93 XOR $18
8C95 LD B,E
8C96 DJNZ $8C96
8C98 DEC C
8C99 JR NZ,$8C91
8C9B LD HL,$5800 Prepare BC, DE and HL for setting the attribute bytes in the top two-thirds of the screen
8C9E LD DE,$5801
8CA1 LD BC,$01FF
8CA4 LD A,($85E4) Pick up the distance variable from 85E4
8CA7 AND $0C Keep only bits 2 and 3
8CA9 RLCA Shift bits 2 and 3 into bits 3 and 4; these bits determine the PAPER colour: 0, 1, 2 or 3
8CAA OR $47 Set bits 0-2 (INK 7) and 6 (BRIGHT 1)
8CAC LD (HL),A Copy this attribute value into the top two-thirds of the screen
8CAD LDIR
8CAF AND $FA Reset bits 0 and 2, and retain all other bits
8CB1 OR $02 Set bit 1 (INK 2)
8CB3 LD ($59CF),A Copy this attribute value to the cells at (14,15), (14,16), (15, 15) and (15, 16) (where the barrel is, so that it remains red)
8CB6 LD ($59D0),A
8CB9 LD ($59EF),A
8CBC LD ($59F0),A
8CBF LD A,($85E4) Add 4 to the distance variable at 85E4; this will move the foot sprite down two pixel rows
8CC2 ADD A,$04
8CC4 LD ($85E4),A
8CC7 CP $C4 Has the foot met the barrel yet?
8CC9 JR NZ,$8C71 Jump back if not
Now print the "Game Over" message, just to drive the point home.
8CCB LD IX,$8574 Print "Game" (see 8574) at (6,10)
8CCF LD C,$04
8CD1 LD DE,$40CA
8CD4 CALL $9680
8CD7 LD IX,$8578 Print "Over" (see 8578) at (6,18)
8CDB LD C,$04
8CDD LD DE,$40D2
8CE0 CALL $9680
8CE3 LD BC,$0000 Prepare the delay counters for the following loop; the counter in C will also determine the INK colours to use for the "Game Over" message
8CE6 LD D,$06
The following loop makes the "Game Over" message glisten for about 1.57s.
8CE8 DJNZ $8CE8 Delay for about a millisecond
8CEA LD A,C Change the INK colour of the "G" in "Game" at (6,10)
8CEB AND $07
8CED OR $40
8CEF LD ($58CA),A
8CF2 INC A Change the INK colour of the "a" in "Game" at (6,11)
8CF3 AND $07
8CF5 OR $40
8CF7 LD ($58CB),A
8CFA INC A Change the INK colour of the "m" in "Game" at (6,12)
8CFB AND $07
8CFD OR $40
8CFF LD ($58CC),A
8D02 INC A Change the INK colour of the "e" in "Game" at (6,13)
8D03 AND $07
8D05 OR $40
8D07 LD ($58CD),A
8D0A INC A Change the INK colour of the "O" in "Over" at (6,18)
8D0B AND $07
8D0D OR $40
8D0F LD ($58D2),A
8D12 INC A Change the INK colour of the "v" in "Over" at (6,19)
8D13 AND $07
8D15 OR $40
8D17 LD ($58D3),A
8D1A INC A Change the INK colour of the "e" in "Over" at (6,20)
8D1B AND $07
8D1D OR $40
8D1F LD ($58D4),A
8D22 INC A Change the INK colour of the "r" in "Over" at (6,21)
8D23 AND $07
8D25 OR $40
8D27 LD ($58D5),A
8D2A DEC C Decrement the counter in C
8D2B JR NZ,$8CE8 Jump back unless it's zero
8D2D DEC D Decrement the counter in D (initially 6)
8D2E JR NZ,$8CE8 Jump back unless it's zero
8D30 JP $87CA Display the title screen and play the theme tune
Prev: 8C01 Up: Map Next: 8D33