mirror of
https://github.com/ZDoom/gzdoom-last-svn.git
synced 2025-06-03 10:41:12 +00:00
- Fixed: player.damagescreencolor was not implemented for the GL renderer.
Update to ZDoom r1190: - Gave the PlayerPawn base class a default damage fade color instead of hacking it into the actor when actually used. - Fixed: The DamageFade color was not saved in savegames. - Added Blzut3's patch for a real Chex Quest game mode. - Fixed: SKIP_SUPER doesn't work for inventory items so it must be disabled for them - Fixed: Chex Quest doesn't have a HELP2 screen so it must not be used in the gameinfo. - Fixed: Default blood color is no longer red so P_DrawSplash2 must get it from the gameinfo instead. - Added new French language texts by DoomKn1ght_. - Blood default color is set in the gameinfo now so that Chex Quest can default to green instead of red. - Fixed: The version of CheckNumForFullName that checks for a specific WAD did not work. - Moved MAPINFO names into gameinfo structure. - Added Chex Quest support. Credits go to fraggle for creating a Dehacked patch that does most of the work. The rest includes a new MAPINFO and removal of the drop items from the monsters being used. - Added Win64 support to the crash report generator. (Pity that Win32 cannot be as informative.) - Added and fixed Boss death submission for random spawner. - Added functions to FActorInfo that can set the damage factors and pain chances to reduce the chance of new errors when working with these features. - Fixed: The handling of the deprecated FIRERESIST flag didn't work. There were 3 problems: * Actor defaults have no class information so HandleDeprecatedFlags needs to be passed a pointer to the ActorInfo. * The DamageFactors list is only created when needed so the code needs to check if it already exists. * damage factors are stored as fixed_t but this set a float. - Fixed: Timidity::Renderer::reset_voices() must completely zero the voices. Because this wasn't done, note_on() could try to access the sample for a voice that had never been played yet and access random memory. There may be other places where it's a problem, but this is where I noticed it, by chance. - Added a traditional Strife color set for the automap. git-svn-id: http://mancubus.net/svn/hosted/gzdoom/trunk@166 b0f79afe-0144-0410-b225-9a4edf0717df
This commit is contained in:
parent
62fa25fd63
commit
43b83f14c9
53 changed files with 1801 additions and 214 deletions
|
@ -1,3 +1,85 @@
|
|||
September 1, 2008 (Changes by Graf Zahl)
|
||||
- Gave the PlayerPawn base class a default damage fade color instead of
|
||||
hacking it into the actor when actually used.
|
||||
- Fixed: The DamageFade color was not saved in savegames.
|
||||
|
||||
August 30, 2008 (Changes by Graf Zahl)
|
||||
- Added Blzut3's patch for a real Chex Quest game mode.
|
||||
|
||||
August 29, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: SKIP_SUPER doesn't work for inventory items so it must be
|
||||
disabled for them
|
||||
- Fixed: Chex Quest doesn't have a HELP2 screen so it must not be used
|
||||
in the gameinfo.
|
||||
- Fixed: Default blood color is no longer red so P_DrawSplash2 must
|
||||
get it from the gameinfo instead.
|
||||
- Added new French language texts by DoomKn1ght_.
|
||||
|
||||
August 26, 2008 (Changes by Graf Zahl)
|
||||
- Blood default color is set in the gameinfo now so that Chex Quest
|
||||
can default to green instead of red.
|
||||
- Fixed: The version of CheckNumForFullName that checks for a specific
|
||||
WAD did not work.
|
||||
- Moved MAPINFO names into gameinfo structure.
|
||||
- Added Chex Quest support. Credits go to fraggle for creating a
|
||||
Dehacked patch that does most of the work. The rest includes a new
|
||||
MAPINFO and removal of the drop items from the monsters being used.
|
||||
|
||||
August 23, 2008
|
||||
- Added Win64 support to the crash report generator. (Pity that Win32
|
||||
cannot be as informative.)
|
||||
|
||||
August 22, 2008 (Changes by Graf Zahl)
|
||||
- Added and fixed Boss death submission for random spawner.
|
||||
- Added functions to FActorInfo that can set the damage factors and
|
||||
pain chances to reduce the chance of new errors when working with
|
||||
these features.
|
||||
- Fixed: The handling of the deprecated FIRERESIST flag didn't work.
|
||||
There were 3 problems:
|
||||
* Actor defaults have no class information so HandleDeprecatedFlags
|
||||
needs to be passed a pointer to the ActorInfo.
|
||||
* The DamageFactors list is only created when needed so the code needs to
|
||||
check if it already exists.
|
||||
* damage factors are stored as fixed_t but this set a float.
|
||||
|
||||
August 22, 2008
|
||||
- Fixed: Timidity::Renderer::reset_voices() must completely zero the
|
||||
voices. Because this wasn't done, note_on() could try to access
|
||||
the sample for a voice that had never been played yet and access
|
||||
random memory. There may be other places where it's a problem, but
|
||||
this is where I noticed it, by chance.
|
||||
|
||||
August 21, 2008 (Changes by Graf Zahl)
|
||||
- Added a traditional Strife color set for the automap.
|
||||
|
||||
August 21, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: The conversion of the strings in wbstartstruct_t to FStrings
|
||||
caused crashes when reloading the hub data.
|
||||
- Replaced WALLF_AUTOCONTRAST with WALLF_NOFAKECONTRAST so that the
|
||||
default setting for the flags is 0.
|
||||
- Added: doom2day's smoothlighting
|
||||
- Added: dontincrement argument to A_CheckForReload.
|
||||
- Fixed: The UDMF parser wrote class filter bits into SkillFilter.
|
||||
- Fixed: (SBARINFO patch) DrawInventoryBar has a missing argument in
|
||||
one of its drawgraphic calls.
|
||||
|
||||
August 20, 2008 (Changes by Graf Zahl)
|
||||
- Added Gez's patch for Heretic's GIMME cheat.
|
||||
- Externalized some cheat strings.
|
||||
|
||||
August 19, 2008 (Changes by Graf Zahl)
|
||||
- Added Gez's patch for removing MF4_FIRERESIST.
|
||||
|
||||
August 18, 2008 (SBARINFO patch)
|
||||
- Fixed: DrawBar would not show.
|
||||
- Fixed: IsSelected took string constants instead of identifiers.
|
||||
|
||||
August 16, 2008 (Changes by Graf Zahl)
|
||||
- Put more floor/ceiling properties in sector_t into a substructure and
|
||||
added wrapper functions.
|
||||
- Fixed: A_Explode wants the distance parameter as an int, not a fixed_t.
|
||||
- some minor DECORATE fixes.
|
||||
|
||||
August 14, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: The count parameter of A_Jump is a constant, not an expression.
|
||||
- Fixed: A_Jump used a wrong index into the jump address table.
|
||||
|
|
|
@ -229,7 +229,7 @@ void CT_Drawer (void)
|
|||
}
|
||||
|
||||
// draw the prompt, text, and cursor
|
||||
ChatQueue[len] = gameinfo.gametype == GAME_Doom ? '_' : '[';
|
||||
ChatQueue[len] = gameinfo.gametype & GAME_DoomChex ? '_' : '[';
|
||||
ChatQueue[len+1] = '\0';
|
||||
if (con_scaletext < 2)
|
||||
{
|
||||
|
|
|
@ -2096,17 +2096,19 @@ static int DoInclude (int dummy)
|
|||
return GetLine();
|
||||
}
|
||||
|
||||
void DoDehPatch (const char *patchfile, bool autoloading)
|
||||
void DoDehPatch (const char *patchfile, bool autoloading, int lump)
|
||||
{
|
||||
char file[256];
|
||||
int cont;
|
||||
int filelen = 0; // Be quiet, gcc
|
||||
int lump;
|
||||
|
||||
PatchFile = NULL;
|
||||
PatchName = NULL;
|
||||
|
||||
if (lump < 0)
|
||||
{
|
||||
lump = Wads.CheckNumForName ("DEHACKED");
|
||||
}
|
||||
|
||||
if (lump >= 0 && autoloading)
|
||||
{
|
||||
|
|
|
@ -57,7 +57,7 @@ public:
|
|||
};
|
||||
|
||||
|
||||
void DoDehPatch (const char *patchfile, bool autoloading);
|
||||
void DoDehPatch (const char *patchfile, bool autoloading, int lumpnum=-1);
|
||||
void FinishDehPatch ();
|
||||
|
||||
#endif //__D_DEHACK_H__
|
||||
|
|
|
@ -147,6 +147,9 @@ extern gameinfo_t HexenDKGameInfo;
|
|||
extern gameinfo_t StrifeGameInfo;
|
||||
extern gameinfo_t StrifeTeaserGameInfo;
|
||||
extern gameinfo_t StrifeTeaser2GameInfo;
|
||||
extern gameinfo_t ChexGameInfo;
|
||||
extern gameinfo_t PlutoniaGameInfo;
|
||||
extern gameinfo_t TNTGameInfo;
|
||||
|
||||
extern int testingmode;
|
||||
extern bool setmodeneeded;
|
||||
|
@ -227,6 +230,7 @@ const IWADInfo IWADInfos[NUM_IWAD_TYPES] =
|
|||
{ "Strife: Teaser (Old Version)", NULL, MAKERGB(224,173,153), MAKERGB(0,107,101) },
|
||||
{ "Strife: Teaser (New Version)", NULL, MAKERGB(224,173,153), MAKERGB(0,107,101) },
|
||||
{ "Freedoom", "Freedoom", MAKERGB(50,84,67), MAKERGB(198,220,209) },
|
||||
{ "Chex(R) Quest", "Chex", MAKERGB(255,255,0), MAKERGB(0,192,0) },
|
||||
};
|
||||
|
||||
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||
|
@ -251,6 +255,7 @@ static const char *IWADNames[] =
|
|||
"strife1.wad",
|
||||
"strife0.wad",
|
||||
"freedoom.wad", // Freedoom.wad is distributed as Doom2.wad, but this allows to have both in the same directory.
|
||||
"chex.wad",
|
||||
#ifdef unix
|
||||
"DOOM2.WAD", // Also look for all-uppercase names
|
||||
"PLUTONIA.WAD",
|
||||
|
@ -264,6 +269,7 @@ static const char *IWADNames[] =
|
|||
"STRIFE1.WAD",
|
||||
"STRIFE0.WAD",
|
||||
"FREEDOOM.WAD",
|
||||
"CHEX.WAD",
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
@ -661,7 +667,7 @@ void D_Display ()
|
|||
FTexture *tex;
|
||||
int x;
|
||||
|
||||
tex = TexMan[gameinfo.gametype & (GAME_Doom|GAME_Strife) ? "M_PAUSE" : "PAUSED"];
|
||||
tex = TexMan[gameinfo.gametype & (GAME_DoomStrifeChex) ? "M_PAUSE" : "PAUSED"];
|
||||
x = (SCREENWIDTH - tex->GetWidth()*CleanXfac)/2 +
|
||||
tex->LeftOffset*CleanXfac;
|
||||
screen->DrawTexture (tex, x, 4, DTA_CleanNoMove, true, TAG_DONE);
|
||||
|
@ -1324,8 +1330,8 @@ static void SetIWAD (const char *iwadpath, EIWADType type)
|
|||
const gameinfo_t *Info;
|
||||
GameMission_t Mission;
|
||||
} Datas[NUM_IWAD_TYPES] = {
|
||||
{ commercial, &CommercialGameInfo, pack_tnt }, // Doom2TNT
|
||||
{ commercial, &CommercialGameInfo, pack_plut }, // Doom2Plutonia
|
||||
{ commercial, &TNTGameInfo, pack_tnt }, // Doom2TNT
|
||||
{ commercial, &PlutoniaGameInfo, pack_plut }, // Doom2Plutonia
|
||||
{ commercial, &HexenGameInfo, doom2 }, // Hexen
|
||||
{ commercial, &HexenDKGameInfo, doom2 }, // HexenDK
|
||||
{ commercial, &CommercialGameInfo, doom2 }, // Doom2
|
||||
|
@ -1339,6 +1345,7 @@ static void SetIWAD (const char *iwadpath, EIWADType type)
|
|||
{ commercial, &StrifeTeaserGameInfo, doom2 }, // StrifeTeaser
|
||||
{ commercial, &StrifeTeaser2GameInfo, doom2 }, // StrifeTeaser2
|
||||
{ commercial, &CommercialGameInfo, doom2 }, // FreeDoom
|
||||
{ registered, &ChexGameInfo, doom }, // Chex Quest
|
||||
};
|
||||
|
||||
D_AddFile (iwadpath);
|
||||
|
@ -1382,10 +1389,13 @@ static EIWADType ScanIWAD (const char *iwad)
|
|||
"MAP33",
|
||||
"INVCURS",
|
||||
{ 'F','R','E','E','D','O','O','M' },
|
||||
"W94_1",
|
||||
{ 'P','O','S','S','H','0','M','0' },
|
||||
"E2M1","E2M2","E2M3","E2M4","E2M5","E2M6","E2M7","E2M8","E2M9",
|
||||
"E3M1","E3M2","E3M3","E3M4","E3M5","E3M6","E3M7","E3M8","E3M9",
|
||||
"DPHOOF","BFGGA0","HEADA1","CYBRA1",
|
||||
{ 'S','P','I','D','A','1','D','1' },
|
||||
|
||||
};
|
||||
#define NUM_CHECKLUMPS (sizeof(checklumps)/8)
|
||||
enum
|
||||
|
@ -1402,6 +1412,8 @@ static EIWADType ScanIWAD (const char *iwad)
|
|||
Check_map33,
|
||||
Check_invcurs,
|
||||
Check_FreeDoom,
|
||||
Check_W94_1,
|
||||
Check_POSSH0M0,
|
||||
Check_e2m1
|
||||
};
|
||||
int lumpsfound[NUM_CHECKLUMPS];
|
||||
|
@ -1511,9 +1523,16 @@ static EIWADType ScanIWAD (const char *iwad)
|
|||
if (i == NUM_CHECKLUMPS)
|
||||
{
|
||||
if (lumpsfound[Check_e4m1])
|
||||
{
|
||||
if (lumpsfound[Check_W94_1] && lumpsfound[Check_POSSH0M0])
|
||||
{
|
||||
return IWAD_ChexQuest;
|
||||
}
|
||||
else
|
||||
{
|
||||
return IWAD_UltimateDoom;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return IWAD_DoomRegistered;
|
||||
|
|
|
@ -71,6 +71,7 @@ enum EIWADType
|
|||
IWAD_StrifeTeaser,
|
||||
IWAD_StrifeTeaser2,
|
||||
IWAD_FreeDoom,
|
||||
IWAD_ChexQuest,
|
||||
|
||||
NUM_IWAD_TYPES
|
||||
};
|
||||
|
|
|
@ -120,7 +120,6 @@ public:
|
|||
fixed_t AttackZOffset; // attack height, relative to player center
|
||||
|
||||
// [CW] Fades for when you are being damaged.
|
||||
bool HasDamageFade;
|
||||
float RedDamageFade;
|
||||
float GreenDamageFade;
|
||||
float BlueDamageFade;
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include "r_draw.h"
|
||||
#include "a_sharedglobal.h"
|
||||
#include "r_translate.h"
|
||||
#include "gi.h"
|
||||
|
||||
FDecalLib DecalLibrary;
|
||||
|
||||
|
@ -515,8 +516,15 @@ void FDecalLib::ParseDecal (FScanner &sc)
|
|||
|
||||
case DECAL_SHADE:
|
||||
sc.MustGetString ();
|
||||
newdecal.RenderStyle = STYLE_Shaded;
|
||||
if (!sc.Compare("BloodDefault"))
|
||||
{
|
||||
newdecal.ShadeColor = V_GetColor (NULL, sc.String);
|
||||
}
|
||||
else
|
||||
{
|
||||
newdecal.ShadeColor = gameinfo.defaultbloodcolor;
|
||||
}
|
||||
newdecal.RenderStyle = STYLE_Shaded;
|
||||
newdecal.ShadeColor |=
|
||||
ColorMatcher.Pick (RPART(newdecal.ShadeColor),
|
||||
GPART(newdecal.ShadeColor), BPART(newdecal.ShadeColor)) << 24;
|
||||
|
|
|
@ -393,9 +393,9 @@ void F_TextWrite (void)
|
|||
return;
|
||||
|
||||
// draw some of the text onto the screen
|
||||
leftmargin = (gameinfo.gametype & (GAME_Doom|GAME_Strife|GAME_Hexen) ? 10 : 20) - 160;
|
||||
leftmargin = (gameinfo.gametype & (GAME_DoomStrifeChex|GAME_Hexen) ? 10 : 20) - 160;
|
||||
rowheight = screen->Font->GetHeight () +
|
||||
(gameinfo.gametype & (GAME_Doom|GAME_Strife) ? 3 : -1);
|
||||
(gameinfo.gametype & (GAME_DoomStrifeChex) ? 3 : -1);
|
||||
scale = (CleanXfac != 1 || CleanYfac != 1);
|
||||
|
||||
cx = leftmargin;
|
||||
|
@ -405,7 +405,7 @@ void F_TextWrite (void)
|
|||
}
|
||||
else
|
||||
{
|
||||
cy = (gameinfo.gametype & (GAME_Doom|GAME_Strife) ? 10 : 5) - 100;
|
||||
cy = (gameinfo.gametype & (GAME_DoomStrifeChex) ? 10 : 5) - 100;
|
||||
}
|
||||
ch = FinaleText.GetChars();
|
||||
|
||||
|
|
|
@ -623,41 +623,12 @@ void G_ParseMapInfo ()
|
|||
atterm (G_UnloadMapInfo);
|
||||
|
||||
// Parse the default MAPINFO for the current game.
|
||||
switch (gameinfo.gametype)
|
||||
for(int i=0; i<2; i++)
|
||||
{
|
||||
case GAME_Doom:
|
||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/doomcommon.txt"));
|
||||
switch (gamemission)
|
||||
if (gameinfo.mapinfo[i] != NULL)
|
||||
{
|
||||
case doom:
|
||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/doom1.txt"));
|
||||
break;
|
||||
case pack_plut:
|
||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/plutonia.txt"));
|
||||
break;
|
||||
case pack_tnt:
|
||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/tnt.txt"));
|
||||
break;
|
||||
default:
|
||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/doom2.txt"));
|
||||
break;
|
||||
G_DoParseMapInfo(Wads.GetNumForFullName(gameinfo.mapinfo[i]));
|
||||
}
|
||||
break;
|
||||
|
||||
case GAME_Heretic:
|
||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/heretic.txt"));
|
||||
break;
|
||||
|
||||
case GAME_Hexen:
|
||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/hexen.txt"));
|
||||
break;
|
||||
|
||||
case GAME_Strife:
|
||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/strife.txt"));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Parse any extra MAPINFOs.
|
||||
|
@ -1736,7 +1707,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
|||
{
|
||||
int cstype = SBarInfoScript->GetGameType();
|
||||
|
||||
if(cstype == GAME_Doom) //Did the user specify a "base"
|
||||
if(cstype == GAME_Doom || cstype == GAME_Chex) //Did the user specify a "base"
|
||||
{
|
||||
StatusBar = CreateDoomStatusBar ();
|
||||
}
|
||||
|
@ -1759,7 +1730,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
|||
}
|
||||
if (StatusBar == NULL)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
StatusBar = CreateDoomStatusBar ();
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ void ABasicArmor::Tick ()
|
|||
{
|
||||
switch (gameinfo.gametype)
|
||||
{
|
||||
case GAME_Chex:
|
||||
case GAME_Doom:
|
||||
Icon = TexMan.CheckForTexture (SavePercent == FRACUNIT/3 ? "ARM1A0" : "ARM2A0", FTexture::TEX_Any);
|
||||
break;
|
||||
|
|
|
@ -211,6 +211,10 @@ static void ParseLock(FScanner &sc)
|
|||
{
|
||||
if (gameinfo.gametype != GAME_Strife) keynum=-1;
|
||||
}
|
||||
else if (sc.Compare("CHEX"))
|
||||
{
|
||||
if (gameinfo.gametype != GAME_Chex) keynum=-1;
|
||||
}
|
||||
else sc.UnGet();
|
||||
|
||||
ignorekey = true;
|
||||
|
|
|
@ -262,7 +262,7 @@ AAmmo *AWeapon::AddAmmo (AActor *other, const PClass *ammotype, int amount)
|
|||
|
||||
// [BC] This behavior is from the original Doom. Give 5/2 times as much ammo when
|
||||
// we pick up a weapon in deathmatch.
|
||||
if (( deathmatch ) && ( gameinfo.gametype == GAME_Doom ))
|
||||
if (( deathmatch ) && ( gameinfo.gametype & GAME_DoomChex ))
|
||||
amount = amount * 5 / 2;
|
||||
|
||||
// extra ammo in baby mode and nightmare mode
|
||||
|
|
|
@ -1177,7 +1177,7 @@ void DBaseStatusBar::Draw (EHudState state)
|
|||
{
|
||||
int y, i, time = level.time / TICRATE, height;
|
||||
int totaltime = level.totaltime / TICRATE;
|
||||
EColorRange highlight = (gameinfo.gametype == GAME_Doom) ?
|
||||
EColorRange highlight = (gameinfo.gametype & GAME_DoomChex) ?
|
||||
CR_UNTRANSLATED : CR_YELLOW;
|
||||
|
||||
height = screen->Font->GetHeight () * CleanYfac;
|
||||
|
@ -1474,16 +1474,6 @@ void DBaseStatusBar::BlendView (float blend[4])
|
|||
cnt = 228;
|
||||
|
||||
APlayerPawn *mo = players[consoleplayer].mo;
|
||||
|
||||
// [CW] If no damage fade is specified, assume defaults.
|
||||
if (!mo->HasDamageFade)
|
||||
{
|
||||
mo->HasDamageFade = true;
|
||||
mo->RedDamageFade = 255;
|
||||
mo->GreenDamageFade = 0;
|
||||
mo->BlueDamageFade = 0;
|
||||
}
|
||||
|
||||
AddBlend (mo->RedDamageFade / 255, mo->GreenDamageFade / 255, mo->BlueDamageFade / 255, cnt / 255.f, blend);
|
||||
}
|
||||
|
||||
|
|
|
@ -225,7 +225,7 @@ void FGameConfigFile::DoGameSetup (const char *gamename)
|
|||
{
|
||||
const char *key;
|
||||
const char *value;
|
||||
enum { Doom, Heretic, Hexen, Strife } game;
|
||||
enum { Doom, Heretic, Hexen, Strife, Chex } game;
|
||||
|
||||
if (strcmp (gamename, "Heretic") == 0)
|
||||
game = Heretic;
|
||||
|
@ -233,6 +233,8 @@ void FGameConfigFile::DoGameSetup (const char *gamename)
|
|||
game = Hexen;
|
||||
else if (strcmp (gamename, "Strife") == 0)
|
||||
game = Strife;
|
||||
else if (strcmp (gamename, "Chex") == 0)
|
||||
game = Chex;
|
||||
else
|
||||
game = Doom;
|
||||
|
||||
|
@ -663,6 +665,18 @@ void FGameConfigFile::SetupWeaponList (const char *gamename)
|
|||
LocalWeapons.Slots[7].AddWeapon ("Mauler");
|
||||
LocalWeapons.Slots[8].AddWeapon ("Sigil");
|
||||
}
|
||||
else if (strcmp (gamename, "Chex") == 0)
|
||||
{
|
||||
LocalWeapons.Slots[1].AddWeapon ("Bootspoon");
|
||||
LocalWeapons.Slots[1].AddWeapon ("SuperBootspork");
|
||||
LocalWeapons.Slots[2].AddWeapon ("MiniZorcher");
|
||||
LocalWeapons.Slots[3].AddWeapon ("LargeZorcher");
|
||||
LocalWeapons.Slots[3].AddWeapon ("SuperLargeZorcher");
|
||||
LocalWeapons.Slots[4].AddWeapon ("RapidZorcher");
|
||||
LocalWeapons.Slots[5].AddWeapon ("ZorchPropulsor");
|
||||
LocalWeapons.Slots[6].AddWeapon ("PhasingZorcher");
|
||||
LocalWeapons.Slots[7].AddWeapon ("LAZDevice");
|
||||
}
|
||||
else // Doom
|
||||
{
|
||||
LocalWeapons.Slots[1].AddWeapon ("Fist");
|
||||
|
|
120
src/gi.cpp
120
src/gi.cpp
|
@ -36,12 +36,13 @@
|
|||
#include "info.h"
|
||||
#include "gi.h"
|
||||
#include "m_fixed.h"
|
||||
#include "v_palette.h"
|
||||
|
||||
gameinfo_t gameinfo;
|
||||
|
||||
const char *GameNames[9] =
|
||||
const char *GameNames[17] =
|
||||
{
|
||||
NULL, "Doom", "Heretic", NULL, "Hexen", NULL, NULL, NULL, "Strife"
|
||||
NULL, "Doom", "Heretic", NULL, "Hexen", NULL, NULL, NULL, "Strife", NULL, NULL, NULL, NULL, NULL, NULL, NULL, "Chex"
|
||||
};
|
||||
|
||||
|
||||
|
@ -96,6 +97,8 @@ gameinfo_t HexenGameInfo =
|
|||
"F_SKY",
|
||||
24*FRACUNIT,
|
||||
"xlat/heretic.txt", // not really correct but this was used before.
|
||||
{ "mapinfo/hexen.txt", NULL },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t HexenDKGameInfo =
|
||||
|
@ -125,6 +128,8 @@ gameinfo_t HexenDKGameInfo =
|
|||
"F_SKY",
|
||||
24*FRACUNIT,
|
||||
"xlat/heretic.txt", // not really correct but this was used before.
|
||||
{ "mapinfo/hexen.txt", NULL },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t HereticGameInfo =
|
||||
|
@ -154,6 +159,8 @@ gameinfo_t HereticGameInfo =
|
|||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/heretic.txt",
|
||||
{ "mapinfo/heretic.txt", NULL },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t HereticSWGameInfo =
|
||||
|
@ -183,6 +190,8 @@ gameinfo_t HereticSWGameInfo =
|
|||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/heretic.txt",
|
||||
{ "mapinfo/heretic.txt", NULL },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t SharewareGameInfo =
|
||||
|
@ -212,6 +221,8 @@ gameinfo_t SharewareGameInfo =
|
|||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/doom.txt",
|
||||
{ "mapinfo/doomcommon.txt", "mapinfo/doom1.txt" },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t RegisteredGameInfo =
|
||||
|
@ -241,6 +252,39 @@ gameinfo_t RegisteredGameInfo =
|
|||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/doom.txt",
|
||||
{ "mapinfo/doomcommon.txt", "mapinfo/doom1.txt" },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t ChexGameInfo =
|
||||
{
|
||||
GI_CHEX_QUEST,
|
||||
"TITLEPIC",
|
||||
"CREDIT",
|
||||
"HELP1",
|
||||
"D_INTRO",
|
||||
5,
|
||||
0,
|
||||
200/35,
|
||||
"misc/chat2",
|
||||
"D_VICTOR",
|
||||
"FLOOR4_8",
|
||||
"HELP2",
|
||||
"VICTORY2",
|
||||
"ENDPIC",
|
||||
{ { "HELP1", "CREDIT" } },
|
||||
"menu/quit1",
|
||||
2,
|
||||
"FLOOR7_2",
|
||||
&DoomBorder,
|
||||
0,
|
||||
GAME_Chex,
|
||||
100,
|
||||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/doom.txt",
|
||||
{ "mapinfo/chex.txt", NULL },
|
||||
MAKERGB(95,175,87),
|
||||
};
|
||||
|
||||
gameinfo_t RetailGameInfo =
|
||||
|
@ -270,6 +314,8 @@ gameinfo_t RetailGameInfo =
|
|||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/doom.txt",
|
||||
{ "mapinfo/doomcommon.txt", "mapinfo/doom1.txt" },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t CommercialGameInfo =
|
||||
|
@ -299,6 +345,70 @@ gameinfo_t CommercialGameInfo =
|
|||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/doom.txt",
|
||||
{ "mapinfo/doomcommon.txt", "mapinfo/doom2.txt" },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t PlutoniaGameInfo =
|
||||
{
|
||||
GI_MAPxx | GI_MENUHACK_COMMERCIAL,
|
||||
"TITLEPIC",
|
||||
"CREDIT",
|
||||
"CREDIT",
|
||||
"D_DM2TTL",
|
||||
11,
|
||||
0,
|
||||
200/35,
|
||||
"misc/chat",
|
||||
"D_READ_M",
|
||||
"SLIME16",
|
||||
"CREDIT",
|
||||
"CREDIT",
|
||||
"CREDIT",
|
||||
{ { "HELP", "CREDIT" } },
|
||||
"menu/quit2",
|
||||
3,
|
||||
"GRNROCK",
|
||||
&DoomBorder,
|
||||
0,
|
||||
GAME_Doom,
|
||||
100,
|
||||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/doom.txt",
|
||||
{ "mapinfo/doomcommon.txt", "mapinfo/plutonia.txt" },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t TNTGameInfo =
|
||||
{
|
||||
GI_MAPxx | GI_MENUHACK_COMMERCIAL,
|
||||
"TITLEPIC",
|
||||
"CREDIT",
|
||||
"CREDIT",
|
||||
"D_DM2TTL",
|
||||
11,
|
||||
0,
|
||||
200/35,
|
||||
"misc/chat",
|
||||
"D_READ_M",
|
||||
"SLIME16",
|
||||
"CREDIT",
|
||||
"CREDIT",
|
||||
"CREDIT",
|
||||
{ { "HELP", "CREDIT" } },
|
||||
"menu/quit2",
|
||||
3,
|
||||
"GRNROCK",
|
||||
&DoomBorder,
|
||||
0,
|
||||
GAME_Doom,
|
||||
100,
|
||||
"F_SKY1",
|
||||
24*FRACUNIT,
|
||||
"xlat/doom.txt",
|
||||
{ "mapinfo/doomcommon.txt", "mapinfo/tnt.txt" },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t StrifeGameInfo =
|
||||
|
@ -328,6 +438,8 @@ gameinfo_t StrifeGameInfo =
|
|||
"F_SKY001",
|
||||
16*FRACUNIT,
|
||||
"xlat/strife.txt",
|
||||
{ "mapinfo/strife.txt", NULL },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t StrifeTeaserGameInfo =
|
||||
|
@ -357,6 +469,8 @@ gameinfo_t StrifeTeaserGameInfo =
|
|||
"F_SKY001",
|
||||
16*FRACUNIT,
|
||||
"xlat/strife.txt",
|
||||
{ "mapinfo/strife.txt", NULL },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
||||
gameinfo_t StrifeTeaser2GameInfo =
|
||||
|
@ -386,4 +500,6 @@ gameinfo_t StrifeTeaser2GameInfo =
|
|||
"F_SKY001",
|
||||
16*FRACUNIT,
|
||||
"xlat/strife.txt",
|
||||
{ "mapinfo/strife.txt", NULL },
|
||||
MAKERGB(100,0,0),
|
||||
};
|
||||
|
|
10
src/gi.h
10
src/gi.h
|
@ -47,6 +47,7 @@
|
|||
#define GI_MENUHACK_COMMERCIAL 0x00000060
|
||||
#define GI_ALWAYSFALLINGDAMAGE 0x00000080
|
||||
#define GI_TEASER2 0x00000100 // Alternate version of the Strife Teaser
|
||||
#define GI_CHEX_QUEST 0x00000200
|
||||
|
||||
#ifndef EGAMETYPE
|
||||
#define EGAMETYPE
|
||||
|
@ -57,13 +58,16 @@ enum EGameType
|
|||
GAME_Heretic = 2,
|
||||
GAME_Hexen = 4,
|
||||
GAME_Strife = 8,
|
||||
GAME_Chex = 16, //Chex is basically Doom, but we need to have a different set of actors.
|
||||
|
||||
GAME_Raven = GAME_Heretic|GAME_Hexen,
|
||||
GAME_DoomStrife = GAME_Doom|GAME_Strife
|
||||
GAME_DoomStrife = GAME_Doom|GAME_Strife,
|
||||
GAME_DoomChex = GAME_Doom|GAME_Chex,
|
||||
GAME_DoomStrifeChex = GAME_Doom|GAME_Strife|GAME_Chex
|
||||
};
|
||||
#endif
|
||||
|
||||
extern const char *GameNames[9];
|
||||
extern const char *GameNames[17];
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -114,6 +118,8 @@ typedef struct
|
|||
char SkyFlatName[9];
|
||||
fixed_t StepHeight;
|
||||
const char *translator;
|
||||
const char *mapinfo[2];
|
||||
DWORD defaultbloodcolor;
|
||||
} gameinfo_t;
|
||||
|
||||
extern gameinfo_t gameinfo;
|
||||
|
|
|
@ -828,8 +828,9 @@ static void gl_DrawBlend(sector_t * viewsector)
|
|||
{
|
||||
if (cnt > 175) cnt = 175; // too strong and it gets too opaque
|
||||
|
||||
gl_AddBlend(1.0f, 0, 0, cnt/255.f, blend);
|
||||
|
||||
gl_AddBlend (player->mo->RedDamageFade / 255,
|
||||
player->mo->GreenDamageFade / 255,
|
||||
player->mo->BlueDamageFade / 255, cnt / 255.f, blend);
|
||||
}
|
||||
|
||||
if (player->poisoncount)
|
||||
|
|
|
@ -1506,7 +1506,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector,
|
|||
}
|
||||
|
||||
//return;
|
||||
if (!backsector || !(seg->linedef->flags&ML_TWOSIDED)) /* onesided */
|
||||
if (!backsector || !(seg->linedef->flags&ML_TWOSIDED)) // one sided
|
||||
{
|
||||
// sector's sky
|
||||
SkyNormal(frontsector,v1,v2);
|
||||
|
@ -1519,7 +1519,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector,
|
|||
realfront->GetPlaneTexZ(sector_t::ceiling),realfront->GetPlaneTexZ(sector_t::floor), // must come from the original!
|
||||
fch1,fch2,ffh1,ffh2,0);
|
||||
}
|
||||
else /* twosided */
|
||||
else // two sided
|
||||
{
|
||||
|
||||
fixed_t bch1;
|
||||
|
|
|
@ -45,6 +45,7 @@ extern FStringTable GStrings;
|
|||
// QuitGame messages
|
||||
#define NUM_QUITDOOMMESSAGES 15
|
||||
#define NUM_QUITSTRIFEMESSAGES 8
|
||||
#define NUM_QUITCHEXMESSAGES 2
|
||||
|
||||
extern const char *endmsg[];
|
||||
|
||||
|
|
|
@ -184,9 +184,12 @@ enum EGameType
|
|||
GAME_Heretic = 2,
|
||||
GAME_Hexen = 4,
|
||||
GAME_Strife = 8,
|
||||
GAME_Chex = 16,
|
||||
|
||||
GAME_Raven = GAME_Heretic|GAME_Hexen,
|
||||
GAME_DoomStrife = GAME_Doom|GAME_Strife
|
||||
GAME_DoomStrife = GAME_Doom|GAME_Strife,
|
||||
GAME_DoomChex = GAME_Doom|GAME_Chex,
|
||||
GAME_DoomStrifeChex = GAME_Doom|GAME_Strife|GAME_Chex
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
|
@ -81,10 +81,20 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
// fall through to CHT_GOD
|
||||
case CHT_GOD:
|
||||
player->cheats ^= CF_GODMODE;
|
||||
if (gameinfo.gametype != GAME_Chex)
|
||||
{
|
||||
if (player->cheats & CF_GODMODE)
|
||||
msg = GStrings("STSTR_DQDON");
|
||||
else
|
||||
msg = GStrings("STSTR_DQDOFF");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (player->cheats & CF_GODMODE)
|
||||
msg = GStrings("STSTR_CDQDON");
|
||||
else
|
||||
msg = GStrings("STSTR_CDQDOFF");
|
||||
}
|
||||
SB_state = screen->GetPageCount ();
|
||||
break;
|
||||
|
||||
|
@ -160,7 +170,10 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
{
|
||||
player->mo->GiveInventoryType (type);
|
||||
}
|
||||
if(gameinfo.gametype != GAME_Chex)
|
||||
msg = GStrings("STSTR_CHOPPERS");
|
||||
else
|
||||
msg = GStrings("STSTR_CCHOPPERS");
|
||||
}
|
||||
// [RH] The original cheat also set powers[pw_invulnerability] to true.
|
||||
// Since this is a timer and not a boolean, it effectively turned off
|
||||
|
@ -191,7 +204,10 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
cht_Give (player, "ammo");
|
||||
cht_Give (player, "keys");
|
||||
cht_Give (player, "armor");
|
||||
if(gameinfo.gametype != GAME_Chex)
|
||||
msg = GStrings("STSTR_KFAADDED");
|
||||
else
|
||||
msg = GStrings("STSTR_CKFAADDED");
|
||||
break;
|
||||
|
||||
case CHT_IDFA:
|
||||
|
@ -199,7 +215,10 @@ void cht_DoCheat (player_t *player, int cheat)
|
|||
cht_Give (player, "weapons");
|
||||
cht_Give (player, "ammo");
|
||||
cht_Give (player, "armor");
|
||||
if(gameinfo.gametype != GAME_Chex)
|
||||
msg = GStrings("STSTR_FAADDED");
|
||||
else
|
||||
msg = GStrings("STSTR_CFAADDED");
|
||||
break;
|
||||
|
||||
case CHT_BEHOLDV:
|
||||
|
@ -622,6 +641,10 @@ void cht_Give (player_t *player, const char *name, int amount)
|
|||
{
|
||||
type = PClass::FindClass ("Backpack");
|
||||
}
|
||||
else if (gameinfo.gametype == GAME_Chex)
|
||||
{
|
||||
type = PClass::FindClass ("Zorchpack");
|
||||
}
|
||||
else
|
||||
{ // Hexen doesn't have a backpack, foo!
|
||||
type = NULL;
|
||||
|
@ -850,6 +873,10 @@ void cht_Take (player_t *player, const char *name, int amount)
|
|||
{
|
||||
type = PClass::FindClass ("Backpack");
|
||||
}
|
||||
else if (gameinfo.gametype == GAME_Chex)
|
||||
{
|
||||
type = PClass::FindClass ("Zorchpack");
|
||||
}
|
||||
else
|
||||
{ // Hexen doesn't have a backpack, foo!
|
||||
type = NULL;
|
||||
|
|
|
@ -926,7 +926,7 @@ void M_NotifyNewSave (const char *file, const char *title, bool okForQuicksave)
|
|||
//
|
||||
void M_DrawLoad (void)
|
||||
{
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
FTexture *title = TexMan["M_LOADG"];
|
||||
screen->DrawTexture (title,
|
||||
|
@ -952,7 +952,7 @@ void M_DrawLoad (void)
|
|||
//
|
||||
void M_DrawSaveLoadBorder (int x, int y, int len)
|
||||
{
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -1272,6 +1272,9 @@ void M_LoadGame (int choice)
|
|||
{
|
||||
if (netgame)
|
||||
{
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
M_StartMessage (GStrings("CLOADNET"), NULL, false);
|
||||
else
|
||||
M_StartMessage (GStrings("LOADNET"), NULL, false);
|
||||
return;
|
||||
}
|
||||
|
@ -1289,7 +1292,7 @@ void M_LoadGame (int choice)
|
|||
//
|
||||
void M_DrawSave()
|
||||
{
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
FTexture *title = TexMan["M_SAVEG"];
|
||||
screen->DrawTexture (title,
|
||||
|
@ -1401,6 +1404,9 @@ void M_QuickSave ()
|
|||
M_SaveGame (0);
|
||||
return;
|
||||
}
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
mysnprintf (tempstring, countof(tempstring), GStrings("CQSPROMPT"), quickSaveSlot->Title);
|
||||
else
|
||||
mysnprintf (tempstring, countof(tempstring), GStrings("QSPROMPT"), quickSaveSlot->Title);
|
||||
strcpy (savegamestring, quickSaveSlot->Title);
|
||||
M_StartMessage (tempstring, M_QuickSaveResponse, true);
|
||||
|
@ -1425,6 +1431,9 @@ void M_QuickLoad ()
|
|||
{
|
||||
if (netgame)
|
||||
{
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
M_StartMessage (GStrings("CQLOADNET"), NULL, false);
|
||||
else
|
||||
M_StartMessage (GStrings("QLOADNET"), NULL, false);
|
||||
return;
|
||||
}
|
||||
|
@ -1437,6 +1446,9 @@ void M_QuickLoad ()
|
|||
M_LoadGame (0);
|
||||
return;
|
||||
}
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
mysnprintf (tempstring, countof(tempstring), GStrings("CQLPROMPT"), quickSaveSlot->Title);
|
||||
else
|
||||
mysnprintf (tempstring, countof(tempstring), GStrings("QLPROMPT"), quickSaveSlot->Title);
|
||||
M_StartMessage (tempstring, M_QuickLoadResponse, true);
|
||||
}
|
||||
|
@ -1499,7 +1511,7 @@ void M_DrawReadThis ()
|
|||
//
|
||||
void M_DrawMainMenu (void)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
screen->DrawTexture (TexMan["M_DOOM"], 94, 2, DTA_Clean, true, TAG_DONE);
|
||||
}
|
||||
|
@ -1542,9 +1554,9 @@ void M_DrawHereticMainMenu ()
|
|||
//
|
||||
void M_DrawNewGame(void)
|
||||
{
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
screen->DrawTexture (TexMan[gameinfo.gametype == GAME_Doom ? "M_NEWG" : "M_NGAME"], 96, 14, DTA_Clean, true, TAG_DONE);
|
||||
screen->DrawTexture (TexMan[gameinfo.gametype & GAME_DoomChex ? "M_NEWG" : "M_NGAME"], 96, 14, DTA_Clean, true, TAG_DONE);
|
||||
screen->DrawTexture (TexMan["M_SKILL"], 54, 38, DTA_Clean, true, TAG_DONE);
|
||||
}
|
||||
}
|
||||
|
@ -1553,12 +1565,15 @@ void M_NewGame(int choice)
|
|||
{
|
||||
if (netgame && !demoplayback)
|
||||
{
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
M_StartMessage (GStrings("CNEWGAME"), NULL, false);
|
||||
else
|
||||
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
||||
return;
|
||||
}
|
||||
|
||||
// Set up episode menu positioning
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
EpiDef.x = 48;
|
||||
EpiDef.y = 63;
|
||||
|
@ -1679,7 +1694,7 @@ static void M_DrawClassMenu ()
|
|||
if (ClassMenuDef.numitems > 4 && gameinfo.gametype & GAME_Raven)
|
||||
tit_y = 2;
|
||||
|
||||
screen->DrawText (gameinfo.gametype == GAME_Doom ? CR_RED : CR_UNTRANSLATED,
|
||||
screen->DrawText (gameinfo.gametype & GAME_DoomChex ? CR_RED : CR_UNTRANSLATED,
|
||||
160 - BigFont->StringWidth (text)/2,
|
||||
tit_y,
|
||||
text, DTA_Clean, true, TAG_DONE);
|
||||
|
@ -1738,7 +1753,7 @@ static void DrawHexenSkillMenu()
|
|||
//
|
||||
void M_DrawEpisode ()
|
||||
{
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
screen->DrawTexture (TexMan["M_EPISOD"], 54, 38, DTA_Clean, true, TAG_DONE);
|
||||
}
|
||||
|
@ -1790,6 +1805,10 @@ void M_Episode (int choice)
|
|||
M_StartMessage(GStrings("SWSTRING"),NULL,false);
|
||||
//M_SetupNextMenu(&ReadDef);
|
||||
}
|
||||
else if (gameinfo.gametype == GAME_Chex)
|
||||
{
|
||||
M_StartMessage(GStrings("CSWSTRING"),NULL,false);
|
||||
}
|
||||
else
|
||||
{
|
||||
showSharewareMessage = 3*TICRATE;
|
||||
|
@ -1818,6 +1837,9 @@ static void SCClass (int option)
|
|||
{
|
||||
if (netgame)
|
||||
{
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
M_StartMessage (GStrings("CNEWGAME"), NULL, false);
|
||||
else
|
||||
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
||||
return;
|
||||
}
|
||||
|
@ -1846,6 +1868,9 @@ static void M_ChooseClass (int choice)
|
|||
{
|
||||
if (netgame)
|
||||
{
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
M_StartMessage (GStrings("CNEWGAME"), NULL, false);
|
||||
else
|
||||
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
||||
return;
|
||||
}
|
||||
|
@ -1899,10 +1924,16 @@ void M_EndGame(int choice)
|
|||
|
||||
if (netgame)
|
||||
{
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
M_StartMessage(GStrings("CNETEND"),NULL,false);
|
||||
else
|
||||
M_StartMessage(GStrings("NETEND"),NULL,false);
|
||||
return;
|
||||
}
|
||||
|
||||
if(gameinfo.gametype == GAME_Chex)
|
||||
M_StartMessage(GStrings("CENDGAME"),M_EndGameResponse,true);
|
||||
else
|
||||
M_StartMessage(GStrings("ENDGAME"),M_EndGameResponse,true);
|
||||
}
|
||||
|
||||
|
@ -1966,12 +1997,19 @@ void M_QuitGame (int choice)
|
|||
{
|
||||
// We pick index 0 which is language sensitive,
|
||||
// or one at random, between 1 and maximum number.
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
int quitmsg = gametic % (gameinfo.gametype == GAME_Doom ? NUM_QUITDOOMMESSAGES : NUM_QUITSTRIFEMESSAGES - 1);
|
||||
if (quitmsg != 0 || gameinfo.gametype == GAME_Strife)
|
||||
int quitmsg = 0;
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
quitmsg = gametic % NUM_QUITDOOMMESSAGES;
|
||||
else if (gameinfo.gametype == GAME_Strife)
|
||||
quitmsg = gametic % NUM_QUITSTRIFEMESSAGES - 1;
|
||||
else //Chex quest has 2 messages but one is more likely to show
|
||||
quitmsg = (gametic % NUM_QUITCHEXMESSAGES + 6) > NUM_QUITCHEXMESSAGES ? NUM_QUITCHEXMESSAGES - 1 : (gametic % NUM_QUITCHEXMESSAGES + 6);
|
||||
|
||||
if (quitmsg != 0 || gameinfo.gametype == GAME_Strife || gameinfo.gametype == GAME_Chex)
|
||||
{
|
||||
EndString.Format("QUITMSG%d", quitmsg + (gameinfo.gametype == GAME_Doom ? 0 : NUM_QUITDOOMMESSAGES + 1));
|
||||
EndString.Format("QUITMSG%d", quitmsg + (gameinfo.gametype == GAME_Doom ? 0 : (gameinfo.gametype == GAME_Chex ? NUM_QUITDOOMMESSAGES + NUM_QUITSTRIFEMESSAGES : NUM_QUITDOOMMESSAGES + 1)));
|
||||
EndString.Format("%s\n\n%s", GStrings(EndString), GStrings("DOSY"));
|
||||
}
|
||||
else
|
||||
|
@ -2061,7 +2099,7 @@ static void M_PlayerSetupDrawer ()
|
|||
EColorRange label, value;
|
||||
DWORD color;
|
||||
|
||||
if (!(gameinfo.gametype & (GAME_Doom|GAME_Strife)))
|
||||
if (!(gameinfo.gametype & (GAME_DoomStrifeChex)))
|
||||
{
|
||||
xo = 5;
|
||||
yo = 5;
|
||||
|
@ -2077,7 +2115,7 @@ static void M_PlayerSetupDrawer ()
|
|||
|
||||
// Draw title
|
||||
const char * text = GStrings("MNU_PLAYERSETUP");
|
||||
screen->DrawText (gameinfo.gametype == GAME_Doom ? CR_RED : CR_UNTRANSLATED,
|
||||
screen->DrawText (gameinfo.gametype & GAME_DoomChex ? CR_RED : CR_UNTRANSLATED,
|
||||
160 - BigFont->StringWidth (text)/2,
|
||||
15,
|
||||
text, DTA_Clean, true, TAG_DONE);
|
||||
|
@ -3210,7 +3248,7 @@ void M_Drawer ()
|
|||
if (color == CR_UNTRANSLATED)
|
||||
{
|
||||
// The default DBIGFONT is white but Doom's default should be red.
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
color = CR_RED;
|
||||
}
|
||||
|
@ -3241,12 +3279,12 @@ void M_Drawer ()
|
|||
screen->SetFont (ConFont);
|
||||
screen->DrawText (CR_RED, x - 16,
|
||||
currentMenu->y + itemOn*LINEHEIGHT +
|
||||
(!(gameinfo.gametype & (GAME_Doom|GAME_Strife)) ? 6 : -1), "\xd",
|
||||
(!(gameinfo.gametype & (GAME_DoomStrifeChex)) ? 6 : -1), "\xd",
|
||||
DTA_Clean, true, TAG_DONE);
|
||||
screen->SetFont (SmallFont);
|
||||
}
|
||||
}
|
||||
else if (gameinfo.gametype == GAME_Doom)
|
||||
else if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
screen->DrawTexture (TexMan[skullName[whichSkull]],
|
||||
x + SKULLXOFF, currentMenu->y - 5 + itemOn*LINEHEIGHT,
|
||||
|
@ -3398,7 +3436,7 @@ void M_Init (void)
|
|||
|
||||
atterm (M_Deinit);
|
||||
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
TopLevelMenu = currentMenu = &MainDef;
|
||||
if (gameinfo.gametype == GAME_Strife)
|
||||
|
@ -3429,10 +3467,10 @@ void M_Init (void)
|
|||
lastSaveSlot = NULL;
|
||||
strcpy (NewSaveNode.Title, "<New Save Game>");
|
||||
|
||||
underscore[0] = (gameinfo.gametype & (GAME_Doom|GAME_Strife)) ? '_' : '[';
|
||||
underscore[0] = (gameinfo.gametype & (GAME_DoomStrifeChex)) ? '_' : '[';
|
||||
underscore[1] = '\0';
|
||||
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
LINEHEIGHT = 16;
|
||||
}
|
||||
|
@ -3494,7 +3532,7 @@ void M_Init (void)
|
|||
ClassMenuDef.numitems = 1;
|
||||
}
|
||||
|
||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
||||
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||
{
|
||||
ClassMenuDef.x = 48;
|
||||
ClassMenuDef.y = 63;
|
||||
|
|
|
@ -605,6 +605,7 @@ static bool FindFreeName (FString &fullname, const char *extension)
|
|||
case GAME_Heretic: gamename = "Heretic_"; break;
|
||||
case GAME_Hexen: gamename = "Hexen_"; break;
|
||||
case GAME_Strife: gamename = "Strife_"; break;
|
||||
case GAME_Chex: gamename = "Chex_"; break;
|
||||
default: gamename = ""; break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1681,7 +1681,7 @@ void M_OptDrawer ()
|
|||
if (BigFont && CurrentMenu->texttitle)
|
||||
{
|
||||
screen->SetFont (BigFont);
|
||||
screen->DrawText (gameinfo.gametype == GAME_Doom ? CR_RED : CR_UNTRANSLATED,
|
||||
screen->DrawText (gameinfo.gametype & GAME_DoomChex ? CR_RED : CR_UNTRANSLATED,
|
||||
160-BigFont->StringWidth (CurrentMenu->texttitle)/2, 10,
|
||||
CurrentMenu->texttitle, DTA_Clean, true, TAG_DONE);
|
||||
screen->SetFont (SmallFont);
|
||||
|
@ -2208,7 +2208,7 @@ void M_OptResponder (event_t *ev)
|
|||
{
|
||||
maxitems = 15;
|
||||
}
|
||||
if (gameinfo.gametype != GAME_Doom)
|
||||
if (!(gameinfo.gametype & GAME_DoomChex))
|
||||
{
|
||||
maxitems -= 2;
|
||||
rowheight = 9;
|
||||
|
|
|
@ -82,6 +82,7 @@ xx(StrifePlayer)
|
|||
xx(FighterPlayer)
|
||||
xx(ClericPlayer)
|
||||
xx(MagePlayer)
|
||||
xx(ChexPlayer)
|
||||
xx(ChickenPlayer)
|
||||
xx(PigPlayer)
|
||||
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#include "r_things.h"
|
||||
#include "s_sound.h"
|
||||
#include "templates.h"
|
||||
#include "gi.h"
|
||||
|
||||
CVAR (Int, cl_rockettrails, 1, CVAR_ARCHIVE);
|
||||
|
||||
|
@ -55,7 +56,7 @@ CVAR (Int, cl_rockettrails, 1, CVAR_ARCHIVE);
|
|||
static int grey1, grey2, grey3, grey4, red, green, blue, yellow, black,
|
||||
red1, green1, blue1, yellow1, purple, purple1, white,
|
||||
rblue1, rblue2, rblue3, rblue4, orange, yorange, dred, grey5,
|
||||
maroon1, maroon2;
|
||||
maroon1, maroon2, blood1, blood2;
|
||||
|
||||
static const struct ColorList {
|
||||
int *color;
|
||||
|
@ -99,8 +100,13 @@ void P_InitEffects ()
|
|||
*(color->color) = ColorMatcher.Pick (color->r, color->g, color->b);
|
||||
color++;
|
||||
}
|
||||
|
||||
int kind = gameinfo.defaultbloodcolor;
|
||||
blood1 = ColorMatcher.Pick(RPART(kind), GPART(kind), BPART(kind));
|
||||
blood2 = ColorMatcher.Pick(RPART(kind)/3, GPART(kind)/3, BPART(kind)/3);
|
||||
}
|
||||
|
||||
|
||||
void P_ThinkParticles ()
|
||||
{
|
||||
int i;
|
||||
|
@ -373,8 +379,8 @@ void P_DrawSplash2 (int count, fixed_t x, fixed_t y, fixed_t z, angle_t angle, i
|
|||
switch (kind)
|
||||
{
|
||||
case 0: // Blood
|
||||
color1 = red;
|
||||
color2 = dred;
|
||||
color1 = blood1;
|
||||
color2 = blood2;
|
||||
break;
|
||||
case 1: // Gunshot
|
||||
color1 = grey3;
|
||||
|
|
|
@ -1412,7 +1412,7 @@ bool P_LookForPlayers (AActor *actor, INTBOOL allaround)
|
|||
return P_LookForEnemies (actor, allaround);
|
||||
}
|
||||
|
||||
if (!(gameinfo.gametype & (GAME_Doom|GAME_Strife)) &&
|
||||
if (!(gameinfo.gametype & (GAME_DoomStrifeChex)) &&
|
||||
!multiplayer &&
|
||||
players[0].health <= 0)
|
||||
{ // Single player game and player is dead; look for monsters
|
||||
|
|
|
@ -548,7 +548,7 @@ bool P_NewLookPlayers (AActor *actor, angle_t fov, fixed_t mindist, fixed_t maxd
|
|||
return P_NewLookEnemies (actor, fov, mindist, maxdist, chasegoal);
|
||||
}
|
||||
|
||||
if (!(gameinfo.gametype & (GAME_Doom|GAME_Strife)) &&
|
||||
if (!(gameinfo.gametype & (GAME_DoomStrifeChex)) &&
|
||||
!multiplayer &&
|
||||
players[0].health <= 0)
|
||||
{ // Single player game and player is dead; look for monsters
|
||||
|
|
|
@ -321,7 +321,7 @@ static int GibHealth(AActor *actor)
|
|||
return -abs(
|
||||
actor->GetClass()->Meta.GetMetaInt (
|
||||
AMETA_GibHealth,
|
||||
gameinfo.gametype == GAME_Doom ?
|
||||
gameinfo.gametype & GAME_DoomChex ?
|
||||
-actor->GetDefault()->health :
|
||||
-actor->GetDefault()->health/2));
|
||||
}
|
||||
|
|
|
@ -1955,7 +1955,7 @@ void P_ZMovement (AActor *mo)
|
|||
if (mo->z <= mo->floorz)
|
||||
{
|
||||
if ((mo->flags & MF_MISSILE) &&
|
||||
(gameinfo.gametype != GAME_Doom || !(mo->flags & MF_NOCLIP)))
|
||||
(!(gameinfo.gametype & GAME_DoomChex) || !(mo->flags & MF_NOCLIP)))
|
||||
{
|
||||
mo->z = mo->floorz;
|
||||
if (mo->flags2 & MF2_BOUNCETYPE)
|
||||
|
@ -2066,7 +2066,7 @@ void P_ZMovement (AActor *mo)
|
|||
mo->momz = -mo->momz;
|
||||
}
|
||||
if (mo->flags & MF_MISSILE &&
|
||||
(gameinfo.gametype != GAME_Doom || !(mo->flags & MF_NOCLIP)))
|
||||
(!(gameinfo.gametype & GAME_DoomChex) || !(mo->flags & MF_NOCLIP)))
|
||||
{
|
||||
if (mo->flags3 & MF3_CEILINGHUGGER)
|
||||
{
|
||||
|
@ -4151,7 +4151,7 @@ void P_SpawnBlood (fixed_t x, fixed_t y, fixed_t z, angle_t dir, int damage, AAc
|
|||
th = Spawn (bloodcls, x, y, z, ALLOW_REPLACE);
|
||||
th->momz = FRACUNIT*2;
|
||||
th->angle = dir;
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
th->tics -= pr_spawnblood() & 3;
|
||||
|
||||
|
@ -4165,7 +4165,7 @@ void P_SpawnBlood (fixed_t x, fixed_t y, fixed_t z, angle_t dir, int damage, AAc
|
|||
}
|
||||
|
||||
// Moved out of the blood actor so that replacing blood is easier
|
||||
if (gameinfo.gametype & GAME_DoomStrife)
|
||||
if (gameinfo.gametype & GAME_DoomStrifeChex)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Strife)
|
||||
{
|
||||
|
@ -5019,7 +5019,7 @@ void AActor::Crash()
|
|||
if (crashstate == NULL)
|
||||
{
|
||||
int gibhealth = -abs(GetClass()->Meta.GetMetaInt (AMETA_GibHealth,
|
||||
gameinfo.gametype == GAME_Doom ? -GetDefault()->health : -GetDefault()->health/2));
|
||||
gameinfo.gametype & GAME_DoomChex ? -GetDefault()->health : -GetDefault()->health/2));
|
||||
|
||||
if (health < gibhealth)
|
||||
{ // Extreme death
|
||||
|
|
|
@ -344,7 +344,7 @@ static void ParseOuter (FScanner &sc)
|
|||
break;
|
||||
|
||||
case OUT_IFDOOM:
|
||||
if (gameinfo.gametype != GAME_Doom)
|
||||
if (!(gameinfo.gametype & GAME_DoomChex))
|
||||
{
|
||||
ifskip = true;
|
||||
}
|
||||
|
|
|
@ -131,6 +131,11 @@ void SetupPlayerClasses ()
|
|||
newclass.Type = PClass::FindClass (NAME_StrifePlayer);
|
||||
PlayerClasses.Push (newclass);
|
||||
}
|
||||
else if (gameinfo.gametype == GAME_Chex)
|
||||
{
|
||||
newclass.Type = PClass::FindClass (NAME_ChexPlayer);
|
||||
PlayerClasses.Push (newclass);
|
||||
}
|
||||
}
|
||||
|
||||
CCMD (clearplayerclasses)
|
||||
|
@ -423,7 +428,10 @@ void APlayerPawn::Serialize (FArchive &arc)
|
|||
<< ScoreIcon
|
||||
<< InvFirst
|
||||
<< InvSel
|
||||
<< MorphWeapon;
|
||||
<< MorphWeapon
|
||||
<< RedDamageFade
|
||||
<< GreenDamageFade
|
||||
<< BlueDamageFade;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
@ -86,7 +86,7 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
if (flags & ML_RESERVED_ETERNITY)
|
||||
{
|
||||
|
|
|
@ -523,7 +523,7 @@ void R_InitSkins (void)
|
|||
|
||||
if (stricmp (sc.String, "heretic") == 0)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
transtype = PClass::FindClass (NAME_HereticPlayer);
|
||||
skins[i].othergame = true;
|
||||
|
@ -547,7 +547,7 @@ void R_InitSkins (void)
|
|||
transtype = PClass::FindClass (NAME_DoomPlayer);
|
||||
skins[i].othergame = true;
|
||||
}
|
||||
else if (gameinfo.gametype != GAME_Doom)
|
||||
else if (!(gameinfo.gametype & GAME_DoomChex))
|
||||
{
|
||||
remove = true;
|
||||
}
|
||||
|
@ -618,7 +618,7 @@ void R_InitSkins (void)
|
|||
// [GRB] Assume Doom skin by default
|
||||
if (!remove && basetype == NULL)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
basetype = transtype = PClass::FindClass (NAME_DoomPlayer);
|
||||
}
|
||||
|
@ -849,7 +849,7 @@ void R_InitSprites ()
|
|||
clearbufshort (zeroarray, MAXWIDTH, 0);
|
||||
|
||||
// [RH] Create a standard translation to map skins between Heretic and Doom
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype == GAME_DoomChex)
|
||||
{
|
||||
R_CreateSkinTranslation ("SPALHTIC");
|
||||
}
|
||||
|
|
|
@ -363,7 +363,7 @@ void R_InitTranslationTables ()
|
|||
}
|
||||
|
||||
// Create the standard translation tables
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
for (i = 0x70; i < 0x80; i++)
|
||||
{ // map green ramp to gray, brown, red
|
||||
|
@ -575,7 +575,7 @@ static void R_CreatePlayerTranslation (float h, float s, float v, FPlayerSkin *s
|
|||
bases = s;
|
||||
basev = v;
|
||||
|
||||
if (gameinfo.gametype == GAME_Doom || gameinfo.gametype == GAME_Strife)
|
||||
if (gameinfo.gametype & GAME_DoomStrifeChex)
|
||||
{
|
||||
// Build player sprite translation
|
||||
s -= 0.23f;
|
||||
|
|
|
@ -1267,8 +1267,8 @@ static void S_AddSNDINFO (int lump)
|
|||
}
|
||||
break;
|
||||
|
||||
case SI_IfDoom:
|
||||
if (gameinfo.gametype != GAME_Doom)
|
||||
case SI_IfDoom: //also Chex
|
||||
if (!(gameinfo.gametype & GAME_DoomChex))
|
||||
{
|
||||
skipToEndIf = true;
|
||||
}
|
||||
|
|
|
@ -153,6 +153,22 @@ static BYTE CheatStoneCold[] = { 's','t','o','n','e','c','o','l','d',255 };
|
|||
static BYTE CheatElvis[] = { 'e','l','v','i','s',255 };
|
||||
static BYTE CheatTopo[] = { 't','o','p','o',255 };
|
||||
|
||||
//[BL] Graf will probably get rid of this
|
||||
static BYTE CheatJoelKoenigs[] = { 'j','o','e','l','k','o','e','n','i','g','s',255 };
|
||||
static BYTE CheatDavidBrus[] = { 'd','a','v','i','d','b','r','u','s',255 };
|
||||
static BYTE CheatScottHolman[] = { 's','c','o','t','t','h','o','l','m','a','n',255 };
|
||||
static BYTE CheatMikeKoenigs[] = { 'm','i','k','e','k','o','e','n','i','g','s',255 };
|
||||
static BYTE CheatCharlesJacobi[] = { 'c','h','a','r','l','e','s','j','a','c','o','b','i',255 };
|
||||
static BYTE CheatAndrewBenson[] = { 'a','n','d','r','e','w','b','e','n','s','o','n',255 };
|
||||
static BYTE CheatDeanHyers[] = { 'd','e','a','n','h','y','e','r','s',255 };
|
||||
static BYTE CheatMaryBregi[] = { 'm','a','r','y','b','r','e','g','i',255 };
|
||||
static BYTE CheatAllen[] = { 'a','l','l','e','n',255 };
|
||||
static BYTE CheatDigitalCafe[] = { 'd','i','g','i','t','a','l','c','a','f','e',255 };
|
||||
static BYTE CheatJoshuaStorms[] = { 'j','o','s','h','u','a','s','t','o','r','m','s',255 };
|
||||
static BYTE CheatLeeSnyder[] = { 'l','e','e','s','n','y','d','e','r',0,0,255 };
|
||||
static BYTE CheatKimHyers[] = { 'k','i','m','h','y','e','r','s',255 };
|
||||
static BYTE CheatShrrill[] = { 's','h','r','r','i','l','l',255 };
|
||||
|
||||
static cheatseq_t DoomCheats[] =
|
||||
{
|
||||
{ CheatMus, 0, 1, 0, {0,0}, Cht_Music },
|
||||
|
@ -246,6 +262,25 @@ static cheatseq_t StrifeCheats[] =
|
|||
{ CheatLego, 0, 0, 0, {CHT_LEGO,0}, Cht_Generic },
|
||||
};
|
||||
|
||||
static cheatseq_t ChexCheats[] =
|
||||
{
|
||||
{ CheatMus, 0, 1, 0, {0,0}, Cht_Music },
|
||||
{ CheatKimHyers, 0, 1, 0, {0,0}, Cht_MyPos },
|
||||
{ CheatShrrill, 0, 0, 0, {0,0}, Cht_AutoMap },
|
||||
{ CheatDavidBrus, 0, 0, 0, {CHT_IDDQD,0}, Cht_Generic },
|
||||
{ CheatMikeKoenigs, 0, 0, 0, {CHT_IDKFA,0}, Cht_Generic },
|
||||
{ CheatScottHolman, 0, 0, 0, {CHT_IDFA,0}, Cht_Generic },
|
||||
{ CheatCharlesJacobi, 0, 0, 0, {CHT_NOCLIP,0}, Cht_Generic },
|
||||
{ CheatAndrewBenson, 0, 0, 0, {CHT_BEHOLDV,0}, Cht_Generic },
|
||||
{ CheatDeanHyers, 0, 0, 0, {CHT_BEHOLDS,0}, Cht_Generic },
|
||||
{ CheatMaryBregi, 0, 0, 0, {CHT_BEHOLDI,0}, Cht_Generic },
|
||||
{ CheatAllen, 0, 0, 0, {CHT_BEHOLDR,0}, Cht_Generic },
|
||||
{ CheatDigitalCafe, 0, 0, 0, {CHT_BEHOLDA,0}, Cht_Generic },
|
||||
{ CheatJoshuaStorms, 0, 0, 0, {CHT_BEHOLDL,0}, Cht_Generic },
|
||||
{ CheatJoelKoenigs, 0, 0, 0, {CHT_CHAINSAW,0}, Cht_Generic },
|
||||
{ CheatLeeSnyder, 0, 0, 0, {0,0}, Cht_ChangeLevel }
|
||||
};
|
||||
|
||||
extern bool CheckCheatmode ();
|
||||
|
||||
// Respond to keyboard input events, intercept cheats.
|
||||
|
@ -282,6 +317,11 @@ bool ST_Responder (event_t *ev)
|
|||
numcheats = countof(StrifeCheats);
|
||||
break;
|
||||
|
||||
case GAME_Chex:
|
||||
cheats = ChexCheats;
|
||||
numcheats = countof(ChexCheats);
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
// This file was automatically generated by the
|
||||
// updaterevision tool. Do not edit by hand.
|
||||
|
||||
#define ZD_SVN_REVISION_STRING "1183"
|
||||
#define ZD_SVN_REVISION_NUMBER 1183
|
||||
#define ZD_SVN_REVISION_STRING "1190"
|
||||
#define ZD_SVN_REVISION_NUMBER 1190
|
||||
|
|
|
@ -816,6 +816,12 @@ static int ParseMorphStyle (FScanner &sc)
|
|||
//==========================================================================
|
||||
static void ActorSkipSuper (FScanner &sc, AActor *defaults, Baggage &bag)
|
||||
{
|
||||
if (bag.Info->Class->IsDescendantOf(RUNTIME_CLASS(AInventory)))
|
||||
{
|
||||
sc.ScriptMessage("'skip_super' in definition of inventory item igmored.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy (defaults, GetDefault<AActor>(), sizeof(AActor));
|
||||
if (bag.DropItemList != NULL)
|
||||
{
|
||||
|
@ -851,6 +857,10 @@ static void ActorGame (FScanner &sc, AActor *defaults, Baggage &bag)
|
|||
{
|
||||
bag.Info->GameFilter |= GAME_Strife;
|
||||
}
|
||||
else if (sc.Compare ("Chex"))
|
||||
{
|
||||
bag.Info->GameFilter |= GAME_Chex;
|
||||
}
|
||||
else if (sc.Compare ("Any"))
|
||||
{
|
||||
bag.Info->GameFilter = GAME_Any;
|
||||
|
@ -1934,8 +1944,8 @@ static void InventoryPickupflash (FScanner &sc, AInventory *defaults, Baggage &b
|
|||
static void InventoryPickupmsg (FScanner &sc, AInventory *defaults, Baggage &bag)
|
||||
{
|
||||
// allow game specific pickup messages
|
||||
const char * games[] = {"Doom", "Heretic", "Hexen", "Raven", "Strife", NULL};
|
||||
int gamemode[]={GAME_Doom, GAME_Heretic, GAME_Hexen, GAME_Raven, GAME_Strife};
|
||||
const char * games[] = {"Doom", "Heretic", "Hexen", "Raven", "Strife", "Chex", NULL};
|
||||
int gamemode[]={GAME_Doom, GAME_Heretic, GAME_Hexen, GAME_Raven, GAME_Strife, GAME_Chex};
|
||||
|
||||
sc.MustGetString();
|
||||
int game = sc.MatchString(games);
|
||||
|
@ -2480,8 +2490,6 @@ static void PlayerCrouchSprite (FScanner &sc, APlayerPawn *defaults, Baggage &ba
|
|||
//==========================================================================
|
||||
static void PlayerDmgScreenColor (FScanner &sc, APlayerPawn *defaults, Baggage &bag)
|
||||
{
|
||||
defaults->HasDamageFade = true;
|
||||
|
||||
if (sc.CheckNumber ())
|
||||
{
|
||||
sc.MustGetNumber ();
|
||||
|
|
|
@ -286,7 +286,7 @@ FFont::FFont (const char *name, const char *nametemplate, int first, int count,
|
|||
BYTE usedcolors[256], identity[256];
|
||||
double *luminosity;
|
||||
int maxyoffs;
|
||||
bool doomtemplate = gameinfo.gametype == GAME_Doom ? strncmp (nametemplate, "STCFN", 5) == 0 : false;
|
||||
bool doomtemplate = gameinfo.gametype & GAME_DoomChex ? strncmp (nametemplate, "STCFN", 5) == 0 : false;
|
||||
bool stcfn121 = false;
|
||||
|
||||
Chars = new CharData[count];
|
||||
|
@ -2092,7 +2092,7 @@ void V_InitFonts()
|
|||
}
|
||||
if (!(BigFont=FFont::FindFont("BigFont")))
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
BigFont = new FSingleLumpFont ("BigFont", Wads.GetNumForName ("DBIGFONT"));
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
// SAVESIG should match SAVEVER.
|
||||
|
||||
// MINSAVEVER is the minimum level snapshot version that can be loaded.
|
||||
#define MINSAVEVER 1181
|
||||
#define MINSAVEVER 1190
|
||||
|
||||
#if ZD_SVN_REVISION_NUMBER < MINSAVEVER
|
||||
// Never write a savegame with a version lower than what we need
|
||||
|
|
|
@ -953,12 +953,12 @@ int FWadCollection::CheckNumForFullName (const char *name, int wadnum)
|
|||
return CheckNumForFullName (name);
|
||||
}
|
||||
|
||||
i = FirstLumpIndex[MakeKey (name) % NumLumps];
|
||||
i = FirstLumpIndex_FullName[MakeKey (name) % NumLumps];
|
||||
|
||||
while (i != NULL_INDEX &&
|
||||
(stricmp(name, LumpInfo[i].fullname) || LumpInfo[i].wadnum != wadnum))
|
||||
{
|
||||
i = NextLumpIndex[i];
|
||||
i = NextLumpIndex_FullName[i];
|
||||
}
|
||||
|
||||
return i != NULL_INDEX ? i : -1;
|
||||
|
@ -1412,7 +1412,7 @@ void FWadCollection::RenameSprites (int startlump)
|
|||
|
||||
// When not playing Doom rename all BLOD sprites to BLUD so that
|
||||
// the same blood states can be used everywhere
|
||||
if (gameinfo.gametype != GAME_Doom)
|
||||
if (!(gameinfo.gametype & GAME_DoomChex))
|
||||
{
|
||||
if (*(DWORD *)LumpInfo[i].name == MAKE_ID('B', 'L', 'O', 'D'))
|
||||
{
|
||||
|
|
|
@ -64,8 +64,8 @@ CVAR (Bool, wi_noautostartmap, false, CVAR_ARCHIVE)
|
|||
void WI_loadData ();
|
||||
void WI_unloadData ();
|
||||
|
||||
#define NEXTSTAGE (gameinfo.gametype == GAME_Doom ? "weapons/rocklx" : "doors/dr1_clos")
|
||||
#define PASTSTATS (gameinfo.gametype == GAME_Doom ? "weapons/shotgr" : "plats/pt1_stop")
|
||||
#define NEXTSTAGE (gameinfo.gametype & GAME_DoomChex ? "weapons/rocklx" : "doors/dr1_clos")
|
||||
#define PASTSTATS (gameinfo.gametype & GAME_DoomChex ? "weapons/shotgr" : "plats/pt1_stop")
|
||||
|
||||
// GLOBAL LOCATIONS
|
||||
#define WI_TITLEY 2
|
||||
|
@ -314,6 +314,7 @@ void WI_LoadBackground(bool isenterpic)
|
|||
lumpname = NULL;
|
||||
switch(gameinfo.gametype)
|
||||
{
|
||||
case GAME_Chex:
|
||||
case GAME_Doom:
|
||||
if (gamemode != commercial)
|
||||
{
|
||||
|
@ -688,14 +689,14 @@ static void WI_DrawCharPatch (FTexture *patch, int x, int y)
|
|||
{
|
||||
screen->DrawTexture (patch, x, y,
|
||||
DTA_Clean, true,
|
||||
DTA_ShadowAlpha, (gameinfo.gametype == GAME_Doom) ? 0 : FRACUNIT/2,
|
||||
DTA_ShadowAlpha, (gameinfo.gametype & GAME_DoomChex) ? 0 : FRACUNIT/2,
|
||||
TAG_DONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
screen->DrawTexture (patch, x, y,
|
||||
DTA_Clean, true,
|
||||
DTA_ShadowAlpha, (gameinfo.gametype == GAME_Doom) ? 0 : FRACUNIT/2,
|
||||
DTA_ShadowAlpha, (gameinfo.gametype & GAME_DoomChex) ? 0 : FRACUNIT/2,
|
||||
DTA_Translation, BigFont->GetColorTranslation (CR_UNTRANSLATED), // otherwise it doesn't look good in Strife!
|
||||
TAG_DONE);
|
||||
}
|
||||
|
@ -779,7 +780,7 @@ void WI_drawLF ()
|
|||
if (y < NG_STATSY - screen->Font->GetHeight()*3/4)
|
||||
{
|
||||
// don't draw 'finished' if the level name is too high!
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
screen->DrawTexture(finished, 160 - finished->GetWidth()/2, y, DTA_Clean, true, TAG_DONE);
|
||||
}
|
||||
|
@ -809,7 +810,7 @@ void WI_drawEL ()
|
|||
|
||||
// draw "entering"
|
||||
// be careful with the added height so that it works for oversized 'entering' patches!
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
screen->DrawTexture(entering, (SCREENWIDTH - entering->GetWidth() * CleanXfac) / 2, y * CleanYfac, DTA_CleanNoMove, true, TAG_DONE);
|
||||
y += entering->GetHeight() + screen->Font->GetHeight()/4;
|
||||
|
@ -1557,7 +1558,7 @@ void WI_drawNetgameStats ()
|
|||
|
||||
WI_drawLF();
|
||||
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
// draw stat titles (top line)
|
||||
screen->DrawTexture (kills, NG_STATSX+NG_SPACINGX-kills->GetWidth(), NG_STATSY, DTA_Clean, true, TAG_DONE);
|
||||
|
@ -1675,7 +1676,7 @@ void WI_updateStats ()
|
|||
{
|
||||
WI_updateAnimatedBack ();
|
||||
|
||||
if ((gameinfo.gametype != GAME_Doom || acceleratestage)
|
||||
if ((!(gameinfo.gametype & GAME_DoomChex) || acceleratestage)
|
||||
&& sp_state != 10)
|
||||
{
|
||||
if (acceleratestage)
|
||||
|
@ -1694,7 +1695,7 @@ void WI_updateStats ()
|
|||
|
||||
if (sp_state == 2)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
cnt_kills[0] += 2;
|
||||
|
||||
|
@ -1710,7 +1711,7 @@ void WI_updateStats ()
|
|||
}
|
||||
else if (sp_state == 4)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
cnt_items[0] += 2;
|
||||
|
||||
|
@ -1726,7 +1727,7 @@ void WI_updateStats ()
|
|||
}
|
||||
else if (sp_state == 6)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
cnt_secret[0] += 2;
|
||||
|
||||
|
@ -1742,7 +1743,7 @@ void WI_updateStats ()
|
|||
}
|
||||
else if (sp_state == 8)
|
||||
{
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
|
@ -1800,7 +1801,7 @@ void WI_drawStats (void)
|
|||
|
||||
WI_drawLF();
|
||||
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
screen->DrawTexture (kills, SP_STATSX, SP_STATSY, DTA_Clean, true, TAG_DONE);
|
||||
WI_drawPercent (320 - SP_STATSX, SP_STATSY, cnt_kills[0], wbs->maxkills);
|
||||
|
@ -1956,7 +1957,7 @@ void WI_loadData(void)
|
|||
int i;
|
||||
char name[9];
|
||||
|
||||
if (gameinfo.gametype == GAME_Doom)
|
||||
if (gameinfo.gametype & GAME_DoomChex)
|
||||
{
|
||||
wiminus = TexMan["WIMINUS"]; // minus sign
|
||||
percent = TexMan["WIPCNT"]; // percent sign
|
||||
|
|
|
@ -41,6 +41,9 @@
|
|||
#include <richedit.h>
|
||||
#include <winuser.h>
|
||||
#include <tlhelp32.h>
|
||||
#ifndef _M_IX86
|
||||
#include <winternl.h>
|
||||
#endif
|
||||
#ifndef __GNUC__
|
||||
#include <dbghelp.h>
|
||||
#endif
|
||||
|
@ -142,6 +145,11 @@ typedef BOOL (WINAPI *WRITEDUMP) (HANDLE, DWORD, HANDLE, int,
|
|||
|
||||
// TYPES -------------------------------------------------------------------
|
||||
|
||||
#ifdef _M_X64
|
||||
typedef PRUNTIME_FUNCTION (WINAPI *RTLLOOKUPFUNCTIONENTRY)
|
||||
(ULONG64 ControlPc, PULONG64 ImageBase, void *HistoryTable);
|
||||
#endif
|
||||
|
||||
// Damn Microsoft for doing Get/SetWindowLongPtr half-assed. Instead of
|
||||
// giving them proper prototypes under Win32, they are just macros for
|
||||
// Get/SetWindowLong, meaning they take LONGs and not LONG_PTRs.
|
||||
|
@ -235,8 +243,8 @@ static void AddZipFile (HANDLE ziphandle, TarFile *whichfile, short dosdate, sho
|
|||
static HANDLE CreateTempFile ();
|
||||
|
||||
static void DumpBytes (HANDLE file, BYTE *address);
|
||||
static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code);
|
||||
static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD *jump);
|
||||
static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code, CONTEXT *ctxt);
|
||||
static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD *jump, CONTEXT *ctxt);
|
||||
static void AddToolHelp (HANDLE file);
|
||||
|
||||
static HANDLE WriteTextReport ();
|
||||
|
@ -650,9 +658,9 @@ HANDLE WriteTextReport ()
|
|||
if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
|
||||
{
|
||||
j += mysnprintf (CrashSummary + j, countof(CrashSummary) - j,
|
||||
" - tried to %s address %08lX",
|
||||
" - tried to %s address %p",
|
||||
CrashPointers.ExceptionRecord->ExceptionInformation[0] ? "write" : "read",
|
||||
CrashPointers.ExceptionRecord->ExceptionInformation[1]);
|
||||
(void *)CrashPointers.ExceptionRecord->ExceptionInformation[1]);
|
||||
}
|
||||
}
|
||||
CrashSummary[j++] = ')';
|
||||
|
@ -741,17 +749,21 @@ HANDLE WriteTextReport ()
|
|||
|
||||
AddToolHelp (file);
|
||||
|
||||
#ifdef _M_IX86
|
||||
Writef (file, "\r\nBytes near EIP:");
|
||||
#else
|
||||
Writef (file, "\r\nBytes near RIP:");
|
||||
#endif
|
||||
DumpBytes (file, (BYTE *)CrashPointers.ExceptionRecord->ExceptionAddress-16);
|
||||
|
||||
if (ctxt->ContextFlags & CONTEXT_CONTROL)
|
||||
{
|
||||
#ifndef _M_X64
|
||||
AddStackInfo (file, (void *)(size_t)CrashPointers.ContextRecord->Esp,
|
||||
CrashPointers.ExceptionRecord->ExceptionCode);
|
||||
CrashPointers.ExceptionRecord->ExceptionCode, ctxt);
|
||||
#else
|
||||
AddStackInfo (file, (void *)CrashPointers.ContextRecord->Rsp,
|
||||
CrashPointers.ExceptionRecord->ExceptionCode);
|
||||
CrashPointers.ExceptionRecord->ExceptionCode, ctxt);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -814,7 +826,7 @@ static void AddToolHelp (HANDLE file)
|
|||
|
||||
if (thread.th32ThreadID == DbgThreadID)
|
||||
{
|
||||
Writef (file, " at %08x*", CrashAddress);
|
||||
Writef (file, " at %p*", CrashAddress);
|
||||
}
|
||||
Writef (file, "\r\n");
|
||||
}
|
||||
|
@ -829,7 +841,7 @@ static void AddToolHelp (HANDLE file)
|
|||
{
|
||||
do
|
||||
{
|
||||
Writef (file, "%08x - %08x %c%s\r\n",
|
||||
Writef (file, "%p - %p %c%s\r\n",
|
||||
module.modBaseAddr, module.modBaseAddr + module.modBaseSize - 1,
|
||||
module.modBaseAddr <= CrashPointers.ExceptionRecord->ExceptionAddress &&
|
||||
module.modBaseAddr + module.modBaseSize > CrashPointers.ExceptionRecord->ExceptionAddress
|
||||
|
@ -849,12 +861,16 @@ static void AddToolHelp (HANDLE file)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
||||
static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code, CONTEXT *ctxt)
|
||||
{
|
||||
DWORD *addr = (DWORD *)dumpaddress, *jump;
|
||||
DWORD *topOfStack = GetTopOfStack (dumpaddress);
|
||||
BYTE peekb;
|
||||
#ifdef _M_IX86
|
||||
DWORD peekd;
|
||||
#else
|
||||
QWORD peekq;
|
||||
#endif
|
||||
|
||||
jump = topOfStack;
|
||||
if (code == EXCEPTION_STACK_OVERFLOW)
|
||||
|
@ -866,7 +882,7 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
|||
}
|
||||
}
|
||||
|
||||
StackWalk (file, dumpaddress, topOfStack, jump);
|
||||
StackWalk (file, dumpaddress, topOfStack, jump, ctxt);
|
||||
|
||||
Writef (file, "\r\nStack Contents:\r\n");
|
||||
DWORD *scan;
|
||||
|
@ -881,6 +897,8 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
|||
Writef (file, "\r\n . . . Snip . . .\r\n\r\n");
|
||||
}
|
||||
|
||||
Writef (file, "%p:", scan);
|
||||
#ifdef _M_IX86
|
||||
if (topOfStack - scan < 4)
|
||||
{
|
||||
max = topOfStack - scan;
|
||||
|
@ -890,7 +908,6 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
|||
max = 4;
|
||||
}
|
||||
|
||||
Writef (file, "%p:", scan);
|
||||
for (i = 0; i < max; ++i)
|
||||
{
|
||||
if (!SafeReadMemory (&scan[i], &peekd, 4))
|
||||
|
@ -903,8 +920,31 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
|||
{
|
||||
Writef (file, " ");
|
||||
}
|
||||
#else
|
||||
if ((QWORD *)topOfStack - (QWORD *)scan < 2)
|
||||
{
|
||||
max = (QWORD *)topOfStack - (QWORD *)scan;
|
||||
}
|
||||
else
|
||||
{
|
||||
max = 2;
|
||||
}
|
||||
|
||||
for (i = 0; i < max; ++i)
|
||||
{
|
||||
if (!SafeReadMemory (&scan[i], &peekq, 8))
|
||||
{
|
||||
break;
|
||||
}
|
||||
Writef (file, " %016x", peekq);
|
||||
}
|
||||
if (i < 2)
|
||||
{
|
||||
Writef (file, " ");
|
||||
for (i = 0; i < max*4; ++i)
|
||||
}
|
||||
#endif
|
||||
Writef (file, " ");
|
||||
for (i = 0; i < int(max*sizeof(void*)); ++i)
|
||||
{
|
||||
if (!SafeReadMemory ((BYTE *)scan + i, &peekb, 1))
|
||||
{
|
||||
|
@ -916,9 +956,12 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef _M_IX86
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// StackWalk
|
||||
// Win32 version
|
||||
//
|
||||
// Lists a possible call trace for the crashing thread to the text report.
|
||||
// This is not very specific and just lists any pointers into the
|
||||
|
@ -926,7 +969,7 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD *jump)
|
||||
static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD *jump, CONTEXT *ctxt)
|
||||
{
|
||||
DWORD *addr = (DWORD *)dumpaddress;
|
||||
|
||||
|
@ -947,7 +990,6 @@ static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD
|
|||
Writef (file, "\r\n\r\n . . . . Snip . . . .\r\n");
|
||||
}
|
||||
|
||||
#ifndef _M_X64
|
||||
DWORD_PTR code;
|
||||
|
||||
if (SafeReadMemory (scan, &code, sizeof(code)) &&
|
||||
|
@ -1106,11 +1148,133 @@ static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
Writef (file, "\r\n");
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// StackWalk
|
||||
// Win64 version
|
||||
//
|
||||
// Walks the stack for the crashing thread and dumps the trace to the text
|
||||
// report. Unlike the Win32 version, Win64 provides facilities for
|
||||
// doing a 100% exact walk.
|
||||
//
|
||||
// See http://www.nynaeve.net/?p=113 for more information, and
|
||||
// http://www.nynaeve.net/Code/StackWalk64.cpp in particular.
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD *jump, CONTEXT *ctxt)
|
||||
{
|
||||
RTLLOOKUPFUNCTIONENTRY RtlLookupFunctionEntry;
|
||||
HMODULE kernel;
|
||||
CONTEXT context;
|
||||
KNONVOLATILE_CONTEXT_POINTERS nv_context;
|
||||
PRUNTIME_FUNCTION function;
|
||||
PVOID handler_data;
|
||||
ULONG64 establisher_frame;
|
||||
ULONG64 image_base;
|
||||
|
||||
Writef (file, "\r\nCall trace:\r\n rip=%p <- Here it dies.\r\n", CrashAddress);
|
||||
|
||||
kernel = GetModuleHandle("kernel32.dll");
|
||||
if (kernel == NULL || NULL == (RtlLookupFunctionEntry =
|
||||
(RTLLOOKUPFUNCTIONENTRY)GetProcAddress(kernel, "RtlLookupFunctionEntry")))
|
||||
{
|
||||
Writef (file, " Unavailable: Could not get address of RtlLookupFunctionEntry\r\n");
|
||||
return;
|
||||
}
|
||||
// Get the caller's context
|
||||
context = *ctxt;
|
||||
|
||||
// This unwind loop intentionally skips the first call frame, as it
|
||||
// shall correspond to the call to StackTrace64, which we aren't
|
||||
// interested in.
|
||||
|
||||
for (ULONG frame = 0; ; ++frame)
|
||||
{
|
||||
// Try to look up unwind metadata for the current function.
|
||||
function = RtlLookupFunctionEntry(context.Rip, &image_base, NULL);
|
||||
memset(&nv_context, 0, sizeof(nv_context));
|
||||
if (function == NULL)
|
||||
{
|
||||
// If we don't have a RUNTIME_FUNCTION, then we've encountered
|
||||
// a leaf function. Adjust the stack appropriately.
|
||||
context.Rip = (ULONG64)(*(PULONG64)context.Rsp);
|
||||
context.Rsp += 8;
|
||||
Writef(file, " Leaf function\r\n\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Note that there is not a one-to-one correspondance between
|
||||
// runtime functions and source functions. One source function
|
||||
// may be broken into multiple runtime functions. This loop walks
|
||||
// backward from the current runtime function for however many
|
||||
// consecutive runtime functions precede it. There is a slight
|
||||
// chance that this will walk across different source functions.
|
||||
// (Or maybe not, depending on whether or not the compiler
|
||||
// guarantees that there will be empty space between functions;
|
||||
// it looks like VC++ might.) In practice, this seems to work
|
||||
// quite well for identifying the exact address to search for in
|
||||
// a map file to determine the function name.
|
||||
|
||||
PRUNTIME_FUNCTION function2 = function;
|
||||
ULONG64 base = image_base;
|
||||
|
||||
while (function2 != NULL)
|
||||
{
|
||||
Writef(file, " Function range: %p -> %p\r\n",
|
||||
(void *)(base + function2->BeginAddress),
|
||||
(void *)(base + function2->EndAddress));
|
||||
function2 = RtlLookupFunctionEntry(base + function2->BeginAddress - 1, &base, NULL);
|
||||
}
|
||||
Writef(file, "\r\n");
|
||||
|
||||
// Use RtlVirtualUnwind to execute the unwind for us.
|
||||
RtlVirtualUnwind(0/*UNW_FLAG_NHANDLER*/, image_base, context.Rip,
|
||||
function, &context, &handler_data, &establisher_frame,
|
||||
&nv_context);
|
||||
}
|
||||
// If we reach a RIP of zero, this means we've walked off the end of
|
||||
// the call stack and are done.
|
||||
if (context.Rip == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// Display the context. Note that we don't bother showing the XMM
|
||||
// context, although we have the nonvolatile portion of it.
|
||||
Writef(file, " FRAME %02d:\r\n rip=%p rsp=%p rbp=%p\r\n",
|
||||
frame, context.Rip, context.Rsp, context.Rbp);
|
||||
Writef(file, " r12=%p r13=%p r14=%p\r\n"
|
||||
" rdi=%p rsi=%p rbx=%p\r\n",
|
||||
context.R12, context.R13, context.R14,
|
||||
context.Rdi, context.Rsi, context.Rbx);
|
||||
|
||||
static const char reg_names[16][4] =
|
||||
{
|
||||
"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
|
||||
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
|
||||
};
|
||||
|
||||
// If we have stack-based register stores, then display them here.
|
||||
for (int i = 0; i < 16; ++i)
|
||||
{
|
||||
if (nv_context.IntegerContext[i])
|
||||
{
|
||||
Writef(file, " -> '%s' saved on stack at %p (=> %p)\r\n",
|
||||
reg_names[i], nv_context.IntegerContext[i], *nv_context.IntegerContext[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// DumpBytes
|
||||
|
@ -1121,7 +1285,7 @@ static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD
|
|||
|
||||
static void DumpBytes (HANDLE file, BYTE *address)
|
||||
{
|
||||
char line[64*3], *line_p = line;
|
||||
char line[68*3], *line_p = line;
|
||||
DWORD len;
|
||||
BYTE peek;
|
||||
|
||||
|
|
|
@ -1092,7 +1092,7 @@ void ST_Endoom()
|
|||
if (showendoom == 0) exit(0);
|
||||
|
||||
int endoom_lump = Wads.CheckNumForName (
|
||||
gameinfo.gametype == GAME_Doom? "ENDOOM" :
|
||||
gameinfo.gametype & GAME_DoomChex ? "ENDOOM" :
|
||||
gameinfo.gametype == GAME_Heretic? "ENDTEXT" :
|
||||
gameinfo.gametype == GAME_Strife? "ENDSTRF" : NULL);
|
||||
|
||||
|
|
|
@ -161,7 +161,7 @@ BEGIN
|
|||
IDD_CRASHDIALOG, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 4
|
||||
RIGHTMARGIN, 401
|
||||
RIGHTMARGIN, 408
|
||||
TOPMARGIN, 4
|
||||
BOTTOMMARGIN, 303
|
||||
HORZGUIDE, 49
|
||||
|
@ -179,7 +179,7 @@ BEGIN
|
|||
IDD_CRASHDETAILS, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 384
|
||||
RIGHTMARGIN, 392
|
||||
TOPMARGIN, 7
|
||||
HORZGUIDE, 76
|
||||
END
|
||||
|
@ -374,19 +374,19 @@ BEGIN
|
|||
PUSHBUTTON "Select None",IDC_SELECTNONE,320,31,50,14
|
||||
END
|
||||
|
||||
IDD_CRASHDIALOG DIALOGEX 0, 0, 405, 308
|
||||
IDD_CRASHDIALOG DIALOGEX 0, 0, 415, 308
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_CONTROLPARENT | WS_EX_APPWINDOW
|
||||
CAPTION "ZDoom Very Fatal Error"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x0
|
||||
BEGIN
|
||||
CONTROL "",IDC_CRASHTAB,"SysTabControl32",WS_TABSTOP,4,4,397,280
|
||||
PUSHBUTTON "&Send Error Report",IDYES,139,289,91,14,WS_DISABLED
|
||||
PUSHBUTTON "Save Report to Disk...",IDC_SAVEREPORT,235,289,91,14
|
||||
PUSHBUTTON "&Discard Report",IDNO,331,289,70,14
|
||||
CONTROL "",IDC_CRASHTAB,"SysTabControl32",WS_TABSTOP,4,4,404,280
|
||||
PUSHBUTTON "&Send Error Report",IDYES,146,289,91,14,WS_DISABLED
|
||||
PUSHBUTTON "Save Report to Disk...",IDC_SAVEREPORT,242,289,91,14
|
||||
PUSHBUTTON "&Discard Report",IDNO,338,289,70,14
|
||||
END
|
||||
|
||||
IDD_CRASHOVERVIEW DIALOGEX 1, 13, 391, 264
|
||||
IDD_CRASHOVERVIEW DIALOGEX 1, 13, 400, 264
|
||||
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
|
@ -400,15 +400,15 @@ BEGIN
|
|||
LTEXT "Static",IDC_CRASHSUMMARY,14,233,363,20
|
||||
END
|
||||
|
||||
IDD_CRASHDETAILS DIALOGEX 0, 0, 391, 164
|
||||
IDD_CRASHDETAILS DIALOGEX 0, 0, 400, 164
|
||||
STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
LTEXT "The error report contains these files:",IDC_STATIC,7,5,119,8
|
||||
LTEXT "The selected file contains this information:",IDC_STATIC,7,74,136,8
|
||||
RTEXT "Static",IDC_CRASHFILESIZE,329,74,55,8
|
||||
LISTBOX IDC_CRASHFILES,7,15,377,53,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "",IDC_CRASHFILECONTENTS,"RichEdit20A",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,83,377,174
|
||||
RTEXT "Static",IDC_CRASHFILESIZE,337,74,55,8
|
||||
LISTBOX IDC_CRASHFILES,7,15,385,53,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "",IDC_CRASHFILECONTENTS,"RichEdit20A",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,83,385,174
|
||||
END
|
||||
|
||||
IDD_BOING DIALOGEX 0, 0, 187, 196
|
||||
|
|
|
@ -26,6 +26,7 @@ Actor PlayerPawn : Actor native
|
|||
Player.SideMove 1,1
|
||||
Player.ColorRange 0,0
|
||||
Player.SoundClass "player"
|
||||
Player.DamageScreenColor "ff 00 00"
|
||||
}
|
||||
|
||||
Actor PlayerChunk : PlayerPawn native
|
||||
|
|
|
@ -108,13 +108,13 @@ decalgroup BulletChip
|
|||
* Blood smears crawl down walls a bit like in Blood.
|
||||
*
|
||||
* These do not need generators; the engine will create them automatically
|
||||
* when something bleeds. In the future, the shade color will be ignored,
|
||||
* when something bleeds. If a blood color is set, the shade color will be ignored,
|
||||
* and the actor's blood color will be used instead.
|
||||
*/
|
||||
decal BloodSplat1
|
||||
{
|
||||
pic BSPLAT1
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
x-scale 0.75
|
||||
y-scale 0.75
|
||||
randomflipx
|
||||
|
@ -124,7 +124,7 @@ decal BloodSplat1
|
|||
decal BloodSplat2
|
||||
{
|
||||
pic BSPLAT2
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
x-scale 0.75
|
||||
y-scale 0.75
|
||||
randomflipx
|
||||
|
@ -134,7 +134,7 @@ decal BloodSplat2
|
|||
decal BloodSplat3
|
||||
{
|
||||
pic BSPLAT3
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
x-scale 0.75
|
||||
y-scale 0.75
|
||||
randomflipx
|
||||
|
@ -144,7 +144,7 @@ decal BloodSplat3
|
|||
decal BloodSplat4
|
||||
{
|
||||
pic BSPLAT4
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
x-scale 0.75
|
||||
y-scale 0.75
|
||||
randomflipx
|
||||
|
@ -154,7 +154,7 @@ decal BloodSplat4
|
|||
decal BloodSplat5
|
||||
{
|
||||
pic BSPLAT5
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
x-scale 0.75
|
||||
y-scale 0.75
|
||||
randomflipx
|
||||
|
@ -164,7 +164,7 @@ decal BloodSplat5
|
|||
decal BloodSplat6
|
||||
{
|
||||
pic BSPLAT6
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
x-scale 0.75
|
||||
y-scale 0.75
|
||||
randomflipx
|
||||
|
@ -174,7 +174,7 @@ decal BloodSplat6
|
|||
decal BloodSplat7
|
||||
{
|
||||
pic BSPLAT7
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
x-scale 0.75
|
||||
y-scale 0.75
|
||||
randomflipx
|
||||
|
@ -199,7 +199,7 @@ decal BloodSmear1
|
|||
pic BSMEAR1
|
||||
x-scale 0.625
|
||||
y-scale 0.625
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
randomflipx
|
||||
animator BloodSmearer
|
||||
}
|
||||
|
@ -209,7 +209,7 @@ decal BloodSmear2
|
|||
pic BSMEAR1
|
||||
x-scale 0.625
|
||||
y-scale 0.625
|
||||
shade "68 00 00"
|
||||
shade "BloodDefault"
|
||||
randomflipx
|
||||
animator BloodSmearer
|
||||
}
|
||||
|
|
|
@ -167,3 +167,11 @@
|
|||
#include "actors/strife/templar.txt"
|
||||
#include "actors/strife/zombie.txt"
|
||||
#include "actors/strife/sigil.txt"
|
||||
|
||||
#include "actors/chex/chexmonsters.txt"
|
||||
#include "actors/chex/chexkeys.txt"
|
||||
#include "actors/chex/chexammo.txt"
|
||||
#include "actors/chex/chexweapons.txt"
|
||||
#include "actors/chex/chexitems.txt"
|
||||
#include "actors/chex/chexdecorations.txt"
|
||||
#include "actors/chex/chexplayer.txt"
|
||||
|
|
|
@ -37,6 +37,10 @@ QUITMSG20 = "fine! just kill and run!";
|
|||
QUITMSG21 = "you can quit...\nbut you can't hide...";
|
||||
QUITMSG22 = "whaaa, what's the matter?\nmommy says dinnertime?";
|
||||
|
||||
// Quit Chex messages
|
||||
QUITMSG23 = "Don't give up now...do\nyou still wish to quit?";
|
||||
QUITMSG24 = "please don't leave, we\nneed your help!"; //7 times as likely to show
|
||||
|
||||
LOADNET = "you can't do load while in a net game!\n\npress a key.";
|
||||
QLOADNET = "you can't quickload during a netgame!\n\npress a key.";
|
||||
QSAVESPOT = "you haven't picked a quicksave slot yet!\n\npress a key.";
|
||||
|
@ -1301,3 +1305,75 @@ BBA_SCROTUM = "%o suffered scrotum separation";
|
|||
BBA_POPULATION = "%o volunteered for population control";
|
||||
BBA_SUICIDE = "%o has suicided";
|
||||
BBA_DARWIN = "%o received the Darwin Award";
|
||||
|
||||
// Chex Quest Strings
|
||||
CHUSTR_E1M1 = "E1M1: Landing Zone";
|
||||
CHUSTR_E1M2 = "E1M2: Storage Facility";
|
||||
CHUSTR_E1M3 = "E1M3: Experimental Lab";
|
||||
CHUSTR_E1M4 = "E1M4: Arboretum";
|
||||
CHUSTR_E1M5 = "E1M5: Caverns of Bazoik";
|
||||
|
||||
CE1TEXT =
|
||||
"Mission accomplished.\n"
|
||||
"\n"
|
||||
"Are you prepared for the next mission?\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Press the escape key to continue...";
|
||||
|
||||
CE2TEXT = "You've done it!";
|
||||
CE3TEXT = "Wonderful Job!";
|
||||
CE4TEXT = "Fantastic";
|
||||
|
||||
CLOADNET = "you can't do load while in a net quest!\n\npress a key.";
|
||||
CQSPROMPT = "quicksave over your quest named\n\n'%s'?\n\npress y or n.";
|
||||
CQLOADNET = "you can't quickload during a netquest!\n\npress a key.";
|
||||
CQLPROMPT = "do you want to quickload the quest named\n\n'%s'?\n\npress y or n.";
|
||||
CNEWGAME = "you can't start a new quest\nwhile in a network quest.\n\npress a key.";
|
||||
|
||||
CNIGHTMARE = "Careful, this will be tough.\nDo you wish to continue?\n\npress y or n.";
|
||||
|
||||
CSWSTRING = "this is Chex(R) Quest. look for\n\nfuture levels at www.chexquest.com.\n\npress a key.";
|
||||
|
||||
CNETEND = "you can't end a netquest!\n\npress a key.";
|
||||
CENDGAME = "are you sure you want to end the quest?\n\npress y or n.";
|
||||
|
||||
GOTCHEXARMOR = "Picked up the Chex(R) Armor.";
|
||||
GOTSUPERCHEXARMOR = "Picked up the Super Chex(R) Armor!";
|
||||
GOTWATER = "Picked up a glass of water.";
|
||||
GOTREPELLENT = "Picked up slime repellent.";
|
||||
GOTBREAKFAST = "Supercharge Breakfast!";
|
||||
GOTCBLUEKEY = "Picked up a blue key.";
|
||||
GOTCYELLOWKEY = "Picked up a yallow key.";
|
||||
GOTCREDKEY = "Picked up a red key.";
|
||||
GOTFRUIT = "Picked up a bowl of fruit.";
|
||||
GOTVEGETABLESNEED = "Picked up some needed vegetables!";
|
||||
GOTVEGETABLES = "Picked up a bowl of vegetables.";
|
||||
GOTSLIMESUIT = "Slimeproof Suit";
|
||||
GOTZORCHRECHARGE = "Picked up a mini zorch recharge.";
|
||||
GOTMINIZORCHPACK = "Picked up a mini zorch pack.";
|
||||
GOTPROPULSORRECHARGE = "Picked up a zorch propulsor recharge.";
|
||||
GOTPROPULSORPACK = "Picked up a zorch propulsor pack.";
|
||||
GOTPHASINGZORCHERRECHARGE = "Picked up a phasing zorcher recharge";
|
||||
GOTPHASINGZORCHERPACK = "Picked up a phasing zorcher pack.";
|
||||
GOTLARGEZORCHERRECHARGE = "Picked up a large zorcher recharge.";
|
||||
GOTLARGEZORCHERPACK = "Picked up a large zorcher pack.";
|
||||
GOTZORCHPACK = "Picked up a Zorchpak!";
|
||||
GOTLAZDEVICE = "You got the LAZ Device!";
|
||||
GOTRAPIDZORCHER = "You got the Rapid Zorcher!";
|
||||
GOTSUPERBOOTSPORK = "You got the Super Bootspork!";
|
||||
GOTZORCHPROPULSOR = "You got the Zorch Propulsor!";
|
||||
GOTPHASINGZORCHER = "You got the Phasing Zorcher!";
|
||||
GOTLARGEZORCHER = "You got the Large Zorcher!";
|
||||
GOTSUPERLARGEZORCHER = "You got the Super Large Zorcher!";
|
||||
GOTMINIZORCHER = "Picked up a Mini Zorcher.";
|
||||
|
||||
STSTR_CDQDON = "Invincible Mode ON";
|
||||
STSTR_CDQDOFF = "Invincible Mode OFF";
|
||||
STSTR_CFAADDED = "Zorch Added";
|
||||
STSTR_CKFAADDED = "Super Zorch Added";
|
||||
STSTR_CCHOPPERS = "... Eat Chex(R)!";
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* French strings. These are just as they appeared in the original Doom source,
|
||||
* so there's lots missing. (X-DOOM, you speak French. Want to add any?)
|
||||
/* French strings updated by DK
|
||||
* Special thanks to "la communauté française de Doom" :)
|
||||
*
|
||||
*/
|
||||
|
||||
[fr]
|
||||
|
@ -13,6 +14,35 @@ D_CDROM = "VERSION CD-ROM: DEFAULT.CFG DANS C:\\DOOMDATA\n";
|
|||
PRESSKEY = "APPUYEZ SUR UNE TOUCHE.";
|
||||
PRESSYN = "APPUYEZ SUR Y OU N";
|
||||
QUITMSG = "VOUS VOULEZ VRAIMENT\nQUITTER CE SUPER JEU?";
|
||||
|
||||
// QuitDoom1 messages
|
||||
QUITMSG1 = "ne partez pas,Il ya encore\ndes démons a griller!";
|
||||
QUITMSG2 = "fichons le camp ,ça dégenere\nen bain de sang!";
|
||||
QUITMSG3 = "Je ne quitterai pas si j'etait vous.\nos est bien pire.";
|
||||
QUITMSG4 = "Vous essayez de dire que vous aimez dos\nmieux que moi ,pas vrai?";
|
||||
QUITMSG5 = "Ne partez pas encore-il y a \nun demon dans le coin!";
|
||||
QUITMSG6 = "vous savez ,la prochaine que vous venez ici\nje vous grille.";
|
||||
QUITMSG7 = "allez y partez. regardez si j'y fais attention.";
|
||||
|
||||
// QuitDOOM II messages
|
||||
QUITMSG8 = "vous voulez vraiment quitter?\nalors,vous avez perdus un huitieme!";
|
||||
QUITMSG9 = "ne partez pas maintenent,il y a un \nportail interdimensionnel attendant\na l'ecran os";
|
||||
QUITMSG10 = "tirez vous de la et retournez\na vos programmes ennuyeux.";
|
||||
QUITMSG11 = "si j'etait votre patron,je vous\n tuerais dans la minute!";
|
||||
QUITMSG12 = "regardez l'ami. vous partez maintenant\net vous perdez votre nombre de tues!";
|
||||
QUITMSG13 = "allez partez. quand vous reviendrez\n,je vous attendrai avec une batte.";
|
||||
QUITMSG14 = "vous etes chanceux je vous gifle pas\nparce que vous pensez partir.";
|
||||
|
||||
// Quit Strife messages
|
||||
QUITMSG15 = "ou allez vous?!\nque va devenir la rebellion?";
|
||||
QUITMSG16 = "carnage interruptus...\ntout un programme!";
|
||||
QUITMSG17 = "mais vous etes l'espoir\n-- mon unique chance!!";
|
||||
QUITMSG18 = "personne ne peut marcher sur un oiseau noir.";
|
||||
QUITMSG19 = "je vous pensais different...";
|
||||
QUITMSG20 = "d'accord! tuez et allez vous en!";
|
||||
QUITMSG21 = "vous pouvez quitter...\nmais vous ne pouvez pas vous cacher...";
|
||||
QUITMSG22 = "whaaa, quel est le probleme?\nvotre mere a dit a table?";
|
||||
|
||||
LOADNET = "VOUS NE POUVEZ PAS CHARGER\nUN JEU EN RESEAU!\n\nAPPUYEZ SUR UNE TOUCHE.";
|
||||
QLOADNET = "CHARGEMENT RAPIDE INTERDIT EN RESEAU!\n\nAPPUYEZ SUR UNE TOUCHE.";
|
||||
QSAVESPOT = "VOUS N'AVEZ PAS CHOISI UN EMPLACEMENT!\n\nAPPUYEZ SUR UNE TOUCHE.";
|
||||
|
@ -132,6 +162,16 @@ HUSTR_E3M7 = "E3M7: LIMBES";
|
|||
HUSTR_E3M8 = "E3M8: DIS";
|
||||
HUSTR_E3M9 = "E3M9: CLAPIERS";
|
||||
|
||||
HUSTR_E4M1 = "E4M1: L'ENFER EN CONTREBAS";
|
||||
HUSTR_E4M2 = "E4M2: UNE HAINE PARFAITE";
|
||||
HUSTR_E4M3 = "E4M3: COUPER LE MAL";
|
||||
HUSTR_E4M4 = "E4M4: LE MAL INDISCIPLINE ";
|
||||
HUSTR_E4M5 = "E4M5: ILS S'EN REPENTIRONT";
|
||||
HUSTR_E4M6 = "E4M6: CONTRE MOI AVEC MECHANCETE";
|
||||
HUSTR_E4M7 = "E4M7: ET L'ENFER SUIVI";
|
||||
HUSTR_E4M8 = "E4M8: UNTO LE CRUEL";
|
||||
HUSTR_E4M9 = "E4M9: PEUR";
|
||||
|
||||
HUSTR_1 = "NIVEAU 1: ENTREE ";
|
||||
HUSTR_2 = "NIVEAU 2: HALLS SOUTERRAINS ";
|
||||
HUSTR_3 = "NIVEAU 3: LE FEU NOURRI ";
|
||||
|
@ -168,6 +208,71 @@ HUSTR_30 = "NIVEAU 30: L'ICONE DU PECHE ";
|
|||
HUSTR_31 = "NIVEAU 31: WOLFENSTEIN";
|
||||
HUSTR_32 = "NIVEAU 32: LE MASSACRE";
|
||||
|
||||
PHUSTR_1 = "level 1: congo";
|
||||
PHUSTR_2 = "level 2: la source des ames";
|
||||
PHUSTR_3 = "level 3: aztec";
|
||||
PHUSTR_4 = "level 4: mis en cage";
|
||||
PHUSTR_5 = "level 5: la ville fantome";
|
||||
PHUSTR_6 = "level 6: le repair des barons";
|
||||
PHUSTR_7 = "level 7: caughtyard";
|
||||
PHUSTR_8 = "level 8: le royaume";
|
||||
PHUSTR_9 = "level 9: abattoire";
|
||||
PHUSTR_10 = "level 10: l'assault";
|
||||
PHUSTR_11 = "level 11: traque";
|
||||
PHUSTR_12 = "level 12: vitesse";
|
||||
PHUSTR_13 = "level 13: la crypte";
|
||||
PHUSTR_14 = "level 14: la genese";
|
||||
PHUSTR_15 = "level 15: le crepuscule";
|
||||
PHUSTR_16 = "level 16: le presage";
|
||||
PHUSTR_17 = "level 17: l'enceinte";
|
||||
PHUSTR_18 = "level 18: la neurosphere";
|
||||
PHUSTR_19 = "level 19: nme";
|
||||
PHUSTR_20 = "level 20: le domaine de la mort";
|
||||
PHUSTR_21 = "level 21: le pourfendeur";
|
||||
PHUSTR_22 = "level 22: mission impossible";
|
||||
PHUSTR_23 = "level 23: la pierre tombale";
|
||||
PHUSTR_24 = "level 24: la frontiere finale";
|
||||
PHUSTR_25 = "level 25: le temple des tenebres";
|
||||
PHUSTR_26 = "level 26: bunker";
|
||||
PHUSTR_27 = "level 27: ante-christ";
|
||||
PHUSTR_28 = "level 28: l'egout";
|
||||
PHUSTR_29 = "level 29: l'odyssee des bruits";
|
||||
PHUSTR_30 = "level 30: la porte de l'enfer";
|
||||
PHUSTR_31 = "level 31: l'antre des demons-cybernetiques";
|
||||
PHUSTR_32 = "level 32: On y va!";
|
||||
|
||||
THUSTR_1 = "level 1: le systeme de controle";
|
||||
THUSTR_2 = "level 2: le barbecue humain";
|
||||
THUSTR_3 = "level 3: le controle de l'energie";
|
||||
THUSTR_4 = "level 4: trous de vers";
|
||||
THUSTR_5 = "level 5: la boucle";
|
||||
THUSTR_6 = "level 6: la saison d'ouverture";
|
||||
THUSTR_7 = "level 7: la prison";
|
||||
THUSTR_8 = "level 8: metal";
|
||||
THUSTR_9 = "level 9: le fief";
|
||||
THUSTR_10 = "level 10: redemption";
|
||||
THUSTR_11 = "level 11: le complexe de stockage";
|
||||
THUSTR_12 = "level 12: le cratere";
|
||||
THUSTR_13 = "level 13: l'usine de traitement des dechets nucleaires";
|
||||
THUSTR_14 = "level 14: l'acierie";
|
||||
THUSTR_15 = "level 15: la zone morte";
|
||||
THUSTR_16 = "level 16: les echelons les plus bas";
|
||||
THUSTR_17 = "level 17: la zone de traitement";
|
||||
THUSTR_18 = "level 18: le moulin";
|
||||
THUSTR_19 = "level 19: acheminement/production";
|
||||
THUSTR_20 = "level 20: traitement central";
|
||||
THUSTR_21 = "level 21: le centre administratif";
|
||||
THUSTR_22 = "level 22: l'habitat";
|
||||
THUSTR_23 = "level 23: le projet de mine lunaire";
|
||||
THUSTR_24 = "level 24: la carrière";
|
||||
THUSTR_25 = "level 25: l'antre des barons";
|
||||
THUSTR_26 = "level 26: ballistyx";
|
||||
THUSTR_27 = "level 27: le mont souffrance";
|
||||
THUSTR_28 = "level 28: que diable?";
|
||||
THUSTR_29 = "level 29: le fleuve styx";
|
||||
THUSTR_30 = "level 30: le dernier appel";
|
||||
THUSTR_31 = "level 31: pharaon";
|
||||
THUSTR_32 = "level 32: caraibbes";
|
||||
|
||||
HUSTR_TALKTOSELF1 = "VOUS PARLEZ TOUT SEUL ";
|
||||
HUSTR_TALKTOSELF2 = "QUI EST LA?";
|
||||
|
@ -217,7 +322,7 @@ E1TEXT =
|
|||
"ET NETTOYE LA BASE LUNAIRE, VOUS AVEZ\n"
|
||||
"GAGNE, NON? PAS VRAI? OU EST DONC VOTRE\n"
|
||||
" RECOMPENSE ET VOTRE BILLET DE\n"
|
||||
"RETOUR? QU'EST-QUE CA VEUT DIRE?CE"
|
||||
"RETOUR? QU'EST-QUE CA VEUT DIRE? CE"
|
||||
"N'EST PAS LA FIN ESPEREE!\n"
|
||||
"\n"
|
||||
"CA SENT LA VIANDE PUTREFIEE, MAIS\n"
|
||||
|
@ -267,7 +372,25 @@ E3TEXT =
|
|||
"AUCUN GERME DU MAL N'A FRANCHI\n"
|
||||
"CETTE PORTE AVEC VOUS...";
|
||||
|
||||
|
||||
E4TEXT =
|
||||
"l'araignee cerveau doit avoir envoye\n"
|
||||
"ses legions de creatures de l' enfer \n"
|
||||
"avant votre confrontation finale avec\n"
|
||||
"cette terrible bete de l'enfer.\n"
|
||||
"Mais vous avancez et mettez de suite\n"
|
||||
"la damnation eternelle et souffrances\n"
|
||||
"a la meute comme un hero le fairait\n"
|
||||
"face de quelque chose de si malefique.\n"
|
||||
"D'ailleurs,quelqu'un va devoir payer \n"
|
||||
"pour ce qui est arrive a margherite, \n"
|
||||
"votre lapin domestique.\n"
|
||||
"\n"
|
||||
"mais maintenant, vous voyez devant vous \n"
|
||||
"encore plus de nouvelles souffrances \n"
|
||||
"potencielles et de chairs broyees\n"
|
||||
"comme une horde de demons devunus \n"
|
||||
"vindicatifs parmi nos villes.\n\n"
|
||||
"prochain arret,l'enfer sur terre!";
|
||||
|
||||
// after level 6, put this:
|
||||
|
||||
|
@ -354,6 +477,153 @@ C6TEXT =
|
|||
"LE NIVEAU SUPER SECRET! VOUS FERIEZ\n"
|
||||
"MIEUX DE FONCER DANS CELUI-LA!\n";
|
||||
|
||||
P1TEXT =
|
||||
"Vous jubilez sur la carcass brulante \n"
|
||||
"du Guardien. Avec sa mort, vous avez \n"
|
||||
"arrache l'accelerateur des griffes \n"
|
||||
"fetides de l'enfer. Vous vous reposez \n"
|
||||
"et regardez aux alentours de l'endroit. \n"
|
||||
"Mince! Il etait suppose qu'il y ait\n"
|
||||
"au mois un prototype fonctionnant, \n"
|
||||
"mais vous ne le voyez pas. les demons \n"
|
||||
"l'on surement pris. \n\n"
|
||||
"Vous devez trouver le prototype ,ou \n"
|
||||
"tous vos combats auront ete vains. \n"
|
||||
"continez a avancer, vous battre, tuer. \n"
|
||||
"Oh oui ,a vivre ,aussi.";
|
||||
P2TEXT =
|
||||
"Meme le labyrinthe mortifere des \n"
|
||||
"archi-infames ne vous arreta pas,\n"
|
||||
"et vous arrivez au prototype \n"
|
||||
"d' accelerateur qui est proche \n"
|
||||
"desactive efficacement et pour toujours.\n"
|
||||
"\n"
|
||||
"Vous etes doue pour ces choses la.";
|
||||
P3TEXT =
|
||||
"Vous vous etes fraye votre chemin a \n"
|
||||
"travers le coeur d'une ruche de \n"
|
||||
"diables. Il est temps pour une mission\n"
|
||||
"de recherche et destruction visant le \n"
|
||||
"guardien de la porte ,avec sa \n"
|
||||
"progeniture repugnante descendant en \n"
|
||||
"cascade sur terre. Oui ,il est cruel. \n"
|
||||
"Mais vous savez qui est pire!\n\n"
|
||||
"Sourriant malefiquement, vous verifiez \n"
|
||||
"l'equipement et vous vous preparez a\n"
|
||||
"faire voir a ce fumier un petit enfer\n"
|
||||
"fait de votre propre main!";
|
||||
P4TEXT =
|
||||
"La face malefique du gardien de la porte \n"
|
||||
"est eparpillee aux alentours. Comme son \n"
|
||||
"corps en lambeaux vacille ,un portail \n"
|
||||
"inverse se forme et aspire les eclat du \n"
|
||||
"dernier prototype d'accelerateur, sans \n"
|
||||
"parler des quelques demons restants.\n"
|
||||
"Vous avez termine. L'enfer a fini de\n"
|
||||
"liberer des mort-vivants au lieu de \n"
|
||||
"gens bien vivants.\n"
|
||||
"Souvenez vous de dire a vos enfants de\n"
|
||||
"mettre un lance-roquette dans votre\n"
|
||||
"cercueil. Si vous allez en enfer,\n"
|
||||
"quand vous serez mort, vous en aurez \n"
|
||||
"besoin ,pour un nettoyage definitif...";
|
||||
P5TEXT =
|
||||
"Vous avez trouver notre second niveau\n"
|
||||
"le plus difficile que nous avons.\n"
|
||||
"J'espere que vous avez sauvegarde\n"
|
||||
"au deux precendants.\n"
|
||||
"Sinon, soyez prets a mourrir souvent.\n"
|
||||
"Pour maitre marine seulement.";
|
||||
P6TEXT =
|
||||
"peut etre, vous demandiez vous quel\n"
|
||||
"ETAIT le niveau le plus dure, que nous\n"
|
||||
"avions prepare pour vous? Maintenant,\n"
|
||||
"vous savez. Nul n'en sortira vivant.\n"
|
||||
T1TEXT =
|
||||
"Vous vous etes fraye un chemin vers la\n"
|
||||
"sortie des labos experimentaux infestes.\n"
|
||||
"Il semble que l'UAC les a encore vides. \n"
|
||||
"Avec leur chiffres d'affaires eleve,\n"
|
||||
"ca doit etre dur pour la pauvre vieille\n"
|
||||
"UAC d' acheter des societes \n"
|
||||
"d'assurance vie ,de nos jours...\n"
|
||||
"\n"
|
||||
"Vous avez devant vous le complexe \n"
|
||||
"militaire ,cela grouille d'horreurs \n"
|
||||
"morbides pres a vous enfoncer leur dents.\n"
|
||||
"Avec un peu de chance ,le complexe a \n"
|
||||
"encore quelques munitions de guerre,\n"
|
||||
"reposant autour.";
|
||||
T2TEXT =
|
||||
"Vous entendez le grincement d'une grosse\n"
|
||||
"machinerie devant.Vous esperez surement\n"
|
||||
"qu'ils ne sont pas en train de fabriquer\n"
|
||||
"de nouvelles creatures de l'enfer,\n"
|
||||
"mais vous etes pret a balayer tout\n"
|
||||
"un troupeau si vous le deviez.\n"
|
||||
"Ils pourraient etre en train de preparer\n"
|
||||
"un festin de sang ,mais vous vous sentez\n"
|
||||
"pareil a deux milliers de fous dans le \n"
|
||||
"corps d'un seul et meme tueur\n"
|
||||
"\n"
|
||||
"Vous ne pensez pas tomber si facilement.";
|
||||
T3TEXT =
|
||||
"La vue s'ouvrant devant vous semble \n"
|
||||
"sacrement ,diablement ,familiere.\n"
|
||||
"Les odeurs familieres, trop -- comme\n"
|
||||
"des excrements frits. Vous n'aimiez \n"
|
||||
"pas cet endroit avant, et vous etes \n"
|
||||
"terriblement sur de ne pas envisager\n"
|
||||
"l'aimer maintenant.\n"
|
||||
"Plus vous pensiez a cette idee ,\n"
|
||||
"plus vous sombriez dans la folie.\n"
|
||||
"Saisissant votre arme ,un sourrire\n"
|
||||
"malefique apparait sur votre visage.\n"
|
||||
"Il est temps de prendre quelques noms.";
|
||||
T4TEXT =
|
||||
"Tout a coup, tout est silencieux ,\n"
|
||||
"d'un horizon a l'autre.\n"
|
||||
"L'echo agonisant de l'enfer s'estompe,\n"
|
||||
"le ciel cauchemardeque tourne au bleu,\n"
|
||||
"les tas de cadavres de monstres \n"
|
||||
"commencent a s'evaporer avec une puanteur\n"
|
||||
"nauseabonde qui remplissait l'air.\n"
|
||||
"Doux jesus ,peut etre l'avez vous fait.\n"
|
||||
"Avez vous reellement gagne?\n\n"
|
||||
"quelque chose gronde au loin.\n"
|
||||
"une lumiere bleue a commence a luire\n"
|
||||
"dans le crane defonce du demon\n"
|
||||
"cracheur.";
|
||||
T5TEXT =
|
||||
"Maintenant quoi? Cela semble \n"
|
||||
"completement different.\n"
|
||||
"Une Sorte de lottissement du\n"
|
||||
"roi Tut.\n"
|
||||
"Bon, rien ne peut-etre pire\n"
|
||||
"que d'habitude. N'est-ce pas?\n"
|
||||
"Ou peut etre est ce mieux\n"
|
||||
"de laisser dormir les dieux,\n"
|
||||
"la ou ils reposent\n"
|
||||
T6TEXT =
|
||||
"Vous avez besoin de vacances.\n"
|
||||
"Vous avez eclates les entrailles\n"
|
||||
"de l'enfer et pour sur vous etes \n"
|
||||
"pres pour une pause.\n"
|
||||
"Vous marmonner a vous meme:\n"
|
||||
"peut-etre quelqu'un pourrait botter\n"
|
||||
"le cul de l'enfer a votre place,\n"
|
||||
"la prochaine fois.\n"
|
||||
"Une ville tranquille reside devant, \n"
|
||||
"avec le flot paisible de l'eau,\n"
|
||||
"les batiments pittoresques, et\n"
|
||||
"probablement plus de creatures\n"
|
||||
"de l'enfer.\n"
|
||||
"Quand vous descendez au dehors du \n"
|
||||
"transport, vous entendez le bruit \n"
|
||||
"du sabot d'acier d'un \n"
|
||||
"demon-cybernetique.";
|
||||
|
||||
|
||||
//
|
||||
// Character cast strings F_FINALE.C
|
||||
//
|
||||
|
@ -374,3 +644,668 @@ CC_ARCH = "ARCHI-INFAME";
|
|||
CC_SPIDER = "L'ARAIGNEE CERVEAU";
|
||||
CC_CYBER = "LE CYBERDEMON";
|
||||
CC_HERO = "NOTRE HEROS";
|
||||
|
||||
// New strings from BOOM
|
||||
PD_BLUEC = "Vous avez besoin d une carte bleu pour ouvrir cette porte";
|
||||
PD_REDC = "Vous avez besoin d une carte rouge pour ouvrir cette porte";
|
||||
PD_YELLOWC = "Vous avez besoin d une carte jaune pour ouvrir cette porte";
|
||||
PD_BLUES = "Vous avez besoin d un crane bleu pour ouvrir cette porte";
|
||||
PD_REDS = "Vous avez besoin d un crane rouge pour ouvrir cette porte";
|
||||
PD_YELLOWS = "Vous avez besoin d un crane jaune pour ouvrir cette porte";
|
||||
PD_ANY = "toute cle ouvrira cette porte";
|
||||
PD_ANYOBJ = "toute cle activera cet objet";
|
||||
PD_ALL3 = "Vous avez besoin des trois cle pour ouvrir cette porte";
|
||||
PD_ALL3O = "Vous avez besoin des trois cle pour activer cet objet";
|
||||
PD_ALL6 = "Vous avez besoin des six clef pour ouvrir cette porte";
|
||||
PD_ALL6O = "Vous avez besoin des six clef pour activer cet objet";
|
||||
PD_ALLKEYS = "Vous avez besoin de toutes les clef";
|
||||
|
||||
// Gameflow messages
|
||||
TXT_FRAGLIMIT = "limite de frag atteinte.";
|
||||
TXT_TIMELIMIT = "limite de temps atteinte.";
|
||||
|
||||
// Spree messages
|
||||
SPREEKILLSELF = "%o etait en folie meurtriere avant que %g ne (le/la) frag!";
|
||||
SPREEOVER = "La folie meurtrière %o a ete termine par %k";
|
||||
SPREE5 = "%k est dans une folie meurtrière!";
|
||||
SPREE10 = "%k se dechaine!";
|
||||
SPREE15 = "%k domine!";
|
||||
SPREE20 = "%k est inarretable!";
|
||||
SPREE25 = "%k est comme un dieu!";
|
||||
|
||||
// Mulitkill messages
|
||||
MULTI2 = "Double meurtre!";
|
||||
MULTI3 = "Multi meurtre!";
|
||||
MULTI4 = "Ultra meurtre!";
|
||||
MULTI5 = "Meurtre monstre!";
|
||||
|
||||
// Obituary strings
|
||||
// First the self-kills, then the other-kills
|
||||
OB_SUICIDE = "%o se suicide.";
|
||||
OB_FALLING = "%o est tombe trop bas.";
|
||||
OB_CRUSH = "%o a ete ecrase.";
|
||||
OB_EXIT = "%o a essaye de quitter.";
|
||||
OB_WATER = "%o ne peut pas nager.";
|
||||
OB_SLIME = "%o a mute.";
|
||||
OB_LAVA = "%o a brule.";
|
||||
OB_BARREL = "%o a fait boom.";
|
||||
OB_SPLASH = "%o est reste au mauvais endroit.";
|
||||
OB_R_SPLASH = "%o aurait du guarder ses distances.";
|
||||
OB_ROCKET = "%o aurait du guarder ses distances.";
|
||||
OB_KILLEDSELF = "%o se tua (lui/elle)meme.";
|
||||
|
||||
OB_STEALTHBABY = "%o cru voir un arachnotron.";
|
||||
OB_STEALTHVILE = "%o cru voir un archi-infame.";
|
||||
OB_STEALTHBARON = "%o cru voir un baron de l'enfer.";
|
||||
OB_STEALTHCACO = "%o cru voir un cacodemon.";
|
||||
OB_STEALTHCHAINGUY = "%o cru voir un mitrailleur.";
|
||||
OB_STEALTHDEMON = "%o cru voir un demon.";
|
||||
OB_STEALTHKNIGHT = "%o cru voir un chevalier de l'enfer.";
|
||||
OB_STEALTHIMP = "%o cru voir un lutin.";
|
||||
OB_STEALTHFATSO = "%o cru voir un mancubus.";
|
||||
OB_STEALTHUNDEAD = "%o cru voir un revenant.";
|
||||
OB_STEALTHSHOTGUY = "%o cru voir un type au fusil.";
|
||||
OB_STEALTHZOMBIE = "%o cru voir un zombie.";
|
||||
OB_UNDEADHIT = "%o a ete cogne par un revenant.";
|
||||
OB_IMPHIT = "%o a ete lacere par un imp.";
|
||||
OB_CACOHIT = "%o s'est approche trop pres d'un cacodemon.";
|
||||
OB_DEMONHIT = "%o a ete mordu par un demon.";
|
||||
OB_SPECTREHIT = "%o a ete mange par un spectre.";
|
||||
OB_BARONHIT = "%o a ete dechire par un baron de l'enfer.";
|
||||
OB_KNIGHTHIT = "%o a ete etrippe par un un chevalier de l'enfer.";
|
||||
OB_ZOMBIE = "%o a ete tue par un zombie.";
|
||||
OB_SHOTGUY = "%o a ete tire par un type au fusil.";
|
||||
OB_VILE = "%o a ete incinere par un archvile.";
|
||||
OB_UNDEAD = "%o n'aurais pas pu esquive cette boule de feu de revenant.";
|
||||
OB_FATSO = "%o s'est fait aplatir par un mancubus.";
|
||||
OB_CHAINGUY = "%o a ete perfore par un mitrailleur.";
|
||||
OB_SKULL = "%o a ete hante par une ame perdue.";
|
||||
OB_IMP = "%o brule par un lutin.";
|
||||
OB_CACO = "%o a ete terrasse par un cacodemon.";
|
||||
OB_BARON = "%o a ete meurtri par un Baron de l'Enfer.";
|
||||
OB_KNIGHT = "%o a ete assassine Chevalier de l'Enfer.";
|
||||
OB_SPIDER = "%o est reste en admiration devant le demon arachneen.";
|
||||
OB_BABY = "%o a laisse un arachnotron l'avoir.";
|
||||
OB_CYBORG = "%o a ete reduie a une eclaboussure par un demon-cybernetique.";
|
||||
OB_WOLFSS = "%o a rencontre un Nazi.";
|
||||
|
||||
OB_CHICKEN = "%o a ete picore a mort.";
|
||||
OB_BEAST = "%o a ete carbonise par un dragon-garou.";
|
||||
OB_CLINK = "%o a ete entaille par un dents-de-sabres.";
|
||||
OB_DSPARIL1 = "%o a ete ebouillante par un serpent de D'Sparil.";
|
||||
OB_DSPARIL1HIT = "%o a ete mache par un serpent de D'Sparil.";
|
||||
OB_DSPARIL2 = "%o etait trop faible pour D'Sparil.";
|
||||
OB_DSPARIL2HIT = "%o a ete gifle par D'Sparil.";
|
||||
OB_HERETICIMP = "%o a ete effraye par une gargouille.";
|
||||
OB_HERETICIMPHIT = "%o a ete mis en pieces par une gargouille.";
|
||||
OB_IRONLICH = "%o a ete devaste par une sangsue de fer.";
|
||||
OB_IRONLICHHIT = "%o a fait ami-ami avec sangsue de fer.";
|
||||
OB_BONEKNIGHT = "%o s'est fait hache par un guerrier mort vivant.";
|
||||
OB_BONEKNIGHTHIT = "%o s'est fait pourfendre par un guerrier mort vivant.";
|
||||
OB_MUMMY = "%o a ete aplati par un golem.";
|
||||
OB_MUMMYLEADER = "%o a ete hurle a mort par un nitrogolem.";
|
||||
OB_SNAKE = "%o s est fait entrechoque par un ophidien.";
|
||||
OB_WIZARD = "%o a ete maudit par un sorcier.";
|
||||
OB_WIZARDHIT = "%o a ete palpe par un sorcier.";
|
||||
|
||||
OB_MPFIST = "%o a bouffe le poing de %k.";
|
||||
OB_MPCHAINSAW = "%o a ete tondu par la tronconneuse de %k.";
|
||||
OB_MPPISTOL = "%o a ete chatouille par le pistolet a eau de %k.";
|
||||
OB_MPSHOTGUN = "%o a bouffe le baton a feu de %k.";
|
||||
OB_MPSSHOTGUN = "%o s est fait gicle par le super fusil de %k.";
|
||||
OB_MPCHAINGUN = "%o a ete fauche par la mitrailleuse de %k.";
|
||||
OB_MPROCKET = "%o a chevauche la fusee de %k.";
|
||||
OB_MPR_SPLASH = "%o a presque esquive la fusee de %k.";
|
||||
OB_MPPLASMARIFLE = "%o a ete bruler par le fusil a plasma de %k.";
|
||||
OB_MPBFG_BOOM = "%o a ete eclate en morceaux par le BFG de %k.";
|
||||
OB_MPBFG_SPLASH = "%o n a pas pu se protege du BFG de %k.";
|
||||
OB_MPTELEFRAG = "%o a ete telefrague par %k.";
|
||||
OB_RAILGUN = "%o a ete enraille par %k.";
|
||||
|
||||
// Same as OB_MPTELEFRAG, but shown when a monster telefrags you
|
||||
OB_MONTELEFRAG = "%o a ete telefrague.";
|
||||
|
||||
OB_DEFAULT = "%o est mort.";
|
||||
OB_FRIENDLY1 = "%k a terrasser un de ses equipies.";
|
||||
OB_FRIENDLY2 = "%k verifie ses lunetttes.";
|
||||
OB_FRIENDLY3 = "%k a obtenu un frag pour l'autre equipe.";
|
||||
OB_FRIENDLY4 = "%k a perdu un autre ami.";
|
||||
|
||||
SAVEGAMENAME = "zdoomsv";
|
||||
STARTUP1 = "";
|
||||
STARTUP2 = "";
|
||||
STARTUP3 = "";
|
||||
STARTUP4 = "";
|
||||
STARTUP5 = "";
|
||||
|
||||
// Heretic strings
|
||||
HE1TEXT =
|
||||
"avec la destruction des sangsues\n"
|
||||
"de fer et leur seides, les derniers\n"
|
||||
"des mort-vivants furent nettoye de\n"
|
||||
"cette face de l'existence.\n\n"
|
||||
"ces creatures durent venir de \n"
|
||||
"quelquepart, bien que,vous eutes le\n"
|
||||
"soupcon sournois que l ardent\n"
|
||||
"portail de l'enfer put conduire\n"
|
||||
"dans leur dimension.\n\n"
|
||||
"pour etre sur que beaucoup de\n"
|
||||
"mort-vivants ou pire ne viennent\n"
|
||||
"par son biais, vous dutes scelle le\n"
|
||||
"portail de l enfer de l'autre cote.\n"
|
||||
"bien sur cela veut dire que vous\n"
|
||||
"eutes pu rester coince dans un monde\n"
|
||||
"tres hostile, mais personne n'a\n"
|
||||
"jamais dis qu'etre un heretic eut\n"
|
||||
"ete facile!";
|
||||
HE2TEXT =
|
||||
"les puissants massotaures eurent \n"
|
||||
"prouve ne pas vous correspondre,\n"
|
||||
"et leurs cadavres vaporeux glissant sur\n"
|
||||
"le sol, vous sentites l effroyable\n"
|
||||
"satisfaction qu ils furent\n"
|
||||
"detruit.\n\n"
|
||||
"les passerelles qu'ils garderent\n"
|
||||
"furent ouvertes, revelant ce que vous\n"
|
||||
"esperates etre le chemin du retour.\n"
|
||||
"mais au fur et a mesure que vous \n"
|
||||
"avancates ,un rire moqueur sonna a\n"
|
||||
"vos oreilles.\n\n"
|
||||
"etait ce quelqu'autre force controlant\n"
|
||||
"les massotaures? eusse t'elles pu etre\n"
|
||||
"plus atroces les creatures dans\n"
|
||||
"cette porte? le balayage d'un dome\n"
|
||||
"de crystal\n"
|
||||
"depasse ou le ciel aurait du etre\n"
|
||||
"ce ne fut pas de bon augure....";
|
||||
HE3TEXT =
|
||||
"la mort de d'sparil a liberes\n"
|
||||
"les liens magiques liant\n"
|
||||
"les creatures de cette face,\n"
|
||||
"leurs cri en mourrant surpasserent\n"
|
||||
"ses propres cris d agonie.\n\n"
|
||||
"votre serment de vengeance rempli,\n"
|
||||
"vous entrate dans le portail pour\n"
|
||||
"votre monde, moments insignifiants\n"
|
||||
"avant que la coupole ne volasse en \neclats.\n"
|
||||
"mais si le pouvoir de d'sparil\n"
|
||||
"fut rompu a jamais, pourquoi ne pas\n"
|
||||
"ne pas vous sentir en securite?\n"
|
||||
"fut ce son dernier cri\n"
|
||||
"celui qui resonna comme une\n"
|
||||
"malediction? une invoquation? vous\n"
|
||||
"ne putes en etre sur vraiment, mais\n"
|
||||
"il s'eut put n'etre qu un cri.\n\n"
|
||||
"puis de nouveau, que devenirent\n"
|
||||
"les autres serpents coureurs?";
|
||||
HE4TEXT =
|
||||
"vous crutes pouvoir retourner dans\n"
|
||||
"votre monde apres que d'sparil\n"
|
||||
"trepassa , mais son acte\n"
|
||||
"final fut de vous bannir dans sa\n"
|
||||
"propre dimension. ici vous entrates\n"
|
||||
" dans des restes effondres de terres\n"
|
||||
"conquisent par d'sparil. vous eutes\n"
|
||||
"le dernier gardien de ces terres,\n"
|
||||
"mais a ce moment vous vous tenites\n"
|
||||
"devant le bastion de d'sparil."
|
||||
"jusqua ce moment vous n' eutes \n"
|
||||
"aucun doute sur votre capacite\n"
|
||||
"d affronter tout ce que vous pouviez\n"
|
||||
"rencontrer,mais derriere ce portail\n"
|
||||
"git le coeur profond du mal\n"
|
||||
"qui envahit votre monde. d'sparil\n"
|
||||
"eut pu etre mort,mais le puit ou\n"
|
||||
"il fut ne demeura. maintenant vous\n"
|
||||
"dutes entrer dans ce puit dans l'espoir\n"
|
||||
"de trouver une sortie.et quelque part,\n"
|
||||
"dans la plus sombre partie du\n"
|
||||
"royaume de d'sparil,\n"
|
||||
"sa garde personnelle attendit votre\n"
|
||||
"arrivee ...";
|
||||
HE5TEXT =
|
||||
"des que le massotaure final eu mugit\n"
|
||||
"son agonie mortelle, vous realisates que\n"
|
||||
"vous n'eutes jamais ete aussi proche de\n"
|
||||
"votre propre destruction.meme le \n"
|
||||
"combat contre d'sparil et ses\n"
|
||||
"disciples n'eut ete a ce point \n"
|
||||
"desespere. souriant, quand vous \n"
|
||||
"regardates fixement le portail s'ouvrir \n"
|
||||
"devant vous ,vous demandant s'il menait \n"
|
||||
"chez vous,ou si il ouvrait sur une\n"
|
||||
"innimaginable horreur. vous vous \n"
|
||||
"demandates si vous eutes la force d'y aller,\n"
|
||||
"si rien d'autre que souffrance\n"
|
||||
"et mort vous eurent attendu.\n"
|
||||
"mais que putes vous faire d'autre, si\n"
|
||||
"la volonte de vous battre s'eut enfuie?\n"
|
||||
"putes vous,vous meme vous forcer a \n"
|
||||
"continuer face a un tel desespoir? \n"
|
||||
"eutes vous le courage? vous trouvates,\n"
|
||||
"a la fin ,ce ne fut pas dans votre nature\n"
|
||||
"de vous rendre sans un combat. les yeux\n"
|
||||
"larges ,vous partates rencontrer votre\n"
|
||||
"destinee.";
|
||||
|
||||
// EPISODE 1 - LA CITE DES DAMNES
|
||||
HHUSTR_E1M1 = "LES DOCKS";
|
||||
HHUSTR_E1M2 = "LE DONGEON";
|
||||
HHUSTR_E1M3 = "LA MAISON DU GARDIEN";
|
||||
HHUSTR_E1M4 = "LA TOUR DE GUARDE";
|
||||
HHUSTR_E1M5 = "LA CITADEL";
|
||||
HHUSTR_E1M6 = "LA CATHEDRAL";
|
||||
HHUSTR_E1M7 = "LA CRYPTE";
|
||||
HHUSTR_E1M8 = "LA BOUCHE DE L ENFER";
|
||||
HHUSTR_E1M9 = "LE CIMETIERE";
|
||||
|
||||
// EPISODE 2 - LA BOUCHE DE L ENFER
|
||||
HHUSTR_E2M1 = "LE CRATERE";
|
||||
HHUSTR_E2M2 = "LES PUITS DE LAVE";
|
||||
HHUSTR_E2M3 = "LA RIVIERE DE FEU";
|
||||
HHUSTR_E2M4 = "LA GROTTE DE GLACE";
|
||||
HHUSTR_E2M5 = "LES CATACOMBES";
|
||||
HHUSTR_E2M6 = "LE LABYRINTHE";
|
||||
HHUSTR_E2M7 = "LA GRANDE PIECE";
|
||||
HHUSTR_E2M8 = "LE PORTAIL DU CHAOS";
|
||||
HHUSTR_E2M9 = "LE GLACIER";
|
||||
|
||||
// EPISODE 3 - LE DOME DE D'SPARIL
|
||||
HHUSTR_E3M1 = "L' ENTREPOT";
|
||||
HHUSTR_E3M2 = "LA FOSSE D AISANCES";
|
||||
HHUSTR_E3M3 = "LA CONFLUENCE";
|
||||
HHUSTR_E3M4 = "LA FORTRESSE D'AZUR";
|
||||
HHUSTR_E3M5 = "LE REPAIRE DES OPHIDIENS";
|
||||
HHUSTR_E3M6 = "LES COULOIRS DE LA PEUR";
|
||||
HHUSTR_E3M7 = "LE GOUFFRE";
|
||||
HHUSTR_E3M8 = "LE DONJON DE D'SPARIL";
|
||||
HHUSTR_E3M9 = "L AQUIFER";
|
||||
|
||||
// EPISODE 4: L'OSSUAIRE
|
||||
HHUSTR_E4M1 = "LE CATAFALQUE";
|
||||
HHUSTR_E4M2 = "LE FORTIN";
|
||||
HHUSTR_E4M3 = "LE DEAMBULATOIRE";
|
||||
HHUSTR_E4M4 = "LE SEPULCHRE";
|
||||
HHUSTR_E4M5 = "LE GRAND ESCALIER";
|
||||
HHUSTR_E4M6 = "LE COULOIR DE L APOSTAT";
|
||||
HHUSTR_E4M7 = "LES RAMPARTS DE LA PERDITION";
|
||||
HHUSTR_E4M8 = "LE PONT EFFONDRE";
|
||||
HHUSTR_E4M9 = "LE MAUSOLE";
|
||||
|
||||
// EPISODE 5: LE DOMAINE STAGNANT
|
||||
HHUSTR_E5M1 = "LES FALAISES OCHRE ";
|
||||
HHUSTR_E5M2 = "LES RAPIDES";
|
||||
HHUSTR_E5M3 = "LE QUAI";
|
||||
HHUSTR_E5M4 = "LA COUR";
|
||||
HHUSTR_E5M5 = "L HYDRATYR";
|
||||
HHUSTR_E5M6 = "LA COLONNADE";
|
||||
HHUSTR_E5M7 = "LE PRESBYTERE FETIDE";
|
||||
HHUSTR_E5M8 = "LE CHAMPS DU JUGEMENT";
|
||||
HHUSTR_E5M9 = "L ECHEVAUX DE D'SPARIL";
|
||||
|
||||
// Keys
|
||||
|
||||
TXT_GOTBLUEKEY = "CLE BLEUE";
|
||||
TXT_GOTYELLOWKEY = "CLE JAUNE";
|
||||
TXT_GOTGREENKEY = "CLE ROUGE";
|
||||
|
||||
// Artifacts
|
||||
|
||||
TXT_ARTIHEALTH = "FLACON DE QUARTZ";
|
||||
TXT_ARTIFLY = "LES AILES DU COURROUX";
|
||||
TXT_ARTIINVULNERABILITY = "L'ANNEAU D'INVINCIBILITE";
|
||||
TXT_ARTITOMEOFPOWER = "TOME DU POUVOIR";
|
||||
TXT_ARTIINVISIBILITY = "SPHERE D'OMBRE";
|
||||
TXT_ARTIEGG = "OVULE TRANSFORME";
|
||||
TXT_ARTISUPERHEALTH = "URNE MYSTIQUE";
|
||||
TXT_ARTITORCH = "LA TORCHE";
|
||||
TXT_ARTIFIREBOMB = "BOMBE A RETARDEMENT DES ANCIENTS";
|
||||
TXT_ARTITELEPORT = "L' USTENSIL DU CHAOS";
|
||||
|
||||
// Items
|
||||
|
||||
TXT_ITEMHEALTH = "CRYSTAL VIAL";
|
||||
TXT_ITEMBAGOFHOLDING = "SAC DE PRISES";
|
||||
TXT_ITEMSHIELD1 = "BOUCLIER D'ARGENT";
|
||||
TXT_ITEMSHIELD2 = "BOUCLIER ENCHANTE";
|
||||
TXT_ITEMSUPERMAP = "CARTE EN ROULEAU DEPLIANT";
|
||||
|
||||
// Ammo
|
||||
|
||||
TXT_AMMOGOLDWAND1 = "SCEPTRE DE CRYSTAL";
|
||||
TXT_AMMOGOLDWAND2 = "GEODE DE CRYSTAL";
|
||||
TXT_AMMOMACE1 = "SPHERES DE MASSE";
|
||||
TXT_AMMOMACE2 = "PILE DE SPHERES DE MASSE";
|
||||
TXT_AMMOCROSSBOW1 = "FLECHES AERIENNNES";
|
||||
TXT_AMMOCROSSBOW2 = "CARQUOIS DE FLECHES AERIENNNES";
|
||||
TXT_AMMOBLASTER1 = "ORB DE GRIFFE";
|
||||
TXT_AMMOBLASTER2 = "ORB DE L'ENERGIE";
|
||||
TXT_AMMOSKULLROD1 = "RUNES MINEURES";
|
||||
TXT_AMMOSKULLROD2 = "RUNES SUPERIEURES";
|
||||
TXT_AMMOPHOENIXROD1 = "ORB DE FLAMES";
|
||||
TXT_AMMOPHOENIXROD2 = "ORB DE L'ENFER";
|
||||
|
||||
// Weapons
|
||||
|
||||
TXT_WPNMACE = "MASSE DE FEU";
|
||||
TXT_WPNCROSSBOW = "ARBALETE AERIENNE";
|
||||
TXT_WPNBLASTER = "GRIFFE DU DRAGON";
|
||||
TXT_WPNSKULLROD = "LE BATON DE L'ENFER";
|
||||
TXT_WPNPHOENIXROD = "LE BATON DU PHOENIX";
|
||||
TXT_WPNGAUNTLETS = "LES GANTELETS DU NECROMANCIER";
|
||||
|
||||
TXT_NEEDBLUEKEY = "CETTE PORTE NESCESSITE UNE CLE BLEU POUR S'OUVRIR";
|
||||
TXT_NEEDGREENKEY = "CETTE PORTE NESCESSITE UNE CLE VERTE POUR S'OUVRIR";
|
||||
TXT_NEEDYELLOWKEY = "CETTE PORTE NESCESSITE UNE CLE JAUNE POUR S'OUVRIR";
|
||||
|
||||
TXT_CHEATPOWERON = "ENERGIE ACTIVEE";
|
||||
TXT_CHEATPOWEROFF = "ENERGIE DESACTIVEE";
|
||||
TXT_CHEATHEALTH = "PLEINE SANTE";
|
||||
TXT_CHEATKEYS = "TOUTES LES CLES";
|
||||
TXT_CHEATSOUNDON = "DEBOGUAGE DU SON ACTIVE";
|
||||
TXT_CHEATSOUNDOFF = "DEBOGUAGE DU SON DESACTIVE";
|
||||
TXT_CHEATIDDQD = "TU ESSAIE DE TRICHER, HEIN? MAINTENANT TU CREVE!";
|
||||
TXT_CHEATIDKFA = "TRICHEUR - TU NE MERITE PAS D'ARMES";
|
||||
TXT_CHEATTICKERON = "HORLOGE ALUMMEE";
|
||||
TXT_CHEATTICKEROFF = "HORLOGE ETEINTE";
|
||||
TXT_CHEATARTIFACTS3 = "VOUS L'AVEZ";
|
||||
|
||||
RAVENQUITMSG = "ETES VOUS SUR DE VOULOIR QUITTER?";
|
||||
|
||||
// Hexen strings
|
||||
|
||||
// Mana
|
||||
|
||||
TXT_MANA_1 = "MANA BLEUE";
|
||||
TXT_MANA_2 = "MANA VERTE";
|
||||
TXT_MANA_BOTH = "MANA COMBINEE";
|
||||
|
||||
// Keys
|
||||
|
||||
TXT_KEY_STEEL = "CLE D'ACIER";
|
||||
TXT_KEY_CAVE = "CLE DE LA CAVE";
|
||||
TXT_KEY_AXE = "CLE DE LA HACHE";
|
||||
TXT_KEY_FIRE = "CLE DU FEU";
|
||||
TXT_KEY_EMERALD = "CLE D'EMERAUDE";
|
||||
TXT_KEY_DUNGEON = "CLE DU DONGEON";
|
||||
TXT_KEY_SILVER = "CLE D'ARGENT";
|
||||
TXT_KEY_RUSTED = "CLE ROUILLEE";
|
||||
TXT_KEY_HORN = "CLE CORNE";
|
||||
TXT_KEY_SWAMP = "CLE DES MARECAGES";
|
||||
TXT_KEY_CASTLE = "CLE DU CHATEAU";
|
||||
|
||||
TXT_NEED_KEY_STEEL = "Vous avez besoin de la CLE D'ACIER";
|
||||
TXT_NEED_KEY_CAVE = "Vous avez besoin de la CLE DE LA CAVE";
|
||||
TXT_NEED_KEY_AXE = "Vous avez besoin de la CLE DE LA HACHE";
|
||||
TXT_NEED_KEY_FIRE = "Vous avez besoin de la CLE DU FEU";
|
||||
TXT_NEED_KEY_EMERALD = "Vous avez besoin de la CLE D'EMERAUDE";
|
||||
TXT_NEED_KEY_DUNGEON = "Vous avez besoin de la CLE DU DONGEON";
|
||||
TXT_NEED_KEY_SILVER = "Vous avez besoin de la CLE D'ARGENT";
|
||||
TXT_NEED_KEY_RUSTED = "Vous avez besoin de la CLE ROUILLEE";
|
||||
TXT_NEED_KEY_HORN = "Vous avez besoin de la CLE ROUILLEE";
|
||||
TXT_NEED_KEY_SWAMP = "Vous avez besoin de la CLE DES MARECAGES";
|
||||
TXT_NEED_KEY_CASTLE = "Vous avez besoin de la CLE DU CHATEAU";
|
||||
|
||||
// Artifacts
|
||||
|
||||
TXT_ARTIINVULNERABILITY2 = "L'ICONE DU DEFENSEUR";
|
||||
TXT_ARTISUMMON = "SERVANT OBSCURE";
|
||||
TXT_ARTIEGG2 = "PORKALATOR";
|
||||
TXT_ARTIPOISONBAG = "FLECHETTE";
|
||||
TXT_ARTITELEPORTOTHER = "L'USTENSIL DE BANISSEMENT";
|
||||
TXT_ARTISPEED = "BOTTES DE VITESSE";
|
||||
TXT_ARTIBOOSTMANA = "KRATER DE LA PUISSANCE";
|
||||
TXT_ARTIBOOSTARMOR = "BRACELETS EN PEAU DE DRAGON";
|
||||
TXT_ARTIBLASTRADIUS = "DISQUE DE REPULSION";
|
||||
TXT_ARTIHEALINGRADIUS = "CADRE D' ENCHANTEMENT MYSTIQUE";
|
||||
|
||||
// Puzzle artifacts
|
||||
|
||||
TXT_ARTIPUZZSKULL = "CRANE DE YORICK";
|
||||
TXT_ARTIPUZZGEMBIG = "COEUR DE D'SPARIL";
|
||||
TXT_ARTIPUZZGEMRED = "PLANETE DE RUBI";
|
||||
TXT_ARTIPUZZGEMGREEN1 = "PLANETE D'EMERAUDE";
|
||||
TXT_ARTIPUZZGEMGREEN2 = "PLANETE D'EMERAUDE";
|
||||
TXT_ARTIPUZZGEMBLUE1 = "PLANETE DE SAPPHIRE";
|
||||
TXT_ARTIPUZZGEMBLUE2 = "PLANETE DE SAPPHIRE";
|
||||
TXT_ARTIPUZZBOOK1 = "CODEX DEMON";
|
||||
TXT_ARTIPUZZBOOK2 = "LIVRE OBSCURE";
|
||||
TXT_ARTIPUZZSKULL2 = "MASQUE DE FLAMES";
|
||||
TXT_ARTIPUZZFWEAPON = "LE SCEAU DE GLAIVE";
|
||||
TXT_ARTIPUZZCWEAPON = "LA SAINTE RELIQUE";
|
||||
TXT_ARTIPUZZMWEAPON = "SIGIL DU MAGUS";
|
||||
TXT_ARTIPUZZGEAR = "ROUAGE D'HORLOGE";
|
||||
TXT_USEPUZZLEFAILED = "VOUS NE POUVEZ PAS UTILISE CECI ICI";
|
||||
|
||||
// Items
|
||||
|
||||
TXT_ARMOR1 = "ARMURE DE MAILLES";
|
||||
TXT_ARMOR2 = "BOUCLIER DU FAUCON";
|
||||
TXT_ARMOR3 = "CASQUE DE PLATINE";
|
||||
TXT_ARMOR4 = "AMULET DE L'ELOIGNEMENT";
|
||||
|
||||
// Weapons
|
||||
|
||||
TXT_WEAPON_F2 = "HACHE DE TIMON";
|
||||
TXT_WEAPON_F3 = "MARTEAU DE LA VENGEANCE";
|
||||
TXT_WEAPON_F4 = "QUIETUS ASSEMBLE";
|
||||
TXT_WEAPON_C2 = "SCEPTRE DU SERPENT";
|
||||
TXT_WEAPON_C3 = "TEMPETE DE FEU";
|
||||
TXT_WEAPON_C4 = "BATON DU COURROUX ASSEMBLE";
|
||||
TXT_WEAPON_M2 = "BRISURES GELEE";
|
||||
TXT_WEAPON_M3 = "ARC DE LA MORT";
|
||||
TXT_WEAPON_M4 = "FLEAUT SANGLANT ASSEMBLE";
|
||||
TXT_WEAPONPIECE = "Une piece d'arme! C'est votre jour de chance!";
|
||||
TXT_QUIETUS_PIECE = "SEGMENT DU QUIETUS";
|
||||
TXT_WRAITHVERGE_PIECE = "SEGMENT DU BATON DU COURROUX";
|
||||
TXT_BLOODSCOURGE_PIECE = "SEGMENT DU FLEAUT SANGLANT";
|
||||
|
||||
// Strife locks
|
||||
|
||||
TXT_NEEDKEY = "Vous n'avez pas la cle.";
|
||||
TXT_NEED_PASSCARD = "Vous avez besoin de la carte passe.";
|
||||
TXT_NEED_PASSCARD_DOOR = "Vous avez besoin de la cle carte passe pour ouvrir cette porte.";
|
||||
TXT_NEED_IDCARD = "Vous avez besoin d'une carte ID.";
|
||||
TXT_NEED_PRISONKEY = "Vous n'avez pas la cle de la prison.";
|
||||
TXT_NEED_HANDPRINT = "Votre main ne s'imprime pas sur le dossier.";
|
||||
TXT_NEED_GOLDKEY = "Vous avez besoin d'une clé d'or.";
|
||||
TXT_NEED_IDBADGE = "Vous avez besoin d'un badge ID.";
|
||||
TXT_NEED_IDBADGE_DOOR = "Vous avez besoin d'un badge ID pour ouvrir cette porte.";
|
||||
TXT_NEED_SILVERKEY = "Vous avez besoin de la cle d'argent.";
|
||||
TXT_NEED_BRASSKEY = "Vous avez besoin de la cle de laiton.";
|
||||
TXT_NEED_REDCRYSTAL = "Vous avez besoin du crystal rouge.";
|
||||
TXT_NEED_BLUECRYSTAL = "Vous avez besoin du crystal bleu.";
|
||||
|
||||
// Strife Quest messages
|
||||
|
||||
TXT_QUEST_14 = "Vous avez explose le crystal";
|
||||
TXT_QUEST_16 = "Vous avez explose les portes";
|
||||
TXT_QUEST_27 = "Vous avez explose l'ordinateur";
|
||||
|
||||
TXT_KILLED_BISHOP = "Vous avez tue l'eveque!";
|
||||
TXT_KILLED_ORACLE = "Vous avez tue l'oracle!";
|
||||
TXT_KILLED_MACIL = "Vous avez tue Macil!";
|
||||
TXT_KILLED_LOREMASTER = "Vous avez tue le Maitre des tradition!";
|
||||
|
||||
// Strife pickup messages
|
||||
|
||||
TXT_METALARMOR = "Vous avez pris l'armure de metal.";
|
||||
TXT_LEATHERARMOR = "Vous avez pris l'armure de cuir.";
|
||||
TXT_MEDPATCH = "Vous avez pris le bandeau medical.";
|
||||
TXT_MEDICALKIT = "Vous avez pris la trousse medical.";
|
||||
TXT_SURGERYKIT = "Vous avez pris la trousse de chirurgie.";
|
||||
TXT_STRIFEMAP = "Vous avez pris la carte";
|
||||
TXT_BELDINSRING = "Vous avez pris l'anneau.";
|
||||
TXT_OFFERINGCHALICE = "Vous avez pris le Calice d'obole.";
|
||||
TXT_EAR = "Vous avez pris l'oreille.";
|
||||
TXT_BROKENCOUPLING = "Vous avez pris la connexion coupee d'energie.";
|
||||
TXT_SHADOWARMOR = "Vous avez pris l'armure d'ombre.";
|
||||
TXT_ENVSUIT = "Vous avez pris la combinaison Environmentale.";
|
||||
TXT_GUARDUNIFORM = "Vous avez pris l'Uniforme du guarde.";
|
||||
TXT_OFFICERSUNIFORM = "Vous avez pris l'Uniforme de l' officier.";
|
||||
TXT_FTHROWERPARTS = "Vous avez pris les pieces du lance-flames.";
|
||||
TXT_REPORT = "Vous avez pris le compte-rendu.";
|
||||
TXT_INFO = "Vous avez pris l'info.";
|
||||
TXT_TARGETER = "Vous avez pris le cibleur.";
|
||||
TXT_COMMUNICATOR = "Vous avez pris le Communicateur";
|
||||
TXT_COIN = "Vous avez pris la piece.";
|
||||
TXT_XGOLD = "Vous avez pris l'or de %d.";
|
||||
TXT_BEACON = "Vous avez pris la balise de Teletransporteur.";
|
||||
TXT_DEGNINORE = "Vous avez pris le minerai de Degnin.";
|
||||
TXT_SCANNER = "Vous avez pris l'analyseur.";
|
||||
TXT_NEEDMAP = "L' analyseur ne marchera pas sans une carte!\n";
|
||||
TXT_PRISONPASS = "Vous avez pris le pass de la prison.";
|
||||
|
||||
TXT_STRIFECROSSBOW = "Vous avez pris l'arbalete";
|
||||
TXT_ASSAULTGUN = "Vous avez pris le fusil d'assaut";
|
||||
TXT_MMLAUNCHER = "Vous avez pris le mini lance-missile";
|
||||
TXT_FLAMER = "Vous avez pris le lance-flames";
|
||||
TXT_MAULER = "Vous avez pris le molesteur";
|
||||
TXT_GLAUNCHER = "Vous avez pris le lance-grenade";
|
||||
TXT_SIGIL = "Vous avez pris le SIGIL.";
|
||||
|
||||
|
||||
TXT_BASEKEY = "Vous avez pris la cle Base.";
|
||||
TXT_GOVSKEY = "Vous avez pris la cle Govs.";
|
||||
TXT_PASSCARD = "Vous avez pris la carte-pass.";
|
||||
TXT_IDBADGE = "Vous avez pris le Badge ID.";
|
||||
TXT_PRISONKEY = "Vous avez pris la cle de la Prison.";
|
||||
TXT_SEVEREDHAND = "Vous avez pris la main coupee.";
|
||||
TXT_POWER1KEY = "Vous avez pris la cle Power1 .";
|
||||
TXT_POWER2KEY = "Vous avez pris la cle Power2.";
|
||||
TXT_POWER3KEY = "Vous avez pris la cle Power3.";
|
||||
TXT_GOLDKEY = "Vous avez pris la cle d'or.";
|
||||
TXT_IDCARD = "Vous avez pris la Carte ID .";
|
||||
TXT_SILVERKEY = "Vous avez pris la cle d'argent.";
|
||||
TXT_ORACLEKEY = "Vous avez pris la cle Oracle.";
|
||||
TXT_MILITARYID = "Vous avez pris l'ID Militaire.";
|
||||
TXT_ORDERKEY = "Vous avez pris la cle de l'Ordre.";
|
||||
TXT_WAREHOUSEKEY = "Vous avez pris la cle de l'entrepot.";
|
||||
TXT_BRASSKEY = "Vous avez pris la cle de bronze.";
|
||||
TXT_REDCRYSTAL = "Vous avez pris la cle crystal rouge.";
|
||||
TXT_BLUECRYSTAL = "Vous avez pris la cle crystal bleu.";
|
||||
TXT_CHAPELKEY = "Vous avez pris la cle de la chapel.";
|
||||
TXT_CATACOMBKEY = "Vous avez pris la cle des Catacombes.";
|
||||
TXT_SECURITYKEY = "Vous avez pris la cle de la Securite.";
|
||||
TXT_COREKEY = "Vous avez pris la cle Core.";
|
||||
TXT_MAULERKEY = "Vous avez pris la cle du broyeur.";
|
||||
TXT_FACTORYKEY = "Vous avez pris la cle de l'usine.";
|
||||
TXT_MINEKEY = "Vous avez pris la cle de la mine.";
|
||||
TXT_NEWKEY5 = "Vous avez pris la nouvelle cle 5.";
|
||||
TXT_ORACLEPASS = "Vous avez pris le passe de l'Oracle.";
|
||||
|
||||
TXT_HEGRENADES = "Vous avez pris les HE-Grenades.";
|
||||
TXT_PHGRENADES = "Vous avez pris les Phoshorus-Grenades.";
|
||||
TXT_CLIPOFBULLETS = "Vous avez pris les chargeurs de balles.";
|
||||
TXT_BOXOFBULLETS = "Vous avez pris la boite de balles.";
|
||||
TXT_MINIMISSILES = "Vous avez pris les mini missiles.";
|
||||
TXT_CRATEOFMISSILES = "Vous avez pris la caisse de missiles.";
|
||||
TXT_ENERGYPOD = "Vous avez pris la gousse d'energie.";
|
||||
TXT_ENERGYPACK = "Vous avez pris le paquet d'energie.";
|
||||
TXT_POISONBOLTS = "Vous avez pris le carreau empoisone.";
|
||||
TXT_ELECTRICBOLTS = "Vous avez pris le carreau electrique.";
|
||||
TXT_AMMOSATCHEL = "Vous avez pris le sachet de munitions";
|
||||
|
||||
// Random dialogs
|
||||
|
||||
TXT_RANDOM_PEASANT_01 = "S'il vous plait ne me blessez pas.";
|
||||
TXT_RANDOM_PEASANT_02 = "Si vous cherchez a me blesse, Je n' en merite pas l'effort.";
|
||||
TXT_RANDOM_PEASANT_03 = "Je ne sais rien.";
|
||||
TXT_RANDOM_PEASANT_04 = "Allez vous en ou j'appel les guardes!";
|
||||
TXT_RANDOM_PEASANT_05 = "Je voudrais quelque fois que ces rebelles apprennent quelle est leur place et stoppent ce non-sens.";
|
||||
TXT_RANDOM_PEASANT_06 = "Laisse moi seul, OK?";
|
||||
TXT_RANDOM_PEASANT_07 = "Je ne suis pas sur , mais quelque fois je pense connaitre certains des acolytes.";
|
||||
TXT_RANDOM_PEASANT_08 = "L' ordre maintient tout ferme aux alentours.";
|
||||
TXT_RANDOM_PEASANT_09 = "Ce n'est pas possible que ce ne sois juste q'une force de securite.";
|
||||
TXT_RANDOM_PEASANT_10 = "J'ai entendu que l' ordre etait tres nerveux a cause des action du front aux alentours.";
|
||||
|
||||
TXT_RANDOM_REBEL_01 = "Ce n'est pas possible l'ordre se dressera contre nous.";
|
||||
TXT_RANDOM_REBEL_02 = "Nous sommes presque pret a frappe. Les plans de Macil echouront.";
|
||||
TXT_RANDOM_REBEL_03 = "Nous sommes tous derriere vous, ne vous inquiete pas.";
|
||||
TXT_RANDOM_REBEL_04 = "Ne vous approche pas trop de ces robots. Ils vous brulerons pour un rien!";
|
||||
TXT_RANDOM_REBEL_05 = "Le jour de gloire arrivera bientot, et ceux qui s'opposeront a nous seront ecrases!";
|
||||
TXT_RANDOM_REBEL_06 = "Ne vous reposez pas. Du travail nous attend encore.";
|
||||
TXT_RANDOM_REBEL_07 = "Macil dis que tu es le nouvel espoir. Garde ca a l'esprit.";
|
||||
TXT_RANDOM_REBEL_08 = "Une fois que nous auront fait chuter ces charlatans, Nous seront capable de rebatir le monde tel qu'il devrait etre.";
|
||||
TXT_RANDOM_REBEL_09 = "Souvient toi tu ne te bas pas seulement pour toi meme, mais pour tous le monde ici et dehors.";
|
||||
TXT_RANDOM_REBEL_10 = "Aussi longtemps qu'un de nous est debout, nous vaincront.";
|
||||
|
||||
TXT_RANDOM_AGUARD_01 = "Bouge de la, paysan.";
|
||||
TXT_RANDOM_AGUARD_02 = "Suis la vrai foie , seulement la tu commencera a comprendre.";
|
||||
TXT_RANDOM_AGUARD_03 = "C'est seulement a travers la mort que quelqu'un peut renaitre.";
|
||||
TXT_RANDOM_AGUARD_04 = "Je ne suis pas interesse par tes betises inutiles.";
|
||||
TXT_RANDOM_AGUARD_05 = "si j'avais voulu te parler je te l'aurais dis.";
|
||||
TXT_RANDOM_AGUARD_06 = "Va ennuyer quelqu'un d'autre!";
|
||||
TXT_RANDOM_AGUARD_07 = "Bouge!";
|
||||
TXT_RANDOM_AGUARD_08 = "Si l'alarme s'eteind, reste en dehors de notre chemin!";
|
||||
TXT_RANDOM_AGUARD_09 = "L'ordre nettoira le monde et le conduira dans une nouvelle ere.";
|
||||
TXT_RANDOM_AGUARD_10 = "Un probleme? Je pense que non.";
|
||||
|
||||
TXT_RANDOM_BEGGAR_01 = "L'aumone pour les pauvres?";
|
||||
TXT_RANDOM_BEGGAR_02 = "Qui regarde tu, surfacer?";
|
||||
TXT_RANDOM_BEGGAR_03 = "Aurai tu de la nourriture en trop sur toi, n'aurais tu pas?";
|
||||
TXT_RANDOM_BEGGAR_04 = "Vous les gens de la surface vous ne comprendrez jamais.";
|
||||
TXT_RANDOM_BEGGAR_05 = "Ha, les guarde ne nous trouve pas, ces idiot ne savent meme pas que l'ont existent.";
|
||||
TXT_RANDOM_BEGGAR_06 = "Un jour a part les membres de l'ordre sera force de nous rejoidre.";
|
||||
TXT_RANDOM_BEGGAR_07 = "Reste immobile maintenant, mais tu sais que cela sera un jour pour toi aussi.";
|
||||
TXT_RANDOM_BEGGAR_08 = "Ils n'y pas plus ennuyant qu'un surfacer et son comportement!";
|
||||
TXT_RANDOM_BEGGAR_09 = "L'ordre n'en aura pas pour longtemps de votre front.";
|
||||
TXT_RANDOM_BEGGAR_10 = "Prend guarde a toi, surfacer. Nous connaisont nos ennemis!";
|
||||
|
||||
TXT_RANDOM_PGUARD_01 = "Nous sommes les main du destin. Apprendre notre colere est de trouve l'oubli!";
|
||||
TXT_RANDOM_PGUARD_02 = "L'ordre nettoira le monde des faibles et corrompus!";
|
||||
TXT_RANDOM_PGUARD_03 = "Obei aux ordres du maitre!";
|
||||
TXT_RANDOM_PGUARD_04 = "longue vies aux frere de l'ordre!";
|
||||
TXT_RANDOM_PGUARD_05 = "La liberte est l'illusion qui aveugle les faible d'esprit.";
|
||||
TXT_RANDOM_PGUARD_06 = "le pouvoir est le chemin de la gloire. Suivre l'ordre c'est suivre ce chemin!";
|
||||
TXT_RANDOM_PGUARD_07 = "Prend ta place parmi les justes, rejoin nous!";
|
||||
TXT_RANDOM_PGUARD_08 = "L'ordre protege les siens.";
|
||||
TXT_RANDOM_PGUARD_09 = "Les Acolytes? Ils ont deja vus la pleine gloire de l'ordre.";
|
||||
TXT_RANDOM_PGUARD_10 = "Si il y a une once de gloire dans ce corps pathetique, Tu entrera dans les armes de l'ordre.";
|
||||
|
||||
TXT_RANDOMGOODBYE_1 = "Au revoir!";
|
||||
TXT_RANDOMGOODBYE_2 = "Merci, au revoir!";
|
||||
TXT_RANDOMGOODBYE_3 = "A plus tard!";
|
||||
|
||||
// Bloodbath announcer
|
||||
|
||||
BBA_BONED = "%k desossa %o comme un poisson";
|
||||
BBA_CASTRA = "%k castra %o";
|
||||
BBA_CREAMED = "%k a battu a plate couture %o";
|
||||
BBA_DECIMAT = "%k a decime %o";
|
||||
BBA_DESTRO = "%k a detruit %o";
|
||||
BBA_DICED = "%k a coupe en des %o";
|
||||
BBA_DISEMBO = "%k a etripe %o";
|
||||
BBA_FLATTE = "%k a aplatit %o";
|
||||
BBA_JUSTICE = "%k a rendu une justice anal a %o";
|
||||
BBA_MADNESS = "%k a fait une folie ANAL a %o";
|
||||
BBA_KILLED = "%k a tue %o";
|
||||
BBA_MINCMEAT = "%k a fait de la viande hachee de %o";
|
||||
BBA_MASSACR = "%k a massacre %o";
|
||||
BBA_MUTILA = "%k a mutile %o";
|
||||
BBA_REAMED = "%k a decoupe en fines lamelles %o";
|
||||
BBA_RIPPED = "%k a ouvert un nouvel orifice a %o";
|
||||
BBA_SLAUGHT = "%k a massacre %o";
|
||||
BBA_SMASHED = "%k a enfonce %o";
|
||||
BBA_SODOMIZ = "%k y a sodomise n %o";
|
||||
BBA_SPLATT = "%k a eclabousse les morceaux de %o";
|
||||
BBA_SQUASH = "%k a ecrabouille %o";
|
||||
BBA_THROTTL = "%k a etouffe %o";
|
||||
BBA_WASTED = "%k a decharne %o";
|
||||
BBA_BODYBAG = "%k a placer %o dans son linceul";
|
||||
BBA_HELL = "%k a envoye en enfer %o";
|
||||
BBA_TOAST = "%k a grille %o";
|
||||
BBA_SNUFF = "%k a creve %o";
|
||||
BBA_HOSED = "%k a arose %o";
|
||||
BBA_SPRAYED = "%k a pulverise %o";
|
||||
BBA_DOGMEAT = "%k a fait de la patee pour chien %o";
|
||||
BBA_BEATEN = "%k a battu %o";
|
||||
|
||||
BBA_EXCREMENT = "%o est un excrement";
|
||||
BBA_HAMBURGER = "%o est un hamburger";
|
||||
BBA_SCROTUM = "%o a souffert d'une separation du scrotum";
|
||||
BBA_POPULATION = "%o s'est propose pour un controle de la population";
|
||||
BBA_SUICIDE = "%o s'est suicide";
|
||||
BBA_DARWIN = "%o a recu la medaille Darwin";
|
||||
|
||||
|
||||
|
|
|
@ -558,3 +558,58 @@ Lock 51 Strife
|
|||
Mapcolor 150 150 150
|
||||
}
|
||||
|
||||
//
|
||||
// Chex Locks
|
||||
//
|
||||
|
||||
Lock 1 Chex
|
||||
{
|
||||
ChexRedCard
|
||||
Message "$PD_REDC"
|
||||
RemoteMessage "$PD_REDCO"
|
||||
Mapcolor 255 0 0
|
||||
}
|
||||
|
||||
|
||||
Lock 2 Chex
|
||||
{
|
||||
ChexBlueCard
|
||||
Message "$PD_BLUEC"
|
||||
RemoteMessage "$PD_BLUECO"
|
||||
Mapcolor 0 0 255
|
||||
}
|
||||
|
||||
|
||||
Lock 3 Chex
|
||||
{
|
||||
ChexYellowCard
|
||||
Message "$PD_YELLOWC"
|
||||
RemoteMessage "$PD_YELLOWCO"
|
||||
Mapcolor 255 255 0
|
||||
}
|
||||
|
||||
Lock 129 Chex
|
||||
{
|
||||
ChexRedCard
|
||||
Message "$PD_REDK"
|
||||
RemoteMessage "$PD_REDO"
|
||||
Mapcolor 255 0 0
|
||||
}
|
||||
|
||||
|
||||
Lock 130 Chex
|
||||
{
|
||||
ChexBlueCard
|
||||
Message "$PD_BLUEK"
|
||||
RemoteMessage "$PD_BLUEO"
|
||||
Mapcolor 0 0 255
|
||||
}
|
||||
|
||||
|
||||
Lock 131 Chex
|
||||
{
|
||||
ChexYellowCard
|
||||
Message "$PD_YELLOWK"
|
||||
RemoteMessage "$PD_YELLOWO"
|
||||
Mapcolor 255 255 0
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue