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)
|
August 14, 2008 (Changes by Graf Zahl)
|
||||||
- Fixed: The count parameter of A_Jump is a constant, not an expression.
|
- 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.
|
- Fixed: A_Jump used a wrong index into the jump address table.
|
||||||
|
@ -36,14 +118,14 @@ August 12, 2008 (Changes by Graf Zahl)
|
||||||
- Removed code related to internal ActorInfo definitions from dobjtype.cpp.
|
- Removed code related to internal ActorInfo definitions from dobjtype.cpp.
|
||||||
- removed unneeded file dehackedactions.h
|
- removed unneeded file dehackedactions.h
|
||||||
|
|
||||||
August 11, 2008
|
August 11, 2008
|
||||||
- Ported asm_x86_64/tmap3.nas to AT&T syntax so it can be compiled with gas.
|
- Ported asm_x86_64/tmap3.nas to AT&T syntax so it can be compiled with gas.
|
||||||
After finding out that gas does have directives to describe the .eh_frame
|
After finding out that gas does have directives to describe the .eh_frame
|
||||||
metadata, I figured that would be significantly easier and quicker than
|
metadata, I figured that would be significantly easier and quicker than
|
||||||
trying to locate all the scattered docs needed to construct it by hand.
|
trying to locate all the scattered docs needed to construct it by hand.
|
||||||
Unfortunately, this now means I have to maintain two versions of exactly
|
Unfortunately, this now means I have to maintain two versions of exactly
|
||||||
the same code. :(
|
the same code. :(
|
||||||
|
|
||||||
August 11, 2008 (Changes by Graf Zahl)
|
August 11, 2008 (Changes by Graf Zahl)
|
||||||
- Removed 'eval' modifier from DECORATE. All int, float and bool parameters are
|
- Removed 'eval' modifier from DECORATE. All int, float and bool parameters are
|
||||||
'eval' now by default.
|
'eval' now by default.
|
||||||
|
|
|
@ -229,7 +229,7 @@ void CT_Drawer (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw the prompt, text, and cursor
|
// draw the prompt, text, and cursor
|
||||||
ChatQueue[len] = gameinfo.gametype == GAME_Doom ? '_' : '[';
|
ChatQueue[len] = gameinfo.gametype & GAME_DoomChex ? '_' : '[';
|
||||||
ChatQueue[len+1] = '\0';
|
ChatQueue[len+1] = '\0';
|
||||||
if (con_scaletext < 2)
|
if (con_scaletext < 2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2096,17 +2096,19 @@ static int DoInclude (int dummy)
|
||||||
return GetLine();
|
return GetLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoDehPatch (const char *patchfile, bool autoloading)
|
void DoDehPatch (const char *patchfile, bool autoloading, int lump)
|
||||||
{
|
{
|
||||||
char file[256];
|
char file[256];
|
||||||
int cont;
|
int cont;
|
||||||
int filelen = 0; // Be quiet, gcc
|
int filelen = 0; // Be quiet, gcc
|
||||||
int lump;
|
|
||||||
|
|
||||||
PatchFile = NULL;
|
PatchFile = NULL;
|
||||||
PatchName = NULL;
|
PatchName = NULL;
|
||||||
|
|
||||||
lump = Wads.CheckNumForName ("DEHACKED");
|
if (lump < 0)
|
||||||
|
{
|
||||||
|
lump = Wads.CheckNumForName ("DEHACKED");
|
||||||
|
}
|
||||||
|
|
||||||
if (lump >= 0 && autoloading)
|
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 ();
|
void FinishDehPatch ();
|
||||||
|
|
||||||
#endif //__D_DEHACK_H__
|
#endif //__D_DEHACK_H__
|
||||||
|
|
|
@ -147,6 +147,9 @@ extern gameinfo_t HexenDKGameInfo;
|
||||||
extern gameinfo_t StrifeGameInfo;
|
extern gameinfo_t StrifeGameInfo;
|
||||||
extern gameinfo_t StrifeTeaserGameInfo;
|
extern gameinfo_t StrifeTeaserGameInfo;
|
||||||
extern gameinfo_t StrifeTeaser2GameInfo;
|
extern gameinfo_t StrifeTeaser2GameInfo;
|
||||||
|
extern gameinfo_t ChexGameInfo;
|
||||||
|
extern gameinfo_t PlutoniaGameInfo;
|
||||||
|
extern gameinfo_t TNTGameInfo;
|
||||||
|
|
||||||
extern int testingmode;
|
extern int testingmode;
|
||||||
extern bool setmodeneeded;
|
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 (Old Version)", NULL, MAKERGB(224,173,153), MAKERGB(0,107,101) },
|
||||||
{ "Strife: Teaser (New 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) },
|
{ "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 ------------------------------------------------
|
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||||
|
@ -251,6 +255,7 @@ static const char *IWADNames[] =
|
||||||
"strife1.wad",
|
"strife1.wad",
|
||||||
"strife0.wad",
|
"strife0.wad",
|
||||||
"freedoom.wad", // Freedoom.wad is distributed as Doom2.wad, but this allows to have both in the same directory.
|
"freedoom.wad", // Freedoom.wad is distributed as Doom2.wad, but this allows to have both in the same directory.
|
||||||
|
"chex.wad",
|
||||||
#ifdef unix
|
#ifdef unix
|
||||||
"DOOM2.WAD", // Also look for all-uppercase names
|
"DOOM2.WAD", // Also look for all-uppercase names
|
||||||
"PLUTONIA.WAD",
|
"PLUTONIA.WAD",
|
||||||
|
@ -264,6 +269,7 @@ static const char *IWADNames[] =
|
||||||
"STRIFE1.WAD",
|
"STRIFE1.WAD",
|
||||||
"STRIFE0.WAD",
|
"STRIFE0.WAD",
|
||||||
"FREEDOOM.WAD",
|
"FREEDOOM.WAD",
|
||||||
|
"CHEX.WAD",
|
||||||
#endif
|
#endif
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
@ -661,7 +667,7 @@ void D_Display ()
|
||||||
FTexture *tex;
|
FTexture *tex;
|
||||||
int x;
|
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 +
|
x = (SCREENWIDTH - tex->GetWidth()*CleanXfac)/2 +
|
||||||
tex->LeftOffset*CleanXfac;
|
tex->LeftOffset*CleanXfac;
|
||||||
screen->DrawTexture (tex, x, 4, DTA_CleanNoMove, true, TAG_DONE);
|
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;
|
const gameinfo_t *Info;
|
||||||
GameMission_t Mission;
|
GameMission_t Mission;
|
||||||
} Datas[NUM_IWAD_TYPES] = {
|
} Datas[NUM_IWAD_TYPES] = {
|
||||||
{ commercial, &CommercialGameInfo, pack_tnt }, // Doom2TNT
|
{ commercial, &TNTGameInfo, pack_tnt }, // Doom2TNT
|
||||||
{ commercial, &CommercialGameInfo, pack_plut }, // Doom2Plutonia
|
{ commercial, &PlutoniaGameInfo, pack_plut }, // Doom2Plutonia
|
||||||
{ commercial, &HexenGameInfo, doom2 }, // Hexen
|
{ commercial, &HexenGameInfo, doom2 }, // Hexen
|
||||||
{ commercial, &HexenDKGameInfo, doom2 }, // HexenDK
|
{ commercial, &HexenDKGameInfo, doom2 }, // HexenDK
|
||||||
{ commercial, &CommercialGameInfo, doom2 }, // Doom2
|
{ commercial, &CommercialGameInfo, doom2 }, // Doom2
|
||||||
|
@ -1339,6 +1345,7 @@ static void SetIWAD (const char *iwadpath, EIWADType type)
|
||||||
{ commercial, &StrifeTeaserGameInfo, doom2 }, // StrifeTeaser
|
{ commercial, &StrifeTeaserGameInfo, doom2 }, // StrifeTeaser
|
||||||
{ commercial, &StrifeTeaser2GameInfo, doom2 }, // StrifeTeaser2
|
{ commercial, &StrifeTeaser2GameInfo, doom2 }, // StrifeTeaser2
|
||||||
{ commercial, &CommercialGameInfo, doom2 }, // FreeDoom
|
{ commercial, &CommercialGameInfo, doom2 }, // FreeDoom
|
||||||
|
{ registered, &ChexGameInfo, doom }, // Chex Quest
|
||||||
};
|
};
|
||||||
|
|
||||||
D_AddFile (iwadpath);
|
D_AddFile (iwadpath);
|
||||||
|
@ -1382,10 +1389,13 @@ static EIWADType ScanIWAD (const char *iwad)
|
||||||
"MAP33",
|
"MAP33",
|
||||||
"INVCURS",
|
"INVCURS",
|
||||||
{ 'F','R','E','E','D','O','O','M' },
|
{ '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",
|
"E2M1","E2M2","E2M3","E2M4","E2M5","E2M6","E2M7","E2M8","E2M9",
|
||||||
"E3M1","E3M2","E3M3","E3M4","E3M5","E3M6","E3M7","E3M8","E3M9",
|
"E3M1","E3M2","E3M3","E3M4","E3M5","E3M6","E3M7","E3M8","E3M9",
|
||||||
"DPHOOF","BFGGA0","HEADA1","CYBRA1",
|
"DPHOOF","BFGGA0","HEADA1","CYBRA1",
|
||||||
{ 'S','P','I','D','A','1','D','1' },
|
{ 'S','P','I','D','A','1','D','1' },
|
||||||
|
|
||||||
};
|
};
|
||||||
#define NUM_CHECKLUMPS (sizeof(checklumps)/8)
|
#define NUM_CHECKLUMPS (sizeof(checklumps)/8)
|
||||||
enum
|
enum
|
||||||
|
@ -1402,6 +1412,8 @@ static EIWADType ScanIWAD (const char *iwad)
|
||||||
Check_map33,
|
Check_map33,
|
||||||
Check_invcurs,
|
Check_invcurs,
|
||||||
Check_FreeDoom,
|
Check_FreeDoom,
|
||||||
|
Check_W94_1,
|
||||||
|
Check_POSSH0M0,
|
||||||
Check_e2m1
|
Check_e2m1
|
||||||
};
|
};
|
||||||
int lumpsfound[NUM_CHECKLUMPS];
|
int lumpsfound[NUM_CHECKLUMPS];
|
||||||
|
@ -1512,7 +1524,14 @@ static EIWADType ScanIWAD (const char *iwad)
|
||||||
{
|
{
|
||||||
if (lumpsfound[Check_e4m1])
|
if (lumpsfound[Check_e4m1])
|
||||||
{
|
{
|
||||||
return IWAD_UltimateDoom;
|
if (lumpsfound[Check_W94_1] && lumpsfound[Check_POSSH0M0])
|
||||||
|
{
|
||||||
|
return IWAD_ChexQuest;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return IWAD_UltimateDoom;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,6 +71,7 @@ enum EIWADType
|
||||||
IWAD_StrifeTeaser,
|
IWAD_StrifeTeaser,
|
||||||
IWAD_StrifeTeaser2,
|
IWAD_StrifeTeaser2,
|
||||||
IWAD_FreeDoom,
|
IWAD_FreeDoom,
|
||||||
|
IWAD_ChexQuest,
|
||||||
|
|
||||||
NUM_IWAD_TYPES
|
NUM_IWAD_TYPES
|
||||||
};
|
};
|
||||||
|
|
|
@ -120,7 +120,6 @@ public:
|
||||||
fixed_t AttackZOffset; // attack height, relative to player center
|
fixed_t AttackZOffset; // attack height, relative to player center
|
||||||
|
|
||||||
// [CW] Fades for when you are being damaged.
|
// [CW] Fades for when you are being damaged.
|
||||||
bool HasDamageFade;
|
|
||||||
float RedDamageFade;
|
float RedDamageFade;
|
||||||
float GreenDamageFade;
|
float GreenDamageFade;
|
||||||
float BlueDamageFade;
|
float BlueDamageFade;
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include "r_draw.h"
|
#include "r_draw.h"
|
||||||
#include "a_sharedglobal.h"
|
#include "a_sharedglobal.h"
|
||||||
#include "r_translate.h"
|
#include "r_translate.h"
|
||||||
|
#include "gi.h"
|
||||||
|
|
||||||
FDecalLib DecalLibrary;
|
FDecalLib DecalLibrary;
|
||||||
|
|
||||||
|
@ -515,8 +516,15 @@ void FDecalLib::ParseDecal (FScanner &sc)
|
||||||
|
|
||||||
case DECAL_SHADE:
|
case DECAL_SHADE:
|
||||||
sc.MustGetString ();
|
sc.MustGetString ();
|
||||||
|
if (!sc.Compare("BloodDefault"))
|
||||||
|
{
|
||||||
|
newdecal.ShadeColor = V_GetColor (NULL, sc.String);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newdecal.ShadeColor = gameinfo.defaultbloodcolor;
|
||||||
|
}
|
||||||
newdecal.RenderStyle = STYLE_Shaded;
|
newdecal.RenderStyle = STYLE_Shaded;
|
||||||
newdecal.ShadeColor = V_GetColor (NULL, sc.String);
|
|
||||||
newdecal.ShadeColor |=
|
newdecal.ShadeColor |=
|
||||||
ColorMatcher.Pick (RPART(newdecal.ShadeColor),
|
ColorMatcher.Pick (RPART(newdecal.ShadeColor),
|
||||||
GPART(newdecal.ShadeColor), BPART(newdecal.ShadeColor)) << 24;
|
GPART(newdecal.ShadeColor), BPART(newdecal.ShadeColor)) << 24;
|
||||||
|
|
|
@ -393,9 +393,9 @@ void F_TextWrite (void)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// draw some of the text onto the screen
|
// 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 () +
|
rowheight = screen->Font->GetHeight () +
|
||||||
(gameinfo.gametype & (GAME_Doom|GAME_Strife) ? 3 : -1);
|
(gameinfo.gametype & (GAME_DoomStrifeChex) ? 3 : -1);
|
||||||
scale = (CleanXfac != 1 || CleanYfac != 1);
|
scale = (CleanXfac != 1 || CleanYfac != 1);
|
||||||
|
|
||||||
cx = leftmargin;
|
cx = leftmargin;
|
||||||
|
@ -405,7 +405,7 @@ void F_TextWrite (void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cy = (gameinfo.gametype & (GAME_Doom|GAME_Strife) ? 10 : 5) - 100;
|
cy = (gameinfo.gametype & (GAME_DoomStrifeChex) ? 10 : 5) - 100;
|
||||||
}
|
}
|
||||||
ch = FinaleText.GetChars();
|
ch = FinaleText.GetChars();
|
||||||
|
|
||||||
|
|
|
@ -623,41 +623,12 @@ void G_ParseMapInfo ()
|
||||||
atterm (G_UnloadMapInfo);
|
atterm (G_UnloadMapInfo);
|
||||||
|
|
||||||
// Parse the default MAPINFO for the current game.
|
// Parse the default MAPINFO for the current game.
|
||||||
switch (gameinfo.gametype)
|
for(int i=0; i<2; i++)
|
||||||
{
|
{
|
||||||
case GAME_Doom:
|
if (gameinfo.mapinfo[i] != NULL)
|
||||||
G_DoParseMapInfo (Wads.GetNumForFullName ("mapinfo/doomcommon.txt"));
|
|
||||||
switch (gamemission)
|
|
||||||
{
|
{
|
||||||
case doom:
|
G_DoParseMapInfo(Wads.GetNumForFullName(gameinfo.mapinfo[i]));
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
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.
|
// Parse any extra MAPINFOs.
|
||||||
|
@ -1736,7 +1707,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
{
|
{
|
||||||
int cstype = SBarInfoScript->GetGameType();
|
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 ();
|
StatusBar = CreateDoomStatusBar ();
|
||||||
}
|
}
|
||||||
|
@ -1759,7 +1730,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
}
|
}
|
||||||
if (StatusBar == NULL)
|
if (StatusBar == NULL)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
StatusBar = CreateDoomStatusBar ();
|
StatusBar = CreateDoomStatusBar ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ void ABasicArmor::Tick ()
|
||||||
{
|
{
|
||||||
switch (gameinfo.gametype)
|
switch (gameinfo.gametype)
|
||||||
{
|
{
|
||||||
|
case GAME_Chex:
|
||||||
case GAME_Doom:
|
case GAME_Doom:
|
||||||
Icon = TexMan.CheckForTexture (SavePercent == FRACUNIT/3 ? "ARM1A0" : "ARM2A0", FTexture::TEX_Any);
|
Icon = TexMan.CheckForTexture (SavePercent == FRACUNIT/3 ? "ARM1A0" : "ARM2A0", FTexture::TEX_Any);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -211,6 +211,10 @@ static void ParseLock(FScanner &sc)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype != GAME_Strife) keynum=-1;
|
if (gameinfo.gametype != GAME_Strife) keynum=-1;
|
||||||
}
|
}
|
||||||
|
else if (sc.Compare("CHEX"))
|
||||||
|
{
|
||||||
|
if (gameinfo.gametype != GAME_Chex) keynum=-1;
|
||||||
|
}
|
||||||
else sc.UnGet();
|
else sc.UnGet();
|
||||||
|
|
||||||
ignorekey = true;
|
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
|
// [BC] This behavior is from the original Doom. Give 5/2 times as much ammo when
|
||||||
// we pick up a weapon in deathmatch.
|
// we pick up a weapon in deathmatch.
|
||||||
if (( deathmatch ) && ( gameinfo.gametype == GAME_Doom ))
|
if (( deathmatch ) && ( gameinfo.gametype & GAME_DoomChex ))
|
||||||
amount = amount * 5 / 2;
|
amount = amount * 5 / 2;
|
||||||
|
|
||||||
// extra ammo in baby mode and nightmare mode
|
// 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 y, i, time = level.time / TICRATE, height;
|
||||||
int totaltime = level.totaltime / TICRATE;
|
int totaltime = level.totaltime / TICRATE;
|
||||||
EColorRange highlight = (gameinfo.gametype == GAME_Doom) ?
|
EColorRange highlight = (gameinfo.gametype & GAME_DoomChex) ?
|
||||||
CR_UNTRANSLATED : CR_YELLOW;
|
CR_UNTRANSLATED : CR_YELLOW;
|
||||||
|
|
||||||
height = screen->Font->GetHeight () * CleanYfac;
|
height = screen->Font->GetHeight () * CleanYfac;
|
||||||
|
@ -1474,16 +1474,6 @@ void DBaseStatusBar::BlendView (float blend[4])
|
||||||
cnt = 228;
|
cnt = 228;
|
||||||
|
|
||||||
APlayerPawn *mo = players[consoleplayer].mo;
|
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);
|
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 *key;
|
||||||
const char *value;
|
const char *value;
|
||||||
enum { Doom, Heretic, Hexen, Strife } game;
|
enum { Doom, Heretic, Hexen, Strife, Chex } game;
|
||||||
|
|
||||||
if (strcmp (gamename, "Heretic") == 0)
|
if (strcmp (gamename, "Heretic") == 0)
|
||||||
game = Heretic;
|
game = Heretic;
|
||||||
|
@ -233,6 +233,8 @@ void FGameConfigFile::DoGameSetup (const char *gamename)
|
||||||
game = Hexen;
|
game = Hexen;
|
||||||
else if (strcmp (gamename, "Strife") == 0)
|
else if (strcmp (gamename, "Strife") == 0)
|
||||||
game = Strife;
|
game = Strife;
|
||||||
|
else if (strcmp (gamename, "Chex") == 0)
|
||||||
|
game = Chex;
|
||||||
else
|
else
|
||||||
game = Doom;
|
game = Doom;
|
||||||
|
|
||||||
|
@ -663,6 +665,18 @@ void FGameConfigFile::SetupWeaponList (const char *gamename)
|
||||||
LocalWeapons.Slots[7].AddWeapon ("Mauler");
|
LocalWeapons.Slots[7].AddWeapon ("Mauler");
|
||||||
LocalWeapons.Slots[8].AddWeapon ("Sigil");
|
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
|
else // Doom
|
||||||
{
|
{
|
||||||
LocalWeapons.Slots[1].AddWeapon ("Fist");
|
LocalWeapons.Slots[1].AddWeapon ("Fist");
|
||||||
|
|
120
src/gi.cpp
120
src/gi.cpp
|
@ -36,12 +36,13 @@
|
||||||
#include "info.h"
|
#include "info.h"
|
||||||
#include "gi.h"
|
#include "gi.h"
|
||||||
#include "m_fixed.h"
|
#include "m_fixed.h"
|
||||||
|
#include "v_palette.h"
|
||||||
|
|
||||||
gameinfo_t gameinfo;
|
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",
|
"F_SKY",
|
||||||
24*FRACUNIT,
|
24*FRACUNIT,
|
||||||
"xlat/heretic.txt", // not really correct but this was used before.
|
"xlat/heretic.txt", // not really correct but this was used before.
|
||||||
|
{ "mapinfo/hexen.txt", NULL },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
||||||
gameinfo_t HexenDKGameInfo =
|
gameinfo_t HexenDKGameInfo =
|
||||||
|
@ -125,6 +128,8 @@ gameinfo_t HexenDKGameInfo =
|
||||||
"F_SKY",
|
"F_SKY",
|
||||||
24*FRACUNIT,
|
24*FRACUNIT,
|
||||||
"xlat/heretic.txt", // not really correct but this was used before.
|
"xlat/heretic.txt", // not really correct but this was used before.
|
||||||
|
{ "mapinfo/hexen.txt", NULL },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
||||||
gameinfo_t HereticGameInfo =
|
gameinfo_t HereticGameInfo =
|
||||||
|
@ -154,6 +159,8 @@ gameinfo_t HereticGameInfo =
|
||||||
"F_SKY1",
|
"F_SKY1",
|
||||||
24*FRACUNIT,
|
24*FRACUNIT,
|
||||||
"xlat/heretic.txt",
|
"xlat/heretic.txt",
|
||||||
|
{ "mapinfo/heretic.txt", NULL },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
||||||
gameinfo_t HereticSWGameInfo =
|
gameinfo_t HereticSWGameInfo =
|
||||||
|
@ -183,6 +190,8 @@ gameinfo_t HereticSWGameInfo =
|
||||||
"F_SKY1",
|
"F_SKY1",
|
||||||
24*FRACUNIT,
|
24*FRACUNIT,
|
||||||
"xlat/heretic.txt",
|
"xlat/heretic.txt",
|
||||||
|
{ "mapinfo/heretic.txt", NULL },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
||||||
gameinfo_t SharewareGameInfo =
|
gameinfo_t SharewareGameInfo =
|
||||||
|
@ -212,6 +221,8 @@ gameinfo_t SharewareGameInfo =
|
||||||
"F_SKY1",
|
"F_SKY1",
|
||||||
24*FRACUNIT,
|
24*FRACUNIT,
|
||||||
"xlat/doom.txt",
|
"xlat/doom.txt",
|
||||||
|
{ "mapinfo/doomcommon.txt", "mapinfo/doom1.txt" },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
||||||
gameinfo_t RegisteredGameInfo =
|
gameinfo_t RegisteredGameInfo =
|
||||||
|
@ -241,6 +252,39 @@ gameinfo_t RegisteredGameInfo =
|
||||||
"F_SKY1",
|
"F_SKY1",
|
||||||
24*FRACUNIT,
|
24*FRACUNIT,
|
||||||
"xlat/doom.txt",
|
"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 =
|
gameinfo_t RetailGameInfo =
|
||||||
|
@ -270,6 +314,8 @@ gameinfo_t RetailGameInfo =
|
||||||
"F_SKY1",
|
"F_SKY1",
|
||||||
24*FRACUNIT,
|
24*FRACUNIT,
|
||||||
"xlat/doom.txt",
|
"xlat/doom.txt",
|
||||||
|
{ "mapinfo/doomcommon.txt", "mapinfo/doom1.txt" },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
||||||
gameinfo_t CommercialGameInfo =
|
gameinfo_t CommercialGameInfo =
|
||||||
|
@ -299,6 +345,70 @@ gameinfo_t CommercialGameInfo =
|
||||||
"F_SKY1",
|
"F_SKY1",
|
||||||
24*FRACUNIT,
|
24*FRACUNIT,
|
||||||
"xlat/doom.txt",
|
"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 =
|
gameinfo_t StrifeGameInfo =
|
||||||
|
@ -328,6 +438,8 @@ gameinfo_t StrifeGameInfo =
|
||||||
"F_SKY001",
|
"F_SKY001",
|
||||||
16*FRACUNIT,
|
16*FRACUNIT,
|
||||||
"xlat/strife.txt",
|
"xlat/strife.txt",
|
||||||
|
{ "mapinfo/strife.txt", NULL },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
||||||
gameinfo_t StrifeTeaserGameInfo =
|
gameinfo_t StrifeTeaserGameInfo =
|
||||||
|
@ -357,6 +469,8 @@ gameinfo_t StrifeTeaserGameInfo =
|
||||||
"F_SKY001",
|
"F_SKY001",
|
||||||
16*FRACUNIT,
|
16*FRACUNIT,
|
||||||
"xlat/strife.txt",
|
"xlat/strife.txt",
|
||||||
|
{ "mapinfo/strife.txt", NULL },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
||||||
gameinfo_t StrifeTeaser2GameInfo =
|
gameinfo_t StrifeTeaser2GameInfo =
|
||||||
|
@ -386,4 +500,6 @@ gameinfo_t StrifeTeaser2GameInfo =
|
||||||
"F_SKY001",
|
"F_SKY001",
|
||||||
16*FRACUNIT,
|
16*FRACUNIT,
|
||||||
"xlat/strife.txt",
|
"xlat/strife.txt",
|
||||||
|
{ "mapinfo/strife.txt", NULL },
|
||||||
|
MAKERGB(100,0,0),
|
||||||
};
|
};
|
||||||
|
|
12
src/gi.h
12
src/gi.h
|
@ -47,6 +47,7 @@
|
||||||
#define GI_MENUHACK_COMMERCIAL 0x00000060
|
#define GI_MENUHACK_COMMERCIAL 0x00000060
|
||||||
#define GI_ALWAYSFALLINGDAMAGE 0x00000080
|
#define GI_ALWAYSFALLINGDAMAGE 0x00000080
|
||||||
#define GI_TEASER2 0x00000100 // Alternate version of the Strife Teaser
|
#define GI_TEASER2 0x00000100 // Alternate version of the Strife Teaser
|
||||||
|
#define GI_CHEX_QUEST 0x00000200
|
||||||
|
|
||||||
#ifndef EGAMETYPE
|
#ifndef EGAMETYPE
|
||||||
#define EGAMETYPE
|
#define EGAMETYPE
|
||||||
|
@ -57,13 +58,16 @@ enum EGameType
|
||||||
GAME_Heretic = 2,
|
GAME_Heretic = 2,
|
||||||
GAME_Hexen = 4,
|
GAME_Hexen = 4,
|
||||||
GAME_Strife = 8,
|
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_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
|
#endif
|
||||||
|
|
||||||
extern const char *GameNames[9];
|
extern const char *GameNames[17];
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -114,6 +118,8 @@ typedef struct
|
||||||
char SkyFlatName[9];
|
char SkyFlatName[9];
|
||||||
fixed_t StepHeight;
|
fixed_t StepHeight;
|
||||||
const char *translator;
|
const char *translator;
|
||||||
|
const char *mapinfo[2];
|
||||||
|
DWORD defaultbloodcolor;
|
||||||
} gameinfo_t;
|
} gameinfo_t;
|
||||||
|
|
||||||
extern gameinfo_t gameinfo;
|
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
|
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)
|
if (player->poisoncount)
|
||||||
|
|
|
@ -1506,7 +1506,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector,
|
||||||
}
|
}
|
||||||
|
|
||||||
//return;
|
//return;
|
||||||
if (!backsector || !(seg->linedef->flags&ML_TWOSIDED)) /* onesided */
|
if (!backsector || !(seg->linedef->flags&ML_TWOSIDED)) // one sided
|
||||||
{
|
{
|
||||||
// sector's sky
|
// sector's sky
|
||||||
SkyNormal(frontsector,v1,v2);
|
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!
|
realfront->GetPlaneTexZ(sector_t::ceiling),realfront->GetPlaneTexZ(sector_t::floor), // must come from the original!
|
||||||
fch1,fch2,ffh1,ffh2,0);
|
fch1,fch2,ffh1,ffh2,0);
|
||||||
}
|
}
|
||||||
else /* twosided */
|
else // two sided
|
||||||
{
|
{
|
||||||
|
|
||||||
fixed_t bch1;
|
fixed_t bch1;
|
||||||
|
|
|
@ -45,6 +45,7 @@ extern FStringTable GStrings;
|
||||||
// QuitGame messages
|
// QuitGame messages
|
||||||
#define NUM_QUITDOOMMESSAGES 15
|
#define NUM_QUITDOOMMESSAGES 15
|
||||||
#define NUM_QUITSTRIFEMESSAGES 8
|
#define NUM_QUITSTRIFEMESSAGES 8
|
||||||
|
#define NUM_QUITCHEXMESSAGES 2
|
||||||
|
|
||||||
extern const char *endmsg[];
|
extern const char *endmsg[];
|
||||||
|
|
||||||
|
|
|
@ -184,9 +184,12 @@ enum EGameType
|
||||||
GAME_Heretic = 2,
|
GAME_Heretic = 2,
|
||||||
GAME_Hexen = 4,
|
GAME_Hexen = 4,
|
||||||
GAME_Strife = 8,
|
GAME_Strife = 8,
|
||||||
|
GAME_Chex = 16,
|
||||||
|
|
||||||
GAME_Raven = GAME_Heretic|GAME_Hexen,
|
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
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -81,10 +81,20 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
// fall through to CHT_GOD
|
// fall through to CHT_GOD
|
||||||
case CHT_GOD:
|
case CHT_GOD:
|
||||||
player->cheats ^= CF_GODMODE;
|
player->cheats ^= CF_GODMODE;
|
||||||
if (player->cheats & CF_GODMODE)
|
if (gameinfo.gametype != GAME_Chex)
|
||||||
msg = GStrings("STSTR_DQDON");
|
{
|
||||||
|
if (player->cheats & CF_GODMODE)
|
||||||
|
msg = GStrings("STSTR_DQDON");
|
||||||
|
else
|
||||||
|
msg = GStrings("STSTR_DQDOFF");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
msg = GStrings("STSTR_DQDOFF");
|
{
|
||||||
|
if (player->cheats & CF_GODMODE)
|
||||||
|
msg = GStrings("STSTR_CDQDON");
|
||||||
|
else
|
||||||
|
msg = GStrings("STSTR_CDQDOFF");
|
||||||
|
}
|
||||||
SB_state = screen->GetPageCount ();
|
SB_state = screen->GetPageCount ();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -160,7 +170,10 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
{
|
{
|
||||||
player->mo->GiveInventoryType (type);
|
player->mo->GiveInventoryType (type);
|
||||||
}
|
}
|
||||||
msg = GStrings("STSTR_CHOPPERS");
|
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.
|
// [RH] The original cheat also set powers[pw_invulnerability] to true.
|
||||||
// Since this is a timer and not a boolean, it effectively turned off
|
// 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, "ammo");
|
||||||
cht_Give (player, "keys");
|
cht_Give (player, "keys");
|
||||||
cht_Give (player, "armor");
|
cht_Give (player, "armor");
|
||||||
msg = GStrings("STSTR_KFAADDED");
|
if(gameinfo.gametype != GAME_Chex)
|
||||||
|
msg = GStrings("STSTR_KFAADDED");
|
||||||
|
else
|
||||||
|
msg = GStrings("STSTR_CKFAADDED");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHT_IDFA:
|
case CHT_IDFA:
|
||||||
|
@ -199,7 +215,10 @@ void cht_DoCheat (player_t *player, int cheat)
|
||||||
cht_Give (player, "weapons");
|
cht_Give (player, "weapons");
|
||||||
cht_Give (player, "ammo");
|
cht_Give (player, "ammo");
|
||||||
cht_Give (player, "armor");
|
cht_Give (player, "armor");
|
||||||
msg = GStrings("STSTR_FAADDED");
|
if(gameinfo.gametype != GAME_Chex)
|
||||||
|
msg = GStrings("STSTR_FAADDED");
|
||||||
|
else
|
||||||
|
msg = GStrings("STSTR_CFAADDED");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHT_BEHOLDV:
|
case CHT_BEHOLDV:
|
||||||
|
@ -622,6 +641,10 @@ void cht_Give (player_t *player, const char *name, int amount)
|
||||||
{
|
{
|
||||||
type = PClass::FindClass ("Backpack");
|
type = PClass::FindClass ("Backpack");
|
||||||
}
|
}
|
||||||
|
else if (gameinfo.gametype == GAME_Chex)
|
||||||
|
{
|
||||||
|
type = PClass::FindClass ("Zorchpack");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{ // Hexen doesn't have a backpack, foo!
|
{ // Hexen doesn't have a backpack, foo!
|
||||||
type = NULL;
|
type = NULL;
|
||||||
|
@ -850,6 +873,10 @@ void cht_Take (player_t *player, const char *name, int amount)
|
||||||
{
|
{
|
||||||
type = PClass::FindClass ("Backpack");
|
type = PClass::FindClass ("Backpack");
|
||||||
}
|
}
|
||||||
|
else if (gameinfo.gametype == GAME_Chex)
|
||||||
|
{
|
||||||
|
type = PClass::FindClass ("Zorchpack");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{ // Hexen doesn't have a backpack, foo!
|
{ // Hexen doesn't have a backpack, foo!
|
||||||
type = NULL;
|
type = NULL;
|
||||||
|
|
102
src/m_menu.cpp
102
src/m_menu.cpp
|
@ -926,7 +926,7 @@ void M_NotifyNewSave (const char *file, const char *title, bool okForQuicksave)
|
||||||
//
|
//
|
||||||
void M_DrawLoad (void)
|
void M_DrawLoad (void)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||||
{
|
{
|
||||||
FTexture *title = TexMan["M_LOADG"];
|
FTexture *title = TexMan["M_LOADG"];
|
||||||
screen->DrawTexture (title,
|
screen->DrawTexture (title,
|
||||||
|
@ -952,7 +952,7 @@ void M_DrawLoad (void)
|
||||||
//
|
//
|
||||||
void M_DrawSaveLoadBorder (int x, int y, int len)
|
void M_DrawSaveLoadBorder (int x, int y, int len)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -1272,7 +1272,10 @@ void M_LoadGame (int choice)
|
||||||
{
|
{
|
||||||
if (netgame)
|
if (netgame)
|
||||||
{
|
{
|
||||||
M_StartMessage (GStrings("LOADNET"), NULL, false);
|
if(gameinfo.gametype == GAME_Chex)
|
||||||
|
M_StartMessage (GStrings("CLOADNET"), NULL, false);
|
||||||
|
else
|
||||||
|
M_StartMessage (GStrings("LOADNET"), NULL, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1289,7 +1292,7 @@ void M_LoadGame (int choice)
|
||||||
//
|
//
|
||||||
void M_DrawSave()
|
void M_DrawSave()
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||||
{
|
{
|
||||||
FTexture *title = TexMan["M_SAVEG"];
|
FTexture *title = TexMan["M_SAVEG"];
|
||||||
screen->DrawTexture (title,
|
screen->DrawTexture (title,
|
||||||
|
@ -1401,7 +1404,10 @@ void M_QuickSave ()
|
||||||
M_SaveGame (0);
|
M_SaveGame (0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mysnprintf (tempstring, countof(tempstring), GStrings("QSPROMPT"), quickSaveSlot->Title);
|
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);
|
strcpy (savegamestring, quickSaveSlot->Title);
|
||||||
M_StartMessage (tempstring, M_QuickSaveResponse, true);
|
M_StartMessage (tempstring, M_QuickSaveResponse, true);
|
||||||
}
|
}
|
||||||
|
@ -1425,7 +1431,10 @@ void M_QuickLoad ()
|
||||||
{
|
{
|
||||||
if (netgame)
|
if (netgame)
|
||||||
{
|
{
|
||||||
M_StartMessage (GStrings("QLOADNET"), NULL, false);
|
if(gameinfo.gametype == GAME_Chex)
|
||||||
|
M_StartMessage (GStrings("CQLOADNET"), NULL, false);
|
||||||
|
else
|
||||||
|
M_StartMessage (GStrings("QLOADNET"), NULL, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1437,7 +1446,10 @@ void M_QuickLoad ()
|
||||||
M_LoadGame (0);
|
M_LoadGame (0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
mysnprintf (tempstring, countof(tempstring), GStrings("QLPROMPT"), quickSaveSlot->Title);
|
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);
|
M_StartMessage (tempstring, M_QuickLoadResponse, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1499,7 +1511,7 @@ void M_DrawReadThis ()
|
||||||
//
|
//
|
||||||
void M_DrawMainMenu (void)
|
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);
|
screen->DrawTexture (TexMan["M_DOOM"], 94, 2, DTA_Clean, true, TAG_DONE);
|
||||||
}
|
}
|
||||||
|
@ -1542,9 +1554,9 @@ void M_DrawHereticMainMenu ()
|
||||||
//
|
//
|
||||||
void M_DrawNewGame(void)
|
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);
|
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 (netgame && !demoplayback)
|
||||||
{
|
{
|
||||||
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
if(gameinfo.gametype == GAME_Chex)
|
||||||
|
M_StartMessage (GStrings("CNEWGAME"), NULL, false);
|
||||||
|
else
|
||||||
|
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up episode menu positioning
|
// Set up episode menu positioning
|
||||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||||
{
|
{
|
||||||
EpiDef.x = 48;
|
EpiDef.x = 48;
|
||||||
EpiDef.y = 63;
|
EpiDef.y = 63;
|
||||||
|
@ -1679,7 +1694,7 @@ static void M_DrawClassMenu ()
|
||||||
if (ClassMenuDef.numitems > 4 && gameinfo.gametype & GAME_Raven)
|
if (ClassMenuDef.numitems > 4 && gameinfo.gametype & GAME_Raven)
|
||||||
tit_y = 2;
|
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,
|
160 - BigFont->StringWidth (text)/2,
|
||||||
tit_y,
|
tit_y,
|
||||||
text, DTA_Clean, true, TAG_DONE);
|
text, DTA_Clean, true, TAG_DONE);
|
||||||
|
@ -1738,7 +1753,7 @@ static void DrawHexenSkillMenu()
|
||||||
//
|
//
|
||||||
void M_DrawEpisode ()
|
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);
|
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_StartMessage(GStrings("SWSTRING"),NULL,false);
|
||||||
//M_SetupNextMenu(&ReadDef);
|
//M_SetupNextMenu(&ReadDef);
|
||||||
}
|
}
|
||||||
|
else if (gameinfo.gametype == GAME_Chex)
|
||||||
|
{
|
||||||
|
M_StartMessage(GStrings("CSWSTRING"),NULL,false);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
showSharewareMessage = 3*TICRATE;
|
showSharewareMessage = 3*TICRATE;
|
||||||
|
@ -1818,7 +1837,10 @@ static void SCClass (int option)
|
||||||
{
|
{
|
||||||
if (netgame)
|
if (netgame)
|
||||||
{
|
{
|
||||||
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
if(gameinfo.gametype == GAME_Chex)
|
||||||
|
M_StartMessage (GStrings("CNEWGAME"), NULL, false);
|
||||||
|
else
|
||||||
|
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1846,7 +1868,10 @@ static void M_ChooseClass (int choice)
|
||||||
{
|
{
|
||||||
if (netgame)
|
if (netgame)
|
||||||
{
|
{
|
||||||
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
if(gameinfo.gametype == GAME_Chex)
|
||||||
|
M_StartMessage (GStrings("CNEWGAME"), NULL, false);
|
||||||
|
else
|
||||||
|
M_StartMessage (GStrings("NEWGAME"), NULL, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1899,11 +1924,17 @@ void M_EndGame(int choice)
|
||||||
|
|
||||||
if (netgame)
|
if (netgame)
|
||||||
{
|
{
|
||||||
M_StartMessage(GStrings("NETEND"),NULL,false);
|
if(gameinfo.gametype == GAME_Chex)
|
||||||
|
M_StartMessage(GStrings("CNETEND"),NULL,false);
|
||||||
|
else
|
||||||
|
M_StartMessage(GStrings("NETEND"),NULL,false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
M_StartMessage(GStrings("ENDGAME"),M_EndGameResponse,true);
|
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,
|
// We pick index 0 which is language sensitive,
|
||||||
// or one at random, between 1 and maximum number.
|
// 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);
|
int quitmsg = 0;
|
||||||
if (quitmsg != 0 || gameinfo.gametype == GAME_Strife)
|
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"));
|
EndString.Format("%s\n\n%s", GStrings(EndString), GStrings("DOSY"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2061,7 +2099,7 @@ static void M_PlayerSetupDrawer ()
|
||||||
EColorRange label, value;
|
EColorRange label, value;
|
||||||
DWORD color;
|
DWORD color;
|
||||||
|
|
||||||
if (!(gameinfo.gametype & (GAME_Doom|GAME_Strife)))
|
if (!(gameinfo.gametype & (GAME_DoomStrifeChex)))
|
||||||
{
|
{
|
||||||
xo = 5;
|
xo = 5;
|
||||||
yo = 5;
|
yo = 5;
|
||||||
|
@ -2077,7 +2115,7 @@ static void M_PlayerSetupDrawer ()
|
||||||
|
|
||||||
// Draw title
|
// Draw title
|
||||||
const char * text = GStrings("MNU_PLAYERSETUP");
|
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,
|
160 - BigFont->StringWidth (text)/2,
|
||||||
15,
|
15,
|
||||||
text, DTA_Clean, true, TAG_DONE);
|
text, DTA_Clean, true, TAG_DONE);
|
||||||
|
@ -3210,7 +3248,7 @@ void M_Drawer ()
|
||||||
if (color == CR_UNTRANSLATED)
|
if (color == CR_UNTRANSLATED)
|
||||||
{
|
{
|
||||||
// The default DBIGFONT is white but Doom's default should be red.
|
// 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;
|
color = CR_RED;
|
||||||
}
|
}
|
||||||
|
@ -3241,12 +3279,12 @@ void M_Drawer ()
|
||||||
screen->SetFont (ConFont);
|
screen->SetFont (ConFont);
|
||||||
screen->DrawText (CR_RED, x - 16,
|
screen->DrawText (CR_RED, x - 16,
|
||||||
currentMenu->y + itemOn*LINEHEIGHT +
|
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);
|
DTA_Clean, true, TAG_DONE);
|
||||||
screen->SetFont (SmallFont);
|
screen->SetFont (SmallFont);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (gameinfo.gametype == GAME_Doom)
|
else if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
screen->DrawTexture (TexMan[skullName[whichSkull]],
|
screen->DrawTexture (TexMan[skullName[whichSkull]],
|
||||||
x + SKULLXOFF, currentMenu->y - 5 + itemOn*LINEHEIGHT,
|
x + SKULLXOFF, currentMenu->y - 5 + itemOn*LINEHEIGHT,
|
||||||
|
@ -3398,7 +3436,7 @@ void M_Init (void)
|
||||||
|
|
||||||
atterm (M_Deinit);
|
atterm (M_Deinit);
|
||||||
|
|
||||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||||
{
|
{
|
||||||
TopLevelMenu = currentMenu = &MainDef;
|
TopLevelMenu = currentMenu = &MainDef;
|
||||||
if (gameinfo.gametype == GAME_Strife)
|
if (gameinfo.gametype == GAME_Strife)
|
||||||
|
@ -3429,10 +3467,10 @@ void M_Init (void)
|
||||||
lastSaveSlot = NULL;
|
lastSaveSlot = NULL;
|
||||||
strcpy (NewSaveNode.Title, "<New Save Game>");
|
strcpy (NewSaveNode.Title, "<New Save Game>");
|
||||||
|
|
||||||
underscore[0] = (gameinfo.gametype & (GAME_Doom|GAME_Strife)) ? '_' : '[';
|
underscore[0] = (gameinfo.gametype & (GAME_DoomStrifeChex)) ? '_' : '[';
|
||||||
underscore[1] = '\0';
|
underscore[1] = '\0';
|
||||||
|
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
LINEHEIGHT = 16;
|
LINEHEIGHT = 16;
|
||||||
}
|
}
|
||||||
|
@ -3494,7 +3532,7 @@ void M_Init (void)
|
||||||
ClassMenuDef.numitems = 1;
|
ClassMenuDef.numitems = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gameinfo.gametype & (GAME_Doom|GAME_Strife))
|
if (gameinfo.gametype & (GAME_DoomStrifeChex))
|
||||||
{
|
{
|
||||||
ClassMenuDef.x = 48;
|
ClassMenuDef.x = 48;
|
||||||
ClassMenuDef.y = 63;
|
ClassMenuDef.y = 63;
|
||||||
|
|
|
@ -605,6 +605,7 @@ static bool FindFreeName (FString &fullname, const char *extension)
|
||||||
case GAME_Heretic: gamename = "Heretic_"; break;
|
case GAME_Heretic: gamename = "Heretic_"; break;
|
||||||
case GAME_Hexen: gamename = "Hexen_"; break;
|
case GAME_Hexen: gamename = "Hexen_"; break;
|
||||||
case GAME_Strife: gamename = "Strife_"; break;
|
case GAME_Strife: gamename = "Strife_"; break;
|
||||||
|
case GAME_Chex: gamename = "Chex_"; break;
|
||||||
default: gamename = ""; break;
|
default: gamename = ""; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1681,7 +1681,7 @@ void M_OptDrawer ()
|
||||||
if (BigFont && CurrentMenu->texttitle)
|
if (BigFont && CurrentMenu->texttitle)
|
||||||
{
|
{
|
||||||
screen->SetFont (BigFont);
|
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,
|
160-BigFont->StringWidth (CurrentMenu->texttitle)/2, 10,
|
||||||
CurrentMenu->texttitle, DTA_Clean, true, TAG_DONE);
|
CurrentMenu->texttitle, DTA_Clean, true, TAG_DONE);
|
||||||
screen->SetFont (SmallFont);
|
screen->SetFont (SmallFont);
|
||||||
|
@ -2208,7 +2208,7 @@ void M_OptResponder (event_t *ev)
|
||||||
{
|
{
|
||||||
maxitems = 15;
|
maxitems = 15;
|
||||||
}
|
}
|
||||||
if (gameinfo.gametype != GAME_Doom)
|
if (!(gameinfo.gametype & GAME_DoomChex))
|
||||||
{
|
{
|
||||||
maxitems -= 2;
|
maxitems -= 2;
|
||||||
rowheight = 9;
|
rowheight = 9;
|
||||||
|
|
|
@ -82,6 +82,7 @@ xx(StrifePlayer)
|
||||||
xx(FighterPlayer)
|
xx(FighterPlayer)
|
||||||
xx(ClericPlayer)
|
xx(ClericPlayer)
|
||||||
xx(MagePlayer)
|
xx(MagePlayer)
|
||||||
|
xx(ChexPlayer)
|
||||||
xx(ChickenPlayer)
|
xx(ChickenPlayer)
|
||||||
xx(PigPlayer)
|
xx(PigPlayer)
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#include "r_things.h"
|
#include "r_things.h"
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
|
#include "gi.h"
|
||||||
|
|
||||||
CVAR (Int, cl_rockettrails, 1, CVAR_ARCHIVE);
|
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,
|
static int grey1, grey2, grey3, grey4, red, green, blue, yellow, black,
|
||||||
red1, green1, blue1, yellow1, purple, purple1, white,
|
red1, green1, blue1, yellow1, purple, purple1, white,
|
||||||
rblue1, rblue2, rblue3, rblue4, orange, yorange, dred, grey5,
|
rblue1, rblue2, rblue3, rblue4, orange, yorange, dred, grey5,
|
||||||
maroon1, maroon2;
|
maroon1, maroon2, blood1, blood2;
|
||||||
|
|
||||||
static const struct ColorList {
|
static const struct ColorList {
|
||||||
int *color;
|
int *color;
|
||||||
|
@ -99,8 +100,13 @@ void P_InitEffects ()
|
||||||
*(color->color) = ColorMatcher.Pick (color->r, color->g, color->b);
|
*(color->color) = ColorMatcher.Pick (color->r, color->g, color->b);
|
||||||
color++;
|
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 ()
|
void P_ThinkParticles ()
|
||||||
{
|
{
|
||||||
int i;
|
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)
|
switch (kind)
|
||||||
{
|
{
|
||||||
case 0: // Blood
|
case 0: // Blood
|
||||||
color1 = red;
|
color1 = blood1;
|
||||||
color2 = dred;
|
color2 = blood2;
|
||||||
break;
|
break;
|
||||||
case 1: // Gunshot
|
case 1: // Gunshot
|
||||||
color1 = grey3;
|
color1 = grey3;
|
||||||
|
|
|
@ -1412,7 +1412,7 @@ bool P_LookForPlayers (AActor *actor, INTBOOL allaround)
|
||||||
return P_LookForEnemies (actor, allaround);
|
return P_LookForEnemies (actor, allaround);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(gameinfo.gametype & (GAME_Doom|GAME_Strife)) &&
|
if (!(gameinfo.gametype & (GAME_DoomStrifeChex)) &&
|
||||||
!multiplayer &&
|
!multiplayer &&
|
||||||
players[0].health <= 0)
|
players[0].health <= 0)
|
||||||
{ // Single player game and player is dead; look for monsters
|
{ // 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);
|
return P_NewLookEnemies (actor, fov, mindist, maxdist, chasegoal);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(gameinfo.gametype & (GAME_Doom|GAME_Strife)) &&
|
if (!(gameinfo.gametype & (GAME_DoomStrifeChex)) &&
|
||||||
!multiplayer &&
|
!multiplayer &&
|
||||||
players[0].health <= 0)
|
players[0].health <= 0)
|
||||||
{ // Single player game and player is dead; look for monsters
|
{ // Single player game and player is dead; look for monsters
|
||||||
|
|
|
@ -321,7 +321,7 @@ static int GibHealth(AActor *actor)
|
||||||
return -abs(
|
return -abs(
|
||||||
actor->GetClass()->Meta.GetMetaInt (
|
actor->GetClass()->Meta.GetMetaInt (
|
||||||
AMETA_GibHealth,
|
AMETA_GibHealth,
|
||||||
gameinfo.gametype == GAME_Doom ?
|
gameinfo.gametype & GAME_DoomChex ?
|
||||||
-actor->GetDefault()->health :
|
-actor->GetDefault()->health :
|
||||||
-actor->GetDefault()->health/2));
|
-actor->GetDefault()->health/2));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1955,7 +1955,7 @@ void P_ZMovement (AActor *mo)
|
||||||
if (mo->z <= mo->floorz)
|
if (mo->z <= mo->floorz)
|
||||||
{
|
{
|
||||||
if ((mo->flags & MF_MISSILE) &&
|
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;
|
mo->z = mo->floorz;
|
||||||
if (mo->flags2 & MF2_BOUNCETYPE)
|
if (mo->flags2 & MF2_BOUNCETYPE)
|
||||||
|
@ -2066,7 +2066,7 @@ void P_ZMovement (AActor *mo)
|
||||||
mo->momz = -mo->momz;
|
mo->momz = -mo->momz;
|
||||||
}
|
}
|
||||||
if (mo->flags & MF_MISSILE &&
|
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)
|
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 = Spawn (bloodcls, x, y, z, ALLOW_REPLACE);
|
||||||
th->momz = FRACUNIT*2;
|
th->momz = FRACUNIT*2;
|
||||||
th->angle = dir;
|
th->angle = dir;
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
th->tics -= pr_spawnblood() & 3;
|
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
|
// 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)
|
if (gameinfo.gametype == GAME_Strife)
|
||||||
{
|
{
|
||||||
|
@ -5019,7 +5019,7 @@ void AActor::Crash()
|
||||||
if (crashstate == NULL)
|
if (crashstate == NULL)
|
||||||
{
|
{
|
||||||
int gibhealth = -abs(GetClass()->Meta.GetMetaInt (AMETA_GibHealth,
|
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)
|
if (health < gibhealth)
|
||||||
{ // Extreme death
|
{ // Extreme death
|
||||||
|
|
|
@ -344,7 +344,7 @@ static void ParseOuter (FScanner &sc)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OUT_IFDOOM:
|
case OUT_IFDOOM:
|
||||||
if (gameinfo.gametype != GAME_Doom)
|
if (!(gameinfo.gametype & GAME_DoomChex))
|
||||||
{
|
{
|
||||||
ifskip = true;
|
ifskip = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,11 @@ void SetupPlayerClasses ()
|
||||||
newclass.Type = PClass::FindClass (NAME_StrifePlayer);
|
newclass.Type = PClass::FindClass (NAME_StrifePlayer);
|
||||||
PlayerClasses.Push (newclass);
|
PlayerClasses.Push (newclass);
|
||||||
}
|
}
|
||||||
|
else if (gameinfo.gametype == GAME_Chex)
|
||||||
|
{
|
||||||
|
newclass.Type = PClass::FindClass (NAME_ChexPlayer);
|
||||||
|
PlayerClasses.Push (newclass);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CCMD (clearplayerclasses)
|
CCMD (clearplayerclasses)
|
||||||
|
@ -423,7 +428,10 @@ void APlayerPawn::Serialize (FArchive &arc)
|
||||||
<< ScoreIcon
|
<< ScoreIcon
|
||||||
<< InvFirst
|
<< InvFirst
|
||||||
<< InvSel
|
<< InvSel
|
||||||
<< MorphWeapon;
|
<< MorphWeapon
|
||||||
|
<< RedDamageFade
|
||||||
|
<< GreenDamageFade
|
||||||
|
<< BlueDamageFade;
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
|
@ -86,7 +86,7 @@ void P_TranslateLineDef (line_t *ld, maplinedef_t *mld)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
if (flags & ML_RESERVED_ETERNITY)
|
if (flags & ML_RESERVED_ETERNITY)
|
||||||
{
|
{
|
||||||
|
|
|
@ -523,7 +523,7 @@ void R_InitSkins (void)
|
||||||
|
|
||||||
if (stricmp (sc.String, "heretic") == 0)
|
if (stricmp (sc.String, "heretic") == 0)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
transtype = PClass::FindClass (NAME_HereticPlayer);
|
transtype = PClass::FindClass (NAME_HereticPlayer);
|
||||||
skins[i].othergame = true;
|
skins[i].othergame = true;
|
||||||
|
@ -547,7 +547,7 @@ void R_InitSkins (void)
|
||||||
transtype = PClass::FindClass (NAME_DoomPlayer);
|
transtype = PClass::FindClass (NAME_DoomPlayer);
|
||||||
skins[i].othergame = true;
|
skins[i].othergame = true;
|
||||||
}
|
}
|
||||||
else if (gameinfo.gametype != GAME_Doom)
|
else if (!(gameinfo.gametype & GAME_DoomChex))
|
||||||
{
|
{
|
||||||
remove = true;
|
remove = true;
|
||||||
}
|
}
|
||||||
|
@ -618,7 +618,7 @@ void R_InitSkins (void)
|
||||||
// [GRB] Assume Doom skin by default
|
// [GRB] Assume Doom skin by default
|
||||||
if (!remove && basetype == NULL)
|
if (!remove && basetype == NULL)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
basetype = transtype = PClass::FindClass (NAME_DoomPlayer);
|
basetype = transtype = PClass::FindClass (NAME_DoomPlayer);
|
||||||
}
|
}
|
||||||
|
@ -849,7 +849,7 @@ void R_InitSprites ()
|
||||||
clearbufshort (zeroarray, MAXWIDTH, 0);
|
clearbufshort (zeroarray, MAXWIDTH, 0);
|
||||||
|
|
||||||
// [RH] Create a standard translation to map skins between Heretic and Doom
|
// [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");
|
R_CreateSkinTranslation ("SPALHTIC");
|
||||||
}
|
}
|
||||||
|
|
|
@ -363,7 +363,7 @@ void R_InitTranslationTables ()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the standard translation tables
|
// Create the standard translation tables
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
for (i = 0x70; i < 0x80; i++)
|
for (i = 0x70; i < 0x80; i++)
|
||||||
{ // map green ramp to gray, brown, red
|
{ // 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;
|
bases = s;
|
||||||
basev = v;
|
basev = v;
|
||||||
|
|
||||||
if (gameinfo.gametype == GAME_Doom || gameinfo.gametype == GAME_Strife)
|
if (gameinfo.gametype & GAME_DoomStrifeChex)
|
||||||
{
|
{
|
||||||
// Build player sprite translation
|
// Build player sprite translation
|
||||||
s -= 0.23f;
|
s -= 0.23f;
|
||||||
|
|
|
@ -1267,8 +1267,8 @@ static void S_AddSNDINFO (int lump)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SI_IfDoom:
|
case SI_IfDoom: //also Chex
|
||||||
if (gameinfo.gametype != GAME_Doom)
|
if (!(gameinfo.gametype & GAME_DoomChex))
|
||||||
{
|
{
|
||||||
skipToEndIf = true;
|
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 CheatElvis[] = { 'e','l','v','i','s',255 };
|
||||||
static BYTE CheatTopo[] = { 't','o','p','o',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[] =
|
static cheatseq_t DoomCheats[] =
|
||||||
{
|
{
|
||||||
{ CheatMus, 0, 1, 0, {0,0}, Cht_Music },
|
{ 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 },
|
{ 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 ();
|
extern bool CheckCheatmode ();
|
||||||
|
|
||||||
// Respond to keyboard input events, intercept cheats.
|
// Respond to keyboard input events, intercept cheats.
|
||||||
|
@ -282,6 +317,11 @@ bool ST_Responder (event_t *ev)
|
||||||
numcheats = countof(StrifeCheats);
|
numcheats = countof(StrifeCheats);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GAME_Chex:
|
||||||
|
cheats = ChexCheats;
|
||||||
|
numcheats = countof(ChexCheats);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,5 +3,5 @@
|
||||||
// This file was automatically generated by the
|
// This file was automatically generated by the
|
||||||
// updaterevision tool. Do not edit by hand.
|
// updaterevision tool. Do not edit by hand.
|
||||||
|
|
||||||
#define ZD_SVN_REVISION_STRING "1183"
|
#define ZD_SVN_REVISION_STRING "1190"
|
||||||
#define ZD_SVN_REVISION_NUMBER 1183
|
#define ZD_SVN_REVISION_NUMBER 1190
|
||||||
|
|
|
@ -816,6 +816,12 @@ static int ParseMorphStyle (FScanner &sc)
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
static void ActorSkipSuper (FScanner &sc, AActor *defaults, Baggage &bag)
|
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));
|
memcpy (defaults, GetDefault<AActor>(), sizeof(AActor));
|
||||||
if (bag.DropItemList != NULL)
|
if (bag.DropItemList != NULL)
|
||||||
{
|
{
|
||||||
|
@ -851,6 +857,10 @@ static void ActorGame (FScanner &sc, AActor *defaults, Baggage &bag)
|
||||||
{
|
{
|
||||||
bag.Info->GameFilter |= GAME_Strife;
|
bag.Info->GameFilter |= GAME_Strife;
|
||||||
}
|
}
|
||||||
|
else if (sc.Compare ("Chex"))
|
||||||
|
{
|
||||||
|
bag.Info->GameFilter |= GAME_Chex;
|
||||||
|
}
|
||||||
else if (sc.Compare ("Any"))
|
else if (sc.Compare ("Any"))
|
||||||
{
|
{
|
||||||
bag.Info->GameFilter = GAME_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)
|
static void InventoryPickupmsg (FScanner &sc, AInventory *defaults, Baggage &bag)
|
||||||
{
|
{
|
||||||
// allow game specific pickup messages
|
// allow game specific pickup messages
|
||||||
const char * games[] = {"Doom", "Heretic", "Hexen", "Raven", "Strife", NULL};
|
const char * games[] = {"Doom", "Heretic", "Hexen", "Raven", "Strife", "Chex", NULL};
|
||||||
int gamemode[]={GAME_Doom, GAME_Heretic, GAME_Hexen, GAME_Raven, GAME_Strife};
|
int gamemode[]={GAME_Doom, GAME_Heretic, GAME_Hexen, GAME_Raven, GAME_Strife, GAME_Chex};
|
||||||
|
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
int game = sc.MatchString(games);
|
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)
|
static void PlayerDmgScreenColor (FScanner &sc, APlayerPawn *defaults, Baggage &bag)
|
||||||
{
|
{
|
||||||
defaults->HasDamageFade = true;
|
|
||||||
|
|
||||||
if (sc.CheckNumber ())
|
if (sc.CheckNumber ())
|
||||||
{
|
{
|
||||||
sc.MustGetNumber ();
|
sc.MustGetNumber ();
|
||||||
|
|
|
@ -286,7 +286,7 @@ FFont::FFont (const char *name, const char *nametemplate, int first, int count,
|
||||||
BYTE usedcolors[256], identity[256];
|
BYTE usedcolors[256], identity[256];
|
||||||
double *luminosity;
|
double *luminosity;
|
||||||
int maxyoffs;
|
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;
|
bool stcfn121 = false;
|
||||||
|
|
||||||
Chars = new CharData[count];
|
Chars = new CharData[count];
|
||||||
|
@ -2092,7 +2092,7 @@ void V_InitFonts()
|
||||||
}
|
}
|
||||||
if (!(BigFont=FFont::FindFont("BigFont")))
|
if (!(BigFont=FFont::FindFont("BigFont")))
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
BigFont = new FSingleLumpFont ("BigFont", Wads.GetNumForName ("DBIGFONT"));
|
BigFont = new FSingleLumpFont ("BigFont", Wads.GetNumForName ("DBIGFONT"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
// SAVESIG should match SAVEVER.
|
// SAVESIG should match SAVEVER.
|
||||||
|
|
||||||
// MINSAVEVER is the minimum level snapshot version that can be loaded.
|
// MINSAVEVER is the minimum level snapshot version that can be loaded.
|
||||||
#define MINSAVEVER 1181
|
#define MINSAVEVER 1190
|
||||||
|
|
||||||
#if ZD_SVN_REVISION_NUMBER < MINSAVEVER
|
#if ZD_SVN_REVISION_NUMBER < MINSAVEVER
|
||||||
// Never write a savegame with a version lower than what we need
|
// 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);
|
return CheckNumForFullName (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
i = FirstLumpIndex[MakeKey (name) % NumLumps];
|
i = FirstLumpIndex_FullName[MakeKey (name) % NumLumps];
|
||||||
|
|
||||||
while (i != NULL_INDEX &&
|
while (i != NULL_INDEX &&
|
||||||
(stricmp(name, LumpInfo[i].fullname) || LumpInfo[i].wadnum != wadnum))
|
(stricmp(name, LumpInfo[i].fullname) || LumpInfo[i].wadnum != wadnum))
|
||||||
{
|
{
|
||||||
i = NextLumpIndex[i];
|
i = NextLumpIndex_FullName[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return i != NULL_INDEX ? i : -1;
|
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
|
// When not playing Doom rename all BLOD sprites to BLUD so that
|
||||||
// the same blood states can be used everywhere
|
// 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'))
|
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_loadData ();
|
||||||
void WI_unloadData ();
|
void WI_unloadData ();
|
||||||
|
|
||||||
#define NEXTSTAGE (gameinfo.gametype == GAME_Doom ? "weapons/rocklx" : "doors/dr1_clos")
|
#define NEXTSTAGE (gameinfo.gametype & GAME_DoomChex ? "weapons/rocklx" : "doors/dr1_clos")
|
||||||
#define PASTSTATS (gameinfo.gametype == GAME_Doom ? "weapons/shotgr" : "plats/pt1_stop")
|
#define PASTSTATS (gameinfo.gametype & GAME_DoomChex ? "weapons/shotgr" : "plats/pt1_stop")
|
||||||
|
|
||||||
// GLOBAL LOCATIONS
|
// GLOBAL LOCATIONS
|
||||||
#define WI_TITLEY 2
|
#define WI_TITLEY 2
|
||||||
|
@ -314,6 +314,7 @@ void WI_LoadBackground(bool isenterpic)
|
||||||
lumpname = NULL;
|
lumpname = NULL;
|
||||||
switch(gameinfo.gametype)
|
switch(gameinfo.gametype)
|
||||||
{
|
{
|
||||||
|
case GAME_Chex:
|
||||||
case GAME_Doom:
|
case GAME_Doom:
|
||||||
if (gamemode != commercial)
|
if (gamemode != commercial)
|
||||||
{
|
{
|
||||||
|
@ -688,14 +689,14 @@ static void WI_DrawCharPatch (FTexture *patch, int x, int y)
|
||||||
{
|
{
|
||||||
screen->DrawTexture (patch, x, y,
|
screen->DrawTexture (patch, x, y,
|
||||||
DTA_Clean, true,
|
DTA_Clean, true,
|
||||||
DTA_ShadowAlpha, (gameinfo.gametype == GAME_Doom) ? 0 : FRACUNIT/2,
|
DTA_ShadowAlpha, (gameinfo.gametype & GAME_DoomChex) ? 0 : FRACUNIT/2,
|
||||||
TAG_DONE);
|
TAG_DONE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
screen->DrawTexture (patch, x, y,
|
screen->DrawTexture (patch, x, y,
|
||||||
DTA_Clean, true,
|
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!
|
DTA_Translation, BigFont->GetColorTranslation (CR_UNTRANSLATED), // otherwise it doesn't look good in Strife!
|
||||||
TAG_DONE);
|
TAG_DONE);
|
||||||
}
|
}
|
||||||
|
@ -779,7 +780,7 @@ void WI_drawLF ()
|
||||||
if (y < NG_STATSY - screen->Font->GetHeight()*3/4)
|
if (y < NG_STATSY - screen->Font->GetHeight()*3/4)
|
||||||
{
|
{
|
||||||
// don't draw 'finished' if the level name is too high!
|
// 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);
|
screen->DrawTexture(finished, 160 - finished->GetWidth()/2, y, DTA_Clean, true, TAG_DONE);
|
||||||
}
|
}
|
||||||
|
@ -809,7 +810,7 @@ void WI_drawEL ()
|
||||||
|
|
||||||
// draw "entering"
|
// draw "entering"
|
||||||
// be careful with the added height so that it works for oversized 'entering' patches!
|
// 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);
|
screen->DrawTexture(entering, (SCREENWIDTH - entering->GetWidth() * CleanXfac) / 2, y * CleanYfac, DTA_CleanNoMove, true, TAG_DONE);
|
||||||
y += entering->GetHeight() + screen->Font->GetHeight()/4;
|
y += entering->GetHeight() + screen->Font->GetHeight()/4;
|
||||||
|
@ -1557,7 +1558,7 @@ void WI_drawNetgameStats ()
|
||||||
|
|
||||||
WI_drawLF();
|
WI_drawLF();
|
||||||
|
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
// draw stat titles (top line)
|
// draw stat titles (top line)
|
||||||
screen->DrawTexture (kills, NG_STATSX+NG_SPACINGX-kills->GetWidth(), NG_STATSY, DTA_Clean, true, TAG_DONE);
|
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 ();
|
WI_updateAnimatedBack ();
|
||||||
|
|
||||||
if ((gameinfo.gametype != GAME_Doom || acceleratestage)
|
if ((!(gameinfo.gametype & GAME_DoomChex) || acceleratestage)
|
||||||
&& sp_state != 10)
|
&& sp_state != 10)
|
||||||
{
|
{
|
||||||
if (acceleratestage)
|
if (acceleratestage)
|
||||||
|
@ -1694,7 +1695,7 @@ void WI_updateStats ()
|
||||||
|
|
||||||
if (sp_state == 2)
|
if (sp_state == 2)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
cnt_kills[0] += 2;
|
cnt_kills[0] += 2;
|
||||||
|
|
||||||
|
@ -1710,7 +1711,7 @@ void WI_updateStats ()
|
||||||
}
|
}
|
||||||
else if (sp_state == 4)
|
else if (sp_state == 4)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
cnt_items[0] += 2;
|
cnt_items[0] += 2;
|
||||||
|
|
||||||
|
@ -1726,7 +1727,7 @@ void WI_updateStats ()
|
||||||
}
|
}
|
||||||
else if (sp_state == 6)
|
else if (sp_state == 6)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
cnt_secret[0] += 2;
|
cnt_secret[0] += 2;
|
||||||
|
|
||||||
|
@ -1742,7 +1743,7 @@ void WI_updateStats ()
|
||||||
}
|
}
|
||||||
else if (sp_state == 8)
|
else if (sp_state == 8)
|
||||||
{
|
{
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
if (!(bcnt&3))
|
if (!(bcnt&3))
|
||||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||||
|
@ -1800,7 +1801,7 @@ void WI_drawStats (void)
|
||||||
|
|
||||||
WI_drawLF();
|
WI_drawLF();
|
||||||
|
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
screen->DrawTexture (kills, SP_STATSX, SP_STATSY, DTA_Clean, true, TAG_DONE);
|
screen->DrawTexture (kills, SP_STATSX, SP_STATSY, DTA_Clean, true, TAG_DONE);
|
||||||
WI_drawPercent (320 - SP_STATSX, SP_STATSY, cnt_kills[0], wbs->maxkills);
|
WI_drawPercent (320 - SP_STATSX, SP_STATSY, cnt_kills[0], wbs->maxkills);
|
||||||
|
@ -1956,7 +1957,7 @@ void WI_loadData(void)
|
||||||
int i;
|
int i;
|
||||||
char name[9];
|
char name[9];
|
||||||
|
|
||||||
if (gameinfo.gametype == GAME_Doom)
|
if (gameinfo.gametype & GAME_DoomChex)
|
||||||
{
|
{
|
||||||
wiminus = TexMan["WIMINUS"]; // minus sign
|
wiminus = TexMan["WIMINUS"]; // minus sign
|
||||||
percent = TexMan["WIPCNT"]; // percent sign
|
percent = TexMan["WIPCNT"]; // percent sign
|
||||||
|
|
|
@ -41,6 +41,9 @@
|
||||||
#include <richedit.h>
|
#include <richedit.h>
|
||||||
#include <winuser.h>
|
#include <winuser.h>
|
||||||
#include <tlhelp32.h>
|
#include <tlhelp32.h>
|
||||||
|
#ifndef _M_IX86
|
||||||
|
#include <winternl.h>
|
||||||
|
#endif
|
||||||
#ifndef __GNUC__
|
#ifndef __GNUC__
|
||||||
#include <dbghelp.h>
|
#include <dbghelp.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -142,6 +145,11 @@ typedef BOOL (WINAPI *WRITEDUMP) (HANDLE, DWORD, HANDLE, int,
|
||||||
|
|
||||||
// TYPES -------------------------------------------------------------------
|
// 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
|
// Damn Microsoft for doing Get/SetWindowLongPtr half-assed. Instead of
|
||||||
// giving them proper prototypes under Win32, they are just macros for
|
// giving them proper prototypes under Win32, they are just macros for
|
||||||
// Get/SetWindowLong, meaning they take LONGs and not LONG_PTRs.
|
// 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 HANDLE CreateTempFile ();
|
||||||
|
|
||||||
static void DumpBytes (HANDLE file, BYTE *address);
|
static void DumpBytes (HANDLE file, BYTE *address);
|
||||||
static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code);
|
static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code, CONTEXT *ctxt);
|
||||||
static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD *jump);
|
static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD *jump, CONTEXT *ctxt);
|
||||||
static void AddToolHelp (HANDLE file);
|
static void AddToolHelp (HANDLE file);
|
||||||
|
|
||||||
static HANDLE WriteTextReport ();
|
static HANDLE WriteTextReport ();
|
||||||
|
@ -650,9 +658,9 @@ HANDLE WriteTextReport ()
|
||||||
if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
|
if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
|
||||||
{
|
{
|
||||||
j += mysnprintf (CrashSummary + j, countof(CrashSummary) - j,
|
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[0] ? "write" : "read",
|
||||||
CrashPointers.ExceptionRecord->ExceptionInformation[1]);
|
(void *)CrashPointers.ExceptionRecord->ExceptionInformation[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CrashSummary[j++] = ')';
|
CrashSummary[j++] = ')';
|
||||||
|
@ -741,17 +749,21 @@ HANDLE WriteTextReport ()
|
||||||
|
|
||||||
AddToolHelp (file);
|
AddToolHelp (file);
|
||||||
|
|
||||||
|
#ifdef _M_IX86
|
||||||
Writef (file, "\r\nBytes near EIP:");
|
Writef (file, "\r\nBytes near EIP:");
|
||||||
|
#else
|
||||||
|
Writef (file, "\r\nBytes near RIP:");
|
||||||
|
#endif
|
||||||
DumpBytes (file, (BYTE *)CrashPointers.ExceptionRecord->ExceptionAddress-16);
|
DumpBytes (file, (BYTE *)CrashPointers.ExceptionRecord->ExceptionAddress-16);
|
||||||
|
|
||||||
if (ctxt->ContextFlags & CONTEXT_CONTROL)
|
if (ctxt->ContextFlags & CONTEXT_CONTROL)
|
||||||
{
|
{
|
||||||
#ifndef _M_X64
|
#ifndef _M_X64
|
||||||
AddStackInfo (file, (void *)(size_t)CrashPointers.ContextRecord->Esp,
|
AddStackInfo (file, (void *)(size_t)CrashPointers.ContextRecord->Esp,
|
||||||
CrashPointers.ExceptionRecord->ExceptionCode);
|
CrashPointers.ExceptionRecord->ExceptionCode, ctxt);
|
||||||
#else
|
#else
|
||||||
AddStackInfo (file, (void *)CrashPointers.ContextRecord->Rsp,
|
AddStackInfo (file, (void *)CrashPointers.ContextRecord->Rsp,
|
||||||
CrashPointers.ExceptionRecord->ExceptionCode);
|
CrashPointers.ExceptionRecord->ExceptionCode, ctxt);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -814,7 +826,7 @@ static void AddToolHelp (HANDLE file)
|
||||||
|
|
||||||
if (thread.th32ThreadID == DbgThreadID)
|
if (thread.th32ThreadID == DbgThreadID)
|
||||||
{
|
{
|
||||||
Writef (file, " at %08x*", CrashAddress);
|
Writef (file, " at %p*", CrashAddress);
|
||||||
}
|
}
|
||||||
Writef (file, "\r\n");
|
Writef (file, "\r\n");
|
||||||
}
|
}
|
||||||
|
@ -829,7 +841,7 @@ static void AddToolHelp (HANDLE file)
|
||||||
{
|
{
|
||||||
do
|
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, module.modBaseAddr + module.modBaseSize - 1,
|
||||||
module.modBaseAddr <= CrashPointers.ExceptionRecord->ExceptionAddress &&
|
module.modBaseAddr <= CrashPointers.ExceptionRecord->ExceptionAddress &&
|
||||||
module.modBaseAddr + module.modBaseSize > 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 *addr = (DWORD *)dumpaddress, *jump;
|
||||||
DWORD *topOfStack = GetTopOfStack (dumpaddress);
|
DWORD *topOfStack = GetTopOfStack (dumpaddress);
|
||||||
BYTE peekb;
|
BYTE peekb;
|
||||||
|
#ifdef _M_IX86
|
||||||
DWORD peekd;
|
DWORD peekd;
|
||||||
|
#else
|
||||||
|
QWORD peekq;
|
||||||
|
#endif
|
||||||
|
|
||||||
jump = topOfStack;
|
jump = topOfStack;
|
||||||
if (code == EXCEPTION_STACK_OVERFLOW)
|
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");
|
Writef (file, "\r\nStack Contents:\r\n");
|
||||||
DWORD *scan;
|
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, "\r\n . . . Snip . . .\r\n\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Writef (file, "%p:", scan);
|
||||||
|
#ifdef _M_IX86
|
||||||
if (topOfStack - scan < 4)
|
if (topOfStack - scan < 4)
|
||||||
{
|
{
|
||||||
max = topOfStack - scan;
|
max = topOfStack - scan;
|
||||||
|
@ -890,7 +908,6 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
||||||
max = 4;
|
max = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
Writef (file, "%p:", scan);
|
|
||||||
for (i = 0; i < max; ++i)
|
for (i = 0; i < max; ++i)
|
||||||
{
|
{
|
||||||
if (!SafeReadMemory (&scan[i], &peekd, 4))
|
if (!SafeReadMemory (&scan[i], &peekd, 4))
|
||||||
|
@ -903,8 +920,31 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
||||||
{
|
{
|
||||||
Writef (file, " ");
|
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, " ");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
Writef (file, " ");
|
Writef (file, " ");
|
||||||
for (i = 0; i < max*4; ++i)
|
for (i = 0; i < int(max*sizeof(void*)); ++i)
|
||||||
{
|
{
|
||||||
if (!SafeReadMemory ((BYTE *)scan + i, &peekb, 1))
|
if (!SafeReadMemory ((BYTE *)scan + i, &peekb, 1))
|
||||||
{
|
{
|
||||||
|
@ -916,9 +956,12 @@ static void AddStackInfo (HANDLE file, void *dumpaddress, DWORD code)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _M_IX86
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// StackWalk
|
// StackWalk
|
||||||
|
// Win32 version
|
||||||
//
|
//
|
||||||
// Lists a possible call trace for the crashing thread to the text report.
|
// 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
|
// 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;
|
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");
|
Writef (file, "\r\n\r\n . . . . Snip . . . .\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _M_X64
|
|
||||||
DWORD_PTR code;
|
DWORD_PTR code;
|
||||||
|
|
||||||
if (SafeReadMemory (scan, &code, sizeof(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");
|
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
|
// DumpBytes
|
||||||
|
@ -1121,7 +1285,7 @@ static void StackWalk (HANDLE file, void *dumpaddress, DWORD *topOfStack, DWORD
|
||||||
|
|
||||||
static void DumpBytes (HANDLE file, BYTE *address)
|
static void DumpBytes (HANDLE file, BYTE *address)
|
||||||
{
|
{
|
||||||
char line[64*3], *line_p = line;
|
char line[68*3], *line_p = line;
|
||||||
DWORD len;
|
DWORD len;
|
||||||
BYTE peek;
|
BYTE peek;
|
||||||
|
|
||||||
|
|
|
@ -1092,7 +1092,7 @@ void ST_Endoom()
|
||||||
if (showendoom == 0) exit(0);
|
if (showendoom == 0) exit(0);
|
||||||
|
|
||||||
int endoom_lump = Wads.CheckNumForName (
|
int endoom_lump = Wads.CheckNumForName (
|
||||||
gameinfo.gametype == GAME_Doom? "ENDOOM" :
|
gameinfo.gametype & GAME_DoomChex ? "ENDOOM" :
|
||||||
gameinfo.gametype == GAME_Heretic? "ENDTEXT" :
|
gameinfo.gametype == GAME_Heretic? "ENDTEXT" :
|
||||||
gameinfo.gametype == GAME_Strife? "ENDSTRF" : NULL);
|
gameinfo.gametype == GAME_Strife? "ENDSTRF" : NULL);
|
||||||
|
|
||||||
|
|
|
@ -161,7 +161,7 @@ BEGIN
|
||||||
IDD_CRASHDIALOG, DIALOG
|
IDD_CRASHDIALOG, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
LEFTMARGIN, 4
|
LEFTMARGIN, 4
|
||||||
RIGHTMARGIN, 401
|
RIGHTMARGIN, 408
|
||||||
TOPMARGIN, 4
|
TOPMARGIN, 4
|
||||||
BOTTOMMARGIN, 303
|
BOTTOMMARGIN, 303
|
||||||
HORZGUIDE, 49
|
HORZGUIDE, 49
|
||||||
|
@ -179,7 +179,7 @@ BEGIN
|
||||||
IDD_CRASHDETAILS, DIALOG
|
IDD_CRASHDETAILS, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
LEFTMARGIN, 7
|
LEFTMARGIN, 7
|
||||||
RIGHTMARGIN, 384
|
RIGHTMARGIN, 392
|
||||||
TOPMARGIN, 7
|
TOPMARGIN, 7
|
||||||
HORZGUIDE, 76
|
HORZGUIDE, 76
|
||||||
END
|
END
|
||||||
|
@ -374,19 +374,19 @@ BEGIN
|
||||||
PUSHBUTTON "Select None",IDC_SELECTNONE,320,31,50,14
|
PUSHBUTTON "Select None",IDC_SELECTNONE,320,31,50,14
|
||||||
END
|
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
|
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
|
EXSTYLE WS_EX_CONTROLPARENT | WS_EX_APPWINDOW
|
||||||
CAPTION "ZDoom Very Fatal Error"
|
CAPTION "ZDoom Very Fatal Error"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x0
|
FONT 8, "MS Shell Dlg", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
CONTROL "",IDC_CRASHTAB,"SysTabControl32",WS_TABSTOP,4,4,397,280
|
CONTROL "",IDC_CRASHTAB,"SysTabControl32",WS_TABSTOP,4,4,404,280
|
||||||
PUSHBUTTON "&Send Error Report",IDYES,139,289,91,14,WS_DISABLED
|
PUSHBUTTON "&Send Error Report",IDYES,146,289,91,14,WS_DISABLED
|
||||||
PUSHBUTTON "Save Report to Disk...",IDC_SAVEREPORT,235,289,91,14
|
PUSHBUTTON "Save Report to Disk...",IDC_SAVEREPORT,242,289,91,14
|
||||||
PUSHBUTTON "&Discard Report",IDNO,331,289,70,14
|
PUSHBUTTON "&Discard Report",IDNO,338,289,70,14
|
||||||
END
|
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
|
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -400,15 +400,15 @@ BEGIN
|
||||||
LTEXT "Static",IDC_CRASHSUMMARY,14,233,363,20
|
LTEXT "Static",IDC_CRASHSUMMARY,14,233,363,20
|
||||||
END
|
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
|
STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "The error report contains these files:",IDC_STATIC,7,5,119,8
|
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
|
LTEXT "The selected file contains this information:",IDC_STATIC,7,74,136,8
|
||||||
RTEXT "Static",IDC_CRASHFILESIZE,329,74,55,8
|
RTEXT "Static",IDC_CRASHFILESIZE,337,74,55,8
|
||||||
LISTBOX IDC_CRASHFILES,7,15,377,53,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
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,377,174
|
CONTROL "",IDC_CRASHFILECONTENTS,"RichEdit20A",ES_MULTILINE | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,83,385,174
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_BOING DIALOGEX 0, 0, 187, 196
|
IDD_BOING DIALOGEX 0, 0, 187, 196
|
||||||
|
|
|
@ -26,6 +26,7 @@ Actor PlayerPawn : Actor native
|
||||||
Player.SideMove 1,1
|
Player.SideMove 1,1
|
||||||
Player.ColorRange 0,0
|
Player.ColorRange 0,0
|
||||||
Player.SoundClass "player"
|
Player.SoundClass "player"
|
||||||
|
Player.DamageScreenColor "ff 00 00"
|
||||||
}
|
}
|
||||||
|
|
||||||
Actor PlayerChunk : PlayerPawn native
|
Actor PlayerChunk : PlayerPawn native
|
||||||
|
|
|
@ -108,13 +108,13 @@ decalgroup BulletChip
|
||||||
* Blood smears crawl down walls a bit like in Blood.
|
* Blood smears crawl down walls a bit like in Blood.
|
||||||
*
|
*
|
||||||
* These do not need generators; the engine will create them automatically
|
* 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.
|
* and the actor's blood color will be used instead.
|
||||||
*/
|
*/
|
||||||
decal BloodSplat1
|
decal BloodSplat1
|
||||||
{
|
{
|
||||||
pic BSPLAT1
|
pic BSPLAT1
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
x-scale 0.75
|
x-scale 0.75
|
||||||
y-scale 0.75
|
y-scale 0.75
|
||||||
randomflipx
|
randomflipx
|
||||||
|
@ -124,7 +124,7 @@ decal BloodSplat1
|
||||||
decal BloodSplat2
|
decal BloodSplat2
|
||||||
{
|
{
|
||||||
pic BSPLAT2
|
pic BSPLAT2
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
x-scale 0.75
|
x-scale 0.75
|
||||||
y-scale 0.75
|
y-scale 0.75
|
||||||
randomflipx
|
randomflipx
|
||||||
|
@ -134,7 +134,7 @@ decal BloodSplat2
|
||||||
decal BloodSplat3
|
decal BloodSplat3
|
||||||
{
|
{
|
||||||
pic BSPLAT3
|
pic BSPLAT3
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
x-scale 0.75
|
x-scale 0.75
|
||||||
y-scale 0.75
|
y-scale 0.75
|
||||||
randomflipx
|
randomflipx
|
||||||
|
@ -144,7 +144,7 @@ decal BloodSplat3
|
||||||
decal BloodSplat4
|
decal BloodSplat4
|
||||||
{
|
{
|
||||||
pic BSPLAT4
|
pic BSPLAT4
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
x-scale 0.75
|
x-scale 0.75
|
||||||
y-scale 0.75
|
y-scale 0.75
|
||||||
randomflipx
|
randomflipx
|
||||||
|
@ -154,7 +154,7 @@ decal BloodSplat4
|
||||||
decal BloodSplat5
|
decal BloodSplat5
|
||||||
{
|
{
|
||||||
pic BSPLAT5
|
pic BSPLAT5
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
x-scale 0.75
|
x-scale 0.75
|
||||||
y-scale 0.75
|
y-scale 0.75
|
||||||
randomflipx
|
randomflipx
|
||||||
|
@ -164,7 +164,7 @@ decal BloodSplat5
|
||||||
decal BloodSplat6
|
decal BloodSplat6
|
||||||
{
|
{
|
||||||
pic BSPLAT6
|
pic BSPLAT6
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
x-scale 0.75
|
x-scale 0.75
|
||||||
y-scale 0.75
|
y-scale 0.75
|
||||||
randomflipx
|
randomflipx
|
||||||
|
@ -174,7 +174,7 @@ decal BloodSplat6
|
||||||
decal BloodSplat7
|
decal BloodSplat7
|
||||||
{
|
{
|
||||||
pic BSPLAT7
|
pic BSPLAT7
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
x-scale 0.75
|
x-scale 0.75
|
||||||
y-scale 0.75
|
y-scale 0.75
|
||||||
randomflipx
|
randomflipx
|
||||||
|
@ -199,7 +199,7 @@ decal BloodSmear1
|
||||||
pic BSMEAR1
|
pic BSMEAR1
|
||||||
x-scale 0.625
|
x-scale 0.625
|
||||||
y-scale 0.625
|
y-scale 0.625
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
randomflipx
|
randomflipx
|
||||||
animator BloodSmearer
|
animator BloodSmearer
|
||||||
}
|
}
|
||||||
|
@ -209,7 +209,7 @@ decal BloodSmear2
|
||||||
pic BSMEAR1
|
pic BSMEAR1
|
||||||
x-scale 0.625
|
x-scale 0.625
|
||||||
y-scale 0.625
|
y-scale 0.625
|
||||||
shade "68 00 00"
|
shade "BloodDefault"
|
||||||
randomflipx
|
randomflipx
|
||||||
animator BloodSmearer
|
animator BloodSmearer
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,3 +167,11 @@
|
||||||
#include "actors/strife/templar.txt"
|
#include "actors/strife/templar.txt"
|
||||||
#include "actors/strife/zombie.txt"
|
#include "actors/strife/zombie.txt"
|
||||||
#include "actors/strife/sigil.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...";
|
QUITMSG21 = "you can quit...\nbut you can't hide...";
|
||||||
QUITMSG22 = "whaaa, what's the matter?\nmommy says dinnertime?";
|
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.";
|
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.";
|
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.";
|
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_POPULATION = "%o volunteered for population control";
|
||||||
BBA_SUICIDE = "%o has suicided";
|
BBA_SUICIDE = "%o has suicided";
|
||||||
BBA_DARWIN = "%o received the Darwin Award";
|
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,
|
/* French strings updated by DK
|
||||||
* so there's lots missing. (X-DOOM, you speak French. Want to add any?)
|
* Special thanks to "la communauté française de Doom" :)
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[fr]
|
[fr]
|
||||||
|
@ -13,6 +14,35 @@ D_CDROM = "VERSION CD-ROM: DEFAULT.CFG DANS C:\\DOOMDATA\n";
|
||||||
PRESSKEY = "APPUYEZ SUR UNE TOUCHE.";
|
PRESSKEY = "APPUYEZ SUR UNE TOUCHE.";
|
||||||
PRESSYN = "APPUYEZ SUR Y OU N";
|
PRESSYN = "APPUYEZ SUR Y OU N";
|
||||||
QUITMSG = "VOUS VOULEZ VRAIMENT\nQUITTER CE SUPER JEU?";
|
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.";
|
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.";
|
QLOADNET = "CHARGEMENT RAPIDE INTERDIT EN RESEAU!\n\nAPPUYEZ SUR UNE TOUCHE.";
|
||||||
QSAVESPOT = "VOUS N'AVEZ PAS CHOISI UN EMPLACEMENT!\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_E3M8 = "E3M8: DIS";
|
||||||
HUSTR_E3M9 = "E3M9: CLAPIERS";
|
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_1 = "NIVEAU 1: ENTREE ";
|
||||||
HUSTR_2 = "NIVEAU 2: HALLS SOUTERRAINS ";
|
HUSTR_2 = "NIVEAU 2: HALLS SOUTERRAINS ";
|
||||||
HUSTR_3 = "NIVEAU 3: LE FEU NOURRI ";
|
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_31 = "NIVEAU 31: WOLFENSTEIN";
|
||||||
HUSTR_32 = "NIVEAU 32: LE MASSACRE";
|
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_TALKTOSELF1 = "VOUS PARLEZ TOUT SEUL ";
|
||||||
HUSTR_TALKTOSELF2 = "QUI EST LA?";
|
HUSTR_TALKTOSELF2 = "QUI EST LA?";
|
||||||
|
@ -217,7 +322,7 @@ E1TEXT =
|
||||||
"ET NETTOYE LA BASE LUNAIRE, VOUS AVEZ\n"
|
"ET NETTOYE LA BASE LUNAIRE, VOUS AVEZ\n"
|
||||||
"GAGNE, NON? PAS VRAI? OU EST DONC VOTRE\n"
|
"GAGNE, NON? PAS VRAI? OU EST DONC VOTRE\n"
|
||||||
" RECOMPENSE ET VOTRE BILLET DE\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'EST PAS LA FIN ESPEREE!\n"
|
||||||
"\n"
|
"\n"
|
||||||
"CA SENT LA VIANDE PUTREFIEE, MAIS\n"
|
"CA SENT LA VIANDE PUTREFIEE, MAIS\n"
|
||||||
|
@ -266,9 +371,27 @@ E3TEXT =
|
||||||
"COMBATTU LE DEMON. HEUREUSEMENT,\n"
|
"COMBATTU LE DEMON. HEUREUSEMENT,\n"
|
||||||
"AUCUN GERME DU MAL N'A FRANCHI\n"
|
"AUCUN GERME DU MAL N'A FRANCHI\n"
|
||||||
"CETTE PORTE AVEC VOUS...";
|
"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:
|
// after level 6, put this:
|
||||||
|
|
||||||
C1TEXT =
|
C1TEXT =
|
||||||
|
@ -354,6 +477,153 @@ C6TEXT =
|
||||||
"LE NIVEAU SUPER SECRET! VOUS FERIEZ\n"
|
"LE NIVEAU SUPER SECRET! VOUS FERIEZ\n"
|
||||||
"MIEUX DE FONCER DANS CELUI-LA!\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
|
// Character cast strings F_FINALE.C
|
||||||
//
|
//
|
||||||
|
@ -374,3 +644,668 @@ CC_ARCH = "ARCHI-INFAME";
|
||||||
CC_SPIDER = "L'ARAIGNEE CERVEAU";
|
CC_SPIDER = "L'ARAIGNEE CERVEAU";
|
||||||
CC_CYBER = "LE CYBERDEMON";
|
CC_CYBER = "LE CYBERDEMON";
|
||||||
CC_HERO = "NOTRE HEROS";
|
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
|
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