This commit is contained in:
Christoph Oelckers 2013-07-14 14:47:12 +02:00
commit aad509c800
11 changed files with 81 additions and 15 deletions

View file

@ -367,7 +367,7 @@ int FIWadManager::CheckIWAD (const char *doomwaddir, WadStuff *wads)
// Under UNIX OSes, the search path is: // Under UNIX OSes, the search path is:
// 1. Current directory // 1. Current directory
// 2. $DOOMWADDIR // 2. $DOOMWADDIR
// 3. $HOME/.zdoom // 3. $HOME/.config/zdoom
// 4. The share directory defined at compile time (/usr/local/share/zdoom) // 4. The share directory defined at compile time (/usr/local/share/zdoom)
// //
// The search path can be altered by editing the IWADSearch.Directories // The search path can be altered by editing the IWADSearch.Directories
@ -516,9 +516,19 @@ int FIWadManager::IdentifyVersion (TArray<FString> &wadfiles, const char *iwad,
I_FatalError ("Cannot find a game IWAD (doom.wad, doom2.wad, heretic.wad, etc.).\n" I_FatalError ("Cannot find a game IWAD (doom.wad, doom2.wad, heretic.wad, etc.).\n"
"Did you install ZDoom properly? You can do either of the following:\n" "Did you install ZDoom properly? You can do either of the following:\n"
"\n" "\n"
#if defined(_WIN32)
"1. Place one or more of these wads in the same directory as ZDoom.\n" "1. Place one or more of these wads in the same directory as ZDoom.\n"
"2. Edit your zdoom-username.ini and add the directories of your iwads\n" "2. Edit your zdoom-username.ini and add the directories of your iwads\n"
"to the list beneath [IWADSearch.Directories]"); "to the list beneath [IWADSearch.Directories]");
#elif defined(__APPLE__)
"1. Place one or more of these wads in ~/Library/Application Support/zdoom/\n"
"2. Edit your ~/Library/Preferences/zdoom.ini and add the directories\n"
"of your iwads to the list beneath [IWADSearch.Directories]");
#else
"1. Place one or more of these wads in ~/.config/zdoom/.\n"
"2. Edit your ~/.config/zdoom/zdoom.ini and add the directories of your\n"
"iwads to the list beneath [IWADSearch.Directories]");
#endif
} }
pickwad = 0; pickwad = 0;

View file

@ -1048,3 +1048,14 @@ CCMD (playerinfo)
} }
} }
} }
userinfo_t::~userinfo_t()
{
TMapIterator<FName, FBaseCVar *> it(*this);
TMap<FName, FBaseCVar *>::Pair *pair;
while (it.NextPair(pair))
{
delete pair->Value;
}
}

View file

