Game is playable, and should compile on linux and Windows. Assumes you have a lua 5.3 library available. Removes level compiler and associated files. Replaces special level des-files with lua scripts. Exposes some NetHack internals to lua: - des-table with commands to create special levels - nh-table with NetHack core commands - nhc-table with some constants - u-table with some player-specific data (u-struct) - selection userdata Adds some rudimentary tests. Adds new extended command #wizloadlua to run a specific script, and #wizloaddes to run a specific level-creation script. nhlib.lua is loaded for every lua script. Download and untar lua: mkdir lib cd lib curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz tar zxf lua-5.3.5.tar.gz Then make nethack normally.
195 lines
4.6 KiB
C
195 lines
4.6 KiB
C
/* NetHack 3.6 sp_lev.h $NHDT-Date: 1544930819 2018/12/16 03:26:59 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.25 $ */
|
|
/* Copyright (c) 1989 by Jean-Christophe Collet */
|
|
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#ifndef SP_LEV_H
|
|
#define SP_LEV_H
|
|
|
|
/* wall directions */
|
|
#define W_NORTH 1
|
|
#define W_SOUTH 2
|
|
#define W_EAST 4
|
|
#define W_WEST 8
|
|
#define W_ANY (W_NORTH | W_SOUTH | W_EAST | W_WEST)
|
|
|
|
/* MAP limits */
|
|
#define MAP_X_LIM 76
|
|
#define MAP_Y_LIM 21
|
|
|
|
/* Per level flags */
|
|
#define NOTELEPORT 0x00000001L
|
|
#define HARDFLOOR 0x00000002L
|
|
#define NOMMAP 0x00000004L
|
|
#define SHORTSIGHTED 0x00000008L
|
|
#define ARBOREAL 0x00000010L
|
|
#define MAZELEVEL 0x00000020L
|
|
#define PREMAPPED 0x00000040L /* premapped level & sokoban rules */
|
|
#define SHROUD 0x00000080L
|
|
#define GRAVEYARD 0x00000100L
|
|
#define ICEDPOOLS 0x00000200L /* for ice locations: ICED_POOL vs ICED_MOAT \
|
|
*/
|
|
#define SOLIDIFY 0x00000400L /* outer areas are nondiggable & nonpasswall */
|
|
#define CORRMAZE 0x00000800L /* for maze levels only */
|
|
#define CHECK_INACCESSIBLES 0x00001000L /* check for inaccessible areas and
|
|
generate ways to escape from them */
|
|
|
|
/* different level layout initializers */
|
|
enum lvlinit_types {
|
|
LVLINIT_NONE = 0,
|
|
LVLINIT_SOLIDFILL,
|
|
LVLINIT_MAZEGRID,
|
|
LVLINIT_MINES,
|
|
LVLINIT_ROGUE
|
|
};
|
|
|
|
/* max. nested depth of subrooms */
|
|
#define MAX_NESTED_ROOMS 5
|
|
|
|
/* When creating objects, we need to know whether
|
|
* it's a container and/or contents.
|
|
*/
|
|
#define SP_OBJ_CONTENT 0x1
|
|
#define SP_OBJ_CONTAINER 0x2
|
|
|
|
/* SPO_FILTER types */
|
|
#define SPOFILTER_PERCENT 0
|
|
#define SPOFILTER_SELECTION 1
|
|
#define SPOFILTER_MAPCHAR 2
|
|
|
|
/* gradient filter types */
|
|
#define SEL_GRADIENT_RADIAL 0
|
|
#define SEL_GRADIENT_SQUARE 1
|
|
|
|
#define SP_COORD_IS_RANDOM 0x01000000L
|
|
/* Humidity flags for get_location() and friends, used with
|
|
* SP_COORD_PACK_RANDOM() */
|
|
#define DRY 0x01
|
|
#define WET 0x02
|
|
#define HOT 0x04
|
|
#define SOLID 0x08
|
|
#define ANY_LOC 0x10 /* even outside the level */
|
|
#define NO_LOC_WARN 0x20 /* no complaints and set x & y to -1, if no loc */
|
|
#define SPACELOC 0x40 /* like DRY, but accepts furniture too */
|
|
|
|
#define SP_COORD_X(l) (l & 0xff)
|
|
#define SP_COORD_Y(l) ((l >> 16) & 0xff)
|
|
#define SP_COORD_PACK(x, y) (((x) & 0xff) + (((y) & 0xff) << 16))
|
|
#define SP_COORD_PACK_RANDOM(f) (SP_COORD_IS_RANDOM | (f))
|
|
|
|
struct sp_coder {
|
|
int premapped;
|
|
boolean solidify;
|
|
struct mkroom *croom;
|
|
int room_stack;
|
|
struct mkroom *tmproomlist[MAX_NESTED_ROOMS + 1];
|
|
boolean failed_room[MAX_NESTED_ROOMS + 1];
|
|
int n_subroom;
|
|
int lvl_is_joined;
|
|
boolean check_inaccessibles;
|
|
};
|
|
|
|
/*
|
|
* Structures manipulated by the special levels loader & compiler
|
|
*/
|
|
|
|
#define packed_coord long
|
|
typedef struct {
|
|
xchar is_random;
|
|
long getloc_flags;
|
|
int x, y;
|
|
} unpacked_coord;
|
|
|
|
typedef struct {
|
|
xchar init_style; /* one of LVLINIT_foo */
|
|
long flags;
|
|
schar filling;
|
|
boolean init_present, padding;
|
|
char fg, bg;
|
|
boolean smoothed, joined;
|
|
xchar lit, walled;
|
|
boolean icedpools;
|
|
} lev_init;
|
|
|
|
typedef struct {
|
|
xchar wall, pos, secret, mask;
|
|
} room_door;
|
|
|
|
typedef struct {
|
|
packed_coord coord;
|
|
xchar x, y, type;
|
|
} spltrap;
|
|
|
|
typedef struct {
|
|
Str_or_Len name, appear_as;
|
|
short id;
|
|
aligntyp align;
|
|
packed_coord coord;
|
|
xchar x, y, class, appear;
|
|
schar peaceful, asleep;
|
|
short female, invis, cancelled, revived, avenge, fleeing, blinded,
|
|
paralyzed, stunned, confused;
|
|
long seentraps;
|
|
short has_invent;
|
|
} monster;
|
|
|
|
typedef struct {
|
|
Str_or_Len name;
|
|
int corpsenm;
|
|
short id, spe;
|
|
packed_coord coord;
|
|
xchar x, y, class, containment;
|
|
schar curse_state;
|
|
int quan;
|
|
short buried;
|
|
short lit;
|
|
short eroded, locked, trapped, recharged, invis, greased, broken;
|
|
} object;
|
|
|
|
typedef struct {
|
|
packed_coord coord;
|
|
xchar x, y;
|
|
aligntyp align;
|
|
xchar shrine;
|
|
} altar;
|
|
|
|
typedef struct {
|
|
xchar x1, y1, x2, y2;
|
|
xchar rtype, rlit, rirreg;
|
|
} region;
|
|
|
|
typedef struct {
|
|
xchar ter, tlit;
|
|
} terrain;
|
|
|
|
typedef struct {
|
|
xchar chance;
|
|
xchar x1, y1, x2, y2;
|
|
xchar fromter, toter, tolit;
|
|
} replaceterrain;
|
|
|
|
typedef struct {
|
|
struct {
|
|
xchar room;
|
|
xchar wall;
|
|
xchar door;
|
|
} src, dest;
|
|
} corridor;
|
|
|
|
typedef struct _room {
|
|
Str_or_Len name;
|
|
Str_or_Len parent;
|
|
xchar x, y, w, h;
|
|
xchar xalign, yalign;
|
|
xchar rtype, chance, rlit, filled, joined;
|
|
} room;
|
|
|
|
typedef struct {
|
|
schar zaligntyp;
|
|
schar keep_region;
|
|
schar halign, valign;
|
|
char xsize, ysize;
|
|
char **map;
|
|
} mazepart;
|
|
|
|
#endif /* SP_LEV_H */
|