This change makes it easier to store which floor used which seed.
#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
#include "item.s"
#include "render.s"
#include "action.s"
+#include "save.s"
#include "tiles.inc"
#include "text.s"
+
+ ; 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
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
; 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
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
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
--- /dev/null
+
+ ; 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
; flag for init of sram
sram_magic: .adv 1
sram_srand: .adv 2
-sram_mapgen_srand: .adv 2
+
+savegame0: .adv save_size
ret
new_game:
+ call mapgen_init_seeds
call map_generate
call player_init
; 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
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