@ -260,6 +260,8 @@ enum
struct userinfo_t : TMap<FName,FBaseCVar *> struct userinfo_t : TMap<FName,FBaseCVar *>
{ {
~userinfo_t();
int GetAimDist() const int GetAimDist() const
{ {
if (dmflags2 & DF2_NOAUTOAIM) if (dmflags2 & DF2_NOAUTOAIM)

View file

@ -898,7 +898,7 @@ IMPLEMENT_CLASS(DSaveMenu)
DSaveMenu::DSaveMenu(DMenu *parent, FListMenuDescriptor *desc) DSaveMenu::DSaveMenu(DMenu *parent, FListMenuDescriptor *desc)
: DLoadSaveMenu(parent, desc) : DLoadSaveMenu(parent, desc)
{ {
strcpy (NewSaveNode.Title, "<New Save Game>"); strcpy (NewSaveNode.Title, GStrings["NEWSAVE"]);
NewSaveNode.bNoDelete = true; NewSaveNode.bNoDelete = true;
SaveGames.Insert(0, &NewSaveNode); SaveGames.Insert(0, &NewSaveNode);
TopItem = 0; TopItem = 0;

View file

@ -256,11 +256,20 @@ static void CopyPlayer (player_t *dst, player_t *src, const char *name)
{ {
// The userinfo needs to be saved for real players, but it // The userinfo needs to be saved for real players, but it
// needs to come from the save for bots. // needs to come from the save for bots.
userinfo_t uibackup = dst->userinfo; userinfo_t uibackup;
userinfo_t uibackup2;
uibackup.TransferFrom(dst->userinfo);
uibackup2.TransferFrom(src->userinfo);
int chasecam = dst->cheats & CF_CHASECAM; // Remember the chasecam setting int chasecam = dst->cheats & CF_CHASECAM; // Remember the chasecam setting
bool attackdown = dst->attackdown; bool attackdown = dst->attackdown;
bool usedown = dst->usedown; bool usedown = dst->usedown;
*dst = *src;
dst->~player_t(); // ensure that the userinfo in dst does not contain anything before copying everything over.
*dst = *src; // To avoid memory leaks at this point the userinfo in src must be empty which is taken care of by the TransferFrom call above.
dst->cheats |= chasecam; dst->cheats |= chasecam;
if (dst->isbot) if (dst->isbot)
@ -276,10 +285,11 @@ static void CopyPlayer (player_t *dst, player_t *src, const char *name)
} }
bglobal.botnum++; bglobal.botnum++;
bglobal.botingame[dst - players] = true; bglobal.botingame[dst - players] = true;
dst->userinfo.TransferFrom(uibackup2);
} }
else else
{ {
dst->userinfo = uibackup; dst->userinfo.TransferFrom(uibackup);
} }
// Validate the skin // Validate the skin
dst->userinfo.SkinNumChanged(R_FindSkin(skins[dst->userinfo.GetSkin()].name, dst->CurrentPlayerClass)); dst->userinfo.SkinNumChanged(R_FindSkin(skins[dst->userinfo.GetSkin()].name, dst->CurrentPlayerClass));

View file

@ -639,12 +639,21 @@ void P_SectorDamage(int tag, int amount, FName type, const PClass *protectClass,
{ {
next = actor->snext; next = actor->snext;
// Only affect actors touching the 3D floor // Only affect actors touching the 3D floor
if (actor->z + actor->height > sec->floorplane.ZatPoint(actor->x, actor->y)) fixed_t z1 = sec->floorplane.ZatPoint(actor->x, actor->y);
fixed_t z2 = sec->ceilingplane.ZatPoint(actor->x, actor->y);
if (z2 < z1)
{
// Account for Vavoom-style 3D floors
fixed_t zz = z1;
z1 = z2;
z2 = zz;
}
if (actor->z + actor->height > z1)
{ {
// If DAMAGE_IN_AIR is used, anything not beneath the 3D floor will be // If DAMAGE_IN_AIR is used, anything not beneath the 3D floor will be
// damaged (so, anything touching it or above it). Other 3D floors between // damaged (so, anything touching it or above it). Other 3D floors between
// the actor and this one will not stop this effect. // the actor and this one will not stop this effect.
if ((flags & DAMAGE_IN_AIR) || actor->z <= sec->ceilingplane.ZatPoint(actor->x, actor->y)) if ((flags & DAMAGE_IN_AIR) || actor->z <= z2)
{ {
// Here we pass the DAMAGE_IN_AIR flag to disable the floor check, since it // Here we pass the DAMAGE_IN_AIR flag to disable the floor check, since it
// only works with the real sector's floor. We did the appropriate height checks // only works with the real sector's floor. We did the appropriate height checks

View file

@ -309,7 +309,6 @@ player_t::player_t()
ConversationFaceTalker(0) ConversationFaceTalker(0)
{ {
memset (&cmd, 0, sizeof(cmd)); memset (&cmd, 0, sizeof(cmd));
memset (&userinfo, 0, sizeof(userinfo));
memset (frags, 0, sizeof(frags)); memset (frags, 0, sizeof(frags));
memset (psprites, 0, sizeof(psprites)); memset (psprites, 0, sizeof(psprites));
memset (&skill, 0, sizeof(skill)); memset (&skill, 0, sizeof(skill));

View file

@ -174,7 +174,15 @@ void R_InitPlanes ()
void R_DeinitPlanes () void R_DeinitPlanes ()
{ {
fakeActive = 0; fakeActive = 0;
R_ClearPlanes(false);
// do not use R_ClearPlanes because at this point the screen pointer is no longer valid.
for (int i = 0; i <= MAXVISPLANES; i++) // new code -- killough
{
for (*freehead = visplanes[i], visplanes[i] = NULL; *freehead; )
{
freehead = &(*freehead)->next;
}
}
for (visplane_t *pl = freetail; pl != NULL; ) for (visplane_t *pl = freetail; pl != NULL; )
{ {
visplane_t *next = pl->next; visplane_t *next = pl->next;
@ -490,7 +498,7 @@ void R_MapColoredPlane (int y, int x1)
void R_ClearPlanes (bool fullclear) void R_ClearPlanes (bool fullclear)
{ {
int i, max; int i;
// Don't clear fake planes if not doing a full clear. // Don't clear fake planes if not doing a full clear.
if (!fullclear) if (!fullclear)
@ -516,7 +524,6 @@ void R_ClearPlanes (bool fullclear)
} }
else else
{ {
max = fullclear ? MAXVISPLANES : MAXVISPLANES-1;
for (i = 0; i <= MAXVISPLANES; i++) // new code -- killough for (i = 0; i <= MAXVISPLANES; i++) // new code -- killough
{ {
for (*freehead = visplanes[i], visplanes[i] = NULL; *freehead; ) for (*freehead = visplanes[i], visplanes[i] = NULL; *freehead; )
@ -524,10 +531,7 @@ void R_ClearPlanes (bool fullclear)
freehead = &(*freehead)->next; freehead = &(*freehead)->next;
} }
} }
}
if (fullclear)
{
// opening / clipping determination // opening / clipping determination
clearbufshort (floorclip, viewwidth, viewheight); clearbufshort (floorclip, viewwidth, viewheight);
// [RH] clip ceiling to console bottom // [RH] clip ceiling to console bottom

View file

@ -70,6 +70,7 @@
#include "m_bbox.h" #include "m_bbox.h"
#include "r_data/r_translate.h" #include "r_data/r_translate.h"
#include "p_trace.h" #include "p_trace.h"
#include "gstrings.h"
static FRandom pr_camissile ("CustomActorfire"); static FRandom pr_camissile ("CustomActorfire");
@ -2133,6 +2134,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Print)
ACTION_PARAM_FLOAT(time, 1); ACTION_PARAM_FLOAT(time, 1);
ACTION_PARAM_NAME(fontname, 2); ACTION_PARAM_NAME(fontname, 2);
if (text[0] == '$') text = GStrings(text+1);
if (self->CheckLocalView (consoleplayer) || if (self->CheckLocalView (consoleplayer) ||
(self->target!=NULL && self->target->CheckLocalView (consoleplayer))) (self->target!=NULL && self->target->CheckLocalView (consoleplayer)))
{ {
@ -2171,6 +2173,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_PrintBold)
float saved = con_midtime; float saved = con_midtime;
FFont *font = NULL; FFont *font = NULL;
if (text[0] == '$') text = GStrings(text+1);
if (fontname != NAME_None) if (fontname != NAME_None)
{ {
font = V_GetFont(fontname); font = V_GetFont(fontname);
@ -2196,11 +2199,13 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Log)
{ {
ACTION_PARAM_START(1); ACTION_PARAM_START(1);
ACTION_PARAM_STRING(text, 0); ACTION_PARAM_STRING(text, 0);
if (text[0] == '$') text = GStrings(text+1);
Printf("%s\n", text); Printf("%s\n", text);
ACTION_SET_RESULT(false); // Prints should never set the result for inventory state chains! ACTION_SET_RESULT(false); // Prints should never set the result for inventory state chains!
} }
//=========================================================================== //=========================================================================
// //
// A_LogInt // A_LogInt
// //

View file

@ -361,3 +361,18 @@ F481922F4881F74760F3C0437FD5EDD0 // map03
// still set when returning to the origin map. // still set when returning to the origin map.
linkfrozenprops linkfrozenprops
} }
D62DCA9EC226DE49108D5DD9271F7631 // Cheogsh 2 map04
{
// Stuff in megasphere cage is positioned too low
setthingz 1640 528
setthingz 1641 528
setthingz 1642 528
setthingz 1643 528
setthingz 1644 528
setthingz 1645 528
setthingz 1646 528
setthingz 1647 528
setthingz 1648 528
setthingz 1649 528
}

View file

@ -112,6 +112,7 @@ PD_YELLOWCO = "You need a yellow card to activate this object";
PD_BLUESO = "You need a blue skull to activate this object"; PD_BLUESO = "You need a blue skull to activate this object";
PD_REDSO = "You need a red skull to activate this object"; PD_REDSO = "You need a red skull to activate this object";
PD_YELLOWSO = "You need a yellow skull to activate this object"; PD_YELLOWSO = "You need a yellow skull to activate this object";
NEWSAVE = "<New Save Game>";
GGSAVED = "game saved."; GGSAVED = "game saved.";
HUSTR_MSGU = "[Message unsent]"; HUSTR_MSGU = "[Message unsent]";
PICKUP_PISTOL_DROPPED = "Picked up a pistol."; PICKUP_PISTOL_DROPPED = "Picked up a pistol.";