From 7f1bef07bed73b3c292da92a142b49d7d37a58d5 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Wed, 18 Feb 2026 05:32:20 +0100 Subject: [PATCH] mapgen: Added pre-computed seeds in save game. This change makes it easier to store which floor used which seed. --- src/defs.s | 7 +++++++ src/main.s | 1 + src/mapgen.s | 37 ++++++++++++++++++++++++++++--------- src/rand.s | 13 ------------- src/save.s | 12 ++++++++++++ src/sram.s | 3 ++- src/update.s | 1 + src/wram.s | 8 +++----- 8 files changed, 54 insertions(+), 28 deletions(-) create mode 100644 src/save.s diff --git a/src/defs.s b/src/defs.s index e152935..a95e004 100644 --- a/src/defs.s +++ b/src/defs.s @@ -40,6 +40,8 @@ #define MAP_TILES (MAP_W * MAP_H) #define MAP_SECTION_SIZE 8 #define MAP_SECTION_PER_ROW (MAP_W / MAP_SECTION_SIZE) +#define MAPGEN_FLOORS_MAX 24 + #define RENDER_BUF_W 20 #define RENDER_BUF_H 14 @@ -332,3 +334,8 @@ .se 1 .de M16_CARRY, 1 .de M16_ZERO, 2 + + ; save file def +.se 0 +.de save_mapgen_seeds, 2 * MAPGEN_FLOORS_MAX +.de save_size, 0 diff --git a/src/main.s b/src/main.s index 414d820..4ca424d 100644 --- a/src/main.s +++ b/src/main.s @@ -72,6 +72,7 @@ main: #include "item.s" #include "render.s" #include "action.s" +#include "save.s" #include "tiles.inc" #include "text.s" diff --git a/src/mapgen.s b/src/mapgen.s index b771602..3aaab42 100644 --- a/src/mapgen.s +++ b/src/mapgen.s @@ -1,3 +1,23 @@ + + ; creates MAPGEN_FLOORS_MAX + ; seeds for the current file +mapgen_init_seeds: + call mbc1_ram_enable + + call save_file_select + + ; now load 2 * MAPGEN_FLOORS_MAX + ; numbers into rng + ld b, MAPGEN_FLOORS_MAX * 2 +@loop: + call rand + ld [hl+], a + dec b + jr z, @loop REL + + call mbc1_ram_disable + ret + ; generates a map ; inputs: ; mapgen_: map gen settings @@ -18,10 +38,15 @@ map_generate: ld [mapgen_game_seed+1], a ; load the seed - ld a, [mapgen_seed] + call save_file_select + ld d, 0 + ld a, [mapgen_floor] + add a, a ; *2 because the mapgen seed is 2 bytes + ld e, a + ld a, [hl+] + ld [srand], a + ld a, [hl] ld [srand], a - ld a, [mapgen_seed+1] - ld [srand+1], a ; 2) set up map header @@ -56,12 +81,6 @@ map_generate: ; 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 diff --git a/src/rand.s b/src/rand.s index e9b057c..73ec2f7 100644 --- a/src/rand.s +++ b/src/rand.s @@ -12,13 +12,6 @@ rand_init: or a, 1 ld [srand+1], a - ld a, [sram_mapgen_srand] - or a, 1 - ld [mapgen_seed], a - ld a, [sram_mapgen_srand+1] - or a, 1 - ld [mapgen_seed+1], a - call mbc1_ram_disable ret @@ -33,12 +26,6 @@ rand_save_srand: ld a, [srand+1] ld [sram_srand+1], a - ; save mapgen seed in sram - ld a, [mapgen_seed] - ld [sram_mapgen_srand], a - ld a, [mapgen_seed+1] - ld [sram_mapgen_srand], a - call mbc1_ram_disable ret diff --git a/src/save.s b/src/save.s new file mode 100644 index 0000000..e9c075e --- /dev/null +++ b/src/save.s @@ -0,0 +1,12 @@ + + ; loads the current save file + ; reutnrs: + ; hl: save file +save_file_select: + ld a, [savefile_selected] + ld d, a + ld a, [savefile_selected+1] + ld e, a + ld hl, savegame0 + save_mapgen_seeds + add hl, de + ret diff --git a/src/sram.s b/src/sram.s index e6ffe55..32f1657 100644 --- a/src/sram.s +++ b/src/sram.s @@ -10,4 +10,5 @@ ; flag for init of sram sram_magic: .adv 1 sram_srand: .adv 2 -sram_mapgen_srand: .adv 2 + +savegame0: .adv save_size diff --git a/src/update.s b/src/update.s index fa2969b..c521b65 100644 --- a/src/update.s +++ b/src/update.s @@ -159,6 +159,7 @@ update_render: ret new_game: + call mapgen_init_seeds call map_generate call player_init diff --git a/src/wram.s b/src/wram.s index 376d05a..27ed876 100644 --- a/src/wram.s +++ b/src/wram.s @@ -117,8 +117,6 @@ map: .adv 2 ; map generator settings - ; the seed used for the current map -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 @@ -135,9 +133,9 @@ mapgen_game_seed: .adv 2 mapgen_floor: .adv 1 - ; collision related data - ; y/x positions - + ; selected file offset for indexing sram + ; LE +savefile_selected: .adv 2 ; space for 1 tile id ; that represent the current tile -- 2.30.2