mapgen: wip map buffer
authorLukas Krickl <lukas@krickl.dev>
Mon, 9 Feb 2026 06:41:25 +0000 (07:41 +0100)
committerLukas Krickl <lukas@krickl.dev>
Mon, 9 Feb 2026 06:41:25 +0000 (07:41 +0100)
This buffer is used to generate a tilemap.
Added buffer clear and map seed management.

src/mapgen.s
src/mem.s
src/update.s
src/wram.s

index 63248a158121fbc5457f77ca2efbad7ecce5d977..609804efb12e883fdad22097ad30ae51c41d6562 100644 (file)
@@ -1,10 +1,43 @@
        ; 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
index c0b898bd0f8517fb6fae3d42ddf6cd902d252c90..21b9d2ec0b7014728e2af232cb1d165396c8ebc0 100644 (file)
--- a/src/mem.s
+++ b/src/mem.s
@@ -43,15 +43,19 @@ mem_init:
        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
index a13786508fa54c199c76e83cf6038e5c075af933..11210a8dab829bcacb15d5adebe6e10abae31f78 100644 (file)
@@ -159,6 +159,8 @@ update_render:
        ret
        
 new_game:
+       call map_generate
+
        call player_init
        ld de, l1
        call map_load
index d1b01befcfaf49cbabde645e7a02e2543b7a939e..762573b520b000a841b27a800b1eee460f2b8c44 100644 (file)
@@ -30,7 +30,7 @@ scrn_select: .adv 1
 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
@@ -118,18 +118,18 @@ map: .adv 2
        ; 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
@@ -166,6 +166,13 @@ map_mark_flag: .adv 1
 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