- 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)
- 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 ParseSkill ();
static void G_VerifySkill();
static void InitializeDefaultSkills();
static FRandom pr_classchoice ("RandomPlayerClassChoice");
@ -524,12 +523,12 @@ void G_ParseMapInfo ()
int lump, lastlump = 0;
atterm (G_UnloadMapInfo);
InitializeDefaultSkills();
// Parse the default MAPINFO for the current game.
switch (gameinfo.gametype)
{
case GAME_Doom:
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/doomcommon.txt"));
switch (gamemission)
{
case doom:
@ -576,7 +575,7 @@ void G_ParseMapInfo ()
}
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;
SetLevelDefaults (&defaultinfo);
SC_OpenLumpNum (lump, "MAPINFO");
SC_OpenLumpNum (lump, Wads.GetLumpFullName(lump));
HexenHack = false;
while (SC_GetString ())
@ -3050,6 +3049,7 @@ static void ParseSkill ()
skill.MenuNameIsLump = false;
skill.MustConfirm = false;
skill.shortcut=0;
skill.textcolor = CR_UNTRANSLATED;
SC_MustGetString();
skill.name = sc_String;
@ -3111,6 +3111,13 @@ static void ParseSkill ()
skill.MenuName = sc_String;
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"))
{
SC_MustGetString ();
@ -3121,6 +3128,24 @@ static void ParseSkill ()
{
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
{
SC_UnGet ();
@ -3180,100 +3205,6 @@ int G_SkillProperty(ESkillProperty prop)
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()
{

View file

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

View file

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

View file

@ -189,6 +189,7 @@ typedef struct
// if status = 2,
// choice=0:leftarrow,1:rightarrow
void (*routine)(int choice);
int textcolor;
} oldmenuitem_t;
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)
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
map E1M1 lookup HHUSTR_E1M1

View file

@ -1,6 +1,50 @@
// A bare-bones MAPINFO for Hexen.
// 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
hub
exittext clus1msg

View file

@ -1,5 +1,38 @@
// 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
forcenoskystretch
strifefallingdamage

View file

@ -221,9 +221,10 @@ sounds/railgf1.flac railgunfire.flac
========
# Mapinfos
mapinfo/doomcommon.txt mapinfo/doomcommon.txt
mapinfo/doom1.txt mapinfo/doom1.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/heretic.txt mapinfo/heretic.txt
mapinfo/hexen.txt mapinfo/hexen.txt