mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-14 08:30:49 +00:00
Merge branch 'scripting' of github.com:rheit/zdoom into scripting
This commit is contained in:
commit
5fe5fe7c51
44 changed files with 825 additions and 360 deletions
|
@ -186,6 +186,7 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
soundsequence = <string>; // The sound sequence to play when this sector moves. Placing a
|
soundsequence = <string>; // The sound sequence to play when this sector moves. Placing a
|
||||||
// sound sequence thing in the sector will override this property.
|
// sound sequence thing in the sector will override this property.
|
||||||
hidden = <bool>; // if true this sector will not be drawn on the textured automap.
|
hidden = <bool>; // if true this sector will not be drawn on the textured automap.
|
||||||
|
waterzone = <bool>; // Sector is under water and swimmable
|
||||||
|
|
||||||
* Note about dropactors
|
* Note about dropactors
|
||||||
|
|
||||||
|
@ -328,6 +329,9 @@ Added back locknumber property.
|
||||||
1.20 25.02.2012
|
1.20 25.02.2012
|
||||||
Added arg0str thing property.
|
Added arg0str thing property.
|
||||||
|
|
||||||
|
1.21 09.08.2013
|
||||||
|
Added waterzone sector property.
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
EOF
|
EOF
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
779
src/am_map.cpp
779
src/am_map.cpp
File diff suppressed because it is too large
Load diff
|
@ -505,7 +505,7 @@ bool FCajunMaster::LoadBots ()
|
||||||
bool gotteam = false;
|
bool gotteam = false;
|
||||||
|
|
||||||
bglobal.ForgetBots ();
|
bglobal.ForgetBots ();
|
||||||
#ifndef unix
|
#ifndef __unix__
|
||||||
tmp = progdir;
|
tmp = progdir;
|
||||||
tmp += "zcajun/" BOTFILENAME;
|
tmp += "zcajun/" BOTFILENAME;
|
||||||
if (!FileExists (tmp))
|
if (!FileExists (tmp))
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
|
|
||||||
#include "i_system.h"
|
#include "i_system.h"
|
||||||
|
|
||||||
|
#include "doomerrors.h"
|
||||||
#include "doomstat.h"
|
#include "doomstat.h"
|
||||||
#include "gstrings.h"
|
#include "gstrings.h"
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
|
@ -340,6 +341,8 @@ CCMD (changemap)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv.argc() > 1)
|
if (argv.argc() > 1)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
if (!P_CheckMapData(argv[1]))
|
if (!P_CheckMapData(argv[1]))
|
||||||
{
|
{
|
||||||
|
@ -359,6 +362,12 @@ CCMD (changemap)
|
||||||
Net_WriteString (argv[1]);
|
Net_WriteString (argv[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch(CRecoverableError &error)
|
||||||
|
{
|
||||||
|
if (error.GetMessage())
|
||||||
|
Printf("%s", error.GetMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Printf ("Usage: changemap <map name> [position]\n");
|
Printf ("Usage: changemap <map name> [position]\n");
|
||||||
|
|
|
@ -1742,7 +1742,7 @@ static bool C_HandleKey (event_t *ev, BYTE *buffer, int len)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
case EV_GUI_MButtonDown:
|
case EV_GUI_MButtonDown:
|
||||||
C_PasteText(I_GetFromClipboard(true), buffer, len);
|
C_PasteText(I_GetFromClipboard(true), buffer, len);
|
||||||
break;
|
break;
|
||||||
|
@ -2121,7 +2121,20 @@ static bool C_TabCompleteList ()
|
||||||
Printf (TEXTCOLOR_BLUE "Completions for %s:\n", CmdLine+2);
|
Printf (TEXTCOLOR_BLUE "Completions for %s:\n", CmdLine+2);
|
||||||
for (i = TabPos; nummatches > 0; ++i, --nummatches)
|
for (i = TabPos; nummatches > 0; ++i, --nummatches)
|
||||||
{
|
{
|
||||||
Printf ("%-*s", int(maxwidth), TabCommands[i].TabName.GetChars());
|
// [Dusk] Print console commands blue, CVars green, aliases red.
|
||||||
|
const char* colorcode = "";
|
||||||
|
FConsoleCommand* ccmd;
|
||||||
|
if (FindCVar (TabCommands[i].TabName, NULL))
|
||||||
|
colorcode = TEXTCOLOR_GREEN;
|
||||||
|
else if ((ccmd = FConsoleCommand::FindByName (TabCommands[i].TabName)) != NULL)
|
||||||
|
{
|
||||||
|
if (ccmd->IsAlias())
|
||||||
|
colorcode = TEXTCOLOR_RED;
|
||||||
|
else
|
||||||
|
colorcode = TEXTCOLOR_LIGHTBLUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Printf ("%s%-*s", colorcode, int(maxwidth), TabCommands[i].TabName.GetChars());
|
||||||
x += maxwidth;
|
x += maxwidth;
|
||||||
if (x > ConCols - maxwidth)
|
if (x > ConCols - maxwidth)
|
||||||
{
|
{
|
||||||
|
|
|
@ -955,6 +955,11 @@ bool FConsoleCommand::AddToHash (FConsoleCommand **table)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FConsoleCommand* FConsoleCommand::FindByName (const char* name)
|
||||||
|
{
|
||||||
|
return FindNameInHashTable (Commands, name, strlen (name));
|
||||||
|
}
|
||||||
|
|
||||||
FConsoleCommand::FConsoleCommand (const char *name, CCmdRun runFunc)
|
FConsoleCommand::FConsoleCommand (const char *name, CCmdRun runFunc)
|
||||||
: m_RunFunc (runFunc)
|
: m_RunFunc (runFunc)
|
||||||
{
|
{
|
||||||
|
@ -1501,7 +1506,7 @@ CCMD (pullin)
|
||||||
{
|
{
|
||||||
const char *lastSlash;
|
const char *lastSlash;
|
||||||
|
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
lastSlash = strrchr (PullinFile, '/');
|
lastSlash = strrchr (PullinFile, '/');
|
||||||
#else
|
#else
|
||||||
const char *lastSlash1, *lastSlash2;
|
const char *lastSlash1, *lastSlash2;
|
||||||
|
|
|
@ -93,6 +93,7 @@ public:
|
||||||
void PrintCommand () { Printf ("%s\n", m_Name); }
|
void PrintCommand () { Printf ("%s\n", m_Name); }
|
||||||
|
|
||||||
virtual void Run (FCommandLine &args, APlayerPawn *instigator, int key);
|
virtual void Run (FCommandLine &args, APlayerPawn *instigator, int key);
|
||||||
|
static FConsoleCommand* FindByName (const char* name);
|
||||||
|
|
||||||
FConsoleCommand *m_Next, **m_Prev;
|
FConsoleCommand *m_Next, **m_Prev;
|
||||||
char *m_Name;
|
char *m_Name;
|
||||||
|
|
|
@ -169,7 +169,7 @@ bool CT_Responder (event_t *ev)
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
else if (ev->subtype == EV_GUI_MButtonDown)
|
else if (ev->subtype == EV_GUI_MButtonDown)
|
||||||
{
|
{
|
||||||
CT_PasteChat(I_GetFromClipboard(true));
|
CT_PasteChat(I_GetFromClipboard(true));
|
||||||
|
|
|
@ -1813,21 +1813,21 @@ static int PatchCheats (int dummy)
|
||||||
static int PatchMisc (int dummy)
|
static int PatchMisc (int dummy)
|
||||||
{
|
{
|
||||||
static const struct Key keys[] = {
|
static const struct Key keys[] = {
|
||||||
{ "Initial Health", myoffsetof(struct DehInfo,StartHealth) },
|
{ "Initial Health", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,StartHealth)) },
|
||||||
{ "Initial Bullets", myoffsetof(struct DehInfo,StartBullets) },
|
{ "Initial Bullets", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,StartBullets)) },
|
||||||
{ "Max Health", myoffsetof(struct DehInfo,MaxHealth) },
|
{ "Max Health", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,MaxHealth)) },
|
||||||
{ "Max Armor", myoffsetof(struct DehInfo,MaxArmor) },
|
{ "Max Armor", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,MaxArmor)) },
|
||||||
{ "Green Armor Class", myoffsetof(struct DehInfo,GreenAC) },
|
{ "Green Armor Class", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,GreenAC)) },
|
||||||
{ "Blue Armor Class", myoffsetof(struct DehInfo,BlueAC) },
|
{ "Blue Armor Class", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,BlueAC)) },
|
||||||
{ "Max Soulsphere", myoffsetof(struct DehInfo,MaxSoulsphere) },
|
{ "Max Soulsphere", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,MaxSoulsphere)) },
|
||||||
{ "Soulsphere Health", myoffsetof(struct DehInfo,SoulsphereHealth) },
|
{ "Soulsphere Health", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,SoulsphereHealth)) },
|
||||||
{ "Megasphere Health", myoffsetof(struct DehInfo,MegasphereHealth) },
|
{ "Megasphere Health", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,MegasphereHealth)) },
|
||||||
{ "God Mode Health", myoffsetof(struct DehInfo,GodHealth) },
|
{ "God Mode Health", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,GodHealth)) },
|
||||||
{ "IDFA Armor", myoffsetof(struct DehInfo,FAArmor) },
|
{ "IDFA Armor", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,FAArmor)) },
|
||||||
{ "IDFA Armor Class", myoffsetof(struct DehInfo,FAAC) },
|
{ "IDFA Armor Class", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,FAAC)) },
|
||||||
{ "IDKFA Armor", myoffsetof(struct DehInfo,KFAArmor) },
|
{ "IDKFA Armor", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,KFAArmor)) },
|
||||||
{ "IDKFA Armor Class", myoffsetof(struct DehInfo,KFAAC) },
|
{ "IDKFA Armor Class", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,KFAAC)) },
|
||||||
{ "No Autofreeze", myoffsetof(struct DehInfo,NoAutofreeze) },
|
{ "No Autofreeze", static_cast<ptrdiff_t>(myoffsetof(struct DehInfo,NoAutofreeze)) },
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
};
|
};
|
||||||
int result;
|
int result;
|
||||||
|
@ -2383,6 +2383,18 @@ static int DoInclude (int dummy)
|
||||||
return GetLine();
|
return GetLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CVAR(Int, dehload, 0, CVAR_ARCHIVE) // Autoloading of .DEH lumps is disabled by default.
|
||||||
|
|
||||||
|
// checks if lump is a .deh or .bex file. Only lumps in the root directory are considered valid.
|
||||||
|
static bool isDehFile(int lumpnum)
|
||||||
|
{
|
||||||
|
const char* const fullName = Wads.GetLumpFullName(lumpnum);
|
||||||
|
const char* const extension = strrchr(fullName, '.');
|
||||||
|
|
||||||
|
return NULL != extension && strchr(fullName, '/') == NULL
|
||||||
|
&& (0 == stricmp(extension, ".deh") || 0 == stricmp(extension, ".bex"));
|
||||||
|
}
|
||||||
|
|
||||||
int D_LoadDehLumps()
|
int D_LoadDehLumps()
|
||||||
{
|
{
|
||||||
int lastlump = 0, lumpnum, count = 0;
|
int lastlump = 0, lumpnum, count = 0;
|
||||||
|
@ -2392,26 +2404,32 @@ int D_LoadDehLumps()
|
||||||
count += D_LoadDehLump(lumpnum);
|
count += D_LoadDehLump(lumpnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 == PatchSize)
|
if (0 == PatchSize && dehload > 0)
|
||||||
{
|
{
|
||||||
// No DEH/BEX patch is loaded yet, try to find lump(s) with specific extensions
|
// No DEH/BEX patch is loaded yet, try to find lump(s) with specific extensions
|
||||||
|
|
||||||
for (lumpnum = 0, lastlump = Wads.GetNumLumps();
|
if (dehload == 1) // load all .DEH lumps that are found.
|
||||||
lumpnum < lastlump;
|
|
||||||
++lumpnum)
|
|
||||||
{
|
{
|
||||||
const char* const fullName = Wads.GetLumpFullName(lumpnum);
|
for (lumpnum = 0, lastlump = Wads.GetNumLumps(); lumpnum < lastlump; ++lumpnum)
|
||||||
const char* const extension = strrchr(fullName, '.');
|
{
|
||||||
|
if (isDehFile(lumpnum))
|
||||||
const bool isDehOrBex = NULL != extension
|
|
||||||
&& (0 == stricmp(extension, ".deh") || 0 == stricmp(extension, ".bex"));
|
|
||||||
|
|
||||||
if (isDehOrBex)
|
|
||||||
{
|
{
|
||||||
count += D_LoadDehLump(lumpnum);
|
count += D_LoadDehLump(lumpnum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else // only load the last .DEH lump that is found.
|
||||||
|
{
|
||||||
|
for (lumpnum = Wads.GetNumLumps()-1; lumpnum >=0; --lumpnum)
|
||||||
|
{
|
||||||
|
if (isDehFile(lumpnum))
|
||||||
|
{
|
||||||
|
count += D_LoadDehLump(lumpnum);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
@ -2962,7 +2980,7 @@ void FinishDehPatch ()
|
||||||
PClassActor *subclass = static_cast<PClassActor *>(RUNTIME_CLASS(ADehackedPickup)->
|
PClassActor *subclass = static_cast<PClassActor *>(RUNTIME_CLASS(ADehackedPickup)->
|
||||||
CreateDerivedClass(typeNameBuilder, sizeof(ADehackedPickup)));
|
CreateDerivedClass(typeNameBuilder, sizeof(ADehackedPickup)));
|
||||||
AActor *defaults2 = GetDefaultByType (subclass);
|
AActor *defaults2 = GetDefaultByType (subclass);
|
||||||
memcpy (defaults2, defaults1, sizeof(AActor));
|
memcpy ((void *)defaults2, (void *)defaults1, sizeof(AActor));
|
||||||
|
|
||||||
// Make a copy of the replaced class's state labels
|
// Make a copy of the replaced class's state labels
|
||||||
FStateDefinitions statedef;
|
FStateDefinitions statedef;
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
#endif
|
#endif
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
|
|
||||||
#if defined(unix) || defined(__APPLE__)
|
#if defined(__unix__) || defined(__APPLE__)
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2029,7 +2029,7 @@ static void AddAutoloadFiles(const char *gamesection)
|
||||||
D_AddFile (allwads, wad);
|
D_AddFile (allwads, wad);
|
||||||
|
|
||||||
// [RH] Add any .wad files in the skins directory
|
// [RH] Add any .wad files in the skins directory
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
file = SHARE_DIR;
|
file = SHARE_DIR;
|
||||||
#else
|
#else
|
||||||
file = progdir;
|
file = progdir;
|
||||||
|
@ -2037,7 +2037,7 @@ static void AddAutoloadFiles(const char *gamesection)
|
||||||
file += "skins";
|
file += "skins";
|
||||||
D_AddDirectory (allwads, file);
|
D_AddDirectory (allwads, file);
|
||||||
|
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
file = NicePath("~/" GAME_DIR "/skins");
|
file = NicePath("~/" GAME_DIR "/skins");
|
||||||
D_AddDirectory (allwads, file);
|
D_AddDirectory (allwads, file);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2157,7 +2157,7 @@ static void CheckCmdLine()
|
||||||
Printf ("%s", GStrings("D_DEVSTR"));
|
Printf ("%s", GStrings("D_DEVSTR"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(unix) && !defined(__APPLE__)
|
#if !defined(__unix__) && !defined(__APPLE__)
|
||||||
// We do not need to support -cdrom under Unix, because all the files
|
// We do not need to support -cdrom under Unix, because all the files
|
||||||
// that would go to c:\\zdoomdat are already stored in .zdoom inside
|
// that would go to c:\\zdoomdat are already stored in .zdoom inside
|
||||||
// the user's home directory.
|
// the user's home directory.
|
||||||
|
|
|
@ -161,8 +161,10 @@ public:
|
||||||
FNameNoInit MorphWeapon;
|
FNameNoInit MorphWeapon;
|
||||||
fixed_t AttackZOffset; // attack height, relative to player center
|
fixed_t AttackZOffset; // attack height, relative to player center
|
||||||
fixed_t UseRange; // [NS] Distance at which player can +use
|
fixed_t UseRange; // [NS] Distance at which player can +use
|
||||||
|
fixed_t AirCapacity; // Multiplier for air supply underwater.
|
||||||
PClassActor *FlechetteType;
|
PClassActor *FlechetteType;
|
||||||
|
|
||||||
|
|
||||||
// [CW] Fades for when you are being damaged.
|
// [CW] Fades for when you are being damaged.
|
||||||
PalEntry DamageFade;
|
PalEntry DamageFade;
|
||||||
|
|
||||||
|
|
|
@ -452,7 +452,7 @@ void FDecalLib::ParseDecal (FScanner &sc)
|
||||||
decalNum = GetDecalID (sc);
|
decalNum = GetDecalID (sc);
|
||||||
sc.MustGetStringName ("{");
|
sc.MustGetStringName ("{");
|
||||||
|
|
||||||
memset (&newdecal, 0, sizeof(newdecal));
|
memset ((void *)&newdecal, 0, sizeof(newdecal));
|
||||||
newdecal.PicNum.SetInvalid();
|
newdecal.PicNum.SetInvalid();
|
||||||
newdecal.ScaleX = newdecal.ScaleY = FRACUNIT;
|
newdecal.ScaleX = newdecal.ScaleY = FRACUNIT;
|
||||||
newdecal.RenderFlags = RF_WALLSPRITE;
|
newdecal.RenderFlags = RF_WALLSPRITE;
|
||||||
|
|
|
@ -110,6 +110,10 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_VileTarget)
|
||||||
//
|
//
|
||||||
// A_VileAttack
|
// A_VileAttack
|
||||||
//
|
//
|
||||||
|
|
||||||
|
// A_VileAttack flags
|
||||||
|
#define VAF_DMGTYPEAPPLYTODIRECT 1
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_VileAttack)
|
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_VileAttack)
|
||||||
{
|
{
|
||||||
PARAM_ACTION_PROLOGUE;
|
PARAM_ACTION_PROLOGUE;
|
||||||
|
@ -119,6 +123,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_VileAttack)
|
||||||
PARAM_INT_OPT (blastrad) { blastrad = 70; }
|
PARAM_INT_OPT (blastrad) { blastrad = 70; }
|
||||||
PARAM_FIXED_OPT (thrust) { thrust = FRACUNIT; }
|
PARAM_FIXED_OPT (thrust) { thrust = FRACUNIT; }
|
||||||
PARAM_NAME_OPT (dmgtype) { dmgtype = NAME_Fire; }
|
PARAM_NAME_OPT (dmgtype) { dmgtype = NAME_Fire; }
|
||||||
|
PARAM_INT_OPT (flags) { flags = 0; }
|
||||||
|
|
||||||
AActor *fire, *target;
|
AActor *fire, *target;
|
||||||
angle_t an;
|
angle_t an;
|
||||||
|
@ -132,7 +137,15 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_VileAttack)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
S_Sound (self, CHAN_WEAPON, snd, 1, ATTN_NORM);
|
S_Sound (self, CHAN_WEAPON, snd, 1, ATTN_NORM);
|
||||||
int newdam = P_DamageMobj (target, self, self, dmg, NAME_None);
|
|
||||||
|
int newdam;
|
||||||
|
|
||||||
|
if (flags & VAF_DMGTYPEAPPLYTODIRECT)
|
||||||
|
newdam = P_DamageMobj (target, self, self, dmg, dmgtype);
|
||||||
|
|
||||||
|
else
|
||||||
|
newdam = P_DamageMobj (target, self, self, dmg, NAME_None);
|
||||||
|
|
||||||
P_TraceBleed (newdam > 0 ? newdam : dmg, target);
|
P_TraceBleed (newdam > 0 ? newdam : dmg, target);
|
||||||
|
|
||||||
an = self->angle >> ANGLETOFINESHIFT;
|
an = self->angle >> ANGLETOFINESHIFT;
|
||||||
|
|
|
@ -865,7 +865,10 @@ static void ChangeSpy (int changespy)
|
||||||
int pnum = consoleplayer;
|
int pnum = consoleplayer;
|
||||||
if (changespy != SPY_CANCEL)
|
if (changespy != SPY_CANCEL)
|
||||||
{
|
{
|
||||||
pnum = int(players[consoleplayer].camera->player - players);
|
player_t *player = players[consoleplayer].camera->player;
|
||||||
|
// only use the camera as starting index if it's a valid player.
|
||||||
|
if (player != NULL) pnum = int(players[consoleplayer].camera->player - players);
|
||||||
|
|
||||||
int step = (changespy == SPY_NEXT) ? 1 : -1;
|
int step = (changespy == SPY_NEXT) ? 1 : -1;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -1919,7 +1922,7 @@ FString G_BuildSaveName (const char *prefix, int slot)
|
||||||
leader = Args->CheckValue ("-savedir");
|
leader = Args->CheckValue ("-savedir");
|
||||||
if (leader.IsEmpty())
|
if (leader.IsEmpty())
|
||||||
{
|
{
|
||||||
#if !defined(unix) && !defined(__APPLE__)
|
#if !defined(__unix__) && !defined(__APPLE__)
|
||||||
if (Args->CheckParm ("-cdrom"))
|
if (Args->CheckParm ("-cdrom"))
|
||||||
{
|
{
|
||||||
leader = CDROM_DIR "/";
|
leader = CDROM_DIR "/";
|
||||||
|
@ -1931,7 +1934,7 @@ FString G_BuildSaveName (const char *prefix, int slot)
|
||||||
}
|
}
|
||||||
if (leader.IsEmpty())
|
if (leader.IsEmpty())
|
||||||
{
|
{
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
leader = "~/" GAME_DIR;
|
leader = "~/" GAME_DIR;
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
char cpath[PATH_MAX];
|
char cpath[PATH_MAX];
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "s_sound.h"
|
#include "s_sound.h"
|
||||||
#include "d_event.h"
|
#include "d_event.h"
|
||||||
#include "m_random.h"
|
#include "m_random.h"
|
||||||
|
#include "doomerrors.h"
|
||||||
#include "doomstat.h"
|
#include "doomstat.h"
|
||||||
#include "wi_stuff.h"
|
#include "wi_stuff.h"
|
||||||
#include "w_wad.h"
|
#include "w_wad.h"
|
||||||
|
@ -169,6 +170,8 @@ CCMD (map)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (argv.argc() > 1)
|
if (argv.argc() > 1)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
if (!P_CheckMapData(argv[1]))
|
if (!P_CheckMapData(argv[1]))
|
||||||
{
|
{
|
||||||
|
@ -179,6 +182,12 @@ CCMD (map)
|
||||||
G_DeferedInitNew (argv[1]);
|
G_DeferedInitNew (argv[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch(CRecoverableError &error)
|
||||||
|
{
|
||||||
|
if (error.GetMessage())
|
||||||
|
Printf("%s", error.GetMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Printf ("Usage: map <map name>\n");
|
Printf ("Usage: map <map name>\n");
|
||||||
|
|
|
@ -101,6 +101,7 @@ struct FMapInfoParser
|
||||||
|
|
||||||
void ParseIntermissionAction(FIntermissionDescriptor *Desc);
|
void ParseIntermissionAction(FIntermissionDescriptor *Desc);
|
||||||
void ParseIntermission();
|
void ParseIntermission();
|
||||||
|
void ParseAMColors(bool);
|
||||||
FName CheckEndSequence();
|
FName CheckEndSequence();
|
||||||
FName ParseEndGame();
|
FName ParseEndGame();
|
||||||
};
|
};
|
||||||
|
|
|
@ -1842,6 +1842,18 @@ void FMapInfoParser::ParseMapInfo (int lump, level_info_t &gamedefaults, level_i
|
||||||
sc.ScriptError("intermission definitions not supported with old MAPINFO syntax");
|
sc.ScriptError("intermission definitions not supported with old MAPINFO syntax");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (sc.Compare("automap") || sc.Compare("automap_overlay"))
|
||||||
|
{
|
||||||
|
if (format_type != FMT_Old)
|
||||||
|
{
|
||||||
|
format_type = FMT_New;
|
||||||
|
ParseAMColors(sc.Compare("automap_overlay"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sc.ScriptError("automap colorset definitions not supported with old MAPINFO syntax");
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sc.ScriptError("%s: Unknown top level keyword", sc.String);
|
sc.ScriptError("%s: Unknown top level keyword", sc.String);
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#include "d_player.h"
|
#include "d_player.h"
|
||||||
#include "farchive.h"
|
#include "farchive.h"
|
||||||
#include "a_hexenglobal.h"
|
#include "a_hexenglobal.h"
|
||||||
|
#include "gstrings.h"
|
||||||
|
|
||||||
#include "../version.h"
|
#include "../version.h"
|
||||||
|
|
||||||
|
@ -1375,8 +1376,8 @@ void DBaseStatusBar::Draw (EHudState state)
|
||||||
// Draw monster count
|
// Draw monster count
|
||||||
if (am_showmonsters)
|
if (am_showmonsters)
|
||||||
{
|
{
|
||||||
mysnprintf (line, countof(line), "MONSTERS:" TEXTCOLOR_GREY " %d/%d",
|
mysnprintf (line, countof(line), "%s" TEXTCOLOR_GREY " %d/%d",
|
||||||
level.killed_monsters, level.total_monsters);
|
GStrings("AM_MONSTERS"), level.killed_monsters, level.total_monsters);
|
||||||
screen->DrawText (SmallFont, highlight, 8, y, line,
|
screen->DrawText (SmallFont, highlight, 8, y, line,
|
||||||
DTA_CleanNoMove, true, TAG_DONE);
|
DTA_CleanNoMove, true, TAG_DONE);
|
||||||
y += height;
|
y += height;
|
||||||
|
@ -1385,8 +1386,8 @@ void DBaseStatusBar::Draw (EHudState state)
|
||||||
// Draw secret count
|
// Draw secret count
|
||||||
if (am_showsecrets)
|
if (am_showsecrets)
|
||||||
{
|
{
|
||||||
mysnprintf (line, countof(line), "SECRETS:" TEXTCOLOR_GREY " %d/%d",
|
mysnprintf (line, countof(line), "%s" TEXTCOLOR_GREY " %d/%d",
|
||||||
level.found_secrets, level.total_secrets);
|
GStrings("AM_SECRETS"), level.found_secrets, level.total_secrets);
|
||||||
screen->DrawText (SmallFont, highlight, 8, y, line,
|
screen->DrawText (SmallFont, highlight, 8, y, line,
|
||||||
DTA_CleanNoMove, true, TAG_DONE);
|
DTA_CleanNoMove, true, TAG_DONE);
|
||||||
y += height;
|
y += height;
|
||||||
|
@ -1395,8 +1396,8 @@ void DBaseStatusBar::Draw (EHudState state)
|
||||||
// Draw item count
|
// Draw item count
|
||||||
if (am_showitems)
|
if (am_showitems)
|
||||||
{
|
{
|
||||||
mysnprintf (line, countof(line), "ITEMS:" TEXTCOLOR_GREY " %d/%d",
|
mysnprintf (line, countof(line), "%s" TEXTCOLOR_GREY " %d/%d",
|
||||||
level.found_items, level.total_items);
|
GStrings("AM_ITEMS"), level.found_items, level.total_items);
|
||||||
screen->DrawText (SmallFont, highlight, 8, y, line,
|
screen->DrawText (SmallFont, highlight, 8, y, line,
|
||||||
DTA_CleanNoMove, true, TAG_DONE);
|
DTA_CleanNoMove, true, TAG_DONE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,7 +135,7 @@ FGameConfigFile::FGameConfigFile ()
|
||||||
local_app_support << cpath << "/" GAME_DIR;
|
local_app_support << cpath << "/" GAME_DIR;
|
||||||
SetValueForKey("Path", local_app_support, true);
|
SetValueForKey("Path", local_app_support, true);
|
||||||
}
|
}
|
||||||
#elif !defined(unix)
|
#elif !defined(__unix__)
|
||||||
SetValueForKey ("Path", "$HOME", true);
|
SetValueForKey ("Path", "$HOME", true);
|
||||||
SetValueForKey ("Path", "$PROGDIR", true);
|
SetValueForKey ("Path", "$PROGDIR", true);
|
||||||
#else
|
#else
|
||||||
|
@ -153,7 +153,7 @@ FGameConfigFile::FGameConfigFile ()
|
||||||
SetValueForKey ("Path", user_app_support, true);
|
SetValueForKey ("Path", user_app_support, true);
|
||||||
SetValueForKey ("Path", "$PROGDIR", true);
|
SetValueForKey ("Path", "$PROGDIR", true);
|
||||||
SetValueForKey ("Path", local_app_support, true);
|
SetValueForKey ("Path", local_app_support, true);
|
||||||
#elif !defined(unix)
|
#elif !defined(__unix__)
|
||||||
SetValueForKey ("Path", "$PROGDIR", true);
|
SetValueForKey ("Path", "$PROGDIR", true);
|
||||||
#else
|
#else
|
||||||
SetValueForKey ("Path", "~/" GAME_DIR, true);
|
SetValueForKey ("Path", "~/" GAME_DIR, true);
|
||||||
|
@ -683,7 +683,7 @@ void FGameConfigFile::CreateStandardAutoExec(const char *section, bool start)
|
||||||
{
|
{
|
||||||
path << cpath << "/" GAME_DIR "/autoexec.cfg";
|
path << cpath << "/" GAME_DIR "/autoexec.cfg";
|
||||||
}
|
}
|
||||||
#elif !defined(unix)
|
#elif !defined(__unix__)
|
||||||
path = "$PROGDIR/autoexec.cfg";
|
path = "$PROGDIR/autoexec.cfg";
|
||||||
#else
|
#else
|
||||||
path = GetUserFile ("autoexec.cfg");
|
path = GetUserFile ("autoexec.cfg");
|
||||||
|
|
|
@ -333,7 +333,7 @@ static long ParseCommandLine (const char *args, int *argc, char **argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if defined(unix)
|
#if defined(__unix__)
|
||||||
FString GetUserFile (const char *file)
|
FString GetUserFile (const char *file)
|
||||||
{
|
{
|
||||||
FString path;
|
FString path;
|
||||||
|
@ -698,7 +698,7 @@ void M_ScreenShot (const char *filename)
|
||||||
// find a file name to save it to
|
// find a file name to save it to
|
||||||
if (filename == NULL || filename[0] == '\0')
|
if (filename == NULL || filename[0] == '\0')
|
||||||
{
|
{
|
||||||
#if !defined(unix) && !defined(__APPLE__)
|
#if !defined(__unix__) && !defined(__APPLE__)
|
||||||
if (Args->CheckParm ("-cdrom"))
|
if (Args->CheckParm ("-cdrom"))
|
||||||
{
|
{
|
||||||
autoname = CDROM_DIR "\\";
|
autoname = CDROM_DIR "\\";
|
||||||
|
@ -715,7 +715,7 @@ void M_ScreenShot (const char *filename)
|
||||||
dirlen = autoname.Len();
|
dirlen = autoname.Len();
|
||||||
if (dirlen == 0)
|
if (dirlen == 0)
|
||||||
{
|
{
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
autoname = "~/" GAME_DIR "/screenshots/";
|
autoname = "~/" GAME_DIR "/screenshots/";
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
char cpath[PATH_MAX];
|
char cpath[PATH_MAX];
|
||||||
|
|
|
@ -131,6 +131,7 @@ void ClearSaveGames()
|
||||||
{
|
{
|
||||||
for(unsigned i=0;i<DLoadSaveMenu::SaveGames.Size(); i++)
|
for(unsigned i=0;i<DLoadSaveMenu::SaveGames.Size(); i++)
|
||||||
{
|
{
|
||||||
|
if(!DLoadSaveMenu::SaveGames[i]->bNoDelete)
|
||||||
delete DLoadSaveMenu::SaveGames[i];
|
delete DLoadSaveMenu::SaveGames[i];
|
||||||
}
|
}
|
||||||
DLoadSaveMenu::SaveGames.Clear();
|
DLoadSaveMenu::SaveGames.Clear();
|
||||||
|
@ -344,7 +345,7 @@ void DLoadSaveMenu::NotifyNewSave (const char *file, const char *title, bool okF
|
||||||
for (unsigned i=0; i<SaveGames.Size(); i++)
|
for (unsigned i=0; i<SaveGames.Size(); i++)
|
||||||
{
|
{
|
||||||
FSaveGameNode *node = SaveGames[i];
|
FSaveGameNode *node = SaveGames[i];
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
if (node->Filename.Compare (file) == 0)
|
if (node->Filename.Compare (file) == 0)
|
||||||
#else
|
#else
|
||||||
if (node->Filename.CompareNoCase (file) == 0)
|
if (node->Filename.CompareNoCase (file) == 0)
|
||||||
|
|
|
@ -158,7 +158,7 @@ static bool CheckSkipOptionBlock(FScanner &sc)
|
||||||
}
|
}
|
||||||
else if (sc.Compare("unix"))
|
else if (sc.Compare("unix"))
|
||||||
{
|
{
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
filter = true;
|
filter = true;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -444,6 +444,7 @@ xx(Alphafloor)
|
||||||
xx(Alphaceiling)
|
xx(Alphaceiling)
|
||||||
xx(Renderstylefloor)
|
xx(Renderstylefloor)
|
||||||
xx(Renderstyleceiling)
|
xx(Renderstyleceiling)
|
||||||
|
xx(Waterzone)
|
||||||
|
|
||||||
xx(offsetx_top)
|
xx(offsetx_top)
|
||||||
xx(offsety_top)
|
xx(offsety_top)
|
||||||
|
|
|
@ -3511,6 +3511,8 @@ enum
|
||||||
APROP_Radius = 36,
|
APROP_Radius = 36,
|
||||||
APROP_ReactionTime = 37,
|
APROP_ReactionTime = 37,
|
||||||
APROP_MeleeRange = 38,
|
APROP_MeleeRange = 38,
|
||||||
|
APROP_ViewHeight = 39,
|
||||||
|
APROP_AttackZOffset = 40
|
||||||
};
|
};
|
||||||
|
|
||||||
// These are needed for ACS's APROP_RenderStyle
|
// These are needed for ACS's APROP_RenderStyle
|
||||||
|
@ -3726,6 +3728,16 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value)
|
||||||
actor->reactiontime = value;
|
actor->reactiontime = value;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case APROP_ViewHeight:
|
||||||
|
if (actor->IsKindOf (RUNTIME_CLASS (APlayerPawn)))
|
||||||
|
static_cast<APlayerPawn *>(actor)->ViewHeight = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case APROP_AttackZOffset:
|
||||||
|
if (actor->IsKindOf (RUNTIME_CLASS (APlayerPawn)))
|
||||||
|
static_cast<APlayerPawn *>(actor)->AttackZOffset = value;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// do nothing.
|
// do nothing.
|
||||||
break;
|
break;
|
||||||
|
@ -3798,6 +3810,23 @@ int DLevelScript::GetActorProperty (int tid, int property, const SDWORD *stack,
|
||||||
case APROP_Radius: return actor->radius;
|
case APROP_Radius: return actor->radius;
|
||||||
case APROP_ReactionTime:return actor->reactiontime;
|
case APROP_ReactionTime:return actor->reactiontime;
|
||||||
case APROP_MeleeRange: return actor->meleerange;
|
case APROP_MeleeRange: return actor->meleerange;
|
||||||
|
case APROP_ViewHeight: if (actor->IsKindOf (RUNTIME_CLASS (APlayerPawn)))
|
||||||
|
{
|
||||||
|
return static_cast<APlayerPawn *>(actor)->ViewHeight;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case APROP_AttackZOffset:
|
||||||
|
if (actor->IsKindOf (RUNTIME_CLASS (APlayerPawn)))
|
||||||
|
{
|
||||||
|
return static_cast<APlayerPawn *>(actor)->AttackZOffset;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
case APROP_SeeSound: return GlobalACSStrings.AddString(actor->SeeSound, stack, stackdepth);
|
case APROP_SeeSound: return GlobalACSStrings.AddString(actor->SeeSound, stack, stackdepth);
|
||||||
case APROP_AttackSound: return GlobalACSStrings.AddString(actor->AttackSound, stack, stackdepth);
|
case APROP_AttackSound: return GlobalACSStrings.AddString(actor->AttackSound, stack, stackdepth);
|
||||||
|
@ -3850,6 +3879,8 @@ int DLevelScript::CheckActorProperty (int tid, int property, int value)
|
||||||
case APROP_Radius:
|
case APROP_Radius:
|
||||||
case APROP_ReactionTime:
|
case APROP_ReactionTime:
|
||||||
case APROP_MeleeRange:
|
case APROP_MeleeRange:
|
||||||
|
case APROP_ViewHeight:
|
||||||
|
case APROP_AttackZOffset:
|
||||||
return (GetActorProperty(tid, property, NULL, 0) == value);
|
return (GetActorProperty(tid, property, NULL, 0) == value);
|
||||||
|
|
||||||
// Boolean values need to compare to a binary version of value
|
// Boolean values need to compare to a binary version of value
|
||||||
|
|
|
@ -1152,7 +1152,7 @@ void P_StartConversation (AActor *npc, AActor *pc, bool facetalker, bool saveang
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (jump)
|
if (jump && CurNode->ItemCheckNode > 0)
|
||||||
{
|
{
|
||||||
int root = pc->player->ConversationNPC->ConversationRoot;
|
int root = pc->player->ConversationNPC->ConversationRoot;
|
||||||
CurNode = StrifeDialogues[root + CurNode->ItemCheckNode - 1];
|
CurNode = StrifeDialogues[root + CurNode->ItemCheckNode - 1];
|
||||||
|
|
|
@ -739,10 +739,13 @@ void AActor::Die (AActor *source, AActor *inflictor, int dmgflags)
|
||||||
{
|
{
|
||||||
SetState (diestate);
|
SetState (diestate);
|
||||||
|
|
||||||
|
if (tics > 1)
|
||||||
|
{
|
||||||
tics -= pr_killmobj() & 3;
|
tics -= pr_killmobj() & 3;
|
||||||
if (tics < 1)
|
if (tics < 1)
|
||||||
tics = 1;
|
tics = 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Destroy();
|
Destroy();
|
||||||
|
|
|
@ -329,7 +329,15 @@ MapData *P_OpenMapData(const char * mapname)
|
||||||
// Since levels must be stored in WADs they can't really have full
|
// Since levels must be stored in WADs they can't really have full
|
||||||
// names and for any valid level lump this always returns the short name.
|
// names and for any valid level lump this always returns the short name.
|
||||||
const char * lumpname = Wads.GetLumpFullName(lump_name + i);
|
const char * lumpname = Wads.GetLumpFullName(lump_name + i);
|
||||||
index = GetMapIndex(mapname, index, lumpname, i != 1 || Wads.LumpLength(lump_name + i) == 0);
|
try
|
||||||
|
{
|
||||||
|
index = GetMapIndex(mapname, index, lumpname, true);
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
delete map;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
if (index == ML_BEHAVIOR) map->HasBehavior = true;
|
if (index == ML_BEHAVIOR) map->HasBehavior = true;
|
||||||
|
|
||||||
// The next lump is not part of this map anymore
|
// The next lump is not part of this map anymore
|
||||||
|
@ -460,8 +468,16 @@ MapData *P_OpenMapData(const char * mapname)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i>0)
|
if (i>0)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
index = GetMapIndex(maplabel, index, lumpname, true);
|
index = GetMapIndex(maplabel, index, lumpname, true);
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
delete map;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
if (index == ML_BEHAVIOR) map->HasBehavior = true;
|
if (index == ML_BEHAVIOR) map->HasBehavior = true;
|
||||||
|
|
||||||
// The next lump is not part of this map anymore
|
// The next lump is not part of this map anymore
|
||||||
|
|
|
@ -1326,7 +1326,11 @@ public:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case NAME_hidden:
|
case NAME_hidden:
|
||||||
sec->MoreFlags |= SECF_HIDDEN;
|
Flag(sec->MoreFlags, SECF_HIDDEN, key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_Waterzone:
|
||||||
|
Flag(sec->MoreFlags, SECF_UNDERWATER, key);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -284,6 +284,7 @@ class USDFParser : public UDMFParserBase
|
||||||
//node->ItemCheckCount[0] = node->ItemCheckCount[1] = node->ItemCheckCount[2] = -1;
|
//node->ItemCheckCount[0] = node->ItemCheckCount[1] = node->ItemCheckCount[2] = -1;
|
||||||
|
|
||||||
node->ThisNodeNum = StrifeDialogues.Push(node);
|
node->ThisNodeNum = StrifeDialogues.Push(node);
|
||||||
|
node->ItemCheckNode = -1;
|
||||||
|
|
||||||
FString SpeakerName;
|
FString SpeakerName;
|
||||||
FString Dialogue;
|
FString Dialogue;
|
||||||
|
|
|
@ -560,6 +560,10 @@ void APlayerPawn::Serialize (FArchive &arc)
|
||||||
{
|
{
|
||||||
arc << UseRange;
|
arc << UseRange;
|
||||||
}
|
}
|
||||||
|
if (SaveVersion >= 4503)
|
||||||
|
{
|
||||||
|
arc << AirCapacity;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -1149,7 +1153,7 @@ bool APlayerPawn::ResetAirSupply (bool playgasp)
|
||||||
{
|
{
|
||||||
S_Sound (this, CHAN_VOICE, "*gasp", 1, ATTN_NORM);
|
S_Sound (this, CHAN_VOICE, "*gasp", 1, ATTN_NORM);
|
||||||
}
|
}
|
||||||
if (level.airsupply> 0) player->air_finished = level.time + level.airsupply;
|
if (level.airsupply> 0 && player->mo->AirCapacity > 0) player->air_finished = level.time + FixedMul(level.airsupply, player->mo->AirCapacity);
|
||||||
else player->air_finished = INT_MAX;
|
else player->air_finished = INT_MAX;
|
||||||
return wasdrowning;
|
return wasdrowning;
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,6 +259,13 @@ bool FZipFile::Open(bool quiet)
|
||||||
lump_p->CompressedSize = LittleLong(zip_fh->CompressedSize);
|
lump_p->CompressedSize = LittleLong(zip_fh->CompressedSize);
|
||||||
lump_p->Position = LittleLong(zip_fh->LocalHeaderOffset);
|
lump_p->Position = LittleLong(zip_fh->LocalHeaderOffset);
|
||||||
lump_p->CheckEmbedded();
|
lump_p->CheckEmbedded();
|
||||||
|
|
||||||
|
// Ignore some very specific names
|
||||||
|
if (0 == stricmp("dehacked.exe", name))
|
||||||
|
{
|
||||||
|
memset(lump_p->Name, 0, sizeof(lump_p->Name));
|
||||||
|
}
|
||||||
|
|
||||||
lump_p++;
|
lump_p++;
|
||||||
}
|
}
|
||||||
// Resize the lump record array to its actual size
|
// Resize the lump record array to its actual size
|
||||||
|
|
|
@ -749,6 +749,8 @@ int I_FindClose (void *handle)
|
||||||
findstate_t *state = (findstate_t *)handle;
|
findstate_t *state = (findstate_t *)handle;
|
||||||
if (handle != (void*)-1 && state->count > 0)
|
if (handle != (void*)-1 && state->count > 0)
|
||||||
{
|
{
|
||||||
|
for(int i = 0;i < state->count;++i)
|
||||||
|
free (state->namelist[i]);
|
||||||
state->count = 0;
|
state->count = 0;
|
||||||
free (state->namelist);
|
free (state->namelist);
|
||||||
state->namelist = NULL;
|
state->namelist = NULL;
|
||||||
|
|
|
@ -816,7 +816,7 @@ bool FMODSoundRenderer::Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
result = Sys->getNumDrivers(&driver);
|
result = Sys->getNumDrivers(&driver);
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
if (result == FMOD_OK)
|
if (result == FMOD_OK)
|
||||||
{
|
{
|
||||||
// On Linux, FMOD defaults to OSS. If OSS is not present, it doesn't
|
// On Linux, FMOD defaults to OSS. If OSS is not present, it doesn't
|
||||||
|
|
|
@ -295,7 +295,7 @@ FluidSynthMIDIDevice::FluidSynthMIDIDevice()
|
||||||
fluid_chorus_speed, fluid_chorus_depth, fluid_chorus_type);
|
fluid_chorus_speed, fluid_chorus_depth, fluid_chorus_type);
|
||||||
if (0 == LoadPatchSets(fluid_patchset))
|
if (0 == LoadPatchSets(fluid_patchset))
|
||||||
{
|
{
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
// This is the standard location on Ubuntu.
|
// This is the standard location on Ubuntu.
|
||||||
if (0 == LoadPatchSets("/usr/share/sounds/sf2/FluidR3_GS.sf2:/usr/share/sounds/sf2/FluidR3_GM.sf2"))
|
if (0 == LoadPatchSets("/usr/share/sounds/sf2/FluidR3_GS.sf2:/usr/share/sounds/sf2/FluidR3_GM.sf2"))
|
||||||
{
|
{
|
||||||
|
@ -322,7 +322,7 @@ FluidSynthMIDIDevice::FluidSynthMIDIDevice()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ void FTextureManager::DeleteAll()
|
||||||
{
|
{
|
||||||
if (mAnimatedDoors[i].TextureFrames != NULL)
|
if (mAnimatedDoors[i].TextureFrames != NULL)
|
||||||
{
|
{
|
||||||
delete mAnimatedDoors[i].TextureFrames;
|
delete[] mAnimatedDoors[i].TextureFrames;
|
||||||
mAnimatedDoors[i].TextureFrames = NULL;
|
mAnimatedDoors[i].TextureFrames = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -332,11 +332,11 @@ int MatchString (const char *in, const char **strings);
|
||||||
|
|
||||||
|
|
||||||
#define DEFINE_MEMBER_VARIABLE(name, cls) \
|
#define DEFINE_MEMBER_VARIABLE(name, cls) \
|
||||||
static FVariableInfo GlobalDef__##name = { #name, myoffsetof(cls, name), &RUNTIME_CLASS_CASTLESS(cls) }; \
|
static FVariableInfo GlobalDef__##name = { #name, static_cast<intptr_t>(myoffsetof(cls, name)), &RUNTIME_CLASS_CASTLESS(cls) }; \
|
||||||
MSVC_MSEG FVariableInfo *infoptr_GlobalDef__##name GCC_MSEG = &GlobalDef__##name;
|
MSVC_MSEG FVariableInfo *infoptr_GlobalDef__##name GCC_MSEG = &GlobalDef__##name;
|
||||||
|
|
||||||
#define DEFINE_MEMBER_VARIABLE_ALIAS(name, alias, cls) \
|
#define DEFINE_MEMBER_VARIABLE_ALIAS(name, alias, cls) \
|
||||||
static FVariableInfo GlobalDef__##name = { #name, myoffsetof(cls, alias), &RUNTIME_CLASS_CASTLESS(cls) }; \
|
static FVariableInfo GlobalDef__##name = { #name, static_cast<intptr_t>(myoffsetof(cls, alias)), &RUNTIME_CLASS_CASTLESS(cls) }; \
|
||||||
MSVC_MSEG FVariableInfo *infoptr_GlobalDef__##name GCC_MSEG = &GlobalDef__##name;
|
MSVC_MSEG FVariableInfo *infoptr_GlobalDef__##name GCC_MSEG = &GlobalDef__##name;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -447,7 +447,7 @@ DEFINE_PROPERTY(skip_super, 0, Actor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy (defaults, GetDefault<AActor>(), sizeof(AActor));
|
memcpy ((void *)defaults, (void *)GetDefault<AActor>(), sizeof(AActor));
|
||||||
ResetBaggage (&bag, RUNTIME_CLASS(AActor));
|
ResetBaggage (&bag, RUNTIME_CLASS(AActor));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2471,6 +2471,15 @@ DEFINE_CLASS_PROPERTY_PREFIX(player, userange, F, PlayerPawn)
|
||||||
defaults->UseRange = z;
|
defaults->UseRange = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
DEFINE_CLASS_PROPERTY_PREFIX(player, aircapacity, F, PlayerPawn)
|
||||||
|
{
|
||||||
|
PROP_FIXED_PARM(z, 0);
|
||||||
|
defaults->AirCapacity = z;
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -166,7 +166,7 @@ static Instrument *load_instrument(Renderer *song, const char *name, int percuss
|
||||||
tmp += ".pat";
|
tmp += ".pat";
|
||||||
if ((fp = open_filereader(tmp, openmode, NULL)) == NULL)
|
if ((fp = open_filereader(tmp, openmode, NULL)) == NULL)
|
||||||
{
|
{
|
||||||
#ifdef unix // Windows isn't case-sensitive.
|
#ifdef __unix__ // Windows isn't case-sensitive.
|
||||||
tmp.ToUpper();
|
tmp.ToUpper();
|
||||||
if ((fp = open_filereader(tmp, openmode, NULL)) == NULL)
|
if ((fp = open_filereader(tmp, openmode, NULL)) == NULL)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -76,7 +76,7 @@ const char *GetVersionString();
|
||||||
|
|
||||||
// Use 4500 as the base git save version, since it's higher than the
|
// Use 4500 as the base git save version, since it's higher than the
|
||||||
// SVN revision ever got.
|
// SVN revision ever got.
|
||||||
#define SAVEVER 4502
|
#define SAVEVER 4503
|
||||||
|
|
||||||
#define SAVEVERSTRINGIFY2(x) #x
|
#define SAVEVERSTRINGIFY2(x) #x
|
||||||
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)
|
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)
|
||||||
|
@ -91,7 +91,7 @@ const char *GetVersionString();
|
||||||
#define FORUM_URL "http://forum.zdoom.org"
|
#define FORUM_URL "http://forum.zdoom.org"
|
||||||
#define BUGS_FORUM_URL "http://forum.zdoom.org/index.php?c=3"
|
#define BUGS_FORUM_URL "http://forum.zdoom.org/index.php?c=3"
|
||||||
|
|
||||||
#ifdef unix
|
#ifdef __unix__
|
||||||
#define GAME_DIR ".config/zdoom"
|
#define GAME_DIR ".config/zdoom"
|
||||||
#elif defined(__APPLE__)
|
#elif defined(__APPLE__)
|
||||||
#define GAME_DIR GAMENAME
|
#define GAME_DIR GAMENAME
|
||||||
|
|
|
@ -84,7 +84,7 @@ ACTOR Actor native //: Thinker
|
||||||
action native A_VileChase();
|
action native A_VileChase();
|
||||||
action native A_VileStart();
|
action native A_VileStart();
|
||||||
action native A_VileTarget(class<Actor> fire = "ArchvileFire");
|
action native A_VileTarget(class<Actor> fire = "ArchvileFire");
|
||||||
action native A_VileAttack(sound snd = "vile/stop", int initialdmg = 20, int blastdmg = 70, int blastradius = 70, float thrustfac = 1.0, name damagetype = "Fire");
|
action native A_VileAttack(sound snd = "vile/stop", int initialdmg = 20, int blastdmg = 70, int blastradius = 70, float thrustfac = 1.0, name damagetype = "Fire", int flags = 0);
|
||||||
action native A_StartFire();
|
action native A_StartFire();
|
||||||
action native A_Fire(float spawnheight = 0);
|
action native A_Fire(float spawnheight = 0);
|
||||||
action native A_FireCrackle();
|
action native A_FireCrackle();
|
||||||
|
|
|
@ -4,6 +4,9 @@ const int PAF_NOSKULLATTACK = 1;
|
||||||
const int PAF_AIMFACING = 2;
|
const int PAF_AIMFACING = 2;
|
||||||
const int PAF_NOTARGET = 4;
|
const int PAF_NOTARGET = 4;
|
||||||
|
|
||||||
|
// Flags for A_VileAttack
|
||||||
|
const int VAF_DMGTYPEAPPLYTODIRECT = 1;
|
||||||
|
|
||||||
// Flags for A_Saw
|
// Flags for A_Saw
|
||||||
const int SF_NORANDOM = 1;
|
const int SF_NORANDOM = 1;
|
||||||
const int SF_RANDOMLIGHTMISS = 2;
|
const int SF_RANDOMLIGHTMISS = 2;
|
||||||
|
|
|
@ -32,6 +32,7 @@ Actor PlayerPawn : Actor native
|
||||||
Player.DamageScreenColor "ff 00 00"
|
Player.DamageScreenColor "ff 00 00"
|
||||||
Player.MugShotMaxHealth 0
|
Player.MugShotMaxHealth 0
|
||||||
Player.FlechetteType "ArtiPoisonBag3"
|
Player.FlechetteType "ArtiPoisonBag3"
|
||||||
|
Player.AirCapacity 1
|
||||||
Obituary "$OB_MPDEFAULT"
|
Obituary "$OB_MPDEFAULT"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1615,6 +1615,10 @@ MNU_EPISODE = "Select Episode";
|
||||||
WI_FINISHED = "finished";
|
WI_FINISHED = "finished";
|
||||||
WI_ENTERING = "Now entering:";
|
WI_ENTERING = "Now entering:";
|
||||||
|
|
||||||
|
AM_MONSTERS = "Monsters:";
|
||||||
|
AM_SECRETS = "Secrets:";
|
||||||
|
AM_ITEMS = "Items:";
|
||||||
|
|
||||||
// Bloodbath announcer
|
// Bloodbath announcer
|
||||||
|
|
||||||
BBA_BONED = "%k boned %o like a fish";
|
BBA_BONED = "%k boned %o like a fish";
|
||||||
|
|
|
@ -850,6 +850,13 @@ OptionValue Autosave
|
||||||
2, "Never"
|
2, "Never"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OptionValue dehopt
|
||||||
|
{
|
||||||
|
0, "Never"
|
||||||
|
1, "All"
|
||||||
|
2, "Only last one"
|
||||||
|
}
|
||||||
|
|
||||||
OptionMenu "MiscOptions"
|
OptionMenu "MiscOptions"
|
||||||
{
|
{
|
||||||
Title "Miscellaneous Options"
|
Title "Miscellaneous Options"
|
||||||
|
@ -864,6 +871,7 @@ OptionMenu "MiscOptions"
|
||||||
Option "Enable cheats from all games", "allcheats", "OnOff"
|
Option "Enable cheats from all games", "allcheats", "OnOff"
|
||||||
Option "Enable autosaves", "disableautosave", "Autosave"
|
Option "Enable autosaves", "disableautosave", "Autosave"
|
||||||
Slider "Number of autosaves", "autosavecount", 1, 20, 1, 0
|
Slider "Number of autosaves", "autosavecount", 1, 20, 1, 0
|
||||||
|
Option "Load *.deh/*.bex lumps", "dehload", "dehopt"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
Option "Cache nodes", "gl_cachenodes", "OnOff"
|
Option "Cache nodes", "gl_cachenodes", "OnOff"
|
||||||
Slider "Time threshold for node caching", "gl_cachetime", 0.0, 2.0, 0.1
|
Slider "Time threshold for node caching", "gl_cachetime", 0.0, 2.0, 0.1
|
||||||
|
@ -920,10 +928,18 @@ OptionValue STSTypes
|
||||||
3, "Rotated"
|
3, "Rotated"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OptionValue MapBackTypes
|
||||||
|
{
|
||||||
|
0, "Off"
|
||||||
|
1, "On"
|
||||||
|
2, "Map defined colors only"
|
||||||
|
}
|
||||||
|
|
||||||
OptionMenu AutomapOptions
|
OptionMenu AutomapOptions
|
||||||
{
|
{
|
||||||
Title "AUTOMAP OPTIONS"
|
Title "AUTOMAP OPTIONS"
|
||||||
Option "Map color set", "am_colorset", "MapColorTypes"
|
Option "Map color set", "am_colorset", "MapColorTypes"
|
||||||
|
Option "Allow map defined colors", "am_customcolors", "YesNo"
|
||||||
Submenu "Set custom colors", "MapColorMenu"
|
Submenu "Set custom colors", "MapColorMenu"
|
||||||
Submenu "Customize map controls", "MapControlsMenu"
|
Submenu "Customize map controls", "MapControlsMenu"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
|
@ -939,7 +955,7 @@ OptionMenu AutomapOptions
|
||||||
Option "Show total time elapsed", "am_showtotaltime", "OnOff"
|
Option "Show total time elapsed", "am_showtotaltime", "OnOff"
|
||||||
Option "Show secrets on map", "am_map_secrets", "SecretTypes"
|
Option "Show secrets on map", "am_map_secrets", "SecretTypes"
|
||||||
Option "Show map label", "am_showmaplabel", "MaplabelTypes"
|
Option "Show map label", "am_showmaplabel", "MaplabelTypes"
|
||||||
Option "Draw map background", "am_drawmapback", "OnOff"
|
Option "Draw map background", "am_drawmapback", "MapBackTypes"
|
||||||
Option "Show keys (cheat)", "am_showkeys", "OnOff"
|
Option "Show keys (cheat)", "am_showkeys", "OnOff"
|
||||||
Option "Show trigger lines", "am_showtriggerlines", "OnOff"
|
Option "Show trigger lines", "am_showtriggerlines", "OnOff"
|
||||||
Option "Show things as sprites", "am_showthingsprites", "STSTypes"
|
Option "Show things as sprites", "am_showthingsprites", "STSTypes"
|
||||||
|
@ -1010,13 +1026,19 @@ OptionMenu MapColorMenu
|
||||||
StaticText "Overlay Mode", 1
|
StaticText "Overlay Mode", 1
|
||||||
ColorPicker "You", "am_ovyourcolor"
|
ColorPicker "You", "am_ovyourcolor"
|
||||||
ColorPicker "1-sided walls", "am_ovwallcolor"
|
ColorPicker "1-sided walls", "am_ovwallcolor"
|
||||||
ColorPicker "2-sided walls", "am_ovotherwallscolor"
|
ColorPicker "2-sided walls with different floors", "am_ovfdwallcolor"
|
||||||
|
ColorPicker "2-sided walls with different ceilings", "am_ovcdwallcolor"
|
||||||
|
ColorPicker "2-sided walls with 3D floors", "am_ovefwallcolor"
|
||||||
ColorPicker "Not-yet-seen walls", "am_ovunseencolor"
|
ColorPicker "Not-yet-seen walls", "am_ovunseencolor"
|
||||||
ColorPicker "Teleporter", "am_ovtelecolor"
|
ColorPicker "Locked doors", "am_ovlockedcolor"
|
||||||
|
ColorPicker "Teleporter to the same map", "am_ovtelecolor"
|
||||||
|
ColorPicker "Teleporter to a different map", "am_ovinterlevelcolor"
|
||||||
ColorPicker "Secret sector", "am_ovsecretsectorcolor"
|
ColorPicker "Secret sector", "am_ovsecretsectorcolor"
|
||||||
ColorPicker "Special trigger lines", "am_ovspecialwallcolor"
|
ColorPicker "Special trigger lines", "am_ovspecialwallcolor"
|
||||||
StaticText " "
|
StaticText " "
|
||||||
StaticText "Overlay Cheat Mode", 1
|
StaticText "Overlay Cheat Mode", 1
|
||||||
|
ColorPicker "Invisible 2-sided walls", "am_ovotherwallscolor"
|
||||||
|
ColorPicker "Secret walls", "am_ovsecretwallcolor"
|
||||||
ColorPicker "Actors", "am_ovthingcolor"
|
ColorPicker "Actors", "am_ovthingcolor"
|
||||||
ColorPicker "Monsters", "am_ovthingcolor_monster"
|
ColorPicker "Monsters", "am_ovthingcolor_monster"
|
||||||
ColorPicker "Friends", "am_ovthingcolor_friend"
|
ColorPicker "Friends", "am_ovthingcolor_friend"
|
||||||
|
|
Loading…
Reference in a new issue