| 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 |