mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
mapster-script stuff
git-svn-id: https://svn.eduke32.com/eduke32@1500 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
e7acafc9e7
commit
293367e844
8 changed files with 236 additions and 56 deletions
|
@ -27,7 +27,9 @@ definequote 4 ASPECT: VR=%d, YX=%d
|
||||||
definequote 5 KEY:%d
|
definequote 5 KEY:%d
|
||||||
|
|
||||||
definequote 6 time: %d ms
|
definequote 6 time: %d ms
|
||||||
definequote 7 SPRITES:
|
|
||||||
|
definequote 7 door sector not an island sector!
|
||||||
|
definequote 8 door sector has no SE sprite!
|
||||||
|
|
||||||
gamearray ar 128
|
gamearray ar 128
|
||||||
gamearray parm 8
|
gamearray parm 8
|
||||||
|
@ -160,14 +162,69 @@ onevent EVENT_KEYS3D
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ife searchstat 0
|
||||||
|
ifhitkey KEY_SPACE // SE11 ST23 up:ccw
|
||||||
|
{
|
||||||
|
set k wall[searchwall].nextsector
|
||||||
|
ifl k 0 return
|
||||||
|
ifn sector[k].lotag 23 return
|
||||||
|
set tmp 0
|
||||||
|
for i loopofwall searchwall
|
||||||
|
{
|
||||||
|
ifl wall[i].nextsector 0 set tmp 1 else
|
||||||
|
ifn wall[i].nextsector k set tmp 1
|
||||||
|
}
|
||||||
|
// a weaker condition
|
||||||
|
// for i loopofwall wall[searchwall].nextwall
|
||||||
|
// {
|
||||||
|
// ifl wall[i].nextsector 0 set tmp 1 else
|
||||||
|
// ifn wall[i].nextsector searchsector set tmp 1
|
||||||
|
// }
|
||||||
|
ifn tmp 0
|
||||||
|
{
|
||||||
|
quote 7
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
set l -1
|
||||||
|
for i spritesofsector k
|
||||||
|
{
|
||||||
|
ifactor SECTOREFFECTOR ife sprite[i].lotag 11
|
||||||
|
{
|
||||||
|
set l i
|
||||||
|
ifn sprite[i].ang 512 ifn sprite[i].ang 1024 ifn sprite[i].ang 1536 set l -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ifl l 0
|
||||||
|
{
|
||||||
|
quote 8
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for tmp wallsofsector k
|
||||||
|
{
|
||||||
|
rotatepoint (sprite[l].x sprite[l].y) (wall[tmp].x wall[tmp].y) sprite[l].ang (i j)
|
||||||
|
dragpoint tmp i j
|
||||||
|
}
|
||||||
|
for tmp spritesofsector k
|
||||||
|
{
|
||||||
|
ifn tmp l
|
||||||
|
{
|
||||||
|
rotatepoint (sprite[l].x sprite[l].y) (sprite[tmp].x sprite[tmp].y) sprite[l].ang (i j)
|
||||||
|
bsetsprite tmp i j sprite[tmp].z
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inv sprite[l].ang
|
||||||
|
}
|
||||||
|
|
||||||
|
ife searchstat 3
|
||||||
ifhitkey KEY_SPACE
|
ifhitkey KEY_SPACE
|
||||||
{
|
{
|
||||||
ifn searchstat 3 break
|
ifn sprite[searchwall].picnum SECTOREFFECTOR return
|
||||||
ifn sprite[searchwall].picnum SECTOREFFECTOR break
|
|
||||||
set tmp 0
|
set tmp 0
|
||||||
ife sprite[searchwall].lotag 7 set tmp 1
|
ife sprite[searchwall].lotag 7 set tmp 1
|
||||||
ife sprite[searchwall].lotag 17 set tmp 1
|
ife sprite[searchwall].lotag 17 set tmp 1
|
||||||
ife tmp 0 break
|
ife tmp 0 return
|
||||||
|
|
||||||
for i allsprites
|
for i allsprites
|
||||||
{
|
{
|
||||||
|
@ -180,7 +237,7 @@ onevent EVENT_KEYS3D
|
||||||
|
|
||||||
updatecursectnum
|
updatecursectnum
|
||||||
|
|
||||||
break
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -197,7 +254,7 @@ onevent EVENT_KEYS3D
|
||||||
}
|
}
|
||||||
endevent
|
endevent
|
||||||
|
|
||||||
defstate itertest
|
defstate replacestuff
|
||||||
for i spritesofsector searchsector
|
for i spritesofsector searchsector
|
||||||
// ife sprite[i].picnum AMMO set sprite[i].picnum BATTERYAMMO
|
// ife sprite[i].picnum AMMO set sprite[i].picnum BATTERYAMMO
|
||||||
ifactor parm[0] cactor parm[1]
|
ifactor parm[0] cactor parm[1]
|
||||||
|
|
|
@ -50,6 +50,7 @@ extern int32_t X_DoExecute(int32_t once);
|
||||||
extern void X_OnEvent(register int32_t iEventID, register int32_t iActor);
|
extern void X_OnEvent(register int32_t iEventID, register int32_t iActor);
|
||||||
|
|
||||||
extern void X_ScriptInfo(void);
|
extern void X_ScriptInfo(void);
|
||||||
|
extern void X_Disasm(ofstype beg, int32_t size);
|
||||||
extern void C_ReportError(int32_t iError);
|
extern void C_ReportError(int32_t iError);
|
||||||
|
|
||||||
extern int32_t Gv_NewVar(const char *pszLabel, intptr_t lValue, uint32_t dwFlags);
|
extern int32_t Gv_NewVar(const char *pszLabel, intptr_t lValue, uint32_t dwFlags);
|
||||||
|
@ -97,11 +98,13 @@ enum GameEvent_t {
|
||||||
};
|
};
|
||||||
|
|
||||||
extern ofstype aEventOffsets[MAXEVENTS];
|
extern ofstype aEventOffsets[MAXEVENTS];
|
||||||
|
extern int32_t aEventSizes[MAXEVENTS];
|
||||||
extern uint8_t aEventEnabled[MAXEVENTS];
|
extern uint8_t aEventEnabled[MAXEVENTS];
|
||||||
|
|
||||||
|
|
||||||
enum GamevarFlags_t {
|
enum GamevarFlags_t {
|
||||||
MAXGAMEVARS = 1024, // must be a power of two between 256 and 4096, inclusive
|
MAXGAMEVARS = 1024, // must be a power of two between 256 and 4096, inclusive
|
||||||
|
LOG2MAXGV = 10,
|
||||||
MAXVARLABEL = MAXLABELLEN, //26,
|
MAXVARLABEL = MAXLABELLEN, //26,
|
||||||
|
|
||||||
GAMEVAR_PERBLOCK = 0x00000001, // per-block (state, event, or top-level) variable
|
GAMEVAR_PERBLOCK = 0x00000001, // per-block (state, event, or top-level) variable
|
||||||
|
@ -186,6 +189,7 @@ extern int16_t asksave;
|
||||||
|
|
||||||
extern vec3_t pos;
|
extern vec3_t pos;
|
||||||
extern int16_t ang;
|
extern int16_t ang;
|
||||||
|
extern int32_t horiz;
|
||||||
extern int16_t cursectnum;
|
extern int16_t cursectnum;
|
||||||
extern int32_t searchx;
|
extern int32_t searchx;
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -8863,6 +8863,33 @@ static int32_t osdcmd_scriptinfo(const osdfuncparm_t *parm)
|
||||||
return OSDCMD_OK;
|
return OSDCMD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static int32_t osdcmd_disasm(const osdfuncparm_t *parm)
|
||||||
|
{
|
||||||
|
int32_t i;
|
||||||
|
|
||||||
|
if (parm->numparms != 2)
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
if (!isdigit(parm->parms[1][0]))
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
i=atoi(parm->parms[1]);
|
||||||
|
|
||||||
|
if (parm->parms[0][0]=='s')
|
||||||
|
{
|
||||||
|
if (i>=0 && i<g_stateCount)
|
||||||
|
X_Disasm(statesinfo[i].ofs, statesinfo[i].codesize);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (i>=0 && i<MAXEVENTS && aEventOffsets[i]>=0)
|
||||||
|
X_Disasm(aEventOffsets[i], aEventSizes[i]);
|
||||||
|
}
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int32_t osdcmd_do(const osdfuncparm_t *parm)
|
static int32_t osdcmd_do(const osdfuncparm_t *parm)
|
||||||
{
|
{
|
||||||
intptr_t tscrofs;
|
intptr_t tscrofs;
|
||||||
|
@ -8998,6 +9025,7 @@ static int32_t registerosdcommands(void)
|
||||||
OSD_RegisterFunction("scriptinfo", "scriptinfo: shows information about compiled M32 script", osdcmd_scriptinfo);
|
OSD_RegisterFunction("scriptinfo", "scriptinfo: shows information about compiled M32 script", osdcmd_scriptinfo);
|
||||||
OSD_RegisterFunction("enableevent", "enableevent <all|EVENT_...|(event number)>", osdcmd_endisableevent);
|
OSD_RegisterFunction("enableevent", "enableevent <all|EVENT_...|(event number)>", osdcmd_endisableevent);
|
||||||
OSD_RegisterFunction("disableevent", "disableevent <all|EVENT_...|(event number)>", osdcmd_endisableevent);
|
OSD_RegisterFunction("disableevent", "disableevent <all|EVENT_...|(event number)>", osdcmd_endisableevent);
|
||||||
|
// OSD_RegisterFunction("disasm", "disasm [s|e] <state or event number>", osdcmd_disasm);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#define DUKEOSD
|
#define DUKEOSD
|
||||||
|
|
|
@ -66,7 +66,7 @@ int32_t g_scriptSize = 65536;
|
||||||
|
|
||||||
int32_t *constants, constants_allocsize=1024;
|
int32_t *constants, constants_allocsize=1024;
|
||||||
int32_t g_numSavedConstants=0;
|
int32_t g_numSavedConstants=0;
|
||||||
static int32_t g_tooBigConstant=0;
|
static int32_t g_wasConstant=0;
|
||||||
|
|
||||||
char *label;
|
char *label;
|
||||||
int32_t *labelval;
|
int32_t *labelval;
|
||||||
|
@ -98,7 +98,7 @@ char *ScriptQuotes[MAXQUOTES+1], *ScriptQuoteRedefinitions[MAXQUOTES+1];
|
||||||
int32_t g_numQuoteRedefinitions = 0;
|
int32_t g_numQuoteRedefinitions = 0;
|
||||||
|
|
||||||
ofstype aEventOffsets[MAXEVENTS];
|
ofstype aEventOffsets[MAXEVENTS];
|
||||||
static int32_t aEventSizes[MAXEVENTS];
|
int32_t aEventSizes[MAXEVENTS];
|
||||||
|
|
||||||
gamevar_t aGameVars[MAXGAMEVARS];
|
gamevar_t aGameVars[MAXGAMEVARS];
|
||||||
gamearray_t aGameArrays[MAXGAMEARRAYS];
|
gamearray_t aGameArrays[MAXGAMEARRAYS];
|
||||||
|
@ -322,6 +322,8 @@ const char *keyw[] =
|
||||||
"dragpoint",
|
"dragpoint",
|
||||||
"getceilzofslope",
|
"getceilzofslope",
|
||||||
"getflorzofslope",
|
"getflorzofslope",
|
||||||
|
"alignceilslope",
|
||||||
|
"alignflorslope",
|
||||||
"bsetsprite", // *
|
"bsetsprite", // *
|
||||||
"setfirstwall",
|
"setfirstwall",
|
||||||
"changespritestat",
|
"changespritestat",
|
||||||
|
@ -482,6 +484,7 @@ const tokenmap_t iter_tokens[] =
|
||||||
{ "selwalls", ITER_SELWALLS },
|
{ "selwalls", ITER_SELWALLS },
|
||||||
{ "drawnsprites", ITER_DRAWNSPRITES },
|
{ "drawnsprites", ITER_DRAWNSPRITES },
|
||||||
{ "spritesofsector", ITER_SPRITESOFSECTOR },
|
{ "spritesofsector", ITER_SPRITESOFSECTOR },
|
||||||
|
{ "loopofwall", ITER_LOOPOFWALL },
|
||||||
{ "wallsofsector", ITER_WALLSOFSECTOR },
|
{ "wallsofsector", ITER_WALLSOFSECTOR },
|
||||||
{ "range", ITER_RANGE },
|
{ "range", ITER_RANGE },
|
||||||
// vvv alternatives go here vvv
|
// vvv alternatives go here vvv
|
||||||
|
@ -812,6 +815,8 @@ static void C_GetNextVarType(int32_t type)
|
||||||
|
|
||||||
C_SkipComments();
|
C_SkipComments();
|
||||||
|
|
||||||
|
g_wasConstant = 0;
|
||||||
|
|
||||||
// constant where gamevar expected
|
// constant where gamevar expected
|
||||||
if ((type==0 || type==GAMEVAR_SPECIAL) && !cs.labelsOnly &&
|
if ((type==0 || type==GAMEVAR_SPECIAL) && !cs.labelsOnly &&
|
||||||
(isdigit(*textptr) || ((*textptr == '-') && isdigit(*(textptr+1)))))
|
(isdigit(*textptr) || ((*textptr == '-') && isdigit(*(textptr+1)))))
|
||||||
|
@ -833,7 +838,6 @@ static void C_GetNextVarType(int32_t type)
|
||||||
|
|
||||||
if (g_numCompilerErrors==0 && type!=GAMEVAR_SPECIAL && num != (int16_t)num)
|
if (g_numCompilerErrors==0 && type!=GAMEVAR_SPECIAL && num != (int16_t)num)
|
||||||
{
|
{
|
||||||
g_tooBigConstant = 1;
|
|
||||||
indirect = 1;
|
indirect = 1;
|
||||||
|
|
||||||
for (i=g_numSavedConstants-1; i>=0; i--)
|
for (i=g_numSavedConstants-1; i>=0; i--)
|
||||||
|
@ -861,6 +865,8 @@ static void C_GetNextVarType(int32_t type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type!=GAMEVAR_SPECIAL)
|
||||||
|
g_wasConstant = 1;
|
||||||
*g_scriptPtr++ = MAXGAMEVARS | (num<<16) | indirect;
|
*g_scriptPtr++ = MAXGAMEVARS | (num<<16) | indirect;
|
||||||
|
|
||||||
while (!ispecial(*textptr) && *textptr != ']') textptr++;
|
while (!ispecial(*textptr) && *textptr != ']') textptr++;
|
||||||
|
@ -1021,11 +1027,12 @@ static void C_GetNextVarType(int32_t type)
|
||||||
}
|
}
|
||||||
else if (num != (int16_t)num)
|
else if (num != (int16_t)num)
|
||||||
{
|
{
|
||||||
g_tooBigConstant = 1;
|
|
||||||
indirect = 2;
|
indirect = 2;
|
||||||
num = id;
|
num = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type!=GAMEVAR_SPECIAL)
|
||||||
|
g_wasConstant = 1;
|
||||||
*g_scriptPtr++ = MAXGAMEVARS | (num<<16) | indirect;
|
*g_scriptPtr++ = MAXGAMEVARS | (num<<16) | indirect;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1547,6 +1554,7 @@ static int32_t C_ParseCommand(void)
|
||||||
g_stateCount++;
|
g_stateCount++;
|
||||||
|
|
||||||
initprintf(" Defined state `%s' (index %d).\n", g_szCurrentBlockName, j);
|
initprintf(" Defined state `%s' (index %d).\n", g_szCurrentBlockName, j);
|
||||||
|
// initprintf(" o:%d s:%d\n", statesinfo[j].ofs, statesinfo[j].codesize);
|
||||||
}
|
}
|
||||||
else // we were redefining a state
|
else // we were redefining a state
|
||||||
{
|
{
|
||||||
|
@ -1557,20 +1565,34 @@ static int32_t C_ParseCommand(void)
|
||||||
|
|
||||||
if (nsize == osize)
|
if (nsize == osize)
|
||||||
{
|
{
|
||||||
int ii, equal=1;
|
int ii, equal=2, linedif, ow, nw;
|
||||||
|
|
||||||
for (ii=0; ii<nsize; ii++)
|
for (ii=0; ii<nsize; ii++)
|
||||||
if (*(script+oofs+ii) != *(script+nofs+ii))
|
|
||||||
{
|
|
||||||
equal = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!equal)
|
|
||||||
{
|
{
|
||||||
Bmemcpy(script+oofs, script+nofs, nsize*sizeof(instype));
|
ow = *(script+oofs+ii);
|
||||||
initprintf(" Redefined state `%s' (index %d).\n", g_szCurrentBlockName, j);
|
nw = *(script+nofs+ii);
|
||||||
|
if (ow != nw)
|
||||||
|
{
|
||||||
|
int32_t ld = (nw>>12) - (ow>>12);
|
||||||
|
if (equal==2)
|
||||||
|
{
|
||||||
|
equal = 1;
|
||||||
|
linedif = ld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (linedif != ld || ((nw&0xFFF) != (ow&0xFFF)))
|
||||||
|
{
|
||||||
|
equal = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (equal!=2)
|
||||||
|
Bmemcpy(script+oofs, script+nofs, nsize*sizeof(instype));
|
||||||
|
if (equal==0)
|
||||||
|
initprintf(" Redefined state `%s' (index %d).\n", g_szCurrentBlockName, j);
|
||||||
|
// initprintf(" oo:%d os:%d, no:%d ns:%d\n", oofs, osize, nofs, nsize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1592,6 +1614,7 @@ static int32_t C_ParseCommand(void)
|
||||||
statesinfo[j].codesize = nsize;
|
statesinfo[j].codesize = nsize;
|
||||||
|
|
||||||
initprintf(" Redefined state `%s' (index %d).\n", g_szCurrentBlockName, j);
|
initprintf(" Redefined state `%s' (index %d).\n", g_szCurrentBlockName, j);
|
||||||
|
// initprintf(" oo:%d os:%d, no:%d ns:%d\n", oofs, osize, nofs, nsize);
|
||||||
}
|
}
|
||||||
g_scriptPtr -= osize;
|
g_scriptPtr -= osize;
|
||||||
}
|
}
|
||||||
|
@ -1735,20 +1758,34 @@ static int32_t C_ParseCommand(void)
|
||||||
|
|
||||||
if (osize == nsize)
|
if (osize == nsize)
|
||||||
{
|
{
|
||||||
int ii, equal=1;
|
int ii, equal=2, linedif, nw, ow;
|
||||||
|
|
||||||
for (ii=0; ii<nsize; ii++)
|
for (ii=0; ii<nsize; ii++)
|
||||||
if (*(script+oofs+ii) != *(script+nofs+ii))
|
{
|
||||||
|
ow = *(script+oofs+ii);
|
||||||
|
nw = *(script+nofs+ii);
|
||||||
|
if (ow != nw)
|
||||||
|
{
|
||||||
|
int32_t ld = (nw>>12) - (ow>>12);
|
||||||
|
if (equal==2)
|
||||||
|
{
|
||||||
|
equal = 1;
|
||||||
|
linedif = ld;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (linedif != ld || ((nw&0xFFF) != (ow&0xFFF)))
|
||||||
{
|
{
|
||||||
equal = 0;
|
equal = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!equal)
|
|
||||||
{
|
|
||||||
Bmemcpy(script+oofs, script+nofs, nsize*sizeof(instype));
|
|
||||||
initprintf(" Redefined event `%s' (index %d).\n", g_szCurrentBlockName, j);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (equal!=2)
|
||||||
|
Bmemcpy(script+oofs, script+nofs, nsize*sizeof(instype));
|
||||||
|
if (equal==0)
|
||||||
|
initprintf(" Redefined event `%s' (index %d).\n", g_szCurrentBlockName, j);
|
||||||
|
// initprintf(" oo:%d os:%d, no:%d ns:%d\n", oofs, osize, nofs, nsize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1770,6 +1807,7 @@ static int32_t C_ParseCommand(void)
|
||||||
aEventSizes[j] = nsize;
|
aEventSizes[j] = nsize;
|
||||||
|
|
||||||
initprintf(" Redefined event `%s' (index %d).\n", g_szCurrentBlockName, j);
|
initprintf(" Redefined event `%s' (index %d).\n", g_szCurrentBlockName, j);
|
||||||
|
// initprintf(" oo:%d os:%d, no:%d ns:%d\n", oofs, osize, nofs, nsize);
|
||||||
}
|
}
|
||||||
g_scriptPtr -= osize;
|
g_scriptPtr -= osize;
|
||||||
}
|
}
|
||||||
|
@ -1779,6 +1817,7 @@ static int32_t C_ParseCommand(void)
|
||||||
aEventSizes[j] = (g_scriptPtr-script) - cs.parsingEventOfs;
|
aEventSizes[j] = (g_scriptPtr-script) - cs.parsingEventOfs;
|
||||||
|
|
||||||
initprintf(" Defined event `%s' (index %d).\n", g_szCurrentBlockName, j);
|
initprintf(" Defined event `%s' (index %d).\n", g_szCurrentBlockName, j);
|
||||||
|
// initprintf(" o:%d s:%d\n", aEventOffsets[j], aEventSizes[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_didDefineSomething = 1;
|
g_didDefineSomething = 1;
|
||||||
|
@ -2449,10 +2488,10 @@ repeatcase:
|
||||||
|
|
||||||
otextptr = textptr;
|
otextptr = textptr;
|
||||||
|
|
||||||
g_tooBigConstant = 0;
|
g_wasConstant = 0;
|
||||||
C_GetNextVar();
|
C_GetNextVar();
|
||||||
|
|
||||||
if (!g_numCompilerErrors && g_tooBigConstant)
|
if (!g_numCompilerErrors && g_wasConstant)
|
||||||
{
|
{
|
||||||
textptr = otextptr;
|
textptr = otextptr;
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
|
@ -2616,10 +2655,10 @@ repeatcase:
|
||||||
|
|
||||||
otextptr = textptr;
|
otextptr = textptr;
|
||||||
|
|
||||||
g_tooBigConstant = 0;
|
g_wasConstant = 0;
|
||||||
C_GetNextVar();
|
C_GetNextVar();
|
||||||
|
|
||||||
if (!g_numCompilerErrors && g_tooBigConstant)
|
if (!g_numCompilerErrors && g_wasConstant)
|
||||||
{
|
{
|
||||||
textptr = otextptr;
|
textptr = otextptr;
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
|
@ -2720,6 +2759,8 @@ repeatcase:
|
||||||
C_GetNextVarType(GAMEVAR_READONLY);
|
C_GetNextVarType(GAMEVAR_READONLY);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case CON_ALIGNCEILSLOPE:
|
||||||
|
case CON_ALIGNFLORSLOPE:
|
||||||
case CON_BSETSPRITE: // was CON_SETSPRITE
|
case CON_BSETSPRITE: // was CON_SETSPRITE
|
||||||
C_GetManyVars(4);
|
C_GetManyVars(4);
|
||||||
break;
|
break;
|
||||||
|
@ -2861,7 +2902,7 @@ repeatcase:
|
||||||
while (C_GetKeyword() == -1 && j < 32)
|
while (C_GetKeyword() == -1 && j < 32)
|
||||||
C_GetNextVar(), j++;
|
C_GetNextVar(), j++;
|
||||||
|
|
||||||
*g_scriptPtr++ = CON_NULLOP + (g_lineNumber<<12);
|
*g_scriptPtr++ = -1; //CON_NULLOP + (g_lineNumber<<12);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case CON_QSTRCAT:
|
case CON_QSTRCAT:
|
||||||
|
@ -3209,7 +3250,7 @@ void C_Compile(const char *filenameortext, int32_t isfilename)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((sizeof(keyw)/sizeof(keyw[0]))-1 != CON_END)
|
if ((sizeof(keyw)/sizeof(keyw[0]))-1 != CON_END)
|
||||||
initprintf("INTERNAL WARNING: keyw[] and CON_END don't match!");
|
initprintf("INTERNAL WARNING: keyw[] and CON_END don't match!\n");
|
||||||
|
|
||||||
g_scriptPtr = script+1;
|
g_scriptPtr = script+1;
|
||||||
|
|
||||||
|
@ -3263,7 +3304,7 @@ void C_Compile(const char *filenameortext, int32_t isfilename)
|
||||||
mptr = (char *)Bmalloc(fs+1);
|
mptr = (char *)Bmalloc(fs+1);
|
||||||
if (!mptr)
|
if (!mptr)
|
||||||
{
|
{
|
||||||
initprintf("Failed allocating %d byte CON text buffer.", fs+1);
|
initprintf("Failed allocating %d byte CON text buffer.\n", fs+1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3331,7 +3372,9 @@ void C_Compile(const char *filenameortext, int32_t isfilename)
|
||||||
// C_SetScriptSize(g_scriptPtr-script+8);
|
// C_SetScriptSize(g_scriptPtr-script+8);
|
||||||
if (isfilename)
|
if (isfilename)
|
||||||
{
|
{
|
||||||
initprintf("Script compiled in %dms\n", getticks() - startcompiletime);
|
int32_t ct = getticks() - startcompiletime;
|
||||||
|
if (ct > 50)
|
||||||
|
initprintf("Script compiled in %dms\n", ct);
|
||||||
C_CompilationInfo();
|
C_CompilationInfo();
|
||||||
}
|
}
|
||||||
/// for (i=MAXQUOTES-1; i>=0; i--)
|
/// for (i=MAXQUOTES-1; i>=0; i--)
|
||||||
|
|
|
@ -225,6 +225,7 @@ enum IterationTypes_t
|
||||||
ITER_DRAWNSPRITES,
|
ITER_DRAWNSPRITES,
|
||||||
ITER_SPRITESOFSECTOR,
|
ITER_SPRITESOFSECTOR,
|
||||||
ITER_WALLSOFSECTOR,
|
ITER_WALLSOFSECTOR,
|
||||||
|
ITER_LOOPOFWALL,
|
||||||
ITER_RANGE,
|
ITER_RANGE,
|
||||||
ITER_END
|
ITER_END
|
||||||
};
|
};
|
||||||
|
@ -397,6 +398,8 @@ enum ScriptKeywords_t
|
||||||
CON_DRAGPOINT,
|
CON_DRAGPOINT,
|
||||||
CON_GETCEILZOFSLOPE,
|
CON_GETCEILZOFSLOPE,
|
||||||
CON_GETFLORZOFSLOPE,
|
CON_GETFLORZOFSLOPE,
|
||||||
|
CON_ALIGNCEILSLOPE,
|
||||||
|
CON_ALIGNFLORSLOPE,
|
||||||
CON_BSETSPRITE, // was CON_SETSPRITE
|
CON_BSETSPRITE, // was CON_SETSPRITE
|
||||||
CON_SETFIRSTWALL,
|
CON_SETFIRSTWALL,
|
||||||
CON_CHANGESPRITESTAT,
|
CON_CHANGESPRITESTAT,
|
||||||
|
|
|
@ -88,6 +88,24 @@ static int32_t dist(spritetype *s1,spritetype *s2)
|
||||||
}
|
}
|
||||||
///
|
///
|
||||||
|
|
||||||
|
void X_Disasm(ofstype beg, int32_t size)
|
||||||
|
{
|
||||||
|
instype *p;
|
||||||
|
|
||||||
|
if (!script) return;
|
||||||
|
if (beg<0 || beg+size>g_scriptSize) return;
|
||||||
|
|
||||||
|
initprintf("beg=%d, size=%d: ", beg, size);
|
||||||
|
for (p=script+beg; p<script+beg+size; p++)
|
||||||
|
{
|
||||||
|
if (*p>>12 && (*p&0xFFF)<CON_END)
|
||||||
|
initprintf("%s ", keyw[*p&0xFFF]);
|
||||||
|
else
|
||||||
|
initprintf("%d ", *p);
|
||||||
|
}
|
||||||
|
initprintf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
void X_ScriptInfo(void)
|
void X_ScriptInfo(void)
|
||||||
{
|
{
|
||||||
if (script)
|
if (script)
|
||||||
|
@ -105,7 +123,7 @@ void X_ScriptInfo(void)
|
||||||
if (p==insptr) initprintf(">>");
|
if (p==insptr) initprintf(">>");
|
||||||
}
|
}
|
||||||
initprintf(" \n");
|
initprintf(" \n");
|
||||||
if (vm.g_i != MAXSPRITES-1)
|
if (vm.g_i >= 0)
|
||||||
initprintf("current sprite: %d\n",vm.g_i);
|
initprintf("current sprite: %d\n",vm.g_i);
|
||||||
if (g_tw>=0 && g_tw<CON_END)
|
if (g_tw>=0 && g_tw<CON_END)
|
||||||
initprintf("g_errorLineNum: %d, g_tw: %s\n",g_errorLineNum,keyw[g_tw]);
|
initprintf("g_errorLineNum: %d, g_tw: %s\n",g_errorLineNum,keyw[g_tw]);
|
||||||
|
@ -1202,6 +1220,16 @@ skip_check:
|
||||||
X_DoExecute(1);
|
X_DoExecute(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ITER_LOOPOFWALL:
|
||||||
|
if (parm2 < 0 || parm2 >= numwalls)
|
||||||
|
goto badindex;
|
||||||
|
for (ii=parm2, jj=wall[parm2].point2; jj!=ii; jj=wall[jj].point2)
|
||||||
|
{
|
||||||
|
Gv_SetVarX(var, jj);
|
||||||
|
insptr = beg;
|
||||||
|
X_DoExecute(1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ITER_RANGE:
|
case ITER_RANGE:
|
||||||
for (jj=0; jj<parm2; jj++)
|
for (jj=0; jj<parm2; jj++)
|
||||||
{
|
{
|
||||||
|
@ -1661,20 +1689,28 @@ badindex:
|
||||||
insptr++;
|
insptr++;
|
||||||
{
|
{
|
||||||
int32_t sectnum = Gv_GetVarX(*insptr++), x = Gv_GetVarX(*insptr++), y = Gv_GetVarX(*insptr++);
|
int32_t sectnum = Gv_GetVarX(*insptr++), x = Gv_GetVarX(*insptr++), y = Gv_GetVarX(*insptr++);
|
||||||
if (sectnum<0 || sectnum>=numsectors)
|
int32_t var=*insptr++;
|
||||||
{
|
|
||||||
OSD_Printf(CON_ERROR "Invalid sector %d\n",g_errorLineNum,keyw[g_tw],sectnum);
|
|
||||||
vm.g_errorFlag = 1;
|
|
||||||
insptr++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
X_ERROR_INVALIDSECT(sectnum);
|
||||||
if (tw == CON_GETFLORZOFSLOPE)
|
if (tw == CON_GETFLORZOFSLOPE)
|
||||||
{
|
Gv_SetVarX(var, getflorzofslope(sectnum,x,y));
|
||||||
Gv_SetVarX(*insptr++, getflorzofslope(sectnum,x,y));
|
else
|
||||||
continue;
|
Gv_SetVarX(var, getceilzofslope(sectnum,x,y));
|
||||||
}
|
continue;
|
||||||
Gv_SetVarX(*insptr++, getceilzofslope(sectnum,x,y));
|
}
|
||||||
|
|
||||||
|
case CON_ALIGNFLORSLOPE:
|
||||||
|
case CON_ALIGNCEILSLOPE:
|
||||||
|
insptr++;
|
||||||
|
{
|
||||||
|
int32_t sectnum = Gv_GetVarX(*insptr++), x = Gv_GetVarX(*insptr++), y = Gv_GetVarX(*insptr++);
|
||||||
|
int32_t z=Gv_GetVarX(*insptr++);
|
||||||
|
|
||||||
|
X_ERROR_INVALIDSECT(sectnum);
|
||||||
|
if (tw == CON_ALIGNFLORSLOPE)
|
||||||
|
alignflorslope(sectnum, x,y,z);
|
||||||
|
else
|
||||||
|
alignceilslope(sectnum, x,y,z);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1922,7 +1958,7 @@ badindex:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (code&(MAXGAMEVARS<<2))
|
else if (code&(MAXGAMEVARS<<2))
|
||||||
Bsprintf(buf, "(array) %s[%s]", aGameArrays[code&(MAXGAMEARRAYS-1)].szLabel?
|
Bsprintf(buf, "%s[%s]", aGameArrays[code&(MAXGAMEARRAYS-1)].szLabel?
|
||||||
aGameArrays[code&(MAXGAMEARRAYS-1)].szLabel:"???", buf2);
|
aGameArrays[code&(MAXGAMEARRAYS-1)].szLabel:"???", buf2);
|
||||||
else if (code&(MAXGAMEVARS<<3))
|
else if (code&(MAXGAMEVARS<<3))
|
||||||
Bsprintf(buf, "%s[%s].%s", pp1[code&3], buf2, pp2[code&3][(code>>2)&31].name);
|
Bsprintf(buf, "%s[%s].%s", pp1[code&3], buf2, pp2[code&3][(code>>2)&31].name);
|
||||||
|
@ -2125,7 +2161,7 @@ badindex:
|
||||||
int32_t len = Bstrlen(ScriptQuotes[sq]);
|
int32_t len = Bstrlen(ScriptQuotes[sq]);
|
||||||
char tmpbuf[MAXQUOTELEN<<1];
|
char tmpbuf[MAXQUOTELEN<<1];
|
||||||
|
|
||||||
while ((*insptr & 0xFFF) != CON_NULLOP && numvals < 32)
|
while (*insptr != -1 && numvals < 32)
|
||||||
arg[numvals++] = Gv_GetVarX(*insptr++);
|
arg[numvals++] = Gv_GetVarX(*insptr++);
|
||||||
|
|
||||||
insptr++; // skip the NOP
|
insptr++; // skip the NOP
|
||||||
|
|
|
@ -163,19 +163,27 @@ static int32_t __fastcall X_AccessSector(int32_t how, int32_t lVar1, int32_t lLa
|
||||||
case SECTOR_CEILINGZ: sector[i].ceilingz=lValue; break;
|
case SECTOR_CEILINGZ: sector[i].ceilingz=lValue; break;
|
||||||
case SECTOR_FLOORZ: sector[i].floorz=lValue; break;
|
case SECTOR_FLOORZ: sector[i].floorz=lValue; break;
|
||||||
case SECTOR_CEILINGSTAT:
|
case SECTOR_CEILINGSTAT:
|
||||||
sector[i].ceilingstat = lValue&0x01ff;
|
sector[i].ceilingstat = lValue&0x01fd;
|
||||||
break;
|
break;
|
||||||
case SECTOR_FLOORSTAT:
|
case SECTOR_FLOORSTAT:
|
||||||
sector[i].floorstat = lValue&0x01ff;
|
sector[i].floorstat = lValue&0x01fd;
|
||||||
break;
|
break;
|
||||||
case SECTOR_CEILINGPICNUM: sector[i].ceilingpicnum=lValue; break;
|
case SECTOR_CEILINGPICNUM: sector[i].ceilingpicnum=lValue; break;
|
||||||
case SECTOR_CEILINGSLOPE: sector[i].ceilingheinum=lValue; break;
|
case SECTOR_CEILINGSLOPE:
|
||||||
|
sector[i].ceilingheinum = lValue;
|
||||||
|
if (lValue) sector[i].ceilingstat |= 2;
|
||||||
|
else sector[i].ceilingstat &= ~2;
|
||||||
|
break;
|
||||||
case SECTOR_CEILINGSHADE: sector[i].ceilingshade=lValue; break;
|
case SECTOR_CEILINGSHADE: sector[i].ceilingshade=lValue; break;
|
||||||
case SECTOR_CEILINGPAL: sector[i].ceilingpal=lValue; break;
|
case SECTOR_CEILINGPAL: sector[i].ceilingpal=lValue; break;
|
||||||
case SECTOR_CEILINGXPANNING: sector[i].ceilingxpanning=lValue; break;
|
case SECTOR_CEILINGXPANNING: sector[i].ceilingxpanning=lValue; break;
|
||||||
case SECTOR_CEILINGYPANNING: sector[i].ceilingypanning=lValue; break;
|
case SECTOR_CEILINGYPANNING: sector[i].ceilingypanning=lValue; break;
|
||||||
case SECTOR_FLOORPICNUM: sector[i].floorpicnum=lValue; break;
|
case SECTOR_FLOORPICNUM: sector[i].floorpicnum=lValue; break;
|
||||||
case SECTOR_FLOORSLOPE: sector[i].floorheinum=lValue; break;
|
case SECTOR_FLOORSLOPE:
|
||||||
|
sector[i].floorheinum = lValue;
|
||||||
|
if (lValue) sector[i].floorstat |= 2;
|
||||||
|
else sector[i].floorstat &= ~2;
|
||||||
|
break;
|
||||||
case SECTOR_FLOORSHADE: sector[i].floorshade=lValue; break;
|
case SECTOR_FLOORSHADE: sector[i].floorshade=lValue; break;
|
||||||
case SECTOR_FLOORPAL: sector[i].floorpal=lValue; break;
|
case SECTOR_FLOORPAL: sector[i].floorpal=lValue; break;
|
||||||
case SECTOR_FLOORXPANNING: sector[i].floorxpanning=lValue; break;
|
case SECTOR_FLOORXPANNING: sector[i].floorxpanning=lValue; break;
|
||||||
|
|
|
@ -274,7 +274,7 @@ int32_t __fastcall Gv_GetVarX(register int32_t id)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
register int32_t negateResult = id&(MAXGAMEVARS<<1);
|
register int32_t negateResult = (id&(MAXGAMEVARS<<1))>>(LOG2MAXGV+1);
|
||||||
|
|
||||||
if (id & (0xFFFFFFFF-(MAXGAMEVARS-1)))
|
if (id & (0xFFFFFFFF-(MAXGAMEVARS-1)))
|
||||||
{
|
{
|
||||||
|
@ -554,6 +554,7 @@ static void Gv_AddSystemVars(void)
|
||||||
Gv_NewVar("posy",(intptr_t)&pos.y, GAMEVAR_INTPTR | GAMEVAR_SYSTEM);
|
Gv_NewVar("posy",(intptr_t)&pos.y, GAMEVAR_INTPTR | GAMEVAR_SYSTEM);
|
||||||
Gv_NewVar("posz",(intptr_t)&pos.z, GAMEVAR_INTPTR | GAMEVAR_SYSTEM);
|
Gv_NewVar("posz",(intptr_t)&pos.z, GAMEVAR_INTPTR | GAMEVAR_SYSTEM);
|
||||||
Gv_NewVar("ang",(intptr_t)&ang, GAMEVAR_SHORTPTR | GAMEVAR_SYSTEM);
|
Gv_NewVar("ang",(intptr_t)&ang, GAMEVAR_SHORTPTR | GAMEVAR_SYSTEM);
|
||||||
|
Gv_NewVar("horiz",(intptr_t)&horiz, GAMEVAR_INTPTR | GAMEVAR_SYSTEM);
|
||||||
Gv_NewVar("cursectnum",(intptr_t)&cursectnum, GAMEVAR_READONLY | GAMEVAR_SHORTPTR | GAMEVAR_SYSTEM);
|
Gv_NewVar("cursectnum",(intptr_t)&cursectnum, GAMEVAR_READONLY | GAMEVAR_SHORTPTR | GAMEVAR_SYSTEM);
|
||||||
|
|
||||||
Gv_NewVar("searchx",(intptr_t)&searchx, GAMEVAR_READONLY | GAMEVAR_INTPTR | GAMEVAR_SYSTEM);
|
Gv_NewVar("searchx",(intptr_t)&searchx, GAMEVAR_READONLY | GAMEVAR_INTPTR | GAMEVAR_SYSTEM);
|
||||||
|
|
Loading…
Reference in a new issue