mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-13 16:07:55 +00:00
- removed fixed_t and associated utility macros from FraggleScript code.
This commit is contained in:
parent
4a79602325
commit
eac0bfeaeb
6 changed files with 34 additions and 48 deletions
|
@ -165,7 +165,7 @@ void FS_EmulateCmd(char * string)
|
||||||
else if (sc.Compare("viewheight"))
|
else if (sc.Compare("viewheight"))
|
||||||
{
|
{
|
||||||
sc.MustGetFloat();
|
sc.MustGetFloat();
|
||||||
double playerviewheight = sc.Float*FRACUNIT;
|
double playerviewheight = sc.Float;
|
||||||
for(int i=0;i<MAXPLAYERS;i++)
|
for(int i=0;i<MAXPLAYERS;i++)
|
||||||
{
|
{
|
||||||
// No, this is not correct. But this is the way Legacy WADs expect it to be handled!
|
// No, this is not correct. But this is the way Legacy WADs expect it to be handled!
|
||||||
|
|
|
@ -74,10 +74,6 @@
|
||||||
|
|
||||||
static FRandom pr_script("FScript");
|
static FRandom pr_script("FScript");
|
||||||
|
|
||||||
|
|
||||||
#define AngleToFixed(x) ((((double) x) / ((double) ANG45/45)) * FRACUNIT)
|
|
||||||
#define FixedToAngle(x) ((((double) x) / FRACUNIT) * ANG45/45)
|
|
||||||
|
|
||||||
// functions. FParser::SF_ means Script Function not, well.. heh, me
|
// functions. FParser::SF_ means Script Function not, well.. heh, me
|
||||||
|
|
||||||
/////////// actually running a function /////////////
|
/////////// actually running a function /////////////
|
||||||
|
@ -1420,9 +1416,7 @@ void FParser::SF_PointToDist(void)
|
||||||
// Doing this in floating point is actually faster with modern computers!
|
// Doing this in floating point is actually faster with modern computers!
|
||||||
double x = floatvalue(t_argv[2]) - floatvalue(t_argv[0]);
|
double x = floatvalue(t_argv[2]) - floatvalue(t_argv[0]);
|
||||||
double y = floatvalue(t_argv[3]) - floatvalue(t_argv[1]);
|
double y = floatvalue(t_argv[3]) - floatvalue(t_argv[1]);
|
||||||
|
t_return.setDouble(g_sqrt(x*x+y*y));
|
||||||
t_return.type = svt_fixed;
|
|
||||||
t_return.value.f = FLOAT2FIXED(g_sqrt(x*x+y*y));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2177,7 +2171,7 @@ void FParser::SF_OpenDoor(void)
|
||||||
if(t_argc > 2) speed = intvalue(t_argv[2]);
|
if(t_argc > 2) speed = intvalue(t_argv[2]);
|
||||||
else speed = 1; // 1= normal speed
|
else speed = 1; // 1= normal speed
|
||||||
|
|
||||||
EV_DoDoor(wait_time? DDoor::doorRaise:DDoor::doorOpen,NULL,NULL,sectag,2*FRACUNIT*clamp(speed,1,127),wait_time,0,0);
|
EV_DoDoor(wait_time ? DDoor::doorRaise : DDoor::doorOpen, NULL, NULL, sectag, 2. * clamp(speed, 1, 127), wait_time, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2202,7 +2196,7 @@ void FParser::SF_CloseDoor(void)
|
||||||
if(t_argc > 1) speed = intvalue(t_argv[1]);
|
if(t_argc > 1) speed = intvalue(t_argv[1]);
|
||||||
else speed = 1; // 1= normal speed
|
else speed = 1; // 1= normal speed
|
||||||
|
|
||||||
EV_DoDoor(DDoor::doorClose,NULL,NULL,sectag,2*FRACUNIT*clamp(speed,1,127),0,0,0);
|
EV_DoDoor(DDoor::doorClose, NULL, NULL, sectag, 2.*clamp(speed, 1, 127), 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2416,12 +2410,10 @@ void FParser::SF_SetLineTexture(void)
|
||||||
|
|
||||||
void FParser::SF_Max(void)
|
void FParser::SF_Max(void)
|
||||||
{
|
{
|
||||||
fixed_t n1, n2;
|
|
||||||
|
|
||||||
if (CheckArgs(2))
|
if (CheckArgs(2))
|
||||||
{
|
{
|
||||||
n1 = fixedvalue(t_argv[0]);
|
auto n1 = fixedvalue(t_argv[0]);
|
||||||
n2 = fixedvalue(t_argv[1]);
|
auto n2 = fixedvalue(t_argv[1]);
|
||||||
|
|
||||||
t_return.type = svt_fixed;
|
t_return.type = svt_fixed;
|
||||||
t_return.value.f = (n1 > n2) ? n1 : n2;
|
t_return.value.f = (n1 > n2) ? n1 : n2;
|
||||||
|
@ -2437,12 +2429,10 @@ void FParser::SF_Max(void)
|
||||||
|
|
||||||
void FParser::SF_Min(void)
|
void FParser::SF_Min(void)
|
||||||
{
|
{
|
||||||
fixed_t n1, n2;
|
|
||||||
|
|
||||||
if (CheckArgs(1))
|
if (CheckArgs(1))
|
||||||
{
|
{
|
||||||
n1 = fixedvalue(t_argv[0]);
|
auto n1 = fixedvalue(t_argv[0]);
|
||||||
n2 = fixedvalue(t_argv[1]);
|
auto n2 = fixedvalue(t_argv[1]);
|
||||||
|
|
||||||
t_return.type = svt_fixed;
|
t_return.type = svt_fixed;
|
||||||
t_return.value.f = (n1 < n2) ? n1 : n2;
|
t_return.value.f = (n1 < n2) ? n1 : n2;
|
||||||
|
@ -2458,11 +2448,10 @@ void FParser::SF_Min(void)
|
||||||
|
|
||||||
void FParser::SF_Abs(void)
|
void FParser::SF_Abs(void)
|
||||||
{
|
{
|
||||||
fixed_t n1;
|
|
||||||
|
|
||||||
if (CheckArgs(1))
|
if (CheckArgs(1))
|
||||||
{
|
{
|
||||||
n1 = fixedvalue(t_argv[0]);
|
auto n1 = fixedvalue(t_argv[0]);
|
||||||
|
|
||||||
t_return.type = svt_fixed;
|
t_return.type = svt_fixed;
|
||||||
t_return.value.f = (n1 < 0) ? -n1 : n1;
|
t_return.value.f = (n1 < 0) ? -n1 : n1;
|
||||||
|
@ -3877,10 +3866,9 @@ void FParser::SF_SetCorona(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int num = t_argv[0].value.i; // which corona we want to modify
|
int num = intvalue(t_argv[0]); // which corona we want to modify
|
||||||
int what = t_argv[1].value.i; // what we want to modify (type, color, offset,...)
|
int what = intvalue(t_argv[1]); // what we want to modify (type, color, offset,...)
|
||||||
int ival = t_argv[2].value.i; // the value of what we modify
|
double val = floatvalue(t_argv[2]); // the value of what we modify
|
||||||
double fval = ((double) t_argv[2].value.f / FRACUNIT);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
switch (what)
|
switch (what)
|
||||||
|
|
|
@ -384,9 +384,9 @@ void FParser::OPdivide(svalue_t &result, int start, int n, int stop)
|
||||||
// haleyjd: 8-17
|
// haleyjd: 8-17
|
||||||
if(left.type == svt_fixed || right.type == svt_fixed)
|
if(left.type == svt_fixed || right.type == svt_fixed)
|
||||||
{
|
{
|
||||||
fixed_t fr;
|
auto fr = fixedvalue(right);
|
||||||
|
|
||||||
if((fr = fixedvalue(right)) == 0)
|
if(fr == 0)
|
||||||
script_error("divide by zero\n");
|
script_error("divide by zero\n");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -396,9 +396,9 @@ void FParser::OPdivide(svalue_t &result, int start, int n, int stop)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int ir;
|
auto ir = intvalue(right);
|
||||||
|
|
||||||
if(!(ir = intvalue(right)))
|
if(!ir)
|
||||||
script_error("divide by zero\n");
|
script_error("divide by zero\n");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -508,8 +508,7 @@ void FParser::OPincrement(svalue_t &result, int start, int n, int stop)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result.value.f = fixedvalue(result) + FRACUNIT;
|
result.setDouble(floatvalue(result)+1);
|
||||||
result.type = svt_fixed;
|
|
||||||
var->SetValue (result);
|
var->SetValue (result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -534,8 +533,7 @@ void FParser::OPincrement(svalue_t &result, int start, int n, int stop)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newvalue.type = svt_fixed;
|
newvalue.setDouble(floatvalue(result)+1);
|
||||||
newvalue.value.f = fixedvalue(result) + FRACUNIT;
|
|
||||||
var->SetValue (newvalue);
|
var->SetValue (newvalue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -573,7 +571,7 @@ void FParser::OPdecrement(svalue_t &result, int start, int n, int stop)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result.value.f = fixedvalue(result) - FRACUNIT;
|
result.setDouble(floatvalue(result)-1);
|
||||||
result.type = svt_fixed;
|
result.type = svt_fixed;
|
||||||
var->SetValue (result);
|
var->SetValue (result);
|
||||||
}
|
}
|
||||||
|
@ -599,8 +597,7 @@ void FParser::OPdecrement(svalue_t &result, int start, int n, int stop)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newvalue.type = svt_fixed;
|
newvalue.setDouble(floatvalue(result)-1);
|
||||||
newvalue.value.f = fixedvalue(result) - FRACUNIT;
|
|
||||||
var->SetValue (newvalue);
|
var->SetValue (newvalue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -567,8 +567,7 @@ void FParser::SimpleEvaluate(svalue_t &returnvar, int n)
|
||||||
case number:
|
case number:
|
||||||
if(strchr(Tokens[n], '.'))
|
if(strchr(Tokens[n], '.'))
|
||||||
{
|
{
|
||||||
returnvar.type = svt_fixed;
|
returnvar.setDouble(atof(Tokens[n]));
|
||||||
returnvar.value.f = (fixed_t)(atof(Tokens[n]) * FRACUNIT);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -82,15 +82,17 @@ enum
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
typedef int fsfix;
|
||||||
|
|
||||||
struct svalue_t
|
struct svalue_t
|
||||||
{
|
{
|
||||||
int type;
|
int type;
|
||||||
|
|
||||||
FString string;
|
FString string;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
fixed_t f; // haleyjd: 8-17
|
fsfix f; // haleyjd: 8-17
|
||||||
AActor *mobj;
|
AActor *mobj;
|
||||||
} value;
|
} value;
|
||||||
|
|
||||||
|
@ -113,7 +115,7 @@ struct svalue_t
|
||||||
type = svt_int;
|
type = svt_int;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setFixed(fixed_t fp)
|
void setFixed(fsfix fp)
|
||||||
{
|
{
|
||||||
value.f = fp;
|
value.f = fp;
|
||||||
type = svt_fixed;
|
type = svt_fixed;
|
||||||
|
@ -121,13 +123,13 @@ struct svalue_t
|
||||||
|
|
||||||
void setDouble(double dp)
|
void setDouble(double dp)
|
||||||
{
|
{
|
||||||
value.f = FLOAT2FIXED(dp);
|
value.f = fsfix(dp/65536);
|
||||||
type = svt_fixed;
|
type = svt_fixed;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int intvalue(const svalue_t & v);
|
int intvalue(const svalue_t & v);
|
||||||
fixed_t fixedvalue(const svalue_t & v);
|
fsfix fixedvalue(const svalue_t & v);
|
||||||
double floatvalue(const svalue_t & v);
|
double floatvalue(const svalue_t & v);
|
||||||
const char *stringvalue(const svalue_t & v);
|
const char *stringvalue(const svalue_t & v);
|
||||||
AActor *actorvalue(const svalue_t &svalue);
|
AActor *actorvalue(const svalue_t &svalue);
|
||||||
|
@ -171,7 +173,7 @@ public:
|
||||||
union value_t
|
union value_t
|
||||||
{
|
{
|
||||||
SDWORD i;
|
SDWORD i;
|
||||||
fixed_t fixed; // haleyjd: fixed-point
|
fsfix fixed; // haleyjd: fixed-point
|
||||||
|
|
||||||
// the following are only used in the global script so we don't need to bother with them
|
// the following are only used in the global script so we don't need to bother with them
|
||||||
// when serializing variables.
|
// when serializing variables.
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
int intvalue(const svalue_t &v)
|
int intvalue(const svalue_t &v)
|
||||||
{
|
{
|
||||||
return (v.type == svt_string ? atoi(v.string) :
|
return (v.type == svt_string ? atoi(v.string) :
|
||||||
v.type == svt_fixed ? (int)(v.value.f / FRACUNIT) :
|
v.type == svt_fixed ? (int)(v.value.f / 65536.) :
|
||||||
v.type == svt_mobj ? -1 : v.value.i );
|
v.type == svt_mobj ? -1 : v.value.i );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,11 +76,11 @@ int intvalue(const svalue_t &v)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
fixed_t fixedvalue(const svalue_t &v)
|
fsfix fixedvalue(const svalue_t &v)
|
||||||
{
|
{
|
||||||
return (v.type == svt_fixed ? v.value.f :
|
return (v.type == svt_fixed ? v.value.f :
|
||||||
v.type == svt_string ? (fixed_t)(atof(v.string) * FRACUNIT) :
|
v.type == svt_string ? (fsfix)(atof(v.string) * 65536.) :
|
||||||
v.type == svt_mobj ? -1*FRACUNIT : v.value.i * FRACUNIT );
|
v.type == svt_mobj ? -65536 : v.value.i * 65536 );
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -93,7 +93,7 @@ double floatvalue(const svalue_t &v)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
v.type == svt_string ? atof(v.string) :
|
v.type == svt_string ? atof(v.string) :
|
||||||
v.type == svt_fixed ? FIXED2DBL(v.value.f) :
|
v.type == svt_fixed ? v.value.f * 65536. :
|
||||||
v.type == svt_mobj ? -1. : (double)v.value.i;
|
v.type == svt_mobj ? -1. : (double)v.value.i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ const char *stringvalue(const svalue_t & v)
|
||||||
|
|
||||||
case svt_fixed:
|
case svt_fixed:
|
||||||
{
|
{
|
||||||
double val = ((double)v.value.f) / FRACUNIT;
|
double val = v.value.f / 65536.;
|
||||||
mysnprintf(buffer, countof(buffer), "%g", val);
|
mysnprintf(buffer, countof(buffer), "%g", val);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue