CON-solidation

Sorry for the shitty pun

git-svn-id: https://svn.eduke32.com/eduke32@6382 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2017-07-27 09:13:21 +00:00
parent fa02c6433b
commit b00266b47f
3 changed files with 483 additions and 758 deletions

View file

@ -173,10 +173,26 @@ const tokenmap_t altkeyw [] =
{ "ck", CON_CHEATKEYS }, { "ck", CON_CHEATKEYS },
{ "qputs", CON_REDEFINEQUOTE }, { "qputs", CON_REDEFINEQUOTE },
{ "espawn", CON_ESPAWNVAR },
{ "qspawn", CON_QSPAWNVAR },
{ "eqspawn", CON_EQSPAWNVAR },
{ "eshoot", CON_ESHOOTVAR },
{ "zshoot", CON_ZSHOOTVAR },
{ "ezshoot", CON_EZSHOOTVAR },
{ "shoot", CON_SHOOTVAR },
{ "findnearactor", CON_FINDNEARACTORVAR },
{ "findnearactor3d", CON_FINDNEARACTOR3DVAR },
{ "findnearactorz", CON_FINDNEARACTORZVAR },
{ "findnearsprite", CON_FINDNEARSPRITEVAR },
{ "findnearsprite3d", CON_FINDNEARSPRITE3DVAR },
{ "findnearspritez", CON_FINDNEARSPRITEZVAR },
}; };
const char *keyw[] = const char *keyw[] = {
{
"else", // 0 used with if checks "else", // 0 used with if checks
"actor", // 1 defines an actor "actor", // 1 defines an actor
"addammo", // 2 adds ammo to a weapon "addammo", // 2 adds ammo to a weapon
@ -190,7 +206,7 @@ const char *keyw[] =
"definelevelname", // 10 defines level name "definelevelname", // 10 defines level name
"strength", // 11 sets health "strength", // 11 sets health
"break", // 12 stops processing "break", // 12 stops processing
"shoot", // 13 shoots a projectile NULL, // 13 shoots a projectile
"palfrom", // 14 used for player screen shading effect, sets p->pals "palfrom", // 14 used for player screen shading effect, sets p->pals
"sound", // 15 plays a sound that was defined with definesound "sound", // 15 plays a sound that was defined with definesound
"fall", // 16 causes actor to fall to sector floor height "fall", // 16 causes actor to fall to sector floor height
@ -337,11 +353,11 @@ const char *keyw[] =
"getactor", // 157 "getactor", // 157
"setwall", // 158 "setwall", // 158
"getwall", // 159 "getwall", // 159
"findnearactor", // 160 NULL, // 160
"findnearactorvar", // 161 "findnearactorvar", // 161
"setactorvar", // 162 "setactorvar", // 162
"getactorvar", // 163 "getactorvar", // 163
"espawn", // 164 NULL, // 164
"getplayer", // 165 "getplayer", // 165
"setplayer", // 166 "setplayer", // 166
"sqrt", // 167 "sqrt", // 167
@ -367,18 +383,18 @@ const char *keyw[] =
"gmaxammo", // 187 "gmaxammo", // 187
"smaxammo", // 188 "smaxammo", // 188
"startlevel", // 189 "startlevel", // 189
"eshoot", // 190 NULL, // 190 Beginning of EDuke32
"qspawn", // 191 NULL, // 191
"rotatesprite", // 192 "rotatesprite", // 192
"defineprojectile", // 193 "defineprojectile", // 193
"spriteshadow", // 194 "spriteshadow", // 194
"cos", // 195 "cos", // 195
"eshootvar", // 196 "eshootvar", // 196
"findnearactor3d", // 197 NULL, // 197
"findnearactor3dvar", // 198 "findnearactor3dvar", // 198
"flash", // 199 "flash", // 199
"qspawnvar", // 200 "qspawnvar", // 200
"eqspawn", // 201 NULL, // 201
"eqspawnvar", // 202 "eqspawnvar", // 202
"minitext", // 203 "minitext", // 203
"gametext", // 204 "gametext", // 204
@ -404,7 +420,7 @@ const char *keyw[] =
"operateactivators", // 224 lotag, player index "operateactivators", // 224 lotag, player index
"operatemasterswitches", // 225 lotag "operatemasterswitches", // 225 lotag
"checkactivatormotion", // 226 lotag "checkactivatormotion", // 226 lotag
"zshoot", // 227 zvar projnum NULL, // 227 zvar projnum
"dist", // 228 sprite1 sprite2 "dist", // 228 sprite1 sprite2
"ldist", // 229 sprite1 sprite2 "ldist", // 229 sprite1 sprite2
"shiftvarl", // 230 "shiftvarl", // 230
@ -418,7 +434,7 @@ const char *keyw[] =
"setplayervar", // 238 "setplayervar", // 238
"mulscale", // 239 "mulscale", // 239
"setaspect", // 240 "setaspect", // 240
"ezshoot", // 241 NULL, // 241
"spritenoshade", // 242 "spritenoshade", // 242
"movesprite", // 243 "movesprite", // 243
"checkavailweapon", // 244 "checkavailweapon", // 244
@ -458,19 +474,19 @@ const char *keyw[] =
"spriteflags", // 278 "spriteflags", // 278
"savegamevar", // 279 "savegamevar", // 279
"readgamevar", // 280 "readgamevar", // 280
"findnearsprite", // 281 NULL, // 281
"findnearspritevar", // 282 "findnearspritevar", // 282
"findnearsprite3d", // 283 NULL, // 283
"findnearsprite3dvar", // 284 "findnearsprite3dvar", // 284
"dynamicremap", // 285 "dynamicremap", // 285
"setinput", // 286 "setinput", // 286
"getinput", // 287 "getinput", // 287
"save", // 288 "save", // 288
"cansee", // 289 Beginning EDuke32 SVN "cansee", // 289 Beginning of EDuke32 SVN
"canseespr", // 290 "canseespr", // 290
"findnearactorz", // 291 NULL, // 291
"findnearactorzvar", // 292 "findnearactorzvar", // 292
"findnearspritez", // 293 NULL, // 293
"findnearspritezvar", // 294 "findnearspritezvar", // 294
"zshootvar", // 295 "zshootvar", // 295
"ezshootvar", // 296 "ezshootvar", // 296
@ -1315,7 +1331,7 @@ void C_InitHashes()
inithashnames(); inithashnames();
initsoundhashnames(); initsoundhashnames();
for (i=0; i<NUMKEYWORDS; i++) hash_add(&h_keywords, keyw[i], i, 0); for (i=0; i<NUMKEYWORDS; i++) if (keyw[i]) hash_add(&h_keywords, keyw[i], i, 0);
for (i=0; i<NUMALTKEYWORDS; i++) hash_add(&h_keywords, altkeyw[i].token, altkeyw[i].val, 0); for (i=0; i<NUMALTKEYWORDS; i++) hash_add(&h_keywords, altkeyw[i].token, altkeyw[i].val, 0);
STRUCT_HASH_SETUP(h_sector, SectorLabels); STRUCT_HASH_SETUP(h_sector, SectorLabels);
@ -3666,12 +3682,7 @@ DO_DEFSTATE:
case CON_GUTS: case CON_GUTS:
C_GetNextValue(LABEL_DEFINE); C_GetNextValue(LABEL_DEFINE);
fallthrough__; fallthrough__;
case CON_ESPAWN:
case CON_ESHOOT:
case CON_QSPAWN:
case CON_EQSPAWN:
case CON_STRENGTH: case CON_STRENGTH:
case CON_SHOOT:
case CON_ADDPHEALTH: case CON_ADDPHEALTH:
case CON_SPAWN: case CON_SPAWN:
case CON_COUNT: case CON_COUNT:
@ -3764,36 +3775,6 @@ DO_DEFSTATE:
continue; continue;
} }
case CON_FINDNEARACTOR:
case CON_FINDNEARACTOR3D:
case CON_FINDNEARSPRITE:
case CON_FINDNEARSPRITE3D:
case CON_FINDNEARACTORZ:
case CON_FINDNEARSPRITEZ:
{
// syntax findnearactor <type> <maxdist> <getvar>
// gets the sprite ID of the nearest actor within max dist
// that is of <type> into <getvar>
// -1 for none found
C_GetNextValue(LABEL_DEFINE); // get <type>
C_GetNextValue(LABEL_DEFINE); // get maxdist
switch (tw)
{
case CON_FINDNEARACTORZ:
case CON_FINDNEARSPRITEZ:
C_GetNextValue(LABEL_DEFINE);
default:
break;
}
// target var
// get the ID of the DEF
C_GetNextVarType(GAMEVAR_READONLY);
continue;
}
case CON_FINDNEARACTORVAR: case CON_FINDNEARACTORVAR:
case CON_FINDNEARACTOR3DVAR: case CON_FINDNEARACTOR3DVAR:
case CON_FINDNEARSPRITEVAR: case CON_FINDNEARSPRITEVAR:
@ -4184,8 +4165,6 @@ DO_DEFSTATE:
continue; continue;
case CON_RANDVAR: case CON_RANDVAR:
case CON_ZSHOOT:
case CON_EZSHOOT:
case CON_SETVAR: case CON_SETVAR:
case CON_ADDVAR: case CON_ADDVAR:
case CON_SUBVAR: case CON_SUBVAR:
@ -4207,9 +4186,7 @@ DO_DEFSTATE:
// adds const1 to var1 (const1 can be negative...) // adds const1 to var1 (const1 can be negative...)
//printf("Found [add|set]var at line= %d\n",g_lineNumber); //printf("Found [add|set]var at line= %d\n",g_lineNumber);
if (tw != CON_ZSHOOT && tw != CON_EZSHOOT)
C_GetNextVarType(GAMEVAR_READONLY); C_GetNextVarType(GAMEVAR_READONLY);
else C_GetNextVar();
C_GetNextValue(LABEL_DEFINE); // the number to check against... C_GetNextValue(LABEL_DEFINE); // the number to check against...

