mapgen: Added pre-computed seeds in save game.
authorLukas Krickl <lukas@krickl.dev>
Wed, 18 Feb 2026 04:32:20 +0000 (05:32 +0100)
committerLukas Krickl <lukas@krickl.dev>
Wed, 18 Feb 2026 04:32:20 +0000 (05:32 +0100)
This change makes it easier to store which floor used which seed.

src/defs.s
src/main.s
src/mapgen.s
src/rand.s
src/save.s [new file with mode: 0644]
src/sram.s
src/update.s
src/wram.s

index e15293558f36ed7ddf6e6d0eb5fd6f047f43f1ae..a95e004eadda34f1ac46ea7e9054af0382e40374 100644 (file)
@@ -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
 .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
index 414d82083783ac564a9a80ed98a19e1a553775ac..4ca424ded1539cc95a87ee2b2cd6b36c66be1c2f 100644 (file)
@@ -72,6 +72,7 @@ main:
 #include "item.s"
 #include "render.s"
 #include "action.s"
+#include "save.s"
 
 #include "tiles.inc"
 #include "text.s"
index b771602646229e379cea64a19b1f4f5d84209ed3..3aaab421424bb75c7b334e6bccc44ae35829509a 100644 (file)
@@ -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
index e9b057c4772e6d7eaa767719b3124ea0d514bde0..73ec2f7639e777e7dccd1fb8215f1a049f54e74c 100644 (file)
@@ -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 (file)
index 0000000..e9c075e
--- /dev/null
@@ -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
index e6ffe5535fcb532c3afc53b65c212faedac19608..32f16573a7074dfc7e5d8da3ec64e37f7bc64cf2 100644 (file)
@@ -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
index fa2969bc818fe4e54b3eaade9b07cf3a05ab443e..c521b6554e88bf1b5422fd85ec9361a3d1e32f61 100644 (file)
@@ -159,6 +159,7 @@ update_render:
        ret
        
 new_game:
+       call mapgen_init_seeds
        call map_generate
 
        call player_init
index 376d05a3356ae999bde98b816fcda1e79efc74b9..27ed876b95f99eb1da064296ef3b6ea93171609d 100644 (file)
@@ -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