- Added text color options to menu code so that the skill definitions can set

the color of the menu's text.
- Externalized skill settings to ZDoom.pk3


SVN r559 (trunk)
This commit is contained in:
Christoph Oelckers 2007-11-03 11:41:42 +00:00
parent 52e5f8b8e1
commit 659107cacf
10 changed files with 266 additions and 176 deletions

View file

@ -1,3 +1,8 @@
November 3, 2007 (Changes by Graf Zahl)
- Added text color options to menu code so that the skill definitions can set
the color of the menu's text.
- Externalized skill settings to ZDoom.pk3
November 2, 2007 (Changes by Graf Zahl) November 2, 2007 (Changes by Graf Zahl)
- Added skill definitions to MAPINFO. - Added skill definitions to MAPINFO.

View file

@ -103,7 +103,6 @@ static void ClearLevelInfoStrings (level_info_t *linfo);
static void ClearClusterInfoStrings (cluster_info_t *cinfo); static void ClearClusterInfoStrings (cluster_info_t *cinfo);
static void ParseSkill (); static void ParseSkill ();
static void G_VerifySkill(); static void G_VerifySkill();
static void InitializeDefaultSkills();
static FRandom pr_classchoice ("RandomPlayerClassChoice"); static FRandom pr_classchoice ("RandomPlayerClassChoice");
@ -524,12 +523,12 @@ void G_ParseMapInfo ()
int lump, lastlump = 0; int lump, lastlump = 0;
atterm (G_UnloadMapInfo); atterm (G_UnloadMapInfo);
InitializeDefaultSkills();
// Parse the default MAPINFO for the current game. // Parse the default MAPINFO for the current game.
switch (gameinfo.gametype) switch (gameinfo.gametype)
{ {
case GAME_Doom: case GAME_Doom:
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/doomcommon.txt"));
switch (gamemission) switch (gamemission)
{ {
case doom: case doom:
@ -576,7 +575,7 @@ void G_ParseMapInfo ()
} }
if (AllSkills.Size()==0) if (AllSkills.Size()==0)
{ {
InitializeDefaultSkills(); I_FatalError ("You cannot use clearskills in a MAPINFO if you do not define any new skills after it.");
} }
} }
@ -590,7 +589,7 @@ static void G_DoParseMapInfo (int lump)
QWORD levelflags; QWORD levelflags;
SetLevelDefaults (&defaultinfo); SetLevelDefaults (&defaultinfo);
SC_OpenLumpNum (lump, "MAPINFO"); SC_OpenLumpNum (lump, Wads.GetLumpFullName(lump));
HexenHack = false; HexenHack = false;
while (SC_GetString ()) while (SC_GetString ())
@ -3050,6 +3049,7 @@ static void ParseSkill ()
skill.MenuNameIsLump = false; skill.MenuNameIsLump = false;
skill.MustConfirm = false; skill.MustConfirm = false;
skill.shortcut=0; skill.shortcut=0;
skill.textcolor = CR_UNTRANSLATED;
SC_MustGetString(); SC_MustGetString();
skill.name = sc_String; skill.name = sc_String;
@ -3111,6 +3111,13 @@ static void ParseSkill ()
skill.MenuName = sc_String; skill.MenuName = sc_String;
skill.MenuNameIsLump = false; skill.MenuNameIsLump = false;
} }
else if (SC_Compare("PlayerClassName"))
{
SC_MustGetString ();
FName pc = sc_String;
SC_MustGetString ();
skill.MenuNamesForPlayerClass[pc]=sc_String;
}
else if (SC_Compare("MenuLump")) else if (SC_Compare("MenuLump"))
{ {
SC_MustGetString (); SC_MustGetString ();
@ -3121,6 +3128,24 @@ static void ParseSkill ()
{ {
skill.MustConfirm = true; skill.MustConfirm = true;
} }
else if (SC_Compare("Shortcut"))
{
SC_MustGetString();
skill.shortcut = tolower(sc_String[0]);
}
else if (SC_Compare("TextColor"))
{
SC_MustGetString();
FString c;
c.Format("[%s]", sc_String);
const BYTE * cp = (BYTE*)c.GetChars();
skill.textcolor = V_ParseFontColor(cp, 0, 0);
if (skill.textcolor == CR_UNDEFINED)
{
Printf("Undefined color '%s' in definition of skill %s\n", sc_String, skill.name.GetChars());
skill.textcolor = CR_UNTRANSLATED;
}
}
else else
{ {
SC_UnGet (); SC_UnGet ();
@ -3180,100 +3205,6 @@ int G_SkillProperty(ESkillProperty prop)
return 0; return 0;
} }
static void InitializeDefaultSkills()
{
FSkillInfo skill;
EGameType g = gameinfo.gametype;
skill.shortcut=0;
// sk_baby
skill.name = "baby";
skill.AmmoFactor = (g & GAME_DoomStrife) ? FRACUNIT*2 : FRACUNIT*3/2;
skill.DamageFactor = FRACUNIT/2;
skill.FastMonsters = false;
skill.DisableCheats = false;
skill.EasyBossBrain = true;
skill.AutoUseHealth = true;
skill.RespawnCounter = 0;
skill.Aggressiveness = FRACUNIT;
skill.SpawnFilter = MTF_EASY;
skill.ACSReturn = 0;
skill.MenuName = g&GAME_DoomStrife ? "M_JKILL" : "MNU_WETNURSE";
skill.MenuNameIsLump = !!(g&GAME_DoomStrife);
skill.MustConfirm = false;
if (g & GAME_Hexen)
{
skill.MenuNamesForPlayerClass["fighter"] = "MNU_SQUIRE";
skill.MenuNamesForPlayerClass["cleric"] = "MNU_ALTARBOY";
skill.MenuNamesForPlayerClass["mage"] = "MNU_APPRENTICE";
}
AllSkills.Push(skill);
// sk_easy
skill.name = "easy";
skill.AmmoFactor = FRACUNIT;
skill.DamageFactor = FRACUNIT;
skill.EasyBossBrain = false;
skill.AutoUseHealth = false;
skill.RespawnCounter = 0;
skill.Aggressiveness = FRACUNIT;
skill.SpawnFilter = MTF_EASY;
skill.ACSReturn = 1;
skill.MenuName = g&GAME_DoomStrife ? "M_ROUGH" : "MNU_YELLOWBELLIES";
if (g & GAME_Hexen)
{
skill.MenuNamesForPlayerClass["fighter"] = "MNU_KNIGHT";
skill.MenuNamesForPlayerClass["cleric"] = "MNU_ACOLYTE";
skill.MenuNamesForPlayerClass["mage"] = "MNU_ENCHANTER";
}
AllSkills.Push(skill);
// sk_normal
skill.name = "normal";
skill.SpawnFilter = MTF_NORMAL;
skill.ACSReturn = 2;
skill.MenuName = g&GAME_DoomStrife ? "M_HURT" : "MNU_BRINGEST";
if (g & GAME_Hexen)
{
skill.MenuNamesForPlayerClass["fighter"] = "MNU_WARRIOR";
skill.MenuNamesForPlayerClass["cleric"] = "MNU_PRIEST";
skill.MenuNamesForPlayerClass["mage"] = "MNU_SORCERER";
}
AllSkills.Push(skill);
// sk_hard
skill.name = "hard";
skill.SpawnFilter = MTF_HARD;
skill.ACSReturn = 3;
skill.MenuName = g&GAME_DoomStrife ? "M_ULTRA" : "MNU_SMITE";
if (g & GAME_Hexen)
{
skill.MenuNamesForPlayerClass["fighter"] = "MNU_BERSERKER";
skill.MenuNamesForPlayerClass["cleric"] = "MNU_CARDINAL";
skill.MenuNamesForPlayerClass["mage"] = "MNU_WARLOCK";
}
AllSkills.Push(skill);
// sk_nightmare
skill.name = "nightmare";
skill.AmmoFactor = (g & GAME_DoomStrife) ? FRACUNIT*2 : FRACUNIT*3/2;
skill.DamageFactor = FRACUNIT;
skill.FastMonsters = true;
skill.DisableCheats = true;
skill.RespawnCounter = (g & GAME_Raven)? 0 : TICRATE * (g != GAME_Strife ? 12 : 16);
skill.Aggressiveness = FRACUNIT;
skill.ACSReturn = 4;
skill.MenuName = g&GAME_DoomStrife ? "M_NMARE" : "MNU_BLACKPLAGUE";
skill.MustConfirm = true;
if (g & GAME_Hexen)
{
skill.MenuNamesForPlayerClass["fighter"] = "MNU_TITAN";
skill.MenuNamesForPlayerClass["cleric"] = "MNU_POPE";
skill.MenuNamesForPlayerClass["mage"] = "MNU_ARCHMAGE";
}
AllSkills.Push(skill);
}
void G_VerifySkill() void G_VerifySkill()
{ {

View file

@ -390,6 +390,7 @@ struct FSkillInfo
bool MenuNameIsLump; bool MenuNameIsLump;
bool MustConfirm; bool MustConfirm;
char shortcut; char shortcut;
int textcolor;
FSkillInfo() {} FSkillInfo() {}
FSkillInfo(const FSkillInfo &other) FSkillInfo(const FSkillInfo &other)
@ -414,6 +415,7 @@ struct FSkillInfo
MenuNameIsLump = other.MenuNameIsLump; MenuNameIsLump = other.MenuNameIsLump;
MustConfirm = other.MustConfirm; MustConfirm = other.MustConfirm;
shortcut = other.shortcut; shortcut = other.shortcut;
textcolor = other.textcolor;
return *this; return *this;
} }
}; };

