From 96f2e943e60a13f4dd3ae4fd266e95d991b7daf2 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Mon, 9 Feb 2026 07:41:25 +0100 Subject: [PATCH] mapgen: wip map buffer This buffer is used to generate a tilemap. Added buffer clear and map seed management. --- src/mapgen.s | 39 ++++++++++++++++++++++++++++++++++++--- src/mem.s | 4 ++++ src/update.s | 2 ++ src/wram.s | 17 ++++++++++++----- 4 files changed, 54 insertions(+), 8 deletions(-) diff --git a/src/mapgen.s b/src/mapgen.s index 63248a1..609804e 100644 --- a/src/mapgen.s +++ b/src/mapgen.s @@ -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 diff --git a/src/mem.s b/src/mem.s index c0b898b..21b9d2e 100644 --- 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 diff --git a/src/update.s b/src/update.s index a137865..11210a8 100644 --- a/src/update.s +++ b/src/update.s @@ -159,6 +159,8 @@ update_render: ret new_game: + call map_generate + call player_init ld de, l1 call map_load diff --git a/src/wram.s b/src/wram.s index d1b01be..762573b 100644 --- a/src/wram.s +++ b/src/wram.s @@ -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 -- 2.30.2