SVN r51 (trunk)

This commit is contained in:
Christoph Oelckers 2006-04-17 13:53:34 +00:00
parent fa7987005e
commit 36e37becb5
14 changed files with 167 additions and 41 deletions

View file

@ -3,7 +3,7 @@ CXX ?= g++
CC ?= gcc
CFLAGS ?= -Wall -Wno-unused -O2 -fomit-frame-pointer
CFLAGS += -DHAVE_FILELENGTH -D__forceinline=inline -Izlib -IFLAC `sdl-config --cflags`
CFLAGS += -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp
CFLAGS += -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp -DNEED_STRUPR
LDFLAGS += -lFLAC++ -lFLAC -lz -lfmod `sdl-config --libs`
NASM ?= nasm
@ -35,7 +35,7 @@ ZDOOMDEBUG = zdoomd
ifndef DEBUG
OBJDIR = $(RELEASEOBJ)
CFLAGS += -DNDEBUG
LDFLAGS += -Wl,-Map=zdoomgcc.map
LDFLAGS += -Wl,-Map=$(ZDOOM).map
ZDOOMBIN = $(ZDOOM)
else
OBJDIR = $(DEBUGOBJ)
@ -44,15 +44,17 @@ else
endif
CXXFLAGS += $(CFLAGS)
OBJS = $(addprefix $(OBJDIR)/,$(CPPOBJFILES) $(COBJFILES))
DEPS = $(patsubst %.o,%.d,$(OBJS))
OBJS += $(addprefix $(OBJDIR)/,$(AOBJFILES))
COBJS = $(addprefix $(OBJDIR)/,$(CPPOBJFILES) $(COBJFILES))
DEPS = $(patsubst %.o,%.d,$(COBJS))
OBJS = $(addprefix $(OBJDIR)/,$(AOBJFILES)) $(COBJS)
# controls whether to start another instance of make at deps
RESTART?=1
# rule pattern for dependencies
define DEPBUILD_PATTERN
_dep_: _src_
$(CXX) _src_ -MM $(CXXFLAGS) -MT "$$(patsubst %.d,%.o,_dep_) _dep_" -MF _dep_
-include _dep_
endef
# rule pattern for assembly files
@ -68,10 +70,13 @@ endef
all: $(ZDOOMBIN) zdoom.wad
$(ZDOOMBIN): $(OBJDIR) $(DEPS) $(OBJS)
$(ZDOOMBIN): $(OBJDIR) deps $(OBJS)
$(CXX) $(LDFLAGS) $(OBJDIR)/autostart.o \
$(filter-out %/autostart.o %/autozend.o,$(OBJS)) $(OBJDIR)/autozend.o -o $(ZDOOMBIN)
#include any of the dep files that already exist
$(foreach dep,$(DEPS),$(if $(wildcard $(dep)),$(eval include $(dep))))
# textually substitute in the _dep_ and the _src_ it depends on to create rules
# for creating dependency files without any existing dependency files
$(foreach src,$(CPPSRCS) $(CSRCS), $(eval $(subst _src_,$(src),$(subst \
@ -89,21 +94,28 @@ _obj_,$(OBJDIR)/$(patsubst %.c,%.o,$(notdir $$$(src))),$(CBUILD_PATTERN)))))
$(OBJDIR)/%.o:
$(CXX) -c $(CXXFLAGS) -o $@ -c $<
-include $(DEPS)
# start a new instance of make after dependency files have been made
deps: $(DEPS)
$(if $(RESTART),@make -f $(firstword $(MAKEFILE_LIST)) RESTART=)
$(OBJDIR):
mkdir -p $(OBJDIR)
mkdir $(OBJDIR)
zdoom.wad:
make -C wadsrc/ -f Makefile
.PHONY : clean cleandeps cleanobjs
.PHONY : clean cleandeps cleanobjs distclean deps
clean:
rm -f $(RELEASEOBJ)/* $(DEBUGOBJ)/* $(ZDOOMDEBUG) $(ZDOOM)
clean: cleanobjs
rm -f $(ZDOOMDEBUG) $(ZDOOM) $(ZDOOM).map
# I could use a recursive delete instead, but that could be dangerous...
distclean: clean cleandeps
rmdir $(RELEASEOBJ) $(DEBUGOBJ)
cleandeps:
rm -f $(RELEASEOBJ)/*.d $(DEBUGOBJ)/*.d
cleanobjs:
rm -f $(RELEASEOBJ)/*.o $(DEBUGOBJ)/*.o

View file

@ -1,3 +1,25 @@
April 17, 2006 (Changes by Graf Zahl)
- Fixed: dssiglup was misspelled as dssglup in SNDINFO so the Sigil's
charging sound never played.
- Fixed: The sigil doesn't use the generic weapon pickup sound. It should
use weapons/sigilcharge.
- Fixed: P_Move never checked whether a monster has the MF2_PUSHWALL flag.
As a result everything using A_Chase was able to activate pushable
walls and not just the monsters which are allowed to activate them.
- Fixed: P_Move must split the move if the step size is larger than the
radius.
- Fixed: tmfloorpic was set in P_LineOpening. But this is not guaranteed
to set the correct picture because the end result depends on the line
ordering and not the sector heights. It must be set in PIT_CheckLine.
- Fixed: Due to the previously missing ceilingsector variable bouncing
missiles could use the incorrect sector when hitting an edge between
ceilings of different height.
- Fixed: Missiles exploding on the edge of a ceiling neighboring to a
sky vanished instead of exploding if the missile's center was in the
sky sector. To do this I added ceilingsector and ceilingpic variables
to AActor, similar to the already existing floorsector and floorpic.
- Fixed: ZDoom now looks for ZDoom.wad in the program directory first.
April 16, 2006
- Fixed: After respawning in a singleplayer demo, demo playback went out
of sync becase the RNG seed was being altered during recording but not
@ -12198,3 +12220,4 @@ March 6, 1998
- Functions in i_music.c now pay attention to the looping flag.
- C_AddNotifyString() now pays attention to show_messages cvar.
- Added support for specifying console commands on the command line.

View file

@ -600,6 +600,8 @@ public:
struct sector_t *floorsector;
SDWORD floorpic; // contacted sec floorpic
struct sector_t *ceilingsector;
SDWORD ceilingpic; // contacted sec ceilingpic
fixed_t radius, height; // for movement checking
fixed_t momx, momy, momz; // momentums
SDWORD tics; // state tic counter

View file

@ -116,7 +116,7 @@ void D_AddWildFile (const char *pattern);
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
void D_DoomLoop ();
static const char *BaseFileSearch (const char *file, const char *ext);
static const char *BaseFileSearch (const char *file, const char *ext, bool lookfirstinprogdir=false);
static void STACK_ARGS DoConsoleAtExit ();
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
@ -1692,10 +1692,19 @@ static EIWADType IdentifyVersion (void)
//
//==========================================================================
static const char *BaseFileSearch (const char *file, const char *ext)
static const char *BaseFileSearch (const char *file, const char *ext, bool lookfirstinprogdir)
{
static char wad[PATH_MAX];
if (lookfirstinprogdir)
{
sprintf (wad, "%s%s%s", progdir, progdir[strlen (progdir) - 1] != '/' ? "/" : "", file);
if (FileExists (wad))
{
return wad;
}
}
if (FileExists (file))
{
return file;
@ -1910,7 +1919,8 @@ void D_DoomMain (void)
// [RH] Make sure zdoom.wad is always loaded,
// as it contains magic stuff we need.
wad = BaseFileSearch ("zdoom.wad", NULL);
wad = BaseFileSearch ("zdoom.wad", NULL, true);
if (wad)
D_AddFile (wad);
else

View file

@ -6,6 +6,7 @@
#include "p_enemy.h"
#include "gstrings.h"
#include "a_action.h"
#include "thingdef.h"
void A_FatRaise (AActor *);
void A_FatAttack1 (AActor *);
@ -252,7 +253,6 @@ void A_FatAttack3 (AActor *self)
}
}
int EvalExpressionI (int id, AActor *self);
//
// killough 9/98: a mushroom explosion effect, sorta :)
// Original idea: Linguica

View file

@ -1918,6 +1918,8 @@ void G_FinishTravel ()
pawn->dropoffz = pawndup->dropoffz;
pawn->floorsector = pawndup->floorsector;
pawn->floorpic = pawndup->floorpic;
pawn->ceilingsector = pawndup->ceilingsector;
pawn->ceilingpic = pawndup->ceilingpic;
pawn->floorclip = pawndup->floorclip;
pawn->waterlevel = pawndup->waterlevel;
pawn->target = NULL;

View file

@ -1966,6 +1966,7 @@ IMPLEMENT_ACTOR (ASigil, Strife, -1, 0)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOORCLIP)
PROP_Weapon_FlagsSet (WIF_CHEATNOTWEAPON)
PROP_Inventory_PickupSound("weapons/sigilcharge")
PROP_Tag ("SIGIL")
PROP_Inventory_Icon ("I_SGL1")
END_DEFAULTS

View file

@ -411,8 +411,40 @@ BOOL P_Move (AActor *actor)
tryx = (origx = actor->x) + (deltax = FixedMul (speed, xspeed[actor->movedir]));
tryy = (origy = actor->y) + (deltay = FixedMul (speed, yspeed[actor->movedir]));
// Like P_XYMovement this should do multiple moves if the step size is too large
fixed_t maxmove = actor->radius - FRACUNIT;
int steps = 1;
if (maxmove > 0)
{
const fixed_t xspeed = abs (deltax);
const fixed_t yspeed = abs (deltay);
if (xspeed > yspeed)
{
if (xspeed > maxmove)
{
steps = 1 + xspeed / maxmove;
}
}
else
{
if (yspeed > maxmove)
{
steps = 1 + yspeed / maxmove;
}
}
}
try_ok = true;
for(int i=1; i < steps; i++)
{
try_ok = P_TryMove(actor, origx + Scale(deltax, i, steps), origy + Scale(deltay, i, steps), false);
if (!try_ok) break;
}
// killough 3/15/98: don't jump over dropoffs:
try_ok = P_TryMove (actor, tryx, tryy, false);
if (try_ok) try_ok = P_TryMove (actor, tryx, tryy, false);
// [GrafZahl] Interpolating monster movement as it is done here just looks bad
// so make it switchable!
@ -481,7 +513,7 @@ BOOL P_Move (AActor *actor)
{
// [RH] let monsters push lines, as well as use them
if (P_ActivateLine (ld, actor, 0, SPAC_USE) ||
P_ActivateLine (ld, actor, 0, SPAC_PUSH))
((actor->flags & MF2_PUSHWALL) && P_ActivateLine (ld, actor, 0, SPAC_PUSH)))
{
good |= ld == BlockingLine ? 1 : 2;
}

View file

@ -1354,7 +1354,9 @@ BOOL CheckCheatmode ();
CCMD (kill)
{
if (argv.argc() > 1 && !stricmp (argv[1], "monsters"))
if (argv.argc() > 1)
{
if (!stricmp (argv[1], "monsters"))
{
// Kill all the monsters
if (CheckCheatmode ())
@ -1364,6 +1366,12 @@ CCMD (kill)
Net_WriteByte (CHT_MASSACRE);
}
else
{
Printf("cannot kill '%s'\n", argv[1]);
return;
}
}
else
{
// Kill the player
Net_WriteByte (DEM_SUICIDE);

View file

@ -259,6 +259,8 @@ extern fixed_t tmffloorz, tmfceilingz;
extern fixed_t tmfdropoffz;
extern fixed_t tmffloorpic;
extern sector_t *tmffloorsector;
extern fixed_t tmfceilingpic;
extern sector_t *tmfceilingsector;
//Added by MC: tmsectortype

View file

@ -93,6 +93,8 @@ fixed_t tmceilingz;
fixed_t tmdropoffz;
int tmfloorpic;
sector_t *tmfloorsector;
int tmceilingpic;
sector_t *tmceilingsector;
static fixed_t tmfbbox[4];
static AActor *tmfthing;
@ -101,6 +103,8 @@ fixed_t tmfceilingz;
fixed_t tmfdropoffz;
fixed_t tmffloorpic;
sector_t *tmffloorsector;
fixed_t tmfceilingpic;
sector_t *tmfceilingsector;
//Added by MC: So bot will know what kind of sector it's entering.
sector_t* tmsector;
@ -122,6 +126,7 @@ AActor *BlockingMobj;
msecnode_t* sector_list = NULL; // phares 3/16/98
extern sector_t *openbottomsec;
extern sector_t *opentopsec;
bool DoRipping;
AActor *LastRipped;
@ -228,6 +233,8 @@ void P_FindFloorCeiling (AActor *actor)
tmfceilingz = sec->ceilingplane.ZatPoint (x, y);
tmffloorpic = sec->floorpic;
tmffloorsector = sec;
tmfceilingpic = sec->ceilingpic;
tmfceilingsector = sec;
tmfthing = actor;
validcount++;
@ -338,6 +345,8 @@ BOOL P_TeleportMove (AActor *thing, fixed_t x, fixed_t y, fixed_t z, BOOL telefr
tmfceilingz = newsubsec->sector->ceilingplane.ZatPoint (x, y);
tmffloorpic = newsubsec->sector->floorpic;
tmffloorsector = newsubsec->sector;
tmfceilingpic = newsubsec->sector->ceilingpic;
tmfceilingsector = newsubsec->sector;
tmfthing = tmthing;
validcount++;
@ -367,6 +376,8 @@ BOOL P_TeleportMove (AActor *thing, fixed_t x, fixed_t y, fixed_t z, BOOL telefr
fixed_t saveceilingz = tmfceilingz;
sector_t *savesector = tmffloorsector;
int savepic = tmffloorpic;
sector_t *savecsector = tmffloorsector;
int savecpic = tmffloorpic;
fixed_t savedropoff = tmfdropoffz;
for (bx=xl ; bx<=xh ; bx++)
@ -386,6 +397,8 @@ BOOL P_TeleportMove (AActor *thing, fixed_t x, fixed_t y, fixed_t z, BOOL telefr
thing->ceilingz = saveceilingz;
thing->floorsector = savesector;
thing->floorpic = savepic;
thing->ceilingsector = savecsector;
thing->ceilingpic = savecpic;
thing->dropoffz = savedropoff; // killough 11/98
if (thing->flags2 & MF2_FLOORCLIP)
@ -765,6 +778,8 @@ BOOL PIT_CheckLine (line_t *ld)
if (opentop < tmceilingz)
{
tmceilingz = opentop;
tmceilingsector = opentopsec;
tmceilingpic = opentopsec->ceilingpic;
ceilingline = ld;
BlockingLine = ld;
}
@ -773,6 +788,7 @@ BOOL PIT_CheckLine (line_t *ld)
{
tmfloorz = openbottom;
tmfloorsector = openbottomsec;
tmfloorpic = openbottomsec->floorpic;
BlockingLine = ld;
}
@ -1265,6 +1281,8 @@ BOOL P_CheckPosition (AActor *thing, fixed_t x, fixed_t y)
tmceilingz = newsubsec->sector->ceilingplane.ZatPoint (x, y);
tmfloorpic = newsubsec->sector->floorpic;
tmfloorsector = newsubsec->sector;
tmceilingpic = newsubsec->sector->ceilingpic;
tmceilingsector = newsubsec->sector;
//Added by MC: Fill the tmsector.
tmsector = newsubsec->sector;
@ -1710,6 +1728,8 @@ BOOL P_TryMove (AActor *thing, fixed_t x, fixed_t y,
thing->dropoffz = tmdropoffz; // killough 11/98: keep track of dropoffs
thing->floorpic = tmfloorpic;
thing->floorsector = tmfloorsector;
thing->ceilingpic = tmceilingpic;
thing->ceilingsector = tmceilingsector;
thing->x = x;
thing->y = y;
@ -2983,6 +3003,8 @@ void P_RailAttack (AActor *source, int damage, int offset)
fixed_t savefloor, saveceil, savedropoff;
int savefloorpic;
sector_t *savefloorsec;
int saveceilingpic;
sector_t *saveceilingsec;
savex = source->x;
savey = source->y;
@ -2992,6 +3014,8 @@ void P_RailAttack (AActor *source, int damage, int offset)
savedropoff = source->dropoffz;
savefloorpic = source->floorpic;
savefloorsec = source->floorsector;
saveceilingpic = source->ceilingpic;
saveceilingsec = source->ceilingsector;
source->SetOrigin (trace.X, trace.Y, trace.Z);
P_HitWater (source, trace.Sector);
@ -3002,6 +3026,8 @@ void P_RailAttack (AActor *source, int damage, int offset)
source->dropoffz = savedropoff;
source->floorpic = savefloorpic;
source->floorsector = savefloorsec;
source->ceilingpic = saveceilingpic;
source->ceilingsector = saveceilingsec;
}
if (trace.CrossedWater)
{
@ -3605,6 +3631,8 @@ BOOL P_AdjustFloorCeil (AActor *thing)
thing->dropoffz = tmdropoffz; // killough 11/98: remember dropoffs
thing->floorpic = tmfloorpic;
thing->floorsector = tmfloorsector;
thing->ceilingpic = tmceilingpic;
thing->ceilingsector = tmceilingsector;
return isgood;
}

View file

@ -189,6 +189,7 @@ fixed_t openrange;
fixed_t lowfloor;
extern int tmfloorpic;
sector_t *openbottomsec;
sector_t *opentopsec;
void P_LineOpening (const line_t *linedef, fixed_t x, fixed_t y, fixed_t refx, fixed_t refy)
{
@ -212,6 +213,7 @@ void P_LineOpening (const line_t *linedef, fixed_t x, fixed_t y, fixed_t refx, f
/*Printf ("]]]]]] %d %d\n", ff, bf);*/
opentopsec = fc < bc? front : back;
opentop = fc < bc ? fc : bc;
bool usefront;
@ -241,14 +243,14 @@ void P_LineOpening (const line_t *linedef, fixed_t x, fixed_t y, fixed_t refx, f
openbottom = ff;
openbottomsec = front;
lowfloor = bf;
tmfloorpic = front->floorpic;
//tmfloorpic = front->floorpic;
}
else
{
openbottom = bf;
openbottomsec = back;
lowfloor = ff;
tmfloorpic = back->floorpic;
//tmfloorpic = back->floorpic;
}
openrange = opentop - openbottom;

