mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-24 13:01:47 +00:00
- implemented automap color parser for MAPINFO (code not tested yet!)
This commit is contained in:
parent
845020c617
commit
aa72857c72
4 changed files with 133 additions and 0 deletions
119
src/am_map.cpp
119
src/am_map.cpp
|
@ -83,6 +83,7 @@ CVAR (Bool, am_showitems, false, CVAR_ARCHIVE);
|
||||||
CVAR (Bool, am_showtime, true, CVAR_ARCHIVE);
|
CVAR (Bool, am_showtime, true, CVAR_ARCHIVE);
|
||||||
CVAR (Bool, am_showtotaltime, false, CVAR_ARCHIVE);
|
CVAR (Bool, am_showtotaltime, false, CVAR_ARCHIVE);
|
||||||
CVAR (Int, am_colorset, 0, CVAR_ARCHIVE);
|
CVAR (Int, am_colorset, 0, CVAR_ARCHIVE);
|
||||||
|
CVAR (Bool, am_customcolors, true, CVAR_ARCHIVE);
|
||||||
CVAR (Int, am_map_secrets, 1, CVAR_ARCHIVE);
|
CVAR (Int, am_map_secrets, 1, CVAR_ARCHIVE);
|
||||||
CVAR (Bool, am_drawmapback, true, CVAR_ARCHIVE);
|
CVAR (Bool, am_drawmapback, true, CVAR_ARCHIVE);
|
||||||
CVAR (Bool, am_showkeys, true, CVAR_ARCHIVE);
|
CVAR (Bool, am_showkeys, true, CVAR_ARCHIVE);
|
||||||
|
@ -177,6 +178,32 @@ struct AMColor
|
||||||
//
|
//
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
|
static const char *ColorNames[] = {
|
||||||
|
"Background",
|
||||||
|
"YourColor",
|
||||||
|
"WallColor",
|
||||||
|
"TwoSidedWallColor",
|
||||||
|
"FloorDiffWallColor",
|
||||||
|
"CeilingDiffWallColor",
|
||||||
|
"ExtraFloorWallColor",
|
||||||
|
"ThingColor",
|
||||||
|
"ThingColor_Item",
|
||||||
|
"ThingColor_CountItem",
|
||||||
|
"ThingColor_Monster",
|
||||||
|
"ThingColor_Friend",
|
||||||
|
"SpecialWallColor",
|
||||||
|
"SecretWallColor",
|
||||||
|
"GridColor",
|
||||||
|
"XHairColor",
|
||||||
|
"NotSeenColor",
|
||||||
|
"LockedColor",
|
||||||
|
"IntraTeleportColor",
|
||||||
|
"InterTeleportColor",
|
||||||
|
"SecretSectorColor",
|
||||||
|
"AlmostBackgroundColor",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
struct AMColorset
|
struct AMColorset
|
||||||
{
|
{
|
||||||
enum
|
enum
|
||||||
|
@ -209,6 +236,7 @@ struct AMColorset
|
||||||
AMColor c[AM_NUM_COLORS];
|
AMColor c[AM_NUM_COLORS];
|
||||||
bool displayLocks;
|
bool displayLocks;
|
||||||
bool forcebackground;
|
bool forcebackground;
|
||||||
|
bool defined; // only for mod specific colorsets: must be true to be usable
|
||||||
|
|
||||||
void initFromCVars(FColorCVar **values)
|
void initFromCVars(FColorCVar **values)
|
||||||
{
|
{
|
||||||
|
@ -252,6 +280,15 @@ struct AMColorset
|
||||||
forcebackground = false;
|
forcebackground = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setWhite()
|
||||||
|
{
|
||||||
|
c[0].FromRGB(0,0,0);
|
||||||
|
for(int i=1; i<AM_NUM_COLORS; i++)
|
||||||
|
{
|
||||||
|
c[i].FromRGB(255,255,255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const AMColor &operator[](int index) const
|
const AMColor &operator[](int index) const
|
||||||
{
|
{
|
||||||
return c[index];
|
return c[index];
|
||||||
|
@ -397,8 +434,86 @@ static unsigned char RavenColors[]= {
|
||||||
#undef NOT_USED
|
#undef NOT_USED
|
||||||
|
|
||||||
static AMColorset AMColors;
|
static AMColorset AMColors;
|
||||||
|
static AMColorset AMMod;
|
||||||
|
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
void FMapInfoParser::ParseAMColors()
|
||||||
|
{
|
||||||
|
bool colorset = false;
|
||||||
|
|
||||||
|
AMMod.setWhite();
|
||||||
|
AMMod.defined = true;
|
||||||
|
sc.MustGetToken('{');
|
||||||
|
while(sc.GetToken())
|
||||||
|
{
|
||||||
|
if (sc.TokenType == '}') return;
|
||||||
|
|
||||||
|
sc.TokenMustBe(TK_Identifier);
|
||||||
|
FString nextKey = sc.String;
|
||||||
|
sc.MustGetToken('=');
|
||||||
|
|
||||||
|
if (nextKey.CompareNoCase("base") == 0)
|
||||||
|
{
|
||||||
|
if (colorset) sc.ScriptError("'base' must be specified before the first color");
|
||||||
|
sc.MustGetToken(TK_StringConst);
|
||||||
|
if (sc.Compare("doom"))
|
||||||
|
{
|
||||||
|
AMMod.initFromColors(DoomColors, false);
|
||||||
|
}
|
||||||
|
else if (sc.Compare("raven"))
|
||||||
|
{
|
||||||
|
AMMod.initFromColors(RavenColors, true);
|
||||||
|
}
|
||||||
|
else if (sc.Compare("strife"))
|
||||||
|
{
|
||||||
|
AMMod.initFromColors(StrifeColors, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sc.ScriptError("Unknown value for 'base'. Must be 'Doom', 'Strife' or 'Raven'.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (nextKey.CompareNoCase("showlocks") == 0)
|
||||||
|
{
|
||||||
|
if(sc.CheckToken(TK_False))
|
||||||
|
AMMod.displayLocks = false;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sc.MustGetToken(TK_True);
|
||||||
|
AMMod.displayLocks = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; ColorNames[i] != NULL; i++)
|
||||||
|
{
|
||||||
|
if (nextKey.CompareNoCase(ColorNames[i]) == 0)
|
||||||
|
{
|
||||||
|
sc.MustGetToken(TK_StringConst);
|
||||||
|
FString color = sc.String;
|
||||||
|
FString colorName = V_GetColorStringByName(color);
|
||||||
|
if(!colorName.IsEmpty()) color = colorName;
|
||||||
|
int colorval = V_GetColorFromString(NULL, color);
|
||||||
|
AMMod.c[i].FromRGB(RPART(colorval), GPART(colorval), BPART(colorval));
|
||||||
|
colorset = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ColorNames[i]== NULL)
|
||||||
|
{
|
||||||
|
sc.ScriptError("Unknown key '%s'", nextKey.GetChars());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -1131,6 +1246,10 @@ static void AM_initColors (bool overlayed)
|
||||||
{
|
{
|
||||||
AMColors.initFromCVars(cv_overlay);
|
AMColors.initFromCVars(cv_overlay);
|
||||||
}
|
}
|
||||||
|
else if (am_customcolors && AMMod.defined)
|
||||||
|
{
|
||||||
|
AMColors = AMMod;
|
||||||
|
}
|
||||||
else switch(am_colorset)
|
else switch(am_colorset)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -103,6 +103,7 @@ struct FMapInfoParser
|
||||||
|
|
||||||
void ParseIntermissionAction(FIntermissionDescriptor *Desc);
|
void ParseIntermissionAction(FIntermissionDescriptor *Desc);
|
||||||
void ParseIntermission();
|
void ParseIntermission();
|
||||||
|
void ParseAMColors();
|
||||||
FName CheckEndSequence();
|
FName CheckEndSequence();
|
||||||
FName ParseEndGame();
|
FName ParseEndGame();
|
||||||
};
|
};
|
||||||
|
|
|
@ -1842,6 +1842,18 @@ void FMapInfoParser::ParseMapInfo (int lump, level_info_t &gamedefaults, level_i
|
||||||
sc.ScriptError("intermission definitions not supported with old MAPINFO syntax");
|
sc.ScriptError("intermission definitions not supported with old MAPINFO syntax");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (sc.Compare("automap"))
|
||||||
|
{
|
||||||
|
if (format_type != FMT_Old)
|
||||||
|
{
|
||||||
|
format_type = FMT_New;
|
||||||
|
ParseAMColors();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sc.ScriptError("automap colorset definitions not supported with old MAPINFO syntax");
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sc.ScriptError("%s: Unknown top level keyword", sc.String);
|
sc.ScriptError("%s: Unknown top level keyword", sc.String);
|
||||||
|
|
|
@ -924,6 +924,7 @@ OptionMenu AutomapOptions
|
||||||
{
|
{
|
||||||
Title "AUTOMAP OPTIONS"
|
Title "AUTOMAP OPTIONS"
|
||||||
Option "Map color set", "am_colorset", "MapColorTypes"
|
Option "Map color set", "am_colorset", "MapColorTypes"
|
||||||
|
Option "Allow map defined colors" "am_customcolors", "YesNo"
|
||||||
Submenu "Set custom colors", "MapColorMenu"
|
Submenu "Set custom colors", "MapColorMenu"
|
||||||
Submenu "Customize map controls", "MapControlsMenu"
|
Submenu "Customize map controls", "MapControlsMenu"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
|
|
Loading…
Reference in a new issue