From: Pasi Kallinen Date: Sat, 19 Feb 2022 10:38:24 +0000 (+0200) Subject: Allow creating unhidden traps in special levels X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c434236f1e25f684376988f316ff34d79c0f78fc;p=nethack Allow creating unhidden traps in special levels des.trap({ type = "rust", seen = true }); --- diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 0cdfcf837..1b91edaa3 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -788,6 +788,7 @@ knights get no caitiff penalty against undead candy bars are bright blue in text mode towels weigh more than blindfolds knight quest home level contains some saddled warhorses +allow creating unhidden traps in special levels Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/doc/lua.adoc b/doc/lua.adoc index 886ba2d71..9e1f71ef4 100644 --- a/doc/lua.adoc +++ b/doc/lua.adoc @@ -741,10 +741,13 @@ Example: === trap +Create a trap. + Example: des.trap({ type = "hole", x = 1, y = 1 }); des.trap({ type = "hole", coord = {2, 2} }); + des.trap({ type = "web", coord = {2, 2}, spider_on_web = false, seen = true }); des.trap("hole", 3, 4); des.trap("level teleport", {5, 8}); des.trap("rust") diff --git a/include/hack.h b/include/hack.h index 2ed2e882d..032cc9946 100644 --- a/include/hack.h +++ b/include/hack.h @@ -519,6 +519,7 @@ enum bodypart_types { #define MKTRAP_NOFLAGS 0x0 #define MKTRAP_MAZEFLAG 0x1 /* trap placed on coords as if in maze */ #define MKTRAP_NOSPIDERONWEB 0x2 /* web will not generate a spider */ +#define MKTRAP_SEEN 0x4 /* trap is seen */ #define MON_POLE_DIST 5 /* How far monsters can use pole-weapons */ #define PET_MISSILE_RANGE2 36 /* Square of distance within which pets shoot */ diff --git a/include/sp_lev.h b/include/sp_lev.h index 920253543..77c4dbd5c 100644 --- a/include/sp_lev.h +++ b/include/sp_lev.h @@ -128,6 +128,7 @@ typedef struct { packed_coord coord; xchar x, y, type; boolean spider_on_web; + boolean seen; } spltrap; typedef struct { diff --git a/src/mklev.c b/src/mklev.c index 98a145936..be78a4504 100644 --- a/src/mklev.c +++ b/src/mklev.c @@ -1468,6 +1468,8 @@ mktrap(int num, int mktrapflags, struct mkroom *croom, coord *tm) if (kind == WEB && !(mktrapflags & MKTRAP_NOSPIDERONWEB)) (void) makemon(&mons[PM_GIANT_SPIDER], m.x, m.y, NO_MM_FLAGS); + if ((mktrapflags & MKTRAP_SEEN)) + t->tseen = TRUE; /* The hero isn't the only person who's entered the dungeon in search of treasure. On the very shallowest levels, there's a diff --git a/src/sp_lev.c b/src/sp_lev.c index cde164295..19af374d9 100644 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -1743,6 +1743,8 @@ create_trap(spltrap* t, struct mkroom* croom) if (!t->spider_on_web) mktrap_flags |= MKTRAP_NOSPIDERONWEB; + if (t->seen) + mktrap_flags |= MKTRAP_SEEN; tm.x = x; tm.y = y; @@ -4117,6 +4119,7 @@ lspo_trap(lua_State *L) get_table_xy_or_coord(L, &x, &y); tmptrap.type = get_table_traptype_opt(L, "type", -1); tmptrap.spider_on_web = get_table_boolean_opt(L, "spider_on_web", 1); + tmptrap.seen = get_table_boolean_opt(L, "seen", FALSE); } if (tmptrap.type == NO_TRAP)