View file

@ -262,6 +262,7 @@ void AActor::Serialize (FArchive &arc)
<< ceilingz
<< dropoffz
<< floorsector
<< ceilingsector
<< radius
<< height
<< momx
@ -1873,8 +1874,7 @@ void P_ZMovement (AActor *mo)
}
else
{
if (mo->floorsector->floorpic == skyflatnum &&
!(mo->flags3 & MF3_SKYEXPLODE))
if (mo->floorpic == skyflatnum && !(mo->flags3 & MF3_SKYEXPLODE))
{
// [RH] Just remove the missile without exploding it
// if this is a sky floor.
@ -1961,7 +1961,7 @@ void P_ZMovement (AActor *mo)
mo->z = mo->ceilingz - mo->height;
if (mo->flags2 & MF2_BOUNCETYPE)
{ // ceiling bounce
mo->FloorBounceMissile (mo->Sector->ceilingplane);
mo->FloorBounceMissile (mo->ceilingsector->ceilingplane);
return;
}
if (mo->momz > 0)
@ -1977,8 +1977,7 @@ void P_ZMovement (AActor *mo)
{
return;
}
if (!(mo->flags3 & MF3_SKYEXPLODE) &&
mo->Sector->ceilingpic == skyflatnum)
if (mo->ceilingpic == skyflatnum && !(mo->flags3 & MF3_SKYEXPLODE))
{
mo->Destroy ();
return;
@ -3041,6 +3040,8 @@ AActor *AActor::StaticSpawn (const TypeInfo *type, fixed_t ix, fixed_t iy, fixed
actor->ceilingz = actor->Sector->ceilingplane.ZatPoint (ix, iy);
actor->floorsector = actor->Sector;
actor->floorpic = actor->floorsector->floorpic;
actor->ceilingsector = actor->Sector;
actor->ceilingpic = actor->ceilingsector->ceilingpic;
}
else
{
@ -3050,6 +3051,8 @@ AActor *AActor::StaticSpawn (const TypeInfo *type, fixed_t ix, fixed_t iy, fixed
actor->ceilingz = tmfceilingz;
actor->floorpic = tmffloorpic;
actor->floorsector = tmffloorsector;
actor->ceilingpic = tmfceilingpic;
actor->ceilingsector = tmfceilingsector;
}
actor->SpawnPoint[0] = ix >> FRACBITS;
@ -3143,6 +3146,7 @@ void AActor::HandleSpawnFlags ()
if (SpawnFlags & MTF_FRIENDLY)
{
flags |= MF_FRIENDLY;
// Friendlies don't count as kills!
if (flags & MF_COUNTKILL)
{
flags &= ~MF_COUNTKILL;

View file

@ -1011,7 +1011,7 @@ weapons/phgrenadeshoot dsphoot
weapons/phgrenadebang dsexplod
weapons/sigil dssigil
weapons/sigilhit dssglhit
weapons/sigilcharge dssglup
weapons/sigilcharge dssiglup
monsters/rifle dsrifle