mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-16 17:32:13 +00:00
ee4d060b1f
- sethighlightsector <sectnum> <on?> - updatehighlightsector - collectsectors <<array_to_collect_sectnums>> <initial_sector> <<num_collected_sectors>> <sector_filtering_state> The latter does a breadth-first search starting from an initial sector and collects nextsectors only when the filtering state, given a sectnum as RETURN input, writes a nonzero value into RETURN. As a usage example, a.m32 includes the state 'collect_teleporting_sectors', that collects all sectors containing an SE7 and highlights them afterwards. This way, it should be possible to retrofit old maps with TROR by distributing small scripts that do most of the work (right now, joining has to be done by hand, though). * corruption checker: for the 'nextwall inconsistent with nextsector' corruption, suggest an alternative fix by searching fitting nextwalls and changing the nextwall of the corrupt wall (as opposed to the nextsector). It will display with a leading '?' in the listing, and can be demanded by suffixing 'corruptcheck tryfix' with it. For example, corruptcheck tryfix 9-21 ? would fix some corruptions in Billy Boy's cranium.map without introducing drawing errors. * fix demo playback (tueidj figured this out) git-svn-id: https://svn.eduke32.com/eduke32@1927 1a8010ca-5511-0410-912e-c29ae57300e0
582 lines
12 KiB
C
582 lines
12 KiB
C
//-------------------------------------------------------------------------
|
|
/*
|
|
Copyright (C) 1996, 2003 - 3D Realms Entertainment
|
|
Copyright (C) 2000, 2003 - Matt Saettler (EDuke Enhancements)
|
|
Copyright (C) 2004, 2007 - EDuke32 developers
|
|
|
|
This file is part of EDuke32
|
|
|
|
EDuke32 is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License version 2
|
|
as published by the Free Software Foundation.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
//-------------------------------------------------------------------------
|
|
|
|
#ifndef _m32def_h_
|
|
#define _m32def_h_
|
|
|
|
// the parsing routines aren't good at error recovery yet...
|
|
#define ABORTERRCNT 1
|
|
|
|
// these two are for m32def.c
|
|
#define C_CUSTOMERROR(Text, ...) do { \
|
|
C_ReportError(-1); \
|
|
initprintf("%s:%d: error: " Text "\n", g_szScriptFileName, g_lineNumber, ## __VA_ARGS__); \
|
|
C_PrintErrorPosition(); \
|
|
g_numCompilerErrors++; \
|
|
} while (0)
|
|
#define C_CUSTOMWARNING(Text, ...) do { \
|
|
C_ReportError(-1); \
|
|
initprintf("%s:%d: warning: " Text "\n", g_szScriptFileName, g_lineNumber, ## __VA_ARGS__); \
|
|
C_PrintErrorPosition(); \
|
|
g_numCompilerWarnings++; \
|
|
} while (0)
|
|
|
|
extern void C_PrintErrorPosition();
|
|
extern void C_ReportError(int32_t iError);
|
|
|
|
extern char g_szScriptFileName[BMAX_PATH];
|
|
extern int32_t g_totalLines, g_lineNumber;
|
|
extern int32_t g_numCompilerErrors, g_numCompilerWarnings;
|
|
|
|
extern int32_t g_didDefineSomething;
|
|
|
|
extern instype *g_scriptPtr;
|
|
|
|
void C_Compile(const char *filenameortext, int32_t isfilename);
|
|
void C_CompilationInfo(void);
|
|
|
|
typedef struct
|
|
{
|
|
int32_t ofs; // offset into script[]
|
|
int32_t codesize;
|
|
uint16_t numlocals; // number of local int32_t vars to allocate
|
|
char name[MAXLABELLEN];
|
|
} statesinfo_t;
|
|
|
|
extern statesinfo_t *statesinfo;
|
|
extern int32_t g_stateCount;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
const char *name;
|
|
int16_t lId;
|
|
int16_t flags; // 1: read-only
|
|
int32_t min, max;
|
|
} memberlabel_t;
|
|
|
|
extern const memberlabel_t SectorLabels[];
|
|
extern const memberlabel_t WallLabels[];
|
|
extern const memberlabel_t SpriteLabels[];
|
|
extern const memberlabel_t LightLabels[];
|
|
|
|
|
|
typedef struct {
|
|
const char* token;
|
|
int32_t val;
|
|
} tokenmap_t;
|
|
|
|
extern const tokenmap_t iter_tokens[];
|
|
|
|
|
|
typedef struct {
|
|
int32_t g_i;
|
|
// VM state: either ==0 (top-level), >=1 and < MAXEVENTS+1 (event),
|
|
// or >= MAXEVENTS+1 and < MAXEVENTS+1+g_stateCount (state)
|
|
int32_t g_st;
|
|
spritetype *g_sp;
|
|
uint32_t flags; //g_errorFlag, g_returnFlag;
|
|
uint32_t updatehighlight;
|
|
uint32_t updatehighlightsector;
|
|
} vmstate_t;
|
|
|
|
#define VMFLAG_RETURN 1
|
|
#define VMFLAG_BREAK 2
|
|
#define VMFLAG_ERROR 4
|
|
|
|
extern vmstate_t vm;
|
|
extern vmstate_t vm_default;
|
|
|
|
|
|
extern int32_t g_errorLineNum;
|
|
extern int32_t g_tw;
|
|
extern const char *keyw[];
|
|
|
|
enum SystemString_t {
|
|
STR_MAPFILENAME,
|
|
STR_VERSION,
|
|
};
|
|
|
|
enum ScriptError_t
|
|
{
|
|
ERROR_CLOSEBRACKET,
|
|
ERROR_EVENTONLY,
|
|
// ERROR_EXCEEDSMAXTILES,
|
|
ERROR_EXPECTEDKEYWORD,
|
|
ERROR_FOUNDWITHIN,
|
|
ERROR_ISAKEYWORD,
|
|
ERROR_NOENDSWITCH,
|
|
ERROR_NOTAGAMEDEF,
|
|
ERROR_NOTAGAMEVAR,
|
|
ERROR_NOTAGAMEARRAY,
|
|
ERROR_GAMEARRAYBNC,
|
|
ERROR_GAMEARRAYBNO,
|
|
ERROR_INVALIDARRAYWRITE,
|
|
ERROR_EXPECTEDSIMPLEVAR,
|
|
ERROR_OPENBRACKET,
|
|
ERROR_PARAMUNDEFINED,
|
|
ERROR_SYMBOLNOTRECOGNIZED,
|
|
ERROR_SYNTAXERROR,
|
|
ERROR_VARREADONLY,
|
|
ERROR_ARRAYREADONLY,
|
|
ERROR_VARTYPEMISMATCH,
|
|
ERROR_LABELINUSE,
|
|
// WARNING_BADGAMEVAR,
|
|
WARNING_DUPLICATECASE,
|
|
WARNING_DUPLICATEDEFINITION,
|
|
WARNING_LABELSONLY,
|
|
WARNING_NAMEMATCHESVAR,
|
|
// WARNING_CONSTANTBITSIZE,
|
|
WARNING_OUTSIDEDRAWSPRITE,
|
|
};
|
|
|
|
|
|
enum SectorLabel_t
|
|
{
|
|
SECTOR_WALLPTR,
|
|
SECTOR_WALLNUM,
|
|
SECTOR_CEILINGZ,
|
|
SECTOR_FLOORZ,
|
|
SECTOR_CEILINGSTAT,
|
|
SECTOR_FLOORSTAT,
|
|
SECTOR_CEILINGPICNUM,
|
|
SECTOR_CEILINGSLOPE,
|
|
SECTOR_CEILINGSHADE,
|
|
SECTOR_CEILINGPAL,
|
|
SECTOR_CEILINGXPANNING,
|
|
SECTOR_CEILINGYPANNING,
|
|
SECTOR_FLOORPICNUM,
|
|
SECTOR_FLOORSLOPE,
|
|
SECTOR_FLOORSHADE,
|
|
SECTOR_FLOORPAL,
|
|
SECTOR_FLOORXPANNING,
|
|
SECTOR_FLOORYPANNING,
|
|
SECTOR_VISIBILITY,
|
|
SECTOR_ALIGNTO,
|
|
SECTOR_LOTAG,
|
|
SECTOR_HITAG,
|
|
SECTOR_EXTRA,
|
|
SECTOR_END
|
|
};
|
|
|
|
enum WallLabel_t
|
|
{
|
|
WALL_X,
|
|
WALL_Y,
|
|
WALL_POINT2,
|
|
WALL_NEXTWALL,
|
|
WALL_NEXTSECTOR,
|
|
WALL_CSTAT,
|
|
WALL_PICNUM,
|
|
WALL_OVERPICNUM,
|
|
WALL_SHADE,
|
|
WALL_PAL,
|
|
WALL_XREPEAT,
|
|
WALL_YREPEAT,
|
|
WALL_XPANNING,
|
|
WALL_YPANNING,
|
|
WALL_LOTAG,
|
|
WALL_HITAG,
|
|
WALL_EXTRA,
|
|
WALL_END
|
|
};
|
|
|
|
enum SpriteLabel_t
|
|
{
|
|
SPRITE_X, // 0
|
|
SPRITE_Y,
|
|
SPRITE_Z,
|
|
SPRITE_CSTAT,
|
|
SPRITE_PICNUM,
|
|
SPRITE_SHADE, // 5
|
|
SPRITE_PAL,
|
|
SPRITE_CLIPDIST,
|
|
SPRITE_DETAIL,
|
|
SPRITE_XREPEAT,
|
|
SPRITE_YREPEAT, // 10
|
|
SPRITE_XOFFSET,
|
|
SPRITE_YOFFSET,
|
|
SPRITE_SECTNUM,
|
|
SPRITE_STATNUM,
|
|
SPRITE_ANG, // 15
|
|
SPRITE_OWNER,
|
|
SPRITE_XVEL,
|
|
SPRITE_YVEL,
|
|
SPRITE_ZVEL,
|
|
SPRITE_LOTAG, // 20
|
|
SPRITE_HITAG,
|
|
SPRITE_EXTRA,
|
|
|
|
LIGHT_X, // must be first here
|
|
LIGHT_Y,
|
|
LIGHT_Z, // 25
|
|
LIGHT_HORIZ,
|
|
LIGHT_RANGE,
|
|
LIGHT_ANGLE,
|
|
LIGHT_FADERADIUS,
|
|
LIGHT_RADIUS, // 30
|
|
LIGHT_SECTOR,
|
|
LIGHT_R,
|
|
LIGHT_G,
|
|
LIGHT_B,
|
|
LIGHT_PRIORITY, // 35
|
|
LIGHT_TILENUM,
|
|
LIGHT_MINSHADE,
|
|
LIGHT_MAXSHADE,
|
|
LIGHT_ACTIVE,
|
|
|
|
SPRITE_END
|
|
};
|
|
|
|
enum IterationTypes_t
|
|
{
|
|
ITER_ALLSPRITES,
|
|
ITER_ALLSECTORS,
|
|
ITER_ALLWALLS,
|
|
ITER_ACTIVELIGHTS,
|
|
ITER_SELSPRITES,
|
|
ITER_SELSECTORS,
|
|
ITER_SELWALLS,
|
|
ITER_DRAWNSPRITES,
|
|
// ---
|
|
ITER_SPRITESOFSECTOR,
|
|
ITER_WALLSOFSECTOR,
|
|
ITER_LOOPOFWALL,
|
|
ITER_RANGE,
|
|
ITER_END
|
|
};
|
|
|
|
enum ScriptKeywords_t
|
|
{
|
|
// basic commands
|
|
CON_NULLOP,
|
|
CON_DEFINE,
|
|
CON_INCLUDE,
|
|
CON_DEFSTATE,
|
|
CON_ENDS,
|
|
CON_STATE,
|
|
CON_ONEVENT,
|
|
CON_ENDEVENT,
|
|
CON_GAMEVAR,
|
|
|
|
// control flow (except if*)
|
|
CON_ELSE,
|
|
CON_RETURN,
|
|
CON_BREAK,
|
|
CON_SWITCH,
|
|
CON_CASE,
|
|
CON_DEFAULT,
|
|
CON_ENDSWITCH,
|
|
CON_GETCURRADDRESS,
|
|
CON_JUMP,
|
|
CON_LEFTBRACE,
|
|
CON_RIGHTBRACE,
|
|
|
|
#if 0
|
|
// more basic commands
|
|
CON_SETSECTOR,
|
|
CON_GETSECTOR,
|
|
CON_SETWALL,
|
|
CON_GETWALL,
|
|
CON_SETSPRITE, //+
|
|
CON_GETSPRITE, //+
|
|
CON_GETTSPR,
|
|
CON_SETTSPR,
|
|
#endif
|
|
|
|
// arrays
|
|
CON_GAMEARRAY,
|
|
CON_SETARRAY,
|
|
CON_GETARRAYSIZE,
|
|
CON_RESIZEARRAY,
|
|
CON_COPY,
|
|
/// CON_WRITEARRAYTOFILE,
|
|
/// CON_READARRAYFROMFILE,
|
|
|
|
// var ops
|
|
CON_RANDVAR,
|
|
CON_DISPLAYRANDVAR,
|
|
CON_SETVAR,
|
|
CON_ADDVAR,
|
|
CON_SUBVAR,
|
|
CON_MULVAR,
|
|
CON_DIVVAR,
|
|
CON_MODVAR,
|
|
CON_ANDVAR,
|
|
CON_ORVAR,
|
|
CON_XORVAR,
|
|
CON_SHIFTVARL,
|
|
CON_SHIFTVARR,
|
|
// varvar ops
|
|
CON_RANDVARVAR,
|
|
CON_DISPLAYRANDVARVAR,
|
|
CON_SETVARVAR,
|
|
CON_ADDVARVAR,
|
|
CON_SUBVARVAR,
|
|
CON_MULVARVAR,
|
|
CON_DIVVARVAR,
|
|
CON_MODVARVAR,
|
|
CON_ANDVARVAR,
|
|
CON_ORVARVAR,
|
|
CON_XORVARVAR,
|
|
CON_SHIFTVARVARL,
|
|
CON_SHIFTVARVARR,
|
|
CON_SIN,
|
|
CON_COS,
|
|
|
|
// random
|
|
CON_DISPLAYRAND,
|
|
|
|
// other math
|
|
CON_ITOF,
|
|
CON_FTOI,
|
|
CON_CLAMP,
|
|
CON_INV,
|
|
CON_SQRT,
|
|
CON_MULSCALE,
|
|
CON_DIVSCALE,
|
|
CON_DIST,
|
|
CON_LDIST,
|
|
CON_CALCHYPOTENUSE,
|
|
CON_GETANGLE,
|
|
CON_GETINCANGLE,
|
|
CON_A2XY,
|
|
CON_AH2XYZ,
|
|
|
|
CON_COLLECTSECTORS,
|
|
CON_SORT,
|
|
CON_FOR,
|
|
|
|
// if & while var
|
|
CON_IFVARL,
|
|
CON_IFVARLE,
|
|
CON_IFVARG,
|
|
CON_IFVARGE,
|
|
CON_IFVARE,
|
|
CON_IFVARN,
|
|
CON_IFVARAND,
|
|
CON_IFVAROR,
|
|
CON_IFVARXOR,
|
|
CON_IFVAREITHER,
|
|
CON_IFVARBOTH,
|
|
CON_WHILEVARN,
|
|
CON_WHILEVARL,
|
|
|
|
// if & while varvar
|
|
CON_IFVARVARL,
|
|
CON_IFVARVARLE,
|
|
CON_IFVARVARG,
|
|
CON_IFVARVARGE,
|
|
CON_IFVARVARE,
|
|
CON_IFVARVARN,
|
|
CON_IFVARVARAND,
|
|
CON_IFVARVAROR,
|
|
CON_IFVARVARXOR,
|
|
CON_IFVARVAREITHER,
|
|
CON_IFVARVARBOTH,
|
|
CON_WHILEVARVARN,
|
|
CON_WHILEVARVARL,
|
|
|
|
// other if*
|
|
CON_IFHITKEY,
|
|
CON_IFHOLDKEY,
|
|
CON_IFRND,
|
|
|
|
// if* using current sprite
|
|
CON_IFANGDIFFL,
|
|
CON_IFSPRITEPAL,
|
|
CON_IFHIGHLIGHTED,
|
|
CON_IFACTOR,
|
|
CON_IFSOUND,
|
|
CON_IFPDISTL,
|
|
CON_IFPDISTG,
|
|
/// CON_IFGAPZL,
|
|
/// CON_IFFLOORDISTL,
|
|
/// CON_IFCEILINGDISTL,
|
|
|
|
CON_IFINSIDE,
|
|
|
|
CON_IFEITHERALT,
|
|
CON_IFEITHERCTRL,
|
|
CON_IFEITHERSHIFT,
|
|
CON_IFAWAYFROMWALL,
|
|
CON_IFCANSEE,
|
|
CON_IFONWATER,
|
|
CON_IFINWATER,
|
|
CON_IFOUTSIDE,
|
|
/// CON_IFHITSPACE,
|
|
/// CON_IFINSPACE,
|
|
/// CON_IFINOUTERSPACE,
|
|
/// CON_IFCANSEETARGET,
|
|
CON_IFNOSOUNDS,
|
|
CON_IFIN3DMODE,
|
|
CON_IFAIMINGSPRITE,
|
|
CON_IFAIMINGWALL,
|
|
CON_IFAIMINGSECTOR,
|
|
|
|
// BUILD functions
|
|
CON_RESETKEY,
|
|
CON_INSERTSPRITE,
|
|
CON_DUPSPRITE,
|
|
CON_TDUPSPRITE,
|
|
CON_DELETESPRITE,
|
|
CON_LASTWALL,
|
|
CON_UPDATECURSECTNUM,
|
|
CON_UPDATESECTOR,
|
|
CON_UPDATESECTORZ,
|
|
CON_GETZRANGE,
|
|
CON_CLIPMOVE,
|
|
CON_LINEINTERSECT,
|
|
CON_RAYINTERSECT,
|
|
CON_HITSCAN,
|
|
CON_CANSEE,
|
|
CON_CANSEESPR,
|
|
CON_NEARTAG,
|
|
CON_ROTATEPOINT,
|
|
CON_DRAGPOINT,
|
|
CON_GETCEILZOFSLOPE,
|
|
CON_GETFLORZOFSLOPE,
|
|
CON_ALIGNCEILSLOPE,
|
|
CON_ALIGNFLORSLOPE,
|
|
CON_BSETSPRITE, // was CON_SETSPRITE
|
|
CON_SETFIRSTWALL,
|
|
CON_CHANGESPRITESTAT,
|
|
CON_CHANGESPRITESECT,
|
|
CON_HEADSPRITESTAT,
|
|
CON_PREVSPRITESTAT,
|
|
CON_NEXTSPRITESTAT,
|
|
CON_HEADSPRITESECT,
|
|
CON_PREVSPRITESECT,
|
|
CON_NEXTSPRITESECT,
|
|
CON_SECTOROFWALL,
|
|
CON_FIXREPEATS,
|
|
CON_GETCLOSESTCOL,
|
|
|
|
// stuff
|
|
CON_UPDATEHIGHLIGHT,
|
|
CON_UPDATEHIGHLIGHTSECTOR,
|
|
CON_SETHIGHLIGHT,
|
|
CON_SETHIGHLIGHTSECTOR,
|
|
CON_ADDLOGVAR,
|
|
CON_ADDLOG,
|
|
CON_DEBUG,
|
|
|
|
// strings
|
|
CON_DEFINEQUOTE,
|
|
CON_REDEFINEQUOTE,
|
|
CON_PRINT,
|
|
CON_QUOTE,
|
|
CON_ERRORINS,
|
|
CON_PRINTMESSAGE16,
|
|
CON_PRINTMESSAGE256,
|
|
CON_PRINTEXT256,
|
|
CON_PRINTEXT16,
|
|
CON_DRAWLABEL,
|
|
CON_GETNUMBER16,
|
|
CON_GETNUMBER256,
|
|
CON_QSPRINTF,
|
|
CON_QSTRCAT,
|
|
CON_QSTRCPY,
|
|
CON_QSTRLEN,
|
|
// CON_QGETSYSSTR,
|
|
CON_QSTRNCAT,
|
|
CON_QSUBSTR,
|
|
|
|
// findnear*
|
|
CON_FINDNEARSPRITE,
|
|
CON_FINDNEARSPRITEVAR,
|
|
CON_FINDNEARSPRITE3D,
|
|
CON_FINDNEARSPRITE3DVAR,
|
|
CON_FINDNEARSPRITEZ,
|
|
CON_FINDNEARSPRITEZVAR,
|
|
|
|
CON_GETTICKS,
|
|
CON_GETTIMEDATE,
|
|
CON_SETASPECT,
|
|
|
|
// vvv stuff using current sprite
|
|
CON_SETI,
|
|
CON_SIZEAT,
|
|
CON_CSTAT,
|
|
CON_CSTATOR,
|
|
CON_CLIPDIST,
|
|
CON_SPRITEPAL,
|
|
CON_CACTOR,
|
|
CON_SPGETLOTAG,
|
|
CON_SPGETHITAG,
|
|
CON_SECTGETLOTAG,
|
|
CON_SECTGETHITAG,
|
|
CON_GETTEXTUREFLOOR,
|
|
CON_GETTEXTURECEILING,
|
|
/// CON_KILLIT,
|
|
|
|
// left to define later/undecided
|
|
|
|
// sound
|
|
CON_SOUNDVAR,
|
|
CON_SOUNDONCEVAR,
|
|
CON_STOPALLSOUNDS,
|
|
CON_STOPSOUNDVAR,
|
|
CON_GLOBALSOUNDVAR,
|
|
CON_GETSOUNDFLAGS,
|
|
/// CON_SOUND,
|
|
/// CON_SOUNDONCE,
|
|
/// CON_STOPSOUND,
|
|
/// CON_GLOBALSOUND,
|
|
|
|
// drawing
|
|
/// CON_MYOS,
|
|
/// CON_MYOSPAL,
|
|
/// CON_MYOSX,
|
|
/// CON_MYOSPALX,
|
|
/// CON_MINITEXT,
|
|
/// CON_GAMETEXT,
|
|
/// CON_DIGITALNUMBER,
|
|
/// CON_SHOWVIEW,
|
|
/// CON_GAMETEXTZ,
|
|
/// CON_DIGITALNUMBERZ,
|
|
CON_DRAWLINE16,
|
|
CON_DRAWLINE16B,
|
|
CON_DRAWLINE16Z,
|
|
CON_DRAWCIRCLE16,
|
|
CON_DRAWCIRCLE16B,
|
|
CON_DRAWCIRCLE16Z,
|
|
CON_ROTATESPRITE16,
|
|
CON_ROTATESPRITE,
|
|
CON_SETGAMEPALETTE,
|
|
|
|
/// CON_TIME,
|
|
/// CON_GETANGLETOTARGET,
|
|
/// CON_ANGOFF,
|
|
/// CON_ANGOFFVAR,
|
|
/// CON_PRECACHE,
|
|
/// CON_SAVEGAMEVAR,
|
|
/// CON_READGAMEVAR,
|
|
/// CON_SETDEFNAME,
|
|
/// CON_SETCFGNAME,
|
|
|
|
CON_END
|
|
};
|
|
|
|
#endif
|