Prev: 6068 Up: Map Next: 6124
60A5: Render player plane and terrain fragments
Top-level render routine called from main loop (main_loop). Orchestrates visual updates in a specific order to prevent flicker.
Render sequence:
  • Player plane sprite (GAMEPLAY_MODE_NORMAL only)
  • Screen scroll system
  • Terrain fragments (count = current speed)
  • Attribute scroll (every 8 fragments)
Speed affects the number of terrain fragments rendered per frame and the sprite animation frame selection.
render_plane_and_terrain 60A5 LD A,($5F68) Skip plane rendering if not GAMEPLAY_MODE_NORMAL.
60A8 CP $00
60AA JP NZ,render_terrain_fragments
60AD LD A,$00 Set collision mode to NONE for plane (no collision during render).
60AF LD ($5EF5),A
60B2 LD A,($5F72) Calculate plane sprite frame: offset = (8 - speed) * 2.
60B5 LD C,A
60B6 LD A,($5F64)
60B9 LD E,A
60BA LD A,$08
60BC SUB E
60BD LD D,$00
60BF LD E,A
60C0 SLA E
60C2 LD HL,($5EF7) Apply offset to sprite pointer.
60C5 ADD HL,DE
60C6 LD ($8B0E),HL
60C9 ADD A,$80 Calculate plane Y: Y = $88 - speed. However, movement handlers (handle_right, handle_left, render_plane) always use the fixed PLANE_COORDINATE_Y ($80), so this speed-dependent value has no visible effect.
60CB LD B,A
60CC LD A,($5F64)
60CF LD D,A
60D0 LD ($8B0A),BC Set plane coordinates for rendering.
60D4 LD ($8B0C),BC
60D8 LD E,$00 Render plane: width=2, size=$10, attrs=$00.
60DA LD BC,$0010
60DD LD A,$02
60DF LD HL,$82F5
60E2 CALL render_object
render_terrain_fragments 60E5 CALL scroll_screen Render islands.
60E8 LD A,($5F64) Calculate starting screen row based on speed.
60EB LD DE,$0100
60EE LD HL,$4000
60F1 OR A
60F2 SBC HL,DE
calculate_screen_row_loop 60F4 ADD HL,DE HL = screen_start + (speed * $100).
60F5 DEC A
60F6 JR NZ,calculate_screen_row_loop
60F8 LD ($5F7B),HL Store screen pointer to screen_ptr.
60FB LD A,($5F64) Set up terrain fragment loop (count = speed).
60FE LD B,A
60FF LD A,($5EEE)
6102 LD C,A
render_terrain_loop 6103 INC C Increment fragment counter.
6104 LD A,C
6105 PUSH BC
6106 AND $07 Every 8 fragments, scroll attributes.
6108 CP $00
610A CALL Z,scroll_attributes
610D CALL render_terrain_fragment Render terrain fragment.
6110 LD DE,$0100 Move screen pointer up one row ($100 bytes).
6113 LD HL,($5F7B)
6116 OR A
6117 SBC HL,DE
6119 LD ($5F7B),HL
611C POP BC
611D DJNZ render_terrain_loop Loop until all fragments rendered.
611F LD A,C Store updated fragment counter.
6120 LD ($5EEE),A
6123 RET
Prev: 6068 Up: Map Next: 6124