Prev: 72C9 Up: Map Next: 7564
74A4: Game Intro
Used by the routine at 72C9.
level-01
GameIntro 74A4 CALL ClearScreen Call ClearScreen.
Don't bother with the animation if this is the demo mode.
74A7 LD A,($66F3) Return if *Flag_ActiveDemoMode is set.
74AA OR A
74AB RET NZ
Set the attribute buffer to all cyan.
74AC LD HL,$5800 Copy CYAN to 0300 bytes starting from 5800 in the attribute buffer.
74AF LD DE,$5801
74B2 LD BC,$02FF
74B5 LD (HL),$05
74B7 LDIR
74B9 LD HL,$6C13 HL=Table_MusicData.
74BC LD B,$2E Set a counter in B for 2E stars to draw.
GameIntro_StarLoop 74BE LD A,B Jump to GameIntro_MusicLoop if B is greater than or equal to 2D.
74BF CP $2D
74C1 JR NC,GameIntro_MusicLoop
Check if the control method is the Kempson joystick?
74C3 LD A,($66F6) Jump to GameIntro_CheckAGF if *ControlMethod is not the Kempston joystick.
74C6 CP $02
74C8 JR NZ,GameIntro_CheckAGF
The control method is Kempston joystick, so test the fire button.
74CA IN A,($1F) A=read from the Kempston joystick port.
74CC AND %00010000 Jump to GameIntro_Done if the fire button was pressed.
74CE JP NZ,GameIntro_Done
74D1 JR GameIntro_MusicLoop Jump to GameIntro_MusicLoop.
Check if the control method is the AGF joystick?
GameIntro_CheckAGF 74D3 CP $01 Jump to GameIntro_IsKeyboard if *ControlMethod is not the AGF joystick.
74D5 JR NZ,GameIntro_IsKeyboard
74D7 LD A,$EF
Port Number Bit
0 1 2 3 4
EF 0 9 8 7 6
74D9 JR GameIntro_CheckFireButton Jump to GameIntro_CheckFireButton.
Else, the only control option left is the keyboard.
GameIntro_IsKeyboard 74DB LD A,$7F
Port Number Bit
0 1 2 3 4
7F SPACE FULL-STOP M N B
GameIntro_CheckFireButton 74DD IN A,($FE) Read from the keyboard.
74DF BIT 0,A Jump to GameIntro_Done if the fire button was pressed.
74E1 JR Z,GameIntro_Done
GameIntro_MusicLoop 74E3 PUSH BC Stash the star counter on the stack.
74E4 LD C,(HL) Fetch the pitch from the music data pointer.
74E5 INC HL
74E6 LD B,(HL)
74E7 INC HL Fetch the duration from the music data pointer.
74E8 LD E,(HL)
74E9 LD D,$01 D=01.
74EB INC HL Move the music data pointer to the next byte.
74EC PUSH HL Stash the music data pointer on the stack.
74ED PUSH BC HL=BC (using the stack).
74EE POP HL
74EF CALL $03B5 Call BEEPER.
74F2 DI Disable interrupts.
74F3 LD HL,$57DF HL=57DF (screen buffer location).
74F6 LD DE,$57FF DE=57FF (screen buffer location).
74F9 LD C,$03 C=03.
GameIntro_0 74FB LD B,$08 B=08.
GameIntro_1 74FD PUSH BC Stash BC, HL and DE on the stack.
74FE PUSH HL
74FF PUSH DE
7500 LD BC,$00E0 BC=00E0.
7503 LDDR LDDR.
7505 LD C,$20 C=20.
7507 LD L,$FF L=FF.
7509 LD A,H Jump to GameIntro_2 if H is less than 47.
750A CP $47
750C JR C,GameIntro_2
750E SUB $07 Subtract 07 and store the result in H.
7510 LD H,A
7511 LDDR LDDR.
GameIntro_2 7513 POP DE Restore DE and HL from the stack.
7514 POP HL
7515 DEC D Decrease D by one.
7516 DEC H Decrease H by one.
7517 POP BC Restore BC from the stack.
7518 DJNZ GameIntro_1 Decrease counter by one and loop back to GameIntro_1 until counter is zero.
751A DEC C Decrease C by one.
751B JR NZ,GameIntro_0 Jump to GameIntro_0 until C is zero.
751D LD H,$40 H=40.
751F LD B,$08 B=08.
GameIntro_3 7521 PUSH BC Stash BC on the stack.
7522 LD BC,$001F BC=001F.
7525 LD D,H D=H.
7526 LD L,B L=B.
7527 LD E,$01 E=01.
7529 LD (HL),B Write B to *HL.
752A LDIR LDIR.
752C INC H Increment H by one.
752D POP BC Restore BC from the stack.
752E DJNZ GameIntro_3 Decrease counter by one and loop back to GameIntro_3 until counter is zero.
7530 LD HL,$61DB HL=Graphics_StarLarge.
Draw two stars; one large and one small.
7533 LD B,$02 Set a counter in B for the number of types of stars to draw.
GameIntro_DrawStar_Loop 7535 PUSH BC Stash the star type counter on the stack.
GameIntro_4 7536 CALL $670E Call 670E.
7539 AND %00011111 Keep only bits 0-4.
753B JR Z,GameIntro_4 Jump to GameIntro_4 if H is equal to 02 or A is equal to 1F.
753D CP $1F
753F JR Z,GameIntro_4
7541 LD E,A E=A.
7542 LD D,$40 D=40.
7544 LD B,$08 Set a line counter in B (08 lines in a UDG).
GameIntro_DrawStar_LineLoop 7546 LD A,(HL) Copy the UDG data to the screen buffer.
7547 LD (DE),A
7548 INC HL Move to the next UDG graphic data byte.
7549 INC D Move down one pixel line in the screen buffer.
754A DJNZ GameIntro_DrawStar_LineLoop Decrease the line counter by one and loop back to GameIntro_DrawStar_LineLoop until all 08 lines of the UDG character have been drawn.
754C LD HL,$624B HL=Graphics_StarSmall.
754F POP BC Restore the star type counter from the stack.
7550 DJNZ GameIntro_DrawStar_Loop Decrease star type counter by one and loop back to GameIntro_DrawStar_Loop until both types of star have been drawn.
7552 POP HL Restore the music data pointer and star counter from the stack.
7553 POP BC
7554 DEC B Decrease the star counter by one.
7555 JP NZ,GameIntro_StarLoop Jump back to GameIntro_StarLoop until all the stars have been drawn.
The animation is finished.
GameIntro_Done 7558 CALL ClearScreen Call ClearScreen.
755B LD BC,$0000 Set a counter in BC of 0000.
GameIntro_Done_PauseLoop 755E DJNZ GameIntro_Done_PauseLoop Decrease the pause counter by one and loop back to GameIntro_Done_PauseLoop until the counter is zero.
7560 DEC C Decrease C by one.
7561 JR NZ,GameIntro_Done_PauseLoop Jump to GameIntro_Done_PauseLoop until C is zero.
7563 RET Return.
Prev: 72C9 Up: Map Next: 7564