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 CC ?= gcc
CFLAGS ?= -Wall -Wno-unused -O2 -fomit-frame-pointer CFLAGS ?= -Wall -Wno-unused -O2 -fomit-frame-pointer
CFLAGS += -DHAVE_FILELENGTH -D__forceinline=inline -Izlib -IFLAC `sdl-config --cflags` 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` LDFLAGS += -lFLAC++ -lFLAC -lz -lfmod `sdl-config --libs`
NASM ?= nasm NASM ?= nasm
@ -35,7 +35,7 @@ ZDOOMDEBUG = zdoomd
ifndef DEBUG ifndef DEBUG
OBJDIR = $(RELEASEOBJ) OBJDIR = $(RELEASEOBJ)
CFLAGS += -DNDEBUG CFLAGS += -DNDEBUG
LDFLAGS += -Wl,-Map=zdoomgcc.map LDFLAGS += -Wl,-Map=$(ZDOOM).map
ZDOOMBIN = $(ZDOOM) ZDOOMBIN = $(ZDOOM)
else else
OBJDIR = $(DEBUGOBJ) OBJDIR = $(DEBUGOBJ)
@ -44,33 +44,38 @@ else
endif endif
CXXFLAGS += $(CFLAGS) CXXFLAGS += $(CFLAGS)
OBJS = $(addprefix $(OBJDIR)/,$(CPPOBJFILES) $(COBJFILES)) COBJS = $(addprefix $(OBJDIR)/,$(CPPOBJFILES) $(COBJFILES))
DEPS = $(patsubst %.o,%.d,$(OBJS)) DEPS = $(patsubst %.o,%.d,$(COBJS))
OBJS += $(addprefix $(OBJDIR)/,$(AOBJFILES)) OBJS = $(addprefix $(OBJDIR)/,$(AOBJFILES)) $(COBJS)
# controls whether to start another instance of make at deps
RESTART?=1
# rule pattern for dependencies # rule pattern for dependencies
define DEPBUILD_PATTERN define DEPBUILD_PATTERN
_dep_: _src_ _dep_: _src_
$(CXX) _src_ -MM $(CXXFLAGS) -MT "$$(patsubst %.d,%.o,_dep_) _dep_" -MF _dep_ $(CXX) _src_ -MM $(CXXFLAGS) -MT "$$(patsubst %.d,%.o,_dep_) _dep_" -MF _dep_
-include _dep_
endef endef
# rule pattern for assembly files # rule pattern for assembly files
define ASMBUILD_PATTERN define ASMBUILD_PATTERN
_obj_: _src_ _obj_: _src_
$(NASM) -o _obj_ $(NASMFLAGS) _src_ $(NASM) -o _obj_ $(NASMFLAGS) _src_
endef endef
define CBUILD_PATTERN define CBUILD_PATTERN
_obj_: _src_ _obj_: _src_
$(CC) -c $(CFLAGS) -o _obj_ -c _src_ $(CC) -c $(CFLAGS) -o _obj_ -c _src_
endef endef
all: $(ZDOOMBIN) zdoom.wad all: $(ZDOOMBIN) zdoom.wad
$(ZDOOMBIN): $(OBJDIR) $(DEPS) $(OBJS) $(ZDOOMBIN): $(OBJDIR) deps $(OBJS)
$(CXX) $(LDFLAGS) $(OBJDIR)/autostart.o \ $(CXX) $(LDFLAGS) $(OBJDIR)/autostart.o \
$(filter-out %/autostart.o %/autozend.o,$(OBJS)) $(OBJDIR)/autozend.o -o $(ZDOOMBIN) $(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 # textually substitute in the _dep_ and the _src_ it depends on to create rules
# for creating dependency files without any existing dependency files # for creating dependency files without any existing dependency files
@ -87,23 +92,30 @@ $(foreach src,$(CSRCS), $(eval $(subst _src_,$(src),$(subst \
_obj_,$(OBJDIR)/$(patsubst %.c,%.o,$(notdir $$$(src))),$(CBUILD_PATTERN))))) _obj_,$(OBJDIR)/$(patsubst %.c,%.o,$(notdir $$$(src))),$(CBUILD_PATTERN)))))
$(OBJDIR)/%.o: $(OBJDIR)/%.o:
$(CXX) -c $(CXXFLAGS) -o $@ -c $< $(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): $(OBJDIR):
mkdir -p $(OBJDIR) mkdir $(OBJDIR)
zdoom.wad: zdoom.wad:
make -C wadsrc/ -f Makefile make -C wadsrc/ -f Makefile
.PHONY : clean cleandeps cleanobjs .PHONY : clean cleandeps cleanobjs distclean deps
clean: clean: cleanobjs
rm -f $(RELEASEOBJ)/* $(DEBUGOBJ)/* $(ZDOOMDEBUG) $(ZDOOM) 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: cleandeps:
rm -f $(RELEASEOBJ)/*.d $(DEBUGOBJ)/*.d rm -f $(RELEASEOBJ)/*.d $(DEBUGOBJ)/*.d
cleanobjs: cleanobjs:
rm -f $(RELEASEOBJ)/*.o $(DEBUGOBJ)/*.o 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 April 16, 2006
- Fixed: After respawning in a singleplayer demo, demo playback went out - Fixed: After respawning in a singleplayer demo, demo playback went out
of sync becase the RNG seed was being altered during recording but not 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. - Functions in i_music.c now pay attention to the looping flag.
- C_AddNotifyString() now pays attention to show_messages cvar. - C_AddNotifyString() now pays attention to show_messages cvar.
- Added support for specifying console commands on the command line. - Added support for specifying console commands on the command line.

View file

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

View file

@ -116,7 +116,7 @@ void D_AddWildFile (const char *pattern);
// PRIVATE FUNCTION PROTOTYPES --------------------------------------------- // PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
void D_DoomLoop (); 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 (); static void STACK_ARGS DoConsoleAtExit ();
// EXTERNAL DATA DECLARATIONS ---------------------------------------------- // 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]; 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)) if (FileExists (file))
{ {
return file; return file;
@ -1910,7 +1919,8 @@ void D_DoomMain (void)
// [RH] Make sure zdoom.wad is always loaded, // [RH] Make sure zdoom.wad is always loaded,
// as it contains magic stuff we need. // as it contains magic stuff we need.
wad = BaseFileSearch ("zdoom.wad", NULL);
wad = BaseFileSearch ("zdoom.wad", NULL, true);
if (wad) if (wad)
D_AddFile (wad); D_AddFile (wad);
else else

View file

@ -6,6 +6,7 @@
#include "p_enemy.h" #include "p_enemy.h"
#include "gstrings.h" #include "gstrings.h"
#include "a_action.h" #include "a_action.h"
#include "thingdef.h"
void A_FatRaise (AActor *); void A_FatRaise (AActor *);
void A_FatAttack1 (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 :) // killough 9/98: a mushroom explosion effect, sorta :)
// Original idea: Linguica // Original idea: Linguica

View file

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

View file

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

View file

@ -411,8 +411,40 @@ BOOL P_Move (AActor *actor)
tryx = (origx = actor->x) + (deltax = FixedMul (speed, xspeed[actor->movedir])); tryx = (origx = actor->x) + (deltax = FixedMul (speed, xspeed[actor->movedir]));
tryy = (origy = actor->y) + (deltay = FixedMul (speed, yspeed[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: // 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 // [GrafZahl] Interpolating monster movement as it is done here just looks bad
// so make it switchable! // so make it switchable!
@ -481,7 +513,7 @@ BOOL P_Move (AActor *actor)
{ {
// [RH] let monsters push lines, as well as use them // [RH] let monsters push lines, as well as use them
if (P_ActivateLine (ld, actor, 0, SPAC_USE) || 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; good |= ld == BlockingLine ? 1 : 2;
} }

View file

@ -1354,14 +1354,22 @@ BOOL CheckCheatmode ();
CCMD (kill) CCMD (kill)
{ {
if (argv.argc() > 1 && !stricmp (argv[1], "monsters")) if (argv.argc() > 1)
{ {
// Kill all the monsters if (!stricmp (argv[1], "monsters"))
if (CheckCheatmode ()) {
return; // Kill all the monsters
if (CheckCheatmode ())
return;
Net_WriteByte (DEM_GENERICCHEAT); Net_WriteByte (DEM_GENERICCHEAT);
Net_WriteByte (CHT_MASSACRE); Net_WriteByte (CHT_MASSACRE);
}
else
{
Printf("cannot kill '%s'\n", argv[1]);
return;
}
} }
else else
{ {

View file

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

View file

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

View file

@ -189,6 +189,7 @@ fixed_t openrange;
fixed_t lowfloor; fixed_t lowfloor;
extern int tmfloorpic; extern int tmfloorpic;
sector_t *openbottomsec; 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) 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);*/ /*Printf ("]]]]]] %d %d\n", ff, bf);*/
opentopsec = fc < bc? front : back;
opentop = fc < bc ? fc : bc; opentop = fc < bc ? fc : bc;
bool usefront; 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; openbottom = ff;
openbottomsec = front; openbottomsec = front;
lowfloor = bf; lowfloor = bf;
tmfloorpic = front->floorpic; //tmfloorpic = front->floorpic;
} }
else else
{ {
openbottom = bf; openbottom = bf;
openbottomsec = back; openbottomsec = back;
lowfloor = ff; lowfloor = ff;
tmfloorpic = back->floorpic; //tmfloorpic = back->floorpic;
} }
openrange = opentop - openbottom; openrange = opentop - openbottom;

View file

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

View file

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