Prev: 5D9F Up: Map Next: 5EEE
5DA6: Initialize and start gameplay mode
This routine prepares the game for play and is called when starting a new game or after losing a life.
play 5DA6 LD A,$10 Initialize island line index (starting line for island rendering).
5DA8 LD ($5EFD),A
5DAB LD A,$1F Initialize activation interval (every 32 frames).
5DAD LD ($5F5F),A
5DB0 LD SP,($5F83)
5DB4 LD D,$0C Clear screen with PAPER RIVER, INK BANK.
5DB6 CALL clear_screen
5DB9 CALL init_udg
5DBC LD DE,$8000 Print status line 1.
5DBF LD BC,$0031
5DC2 CALL $203C
5DC5 LD A,$01 Initialize tick counter.
5DC7 LD ($5EEF),A
5DCA CALL $1601 Open channel 1 (upper screen).
5DCD LD DE,$8031 Print status line 2.
5DD0 LD BC,$001E
5DD3 CALL $203C
5DD6 LD A,$02 Open channel 2 (lower screen).
5DD8 CALL $1601
5DDB CALL print_bridge
5DDE LD A,$04 Initialize terrain fragment counter.
5DE0 LD ($5EEE),A
5DE3 LD A,$00 Clear state variables.
5DE5 LD ($5F6C),A
5DE8 LD ($5F6F),A
5DEB LD ($5F7D),A
5DEE LD ($5F69),A
5DF1 LD A,$FF Initialize fuel level.
5DF3 LD ($5F66),A
5DF6 LD BC,$0010 Initialize scroll offset.
5DF9 LD ($5F70),BC
5DFD CALL init_current_bridge
5E00 LD A,$78 Initialize X position (horizontal center).
5E02 LD ($5F72),A
5E05 LD HL,$5F00 Initialize viewport_slots list.
5E08 LD ($5F60),HL
5E0B LD (HL),$FF Mark viewport objects list as empty.
5E0D LD HL,$5F2E Initialize exploding_fragments list.
5E10 LD ($5F62),HL
5E13 LD (HL),$FF Mark exploding fragments list as empty.
5E15 LD BC,$0000
5E18 CALL print_lives
5E1B LD A,$01 Open channel 1 for score display.
5E1D CALL $1601
5E20 LD A,$16 AT 1,5
5E22 RST $10
5E23 LD A,$01
5E25 RST $10
5E26 LD A,$05
5E28 RST $10
5E29 LD A,$10 INK PLAYER_1
5E2B RST $10
5E2C LD A,$06
5E2E RST $10
5E2F LD DE,$90BC Print player 1 score.
5E32 LD BC,$0006
5E35 CALL $203C
5E38 LD A,$02 Open channel 2.
5E3A CALL $1601
5E3D LD DE,$805A Print status line 4.
5E40 LD BC,$0005
5E43 CALL $203C
5E46 LD A,($923A) Print game mode digit (1 or 2 player).
5E49 ADD A,$31
5E4B RST $10
5E4C LD A,$01 Open channel 1.
5E4E CALL $1601
5E51 LD A,$FF Set terrain position to $FF (forces terrain regeneration).
5E53 LD ($5F7D),A
5E56 LD A,$02 Initialize terrain profile number.
5E58 LD ($5F77),A
5E5B CALL $1601 Open channel 2.
5E5E LD A,$01 Initialize level fragment number, gameplay mode, and bridge destroyed flag.
5E60 LD ($5F76),A
5E63 LD ($5F68),A
5E66 LD ($5F6D),A
5E69 LD A,$68 Set LAST_K to 'h' to start in paused state.
5E6B LD ($5C08),A
5E6E LD A,$00 Clear control state and tank shell state.
5E70 LD ($6BB0),A
5E73 LD ($5EF2),A
5E76 LD A,$04 Set speed for scroll-in animation.
5E78 LD ($5F64),A
5E7B LD BC,$4C83 Initialize terrain element (C=$83: river center position, B=$4C: row offset).
5E7E LD ($5F78),BC
5E82 CALL print_player_2_score_area
5E85 CALL init_current_bridge
5E88 LD B,$28 Set loop counter for scroll-in (40 iterations).
scroll_in_loop 5E8A PUSH BC Save loop counter.
5E8B LD HL,$5EEF Increment tick counter.
5E8E INC (HL)
5E8F CALL render_plane_and_terrain
5E92 CALL operate_viewport_slots
5E95 CALL advance_scroll
5E98 LD A,$04 Maintain speed during scroll-in.
5E9A LD ($5F64),A
5E9D POP BC Restore loop counter.
5E9E DJNZ scroll_in_loop Loop until scroll-in complete.
5EA0 LD A,$00 Clear control state.
5EA2 LD ($6BB0),A
5EA5 LD ($5F68),A Set gameplay mode to normal (ready for player control).
5EA8 CALL render_plane
5EAB LD A,$0D Set last key to Enter (wait for start input).
5EAD LD ($5C08),A
5EB0 LD A,($923D) Decrement current player's lives.
5EB3 CP $02
5EB5 JP Z,decrease_lives_player_2
5EB8 LD HL,$923B
5EBB DEC (HL)
This entry point is used by the routine at decrease_lives_player_2.
after_life_lost 5EBC CALL print_lives
wait_for_start_input 5EBF CALL $02BF
5EC2 EI Enable interrupts.
5EC3 LD A,($5C08) If any key except Enter pressed, start game.
5EC6 CP $0D
5EC8 JR NZ,start_game
5ECA LD A,($5F67) If not Kempston joystick, keep waiting.
5ECD CP $02
5ECF JP NZ,wait_for_start_input
5ED2 LD A,$FE Read Kempston joystick; if centered, keep waiting.
5ED4 IN A,($1F)
5ED6 CP $00
5ED8 JP Z,wait_for_start_input
start_game 5EDB LD A,$00 Clear bridge destroyed flag.
5EDD LD ($5F6D),A
5EE0 LD ($5F6E),A
5EE3 LD A,$02
5EE5 LD ($5F64),A
5EE8 LD ($5EEF),A
5EEB JP main_loop
Prev: 5D9F Up: Map Next: 5EEE