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:
terminx 2007-08-29 04:01:21 +00:00
parent 826f786dcc
commit eec7e1b2e0
6 changed files with 188 additions and 49 deletions

View file

@ -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"

View file

@ -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);
} }
/* /*

View file

@ -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);

View file

@ -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;
} }

View file

@ -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];

View file

@ -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++)