mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
- optionally allow passing a script position object to V_GetColor and subfunctions for better error output. Implemented this for all occurences where this info was available.
This commit is contained in:
parent
1fc90b1ba9
commit
21e3aba1c7
15 changed files with 51 additions and 54 deletions
|
@ -15,6 +15,7 @@
|
||||||
#include "cmdlib.h"
|
#include "cmdlib.h"
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
#include "v_text.h"
|
#include "v_text.h"
|
||||||
|
#include "sc_man.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@ -324,7 +325,7 @@ FString ExtractFileBase (const char *path, bool include_extension)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
int ParseHex (const char *hex)
|
int ParseHex (const char *hex, FScriptPosition *sc)
|
||||||
{
|
{
|
||||||
const char *str;
|
const char *str;
|
||||||
int num;
|
int num;
|
||||||
|
@ -342,7 +343,8 @@ int ParseHex (const char *hex)
|
||||||
else if (*str >= 'A' && *str <= 'F')
|
else if (*str >= 'A' && *str <= 'F')
|
||||||
num += 10 + *str-'A';
|
num += 10 + *str-'A';
|
||||||
else {
|
else {
|
||||||
Printf ("Bad hex number: %s\n",hex);
|
if (!sc) Printf ("Bad hex number: %s\n",hex);
|
||||||
|
else sc->Message(MSG_WARNING, "Bad hex number: %s", hex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
str++;
|
str++;
|
||||||
|
@ -351,21 +353,6 @@ int ParseHex (const char *hex)
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// ParseNum
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
int ParseNum (const char *str)
|
|
||||||
{
|
|
||||||
if (str[0] == '$')
|
|
||||||
return ParseHex (str+1);
|
|
||||||
if (str[0] == '0' && str[1] == 'x')
|
|
||||||
return ParseHex (str+2);
|
|
||||||
return atol (str);
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// IsNum
|
// IsNum
|
||||||
|
|
|
@ -33,8 +33,8 @@ void DefaultExtension (FString &path, const char *extension);
|
||||||
FString ExtractFilePath (const char *path);
|
FString ExtractFilePath (const char *path);
|
||||||
FString ExtractFileBase (const char *path, bool keep_extension=false);
|
FString ExtractFileBase (const char *path, bool keep_extension=false);
|
||||||
|
|
||||||
int ParseHex (const char *str);
|
struct FScriptPosition;
|
||||||
int ParseNum (const char *str);
|
int ParseHex(const char *str, FScriptPosition *sc = nullptr);
|
||||||
bool IsNum (const char *str); // [RH] added
|
bool IsNum (const char *str); // [RH] added
|
||||||
|
|
||||||
char *copystring(const char *s);
|
char *copystring(const char *s);
|
||||||
|
|
|
@ -193,10 +193,10 @@ void FIWadManager::ParseIWadInfo(const char *fn, const char *data, int datasize)
|
||||||
{
|
{
|
||||||
sc.MustGetStringName("=");
|
sc.MustGetStringName("=");
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
iwad->FgColor = V_GetColor(NULL, sc.String);
|
iwad->FgColor = V_GetColor(NULL, sc);
|
||||||
sc.MustGetStringName(",");
|
sc.MustGetStringName(",");
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
iwad->BkColor = V_GetColor(NULL, sc.String);
|
iwad->BkColor = V_GetColor(NULL, sc);
|
||||||
}
|
}
|
||||||
else if (sc.Compare("Load"))
|
else if (sc.Compare("Load"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1844,10 +1844,10 @@ static FString ParseGameInfo(TArray<FString> &pwads, const char *fn, const char
|
||||||
else if (!nextKey.CompareNoCase("STARTUPCOLORS"))
|
else if (!nextKey.CompareNoCase("STARTUPCOLORS"))
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
DoomStartupInfo.FgColor = V_GetColor(NULL, sc.String);
|
DoomStartupInfo.FgColor = V_GetColor(NULL, sc);
|
||||||
sc.MustGetStringName(",");
|
sc.MustGetStringName(",");
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
DoomStartupInfo.BkColor = V_GetColor(NULL, sc.String);
|
DoomStartupInfo.BkColor = V_GetColor(NULL, sc);
|
||||||
}
|
}
|
||||||
else if (!nextKey.CompareNoCase("STARTUPTYPE"))
|
else if (!nextKey.CompareNoCase("STARTUPTYPE"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -532,7 +532,7 @@ void FDecalLib::ParseDecal (FScanner &sc)
|
||||||
sc.MustGetString ();
|
sc.MustGetString ();
|
||||||
if (!sc.Compare("BloodDefault"))
|
if (!sc.Compare("BloodDefault"))
|
||||||
{
|
{
|
||||||
newdecal.ShadeColor = V_GetColor (NULL, sc.String);
|
newdecal.ShadeColor = V_GetColor (NULL, sc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -547,8 +547,8 @@ void FDecalLib::ParseDecal (FScanner &sc)
|
||||||
case DECAL_COLORS:
|
case DECAL_COLORS:
|
||||||
DWORD startcolor, endcolor;
|
DWORD startcolor, endcolor;
|
||||||
|
|
||||||
sc.MustGetString (); startcolor = V_GetColor (NULL, sc.String);
|
sc.MustGetString (); startcolor = V_GetColor (NULL, sc);
|
||||||
sc.MustGetString (); endcolor = V_GetColor (NULL, sc.String);
|
sc.MustGetString (); endcolor = V_GetColor (NULL, sc);
|
||||||
newdecal.Translation = GenerateTranslation (startcolor, endcolor)->Index;
|
newdecal.Translation = GenerateTranslation (startcolor, endcolor)->Index;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -819,7 +819,7 @@ void FDecalLib::ParseColorchanger (FScanner &sc)
|
||||||
else if (sc.Compare ("Color"))
|
else if (sc.Compare ("Color"))
|
||||||
{
|
{
|
||||||
sc.MustGetString ();
|
sc.MustGetString ();
|
||||||
goal = V_GetColor (NULL, sc.String);
|
goal = V_GetColor (NULL, sc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -860,14 +860,14 @@ DEFINE_MAP_OPTION(fade, true)
|
||||||
{
|
{
|
||||||
parse.ParseAssign();
|
parse.ParseAssign();
|
||||||
parse.sc.MustGetString();
|
parse.sc.MustGetString();
|
||||||
info->fadeto = V_GetColor(NULL, parse.sc.String);
|
info->fadeto = V_GetColor(NULL, parse.sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MAP_OPTION(outsidefog, true)
|
DEFINE_MAP_OPTION(outsidefog, true)
|
||||||
{
|
{
|
||||||
parse.ParseAssign();
|
parse.ParseAssign();
|
||||||
parse.sc.MustGetString();
|
parse.sc.MustGetString();
|
||||||
info->outsidefog = V_GetColor(NULL, parse.sc.String);
|
info->outsidefog = V_GetColor(NULL, parse.sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MAP_OPTION(titlepatch, true)
|
DEFINE_MAP_OPTION(titlepatch, true)
|
||||||
|
|
|
@ -400,10 +400,10 @@ static void ParseListMenuBody(FScanner &sc, FListMenuDescriptor *desc)
|
||||||
int y = sc.Number;
|
int y = sc.Number;
|
||||||
sc.MustGetStringName(",");
|
sc.MustGetStringName(",");
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
PalEntry c1 = V_GetColor(NULL, sc.String);
|
PalEntry c1 = V_GetColor(NULL, sc);
|
||||||
sc.MustGetStringName(",");
|
sc.MustGetStringName(",");
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
PalEntry c2 = V_GetColor(NULL, sc.String);
|
PalEntry c2 = V_GetColor(NULL, sc);
|
||||||
if (sc.CheckString(","))
|
if (sc.CheckString(","))
|
||||||
{
|
{
|
||||||
sc.MustGetNumber();
|
sc.MustGetNumber();
|
||||||
|
|
|
@ -1256,7 +1256,7 @@ FxExpression *FxColorCast::Resolve(FCompileContext &ctx)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FxExpression *x = new FxConstant(V_GetColor(nullptr, constval.GetString()), ScriptPosition);
|
FxExpression *x = new FxConstant(V_GetColor(nullptr, constval.GetString(), &ScriptPosition), ScriptPosition);
|
||||||
delete this;
|
delete this;
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,7 +165,7 @@ FxExpression *ParseParameter(FScanner &sc, PClassActor *cls, PType *type, bool c
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int c = V_GetColor (NULL, sc.String);
|
int c = V_GetColor (NULL, sc);
|
||||||
// 0 needs to be the default so we have to mark the color.
|
// 0 needs to be the default so we have to mark the color.
|
||||||
v = MAKEARGB(1, RPART(c), GPART(c), BPART(c));
|
v = MAKEARGB(1, RPART(c), GPART(c), BPART(c));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2305,8 +2305,7 @@ DEFINE_CLASS_PROPERTY_PREFIX(powerup, color, C_f, Inventory)
|
||||||
*pBlendColor = MakeSpecialColormap(65535);
|
*pBlendColor = MakeSpecialColormap(65535);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
color = V_GetColor(NULL, name, &bag.ScriptPosition);
|
||||||
color = V_GetColor(NULL, name);
|
|
||||||
}
|
}
|
||||||
if (PROP_PARM_COUNT > 2)
|
if (PROP_PARM_COUNT > 2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -182,7 +182,7 @@ void FTeam::ParseTeamDefinition (FScanner &Scan)
|
||||||
|
|
||||||
case TEAMINFO_PlayerColor:
|
case TEAMINFO_PlayerColor:
|
||||||
Scan.MustGetString ();
|
Scan.MustGetString ();
|
||||||
Team.m_iPlayerColor = V_GetColor (NULL, Scan.String);
|
Team.m_iPlayerColor = V_GetColor (NULL, Scan);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TEAMINFO_TextColor:
|
case TEAMINFO_TextColor:
|
||||||
|
|
|
@ -1097,7 +1097,7 @@ void FMultiPatchTexture::ParsePatch(FScanner &sc, TexPart & part, TexInit &init)
|
||||||
if (!sc.CheckNumber())
|
if (!sc.CheckNumber())
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
part.Blend = V_GetColor(NULL, sc.String);
|
part.Blend = V_GetColor(NULL, sc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -2300,19 +2300,19 @@ void V_InitFontColors ()
|
||||||
else if (sc.Compare ("Flat:"))
|
else if (sc.Compare ("Flat:"))
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
logcolor = V_GetColor (NULL, sc.String);
|
logcolor = V_GetColor (NULL, sc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Get first color
|
// Get first color
|
||||||
c = V_GetColor (NULL, sc.String);
|
c = V_GetColor (NULL, sc);
|
||||||
tparm.Start[0] = RPART(c);
|
tparm.Start[0] = RPART(c);
|
||||||
tparm.Start[1] = GPART(c);
|
tparm.Start[1] = GPART(c);
|
||||||
tparm.Start[2] = BPART(c);
|
tparm.Start[2] = BPART(c);
|
||||||
|
|
||||||
// Get second color
|
// Get second color
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
c = V_GetColor (NULL, sc.String);
|
c = V_GetColor (NULL, sc);
|
||||||
tparm.End[0] = RPART(c);
|
tparm.End[0] = RPART(c);
|
||||||
tparm.End[1] = GPART(c);
|
tparm.End[1] = GPART(c);
|
||||||
tparm.End[2] = BPART(c);
|
tparm.End[2] = BPART(c);
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "i_video.h"
|
#include "i_video.h"
|
||||||
#include "v_video.h"
|
#include "v_video.h"
|
||||||
#include "v_text.h"
|
#include "v_text.h"
|
||||||
|
#include "sc_man.h"
|
||||||
|
|
||||||
#include "w_wad.h"
|
#include "w_wad.h"
|
||||||
|
|
||||||
|
@ -437,7 +438,7 @@ void DCanvas::ReleaseScreenshotBuffer()
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
int V_GetColorFromString (const DWORD *palette, const char *cstr)
|
int V_GetColorFromString (const DWORD *palette, const char *cstr, FScriptPosition *sc)
|
||||||
{
|
{
|
||||||
int c[3], i, p;
|
int c[3], i, p;
|
||||||
char val[3];
|
char val[3];
|
||||||
|
@ -456,7 +457,7 @@ int V_GetColorFromString (const DWORD *palette, const char *cstr)
|
||||||
{
|
{
|
||||||
val[0] = cstr[1 + i*2];
|
val[0] = cstr[1 + i*2];
|
||||||
val[1] = cstr[2 + i*2];
|
val[1] = cstr[2 + i*2];
|
||||||
c[i] = ParseHex (val);
|
c[i] = ParseHex (val, sc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (len == 4)
|
else if (len == 4)
|
||||||
|
@ -465,7 +466,7 @@ int V_GetColorFromString (const DWORD *palette, const char *cstr)
|
||||||
for (i = 0; i < 3; ++i)
|
for (i = 0; i < 3; ++i)
|
||||||
{
|
{
|
||||||
val[1] = val[0] = cstr[1 + i];
|
val[1] = val[0] = cstr[1 + i];
|
||||||
c[i] = ParseHex (val);
|
c[i] = ParseHex (val, sc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -518,7 +519,7 @@ normal:
|
||||||
{
|
{
|
||||||
val[1] = val[0];
|
val[1] = val[0];
|
||||||
}
|
}
|
||||||
c[i] = ParseHex (val);
|
c[i] = ParseHex (val, sc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -538,7 +539,7 @@ normal:
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
FString V_GetColorStringByName (const char *name)
|
FString V_GetColorStringByName (const char *name, FScriptPosition *sc)
|
||||||
{
|
{
|
||||||
FMemLump rgbNames;
|
FMemLump rgbNames;
|
||||||
char *rgbEnd;
|
char *rgbEnd;
|
||||||
|
@ -552,7 +553,8 @@ FString V_GetColorStringByName (const char *name)
|
||||||
rgblump = Wads.CheckNumForName ("X11R6RGB");
|
rgblump = Wads.CheckNumForName ("X11R6RGB");
|
||||||
if (rgblump == -1)
|
if (rgblump == -1)
|
||||||
{
|
{
|
||||||
Printf ("X11R6RGB lump not found\n");
|
if (!sc) Printf ("X11R6RGB lump not found\n");
|
||||||
|
else sc->Message(MSG_WARNING, "X11R6RGB lump not found");
|
||||||
return FString();
|
return FString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -614,7 +616,8 @@ FString V_GetColorStringByName (const char *name)
|
||||||
}
|
}
|
||||||
if (rgb < rgbEnd)
|
if (rgb < rgbEnd)
|
||||||
{
|
{
|
||||||
Printf ("X11R6RGB lump is corrupt\n");
|
if (!sc) Printf ("X11R6RGB lump is corrupt\n");
|
||||||
|
else sc->Message(MSG_WARNING, "X11R6RGB lump is corrupt");
|
||||||
}
|
}
|
||||||
return FString();
|
return FString();
|
||||||
}
|
}
|
||||||
|
@ -627,22 +630,28 @@ FString V_GetColorStringByName (const char *name)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
int V_GetColor (const DWORD *palette, const char *str)
|
int V_GetColor (const DWORD *palette, const char *str, FScriptPosition *sc)
|
||||||
{
|
{
|
||||||
FString string = V_GetColorStringByName (str);
|
FString string = V_GetColorStringByName (str, sc);
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (!string.IsEmpty())
|
if (!string.IsEmpty())
|
||||||
{
|
{
|
||||||
res = V_GetColorFromString (palette, string);
|
res = V_GetColorFromString (palette, string, sc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res = V_GetColorFromString (palette, str);
|
res = V_GetColorFromString (palette, str, sc);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int V_GetColor(const DWORD *palette, FScanner &sc)
|
||||||
|
{
|
||||||
|
FScriptPosition scc = sc;
|
||||||
|
return V_GetColor(palette, sc.String, &scc);
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// BuildTransTable
|
// BuildTransTable
|
||||||
|
|
|
@ -497,15 +497,17 @@ void V_Shutdown ();
|
||||||
|
|
||||||
void V_MarkRect (int x, int y, int width, int height);
|
void V_MarkRect (int x, int y, int width, int height);
|
||||||
|
|
||||||
|
class FScanner;
|
||||||
// Returns the closest color to the one desired. String
|
// Returns the closest color to the one desired. String
|
||||||
// should be of the form "rr gg bb".
|
// should be of the form "rr gg bb".
|
||||||
int V_GetColorFromString (const DWORD *palette, const char *colorstring);
|
int V_GetColorFromString (const DWORD *palette, const char *colorstring, FScriptPosition *sc = nullptr);
|
||||||
// Scans through the X11R6RGB lump for a matching color
|
// Scans through the X11R6RGB lump for a matching color
|
||||||
// and returns a color string suitable for V_GetColorFromString.
|
// and returns a color string suitable for V_GetColorFromString.
|
||||||
FString V_GetColorStringByName (const char *name);
|
FString V_GetColorStringByName (const char *name, FScriptPosition *sc = nullptr);
|
||||||
|
|
||||||
// Tries to get color by name, then by string
|
// Tries to get color by name, then by string
|
||||||
int V_GetColor (const DWORD *palette, const char *str);
|
int V_GetColor (const DWORD *palette, const char *str, FScriptPosition *sc = nullptr);
|
||||||
|
int V_GetColor(const DWORD *palette, FScanner &sc);
|
||||||
void V_DrawFrame (int left, int top, int width, int height);
|
void V_DrawFrame (int left, int top, int width, int height);
|
||||||
|
|
||||||
// If the view size is not full screen, draws a border around it.
|
// If the view size is not full screen, draws a border around it.
|
||||||
|
|
Loading…
Reference in a new issue