mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-18 10:11:50 +00:00
aa8b2e4e05
* fix breaking out of 'switch' blocks and compilation of the 'default' case * Have a way of assigning 'special function' menu [' F] entries to script states. Writing a string literal after the state name will register the state under that name. Menu names are limited to 24 characters and it's possible to have up to 16 of them. * new branching command 'ifinteractive', true if a state runs from the menu mentioned above. * new command: getnumberfromuser <<retvar>> "query_string" <maxnum> <flags> See 'state collect_teleporting_sectors' in a.m32 for a combined usage of the new functionality. git-svn-id: https://svn.eduke32.com/eduke32@1955 1a8010ca-5511-0410-912e-c29ae57300e0
597 lines
12 KiB
C
597 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);
|
|
|
|
void registerMenuFunction(const char *funcname, ofstype scriptofs);
|
|
void M32_PostScriptExec(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[];
|
|
|
|
enum vmflags
|
|
{
|
|
VMFLAG_RETURN = 1,
|
|
VMFLAG_BREAK = 2,
|
|
VMFLAG_ERROR = 4,
|
|
};
|
|
|
|
enum miscvmflags
|
|
{
|
|
VMFLAG_MISC_UPDATEHL = 1,
|
|
VMFLAG_MISC_UPDATEHLSECT = 2,
|
|
VMFLAG_MISC_INTERACTIVE = 4,
|
|
};
|
|
|
|
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;
|
|
|
|
// 1:updatehighlight, 2:updatehighlightsector, 4:interactive (from menu)?
|
|
uint32_t miscflags;
|
|
} vmstate_t;
|
|
|
|
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,
|
|
CON_IFINTERACTIVE,
|
|
|
|
// 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_GETNUMBERFROMUSER,
|
|
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
|