View file

@ -248,12 +248,12 @@ static int epi; // Selected episode
// //
static oldmenuitem_t MainMenu[]= static oldmenuitem_t MainMenu[]=
{ {
{1,0,'n',"M_NGAME",M_NewGame}, {1,0,'n',"M_NGAME",M_NewGame, CR_UNTRANSLATED},
{1,0,'l',"M_LOADG",M_LoadGame}, {1,0,'l',"M_LOADG",M_LoadGame, CR_UNTRANSLATED},
{1,0,'s',"M_SAVEG",M_SaveGame}, {1,0,'s',"M_SAVEG",M_SaveGame, CR_UNTRANSLATED},
{1,0,'o',"M_OPTION",M_Options}, // [RH] Moved {1,0,'o',"M_OPTION",M_Options, CR_UNTRANSLATED}, // [RH] Moved
{1,0,'r',"M_RDTHIS",M_ReadThis}, // Another hickup with Special edition. {1,0,'r',"M_RDTHIS",M_ReadThis, CR_UNTRANSLATED}, // Another hickup with Special edition.
{1,0,'q',"M_QUITG",M_QuitDOOM} {1,0,'q',"M_QUITG",M_QuitDOOM, CR_UNTRANSLATED}
}; };
static oldmenu_t MainDef = static oldmenu_t MainDef =
@ -270,11 +270,11 @@ static oldmenu_t MainDef =
// //
static oldmenuitem_t HereticMainMenu[] = static oldmenuitem_t HereticMainMenu[] =
{ {
{1,1,'n',"MNU_NEWGAME",M_NewGame}, {1,1,'n',"MNU_NEWGAME",M_NewGame, CR_UNTRANSLATED},
{1,1,'o',"MNU_OPTIONS",M_Options}, {1,1,'o',"MNU_OPTIONS",M_Options, CR_UNTRANSLATED},
{1,1,'f',"MNU_GAMEFILES",M_GameFiles}, {1,1,'f',"MNU_GAMEFILES",M_GameFiles, CR_UNTRANSLATED},
{1,1,'i',"MNU_INFO",M_ReadThis}, {1,1,'i',"MNU_INFO",M_ReadThis, CR_UNTRANSLATED},
{1,1,'q',"MNU_QUITGAME",M_QuitDOOM} {1,1,'q',"MNU_QUITGAME",M_QuitDOOM, CR_UNTRANSLATED}
}; };
static oldmenu_t HereticMainDef = static oldmenu_t HereticMainDef =
@ -291,10 +291,10 @@ static oldmenu_t HereticMainDef =
// //
static oldmenuitem_t ClassItems[] = static oldmenuitem_t ClassItems[] =
{ {
{ 1,1, 'f', "MNU_FIGHTER", SCClass }, { 1,1, 'f', "MNU_FIGHTER", SCClass, CR_UNTRANSLATED },
{ 1,1, 'c', "MNU_CLERIC", SCClass }, { 1,1, 'c', "MNU_CLERIC", SCClass, CR_UNTRANSLATED },
{ 1,1, 'm', "MNU_MAGE", SCClass }, { 1,1, 'm', "MNU_MAGE", SCClass, CR_UNTRANSLATED },
{ 1,1, 'r', "MNU_RANDOM", SCClass } // [RH] { 1,1, 'r', "MNU_RANDOM", SCClass, CR_UNTRANSLATED } // [RH]
}; };
static oldmenu_t ClassMenu = static oldmenu_t ClassMenu =
@ -310,14 +310,14 @@ static oldmenu_t ClassMenu =
// //
oldmenuitem_t ClassMenuItems[8] = oldmenuitem_t ClassMenuItems[8] =
{ {
{1,1,0, NULL, M_ChooseClass }, {1,1,0, NULL, M_ChooseClass, CR_UNTRANSLATED },
{1,1,0, NULL, M_ChooseClass }, {1,1,0, NULL, M_ChooseClass, CR_UNTRANSLATED },
{1,1,0, NULL, M_ChooseClass }, {1,1,0, NULL, M_ChooseClass, CR_UNTRANSLATED },
{1,1,0, NULL, M_ChooseClass }, {1,1,0, NULL, M_ChooseClass, CR_UNTRANSLATED },
{1,1,0, NULL, M_ChooseClass }, {1,1,0, NULL, M_ChooseClass, CR_UNTRANSLATED },
{1,1,0, NULL, M_ChooseClass }, {1,1,0, NULL, M_ChooseClass, CR_UNTRANSLATED },
{1,1,0, NULL, M_ChooseClass }, {1,1,0, NULL, M_ChooseClass, CR_UNTRANSLATED },
{1,1,0, NULL, M_ChooseClass }, {1,1,0, NULL, M_ChooseClass, CR_UNTRANSLATED },
}; };
oldmenu_t ClassMenuDef = oldmenu_t ClassMenuDef =
@ -334,14 +334,14 @@ oldmenu_t ClassMenuDef =
// //
oldmenuitem_t EpisodeMenu[MAX_EPISODES] = oldmenuitem_t EpisodeMenu[MAX_EPISODES] =
{ {
{1,0,0, NULL, M_Episode}, {1,0,0, NULL, M_Episode, CR_UNTRANSLATED},
{1,0,0, NULL, M_Episode}, {1,0,0, NULL, M_Episode, CR_UNTRANSLATED},
{1,0,0, NULL, M_Episode}, {1,0,0, NULL, M_Episode, CR_UNTRANSLATED},
{1,0,0, NULL, M_Episode}, {1,0,0, NULL, M_Episode, CR_UNTRANSLATED},
{1,0,0, NULL, M_Episode}, {1,0,0, NULL, M_Episode, CR_UNTRANSLATED},
{1,0,0, NULL, M_Episode}, {1,0,0, NULL, M_Episode, CR_UNTRANSLATED},
{1,0,0, NULL, M_Episode}, {1,0,0, NULL, M_Episode, CR_UNTRANSLATED},
{1,0,0, NULL, M_Episode}, {1,0,0, NULL, M_Episode, CR_UNTRANSLATED},
}; };
char EpisodeMaps[MAX_EPISODES][8]; char EpisodeMaps[MAX_EPISODES][8];
@ -361,8 +361,8 @@ oldmenu_t EpiDef =
// //
static oldmenuitem_t FilesItems[] = static oldmenuitem_t FilesItems[] =
{ {
{1,1,'l',"MNU_LOADGAME",M_LoadGame}, {1,1,'l',"MNU_LOADGAME",M_LoadGame, CR_UNTRANSLATED},
{1,1,'s',"MNU_SAVEGAME",M_SaveGame} {1,1,'s',"MNU_SAVEGAME",M_SaveGame, CR_UNTRANSLATED}
}; };
static oldmenu_t FilesMenu = static oldmenu_t FilesMenu =
@ -378,14 +378,14 @@ static oldmenu_t FilesMenu =
// DOOM SKILL SELECT // DOOM SKILL SELECT
// //
static oldmenuitem_t SkillSelectMenu[]={ static oldmenuitem_t SkillSelectMenu[]={
{ 1, 0, 0, "", M_ChooseSkill}, { 1, 0, 0, "", M_ChooseSkill, CR_UNTRANSLATED},
{ 1, 0, 0, "", M_ChooseSkill}, { 1, 0, 0, "", M_ChooseSkill, CR_UNTRANSLATED},
{ 1, 0, 0, "", M_ChooseSkill}, { 1, 0, 0, "", M_ChooseSkill, CR_UNTRANSLATED},
{ 1, 0, 0, "", M_ChooseSkill}, { 1, 0, 0, "", M_ChooseSkill, CR_UNTRANSLATED},
{ 1, 0, 0, "", M_ChooseSkill}, { 1, 0, 0, "", M_ChooseSkill, CR_UNTRANSLATED},
{ 1, 0, 0, "", M_ChooseSkill}, { 1, 0, 0, "", M_ChooseSkill, CR_UNTRANSLATED},
{ 1, 0, 0, "", M_ChooseSkill}, { 1, 0, 0, "", M_ChooseSkill, CR_UNTRANSLATED},
{ 1, 0, 0, "", M_ChooseSkill}, { 1, 0, 0, "", M_ChooseSkill, CR_UNTRANSLATED},
}; };
static oldmenu_t SkillDef = static oldmenu_t SkillDef =
@ -413,6 +413,17 @@ void M_StartupSkillMenu(const char *playerclass)
{ {
SkillDef.x = 38; SkillDef.x = 38;
SkillDef.y = 30; SkillDef.y = 30;
if (gameinfo.gametype == GAME_Hexen)
{
HexenSkillMenu.x = 38;
if (playerclass != NULL)
{
if (!stricmp(playerclass, "fighter")) HexenSkillMenu.x = 120;
else if (!stricmp(playerclass, "cleric")) HexenSkillMenu.x = 116;
else if (!stricmp(playerclass, "mage")) HexenSkillMenu.x = 112;
}
}
} }
SkillDef.numitems = HexenSkillMenu.numitems = 0; SkillDef.numitems = HexenSkillMenu.numitems = 0;
for(int i=0;i<AllSkills.Size() && i<8;i++) for(int i=0;i<AllSkills.Size() && i<8;i++)
@ -422,15 +433,18 @@ void M_StartupSkillMenu(const char *playerclass)
SkillSelectMenu[i].name = skill.MenuName; SkillSelectMenu[i].name = skill.MenuName;
SkillSelectMenu[i].fulltext = !skill.MenuNameIsLump; SkillSelectMenu[i].fulltext = !skill.MenuNameIsLump;
SkillSelectMenu[i].alphaKey = skill.MenuNameIsLump? skill.shortcut : tolower(SkillSelectMenu[i].name[0]); SkillSelectMenu[i].alphaKey = skill.MenuNameIsLump? skill.shortcut : tolower(SkillSelectMenu[i].name[0]);
SkillSelectMenu[i].textcolor = skill.textcolor;
SkillSelectMenu[i].alphaKey = skill.shortcut;
if (playerclass != NULL) if (playerclass != NULL)
{ {
FString * pmnm = skill.MenuNamesForPlayerClass.CheckKey(playerclass); FString * pmnm = skill.MenuNamesForPlayerClass.CheckKey(playerclass);
if (pmnm != NULL) if (pmnm != NULL)
{ {
SkillSelectMenu[i].name = *pmnm; SkillSelectMenu[i].name = GStrings(*pmnm);
SkillSelectMenu[i].fulltext = true; SkillSelectMenu[i].fulltext = true;
SkillSelectMenu[i].alphaKey = tolower(pmnm->GetChars()[0]); if (skill.shortcut==0)
SkillSelectMenu[i].alphaKey = tolower(SkillSelectMenu[i].name[0]);
} }
} }
SkillDef.numitems++; SkillDef.numitems++;
@ -439,11 +453,6 @@ void M_StartupSkillMenu(const char *playerclass)
// Hexen needs some manual coordinate adjustments based on player class // Hexen needs some manual coordinate adjustments based on player class
if (gameinfo.gametype == GAME_Hexen) if (gameinfo.gametype == GAME_Hexen)
{ {
if (!stricmp(playerclass, "fighter")) HexenSkillMenu.x = 120;
else if (!stricmp(playerclass, "cleric")) HexenSkillMenu.x = 116;
else if (!stricmp(playerclass, "mage")) HexenSkillMenu.x = 112;
else HexenSkillMenu.x = 38;
M_SetupNextMenu(&HexenSkillMenu); M_SetupNextMenu(&HexenSkillMenu);
} }
else else
@ -456,15 +465,15 @@ void M_StartupSkillMenu(const char *playerclass)
// //
static oldmenuitem_t PlayerSetupMenu[] = static oldmenuitem_t PlayerSetupMenu[] =
{ {
{ 1,0,'n',NULL,M_EditPlayerName}, { 1,0,'n',NULL,M_EditPlayerName, CR_UNTRANSLATED},
{ 2,0,'t',NULL,M_ChangePlayerTeam}, { 2,0,'t',NULL,M_ChangePlayerTeam, CR_UNTRANSLATED},
{ 2,0,'r',NULL,M_SlidePlayerRed}, { 2,0,'r',NULL,M_SlidePlayerRed, CR_UNTRANSLATED},
{ 2,0,'g',NULL,M_SlidePlayerGreen}, { 2,0,'g',NULL,M_SlidePlayerGreen, CR_UNTRANSLATED},
{ 2,0,'b',NULL,M_SlidePlayerBlue}, { 2,0,'b',NULL,M_SlidePlayerBlue, CR_UNTRANSLATED},
{ 2,0,'c',NULL,M_ChangeClass}, { 2,0,'c',NULL,M_ChangeClass, CR_UNTRANSLATED},
{ 2,0,'s',NULL,M_ChangeSkin}, { 2,0,'s',NULL,M_ChangeSkin, CR_UNTRANSLATED},
{ 2,0,'e',NULL,M_ChangeGender}, { 2,0,'e',NULL,M_ChangeGender, CR_UNTRANSLATED},
{ 2,0,'a',NULL,M_ChangeAutoAim} { 2,0,'a',NULL,M_ChangeAutoAim, CR_UNTRANSLATED}
}; };
static oldmenu_t PSetupDef = static oldmenu_t PSetupDef =
@ -498,14 +507,14 @@ static oldmenu_t ReadDef =
// //
static oldmenuitem_t LoadMenu[]= static oldmenuitem_t LoadMenu[]=
{ {
{1,0,'1',NULL, NULL}, {1,0,'1',NULL, NULL, CR_UNTRANSLATED},
{1,0,'2',NULL, NULL}, {1,0,'2',NULL, NULL, CR_UNTRANSLATED},
{1,0,'3',NULL, NULL}, {1,0,'3',NULL, NULL, CR_UNTRANSLATED},
{1,0,'4',NULL, NULL}, {1,0,'4',NULL, NULL, CR_UNTRANSLATED},
{1,0,'5',NULL, NULL}, {1,0,'5',NULL, NULL, CR_UNTRANSLATED},
{1,0,'6',NULL, NULL}, {1,0,'6',NULL, NULL, CR_UNTRANSLATED},
{1,0,'7',NULL, NULL}, {1,0,'7',NULL, NULL, CR_UNTRANSLATED},
{1,0,'8',NULL, NULL}, {1,0,'8',NULL, NULL, CR_UNTRANSLATED},
}; };
static oldmenu_t LoadDef = static oldmenu_t LoadDef =
@ -522,14 +531,14 @@ static oldmenu_t LoadDef =
// //
static oldmenuitem_t SaveMenu[] = static oldmenuitem_t SaveMenu[] =
{ {
{1,0,'1',NULL, NULL}, {1,0,'1',NULL, NULL, CR_UNTRANSLATED},
{1,0,'2',NULL, NULL}, {1,0,'2',NULL, NULL, CR_UNTRANSLATED},
{1,0,'3',NULL, NULL}, {1,0,'3',NULL, NULL, CR_UNTRANSLATED},
{1,0,'4',NULL, NULL}, {1,0,'4',NULL, NULL, CR_UNTRANSLATED},
{1,0,'5',NULL, NULL}, {1,0,'5',NULL, NULL, CR_UNTRANSLATED},
{1,0,'6',NULL, NULL}, {1,0,'6',NULL, NULL, CR_UNTRANSLATED},
{1,0,'7',NULL, NULL}, {1,0,'7',NULL, NULL, CR_UNTRANSLATED},
{1,0,'8',NULL, NULL}, {1,0,'8',NULL, NULL, CR_UNTRANSLATED},
}; };
static oldmenu_t SaveDef = static oldmenu_t SaveDef =
@ -3129,11 +3138,14 @@ void M_Drawer ()
{ {
if (currentMenu->menuitems[i].fulltext) if (currentMenu->menuitems[i].fulltext)
{ {
int color = CR_UNTRANSLATED; int color = currentMenu->menuitems[i].textcolor;
if ((currentMenu == &EpiDef || currentMenu == &ClassMenuDef) && if (color == CR_UNTRANSLATED)
gameinfo.gametype == GAME_Doom)
{ {
color = CR_RED; // The default DBIGFONT is white but Doom's default should be red.
if (gameinfo.gametype == GAME_Doom)
{
color = CR_RED;
}
} }
screen->DrawText (color, x, y, screen->DrawText (color, x, y,
GStrings(currentMenu->menuitems[i].name), GStrings(currentMenu->menuitems[i].name),

View file

@ -189,6 +189,7 @@ typedef struct
// if status = 2, // if status = 2,
// choice=0:leftarrow,1:rightarrow // choice=0:leftarrow,1:rightarrow
void (*routine)(int choice); void (*routine)(int choice);
int textcolor;
} oldmenuitem_t; } oldmenuitem_t;
typedef struct oldmenu_s typedef struct oldmenu_s

View file

@ -0,0 +1,32 @@
skill baby
AmmoFactor 2
DamageFactor 0.5
EasyBossBrain
SpawnFilter "Easy"
MenuLump "M_JKILL"
Shortcut i
skill easy
SpawnFilter "Easy"
MenuLump "M_ROUGH"
Shortcut h
skill normal
SpawnFilter "Normal"
MenuLump "M_HURT"
Shortcut h
skill hard
SpawnFilter "Normal"
MenuLump "M_ULTRA"
Shortcut u
skill nightmare
AmmoFactor 2
FastMonsters
DisableCheats
RespawnTime 12
SpawnFilter "Hard"
MenuLump "M_NMARE"
MustConfirm
Shortcut n

View file

@ -1,5 +1,34 @@
// MAPINFO for Heretic (Shareware and Retail) // MAPINFO for Heretic (Shareware and Retail)
skill baby
AmmoFactor 1.5
DamageFactor 0.5
EasyBossBrain
SpawnFilter "Easy"
MenuName "MNU_WETNURSE"
skill easy
SpawnFilter "Easy"
MenuName "MNU_YELLOWBELLIES"
skill normal
SpawnFilter "Normal"
MenuName "MNU_BRINGEST"
skill hard
SpawnFilter "Normal"
MenuName "MNU_SMITE"
skill nightmare
AmmoFactor 1.5
FastMonsters
DisableCheats
SpawnFilter "Hard"
MenuName "MNU_BLACKPLAGUE"
MustConfirm
// Episode 1 // Episode 1
map E1M1 lookup HHUSTR_E1M1 map E1M1 lookup HHUSTR_E1M1

View file

@ -1,6 +1,50 @@
// A bare-bones MAPINFO for Hexen. // A bare-bones MAPINFO for Hexen.
// Most of the MAPINFO is still in hexen.wad. // Most of the MAPINFO is still in hexen.wad.
skill baby
AmmoFactor 1.5
DamageFactor 0.5
EasyBossBrain
SpawnFilter "Easy"
MenuName "MNU_WETNURSE"
PlayerClassName "fighter" "MNU_SQUIRE"
PlayerClassName "cleric" "MNU_ALTARBOY"
PlayerClassName "mage" "MNU_APPRENTICE"
skill easy
SpawnFilter "Easy"
MenuName "MNU_YELLOWBELLIES"
PlayerClassName "fighter" "MNU_KNIGHT"
PlayerClassName "cleric" "MNU_ACOLYTE"
PlayerClassName "mage" "MNU_ENCHANTER"
skill normal
SpawnFilter "Normal"
MenuName "MNU_BRINGEST"
PlayerClassName "fighter" "MNU_WARRIOR"
PlayerClassName "cleric" "MNU_PRIEST"
PlayerClassName "mage" "MNU_SORCERER"
skill hard
SpawnFilter "Normal"
MenuName "MNU_SMITE"
PlayerClassName "fighter" "MNU_BERSERKER"
PlayerClassName "cleric" "MNU_CARDINAL"
PlayerClassName "mage" "MNU_WARLOCK"
skill nightmare
AmmoFactor 1.5
FastMonsters
DisableCheats
SpawnFilter "Hard"
MenuName "MNU_BLACKPLAGUE"
PlayerClassName "fighter" "MNU_TITAN"
PlayerClassName "cleric" "MNU_POPE"
PlayerClassName "mage" "MNU_ARCHMAGE"
MustConfirm
clusterdef 1 clusterdef 1
hub hub
exittext clus1msg exittext clus1msg

View file

@ -1,5 +1,38 @@
// MAPINFO for Strife (full version and teaser) // MAPINFO for Strife (full version and teaser)
skill baby
AmmoFactor 2
DamageFactor 0.5
EasyBossBrain
SpawnFilter "Easy"
MenuLump "M_JKILL"
Shortcut t
skill easy
SpawnFilter "Easy"
MenuLump "M_ROUGH"
Shortcut r
skill normal
SpawnFilter "Normal"
MenuLump "M_HURT"
Shortcut v
skill hard
SpawnFilter "Normal"
MenuLump "M_ULTRA"
Shortcut e
skill nightmare
AmmoFactor 2
FastMonsters
DisableCheats
RespawnTime 16
SpawnFilter "Hard"
MenuLump "M_NMARE"
MustConfirm
Shortcut b
defaultmap defaultmap
forcenoskystretch forcenoskystretch
strifefallingdamage strifefallingdamage

View file

@ -221,9 +221,10 @@ sounds/railgf1.flac railgunfire.flac
======== ========
# Mapinfos # Mapinfos
mapinfo/doomcommon.txt mapinfo/doomcommon.txt
mapinfo/doom1.txt mapinfo/doom1.txt mapinfo/doom1.txt mapinfo/doom1.txt
mapinfo/doom2.txt mapinfo/doom2.txt mapinfo/doom2.txt mapinfo/doom2.txt
mapinfo/plutonia.txt mapinfo/plutonia.txt mapinfo/plutonia.txt mapinfo/plutonia.txt
mapinfo/tnt.txt mapinfo/tnt.txt mapinfo/tnt.txt mapinfo/tnt.txt
mapinfo/heretic.txt mapinfo/heretic.txt mapinfo/heretic.txt mapinfo/heretic.txt
mapinfo/hexen.txt mapinfo/hexen.txt mapinfo/hexen.txt mapinfo/hexen.txt