mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-11 07:11:39 +00:00
dynamically allocated script buffers
this is still broken git-svn-id: https://svn.eduke32.com/eduke32@567 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
826f786dcc
commit
eec7e1b2e0
6 changed files with 188 additions and 49 deletions
|
@ -148,7 +148,7 @@ enum gamemodes {
|
||||||
|
|
||||||
#define MAXCYCLERS 1024
|
#define MAXCYCLERS 1024
|
||||||
|
|
||||||
#define MAXSCRIPTSIZE 98304
|
#define MAXSCRIPTSIZE 131072
|
||||||
|
|
||||||
#define MAXANIMATES 256
|
#define MAXANIMATES 256
|
||||||
|
|
||||||
|
@ -437,8 +437,7 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
long ox,oy,oz;
|
long ox,oy,oz;
|
||||||
short oa,os;
|
short oa,os;
|
||||||
} player_orig;
|
} player_spawnpoint;
|
||||||
|
|
||||||
|
|
||||||
extern char numplayersprites;
|
extern char numplayersprites;
|
||||||
|
|
||||||
|
@ -529,7 +528,8 @@ extern char sounds[NUM_SOUNDS][BMAX_PATH];
|
||||||
|
|
||||||
// JBF 20040531: adding 16 extra to the script so we have some leeway
|
// JBF 20040531: adding 16 extra to the script so we have some leeway
|
||||||
// to (hopefully) safely abort when hitting the limit
|
// to (hopefully) safely abort when hitting the limit
|
||||||
extern long script[MAXSCRIPTSIZE+16],*scriptptr,*insptr,*labelcode,labelcnt,defaultlabelcnt,*labeltype;
|
extern long *script,*scriptptr,*insptr,*labelcode,labelcnt,defaultlabelcnt,*labeltype;
|
||||||
|
extern int g_ScriptSize;
|
||||||
extern char *label;
|
extern char *label;
|
||||||
extern long *actorscrptr[MAXTILES],*parsing_actor;
|
extern long *actorscrptr[MAXTILES],*parsing_actor;
|
||||||
extern long *actorLoadEventScrptr[MAXTILES];
|
extern long *actorLoadEventScrptr[MAXTILES];
|
||||||
|
@ -980,7 +980,7 @@ typedef struct {
|
||||||
} playerdata_t;
|
} playerdata_t;
|
||||||
|
|
||||||
extern input inputfifo[MOVEFIFOSIZ][MAXPLAYERS];
|
extern input inputfifo[MOVEFIFOSIZ][MAXPLAYERS];
|
||||||
extern player_orig g_PlayerSpawnPoints[MAXPLAYERS];
|
extern player_spawnpoint g_PlayerSpawnPoints[MAXPLAYERS];
|
||||||
extern playerdata_t g_player[MAXPLAYERS];
|
extern playerdata_t g_player[MAXPLAYERS];
|
||||||
#include "funct.h"
|
#include "funct.h"
|
||||||
|
|
||||||
|
|
|
@ -9314,6 +9314,8 @@ static void freeconmem(void)
|
||||||
Bfree(label);
|
Bfree(label);
|
||||||
if (labelcode != NULL)
|
if (labelcode != NULL)
|
||||||
Bfree(labelcode);
|
Bfree(labelcode);
|
||||||
|
if (script != NULL)
|
||||||
|
Bfree(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1443,9 +1443,9 @@ static long CountCaseStatements()
|
||||||
{
|
{
|
||||||
long lCount;
|
long lCount;
|
||||||
char *temptextptr = textptr;
|
char *temptextptr = textptr;
|
||||||
long *savescript = scriptptr;
|
|
||||||
long *savecase = casescriptptr;
|
|
||||||
int temp_line_number = line_number;
|
int temp_line_number = line_number;
|
||||||
|
long tempscriptptr = (unsigned)(scriptptr-script);
|
||||||
|
long tempsavecase = (unsigned)(casescriptptr-script);
|
||||||
|
|
||||||
casecount=0;
|
casecount=0;
|
||||||
casescriptptr=NULL;
|
casescriptptr=NULL;
|
||||||
|
@ -1461,28 +1461,129 @@ static long CountCaseStatements()
|
||||||
checking_switch++;
|
checking_switch++;
|
||||||
|
|
||||||
textptr=temptextptr;
|
textptr=temptextptr;
|
||||||
scriptptr=savescript;
|
scriptptr = (long *)(script+tempscriptptr);
|
||||||
|
|
||||||
line_number = temp_line_number;
|
line_number = temp_line_number;
|
||||||
|
|
||||||
lCount=casecount;
|
lCount=casecount;
|
||||||
casecount=0;
|
casecount=0;
|
||||||
casescriptptr=savecase;
|
casescriptptr = (long *)(script+tempsavecase);
|
||||||
return lCount;
|
return lCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parsecommand(void)
|
static int parsecommand(void)
|
||||||
{
|
{
|
||||||
long i, j=0, k=0, *tempscrptr, done, tw;
|
long i, j=0, k=0, done, tw;
|
||||||
char *temptextptr;
|
char *temptextptr;
|
||||||
|
long *tempscrptr;
|
||||||
|
|
||||||
if (((unsigned)(scriptptr-script) > MAXSCRIPTSIZE) && error == 0)
|
if ((unsigned)(scriptptr-script) > (unsigned)(g_ScriptSize-128))
|
||||||
{
|
{
|
||||||
/* Bsprintf(tempbuf,"fatal error: Size of compiled CON code exceeds maximum size! (%ud, %d)\n",(unsigned)(scriptptr-script),MAXSCRIPTSIZE); */
|
long oscriptptr = (unsigned)(scriptptr-script);
|
||||||
ReportError(-1);
|
long ocasescriptptr = (unsigned)(casescriptptr-script);
|
||||||
initprintf("%s:%ld: internal compiler error: Aborted (%ud)\n",compilefile,line_number,(unsigned)(scriptptr-script));
|
long oparsing_event = (unsigned)(parsing_event-script);
|
||||||
initprintf(tempbuf);
|
long oparsing_actor = (unsigned)(parsing_actor-script);
|
||||||
error++;
|
long olabelcode[MAXSECTORS];
|
||||||
|
long *scriptptrs;
|
||||||
|
|
||||||
|
Bmemset(&olabelcode,0,sizeof(olabelcode));
|
||||||
|
|
||||||
|
for (j=0;j<labelcnt;j++)
|
||||||
|
{
|
||||||
|
if (labeltype[j] != LABEL_DEFINE) //== LABEL_STATE || labeltype[j] == LABEL_AI || labeltype[j] == LABEL_ACTION || labeltype[j] == LABEL_MOVE)
|
||||||
|
olabelcode[j] = (long)(labelcode[j]-(long)script);
|
||||||
|
}
|
||||||
|
|
||||||
|
scriptptrs = Bcalloc(1, (g_ScriptSize+16) * sizeof(long));
|
||||||
|
for (i=0;i<g_ScriptSize-1;i++)
|
||||||
|
{
|
||||||
|
if ((long)script[i] >= (long)(&script[0]) && (long)script[i] < (long)(&script[g_ScriptSize]))
|
||||||
|
{
|
||||||
|
scriptptrs[i] = 1;
|
||||||
|
j = (long)script[i] - (long)&script[0];
|
||||||
|
script[i] = j;
|
||||||
|
}
|
||||||
|
else scriptptrs[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<MAXTILES;i++)
|
||||||
|
if (actorscrptr[i])
|
||||||
|
{
|
||||||
|
j = (long)actorscrptr[i]-(long)&script[0];
|
||||||
|
actorscrptr[i] = (long *)j;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<MAXTILES;i++)
|
||||||
|
if (actorLoadEventScrptr[i])
|
||||||
|
{
|
||||||
|
j = (long)actorLoadEventScrptr[i]-(long)&script[0];
|
||||||
|
actorLoadEventScrptr[i] = (long *)j;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<MAXGAMEEVENTS;i++)
|
||||||
|
if (apScriptGameEvent[i])
|
||||||
|
{
|
||||||
|
j = (long)apScriptGameEvent[i]-(long)&script[0];
|
||||||
|
apScriptGameEvent[i] = (long *)j;
|
||||||
|
}
|
||||||
|
|
||||||
|
//initprintf("offset: %ld\n",(unsigned)(scriptptr-script));
|
||||||
|
g_ScriptSize += 16384;
|
||||||
|
initprintf("Increasing script buffer size to %ld bytes...\n",g_ScriptSize);
|
||||||
|
script = (long *)realloc(script, (g_ScriptSize+16) * sizeof(long));
|
||||||
|
|
||||||
|
if (script == NULL)
|
||||||
|
{
|
||||||
|
ReportError(-1);
|
||||||
|
initprintf("%s:%ld: out of memory: Aborted (%ud)\n",compilefile,line_number,(unsigned)(scriptptr-script));
|
||||||
|
initprintf(tempbuf);
|
||||||
|
error++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
scriptptr = (long *)(script+oscriptptr);
|
||||||
|
//initprintf("offset: %ld\n",(unsigned)(scriptptr-script));
|
||||||
|
if (casescriptptr != NULL)
|
||||||
|
casescriptptr = (long *)(script+ocasescriptptr);
|
||||||
|
if (parsing_event != NULL)
|
||||||
|
parsing_event = (long *)(script+oparsing_event);
|
||||||
|
if (parsing_actor != NULL)
|
||||||
|
parsing_actor = (long *)(script+oparsing_actor);
|
||||||
|
|
||||||
|
for (j=0;j<labelcnt;j++)
|
||||||
|
{
|
||||||
|
if (labeltype[j] != LABEL_DEFINE)//== LABEL_STATE || labeltype[j] == LABEL_AI || labeltype[j] == LABEL_ACTION || labeltype[j] == LABEL_MOVE)
|
||||||
|
{
|
||||||
|
labelcode[j] = (long)(script+olabelcode[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<g_ScriptSize-16384;i++)
|
||||||
|
if (scriptptrs[i])
|
||||||
|
{
|
||||||
|
j = (long)script[i]+(long)&script[0];
|
||||||
|
script[i] = j;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<MAXTILES;i++)
|
||||||
|
if (actorscrptr[i])
|
||||||
|
{
|
||||||
|
j = (long)actorscrptr[i]+(long)&script[0];
|
||||||
|
actorscrptr[i] = (long *)j;
|
||||||
|
}
|
||||||
|
for (i=0;i<MAXTILES;i++)
|
||||||
|
if (actorLoadEventScrptr[i])
|
||||||
|
{
|
||||||
|
j = (long)actorLoadEventScrptr[i]+(long)&script[0];
|
||||||
|
actorLoadEventScrptr[i] = (long *)j;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<MAXGAMEEVENTS;i++)
|
||||||
|
if (apScriptGameEvent[i])
|
||||||
|
{
|
||||||
|
j = (long)apScriptGameEvent[i]+(long)&script[0];
|
||||||
|
apScriptGameEvent[i] = (long *)j;
|
||||||
|
}
|
||||||
|
Bfree(scriptptrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((error+warning) > 63 || (*textptr == '\0') || (*(textptr+1) == '\0')) return 1;
|
if ((error+warning) > 63 || (*textptr == '\0') || (*(textptr+1) == '\0')) return 1;
|
||||||
|
@ -2435,10 +2536,13 @@ static int parsecommand(void)
|
||||||
case CON_ELSE:
|
case CON_ELSE:
|
||||||
if (checking_ifelse)
|
if (checking_ifelse)
|
||||||
{
|
{
|
||||||
|
long offset;
|
||||||
checking_ifelse--;
|
checking_ifelse--;
|
||||||
tempscrptr = scriptptr;
|
tempscrptr = scriptptr;
|
||||||
|
offset = (unsigned)(tempscrptr-script);
|
||||||
scriptptr++; //Leave a spot for the fail location
|
scriptptr++; //Leave a spot for the fail location
|
||||||
parsecommand();
|
parsecommand();
|
||||||
|
tempscrptr = (long *)script+offset;
|
||||||
*tempscrptr = (long) scriptptr;
|
*tempscrptr = (long) scriptptr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3311,17 +3415,23 @@ static int parsecommand(void)
|
||||||
case CON_IFVARVARN:
|
case CON_IFVARVARN:
|
||||||
case CON_IFVARVARAND:
|
case CON_IFVARVARAND:
|
||||||
case CON_WHILEVARVARN:
|
case CON_WHILEVARVARN:
|
||||||
|
{
|
||||||
|
long offset;
|
||||||
|
|
||||||
transmultvars(2);
|
transmultvars(2);
|
||||||
tempscrptr = scriptptr;
|
tempscrptr = scriptptr;
|
||||||
|
offset = (unsigned)(tempscrptr-script);
|
||||||
scriptptr++; // Leave a spot for the fail location
|
scriptptr++; // Leave a spot for the fail location
|
||||||
|
|
||||||
j = keyword();
|
j = keyword();
|
||||||
parsecommand();
|
parsecommand();
|
||||||
|
|
||||||
|
tempscrptr = (long *)script+offset;
|
||||||
*tempscrptr = (long) scriptptr;
|
*tempscrptr = (long) scriptptr;
|
||||||
|
|
||||||
if (tw != CON_WHILEVARVARN) checking_ifelse++;
|
if (tw != CON_WHILEVARVARN) checking_ifelse++;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
case CON_SPGETLOTAG:
|
case CON_SPGETLOTAG:
|
||||||
case CON_SPGETHITAG:
|
case CON_SPGETHITAG:
|
||||||
|
@ -3343,22 +3453,26 @@ static int parsecommand(void)
|
||||||
case CON_IFVARN:
|
case CON_IFVARN:
|
||||||
case CON_IFVARAND:
|
case CON_IFVARAND:
|
||||||
case CON_WHILEVARN:
|
case CON_WHILEVARN:
|
||||||
|
{
|
||||||
|
long offset;
|
||||||
|
|
||||||
// get the ID of the DEF
|
// get the ID of the DEF
|
||||||
transvar();
|
transvar();
|
||||||
transnum(LABEL_DEFINE); // the number to check against...
|
transnum(LABEL_DEFINE); // the number to check against...
|
||||||
|
|
||||||
tempscrptr = scriptptr;
|
tempscrptr = scriptptr;
|
||||||
|
offset = (unsigned)(tempscrptr-script);
|
||||||
scriptptr++; //Leave a spot for the fail location
|
scriptptr++; //Leave a spot for the fail location
|
||||||
|
|
||||||
j = keyword();
|
j = keyword();
|
||||||
parsecommand();
|
parsecommand();
|
||||||
|
|
||||||
|
tempscrptr = (long *)script+offset;
|
||||||
*tempscrptr = (long) scriptptr;
|
*tempscrptr = (long) scriptptr;
|
||||||
|
|
||||||
if (tw != CON_WHILEVARN) checking_ifelse++;
|
if (tw != CON_WHILEVARN) checking_ifelse++;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
case CON_ADDLOGVAR:
|
case CON_ADDLOGVAR:
|
||||||
|
|
||||||
// syntax: addlogvar <var>
|
// syntax: addlogvar <var>
|
||||||
|
@ -3503,6 +3617,9 @@ static int parsecommand(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CON_SWITCH:
|
case CON_SWITCH:
|
||||||
|
{
|
||||||
|
long tempoffset;
|
||||||
|
|
||||||
//AddLog("Got Switch statement");
|
//AddLog("Got Switch statement");
|
||||||
if (checking_switch)
|
if (checking_switch)
|
||||||
{
|
{
|
||||||
|
@ -3514,6 +3631,7 @@ static int parsecommand(void)
|
||||||
transvar();
|
transvar();
|
||||||
|
|
||||||
tempscrptr= scriptptr;
|
tempscrptr= scriptptr;
|
||||||
|
tempoffset = (unsigned)(tempscrptr-script);
|
||||||
*scriptptr++=0; // leave spot for end location (for after processing)
|
*scriptptr++=0; // leave spot for end location (for after processing)
|
||||||
*scriptptr++=0; // count of case statements
|
*scriptptr++=0; // count of case statements
|
||||||
casescriptptr=scriptptr; // the first case's pointer.
|
casescriptptr=scriptptr; // the first case's pointer.
|
||||||
|
@ -3540,6 +3658,7 @@ static int parsecommand(void)
|
||||||
}
|
}
|
||||||
if (tempscrptr)
|
if (tempscrptr)
|
||||||
{
|
{
|
||||||
|
tempscrptr = (long *)(script+tempoffset);
|
||||||
tempscrptr[1]=(long)j; // save count of cases
|
tempscrptr[1]=(long)j; // save count of cases
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3559,12 +3678,12 @@ static int parsecommand(void)
|
||||||
//AddLog(g_szBuf);
|
//AddLog(g_szBuf);
|
||||||
|
|
||||||
casecount=0;
|
casecount=0;
|
||||||
|
|
||||||
while (parsecommand() == 0)
|
while (parsecommand() == 0)
|
||||||
{
|
{
|
||||||
//Bsprintf(g_szBuf,"SWITCH2: '%.22s'",textptr);
|
//Bsprintf(g_szBuf,"SWITCH2: '%.22s'",textptr);
|
||||||
//AddLog(g_szBuf);
|
//AddLog(g_szBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Bsprintf(g_szBuf,"SWITCHXX: '%.22s'",textptr);
|
//Bsprintf(g_szBuf,"SWITCHXX: '%.22s'",textptr);
|
||||||
//AddLog(g_szBuf);
|
//AddLog(g_szBuf);
|
||||||
// done processing switch. clean up.
|
// done processing switch. clean up.
|
||||||
|
@ -3576,7 +3695,7 @@ static int parsecommand(void)
|
||||||
casecount=0;
|
casecount=0;
|
||||||
if (tempscrptr)
|
if (tempscrptr)
|
||||||
{
|
{
|
||||||
tempscrptr[0]= (long)scriptptr - (long)&script[0]; // save 'end' location
|
tempscrptr[0]= (unsigned)(scriptptr-script); // save 'end' location
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3593,7 +3712,8 @@ static int parsecommand(void)
|
||||||
//AddLog(g_szBuf);
|
//AddLog(g_szBuf);
|
||||||
}
|
}
|
||||||
//AddLog("End of Switch statement");
|
//AddLog("End of Switch statement");
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case CON_CASE:
|
case CON_CASE:
|
||||||
//AddLog("Found Case");
|
//AddLog("Found Case");
|
||||||
|
@ -3622,7 +3742,7 @@ repeatcase:
|
||||||
{
|
{
|
||||||
//AddLog("Adding value to script");
|
//AddLog("Adding value to script");
|
||||||
casescriptptr[casecount++]=j; // save value
|
casescriptptr[casecount++]=j; // save value
|
||||||
casescriptptr[casecount]=(long)((long*)scriptptr-&script[0]); // save offset
|
casescriptptr[casecount]=(long)((long*)scriptptr-script); // save offset
|
||||||
}
|
}
|
||||||
// j = keyword();
|
// j = keyword();
|
||||||
//Bsprintf(g_szBuf,"case3: %.12s",textptr);
|
//Bsprintf(g_szBuf,"case3: %.12s",textptr);
|
||||||
|
@ -3670,7 +3790,7 @@ repeatcase:
|
||||||
}
|
}
|
||||||
if (casescriptptr)
|
if (casescriptptr)
|
||||||
{
|
{
|
||||||
casescriptptr[0]=(long)(scriptptr-&script[0]); // save offset
|
casescriptptr[0]=(long)(scriptptr-script); // save offset
|
||||||
}
|
}
|
||||||
//Bsprintf(g_szBuf,"default: '%.22s'",textptr);
|
//Bsprintf(g_szBuf,"default: '%.22s'",textptr);
|
||||||
//AddLog(g_szBuf);
|
//AddLog(g_szBuf);
|
||||||
|
@ -3827,6 +3947,8 @@ repeatcase:
|
||||||
case CON_IFAWAYFROMWALL:
|
case CON_IFAWAYFROMWALL:
|
||||||
case CON_IFCANSEETARGET:
|
case CON_IFCANSEETARGET:
|
||||||
case CON_IFNOSOUNDS:
|
case CON_IFNOSOUNDS:
|
||||||
|
{
|
||||||
|
long offset;
|
||||||
if (tw == CON_IFP)
|
if (tw == CON_IFP)
|
||||||
{
|
{
|
||||||
j = 0;
|
j = 0;
|
||||||
|
@ -3842,16 +3964,18 @@ repeatcase:
|
||||||
}
|
}
|
||||||
|
|
||||||
tempscrptr = scriptptr;
|
tempscrptr = scriptptr;
|
||||||
|
offset = (unsigned)(tempscrptr-script);
|
||||||
|
|
||||||
scriptptr++; //Leave a spot for the fail location
|
scriptptr++; //Leave a spot for the fail location
|
||||||
|
|
||||||
j = keyword();
|
j = keyword();
|
||||||
parsecommand();
|
parsecommand();
|
||||||
|
tempscrptr = (long *)script+offset;
|
||||||
*tempscrptr = (long) scriptptr;
|
*tempscrptr = (long) scriptptr;
|
||||||
|
|
||||||
checking_ifelse++;
|
checking_ifelse++;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
case CON_LEFTBRACE:
|
case CON_LEFTBRACE:
|
||||||
if (!(parsing_state || parsing_actor || parsing_event))
|
if (!(parsing_state || parsing_actor || parsing_event))
|
||||||
{
|
{
|
||||||
|
@ -4735,7 +4859,10 @@ void loadefs(const char *filenam)
|
||||||
clearbuf(actorscrptr,MAXTILES,0L); // JBF 20040531: MAXSPRITES? I think Todd meant MAXTILES...
|
clearbuf(actorscrptr,MAXTILES,0L); // JBF 20040531: MAXSPRITES? I think Todd meant MAXTILES...
|
||||||
clearbuf(actorLoadEventScrptr,MAXTILES,0L); // I think this should be here...
|
clearbuf(actorLoadEventScrptr,MAXTILES,0L); // I think this should be here...
|
||||||
clearbufbyte(actortype,MAXTILES,0L);
|
clearbufbyte(actortype,MAXTILES,0L);
|
||||||
clearbufbyte(script,sizeof(script),0l); // JBF 20040531: yes? no?
|
// clearbufbyte(script,sizeof(script),0l); // JBF 20040531: yes? no?
|
||||||
|
if (script != NULL)
|
||||||
|
Bfree(script);
|
||||||
|
script = Bcalloc(1,sizeof(long)*(g_ScriptSize+16));
|
||||||
|
|
||||||
labelcnt = defaultlabelcnt = 0;
|
labelcnt = defaultlabelcnt = 0;
|
||||||
scriptptr = script+1;
|
scriptptr = script+1;
|
||||||
|
@ -4816,7 +4943,7 @@ void loadefs(const char *filenam)
|
||||||
k++;
|
k++;
|
||||||
}
|
}
|
||||||
|
|
||||||
initprintf("\nCompiled code size: %ld/%ld bytes\n",(unsigned)(scriptptr-script),MAXSCRIPTSIZE);
|
initprintf("\nCompiled code size: %ld/%ld bytes\n",(unsigned)(scriptptr-script),g_ScriptSize);
|
||||||
initprintf("%ld/%ld labels, %d/%d variables\n",labelcnt,min((sizeof(sector)/sizeof(long)),(sizeof(sprite)/(1<<6))),iGameVarCount,MAXGAMEVARS);
|
initprintf("%ld/%ld labels, %d/%d variables\n",labelcnt,min((sizeof(sector)/sizeof(long)),(sizeof(sprite)/(1<<6))),iGameVarCount,MAXGAMEVARS);
|
||||||
initprintf("%ld event definitions, %ld defined actors\n\n",j,k);
|
initprintf("%ld event definitions, %ld defined actors\n\n",j,k);
|
||||||
|
|
||||||
|
|
|
@ -4506,15 +4506,15 @@ static int parse(void)
|
||||||
case CON_LDIST:
|
case CON_LDIST:
|
||||||
insptr++;
|
insptr++;
|
||||||
{
|
{
|
||||||
int distvar = *insptr++, xvar = *insptr++, yvar = *insptr++, distx=0;
|
int distvar = *insptr++, xvar = GetGameVarID(*insptr++, g_i, g_p), yvar = GetGameVarID(*insptr++, g_i, g_p), distx=0;
|
||||||
|
|
||||||
switch (tw)
|
switch (tw)
|
||||||
{
|
{
|
||||||
case CON_DIST:
|
case CON_DIST:
|
||||||
distx = dist(&sprite[GetGameVarID(xvar, g_i, g_p)],&sprite[GetGameVarID(yvar, g_i, g_p)]);
|
distx = dist(&sprite[xvar],&sprite[yvar]);
|
||||||
break;
|
break;
|
||||||
case CON_LDIST:
|
case CON_LDIST:
|
||||||
distx = ldist(&sprite[GetGameVarID(xvar, g_i, g_p)],&sprite[GetGameVarID(yvar, g_i, g_p)]);
|
distx = ldist(&sprite[xvar],&sprite[yvar]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4526,14 +4526,16 @@ static int parse(void)
|
||||||
case CON_GETANGLE:
|
case CON_GETANGLE:
|
||||||
insptr++;
|
insptr++;
|
||||||
{
|
{
|
||||||
int angvar = *insptr++, xvar = *insptr++, yvar = *insptr++;
|
int angvar = *insptr++;
|
||||||
|
int xvar = GetGameVarID(*insptr++, g_i, g_p);
|
||||||
|
int yvar = GetGameVarID(*insptr++, g_i, g_p);
|
||||||
|
|
||||||
if (tw==CON_GETANGLE)
|
if (tw==CON_GETANGLE)
|
||||||
{
|
{
|
||||||
SetGameVarID(angvar, getangle(GetGameVarID(xvar, g_i, g_p),GetGameVarID(yvar, g_i, g_p)), g_i, g_p);
|
SetGameVarID(angvar, getangle(xvar,yvar), g_i, g_p);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
SetGameVarID(angvar, getincangle(GetGameVarID(xvar, g_i, g_p),GetGameVarID(yvar, g_i, g_p)), g_i, g_p);
|
SetGameVarID(angvar, getincangle(xvar,yvar), g_i, g_p);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ char numplayersprites,loadfromgrouponly=0,earthquaketime;
|
||||||
long fricxv,fricyv;
|
long fricxv,fricyv;
|
||||||
playerdata_t g_player[MAXPLAYERS];
|
playerdata_t g_player[MAXPLAYERS];
|
||||||
input inputfifo[MOVEFIFOSIZ][MAXPLAYERS];
|
input inputfifo[MOVEFIFOSIZ][MAXPLAYERS];
|
||||||
player_orig g_PlayerSpawnPoints[MAXPLAYERS];
|
player_spawnpoint g_PlayerSpawnPoints[MAXPLAYERS];
|
||||||
user_defs ud;
|
user_defs ud;
|
||||||
|
|
||||||
char pus, pub;
|
char pus, pub;
|
||||||
|
@ -114,7 +114,9 @@ long *actorscrptr[MAXTILES],*parsing_actor;
|
||||||
char *label;
|
char *label;
|
||||||
char *music_pointer;
|
char *music_pointer;
|
||||||
char actortype[MAXTILES];
|
char actortype[MAXTILES];
|
||||||
long script[MAXSCRIPTSIZE+16];
|
long *script = NULL;
|
||||||
|
|
||||||
|
int g_ScriptSize = 16384;
|
||||||
|
|
||||||
char display_mirror,typebuflen,typebuf[141];
|
char display_mirror,typebuflen,typebuf[141];
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,8 @@ int loadplayer(int spot)
|
||||||
int k;
|
int k;
|
||||||
char fn[13];
|
char fn[13];
|
||||||
char mpfn[13];
|
char mpfn[13];
|
||||||
char *fnptr, scriptptrs[MAXSCRIPTSIZE];
|
char *fnptr;
|
||||||
|
long *scriptptrs;
|
||||||
long fil, bv, i, j, x;
|
long fil, bv, i, j, x;
|
||||||
int32 nump;
|
int32 nump;
|
||||||
|
|
||||||
|
@ -263,9 +264,11 @@ int loadplayer(int spot)
|
||||||
if (kdfread(&cloudx[0],sizeof(short)<<7,1,fil) != 1) goto corrupt;
|
if (kdfread(&cloudx[0],sizeof(short)<<7,1,fil) != 1) goto corrupt;
|
||||||
if (kdfread(&cloudy[0],sizeof(short)<<7,1,fil) != 1) goto corrupt;
|
if (kdfread(&cloudy[0],sizeof(short)<<7,1,fil) != 1) goto corrupt;
|
||||||
|
|
||||||
if (kdfread(&scriptptrs[0],1,MAXSCRIPTSIZE,fil) != MAXSCRIPTSIZE) goto corrupt;
|
if (kdfread(&g_ScriptSize,sizeof(g_ScriptSize),1,fil) != 1) goto corrupt;
|
||||||
if (kdfread(&script[0],4,MAXSCRIPTSIZE,fil) != MAXSCRIPTSIZE) goto corrupt;
|
scriptptrs = Bcalloc(1,g_ScriptSize * sizeof(g_ScriptSize));
|
||||||
for (i=0;i<MAXSCRIPTSIZE;i++)
|
if (kdfread(&scriptptrs[0],sizeof(scriptptrs),g_ScriptSize,fil) != g_ScriptSize) goto corrupt;
|
||||||
|
if (kdfread(&script[0],sizeof(script),g_ScriptSize,fil) != g_ScriptSize) goto corrupt;
|
||||||
|
for (i=0;i<g_ScriptSize;i++)
|
||||||
if (scriptptrs[i])
|
if (scriptptrs[i])
|
||||||
{
|
{
|
||||||
j = (long)script[i]+(long)&script[0];
|
j = (long)script[i]+(long)&script[0];
|
||||||
|
@ -287,7 +290,7 @@ int loadplayer(int spot)
|
||||||
actorLoadEventScrptr[i] = (long *)j;
|
actorLoadEventScrptr[i] = (long *)j;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kdfread(&scriptptrs[0],1,MAXSPRITES,fil) != MAXSPRITES) goto corrupt;
|
if (kdfread(&scriptptrs[0],sizeof(scriptptrs),MAXSPRITES,fil) != MAXSPRITES) goto corrupt;
|
||||||
if (kdfread(&hittype[0],sizeof(weaponhit),MAXSPRITES,fil) != MAXSPRITES) goto corrupt;
|
if (kdfread(&hittype[0],sizeof(weaponhit),MAXSPRITES,fil) != MAXSPRITES) goto corrupt;
|
||||||
|
|
||||||
for (i=0;i<MAXSPRITES;i++)
|
for (i=0;i<MAXSPRITES;i++)
|
||||||
|
@ -515,7 +518,8 @@ int saveplayer(int spot)
|
||||||
long i, j;
|
long i, j;
|
||||||
char fn[13];
|
char fn[13];
|
||||||
char mpfn[13];
|
char mpfn[13];
|
||||||
char *fnptr,scriptptrs[MAXSCRIPTSIZE];
|
char *fnptr;
|
||||||
|
long *scriptptrs;
|
||||||
FILE *fil;
|
FILE *fil;
|
||||||
long bv = BYTEVERSION;
|
long bv = BYTEVERSION;
|
||||||
|
|
||||||
|
@ -611,9 +615,11 @@ int saveplayer(int spot)
|
||||||
dfwrite(&cloudx[0],sizeof(short)<<7,1,fil);
|
dfwrite(&cloudx[0],sizeof(short)<<7,1,fil);
|
||||||
dfwrite(&cloudy[0],sizeof(short)<<7,1,fil);
|
dfwrite(&cloudy[0],sizeof(short)<<7,1,fil);
|
||||||
|
|
||||||
for (i=0;i<MAXSCRIPTSIZE;i++)
|
dfwrite(&g_ScriptSize,sizeof(g_ScriptSize),1,fil);
|
||||||
|
scriptptrs = Bcalloc(1, g_ScriptSize * sizeof(scriptptrs));
|
||||||
|
for (i=0;i<g_ScriptSize;i++)
|
||||||
{
|
{
|
||||||
if ((long)script[i] >= (long)(&script[0]) && (long)script[i] < (long)(&script[MAXSCRIPTSIZE]))
|
if ((long)script[i] >= (long)(&script[0]) && (long)script[i] < (long)(&script[g_ScriptSize]))
|
||||||
{
|
{
|
||||||
scriptptrs[i] = 1;
|
scriptptrs[i] = 1;
|
||||||
j = (long)script[i] - (long)&script[0];
|
j = (long)script[i] - (long)&script[0];
|
||||||
|
@ -622,10 +628,10 @@ int saveplayer(int spot)
|
||||||
else scriptptrs[i] = 0;
|
else scriptptrs[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dfwrite(&scriptptrs[0],1,MAXSCRIPTSIZE,fil);
|
dfwrite(&scriptptrs[0],sizeof(scriptptrs),g_ScriptSize,fil);
|
||||||
dfwrite(&script[0],4,MAXSCRIPTSIZE,fil);
|
dfwrite(&script[0],sizeof(script),g_ScriptSize,fil);
|
||||||
|
|
||||||
for (i=0;i<MAXSCRIPTSIZE;i++)
|
for (i=0;i<g_ScriptSize;i++)
|
||||||
if (scriptptrs[i])
|
if (scriptptrs[i])
|
||||||
{
|
{
|
||||||
j = script[i]+(long)&script[0];
|
j = script[i]+(long)&script[0];
|
||||||
|
@ -669,24 +675,24 @@ int saveplayer(int spot)
|
||||||
|
|
||||||
j = (long)&script[0];
|
j = (long)&script[0];
|
||||||
|
|
||||||
if (T2 >= j && T2 < (long)(&script[MAXSCRIPTSIZE]))
|
if (T2 >= j && T2 < (long)(&script[g_ScriptSize]))
|
||||||
{
|
{
|
||||||
scriptptrs[i] |= 1;
|
scriptptrs[i] |= 1;
|
||||||
T2 -= j;
|
T2 -= j;
|
||||||
}
|
}
|
||||||
if (T5 >= j && T5 < (long)(&script[MAXSCRIPTSIZE]))
|
if (T5 >= j && T5 < (long)(&script[g_ScriptSize]))
|
||||||
{
|
{
|
||||||
scriptptrs[i] |= 2;
|
scriptptrs[i] |= 2;
|
||||||
T5 -= j;
|
T5 -= j;
|
||||||
}
|
}
|
||||||
if (T6 >= j && T6 < (long)(&script[MAXSCRIPTSIZE]))
|
if (T6 >= j && T6 < (long)(&script[g_ScriptSize]))
|
||||||
{
|
{
|
||||||
scriptptrs[i] |= 4;
|
scriptptrs[i] |= 4;
|
||||||
T6 -= j;
|
T6 -= j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dfwrite(&scriptptrs[0],1,MAXSPRITES,fil);
|
dfwrite(&scriptptrs[0],sizeof(scriptptrs),MAXSPRITES,fil);
|
||||||
dfwrite(&hittype[0],sizeof(weaponhit),MAXSPRITES,fil);
|
dfwrite(&hittype[0],sizeof(weaponhit),MAXSPRITES,fil);
|
||||||
|
|
||||||
for (i=0;i<MAXSPRITES;i++)
|
for (i=0;i<MAXSPRITES;i++)
|
||||||
|
|
Loading…
Reference in a new issue