This rips all of the camera control shit out of userdefs and re-implements it as a bunch of pointer gamevars. This required adding in support for vars which are pointers to chars and short ints. It appears to work properly, without overwriting anything that happens to be adjacent (in memory) to the values being set. We'll see.

git-svn-id: https://svn.eduke32.com/eduke32@502 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2007-02-16 06:59:05 +00:00
parent b436f4fb71
commit 7da6eb3f8e
7 changed files with 84 additions and 268 deletions

View file

@ -862,6 +862,10 @@ void CONFIG_WriteSetup(void)
SCRIPT_PutNumber(scripthandle, "Sound Setup", "FXVolume",FXVolume,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "MusicToggle",MusicToggle,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "MusicVolume",MusicVolume,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "NumVoices",NumVoices,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "NumChannels",NumChannels,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "NumBits",NumBits,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "MixRate",MixRate,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "ReverseStereo",ReverseStereo,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "SoundToggle",SoundToggle,false,false);
SCRIPT_PutNumber(scripthandle, "Sound Setup", "VoiceToggle",VoiceToggle,false,false);

View file

@ -727,17 +727,19 @@ enum events {
enum gamevarflags {
MAXGAMEVARS = 2048,
MAXVARLABEL = 26,
GAMEVAR_FLAG_NORMAL = 0, // normal
GAMEVAR_FLAG_PERPLAYER = 1, // per-player variable
GAMEVAR_FLAG_PERACTOR = 2, // per-actor variable
GAMEVAR_FLAG_NORMAL = 0, // normal
GAMEVAR_FLAG_PERPLAYER = 1, // per-player variable
GAMEVAR_FLAG_PERACTOR = 2, // per-actor variable
GAMEVAR_FLAG_USER_MASK = 3,
GAMEVAR_FLAG_DEFAULT = 256, // allow override
GAMEVAR_FLAG_SECRET = 512, // don't dump...
GAMEVAR_FLAG_NODEFAULT = 1024, // don't reset on actor spawn
GAMEVAR_FLAG_SYSTEM = 2048, // cannot change mode flags...(only default value)
GAMEVAR_FLAG_READONLY = 4096, // values are read-only (no setvar allowed)
GAMEVAR_FLAG_PLONG = 8192, // plValue is a pointer to a long
GAMEVAR_FLAG_SYNCCHECK = 16384 // check event sync when translating
GAMEVAR_FLAG_DEFAULT = 256, // allow override
GAMEVAR_FLAG_SECRET = 512, // don't dump...
GAMEVAR_FLAG_NODEFAULT = 1024, // don't reset on actor spawn
GAMEVAR_FLAG_SYSTEM = 2048, // cannot change mode flags...(only default value)
GAMEVAR_FLAG_READONLY = 4096, // values are read-only (no setvar allowed)
GAMEVAR_FLAG_PLONG = 8192, // plValue is a pointer to a long
GAMEVAR_FLAG_SYNCCHECK = 16384, // check event sync when translating
GAMEVAR_FLAG_PSHORT = 32768, // plValue is a pointer to a short
GAMEVAR_FLAG_PCHAR = 65536 // plValue is a pointer to a char
};
typedef struct {

View file

@ -179,7 +179,7 @@ inline void setstatusbarscale(long sc)
static inline long sbarx(long x)
{
if (ud.screen_size == 4 || ud.statusbarmode == 1) return scale(x<<16,ud.statusbarscale,100);
if (ud.screen_size == 4 /*|| ud.statusbarmode == 1*/) return scale(x<<16,ud.statusbarscale,100);
return (((320l<<16) - scale(320l<<16,ud.statusbarscale,100)) >> 1) + scale(x<<16,ud.statusbarscale,100);
}
@ -209,9 +209,9 @@ static void patchstatusbar(long x1, long y1, long x2, long y2)
clofx = (xdim - scale(xdim,ud.statusbarscale,100)) >> 1;
clofy = (ydim - scale(ydim,ud.statusbarscale,100));
if (ud.statusbarmode == 0)
// if (ud.statusbarmode == 0)
rotatesprite(tx,ty,scl,0,BOTTOMSTATUSBAR,4,0,10+16+64,clx1+clofx,cly1+clofy,clx2+clofx-1,cly2+clofy-1);
else rotatesprite(tx,ty,scl,0,BOTTOMSTATUSBAR,4,0,10+16+64,clx1,cly1,clx2+clofx-1,cly2+clofy-1);
// else rotatesprite(tx,ty,scl,0,BOTTOMSTATUSBAR,4,0,10+16+64,clx1,cly1,clx2+clofx-1,cly2+clofy-1);
}
void setgamepalette(struct player_struct *player, char *pal, int set)
@ -3567,7 +3567,7 @@ void drawbackground(void)
if (ps[myconnectindex].gm & MODE_GAME || ud.recstat == 2)
//if (ud.recstat == 0 || ud.recstat == 1 || (ud.recstat == 2 && ud.reccnt > 0)) // JBF 20040717
{
if (ud.screen_size == 8)
if (ud.screen_size == 8 && ud.statusbarmode == 0)
y1 = scale(ydim,200-scale(tilesizy[BOTTOMSTATUSBAR],ud.statusbarscale,100),200);
else if (gametype_flags[ud.coop] & GAMETYPE_FLAG_FRAGBAR)
{
@ -3615,7 +3615,7 @@ void drawbackground(void)
}
// draw in the bits to the left and right of the non-fullsize status bar
if (ud.statusbarscale < 100)
if (ud.statusbarscale < 100 && ud.screen_size >= 8 && ud.statusbarmode == 0)
{
y1 = y2;
x2 = (xdim - scale(xdim,ud.statusbarscale,100)) >> 1;

View file

@ -812,35 +812,6 @@ LABELS userdefslabels[]=
{ "automsg", USERDEFS_AUTOMSG, 0, 0 },
{ "idplayers", USERDEFS_IDPLAYERS, 0, 0 },
{ "team", USERDEFS_TEAM, 0, 0 },
#if 1
{ "myx", USERDEFS_MYX, 0, 0 },
{ "omyx", USERDEFS_OMYX, 0, 0 },
{ "myxvel", USERDEFS_MYXVEL, 0, 0 },
{ "myy", USERDEFS_MYY, 0, 0 },
{ "omyy", USERDEFS_OMYY, 0, 0 },
{ "myyvel", USERDEFS_MYYVEL, 0, 0 },
{ "myz", USERDEFS_MYZ, 0, 0 },
{ "omyz", USERDEFS_OMYZ, 0, 0 },
{ "myzvel", USERDEFS_MYZVEL, 0, 0 },
{ "myhoriz", USERDEFS_MYHORIZ, 0, 0 },
{ "omyhoriz", USERDEFS_OMYHORIZ, 0, 0 },
{ "myhorizoff", USERDEFS_MYHORIZOFF, 0, 0 },
{ "omyhorizoff", USERDEFS_OMYHORIZOFF, 0, 0 },
{ "myang", USERDEFS_MYANG, 0, 0 },
{ "omyang", USERDEFS_OMYANG, 0, 0 },
{ "mycursectnum", USERDEFS_MYCURSECTNUM, 0, 0 },
{ "myjumpingcounter", USERDEFS_MYJUMPINGCOUNTER, 0, 0 },
{ "myjumpingtoggle", USERDEFS_MYJUMPINGTOGGLE, 0, 0 },
{ "myonground", USERDEFS_MYONGROUND, 0, 0 },
{ "myhardlanding", USERDEFS_MYHARDLANDING, 0, 0 },
{ "myreturntocenter", USERDEFS_MYRETURNTOCENTER, 0, 0 },
#endif
{ "camerax", USERDEFS_CAMERAX, 0, 0 },
{ "cameray", USERDEFS_CAMERAY, 0, 0 },
{ "cameraz", USERDEFS_CAMERAZ, 0, 0 },
{ "cameraang", USERDEFS_CAMERAANG, 0, 0 },
{ "camerasect", USERDEFS_CAMERASECT, 0, 0 },
{ "camerahoriz", USERDEFS_CAMERAHORIZ, 0, 0 },
{ "", -1, 0, 0 } // END OF LIST
};

View file

@ -314,37 +314,7 @@ enum userdefslabels {
USERDEFS_AUTOVOTE,
USERDEFS_AUTOMSG,
USERDEFS_IDPLAYERS,
USERDEFS_TEAM,
// this stuff isn't really userdef stuff, but getuserdef/setuserdef is already set up for what I want to do
#if 1
USERDEFS_MYX,
USERDEFS_OMYX,
USERDEFS_MYXVEL,
USERDEFS_MYY,
USERDEFS_OMYY,
USERDEFS_MYYVEL,
USERDEFS_MYZ,
USERDEFS_OMYZ,
USERDEFS_MYZVEL,
USERDEFS_MYHORIZ,
USERDEFS_OMYHORIZ,
USERDEFS_MYHORIZOFF,
USERDEFS_OMYHORIZOFF,
USERDEFS_MYANG,
USERDEFS_OMYANG,
USERDEFS_MYCURSECTNUM,
USERDEFS_MYJUMPINGCOUNTER,
USERDEFS_MYJUMPINGTOGGLE,
USERDEFS_MYONGROUND,
USERDEFS_MYHARDLANDING,
USERDEFS_MYRETURNTOCENTER,
#endif
USERDEFS_CAMERAX,
USERDEFS_CAMERAY,
USERDEFS_CAMERAZ,
USERDEFS_CAMERAANG,
USERDEFS_CAMERASECT,
USERDEFS_CAMERAHORIZ,
USERDEFS_TEAM
};
enum sectorlabels {

View file

@ -665,197 +665,6 @@ static void DoUserDef(int iSet, int lLabelID, int lVar2)
SetGameVarID(lVar2, ud.team, g_i, g_p);
break;
#if 1
case USERDEFS_MYX:
if (iSet)
myx = lValue;
else
SetGameVarID(lVar2, myx, g_i, g_p);
break;
case USERDEFS_OMYX:
if (iSet)
omyx = lValue;
else
SetGameVarID(lVar2, omyx, g_i, g_p);
break;
case USERDEFS_MYXVEL:
if (iSet)
myxvel = lValue;
else
SetGameVarID(lVar2, myxvel, g_i, g_p);
break;
case USERDEFS_MYY:
if (iSet)
myy = lValue;
else
SetGameVarID(lVar2, myy, g_i, g_p);
break;
case USERDEFS_OMYY:
if (iSet)
omyy = lValue;
else
SetGameVarID(lVar2, omyy, g_i, g_p);
break;
case USERDEFS_MYYVEL:
if (iSet)
myyvel = lValue;
else
SetGameVarID(lVar2, myyvel, g_i, g_p);
break;
case USERDEFS_MYZ:
if (iSet)
myx = lValue;
else
SetGameVarID(lVar2, myx, g_i, g_p);
break;
case USERDEFS_OMYZ:
if (iSet)
omyz = lValue;
else
SetGameVarID(lVar2, omyz, g_i, g_p);
break;
case USERDEFS_MYZVEL:
if (iSet)
myzvel = lValue;
else
SetGameVarID(lVar2, myzvel, g_i, g_p);
break;
case USERDEFS_MYHORIZ:
if (iSet)
myhoriz = lValue;
else
SetGameVarID(lVar2, myhoriz, g_i, g_p);
break;
case USERDEFS_OMYHORIZ:
if (iSet)
omyhoriz = lValue;
else
SetGameVarID(lVar2, omyhoriz, g_i, g_p);
break;
case USERDEFS_MYHORIZOFF:
if (iSet)
myhorizoff = lValue;
else
SetGameVarID(lVar2, myhorizoff, g_i, g_p);
break;
case USERDEFS_OMYHORIZOFF:
if (iSet)
omyhorizoff = lValue;
else
SetGameVarID(lVar2, omyhorizoff, g_i, g_p);
break;
case USERDEFS_MYANG:
if (iSet)
myang = lValue;
else
SetGameVarID(lVar2, myang, g_i, g_p);
break;
case USERDEFS_OMYANG:
if (iSet)
omyang = lValue;
else
SetGameVarID(lVar2, omyang, g_i, g_p);
break;
case USERDEFS_MYCURSECTNUM:
if (iSet)
mycursectnum = lValue;
else
SetGameVarID(lVar2, mycursectnum, g_i, g_p);
break;
case USERDEFS_MYJUMPINGCOUNTER:
if (iSet)
myjumpingcounter = lValue;
else
SetGameVarID(lVar2, myjumpingcounter, g_i, g_p);
break;
case USERDEFS_MYJUMPINGTOGGLE:
if (iSet)
myjumpingtoggle = lValue;
else
SetGameVarID(lVar2, myjumpingtoggle, g_i, g_p);
break;
case USERDEFS_MYONGROUND:
if (iSet)
myonground = lValue;
else
SetGameVarID(lVar2, myonground, g_i, g_p);
break;
case USERDEFS_MYHARDLANDING:
if (iSet)
myhardlanding = lValue;
else
SetGameVarID(lVar2, myhardlanding, g_i, g_p);
break;
case USERDEFS_MYRETURNTOCENTER:
if (iSet)
myreturntocenter = lValue;
else
SetGameVarID(lVar2, myreturntocenter, g_i, g_p);
break;
#endif
case USERDEFS_CAMERAX:
if (iSet)
ud.camerax = lValue;
else
SetGameVarID(lVar2, ud.camerax, g_i, g_p);
break;
case USERDEFS_CAMERAY:
if (iSet)
ud.cameray = lValue;
else
SetGameVarID(lVar2, ud.cameray, g_i, g_p);
break;
case USERDEFS_CAMERAZ:
if (iSet)
ud.cameraz = lValue;
else
SetGameVarID(lVar2, ud.cameraz, g_i, g_p);
break;
case USERDEFS_CAMERAANG:
if (iSet)
ud.cameraang = lValue;
else
SetGameVarID(lVar2, ud.cameraang, g_i, g_p);
break;
case USERDEFS_CAMERASECT:
if (iSet)
ud.camerasect = lValue;
else
SetGameVarID(lVar2, ud.camerasect, g_i, g_p);
break;
case USERDEFS_CAMERAHORIZ:
if (iSet)
ud.camerahoriz = lValue;
else
SetGameVarID(lVar2, ud.camerahoriz, g_i, g_p);
break;
default:
break;
}

View file

@ -236,6 +236,10 @@ void DumpGameVars(FILE *fp)
if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_PLONG))
fprintf(fp,"%ld",*((long*)aGameVars[i].lValue));
else if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_PSHORT))
fprintf(fp,"%d",*((short*)aGameVars[i].lValue));
else if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_PCHAR))
fprintf(fp,"%d",*((char*)aGameVars[i].lValue));
else
fprintf(fp,"%ld",aGameVars[i].lValue);
if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_PERPLAYER))
@ -247,7 +251,7 @@ void DumpGameVars(FILE *fp)
fprintf(fp," // ");
if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_SYSTEM))
fprintf(fp," (system)");
if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_PLONG))
if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_PLONG|GAMEVAR_FLAG_PSHORT|GAMEVAR_FLAG_PCHAR))
fprintf(fp," (pointer)");
if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_READONLY))
fprintf(fp," (read only)");
@ -295,7 +299,7 @@ int AddGameVar(const char *pszLabel, long lValue, unsigned long dwFlags)
if (Bstrcmp(pszLabel,aGameVars[i].szLabel) == 0)
{
// found it...
if (aGameVars[i].dwFlags & GAMEVAR_FLAG_PLONG)
if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_PLONG|GAMEVAR_FLAG_PSHORT|GAMEVAR_FLAG_PCHAR))
{
// warning++;
// initprintf("%s:%ld: warning: Internal gamevar '%s' cannot be redefined.\n",compilefile,line_number,label+(labelcnt<<6));
@ -470,6 +474,18 @@ long GetGameVarID(int id, int iActor, int iPlayer)
return(*((long*)aGameVars[id].lValue));
}
if (aGameVars[id].dwFlags & GAMEVAR_FLAG_PSHORT)
{
if (inv) return(-(*((short*)aGameVars[id].lValue)));
return(*((short*)aGameVars[id].lValue));
}
if (aGameVars[id].dwFlags & GAMEVAR_FLAG_PCHAR)
{
if (inv) return(-(*((char*)aGameVars[id].lValue)));
return(*((char*)aGameVars[id].lValue));
}
if (inv) return(-aGameVars[id].lValue);
return (aGameVars[id].lValue);
}
@ -514,6 +530,21 @@ void SetGameVarID(int id, long lValue, int iActor, int iPlayer)
return;
}
if (aGameVars[id].dwFlags & GAMEVAR_FLAG_PSHORT)
{
// set the value at pointer
*((short*)aGameVars[id].lValue)=(short)lValue;
return;
}
if (aGameVars[id].dwFlags & GAMEVAR_FLAG_PCHAR)
{
// set the value at pointer
*((char*)aGameVars[id].lValue)=(char)lValue;
return;
}
aGameVars[id].lValue=lValue;
}
@ -1123,6 +1154,35 @@ static void AddSystemVars()
AddGameVar("framerate",(long)&framerate, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_READONLY | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("CLIPMASK0", CLIPMASK0, GAMEVAR_FLAG_SYSTEM|GAMEVAR_FLAG_READONLY);
AddGameVar("CLIPMASK1", CLIPMASK1, GAMEVAR_FLAG_SYSTEM|GAMEVAR_FLAG_READONLY);
AddGameVar("camerax",(long)&ud.camerax, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("cameray",(long)&ud.cameray, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("cameraz",(long)&ud.cameraz, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("cameraang",(long)&ud.cameraang, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("camerahoriz",(long)&ud.camerahoriz, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("camerasect",(long)&ud.camerasect, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myx",(long)&myx, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myy",(long)&myy, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myz",(long)&myz, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("omyx",(long)&omyx, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("omyy",(long)&omyy, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("omyz",(long)&omyz, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myxvel",(long)&myxvel, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myyvel",(long)&myyvel, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myzvel",(long)&myzvel, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myhoriz",(long)&myhoriz, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myhorizoff",(long)&myhorizoff, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("omyhoriz",(long)&omyhoriz, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("omyhorizoff",(long)&omyhorizoff, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myang",(long)&myang, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("omyang",(long)&omyang, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("mycursectnum",(long)&mycursectnum, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myjumpingcounter",(long)&myjumpingcounter, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PSHORT | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myjumpingtoggle",(long)&myjumpingtoggle, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PCHAR | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myonground",(long)&myonground, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PCHAR | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myhardlanding",(long)&myhardlanding, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PCHAR | GAMEVAR_FLAG_SYNCCHECK);
AddGameVar("myreturntocenter",(long)&myreturntocenter, GAMEVAR_FLAG_SYSTEM | GAMEVAR_FLAG_PCHAR | GAMEVAR_FLAG_SYNCCHECK);
}
void InitGameVars(void)