-/* NetHack 3.7 rm.h $NHDT-Date: 1596498558 2020/08/03 23:49:18 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.83 $ */
+/* NetHack 3.7 rm.h $NHDT-Date: 1599434249 2020/09/06 23:17:29 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.84 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Pasi Kallinen, 2017. */
/* NetHack may be freely redistributed. See license for details. */
Bitfield(candig, 1); /* Exception to Can_dig_down; was a trapdoor */
};
-#define SET_TYPLIT(x, y, ttyp, llit) \
- { \
- if ((x) >= 0 && (y) >= 0 && (x) < COLNO && (y) < ROWNO) { \
- if ((ttyp) < MAX_TYPE) \
- levl[(x)][(y)].typ = (ttyp); \
- if ((ttyp) == LAVAPOOL) \
- levl[(x)][(y)].lit = 1; \
- else if ((schar)(llit) != -2) { \
- if ((schar)(llit) == -1) \
- levl[(x)][(y)].lit = rn2(2); \
- else \
- levl[(x)][(y)].lit = (llit); \
- } \
- } \
- }
-
/*
* Add wall angle viewing by defining "modes" for each wall type. Each
* mode describes which parts of a wall are finished (seen as as wall)
* Macros for encapsulation of level.monsters references.
*/
#if 0
-#define MON_AT(x, y) \
+#define MON_AT(x, y) \
(g.level.monsters[x][y] != (struct monst *) 0 \
&& !(g.level.monsters[x][y])->mburied)
-#define MON_BURIED_AT(x, y) \
+#define MON_BURIED_AT(x, y) \
(g.level.monsters[x][y] != (struct monst *) 0 \
&& (g.level.monsters[x][y])->mburied)
#else /* without 'mburied' */
#endif
#ifdef EXTRA_SANITY_CHECKS
#define place_worm_seg(m, x, y) \
- do { \
+ do { \
if (g.level.monsters[x][y] && g.level.monsters[x][y] != m) \
- impossible("place_worm_seg over mon"); \
- g.level.monsters[x][y] = m; \
+ impossible("place_worm_seg over mon"); \
+ g.level.monsters[x][y] = m; \
} while(0)
#define remove_monster(x, y) \
- do { \
+ do { \
if (!g.level.monsters[x][y]) \
- impossible("no monster to remove"); \
+ impossible("no monster to remove"); \
g.level.monsters[x][y] = (struct monst *) 0; \
} while(0)
#else
-/* NetHack 3.7 sp_lev.h $NHDT-Date: 1596498560 2020/08/03 23:49:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.38 $ */
+/* NetHack 3.7 sp_lev.h $NHDT-Date: 1599434249 2020/09/06 23:17:29 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.39 $ */
/* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */
#define SEL_GRADIENT_RADIAL 0
#define SEL_GRADIENT_SQUARE 1
+/* light states for terrain replacements, specifically for SET_TYPLIT
+ * (not used for init_level) */
+#define SET_LIT_RANDOM -1
+#define SET_LIT_NOCHANGE -2
+
#define SP_COORD_IS_RANDOM 0x01000000L
/* Humidity flags for get_location() and friends, used with
* SP_COORD_PACK_RANDOM() */
char *data;
};
+#define SET_TYPLIT(x, y, ttyp, llit) \
+ { \
+ if ((x) >= 1 && (y) >= 0 && (x) < COLNO && (y) < ROWNO) { \
+ if ((ttyp) < MAX_TYPE) \
+ levl[(x)][(y)].typ = (ttyp); \
+ if ((ttyp) == LAVAPOOL) \
+ levl[(x)][(y)].lit = 1; \
+ else if ((schar)(llit) != SET_LIT_NOCHANGE) { \
+ if ((schar)(llit) == SET_LIT_RANDOM) \
+ levl[(x)][(y)].lit = rn2(2); \
+ else \
+ levl[(x)][(y)].lit = (llit); \
+ } \
+ } \
+ }
+
#endif /* SP_LEV_H */
-/* NetHack 3.7 sp_lev.c $NHDT-Date: 1596498212 2020/08/03 23:43:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.201 $ */
+/* NetHack 3.7 sp_lev.c $NHDT-Date: 1599434249 2020/09/06 23:17:29 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.202 $ */
/* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */
*/
#define IN_SP_LEV_C
-
+
#include "hack.h"
#include "sp_lev.h"
return 0;
}
-/* terrain({ x=NN, y=NN, typ=MAPCHAR, lit=BOOL }); */
-/* terrain({ coord={X, Y}, typ=MAPCHAR, lit=BOOL }); */
-/* terrain({ selection=SELECTION, typ=MAPCHAR, lit=BOOL }); */
-/* terrain( SELECTION, MAPCHAR [, BOOL ] ); */
-/* terrain({x,y}, MAPCHAR); */
-/* terrain(x,y, MAPCHAR); */
+/*
+ * [lit_state: 1 On, 0 Off, -1 random, -2 leave as-is]
+ * terrain({ x=NN, y=NN, typ=MAPCHAR, lit=lit_state });
+ * terrain({ coord={X, Y}, typ=MAPCHAR, lit=lit_state });
+ * terrain({ selection=SELECTION, typ=MAPCHAR, lit=lit_state });
+ * terrain( SELECTION, MAPCHAR [, lit_state ] );
+ * terrain({x,y}, MAPCHAR);
+ * terrain(x,y, MAPCHAR);
+ */
int
lspo_terrain(L)
lua_State *L;
int argc = lua_gettop(L);
create_des_coder();
- tmpterrain.tlit = 0;
+ tmpterrain.tlit = SET_LIT_NOCHANGE;
tmpterrain.ter = INVALID_TYPE;
if (argc == 1) {
lua_pop(L, 1);
}
tmpterrain.ter = get_table_mapchr(L, "typ");
- tmpterrain.tlit = get_table_int_opt(L, "lit", 0);
+ tmpterrain.tlit = get_table_int_opt(L, "lit", SET_LIT_NOCHANGE);
} else if (argc == 2 && lua_type(L, 1) == LUA_TTABLE
&& lua_type(L, 2) == LUA_TSTRING) {
int tx, ty;
return 0;
}
-/* replace_terrain({ x1=NN,y1=NN, x2=NN,y2=NN, fromterrain=MAPCHAR, toterrain=MAPCHAR, lit=N, chance=NN }); */
-/* replace_terrain({ region={x1,y1, x2,y2}, fromterrain=MAPCHAR, toterrain=MAPCHAR, lit=N, chance=NN }); */
-/* replace_terrain({ selection=selection.area(2,5, 40,10), fromterrain=MAPCHAR, toterrain=MAPCHAR }); */
-/* replace_terrain({ selection=SEL, mapfragment=[[...]], toterrain=MAPCHAR }); */
+/*
+ * replace_terrain({ x1=NN,y1=NN, x2=NN,y2=NN, fromterrain=MAPCHAR,
+ * toterrain=MAPCHAR, lit=N, chance=NN });
+ * replace_terrain({ region={x1,y1, x2,y2}, fromterrain=MAPCHAR,
+ * toterrain=MAPCHAR, lit=N, chance=NN });
+ * replace_terrain({ selection=selection.area(2,5, 40,10),
+ * fromterrain=MAPCHAR, toterrain=MAPCHAR });
+ * replace_terrain({ selection=SEL, mapfragment=[[...]],
+ * toterrain=MAPCHAR });
+ */
int
lspo_replace_terrain(L)
lua_State *L;
}
chance = get_table_int_opt(L, "chance", 100);
- tolit = get_table_int_opt(L, "lit", -2);
+ tolit = get_table_int_opt(L, "lit", SET_LIT_NOCHANGE);
x1 = get_table_int_opt(L, "x1", -1);
y1 = get_table_int_opt(L, "y1", -1);
x2 = get_table_int_opt(L, "x2", -1);