From 16ed7e49c314457b216ec1b310b1cc06a9c6034a Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Sun, 29 Oct 2023 12:35:32 +0200 Subject: [PATCH] Separate level flags for premapped and sokoban --- dat/soko1-1.lua | 2 +- dat/soko1-2.lua | 2 +- dat/soko2-1.lua | 2 +- dat/soko2-2.lua | 2 +- dat/soko3-1.lua | 2 +- dat/soko3-2.lua | 2 +- dat/soko4-1.lua | 2 +- dat/soko4-2.lua | 2 +- doc/fixes3-7-0.txt | 1 + doc/lua.adoc | 1 + include/extern.h | 2 +- src/detect.c | 7 ++----- src/sp_lev.c | 10 ++++++---- 13 files changed, 19 insertions(+), 18 deletions(-) diff --git a/dat/soko1-1.lua b/dat/soko1-1.lua index 53b586572..bd90ecdc4 100644 --- a/dat/soko1-1.lua +++ b/dat/soko1-1.lua @@ -4,7 +4,7 @@ -- des.level_init({ style = "solidfill", fg = " " }); -des.level_flags("mazelevel", "noteleport", "premapped", "solidify"); +des.level_flags("mazelevel", "noteleport", "premapped", "sokoban", "solidify"); des.map([[ -------------------------- |........................| diff --git a/dat/soko1-2.lua b/dat/soko1-2.lua index 8e7b8507d..aff446df5 100644 --- a/dat/soko1-2.lua +++ b/dat/soko1-2.lua @@ -4,7 +4,7 @@ -- des.level_init({ style = "solidfill", fg = " " }); -des.level_flags("mazelevel", "noteleport", "premapped", "solidify"); +des.level_flags("mazelevel", "noteleport", "premapped", "sokoban", "solidify"); des.map([[ ------------------------ diff --git a/dat/soko2-1.lua b/dat/soko2-1.lua index 93a4079b6..42cdcc5dd 100644 --- a/dat/soko2-1.lua +++ b/dat/soko2-1.lua @@ -4,7 +4,7 @@ -- des.level_init({ style = "solidfill", fg = " " }); -des.level_flags("mazelevel", "noteleport", "premapped", "solidify"); +des.level_flags("mazelevel", "noteleport", "premapped", "sokoban", "solidify"); des.map([[ -------------------- diff --git a/dat/soko2-2.lua b/dat/soko2-2.lua index fe495e59f..27af1df10 100644 --- a/dat/soko2-2.lua +++ b/dat/soko2-2.lua @@ -4,7 +4,7 @@ -- des.level_init({ style = "solidfill", fg = " " }); -des.level_flags("mazelevel", "noteleport", "premapped", "solidify"); +des.level_flags("mazelevel", "noteleport", "premapped", "sokoban", "solidify"); des.map([[ -------- diff --git a/dat/soko3-1.lua b/dat/soko3-1.lua index d677c9cb5..bf14fbfad 100644 --- a/dat/soko3-1.lua +++ b/dat/soko3-1.lua @@ -4,7 +4,7 @@ -- des.level_init({ style = "solidfill", fg = " " }); -des.level_flags("mazelevel", "noteleport", "premapped", "solidify"); +des.level_flags("mazelevel", "noteleport", "premapped", "sokoban", "solidify"); des.map([[ ----------- ----------- diff --git a/dat/soko3-2.lua b/dat/soko3-2.lua index 9d6068583..855575552 100644 --- a/dat/soko3-2.lua +++ b/dat/soko3-2.lua @@ -4,7 +4,7 @@ -- des.level_init({ style = "solidfill", fg = " " }); -des.level_flags("mazelevel", "noteleport", "premapped", "solidify"); +des.level_flags("mazelevel", "noteleport", "premapped", "sokoban", "solidify"); des.map([[ ---- ----------- diff --git a/dat/soko4-1.lua b/dat/soko4-1.lua index fdb536b81..0998220f5 100644 --- a/dat/soko4-1.lua +++ b/dat/soko4-1.lua @@ -35,7 +35,7 @@ --## Bottom (first) level of Sokoban ### des.level_init({ style = "solidfill", fg = " " }); -des.level_flags("mazelevel", "noteleport", "hardfloor", "premapped", "solidify"); +des.level_flags("mazelevel", "noteleport", "hardfloor", "premapped", "sokoban", "solidify"); des.map([[ ------ ----- diff --git a/dat/soko4-2.lua b/dat/soko4-2.lua index bd767e5ce..6b994a95a 100644 --- a/dat/soko4-2.lua +++ b/dat/soko4-2.lua @@ -4,7 +4,7 @@ -- des.level_init({ style = "solidfill", fg = " " }); -des.level_flags("mazelevel", "noteleport", "hardfloor", "premapped", "solidify"); +des.level_flags("mazelevel", "noteleport", "hardfloor", "premapped", "sokoban", "solidify"); des.map([[ -------- ------ diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 518770914..430c0799d 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1265,6 +1265,7 @@ if a temple was entered while blind, #overview could show a line of just "." were known rolling boulders ignored walls and trees shopkeepers consider the monster type when charging for tins, eggs and corpses +separate level flags premapped and sokoban Fixes to 3.7.0-x General Problems Exposed Via git Repository diff --git a/doc/lua.adoc b/doc/lua.adoc index 96a6f9152..b5766fecf 100644 --- a/doc/lua.adoc +++ b/doc/lua.adoc @@ -624,6 +624,7 @@ Set flags for this level. | icedpools | Ice generated with the level will be treated as frozen pools instead of frozen moats. | corrmaze | | premapped | Map, including traps and boulders, is revealed on entrance. +| sokoban | Level has special Sokoban rules | solidify | Areas outside the specified level map are made undiggable and unphaseable. | inaccessibles | If inaccessible areas are generated, generate ways for them to connect to the "accessible" area. | noflip | Prevent flipping the level. diff --git a/include/extern.h b/include/extern.h index f092d2b0d..07bd4058d 100644 --- a/include/extern.h +++ b/include/extern.h @@ -365,7 +365,7 @@ extern void find_trap(struct trap *); extern void warnreveal(void); extern int dosearch0(int); extern int dosearch(void); -extern void sokoban_detect(void); +extern void premap_detect(void); #ifdef DUMPLOG extern void dump_map(void); #endif diff --git a/src/detect.c b/src/detect.c index ccff5a322..f32809aa1 100644 --- a/src/detect.c +++ b/src/detect.c @@ -1973,9 +1973,9 @@ warnreveal(void) } } -/* Pre-map the sokoban levels */ +/* Pre-map (the sokoban) levels */ void -sokoban_detect(void) +premap_detect(void) { register coordxy x, y; register struct trap *ttmp; @@ -1997,9 +1997,6 @@ sokoban_detect(void) for (ttmp = gf.ftrap; ttmp; ttmp = ttmp->ntrap) { ttmp->tseen = 1; map_trap(ttmp, 1); - /* set sokoban_rules when there is at least one pit or hole */ - if (ttmp->ttyp == PIT || ttmp->ttyp == HOLE) - Sokoban = 1; } } diff --git a/src/sp_lev.c b/src/sp_lev.c index 80b8e96c6..d603e3778 100644 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -3714,6 +3714,8 @@ lspo_level_flags(lua_State *L) gc.coder->premapped = 1; else if (!strcmpi(s, "solidify")) gc.coder->solidify = 1; + else if (!strcmpi(s, "sokoban")) + Sokoban = 1; /* gl.level.flags.sokoban_rules */ else if (!strcmpi(s, "inaccessibles")) gc.coder->check_inaccessibles = 1; else if (!strcmpi(s, "noflipx")) @@ -6612,12 +6614,12 @@ lspo_finalize_level(lua_State *L UNUSED) if (L && gc.coder->solidify) solidify_map(); - /* This must be done before sokoban_detect(), + /* This must be done before premap_detect(), * otherwise branch stairs won't be premapped. */ fixup_special(); if (L && gc.coder->premapped) - sokoban_detect(); + premap_detect(); level_finalize_topology(); @@ -7075,12 +7077,12 @@ load_special(const char *name) if (gc.coder->solidify) solidify_map(); - /* This must be done before sokoban_detect(), + /* This must be done before premap_detect(), * otherwise branch stairs won't be premapped. */ fixup_special(); if (gc.coder->premapped) - sokoban_detect(); + premap_detect(); result = TRUE; give_up: