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({ type = "falling rock", victim = false });
des.trap({ type = "rolling boulder", coord = {7, 5}, launchfrom = {-2, -2} });
des.trap("hole", 3, 4);
des.trap("level teleport", {5, 8});
#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 MKTRAP_NOVICTIM 0x8 /* no victim corpse or items on it */
#define MON_POLE_DIST 5 /* How far monsters can use pole-weapons */
#define PET_MISSILE_RANGE2 36 /* Square of distance within which pets shoot */
xint16 type;
boolean spider_on_web;
boolean seen;
+ boolean novictim;
} spltrap;
typedef struct {
lethal, and tend not to generate on shallower levels anyway.
Finally, pits are excluded because it's weird to see an item
in a pit and yet not be able to identify that the pit is there. */
- if (kind != NO_TRAP && lvl <= (unsigned) rnd(4)
+ if (kind != NO_TRAP && !(mktrapflags & MKTRAP_NOVICTIM)
+ && lvl <= (unsigned) rnd(4)
&& kind != SQKY_BOARD && kind != RUST_TRAP
/* rolling boulder trap might not have a boulder if there was no
viable path (such as when placed in the corner of a room), in
mktrap_flags |= MKTRAP_NOSPIDERONWEB;
if (t->seen)
mktrap_flags |= MKTRAP_SEEN;
+ if (t->novictim)
+ mktrap_flags |= MKTRAP_NOVICTIM;
tm.x = x;
tm.y = y;
tmptrap.spider_on_web = TRUE;
tmptrap.seen = FALSE;
+ tmptrap.novictim = FALSE;
if (argc == 1 && lua_type(L, 1) == LUA_TSTRING) {
const char *trapstr = luaL_checkstring(L, 1);
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);
+ tmptrap.novictim = !get_table_boolean_opt(L, "victim", TRUE);
lua_getfield(L, -1, "launchfrom");
if (lua_type(L, -1) == LUA_TTABLE) {