From d25455736af2d9826272745d075d08ae58fa3ccd Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 12 Feb 2016 01:21:29 +0100 Subject: [PATCH] - store floating point parameters for DECORATE properties as doubles. --- src/thingdef/thingdef.h | 9 ++++++--- src/thingdef/thingdef_parse.cpp | 2 +- src/thingdef/thingdef_properties.cpp | 10 +++++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/thingdef/thingdef.h b/src/thingdef/thingdef.h index d8c13174a..aa6a54445 100644 --- a/src/thingdef/thingdef.h +++ b/src/thingdef/thingdef.h @@ -258,7 +258,7 @@ enum EDefinitionType union FPropParam { int i; - float f; + double d; const char *s; FxExpression *exp; }; @@ -317,10 +317,13 @@ int MatchString (const char *in, const char **strings); int var = params[(no)+1].i; #define PROP_FLOAT_PARM(var, no) \ - float var = params[(no)+1].f; + float var = float(params[(no)+1].d); + +#define PROP_DOUBLE_PARM(var, no) \ + double var = params[(no)+1].d; #define PROP_FIXED_PARM(var, no) \ - fixed_t var = fixed_t(params[(no)+1].f * FRACUNIT); + fixed_t var = FLOAT2FIXED(params[(no)+1].d); #define PROP_COLOR_PARM(var, no) \ int var = params[(no)+1].i== 0? params[(no)+2].i : V_GetColor(NULL, params[(no)+2].s); diff --git a/src/thingdef/thingdef_parse.cpp b/src/thingdef/thingdef_parse.cpp index 2cd271ad5..93a139850 100644 --- a/src/thingdef/thingdef_parse.cpp +++ b/src/thingdef/thingdef_parse.cpp @@ -825,7 +825,7 @@ static bool ParsePropertyParams(FScanner &sc, FPropertyInfo *prop, AActor *defau case 'F': sc.MustGetFloat(); - conv.f = float(sc.Float); + conv.d = sc.Float; break; case 'Z': // an optional string. Does not allow any numerical value. diff --git a/src/thingdef/thingdef_properties.cpp b/src/thingdef/thingdef_properties.cpp index 57de3684f..2d69c0eb8 100644 --- a/src/thingdef/thingdef_properties.cpp +++ b/src/thingdef/thingdef_properties.cpp @@ -2174,7 +2174,7 @@ DEFINE_CLASS_PROPERTY_PREFIX(powerup, color, C_f, Inventory) } if (PROP_PARM_COUNT > 2) { - PROP_FLOAT_PARM(falpha, 2); + PROP_DOUBLE_PARM(falpha, 2); alpha=int(falpha*255); } else alpha = 255/3; @@ -2718,17 +2718,17 @@ DEFINE_CLASS_PROPERTY_PREFIX(player, damagescreencolor, Cfs, PlayerPawn) } else if (PROP_PARM_COUNT < 4) { - PROP_FLOAT_PARM(a, 2); + PROP_DOUBLE_PARM(a, 2); - color.a = BYTE(255 * clamp(a, 0.f, 1.f)); + color.a = BYTE(255 * clamp(a, 0.f, 1.f)); defaults->DamageFade = color; } else { - PROP_FLOAT_PARM(a, 2); + PROP_DOUBLE_PARM(a, 2); PROP_STRING_PARM(type, 3); - color.a = BYTE(255 * clamp(a, 0.f, 1.f)); + color.a = BYTE(255 * clamp(a, 0.f, 1.f)); assert(info->IsKindOf(RUNTIME_CLASS(PClassPlayerPawn))); static_cast(info)->PainFlashes.Insert(type, color); }