View file

@ -1601,11 +1601,6 @@ skip_check:
vm.pSprite->yrepeat = (uint8_t)*insptr++; vm.pSprite->yrepeat = (uint8_t)*insptr++;
continue; continue;
case CON_SHOOT:
insptr++;
A_Shoot(vm.spriteNum,*insptr++);
continue;
case CON_SOUNDONCE: case CON_SOUNDONCE:
if (EDUKE32_PREDICT_FALSE((unsigned)*(++insptr) >= MAXSOUNDS)) if (EDUKE32_PREDICT_FALSE((unsigned)*(++insptr) >= MAXSOUNDS))
{ {
@ -2536,22 +2531,6 @@ nullquote:
} }
case CON_LDIST: case CON_LDIST:
insptr++;
{
int const out = *insptr++;
vec2_t in;
Gv_FillWithVars(in);
if (EDUKE32_PREDICT_FALSE((unsigned)in.x >= MAXSPRITES || (unsigned)in.y >= MAXSPRITES))
{
CON_ERRPRINTF("invalid sprite %d, %d\n", in.x, in.y);
continue;
}
Gv_SetVarX(out, ldist(&sprite[in.x], &sprite[in.y]));
continue;
}
case CON_DIST: case CON_DIST:
insptr++; insptr++;
{ {
@ -2565,47 +2544,29 @@ nullquote:
continue; continue;
} }
Gv_SetVarX(out, dist(&sprite[in.x], &sprite[in.y])); Gv_SetVarX(out, (tw == CON_LDIST ? ldist : dist)(&sprite[in.x], &sprite[in.y]));
continue; continue;
} }
case CON_GETANGLE: case CON_GETANGLE:
insptr++;
{
int const out = *insptr++;
vec2_t in;
Gv_FillWithVars(in);
Gv_SetVarX(out, getangle(in.x, in.y));
continue;
}
case CON_GETINCANGLE: case CON_GETINCANGLE:
insptr++; insptr++;
{ {
int const out = *insptr++; int const out = *insptr++;
vec2_t in; vec2_t in;
Gv_FillWithVars(in); Gv_FillWithVars(in);
Gv_SetVarX(out, G_GetAngleDelta(in.x, in.y)); Gv_SetVarX(out, (tw == CON_GETANGLE ? getangle : G_GetAngleDelta)(in.x, in.y));
continue; continue;
} }
case CON_MULSCALE: case CON_MULSCALE:
insptr++;
{
int const out = *insptr++;
vec3_t in;
Gv_FillWithVars(in);
Gv_SetVarX(out, mulscale(in.x, in.y, in.z));
continue;
}
case CON_DIVSCALE: case CON_DIVSCALE:
insptr++; insptr++;
{ {
int const out = *insptr++; int const out = *insptr++;
vec3_t in; vec3_t in;
Gv_FillWithVars(in); Gv_FillWithVars(in);
Gv_SetVarX(out, divscale(in.x, in.y, in.z)); Gv_SetVarX(out, (tw == CON_MULSCALE ? mulscale : divscale)(in.x, in.y, in.z));
continue; continue;
} }
@ -2674,62 +2635,6 @@ nullquote:
continue; continue;
} }
case CON_ESPAWN:
case CON_EQSPAWN:
case CON_QSPAWN:
insptr++;
{
if (EDUKE32_PREDICT_FALSE((unsigned)vm.pSprite->sectnum >= (unsigned)numsectors))
{
CON_ERRPRINTF("invalid sector %d\n", vm.pUSprite->sectnum);
insptr++;
continue;
}
int const spriteNum = A_Spawn(vm.spriteNum,*insptr++);
switch (tw)
{
case CON_EQSPAWN:
if (spriteNum != -1)
A_AddToDeleteQueue(spriteNum);
fallthrough__;
case CON_ESPAWN:
aGameVars[g_returnVarID].global = spriteNum;
break;
case CON_QSPAWN:
if (spriteNum != -1)
A_AddToDeleteQueue(spriteNum);
break;
}
}
continue;
case CON_ESHOOT:
case CON_EZSHOOT:
case CON_ZSHOOT:
insptr++;
{
// NOTE: (int16_t) cast because we want to exclude that
// SHOOT_HARDCODED_ZVEL is passed.
int const zvel = (tw == CON_ESHOOT) ?
SHOOT_HARDCODED_ZVEL : (int16_t)Gv_GetVarX(*insptr++);
if (EDUKE32_PREDICT_FALSE((unsigned)vm.pSprite->sectnum >= (unsigned)numsectors))
{
CON_ERRPRINTF("invalid sector %d\n", vm.pUSprite->sectnum);
insptr++;
continue;
}
int const spriteNum = A_ShootWithZvel(vm.spriteNum,*insptr++,zvel);
if (tw != CON_ZSHOOT)
aGameVars[g_returnVarID].global = spriteNum;
}
continue;
case CON_SHOOTVAR: case CON_SHOOTVAR:
case CON_ESHOOTVAR: case CON_ESHOOTVAR:
insptr++; insptr++;
@ -3134,17 +3039,10 @@ nullquote:
int const intzvar = *insptr++; int const intzvar = *insptr++;
int const retvar = *insptr++; int const retvar = *insptr++;
vec3_t in; vec3_t in;
int ret = (tw == CON_LINEINTERSECT)
? lintersect(v.vec[0].x, v.vec[0].y, v.vec[0].z, int ret = ((tw == CON_LINEINTERSECT) ? lintersect : rayintersect)(v.vec[0].x, v.vec[0].y, v.vec[0].z, v.vec[1].x,
v.vec[1].x, v.vec[1].y, v.vec[1].z, v.vec[1].y, v.vec[1].z, v.vec2[0].x, v.vec2[0].y,
v.vec2[0].x, v.vec2[0].y, v.vec2[1].x, v.vec2[1].y, &in.x, &in.y, &in.z);
v.vec2[1].x, v.vec2[1].y,
&in.x, &in.y, &in.z)
: rayintersect(v.vec[0].x, v.vec[0].y, v.vec[0].z,
v.vec[1].x, v.vec[1].y, v.vec[1].z,
v.vec2[0].x, v.vec2[0].y,
v.vec2[1].x, v.vec2[1].y,
&in.x, &in.y, &in.z);
Gv_SetVarX(retvar, ret); Gv_SetVarX(retvar, ret);
@ -4005,27 +3903,20 @@ finish_qsprintf:
case CON_SETSECTOR: case CON_SETSECTOR:
insptr++; insptr++;
{ {
tw = *insptr++; int const sectNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : sprite[vm.spriteNum].sectnum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
int const lVar2 = *insptr++;
int const sectNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : sprite[vm.spriteNum].sectnum;
int const nValue = Gv_GetVarX(lVar2);
VM_SetSector(sectNum, labelNum, nValue); VM_SetSector(sectNum, labelNum, Gv_GetVarX(*insptr++));
continue; continue;
} }
case CON_GETSECTOR: case CON_GETSECTOR:
insptr++; insptr++;
{ {
tw = *insptr++; int const sectNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : sprite[vm.spriteNum].sectnum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
int const lVar2 = *insptr++;
int const sectNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : sprite[vm.spriteNum].sectnum;
Gv_SetVarX(lVar2, VM_GetSector(sectNum, labelNum)); Gv_SetVarX(*insptr++, VM_GetSector(sectNum, labelNum));
continue; continue;
} }
@ -4038,72 +3929,6 @@ finish_qsprintf:
continue; continue;
} }
case CON_FINDNEARACTOR:
case CON_FINDNEARSPRITE:
case CON_FINDNEARACTOR3D:
case CON_FINDNEARSPRITE3D:
insptr++;
{
// syntax findnearactorvar <type> <maxdist> <getvar>
// gets the sprite ID of the nearest actor within max dist
// that is of <type> into <getvar>
// -1 for none found
// <type> <maxdist> <varid>
int const findPicnum = *insptr++;
int const maxDist = *insptr++;
int const returnVar = *insptr++;
int foundSprite = -1;
int findStatnum = MAXSTATUS - 1;
int spriteNum;
if (tw == CON_FINDNEARACTOR || tw == CON_FINDNEARACTOR3D)
findStatnum = 1;
if (tw==CON_FINDNEARSPRITE3D || tw==CON_FINDNEARACTOR3D)
{
do
{
spriteNum=headspritestat[findStatnum]; // all sprites
while (spriteNum>=0)
{
if (sprite[spriteNum].picnum == findPicnum && spriteNum != vm.spriteNum && dist(&sprite[vm.spriteNum], &sprite[spriteNum]) < maxDist)
{
foundSprite=spriteNum;
spriteNum = MAXSPRITES;
break;
}
spriteNum = nextspritestat[spriteNum];
}
if (spriteNum == MAXSPRITES || tw == CON_FINDNEARACTOR3D)
break;
}
while (findStatnum--);
Gv_SetVarX(returnVar, foundSprite);
continue;
}
do
{
spriteNum=headspritestat[findStatnum]; // all sprites
while (spriteNum>=0)
{
if (sprite[spriteNum].picnum == findPicnum && spriteNum != vm.spriteNum && ldist(&sprite[vm.spriteNum], &sprite[spriteNum]) < maxDist)
{
foundSprite=spriteNum;
spriteNum = MAXSPRITES;
break;
}
spriteNum = nextspritestat[spriteNum];
}
if (spriteNum == MAXSPRITES || tw == CON_FINDNEARACTOR)
break;
}
while (findStatnum--);
Gv_SetVarX(returnVar, foundSprite);
continue;
}
case CON_FINDNEARACTORVAR: case CON_FINDNEARACTORVAR:
case CON_FINDNEARSPRITEVAR: case CON_FINDNEARSPRITEVAR:
case CON_FINDNEARACTOR3DVAR: case CON_FINDNEARACTOR3DVAR:
@ -4220,54 +4045,6 @@ finish_qsprintf:
continue; continue;
} }
case CON_FINDNEARACTORZ:
case CON_FINDNEARSPRITEZ:
insptr++;
{
// syntax findnearactorvar <type> <maxdist> <getvar>
// gets the sprite ID of the nearest actor within max dist
// that is of <type> into <getvar>
// -1 for none found
// <type> <maxdist> <varid>
int const findPicnum = *insptr++;
int const maxDist = *insptr++;
int const maxZDist = *insptr++;
int const returnVar = *insptr++;
int foundSprite = -1;
int findStatnum = MAXSTATUS - 1;
do
{
int spriteNum = headspritestat[tw == CON_FINDNEARACTORZ ? 1 : findStatnum]; // all sprites
if (spriteNum == -1)
continue;
do
{
if (sprite[spriteNum].picnum == findPicnum && spriteNum != vm.spriteNum)
{
if (ldist(&sprite[vm.spriteNum], &sprite[spriteNum]) < maxDist)
{
if (klabs(sprite[vm.spriteNum].z-sprite[spriteNum].z) < maxZDist)
{
foundSprite=spriteNum;
spriteNum = MAXSPRITES;
break;
}
}
}
spriteNum = nextspritestat[spriteNum];
}
while (spriteNum>=0);
if (tw==CON_FINDNEARACTORZ || spriteNum == MAXSPRITES)
break;
}
while (findStatnum--);
Gv_SetVarX(returnVar, foundSprite);
continue;
}
case CON_FINDPLAYER: case CON_FINDPLAYER:
insptr++; insptr++;
aGameVars[g_returnVarID].global = A_FindPlayer(&sprite[vm.spriteNum], &tw); aGameVars[g_returnVarID].global = A_FindPlayer(&sprite[vm.spriteNum], &tw);
@ -4283,23 +4060,18 @@ finish_qsprintf:
case CON_SETPLAYER: case CON_SETPLAYER:
insptr++; insptr++;
{ {
tw = *insptr++; int const playerNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : vm.playerNum;
int const playerNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : vm.playerNum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
int const lParm2 = (PlayerLabels[labelNum].flags & LABEL_HASPARM2) ? Gv_GetVarX(*insptr++) : 0; int const lParm2 = (PlayerLabels[labelNum].flags & LABEL_HASPARM2) ? Gv_GetVarX(*insptr++) : 0;
int const nValue = Gv_GetVarX(*insptr++);
VM_SetPlayer(playerNum, labelNum, lParm2, nValue); VM_SetPlayer(playerNum, labelNum, lParm2, Gv_GetVarX(*insptr++));
continue; continue;
} }
case CON_GETPLAYER: case CON_GETPLAYER:
insptr++; insptr++;
{ {
tw = *insptr++; int const playerNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : vm.playerNum;
int const playerNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : vm.playerNum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
int const lParm2 = (PlayerLabels[labelNum].flags & LABEL_HASPARM2) ? Gv_GetVarX(*insptr++) : 0; int const lParm2 = (PlayerLabels[labelNum].flags & LABEL_HASPARM2) ? Gv_GetVarX(*insptr++) : 0;
@ -4310,9 +4082,7 @@ finish_qsprintf:
case CON_GETINPUT: case CON_GETINPUT:
insptr++; insptr++;
{ {
tw = *insptr++; int const playerNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : vm.playerNum;
int const playerNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : vm.playerNum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
Gv_SetVarX(*insptr++, VM_GetPlayerInput(playerNum, labelNum)); Gv_SetVarX(*insptr++, VM_GetPlayerInput(playerNum, labelNum));
@ -4322,13 +4092,10 @@ finish_qsprintf:
case CON_SETINPUT: case CON_SETINPUT:
insptr++; insptr++;
{ {
tw = *insptr++; int const playerNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : vm.playerNum;
int const playerNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : vm.playerNum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
int const iSet = Gv_GetVarX(*insptr++);
VM_SetPlayerInput(playerNum, labelNum, iSet); VM_SetPlayerInput(playerNum, labelNum, Gv_GetVarX(*insptr++));
continue; continue;
} }
@ -4407,6 +4174,7 @@ finish_qsprintf:
if (lVar2 == MAXGAMEVARS || lVar2 & ((MAXGAMEVARS << 2) | (MAXGAMEVARS << 3))) if (lVar2 == MAXGAMEVARS || lVar2 & ((MAXGAMEVARS << 2) | (MAXGAMEVARS << 3)))
insptr++; insptr++;
continue; continue;
} }
@ -4450,9 +4218,7 @@ finish_qsprintf:
case CON_SETACTOR: case CON_SETACTOR:
insptr++; insptr++;
{ {
tw = *insptr++; int const spriteNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : vm.spriteNum;
int const spriteNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : vm.spriteNum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
int const lParm2 = (ActorLabels[labelNum].flags & LABEL_HASPARM2) ? Gv_GetVarX(*insptr++) : 0; int const lParm2 = (ActorLabels[labelNum].flags & LABEL_HASPARM2) ? Gv_GetVarX(*insptr++) : 0;
@ -4463,9 +4229,7 @@ finish_qsprintf:
case CON_GETACTOR: case CON_GETACTOR:
insptr++; insptr++;
{ {
tw = *insptr++; int const spriteNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : vm.spriteNum;
int const spriteNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : vm.spriteNum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
int const lParm2 = (ActorLabels[labelNum].flags & LABEL_HASPARM2) ? Gv_GetVarX(*insptr++) : 0; int const lParm2 = (ActorLabels[labelNum].flags & LABEL_HASPARM2) ? Gv_GetVarX(*insptr++) : 0;
@ -4476,9 +4240,7 @@ finish_qsprintf:
case CON_SETTSPR: case CON_SETTSPR:
insptr++; insptr++;
{ {
tw = *insptr++; int const spriteNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : vm.spriteNum;
int const spriteNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : vm.spriteNum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
VM_SetTsprite(spriteNum, labelNum, Gv_GetVarX(*insptr++)); VM_SetTsprite(spriteNum, labelNum, Gv_GetVarX(*insptr++));
@ -4488,9 +4250,7 @@ finish_qsprintf:
case CON_GETTSPR: case CON_GETTSPR:
insptr++; insptr++;
{ {
tw = *insptr++; int const spriteNum = (*insptr++ != g_thisActorVarID) ? Gv_GetVarX(*(insptr - 1)) : vm.spriteNum;
int const spriteNum = (tw != g_thisActorVarID) ? Gv_GetVarX(tw) : vm.spriteNum;
int const labelNum = *insptr++; int const labelNum = *insptr++;
Gv_SetVarX(*insptr++, VM_GetTsprite(spriteNum, labelNum)); Gv_SetVarX(*insptr++, VM_GetTsprite(spriteNum, labelNum));
@ -4514,19 +4274,6 @@ finish_qsprintf:
continue; continue;
case CON_CHECKAVAILWEAPON: case CON_CHECKAVAILWEAPON:
insptr++;
tw = (*insptr != g_thisActorVarID) ? Gv_GetVarX(*insptr) : vm.playerNum;
insptr++;
if (EDUKE32_PREDICT_FALSE((unsigned)tw >= (unsigned)g_mostConcurrentPlayers))
{
CON_ERRPRINTF("invalid player %d\n", tw);
continue;
}
P_CheckWeapon(g_player[tw].ps);
continue;
case CON_CHECKAVAILINVEN: case CON_CHECKAVAILINVEN:
insptr++; insptr++;
tw = (*insptr != g_thisActorVarID) ? Gv_GetVarX(*insptr) : vm.playerNum; tw = (*insptr != g_thisActorVarID) ? Gv_GetVarX(*insptr) : vm.playerNum;
@ -4538,7 +4285,11 @@ finish_qsprintf:
continue; continue;
} }
if (tw == CON_CHECKAVAILWEAPON)
P_CheckWeapon(g_player[tw].ps);
else
P_SelectNextInvItem(g_player[tw].ps); P_SelectNextInvItem(g_player[tw].ps);
continue; continue;
case CON_GETPLAYERANGLE: case CON_GETPLAYERANGLE:
@ -4642,10 +4393,14 @@ finish_qsprintf:
{ {
int numBytes = numElements * Gv_GetArrayElementSize(arrayNum); int numBytes = numElements * Gv_GetArrayElementSize(arrayNum);
Baligned_free(aGameArrays[arrayNum].pValues);
aGameArrays[arrayNum].size = numBytes ? numElements : kfilelength(kFile); aGameArrays[arrayNum].size = numBytes ? numElements : kfilelength(kFile);
aGameArrays[arrayNum].pValues = (intptr_t *)Xaligned_alloc(ACTOR_VAR_ALIGNMENT, Gv_GetArrayAllocSize(arrayNum));
if (numBytes != Gv_GetArrayAllocSize(arrayNum))
{
Baligned_free(aGameArrays[arrayNum].pValues);
aGameArrays[arrayNum].pValues = (intptr_t *) Xaligned_alloc(ACTOR_VAR_ALIGNMENT, Gv_GetArrayAllocSize(arrayNum));
}
numBytes = Gv_GetArrayAllocSize(arrayNum); numBytes = Gv_GetArrayAllocSize(arrayNum);
switch (aGameArrays[arrayNum].flags & GAMEARRAY_TYPE_MASK) switch (aGameArrays[arrayNum].flags & GAMEARRAY_TYPE_MASK)
@ -4665,7 +4420,7 @@ finish_qsprintf:
} }
#endif #endif
default: default:
kread(kFile, aGameArrays[arrayNum].pValues, numBytes); kread(kFile, aGameArrays[arrayNum].pValues, Gv_GetArrayAllocSize(arrayNum));
break; break;
} }
} }
@ -5080,38 +4835,26 @@ finish_qsprintf:
case CON_SHIFTVARL: case CON_SHIFTVARL:
insptr++; insptr++;
if ((aGameVars[*insptr].flags & (GAMEVAR_USER_MASK|GAMEVAR_PTR_MASK)) == 0) Gv_ShiftVarL(*insptr, *(insptr+1));
{
aGameVars[*insptr].global <<= *(insptr+1);
insptr += 2;
continue;
}
Gv_SetVarX(*insptr, Gv_GetVarX(*insptr) << *(insptr+1));
insptr += 2; insptr += 2;
continue; continue;
case CON_SHIFTVARR: case CON_SHIFTVARR:
insptr++; insptr++;
if ((aGameVars[*insptr].flags & (GAMEVAR_USER_MASK|GAMEVAR_PTR_MASK)) == 0) Gv_ShiftVarR(*insptr, *(insptr+1));
{
aGameVars[*insptr].global >>= *(insptr+1);
insptr += 2;
continue;
}
Gv_SetVarX(*insptr, Gv_GetVarX(*insptr) >> *(insptr+1));
insptr += 2; insptr += 2;
continue; continue;
case CON_SHIFTVARVARL: case CON_SHIFTVARVARL:
insptr++; insptr++;
tw = *insptr++; tw = *insptr++;
Gv_SetVarX(tw, Gv_GetVarX(tw) << Gv_GetVarX(*insptr++)); Gv_ShiftVarL(tw, Gv_GetVarX(*insptr++));
continue; continue;
case CON_SHIFTVARVARR: case CON_SHIFTVARVARR:
insptr++; insptr++;
tw = *insptr++; tw = *insptr++;
Gv_SetVarX(tw, Gv_GetVarX(tw) >> Gv_GetVarX(*insptr++)); Gv_ShiftVarR(tw, Gv_GetVarX(*insptr++));
continue; continue;
case CON_SIN: case CON_SIN:
@ -5559,11 +5302,17 @@ finish_qsprintf:
switch (*insptr++) switch (*insptr++)
{ {
case GET_STEROIDS: tw = (pPlayer->inv_amount[GET_STEROIDS] != *insptr); break; case GET_STEROIDS:
case GET_SHIELD: tw = (pPlayer->inv_amount[GET_SHIELD] != pPlayer->max_shield_amount); break; case GET_SHIELD:
case GET_SCUBA: tw = (pPlayer->inv_amount[GET_SCUBA] != *insptr); break; case GET_SCUBA:
case GET_HOLODUKE: tw = (pPlayer->inv_amount[GET_HOLODUKE] != *insptr); break; case GET_HOLODUKE:
case GET_JETPACK: tw = (pPlayer->inv_amount[GET_JETPACK] != *insptr); break; case GET_HEATS:
case GET_FIRSTAID:
case GET_BOOTS:
case GET_JETPACK:
tw = (pPlayer->inv_amount[*(insptr - 1)] != *insptr);
break;
case GET_ACCESS: case GET_ACCESS:
switch (vm.pSprite->pal) switch (vm.pSprite->pal)
{ {
@ -5572,9 +5321,6 @@ finish_qsprintf:
case 23: tw = (pPlayer->got_access & 4); break; case 23: tw = (pPlayer->got_access & 4); break;
} }
break; break;
case GET_HEATS: tw = (pPlayer->inv_amount[GET_HEATS] != *insptr); break;
case GET_FIRSTAID: tw = (pPlayer->inv_amount[GET_FIRSTAID] != *insptr); break;
case GET_BOOTS: tw = (pPlayer->inv_amount[GET_BOOTS] != *insptr); break;
default: tw = 0; CON_ERRPRINTF("invalid inventory item %d\n", (int32_t) * (insptr - 1)); default: tw = 0; CON_ERRPRINTF("invalid inventory item %d\n", (int32_t) * (insptr - 1));
} }
@ -5587,7 +5333,7 @@ finish_qsprintf:
if (cansee(vm.pSprite->x, vm.pSprite->y, vm.pSprite->z - ZOFFSET6, vm.pSprite->sectnum, pPlayer->pos.x, if (cansee(vm.pSprite->x, vm.pSprite->y, vm.pSprite->z - ZOFFSET6, vm.pSprite->sectnum, pPlayer->pos.x,
pPlayer->pos.y, pPlayer->pos.z + ZOFFSET2, sprite[pPlayer->i].sectnum)) pPlayer->pos.y, pPlayer->pos.z + ZOFFSET2, sprite[pPlayer->i].sectnum))
{ {
int32_t numPlayers = g_mostConcurrentPlayers - 1; int numPlayers = g_mostConcurrentPlayers - 1;
for (; numPlayers >= 0; --numPlayers) for (; numPlayers >= 0; --numPlayers)
{ {

View file

@ -222,6 +222,8 @@ VM_GAMEVAR_OPERATOR(Gv_ModVar, %=)
VM_GAMEVAR_OPERATOR(Gv_AndVar, &=) VM_GAMEVAR_OPERATOR(Gv_AndVar, &=)
VM_GAMEVAR_OPERATOR(Gv_XorVar, ^=) VM_GAMEVAR_OPERATOR(Gv_XorVar, ^=)
VM_GAMEVAR_OPERATOR(Gv_OrVar, |=) VM_GAMEVAR_OPERATOR(Gv_OrVar, |=)
VM_GAMEVAR_OPERATOR(Gv_ShiftVarL, <<=)
VM_GAMEVAR_OPERATOR(Gv_ShiftVarR, >>=)
#undef VM_GAMEVAR_OPERATOR #undef VM_GAMEVAR_OPERATOR