This buffer is used to generate a tilemap.
Added buffer clear and map seed management.
; generates a map
; inputs:
- ; map_gen_: map gen settings
- ; writes map to map buffer and map_gen_header
+ ; mapgen_: map gen settings
+ ; writes map to map buffer and mapgen_header
+ ; writes tiles to mapgen_tiles
map_generate:
+ ; clear the map
+ ld d, TT_WALL
+ ld hl, mapgen_tiles
+ ld bc, MAP_TILES
+ call memset
+
+ ; 1) setup seed
+ ; store exiting seed in tmp game seed
+ ld a, [srand]
+ ld [mapgen_game_seed], a
+ ld a, [srand+1]
+ ld [mapgen_game_seed+1], a
+
; load the seed
+ ld a, [mapgen_seed]
+ ld [srand], a
+ ld a, [mapgen_seed+1]
+ ld [srand+1], a
+
+ ; 2) set up map header
+
+
- ; restore old seed from rng
+ ; cleanup) finally
+ ; store current seed
+ ld a, [srand]
+ ld [mapgen_seed], a
+ ld a, [srand+1]
+ ld [mapgen_seed+1], a
+
+ ; restore game seed from rng
+ ld [mapgen_game_seed], a
+ ld [srand], a
+ ld [mapgen_game_seed+1], a
+ ld [srand+1], a
ret
ld a, 0xde
ld [tiles_canary], a
ld [render_canary], a
+ ld [mapgen_canary], a
ld a, 0xad
ld [tiles_canary+1], a
ld [render_canary+1], a
+ ld [mapgen_canary+1], a
ld a, 0xbe
ld [tiles_canary+2], a
ld [render_canary+2], a
+ ld [mapgen_canary+2], a
ld a, 0xef
ld [tiles_canary+3], a
ld [render_canary+3], a
+ ld [mapgen_canary+3], a
#endif
ret
ret
new_game:
+ call map_generate
+
call player_init
ld de, l1
call map_load
game_state: .adv 2
; self modifying code
- ; the vblank interrupt jumps here
+ ; the vblank interrupt jumps her:b we
; this should be enough memory for
; a jp + address
; and a reti instruction
; map generator settings
; the seed used for the current map
-map_gen_seed: .adv 2
+mapgen_seed: .adv 2
; ptr to map gen slot flags
; this can be used to store previous maps states
; to allow the player to return
-map_gen_slot_flags: .adv 2
+mapgen_slot_flags: .adv 2
; the seed before loading map rng
; used as backup
-map_gen_old_seed: .adv 2
+mapgen_game_seed: .adv 2
; generated map header
-map_gen_header: .adv map_header_size
+mapgen_header: .adv map_header_size
; collision related data
; y/x positions
render_canary: .adv 4
#endif
+; mapgen tile memory
+mapgen_tiles: .adv MAP_TILES
+
+#ifdef DEBUG_CANARY
+mapgen_canary: .adv 4
+#endif
+
; tile memory
.org 0xC800