| Prev: 6A4A | Up: Map | Next: 6AA3 |
6A4F: Load next terrain fragment and initialize rendering state
|
Called when a terrain fragment finishes (after 16 pixel lines). Loads the next 4-byte terrain fragment from level_terrains[bridge_index][fragment_number] and initializes state for rendering.
|
||||
|
Terrain fragment format (4 bytes): byte 0 = profile number (index into data_terrain_profiles), bytes 1-2 = row offset (added to profile values), byte 3 = upper 6 bits: island index (0=no island), lower 2 bits: edge calculation mode.
Profile numbers 2 and 3 have special meaning: 2 = bridge structure (clears destroyed flag), 3 = bridge approach (sets countdown). Fragment number wraps at 64, incrementing bridge_index.
|
||||
| render_terrain_row | 6A4F | LD A,$FF | Reset state_terrain_position to $FF (will be incremented to 0). | |
| 6A51 | LD ($5F7D),A | |||
| 6A54 | LD HL,$9500 | Set up level_terrains lookup: HL = level_terrains, DE = $100 (level size). | ||
| 6A57 | LD DE,$0100 | |||
| 6A5A | LD A,($5EF0) | |||
| 6A5D | OR A | |||
| 6A5E | SBC HL,DE | |||
| locate_level_terrain | 6A60 | ADD HL,DE | Locate level_terrains[state_bridge_index] (256 bytes per level). | |
| 6A61 | DEC A | |||
| 6A62 | JR NZ,locate_level_terrain | |||
| 6A64 | LD A,($5F76) | Increment fragment number (0-63), store to state_level_fragment_number. | ||
| 6A67 | INC A | |||
| 6A68 | AND $3F | |||
| 6A6A | LD ($5F76),A | |||
| 6A6D | CP $00 | If fragment wrapped to 0, call increase_bridge_index to advance to next bridge/level. | ||
| 6A6F | CALL Z,increase_bridge_index | |||
| 6A72 | LD DE,$0004 | Set up fragment lookup: DE = 4 (fragment size). | ||
| 6A75 | INC A | |||
| 6A76 | OR A | |||
| 6A77 | SBC HL,DE | |||
| locate_level_terrain_fragment | 6A79 | ADD HL,DE | Locate fragment within level: level_terrains[bridge][fragment]. | |
| 6A7A | DEC A | |||
| 6A7B | JR NZ,locate_level_terrain_fragment | |||
| 6A7D | LD A,(HL) | Load byte 0 (profile number) to state_terrain_profile_number. Handle special values. | ||
| 6A7E | LD ($5F77),A | |||
| 6A81 | CP $03 | |||
| 6A83 | CALL Z,init_bridge_approach | |||
| 6A86 | CP $02 | Load bytes 1-2 (row offset) to state_terrain_element_23. | ||
| 6A88 | CALL Z,clear_bridge_destroyed | |||
| 6A8B | INC HL | Byte 3: if upper 6 bits non-zero, call handle_island to initialize island. | ||
| 6A8C | LD C,(HL) | |||
| 6A8D | INC HL | |||
| 6A8E | LD B,(HL) | |||
| 6A8F | INC HL | |||
| 6A90 | LD ($5F78),BC | |||
| 6A94 | LD A,(HL) | Store lower 2 bits of byte 3 to state_terrain_extras (edge mode: 0=direct, 1=mirrored, 2=offset). | ||
| 6A95 | PUSH AF | |||
| 6A96 | AND $FC | |||
| 6A98 | CP $00 | |||
| 6A9A | CALL NZ,handle_island | |||
| 6A9D | POP AF | |||
| 6A9E | AND $03 | |||
| 6AA0 | LD ($5F7A),A | |||
| Prev: 6A4A | Up: Map | Next: 6AA3 |