- cleanup after removing EDukes's script code.

# Conflicts:
#	source/games/duke/src/zz_game.cpp
#	source/games/duke/src/zz_gameexec.cpp
This commit is contained in:
Christoph Oelckers 2020-05-15 10:44:57 +02:00
parent ed6262e0bf
commit 6b2fdf24fd
20 changed files with 232 additions and 476 deletions

View file

@ -24,8 +24,6 @@ set( PCH_SOURCES
src/zz_d_menu.cpp src/zz_d_menu.cpp
src/zz_demo.cpp src/zz_demo.cpp
src/zz_game.cpp src/zz_game.cpp
src/zz_gamedef.cpp
src/zz_gameexec.cpp
src/zz_global.cpp src/zz_global.cpp
src/zz_interpolate.cpp src/zz_interpolate.cpp
src/zz_namesdyn.cpp src/zz_namesdyn.cpp

View file

@ -4689,7 +4689,7 @@ void getglobalz(int i)
{ {
if( s->statnum != 4 ) if( s->statnum != 4 )
{ {
hittype[i].flags |= SFLAG_NOFLOORSHADOW; hittype[i].aflags |= SFLAG_NOFLOORSHADOW;
//hittype[i].dispicnum = -4; // No shadows on actors //hittype[i].dispicnum = -4; // No shadows on actors
s->xvel = -256; s->xvel = -256;
ssp(i,CLIPMASK0); ssp(i,CLIPMASK0);
@ -4697,7 +4697,7 @@ void getglobalz(int i)
} }
else if(sprite[lz].picnum == TILE_APLAYER && badguy(s) ) else if(sprite[lz].picnum == TILE_APLAYER && badguy(s) )
{ {
hittype[i].flags |= SFLAG_NOFLOORSHADOW; hittype[i].aflags |= SFLAG_NOFLOORSHADOW;
//hittype[i].dispicnum = -4; // No shadows on actors //hittype[i].dispicnum = -4; // No shadows on actors
s->xvel = -256; s->xvel = -256;
ssp(i,CLIPMASK0); ssp(i,CLIPMASK0);

View file

@ -137,7 +137,7 @@ typedef struct
{ {
int32_t t_data[10]; // 40b sometimes used to hold offsets to con code int32_t t_data[10]; // 40b sometimes used to hold offsets to con code
int32_t flags; // 4b int32_t aflags; // 4b
union union
{ {
vec3_t bpos; // 12b vec3_t bpos; // 12b
@ -185,13 +185,12 @@ typedef struct
} netactor_t; } netactor_t;
#pragma pack(pop) #pragma pack(pop)
typedef struct // Todo - put more state in here
struct ActorInfo
{ {
intptr_t *execPtr; // pointer to CON script for this tile, formerly actorscrptr uint32_t scriptaddress;
intptr_t *loadPtr; // pointer to load time CON script, formerly actorLoadEventScrPtr or something uint32_t flags;
uint32_t flags; // formerly SpriteFlags, ActorType };
int32_t cacherange; // formerly SpriteCache
} tiledata_t;
// KEEPINSYNC lunatic/con_lang.lua // KEEPINSYNC lunatic/con_lang.lua
@ -262,7 +261,7 @@ enum pflags_t
PROJECTILE_TYPE_MASK = PROJECTILE_HITSCAN | PROJECTILE_RPG | PROJECTILE_KNEE | PROJECTILE_BLOOD, PROJECTILE_TYPE_MASK = PROJECTILE_HITSCAN | PROJECTILE_RPG | PROJECTILE_KNEE | PROJECTILE_BLOOD,
}; };
extern tiledata_t g_tile[MAXTILES]; extern ActorInfo actorinfo[MAXTILES];
extern actor_t actor[MAXSPRITES]; extern actor_t actor[MAXSPRITES];
extern actor_t* hittype; extern actor_t* hittype;
extern int32_t block_deletesprite; extern int32_t block_deletesprite;
@ -337,7 +336,7 @@ EXTERN_INLINE_HEADER int A_CheckEnemySprite(void const * s);
ACTOR_INLINE int A_CheckEnemyTile(int const tileNum) ACTOR_INLINE int A_CheckEnemyTile(int const tileNum)
{ {
return ((g_tile[tileNum].flags & (SFLAG_BADGUY_TILE | SFLAG_BADGUY)) != 0); return ((actorinfo[tileNum].flags & (SFLAG_BADGUY_TILE | SFLAG_BADGUY)) != 0);
} }
int ssp(short i, unsigned int cliptype); //The set sprite function int ssp(short i, unsigned int cliptype); //The set sprite function

View file

@ -456,11 +456,7 @@ int movesprite_d(short spritenum, int xchange, int ychange, int zchange, unsigne
{ {
if (sprite[spritenum].picnum == LIZMAN) if (sprite[spritenum].picnum == LIZMAN)
cd = 292; cd = 292;
#if 0 // TRANSITIONAL the needed infrastructure for this is too different for now else if (actorflag(spritenum, SFLAG_BADGUY))
else if ((actortype[sprite[spritenum].picnum] & 3))
#else
else if (A_CheckSpriteFlags(spritenum, SFLAG_BADGUY))
#endif
cd = sprite[spritenum].clipdist << 2; cd = sprite[spritenum].clipdist << 2;
else else
cd = 192; cd = 192;

View file

@ -625,7 +625,7 @@ void movefta_r(void)
default: default:
#if 0 #if 0
// TRANSITIONAL: RedNukem has this here. Needed? // TRANSITIONAL: RedNukem has this here. Needed?
if (A_CheckSpriteFlags(spriteNum, SFLAG_USEACTIVATOR) && sector[sprite[spriteNum].sectnum].lotag & 16384) break; if (actorflag(spriteNum, SFLAG_USEACTIVATOR) && sector[sprite[spriteNum].sectnum].lotag & 16384) break;
#endif #endif
hittype[i].timetosleep = 0; hittype[i].timetosleep = 0;
check_fta_sounds(i); check_fta_sounds(i);

View file

@ -38,7 +38,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
BEGIN_DUKE_NS BEGIN_DUKE_NS
#define VOLUMEALL (g_Shareware == 0) #define VOLUMEALL (g_Shareware == 0)
#define PLUTOPAK (g_scriptVersion >= 14) #define PLUTOPAK (true)//g_scriptVersion >= 14)
#define VOLUMEONE (g_Shareware == 1) #define VOLUMEONE (g_Shareware == 1)
// increase by 3, because atomic GRP adds 1, and Shareware adds 2 // increase by 3, because atomic GRP adds 1, and Shareware adds 2
@ -196,17 +196,6 @@ enum GameFunction_t
NUM_ACTIONS NUM_ACTIONS
}; };
static inline int32_t G_HaveActor(int spriteNum)
{
return g_tile[spriteNum].execPtr!=NULL;
}
static inline int32_t G_DefaultActorHealth(int spriteNum) // rename!
{
return G_HaveActor(spriteNum) ? g_tile[spriteNum].execPtr[0] : 0;
}
struct GameInterface : ::GameInterface struct GameInterface : ::GameInterface
{ {
const char* Name() override { return "Redneck"; } const char* Name() override { return "Redneck"; }

View file

@ -310,14 +310,17 @@ inline int32_t G_GetTeamPalette(int32_t team)
return pal[team]; return pal[team];
} }
#define A_CheckSpriteFlags(spriteNum, iType) (((g_tile[sprite[spriteNum].picnum].flags^actor[spriteNum].flags) & iType) != 0) inline int actorflag(int spritenum, int mask)
{
return (((actorinfo[sprite[spritenum].picnum].flags/* ^ actor[spritenum].flags*/) & mask) != 0);
}
inline int actorfella(int spnum) inline int actorfella(int spnum)
{ {
return A_CheckSpriteFlags(spnum, SFLAG_KILLCOUNT); return actorflag(spnum, SFLAG_KILLCOUNT);
} }
// (unsigned)iPicnum check: AMC TC Rusty Nails, bayonet MG alt. fire, iPicnum == -1 (via aplWeaponShoots) // (unsigned)iPicnum check: AMC TC Rusty Nails, bayonet MG alt. fire, iPicnum == -1 (via aplWeaponShoots)
#define A_CheckSpriteTileFlags(iPicnum, iType) (((unsigned)iPicnum < MAXTILES) && (g_tile[iPicnum].flags & iType) != 0) #define A_CheckSpriteTileFlags(iPicnum, iType) (((unsigned)iPicnum < MAXTILES) && (actorinfo[iPicnum].flags & iType) != 0)
#define S_StopSound(num) S_StopEnvSound(num, -1) #define S_StopSound(num) S_StopEnvSound(num, -1)
extern int G_StartRTS(int lumpNum, int localPlayer); extern int G_StartRTS(int lumpNum, int localPlayer);

View file

@ -52,14 +52,14 @@ int line_number;
int labelcnt; int labelcnt;
int errorcount, warningcount; // was named 'error' and 'warning' which is too generic for public variables and may clash with other code. int errorcount, warningcount; // was named 'error' and 'warning' which is too generic for public variables and may clash with other code.
int g_currentSourceFile; int g_currentSourceFile;
intptr_t parsing_actor, parsing_event; uint32_t parsing_actor, parsing_event;
int parsing_state; int parsing_state;
int num_squigilly_brackets; int num_squigilly_brackets;
int checking_ifelse; int checking_ifelse;
//G_EXTERN char tempbuf[MAXSECTORS << 1], buf[1024]; todo - move to compile state. tempbuf gets used nearly everywhere as scratchpad memory. //G_EXTERN char tempbuf[MAXSECTORS << 1], buf[1024]; todo - move to compile state. tempbuf gets used nearly everywhere as scratchpad memory.
extern char tempbuf[]; extern char tempbuf[];
extern intptr_t* scriptptr; extern intptr_t* scriptaddress;
extern int* labelcode; extern int* labelcode;
extern intptr_t* apScript; extern intptr_t* apScript;
@ -421,22 +421,22 @@ static void setscriptvalue(int offset, int value)
static void appendscriptvalue(int value) static void appendscriptvalue(int value)
{ {
*scriptptr++ = value; *scriptaddress++ = value;
} }
static int popscriptvalue() static int popscriptvalue()
{ {
return *--scriptptr; return *--scriptaddress;
} }
int scriptpos() int scriptpos()
{ {
return int(scriptptr - apScript); return int(scriptaddress - apScript);
} }
void appendlabeladdress(int offset = 0) void appendlabeladdress(int offset = 0)
{ {
labelcode[labelcnt++] = int(scriptptr - apScript) + offset; labelcode[labelcnt++] = int(scriptaddress - apScript) + offset;
labelcnt++; labelcnt++;
} }
@ -448,7 +448,7 @@ void appendlabelvalue(int value)
void reservescriptspace(int space) void reservescriptspace(int space)
{ {
scriptptr += space; scriptaddress += space;
} }
@ -754,7 +754,7 @@ int parsecommand()
{ {
transnum(); transnum();
popscriptvalue(); popscriptvalue();
j |= *scriptptr; j |= *scriptaddress;
} }
appendscriptvalue(j); appendscriptvalue(j);
} }
@ -793,7 +793,7 @@ int parsecommand()
transnum(); // Volume Number (0/4) transnum(); // Volume Number (0/4)
popscriptvalue(); popscriptvalue();
k = *scriptptr - 1; k = *scriptaddress - 1;
if (k == -1) k = MAXVOLUMES; if (k == -1) k = MAXVOLUMES;
if (k >= 0) // if it's background music if (k >= 0) // if it's background music
@ -975,20 +975,16 @@ int parsecommand()
transnum(); transnum();
lnum = popscriptvalue(); lnum = popscriptvalue();
#if 1
g_tile[lnum].execPtr = apScript + parsing_actor; // TRANSITIONAL should only store an index actorinfo[lnum].scriptaddress = parsing_actor; // TRANSITIONAL should only store an index
if (tw == concmd_useractor) if (tw == concmd_useractor)
{ {
if (j & 1) if (j & 1)
g_tile[lnum].flags |= SFLAG_BADGUY; actorinfo[lnum].flags |= SFLAG_BADGUY;
if (j & 2) if (j & 2)
g_tile[lnum].flags |= (SFLAG_BADGUY | SFLAG_BADGUYSTAYPUT); actorinfo[lnum].flags |= (SFLAG_BADGUY | SFLAG_BADGUYSTAYPUT);
} }
#else
actorscrptr[lnum] = parsing_actor;
actortype[lnum] = j;
#endif
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
{ {
@ -1014,7 +1010,7 @@ int parsecommand()
} }
transnum(); transnum();
// This code was originally here but is a no-op, because both source and destination are the same here. // This code was originally here but is a no-op, because both source and destination are the same here.
//*(parsing_actor + j) = *(scriptptr - 1); //*(parsing_actor + j) = *(scriptaddress - 1);
} }
} }
@ -1042,7 +1038,7 @@ int parsecommand()
transnum(); transnum();
popscriptvalue(); popscriptvalue();
j = *scriptptr; // type of event j = *scriptaddress; // type of event
if (j< 0 || j> EVENT_MAXEVENT) if (j< 0 || j> EVENT_MAXEVENT)
{ {
Printf(TEXTCOLOR_RED " * ERROR!(%s, line %d) Invalid Event ID.\n", fn, line_number); Printf(TEXTCOLOR_RED " * ERROR!(%s, line %d) Invalid Event ID.\n", fn, line_number);
@ -1133,7 +1129,7 @@ int parsecommand()
{ {
checking_ifelse--; checking_ifelse--;
tempscrptr = scriptpos(); tempscrptr = scriptpos();
scriptptr++; //Leave a spot for the fail location scriptaddress++; //Leave a spot for the fail location
parsecommand(); parsecommand();
setscriptvalue(tempscrptr, scriptpos()); setscriptvalue(tempscrptr, scriptpos());
} }
@ -1309,7 +1305,7 @@ int parsecommand()
{ {
transnum(); transnum();
popscriptvalue(); popscriptvalue();
j |= *scriptptr; j |= *scriptaddress;
} while (keyword() == -1); } while (keyword() == -1);
appendscriptvalue(j); appendscriptvalue(j);
goto if_common; goto if_common;
@ -1410,7 +1406,7 @@ int parsecommand()
popscriptvalue(); popscriptvalue();
transnum(); transnum();
popscriptvalue(); popscriptvalue();
j = *scriptptr; j = *scriptaddress;
while (*textptr == ' ' || *textptr == '\t') textptr++; while (*textptr == ' ' || *textptr == '\t') textptr++;
i = 0; i = 0;
@ -1428,7 +1424,7 @@ int parsecommand()
popscriptvalue(); popscriptvalue();
transnum(); transnum();
popscriptvalue(); popscriptvalue();
j = *scriptptr; j = *scriptaddress;
while (*textptr == ' ') textptr++; while (*textptr == ' ') textptr++;
i = 0; i = 0;
@ -1447,10 +1443,10 @@ int parsecommand()
popscriptvalue(); popscriptvalue();
transnum(); transnum();
popscriptvalue(); popscriptvalue();
j = *scriptptr; j = *scriptaddress;
transnum(); transnum();
popscriptvalue(); popscriptvalue();
k = *scriptptr; k = *scriptaddress;
while (*textptr == ' ') textptr++; while (*textptr == ' ') textptr++;
i = 0; i = 0;
@ -1494,7 +1490,7 @@ int parsecommand()
case concmd_definequote: case concmd_definequote:
popscriptvalue(); popscriptvalue();
transnum(); transnum();
k = *(scriptptr - 1); k = *(scriptaddress - 1);
if (k >= MAXQUOTES) if (k >= MAXQUOTES)
{ {
Printf(TEXTCOLOR_RED " * ERROR!(%s, line %d) Quote number exceeds limit of %d.\n", line_number, MAXQUOTES); Printf(TEXTCOLOR_RED " * ERROR!(%s, line %d) Quote number exceeds limit of %d.\n", line_number, MAXQUOTES);
@ -1518,7 +1514,7 @@ int parsecommand()
{ {
popscriptvalue(); popscriptvalue();
transnum(); transnum();
k = *(scriptptr - 1); k = *(scriptaddress - 1);
popscriptvalue(); popscriptvalue();
i = 0; i = 0;
while (*textptr == ' ') while (*textptr == ' ')
@ -1533,19 +1529,19 @@ int parsecommand()
parsebuffer.Push(0); parsebuffer.Push(0);
transnum(); transnum();
int ps = *(scriptptr - 1); int ps = *(scriptaddress - 1);
popscriptvalue(); popscriptvalue();
transnum(); transnum();
int pe = *(scriptptr - 1); int pe = *(scriptaddress - 1);
popscriptvalue(); popscriptvalue();
transnum(); transnum();
int pr = *(scriptptr - 1); int pr = *(scriptaddress - 1);
popscriptvalue(); popscriptvalue();
transnum(); transnum();
int m = *(scriptptr - 1); int m = *(scriptaddress - 1);
popscriptvalue(); popscriptvalue();
transnum(); transnum();
int vo = *(scriptptr - 1); int vo = *(scriptaddress - 1);
popscriptvalue(); popscriptvalue();
S_DefineSound(k, parsebuffer.Data(), ps, pe, pr, m, vo, 1.f); S_DefineSound(k, parsebuffer.Data(), ps, pe, pr, m, vo, 1.f);
return 0; return 0;
@ -1668,7 +1664,7 @@ int parsecommand()
max_ammo_amount[14] = parseone(); max_ammo_amount[14] = parseone();
max_ammo_amount[16] = parseone(); max_ammo_amount[16] = parseone();
} }
scriptptr++; scriptaddress++;
} }
return 0; return 0;
} }
@ -1713,24 +1709,24 @@ void compilecon(const char *filenam)
void loadcons(const char* filenam) void loadcons(const char* filenam)
{ {
for (int i = 0; i < MAXTILES; i++)
{
memset(&actorinfo[i], 0, sizeof(actorinfo));
}
apScript = (intptr_t*)Xcalloc(1, g_scriptSize * sizeof(intptr_t));
labelcnt = 0; labelcnt = 0;
SortCommands(); SortCommands();
#if 0
ClearGameEvents(); ClearGameEvents();
#endif
ClearGameVars(); ClearGameVars();
AddSystemVars(); AddSystemVars();
//memset(actorscrptr, 0, MAXSPRITES);
//memset(actortype, 0, MAXSPRITES);
auto before = I_nsTime(); auto before = I_nsTime();
scriptptr = apScript + 1; scriptaddress = apScript + 1;
compilecon(filenam); //Tokenize compilecon(filenam); //Tokenize
if (userConfig.AddCons) for (FString& m : *userConfig.AddCons.get()) if (userConfig.AddCons) for (FString& m : *userConfig.AddCons.get())
@ -1748,7 +1744,7 @@ void loadcons(const char* filenam)
{ {
auto after = I_nsTime(); auto after = I_nsTime();
Printf("Compilation time:%.2f ms, Code Size:%d bytes. %d labels. %d/%d Variables.\n", (after-before) / 1000000., Printf("Compilation time:%.2f ms, Code Size:%d bytes. %d labels. %d/%d Variables.\n", (after-before) / 1000000.,
((scriptptr - apScript) << 2) - 4, ((scriptaddress - apScript) << 2) - 4,
labelcnt, labelcnt,
0,//iGameVarCount, 0,//iGameVarCount,
MAXGAMEVARS MAXGAMEVARS

View file

@ -54,7 +54,7 @@ extern int32_t g_totalLines;
extern int warningcount; extern int warningcount;
extern int32_t otherp; extern int32_t otherp;
extern intptr_t *scriptptr; extern intptr_t *scriptaddress;
int32_t C_AllocQuote(int32_t qnum); int32_t C_AllocQuote(int32_t qnum);
@ -67,7 +67,7 @@ void C_DefineMusic(int volumeNum, int levelNum, const char *fileName);
void C_DefineVolumeFlags(int32_t vol, int32_t flags); void C_DefineVolumeFlags(int32_t vol, int32_t flags);
void ReportError(int32_t iError); void ReportError(int32_t iError);
void C_Compile(const char *filenam); void loadcons(const char *filenam);
extern int32_t g_errorLineNum; extern int32_t g_errorLineNum;
extern int32_t g_tw; extern int32_t g_tw;

View file

@ -1517,7 +1517,7 @@ int parse(void)
default: default:
Printf(TEXTCOLOR_RED "Unrecognized PCode of %ld in parse. Killing current sprite.\n",*insptr); Printf(TEXTCOLOR_RED "Unrecognized PCode of %ld in parse. Killing current sprite.\n",*insptr);
Printf(TEXTCOLOR_RED "Offset=%0lX\n",scriptptr-apScript); Printf(TEXTCOLOR_RED "Offset=%0lX\n",scriptaddress-apScript);
killit_flag = 1; killit_flag = 1;
break; break;
} }
@ -1536,13 +1536,8 @@ void execute(int i,int p,int x)
g_sp = &sprite[g_i]; // Pointer to sprite structure g_sp = &sprite[g_i]; // Pointer to sprite structure
g_t = &hittype[g_i].temp_data[0]; // Sprite's 'extra' data g_t = &hittype[g_i].temp_data[0]; // Sprite's 'extra' data
#if 1 if (actorinfo[g_sp->picnum].scriptaddress == 0) return;
if (!g_tile[g_sp->picnum].execPtr) return; insptr = apScript + 4 + (actorinfo[g_sp->picnum].scriptaddress);
insptr = 4 + (g_tile[g_sp->picnum].execPtr);
#else
if( actorscrptr[g_sp->picnum] == 0 ) return;
insptr = 4 + (actorscrptr[g_sp->picnum]);
#endif
killit_flag = 0; killit_flag = 0;
@ -1612,4 +1607,64 @@ quit:
} }
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void OnEvent(int iEventID, int p, int i, int x)
{
int og_i, og_p;
int og_x;
int* og_t;
spritetype* og_sp;
uint8_t okillit_flag;
intptr_t* oinsptr;
char done;
if (iEventID >= MAXGAMEEVENTS)
{
Printf("Invalid Event ID\n");
return;
}
if (apScriptGameEvent[iEventID] == 0)
{
return;
}
// save current values...
og_i = g_i;
og_p = g_p;
og_x = g_x;
og_sp = g_sp;
og_t = g_t;
okillit_flag = killit_flag;
oinsptr = insptr;
g_i = i; // current sprite ID
g_p = p; /// current player ID
g_x = x; // ?
g_sp = &sprite[g_i];
g_t = &hittype[g_i].temp_data[0];
insptr = apScript + apScriptGameEvent[iEventID];
killit_flag = 0;
do
done = parse();
while (done == 0);
// restore old values...
g_i = og_i;
g_p = og_p;
g_x = og_x;
g_sp = og_sp;
g_t = og_t;
killit_flag = okillit_flag;
insptr = oinsptr;
}
END_DUKE_NS END_DUKE_NS

View file

@ -28,67 +28,95 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "gamedef.h" // vmstate_t #include "gamedef.h" // vmstate_t
BEGIN_DUKE_NS BEGIN_DUKE_NS
int32_t VM_ExecuteEvent(int const nEventID, int const spriteNum, int const playerNum, int const nDist, int32_t const nReturn);
int32_t VM_ExecuteEvent(int const nEventID, int const spriteNum, int const playerNum, int const nDist);
int32_t VM_ExecuteEvent(int const nEventID, int const spriteNum, int const playerNum);
int32_t VM_ExecuteEventWithValue(int const nEventID, int const spriteNum, int const playerNum, int32_t const nReturn);
static FORCE_INLINE int VM_HaveEvent(int const nEventID) enum
{ {
return !!apScriptGameEvent[nEventID]; EVENT_INIT = 0,
} EVENT_ENTERLEVEL,
EVENT_RESETWEAPONS, // for each player
EVENT_RESETINVENTORY, // for each player
EVENT_HOLSTER, // for each player
EVENT_LOOKLEFT, // for each player
EVENT_LOOKRIGHT, // for each player
EVENT_SOARUP, // for each player
EVENT_SOARDOWN, // for each player
EVENT_CROUCH, // for each player
EVENT_JUMP, // for each player
EVENT_RETURNTOCENTER, // for each player
EVENT_LOOKUP, // for each player
EVENT_LOOKDOWN, // for each player
EVENT_AIMUP, // for each player
EVENT_AIMDOWN, // for each player
EVENT_FIRE, // for each player
EVENT_CHANGEWEAPON, // for each player
EVENT_GETSHOTRANGE, // for each player
EVENT_GETAUTOAIMANGLE, // for each player
EVENT_GETLOADTILE,
static FORCE_INLINE int32_t VM_OnEvent(int nEventID, int spriteNum, int playerNum, int nDist, int32_t nReturn) EVENT_CHEATGETSTEROIDS,
{ EVENT_CHEATGETHEAT,
return VM_HaveEvent(nEventID) ? VM_ExecuteEvent(nEventID, spriteNum, playerNum, nDist, nReturn) : nReturn; EVENT_CHEATGETBOOT,
} EVENT_CHEATGETSHIELD,
EVENT_CHEATGETSCUBA,
EVENT_CHEATGETHOLODUKE,
EVENT_CHEATGETJETPACK,
EVENT_CHEATGETFIRSTAID,
EVENT_QUICKKICK,
EVENT_INVENTORY,
EVENT_USENIGHTVISION,
EVENT_USESTEROIDS,
EVENT_INVENTORYLEFT,
EVENT_INVENTORYRIGHT,
EVENT_HOLODUKEON,
EVENT_HOLODUKEOFF,
EVENT_USEMEDKIT,
EVENT_USEJETPACK,
EVENT_TURNAROUND,
static FORCE_INLINE int32_t VM_OnEvent(int nEventID, int spriteNum, int playerNum, int nDist) EVENT_NUMEVENTS,
{ EVENT_MAXEVENT = EVENT_NUMEVENTS - 1
return VM_HaveEvent(nEventID) ? VM_ExecuteEvent(nEventID, spriteNum, playerNum, nDist) : 0; };
}
static FORCE_INLINE int32_t VM_OnEvent(int nEventID, int spriteNum = -1, int playerNum = -1)
{
return VM_HaveEvent(nEventID) ? VM_ExecuteEvent(nEventID, spriteNum, playerNum) : 0;
}
inline int OnEvent(int id, int pnum, int snum, int what)
void OnEvent(int id, int pnum = -1, int snum = -1, int dist = -1);
static FORCE_INLINE int32_t VM_OnEvent(int nEventID, int spriteNum=-1, int playerNum=-1, int nDist=-1, int32_t nReturn=0)
{ {
return VM_OnEvent(id, snum, pnum, what); // set return
if (IsGameEvent(nEventID))
{
SetGameVarID(g_iReturnVarID, nReturn, spriteNum, playerNum);
OnEvent(nEventID, spriteNum, playerNum, -1);
return GetGameVarID(g_iReturnVarID, spriteNum, playerNum);
}
return nReturn;
} }
static FORCE_INLINE int32_t VM_OnEventWithReturn(int nEventID, int spriteNum, int playerNum, int32_t nReturn) static FORCE_INLINE int32_t VM_OnEventWithReturn(int nEventID, int spriteNum, int playerNum, int32_t nReturn)
{ {
return VM_HaveEvent(nEventID) ? VM_ExecuteEventWithValue(nEventID, spriteNum, playerNum, nReturn) : nReturn; // set return
if (IsGameEvent(nEventID))
{
SetGameVarID(g_iReturnVarID, nReturn, spriteNum, playerNum);
OnEvent(nEventID, spriteNum, playerNum, -1);
return GetGameVarID(g_iReturnVarID, spriteNum, playerNum);
}
return nReturn;
} }
extern int32_t ticrandomseed; extern int32_t ticrandomseed;
extern int32_t g_tw;
extern int32_t g_currentEvent;
extern int32_t g_errorLineNum;
void execute(int s, int p, int d); void execute(int s, int p, int d);
void makeitfall(int s); void makeitfall(int s);
int furthestangle(int spriteNum, int angDiv); int furthestangle(int spriteNum, int angDiv);
void getglobalz(int s); void getglobalz(int s);
int getincangle(int c, int n); int getincangle(int c, int n);
//void G_RestoreMapState();
//void G_SaveMapState();
#define CON_ERRPRINTF(Text, ...) do { \
Printf("Line %d, %s: " Text, g_errorLineNum, VM_GetKeywordForID(g_tw), ## __VA_ARGS__); \
} while (0)
#define CON_CRITICALERRPRINTF(Text, ...) do { \
I_Error("Line %d, %s: " Text, VM_DECODE_LINE_NUMBER(g_tw), VM_GetKeywordForID(VM_DECODE_INST(g_tw)), ## __VA_ARGS__); \
} while (0)
void G_GetTimeDate(int32_t * pValues); void G_GetTimeDate(int32_t * pValues);
int G_StartTrack(int levelNum); int G_StartTrack(int levelNum);
void VM_UpdateAnim(int spriteNum, int32_t *pData);
END_DUKE_NS END_DUKE_NS

View file

@ -420,7 +420,6 @@ int *GetGameValuePtr(char *szGameLabel)
} }
#if 0
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// //
// Event stuff // Event stuff
@ -455,66 +454,6 @@ bool IsGameEvent(int i)
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
void OnEvent(int iEventID, short i,short p,long x)
{
int og_i,og_p;
int og_x;
int *og_t;
spritetype *og_sp;
uint8_t okillit_flag;
intptr_t *oinsptr;
char done;
if( iEventID >= MAXGAMEEVENTS)
{
Printf("Invalid Event ID\n");
return;
}
if( apScriptGameEvent[iEventID] == 0 )
{
return;
}
// save current values...
og_i=g_i;
og_p=g_p;
og_x=g_x;
og_sp=g_sp;
og_t=g_t;
okillit_flag=killit_flag;
oinsptr=insptr;
g_i = i; // current sprite ID
g_p = p; /// current player ID
g_x = x; // ?
g_sp = &sprite[g_i];
g_t = &hittype[g_i].temp_data[0];
insptr = (apScriptGameEvent[iEventID]);
killit_flag = 0;
do
done = parse();
while( done == 0 );
// restore old values...
g_i=og_i;
g_p=og_p;
g_x=og_x;
g_sp=og_sp;
g_t=og_t;
killit_flag=okillit_flag;
insptr=oinsptr;
}
#endif
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
int *aplWeaponClip[MAX_WEAPONS]; // number of items in clip int *aplWeaponClip[MAX_WEAPONS]; // number of items in clip
int *aplWeaponReload[MAX_WEAPONS]; // delay to reload (include fire) int *aplWeaponReload[MAX_WEAPONS]; // delay to reload (include fire)
int *aplWeaponFireDelay[MAX_WEAPONS]; // delay to fire int *aplWeaponFireDelay[MAX_WEAPONS]; // delay to fire

View file

@ -3,55 +3,6 @@
BEGIN_DUKE_NS BEGIN_DUKE_NS
// gamedef.c // gamedef.c
//void OnEvent(int iEventID, int i,int p,int x);
enum
{
EVENT_INIT = 0,
EVENT_ENTERLEVEL,
EVENT_RESETWEAPONS, // for each player
EVENT_RESETINVENTORY, // for each player
EVENT_HOLSTER, // for each player
EVENT_LOOKLEFT, // for each player
EVENT_LOOKRIGHT, // for each player
EVENT_SOARUP, // for each player
EVENT_SOARDOWN, // for each player
EVENT_CROUCH, // for each player
EVENT_JUMP, // for each player
EVENT_RETURNTOCENTER, // for each player
EVENT_LOOKUP, // for each player
EVENT_LOOKDOWN, // for each player
EVENT_AIMUP, // for each player
EVENT_AIMDOWN, // for each player
EVENT_FIRE, // for each player
EVENT_CHANGEWEAPON, // for each player
EVENT_GETSHOTRANGE, // for each player
EVENT_GETAUTOAIMANGLE, // for each player
EVENT_GETLOADTILE,
EVENT_CHEATGETSTEROIDS,
EVENT_CHEATGETHEAT,
EVENT_CHEATGETBOOT,
EVENT_CHEATGETSHIELD,
EVENT_CHEATGETSCUBA,
EVENT_CHEATGETHOLODUKE,
EVENT_CHEATGETJETPACK,
EVENT_CHEATGETFIRSTAID,
EVENT_QUICKKICK,
EVENT_INVENTORY,
EVENT_USENIGHTVISION,
EVENT_USESTEROIDS,
EVENT_INVENTORYLEFT,
EVENT_INVENTORYRIGHT,
EVENT_HOLODUKEON,
EVENT_HOLODUKEOFF,
EVENT_USEMEDKIT,
EVENT_USEJETPACK,
EVENT_TURNAROUND,
EVENT_NUMEVENTS,
EVENT_MAXEVENT = EVENT_NUMEVENTS-1
};
enum enum
{ {

View file

@ -61,8 +61,8 @@ enum DUKE3D_GLOBALFLAGS {
}; };
G_EXTERN actor_t actor[MAXSPRITES]; G_EXTERN actor_t actor[MAXSPRITES];
// g_tile: tile-specific data THAT DOES NOT CHANGE during the course of a game // actorinfo: tile-specific data THAT DOES NOT CHANGE during the course of a game
G_EXTERN tiledata_t g_tile[MAXTILES]; G_EXTERN ActorInfo actorinfo[MAXTILES];
G_EXTERN animwalltype animwall[MAXANIMWALLS]; G_EXTERN animwalltype animwall[MAXANIMWALLS];
extern char *label; extern char *label;
G_EXTERN char g_loadFromGroupOnly; G_EXTERN char g_loadFromGroupOnly;
@ -202,7 +202,20 @@ G_EXTERN int16_t ambienthitag[64];
G_EXTERN uint32_t g_ambientCnt; G_EXTERN uint32_t g_ambientCnt;
G_EXTERN intptr_t *apScript; G_EXTERN intptr_t *apScript;
G_EXTERN intptr_t *scriptptr; G_EXTERN intptr_t *scriptaddress;
inline int32_t G_HaveActor(int spriteNum)
{
return actorinfo[spriteNum].scriptaddress != NULL;
}
inline int32_t G_DefaultActorHealth(int spriteNum) // rename!
{
return G_HaveActor(spriteNum) ? apScript[actorinfo[spriteNum].scriptaddress] : 0;
}
G_EXTERN vec2_t g_origins[MAXANIMPOINTS]; G_EXTERN vec2_t g_origins[MAXANIMPOINTS];
struct msx_ struct msx_

View file

@ -294,8 +294,8 @@ static void G_DoEffectorLights(void) // STATNUM 14
{ {
case SE_49_POINT_LIGHT: case SE_49_POINT_LIGHT:
{ {
if (!A_CheckSpriteFlags(i, SFLAG_NOLIGHT) && videoGetRenderMode() == REND_POLYMER && if (!actorflag(i, SFLAG_NOLIGHT) && videoGetRenderMode() == REND_POLYMER &&
!(A_CheckSpriteFlags(i, SFLAG_USEACTIVATOR) && sector[sprite[i].sectnum].lotag & 16384)) !(actorflag(i, SFLAG_USEACTIVATOR) && sector[sprite[i].sectnum].lotag & 16384))
{ {
if (actor[i].lightptr == NULL) if (actor[i].lightptr == NULL)
{ {
@ -360,8 +360,8 @@ static void G_DoEffectorLights(void) // STATNUM 14
} }
case SE_50_SPOT_LIGHT: case SE_50_SPOT_LIGHT:
{ {
if (!A_CheckSpriteFlags(i, SFLAG_NOLIGHT) && videoGetRenderMode() == REND_POLYMER && if (!actorflag(i, SFLAG_NOLIGHT) && videoGetRenderMode() == REND_POLYMER &&
!(A_CheckSpriteFlags(i, SFLAG_USEACTIVATOR) && sector[sprite[i].sectnum].lotag & 16384)) !(actorflag(i, SFLAG_USEACTIVATOR) && sector[sprite[i].sectnum].lotag & 16384))
{ {
if (actor[i].lightptr == NULL) if (actor[i].lightptr == NULL)
{ {
@ -466,7 +466,7 @@ static void A_DoLight(int spriteNum)
if (((sector[pSprite->sectnum].floorz - sector[pSprite->sectnum].ceilingz) < 16) || pSprite->z > sector[pSprite->sectnum].floorz || pSprite->z > actor[spriteNum].floorz || if (((sector[pSprite->sectnum].floorz - sector[pSprite->sectnum].ceilingz) < 16) || pSprite->z > sector[pSprite->sectnum].floorz || pSprite->z > actor[spriteNum].floorz ||
(pSprite->picnum != TILE_SECTOREFFECTOR && ((pSprite->cstat & 32768) || pSprite->yrepeat < 4)) || (pSprite->picnum != TILE_SECTOREFFECTOR && ((pSprite->cstat & 32768) || pSprite->yrepeat < 4)) ||
A_CheckSpriteFlags(spriteNum, SFLAG_NOLIGHT) || (A_CheckSpriteFlags(spriteNum, SFLAG_USEACTIVATOR) && sector[pSprite->sectnum].lotag & 16384)) actorflag(spriteNum, SFLAG_NOLIGHT) || (actorflag(spriteNum, SFLAG_USEACTIVATOR) && sector[pSprite->sectnum].lotag & 16384))
{ {
if (actor[spriteNum].lightptr != NULL) if (actor[spriteNum].lightptr != NULL)
A_DeleteLight(spriteNum); A_DeleteLight(spriteNum);
@ -505,7 +505,7 @@ static void A_DoLight(int spriteNum)
case ACCESSSWITCH__STATIC: case ACCESSSWITCH__STATIC:
case ACCESSSWITCH2__STATIC: case ACCESSSWITCH2__STATIC:
{ {
if ((pSprite->cstat & 32768) || A_CheckSpriteFlags(spriteNum, SFLAG_NOLIGHT)) if ((pSprite->cstat & 32768) || actorflag(spriteNum, SFLAG_NOLIGHT))
{ {
if (actor[spriteNum].lightptr != NULL) if (actor[spriteNum].lightptr != NULL)
A_DeleteLight(spriteNum); A_DeleteLight(spriteNum);

View file

@ -1319,14 +1319,15 @@ void G_DumpDebugInfo(void)
// else only if it equals 0. // else only if it equals 0.
static int32_t G_InitActor(int32_t i, int32_t tilenum, int32_t set_movflag_uncond) static int32_t G_InitActor(int32_t i, int32_t tilenum, int32_t set_movflag_uncond)
{ {
if (g_tile[tilenum].execPtr) if (actorinfo[tilenum].scriptaddress)
{ {
SH(i) = *(g_tile[tilenum].execPtr); auto sa = &apScript[actorinfo[tilenum].scriptaddress];
AC_ACTION_ID(actor[i].t_data) = *(g_tile[tilenum].execPtr+1); SH(i) = sa[0];
AC_MOVE_ID(actor[i].t_data) = *(g_tile[tilenum].execPtr+2); AC_ACTION_ID(actor[i].t_data) = sa[1];
AC_MOVE_ID(actor[i].t_data) = sa[2];
if (set_movflag_uncond || (*(g_tile[tilenum].execPtr + 3) && SHT(i) == 0)) // AC_MOVFLAGS if (set_movflag_uncond || (sa[3] && SHT(i) == 0)) // AC_MOVFLAGS
SHT(i) = *(g_tile[tilenum].execPtr+3); SHT(i) = sa[3];
return 1; return 1;
} }
@ -1555,7 +1556,7 @@ default_case:
if (pSprite->xrepeat == 0 || pSprite->yrepeat == 0) if (pSprite->xrepeat == 0 || pSprite->yrepeat == 0)
pSprite->xrepeat = pSprite->yrepeat = 1; pSprite->xrepeat = pSprite->yrepeat = 1;
if (A_CheckSpriteFlags(newSprite, SFLAG_BADGUY)) if (actorflag(newSprite, SFLAG_BADGUY))
{ {
if (ud.monsters_off == 1) if (ud.monsters_off == 1)
{ {
@ -1566,10 +1567,10 @@ default_case:
makeitfall(newSprite); makeitfall(newSprite);
if (A_CheckSpriteFlags(newSprite, SFLAG_BADGUYSTAYPUT)) if (actorflag(newSprite, SFLAG_BADGUYSTAYPUT))
pActor->actorstayput = pSprite->sectnum; pActor->actorstayput = pSprite->sectnum;
if (!RR || A_CheckSpriteFlags(newSprite, SFLAG_KILLCOUNT)) if (!RR || actorflag(newSprite, SFLAG_KILLCOUNT))
g_player[myconnectindex].ps->max_actors_killed++; g_player[myconnectindex].ps->max_actors_killed++;
pSprite->clipdist = 80; pSprite->clipdist = 80;
@ -3154,7 +3155,7 @@ rr_badguy:
pSprite->cstat |= 257; pSprite->cstat |= 257;
if (pSprite->picnum != TILE_SHARK) if (pSprite->picnum != TILE_SHARK)
if (!RR || A_CheckSpriteFlags(newSprite, SFLAG_KILLCOUNT)) if (!RR || actorflag(newSprite, SFLAG_KILLCOUNT))
g_player[myconnectindex].ps->max_actors_killed++; g_player[myconnectindex].ps->max_actors_killed++;
} }
@ -3270,7 +3271,7 @@ rr_badguy:
changespritestat(newSprite, STAT_MISC); changespritestat(newSprite, STAT_MISC);
goto SPAWN_END; goto SPAWN_END;
} }
if (!RR || A_CheckSpriteFlags(newSprite, SFLAG_KILLCOUNT)) if (!RR || actorflag(newSprite, SFLAG_KILLCOUNT))
g_player[myconnectindex].ps->max_actors_killed++; g_player[myconnectindex].ps->max_actors_killed++;
pActor->t_data[5] = 0; pActor->t_data[5] = 0;
if (ud.monsters_off == 1) if (ud.monsters_off == 1)
@ -3616,8 +3617,10 @@ rr_badguy:
/* XXX: fi.fall-through intended? */ /* XXX: fi.fall-through intended? */
fallthrough__; fallthrough__;
#endif #endif
case SE_49_POINT_LIGHT: case SE_49_POINT_LIGHT:
case SE_50_SPOT_LIGHT: case SE_50_SPOT_LIGHT:
#ifdef POLYMER
{ {
int32_t j, nextj; int32_t j, nextj;
@ -3625,6 +3628,7 @@ rr_badguy:
if (sprite[j].picnum == TILE_ACTIVATOR || sprite[j].picnum == TILE_ACTIVATORLOCKED) if (sprite[j].picnum == TILE_ACTIVATOR || sprite[j].picnum == TILE_ACTIVATORLOCKED)
pActor->flags |= SFLAG_USEACTIVATOR; pActor->flags |= SFLAG_USEACTIVATOR;
} }
#endif
changespritestat(newSprite, pSprite->lotag==46 ? STAT_EFFECTOR : STAT_LIGHT); changespritestat(newSprite, pSprite->lotag==46 ? STAT_EFFECTOR : STAT_LIGHT);
goto SPAWN_END; goto SPAWN_END;
break; break;
@ -4341,7 +4345,7 @@ static int G_MaybeTakeOnFloorPal(tspritetype *pSprite, int sectNum)
{ {
int const floorPal = sector[sectNum].floorpal; int const floorPal = sector[sectNum].floorpal;
if (floorPal && !lookups.noFloorPal(floorPal) && !A_CheckSpriteFlags(pSprite->owner, SFLAG_NOPAL)) if (floorPal && !lookups.noFloorPal(floorPal) && !actorflag(pSprite->owner, SFLAG_NOPAL))
{ {
pSprite->pal = floorPal; pSprite->pal = floorPal;
return 1; return 1;
@ -5061,7 +5065,7 @@ default_case1:
{ {
// Display TILE_APLAYER sprites with action PSTAND when viewed through // Display TILE_APLAYER sprites with action PSTAND when viewed through
// a camera. // a camera.
const intptr_t *aplayer_scr = g_tile[TILE_APLAYER].execPtr; auto aplayer_scr = apScript + actorinfo[TILE_APLAYER].scriptaddress;
// [0]=strength, [1]=actionofs, [2]=moveofs // [0]=strength, [1]=actionofs, [2]=moveofs
scrofs_action = aplayer_scr[1]; scrofs_action = aplayer_scr[1];
@ -5351,7 +5355,7 @@ skip:
// player has nightvision on. We should pass stuff like "from which player is this view // player has nightvision on. We should pass stuff like "from which player is this view
// supposed to be" as parameters ("drawing context") instead of relying on globals. // supposed to be" as parameters ("drawing context") instead of relying on globals.
if (!RR && g_player[screenpeek].ps->inv_amount[GET_HEATS] > 0 && g_player[screenpeek].ps->heat_on && if (!RR && g_player[screenpeek].ps->inv_amount[GET_HEATS] > 0 && g_player[screenpeek].ps->heat_on &&
(A_CheckEnemySprite(pSprite) || A_CheckSpriteFlags(t->owner,SFLAG_NVG) || pSprite->picnum == TILE_APLAYER || pSprite->statnum == STAT_DUMMYPLAYER)) (A_CheckEnemySprite(pSprite) || actorflag(t->owner,SFLAG_NVG) || pSprite->picnum == TILE_APLAYER || pSprite->statnum == STAT_DUMMYPLAYER))
{ {
t->pal = 6; t->pal = 6;
t->shade = 0; t->shade = 0;
@ -5361,7 +5365,7 @@ skip:
t->shade = -127; t->shade = -127;
// Fake floor shadow, implemented by inserting a new tsprite. // Fake floor shadow, implemented by inserting a new tsprite.
if (pSprite->statnum == STAT_DUMMYPLAYER || A_CheckEnemySprite(pSprite) || A_CheckSpriteFlags(t->owner,SFLAG_SHADOW) || (pSprite->picnum == TILE_APLAYER && pSprite->owner >= 0)) if (pSprite->statnum == STAT_DUMMYPLAYER || A_CheckEnemySprite(pSprite) || actorflag(t->owner,SFLAG_SHADOW) || (pSprite->picnum == TILE_APLAYER && pSprite->owner >= 0))
if ((!RR || (pSprite->cstat&48) == 0) && t->statnum != TSPR_TEMP && pSprite->picnum != TILE_EXPLOSION2 && (RR || pSprite->picnum != TILE_HANGLIGHT) && pSprite->picnum != TILE_DOMELITE && (RR || pSprite->picnum != TILE_HOTMEAT) if ((!RR || (pSprite->cstat&48) == 0) && t->statnum != TSPR_TEMP && pSprite->picnum != TILE_EXPLOSION2 && (RR || pSprite->picnum != TILE_HANGLIGHT) && pSprite->picnum != TILE_DOMELITE && (RR || pSprite->picnum != TILE_HOTMEAT)
&& (!RR || pSprite->picnum != TILE_TORNADO) && (!RR || pSprite->picnum != TILE_EXPLOSION3) && (!RR || RRRA || pSprite->picnum != TILE_SBMOVE)) && (!RR || pSprite->picnum != TILE_TORNADO) && (!RR || pSprite->picnum != TILE_EXPLOSION3) && (!RR || RRRA || pSprite->picnum != TILE_SBMOVE))
{ {
@ -5376,7 +5380,7 @@ skip:
continue; continue;
} }
if (actor[i].flags & SFLAG_NOFLOORSHADOW) if (actor[i].aflags & SFLAG_NOFLOORSHADOW)
continue; continue;
if (r_shadows && spritesortcnt < (maxspritesonscreen-2) if (r_shadows && spritesortcnt < (maxspritesonscreen-2)
@ -6531,7 +6535,7 @@ static void G_CompileScripts(void)
labeltype = (int32_t *)&wall[0]; // V8: 16384*32/4 = 131072 V7: 8192*32/4 = 65536 labeltype = (int32_t *)&wall[0]; // V8: 16384*32/4 = 131072 V7: 8192*32/4 = 65536
#endif #endif
C_Compile(G_ConFile()); loadcons(G_ConFile());
if ((uint32_t)labelcnt > MAXSPRITES*sizeof(spritetype)/64) // see the arithmetic above for why if ((uint32_t)labelcnt > MAXSPRITES*sizeof(spritetype)/64) // see the arithmetic above for why
G_GameExit("Error: too many labels defined!"); G_GameExit("Error: too many labels defined!");
@ -6573,7 +6577,7 @@ static inline void G_CheckGametype(void)
ud.m_respawn_items = ud.m_respawn_inventory = 1; ud.m_respawn_items = ud.m_respawn_inventory = 1;
} }
#define SETFLAG(Tilenum, Flag) g_tile[Tilenum].flags |= Flag #define SETFLAG(Tilenum, Flag) actorinfo[Tilenum].flags |= Flag
// Has to be after setting the dynamic names (e.g. TILE_SHARK). // Has to be after setting the dynamic names (e.g. TILE_SHARK).
static void A_InitEnemyFlags(void) static void A_InitEnemyFlags(void)

View file

@ -1,75 +0,0 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 2016 EDuke32 developers and contributors
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#include "ns.h" // Must come before everything else!
#include "concmd.h"
#include "duke3d_ed.h"
#include "namesdyn.h"
#include "gamedef.h"
#include "gameexec.h"
#include "savegame.h"
#include "common.h"
#include "common_game.h"
#include "cheats.h"
#include "m_argv.h"
#include "osd.h"
#include "m_crc32.h"
#include "printf.h"
#include "menu/menu.h"
#include "stringtable.h"
#include "mapinfo.h"
BEGIN_DUKE_NS
#define LINE_NUMBER (line_number << 12)
int32_t g_scriptVersion = 14; // 13 = 1.3D-style CON files, 14 = 1.4/1.5 style CON files
char g_scriptFileName[BMAX_PATH] = "(none)"; // file we're currently compiling
int32_t g_totalLines;
char g_szBuf[1024];
char const * VM_GetKeywordForID(int32_t id)
{
// do not really need this for now...
return "<invalid keyword>";
}
void loadcons(const char* filenam);
void C_Compile(const char *fileName)
{
for (int i=0; i<MAXTILES; i++)
{
Bmemset(&g_tile[i], 0, sizeof(tiledata_t));
}
apScript = (intptr_t *)Xcalloc(1, g_scriptSize * sizeof(intptr_t));
loadcons(fileName);
}
END_DUKE_NS

View file

@ -1,123 +0,0 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 2016 EDuke32 developers and contributors
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
#include "ns.h" // Must come before everything else!
#include "concmd.h"
#include "compat.h"
#include "duke3d.h"
#include "anim.h"
#include "menus.h"
#include "osdcmds.h"
#include "savegame.h"
#include "gamecvars.h"
#include "version.h"
#include "debugbreak.h"
BEGIN_DUKE_NS
// verification that the event actually exists happens elsewhere
static FORCE_INLINE int32_t VM_EventInlineInternal__(int const eventNum, int const spriteNum, int const playerNum,
int const playerDist = -1, int32_t returnValue = 0)
{
#if 0
vmstate_t const newVMstate = { spriteNum, playerNum, playerDist, 0,
&sprite[spriteNum&(MAXSPRITES-1)],
&actor[spriteNum&(MAXSPRITES-1)].t_data[0],
g_player[playerNum&(MAXPLAYERS-1)].ps,
&actor[spriteNum&(MAXSPRITES-1)] };
auto &globalReturn = aGameVars[g_returnVarID].lValue;
struct
{
vmstate_t vm;
intptr_t globalReturn;
int eventNum;
intptr_t const *insptr;
} const saved = { vm, globalReturn, g_currentEvent, insptr };
vm = newVMstate;
g_currentEvent = eventNum;
insptr = apScript + apScriptGameEvent[eventNum];
globalReturn = returnValue;
double const t = timerGetHiTicks();
if ((unsigned)spriteNum >= MAXSPRITES)
VM_DummySprite();
if ((unsigned)playerNum >= (unsigned)g_mostConcurrentPlayers)
vm.pPlayer = g_player[0].ps;
while (1) if (parse()) break;
if (killit_flag == 1)
{
// if player was set to squish, first stop that...
if (ps[g_p].actorsqu == g_i)
ps[g_p].actorsqu = -1;
deletesprite(g_i);
}
// restoring these needs to happen after VM_DeleteSprite() due to event recursion
returnValue = globalReturn;
vm = saved.vm;
globalReturn = saved.globalReturn;
g_currentEvent = saved.eventNum;
insptr = saved.insptr;
return returnValue;
#endif
return 0;
}
// the idea here is that the compiler inlines the call to VM_EventInlineInternal__() and gives us a set of
// functions which are optimized further based on distance/return having values known at compile time
int32_t VM_ExecuteEvent(int const nEventID, int const spriteNum, int const playerNum, int const nDist, int32_t const nReturn)
{
return VM_EventInlineInternal__(nEventID, spriteNum, playerNum, nDist, nReturn);
}
int32_t VM_ExecuteEvent(int const nEventID, int const spriteNum, int const playerNum, int const nDist)
{
return VM_EventInlineInternal__(nEventID, spriteNum, playerNum, nDist);
}
int32_t VM_ExecuteEvent(int const nEventID, int const spriteNum, int const playerNum)
{
return VM_EventInlineInternal__(nEventID, spriteNum, playerNum);
}
int32_t VM_ExecuteEventWithValue(int const nEventID, int const spriteNum, int const playerNum, int32_t const nReturn)
{
return VM_EventInlineInternal__(nEventID, spriteNum, playerNum, -1, nReturn);
}
END_DUKE_NS

View file

@ -87,9 +87,6 @@ static void G_CacheSpriteNum(int32_t i)
maxc = 1; maxc = 1;
for (j = PN(i); j <= g_tile[PN(i)].cacherange; j++)
tloadtile(j,1);
switch (DYNAMICTILEMAP(PN(i))) switch (DYNAMICTILEMAP(PN(i)))
{ {
case HYDRENT__STATIC: case HYDRENT__STATIC:
@ -386,15 +383,6 @@ static void G_PrecacheSprites(void)
{ {
int32_t i; int32_t i;
//for (i=0; i<MAXTILES; i++)
//{
// if (g_tile[i].flags & SFLAG_PROJECTILE)
// tloadtile(i,1);
//
// if (A_CheckSpriteTileFlags(i, SFLAG_CACHE))
// for (j = i; j <= g_tile[i].cacherange; j++)
// tloadtile(j,1);
//}
tloadtile(TILE_BOTTOMSTATUSBAR,1); tloadtile(TILE_BOTTOMSTATUSBAR,1);
if ((g_netServer || ud.multimode > 1)) if ((g_netServer || ud.multimode > 1))
tloadtile(TILE_FRAGBAR,1); tloadtile(TILE_FRAGBAR,1);

View file

@ -187,9 +187,6 @@ static int32_t gtextsc(int32_t sc)
static void G_DrawCameraText(int16_t i) static void G_DrawCameraText(int16_t i)
{ {
//if (VM_OnEvent(EVENT_DISPLAYCAMERAOSD, i, screenpeek) != 0)
// return;
if (!T1(i)) if (!T1(i))
{ {
rotatesprite_win(24<<16, 33<<16, 65536L, 0, TILE_CAMCORNER, 0, 0, 2); rotatesprite_win(24<<16, 33<<16, 65536L, 0, TILE_CAMCORNER, 0, 0, 2);
@ -810,7 +807,6 @@ void G_DisplayRest(int32_t smoothratio)
G_RestoreInterpolations(); G_RestoreInterpolations();
//int32_t const textret = VM_OnEvent(EVENT_DISPLAYOVERHEADMAPTEXT, g_player[screenpeek].ps->i, screenpeek);
if (/*textret == 0 &&*/ ud.overhead_on == 2) if (/*textret == 0 &&*/ ud.overhead_on == 2)
{ {
const int32_t a = RR ? 0 : ((ud.screen_size > 0) ? 147 : 179); const int32_t a = RR ? 0 : ((ud.screen_size > 0) ? 147 : 179);
@ -823,7 +819,6 @@ void G_DisplayRest(int32_t smoothratio)
} }
//if (VM_OnEvent(EVENT_DISPLAYSBAR, g_player[screenpeek].ps->i, screenpeek) == 0)
G_DrawStatusBar(screenpeek); G_DrawStatusBar(screenpeek);
G_PrintGameQuotes(screenpeek); G_PrintGameQuotes(screenpeek);
@ -874,7 +869,7 @@ void G_DisplayRest(int32_t smoothratio)
mdpause = (ud.pause_on || (ud.recstat==2 && (g_demo_paused && g_demo_goalCnt==0)) || (g_player[myconnectindex].ps->gm&MODE_MENU && numplayers < 2)); mdpause = (ud.pause_on || (ud.recstat==2 && (g_demo_paused && g_demo_goalCnt==0)) || (g_player[myconnectindex].ps->gm&MODE_MENU && numplayers < 2));
// JBF 20040124: display level stats in screen corner // JBF 20040124: display level stats in screen corner
if (ud.overhead_on != 2 && hud_stats) // && VM_OnEvent(EVENT_DISPLAYLEVELSTATS, g_player[screenpeek].ps->i, screenpeek) == 0) if (ud.overhead_on != 2 && hud_stats)
{ {
DukePlayer_t const * const myps = g_player[myconnectindex].ps; DukePlayer_t const * const myps = g_player[myconnectindex].ps;
int const sbarshift = RR ? 15 : 16; int const sbarshift = RR ? 15 : 16;