mirror of
https://github.com/ZDoom/gzdoom-last-svn.git
synced 2025-05-31 09:21:06 +00:00
- Fixed dynamic light crash with respawning players.
Update to ZDoom r971: - Changed: For actors not being spawned on the floor P_FindFloorCeiling should be used to prevent them from dropping through 3DMIDTEX textures. - Fixed: AMageStaffFX2::IsOkayToAttack overwrote the projectile's angle variable. - Changed the types of object hash indices in FArchive from size_t to DWORD. This seems to fix crashes on GCC 64-bit builds when saving games. Not sure if it was a GCC bug or my bug, since it worked fine with VC++, but since the code that calculates the index only returns a DWORD, storing it as a size_t was rather pointless. - Added the C99 printf size specifiers 't' (ptrdiff_t) and 'z' (size_t) to FString::Format() so that I can fix all the problem printf strings that a 64-bit GCC compile finds. - Added Skulltag's PUFFGETSOWNER flag. - Fixed: Parsing sector special bit masks must be done backwards so that later definitions take precedence. - Added base translation tables for UDMF compatibility maps which only should handle the native line and sector types of each game. - Turned the inactive SILENT_INSTANT_FLOORS define into a compatibility option so that it can be (un)set in a map definition and the menu. git-svn-id: http://mancubus.net/svn/hosted/gzdoom/trunk@105 b0f79afe-0144-0410-b225-9a4edf0717df
This commit is contained in:
parent
8af1af3d08
commit
1f492784df
45 changed files with 373 additions and 158 deletions
|
@ -1,3 +1,85 @@
|
|||
May 13, 2008 (Changes by Graf Zahl)
|
||||
- Changed: For actors not being spawned on the floor P_FindFloorCeiling should
|
||||
be used to prevent them from dropping through 3DMIDTEX textures.
|
||||
- Fixed: AMageStaffFX2::IsOkayToAttack overwrote the projectile's angle variable.
|
||||
|
||||
May 13, 2008
|
||||
- Changed the types of object hash indices in FArchive from size_t to DWORD.
|
||||
This seems to fix crashes on GCC 64-bit builds when saving games. Not sure
|
||||
if it was a GCC bug or my bug, since it worked fine with VC++, but since the
|
||||
code that calculates the index only returns a DWORD, storing it as a size_t
|
||||
was rather pointless.
|
||||
- Added the C99 printf size specifiers 't' (ptrdiff_t) and 'z' (size_t) to
|
||||
FString::Format() so that I can fix all the problem printf strings that a
|
||||
64-bit GCC compile finds.
|
||||
|
||||
May 12, 2008 (Changes by Graf Zahl)
|
||||
- Added Skulltag's PUFFGETSOWNER flag.
|
||||
- Fixed: Parsing sector special bit masks must be done backwards so that later
|
||||
definitions take precedence.
|
||||
- Added base translation tables for UDMF compatibility maps which only should
|
||||
handle the native line and sector types of each game.
|
||||
- Turned the inactive SILENT_INSTANT_FLOORS define into a compatibility option
|
||||
so that it can be (un)set in a map definition and the menu.
|
||||
- Fixed: SPAC_AnyCross didn't work.
|
||||
- Fixed: Pushable doors must also check for SPAC_MPush.
|
||||
- Fixed: P_LoadThings2 did not adjust the byte order for the thingid field.
|
||||
|
||||
May 11, 2008 (Changes by Graf Zahl)
|
||||
- Changed: HIRESTEX 'define' textures now replace existing textures
|
||||
of type MiscPatch with the same name.
|
||||
- Added UDMF line trigger types MonsterUse and MonsterPush.
|
||||
- Separated skill and class filter bits from FMapThing::flags so that
|
||||
UDMF can define up to 16 of each. Also separated easy/baby and
|
||||
hard/nightmare and changed default MAPINFO definitions.
|
||||
|
||||
May 10, 2008
|
||||
- Fixed: FWadCollection::MergeLumps() did not initialize the flags for any
|
||||
marker lumps it inserted.
|
||||
- Fixed: Need write barriers when modifying SequenceListHead.
|
||||
|
||||
May 9, 2008
|
||||
- Added a new cvar: midi_timiditylike. This re-enables TiMidity handling of
|
||||
GUS patch flags, envelopes, and volume levels, while trying to be closer
|
||||
to TiMidity++ than original TiMidity.
|
||||
- Renamed timidity_config and timidity_voices to midi_config and midi_voices
|
||||
respectively.
|
||||
|
||||
May 9, 2008 (Changes by Graf Zahl)
|
||||
- Changed: Crosshair drawing uses the current player class's default health instead
|
||||
of 100 to calculate the color for the crosshair.
|
||||
- Added SECF_NOFALLINGDAMAGE flag plus Sector_ChangeFlags to set it. Also separated
|
||||
all user settable flags from MoreFlags into their own Flags variable.
|
||||
|
||||
May 8, 2008
|
||||
- Reduced volume, expression, and panning controllers back to 7 bits.
|
||||
- Added very basic Soundfont support to the internal TiMidity. Things missing:
|
||||
filter, LFOs, modulation envelope, chorus, reverb, and modulators. May or
|
||||
may not be compatible with TiMidity++'s soundfont extensions.
|
||||
|
||||
May 8, 2008 (Changes by Graf Zahl)
|
||||
- Changed all thing coordinates that were stored as shorts into fixed_t.
|
||||
- Separated mapthing2_t into mapthinghexen_t and the internal FMapThing so
|
||||
that it is easier to add new features in the UDMF map format.
|
||||
- Added some initial code to read UDMF maps.
|
||||
|
||||
May 6, 2008
|
||||
- Added support for quoted strings to the TiMidity config parser.
|
||||
|
||||
May 2, 2008 (Changes by Graf Zahl)
|
||||
- Split off the slope creation code from p_Setup.cpp into its own file.
|
||||
- Separated the linedef activation types into a bit mask that allows combination
|
||||
of all types on the same linedef. Also added a 'first side only' flag. This
|
||||
is not usable from Hexen or Doom format maps though but in preparation of
|
||||
the UDMF format discussed here:
|
||||
http://www.doomworld.com/vb/source-ports/43145-udmf-v0-99-specification-draft-aka-textmap/
|
||||
- Changed linedef's alpha property from a byte to fixed point after seeing that
|
||||
255 wasn't handled to be fully opaque.
|
||||
- fixed a GCC warning in fmodsound.cpp
|
||||
|
||||
April 30, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: Warped textures didn't work anymore because the default speed was 0.
|
||||
|
||||
April 30, 2008
|
||||
- Fixed: I had instrument vibrato setting the tremolo_sweep_increment value
|
||||
in the instrument loader, effectively disabling vibrato.
|
||||
|
@ -205,7 +287,7 @@ April 15, 2008 (Changes by Graf Zahl)
|
|||
check being done manually.
|
||||
|
||||
April 14, 2008 (Changes by Graf Zahl)
|
||||
- Added rotation 90° angles only) and mirroring to the Multipatch texture
|
||||
- Added rotation 90<EFBFBD> angles only) and mirroring to the Multipatch texture
|
||||
composition code.
|
||||
- Fixed: The game crashed when a level was ended while a player was morphed
|
||||
by a powerup.
|
||||
|
@ -5409,7 +5491,7 @@ April 22, 2006 (Changes by Graf Zahl)
|
|||
- Fixed the issues with .96x's railgun code and added it to the current
|
||||
version.
|
||||
- Fixed: Setting of the friendly Minotaur's angle was inconsistent and
|
||||
could cause it to move backwards in a féw situation.
|
||||
could cause it to move backwards in a f<EFBFBD>w situation.
|
||||
- Fixed: The minotaur did checks for type by checking for the MF_FRIENDLY
|
||||
flag, not by checking for the actor class. That made it impossible to
|
||||
spawn friendly 'normal' minotaurs.
|
||||
|
@ -16375,7 +16457,7 @@ September 12, 1998
|
|||
|
||||
September 4, 1998
|
||||
- Added weapnext and weapprev commands courtesy of
|
||||
Papst Johannes Jörg IV. [which were later completely
|
||||
Papst Johannes J<EFBFBD>rg IV. [which were later completely
|
||||
rewritten by me]
|
||||
- Add support for suspending and resuming scripts (easy when
|
||||
you know you can only have one copy running at a time).
|
||||
|
|
|
@ -301,6 +301,7 @@ enum
|
|||
MF5_NOINFIGHTING = 0x00100000, // This actor doesn't switch target when it's hurt
|
||||
MF5_NOINTERACTION = 0x00200000, // Thing is completely excluded from any gameplay related checks
|
||||
MF5_NOTIMEFREEZE = 0x00400000, // Actor is not affected by time freezer
|
||||
MF5_PUFFGETSOWNER = 0x00800000, // [BB] Sets the owner of the puff to the player who fired it
|
||||
|
||||
// --- mobj.renderflags ---
|
||||
|
||||
|
|
|
@ -452,6 +452,7 @@ CVAR (Flag, compat_trace, compatflags, COMPATF_TRACE);
|
|||
CVAR (Flag, compat_dropoff, compatflags, COMPATF_DROPOFF);
|
||||
CVAR (Flag, compat_boomscroll, compatflags, COMPATF_BOOMSCROLL);
|
||||
CVAR (Flag, compat_invisibility,compatflags, COMPATF_INVISIBILITY);
|
||||
CVAR (Flag, compat_silentinstantfloors,compatflags, COMPATF_SILENT_INSTANT_FLOORS);
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
|
|
|
@ -644,7 +644,7 @@ ADD_STAT(gc)
|
|||
" Sweep ",
|
||||
"Finalize " };
|
||||
FString out;
|
||||
out.Format("[%s] Alloc:%6uK Thresh:%6uK Est:%6uK Steps: %d",
|
||||
out.Format("[%s] Alloc:%6zuK Thresh:%6zuK Est:%6zuK Steps: %d",
|
||||
StateStrings[GC::State],
|
||||
(GC::AllocBytes + 1023) >> 10,
|
||||
(GC::Threshold + 1023) >> 10,
|
||||
|
@ -652,7 +652,7 @@ ADD_STAT(gc)
|
|||
GC::StepCount);
|
||||
if (GC::State != GC::GCS_Pause)
|
||||
{
|
||||
out.AppendFormat(" %uK", (GC::Dept + 1023) >> 10);
|
||||
out.AppendFormat(" %zuK", (GC::Dept + 1023) >> 10);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ typedef struct
|
|||
} mapsidedef_t;
|
||||
|
||||
// A LineDef, as used for editing, and as input to the BSP builder.
|
||||
typedef struct
|
||||
struct maplinedef_t
|
||||
{
|
||||
WORD v1;
|
||||
WORD v2;
|
||||
|
@ -97,10 +97,10 @@ typedef struct
|
|||
short tag;
|
||||
WORD sidenum[2]; // sidenum[1] will be -1 if one sided
|
||||
|
||||
} maplinedef_t;
|
||||
} ;
|
||||
|
||||
// [RH] Hexen-compatible LineDef.
|
||||
typedef struct
|
||||
struct maplinedef2_t
|
||||
{
|
||||
WORD v1;
|
||||
WORD v2;
|
||||
|
@ -108,7 +108,7 @@ typedef struct
|
|||
BYTE special;
|
||||
BYTE args[5];
|
||||
WORD sidenum[2];
|
||||
} maplinedef2_t;
|
||||
} ;
|
||||
|
||||
|
||||
//
|
||||
|
|
|
@ -282,6 +282,7 @@ enum
|
|||
COMPATF_DROPOFF = 1 << 14, // Monsters cannot move when hanging over a dropoff
|
||||
COMPATF_BOOMSCROLL = 1 << 15, // Scrolling sectors are additive like in Boom
|
||||
COMPATF_INVISIBILITY = 1 << 16, // Monsters can see semi-invisible players
|
||||
COMPATF_SILENT_INSTANT_FLOORS = 1<<17, // Instantly moving floors are not silent
|
||||
};
|
||||
|
||||
// phares 3/20/98:
|
||||
|
|
|
@ -961,7 +961,7 @@ void F_BunnyScroll (void)
|
|||
laststage = stage;
|
||||
}
|
||||
|
||||
sprintf (name, "END%i", stage);
|
||||
sprintf (name, "END%d", (int)stage);
|
||||
screen->DrawTexture (TexMan(name), (320-13*8)/2, (200-8*8)/2, DTA_320x200, true, TAG_DONE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1459,12 +1459,12 @@ DWORD FArchive::HashObject (const DObject *obj) const
|
|||
|
||||
DWORD FArchive::FindObjectIndex (const DObject *obj) const
|
||||
{
|
||||
size_t index = m_ObjectHash[HashObject (obj)];
|
||||
DWORD index = m_ObjectHash[HashObject (obj)];
|
||||
while (index != TypeMap::NO_INDEX && m_ObjectMap[index].object != obj)
|
||||
{
|
||||
index = m_ObjectMap[index].hashNext;
|
||||
}
|
||||
return (DWORD)index;
|
||||
return index;
|
||||
}
|
||||
|
||||
void FArchive::UserWriteClass (const PClass *type)
|
||||
|
|
|
@ -237,9 +237,9 @@ protected:
|
|||
struct ObjectMap
|
||||
{
|
||||
const DObject *object;
|
||||
size_t hashNext;
|
||||
DWORD hashNext;
|
||||
} *m_ObjectMap;
|
||||
size_t m_ObjectHash[EObjectHashSize];
|
||||
DWORD m_ObjectHash[EObjectHashSize];
|
||||
|
||||
struct NameMap
|
||||
{
|
||||
|
|
|
@ -636,6 +636,7 @@ static bool RunScript(int snum, AActor * t_trigger)
|
|||
if(!script) return false;
|
||||
|
||||
DRunningScript *runscr = new DRunningScript(script, 0);
|
||||
runscr->trigger = t_trigger;
|
||||
// hook into chain at start
|
||||
th->AddRunningScript(runscr);
|
||||
return true;
|
||||
|
|
|
@ -321,7 +321,7 @@ bool AMageStaffFX2::IsOkayToAttack (AActor *link)
|
|||
else if (P_CheckSight (this, link))
|
||||
{
|
||||
AActor *master = target;
|
||||
angle = R_PointToAngle2 (master->x, master->y,
|
||||
angle_t angle = R_PointToAngle2 (master->x, master->y,
|
||||
link->x, link->y) - master->angle;
|
||||
angle >>= 24;
|
||||
if (angle>226 || angle<30)
|
||||
|
|
|
@ -296,6 +296,7 @@ static const char *MapInfoMapLevel[] =
|
|||
"compat_dropoff",
|
||||
"compat_boomscroll",
|
||||
"compat_invisibility",
|
||||
"compat_silent_instant_floors",
|
||||
"bordertexture",
|
||||
"f1", // [RC] F1 help
|
||||
"noinfighting",
|
||||
|
@ -446,6 +447,7 @@ MapHandlers[] =
|
|||
{ MITYPE_COMPATFLAG, COMPATF_DROPOFF},
|
||||
{ MITYPE_COMPATFLAG, COMPATF_BOOMSCROLL},
|
||||
{ MITYPE_COMPATFLAG, COMPATF_INVISIBILITY},
|
||||
{ MITYPE_COMPATFLAG, COMPATF_SILENT_INSTANT_FLOORS},
|
||||
{ MITYPE_LUMPNAME, lioffset(bordertexture), 0 },
|
||||
{ MITYPE_LUMPNAME, lioffset(f1), 0, },
|
||||
{ MITYPE_SCFLAGS, LEVEL_NOINFIGHTING, ~LEVEL_TOTALINFIGHTING },
|
||||
|
|
|
@ -128,7 +128,7 @@ void ASkyPicker::PostBeginPlay ()
|
|||
|
||||
if (box == NULL && args[0] != 0)
|
||||
{
|
||||
Printf ("Can't find SkyViewpoint %d for sector %d\n",
|
||||
Printf ("Can't find SkyViewpoint %d for sector %td\n",
|
||||
args[0], Sector - sectors);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -851,7 +851,7 @@ CCMD (addslot)
|
|||
|
||||
if (!LocalWeapons.Slots[slot].AddWeapon (argv[2]))
|
||||
{
|
||||
Printf ("Could not add %s to slot %d\n", argv[2], slot);
|
||||
Printf ("Could not add %s to slot %zu\n", argv[2], slot);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1034,6 +1034,16 @@ void gl_SetActorLights(AActor *actor)
|
|||
count++;
|
||||
}
|
||||
}
|
||||
// [BB] Under some circumstances dynamiclights contains NULL pointers, for
|
||||
// example after a player respawns in multiplayer. Since the following code
|
||||
// will crash in this case, I remove the NULL pointers from the array here.
|
||||
// Of course, this is just an ugly hack and should be fixed properly!
|
||||
// (assuming the real cause is found...)
|
||||
for( int i = actor->dynamiclights.Size()-1; i >= 0; i-- )
|
||||
{
|
||||
if ( actor->dynamiclights[i] == NULL )
|
||||
actor->dynamiclights.Delete(i);
|
||||
}
|
||||
for(;count<actor->dynamiclights.Size();count++)
|
||||
{
|
||||
actor->dynamiclights[count]->flags2|=MF2_DORMANT;
|
||||
|
|
|
@ -698,7 +698,7 @@ void gl_RenderHUDModel(pspdef_t *psp, fixed_t ofsx, fixed_t ofsy, int cm)
|
|||
|
||||
bool gl_IsHUDModelForPlayerAvailable (player_t * player)
|
||||
{
|
||||
if ( (player == NULL) || (player->ReadyWeapon == NULL) )
|
||||
if ( (player == NULL) || (player->ReadyWeapon == NULL) || (player->psprites[0].state == NULL) )
|
||||
return false;
|
||||
|
||||
FState* state = player->psprites[0].state;
|
||||
|
|
|
@ -50,7 +50,7 @@ void *M_Malloc(size_t size)
|
|||
void *block = malloc(size);
|
||||
|
||||
if (block == NULL)
|
||||
I_FatalError("Could not malloc %u bytes", size);
|
||||
I_FatalError("Could not malloc %zu bytes", size);
|
||||
|
||||
GC::AllocBytes += _msize(block);
|
||||
return block;
|
||||
|
@ -65,7 +65,7 @@ void *M_Realloc(void *memblock, size_t size)
|
|||
void *block = realloc(memblock, size);
|
||||
if (block == NULL)
|
||||
{
|
||||
I_FatalError("Could not realloc %u bytes", size);
|
||||
I_FatalError("Could not realloc %zu bytes", size);
|
||||
}
|
||||
GC::AllocBytes += _msize(block);
|
||||
return block;
|
||||
|
@ -80,7 +80,7 @@ void *M_Malloc_Dbg(size_t size, const char *file, int lineno)
|
|||
void *block = _malloc_dbg(size, _NORMAL_BLOCK, file, lineno);
|
||||
|
||||
if (block == NULL)
|
||||
I_FatalError("Could not malloc %u bytes", size);
|
||||
I_FatalError("Could not malloc %zu bytes", size);
|
||||
|
||||
GC::AllocBytes += _msize(block);
|
||||
return block;
|
||||
|
@ -95,7 +95,7 @@ void *M_Realloc_Dbg(void *memblock, size_t size, const char *file, int lineno)
|
|||
void *block = _realloc_dbg(memblock, size, _NORMAL_BLOCK, file, lineno);
|
||||
if (block == NULL)
|
||||
{
|
||||
I_FatalError("Could not realloc %u bytes", size);
|
||||
I_FatalError("Could not realloc %zu bytes", size);
|
||||
}
|
||||
GC::AllocBytes += _msize(block);
|
||||
return block;
|
||||
|
|
|
@ -1127,6 +1127,7 @@ static menuitem_t CompatibilityItems[] = {
|
|||
{ bitflag, "Monsters get stuck over dropoffs", {&compatflags}, {0}, {0}, {0}, {(value_t *)COMPATF_DROPOFF} },
|
||||
{ bitflag, "Monsters see invisible players", {&compatflags}, {0}, {0}, {0}, {(value_t *)COMPATF_INVISIBILITY} },
|
||||
{ bitflag, "Boom scrollers are additive", {&compatflags}, {0}, {0}, {0}, {(value_t *)COMPATF_BOOMSCROLL} },
|
||||
{ bitflag, "Inst. moving floors are not silent", {&compatflags}, {0}, {0}, {0}, {(value_t *)COMPATF_SILENT_INSTANT_FLOORS} },
|
||||
|
||||
{ discrete, "Interpolate monster movement", {&nomonsterinterpolation}, {2.0}, {0.0}, {0.0}, {NoYes} },
|
||||
};
|
||||
|
|
|
@ -751,7 +751,7 @@ void FNodeBuilder::SplitSegs (DWORD set, node_t &node, DWORD splitseg, DWORD &ou
|
|||
|
||||
if (seg->loopnum)
|
||||
{
|
||||
Printf (" Split seg %u (%d,%d)-(%d,%d) of sector %d in loop %d\n",
|
||||
Printf (" Split seg %u (%d,%d)-(%d,%d) of sector %td in loop %d\n",
|
||||
set,
|
||||
Vertices[seg->v1].x>>16, Vertices[seg->v1].y>>16,
|
||||
Vertices[seg->v2].x>>16, Vertices[seg->v2].y>>16,
|
||||
|
@ -991,7 +991,7 @@ void FNodeBuilder::PrintSet (int l, DWORD set)
|
|||
Printf ("set %d:\n", l);
|
||||
for (; set != DWORD_MAX; set = Segs[set].next)
|
||||
{
|
||||
Printf ("\t%u(%d):%d(%d,%d)-%d(%d,%d) ", set, Segs[set].frontsector-sectors,
|
||||
Printf ("\t%u(%td):%d(%d,%d)-%d(%d,%d) ", set, Segs[set].frontsector-sectors,
|
||||
Segs[set].v1,
|
||||
Vertices[Segs[set].v1].x>>16, Vertices[Segs[set].v1].y>>16,
|
||||
Segs[set].v2,
|
||||
|
|
|
@ -533,8 +533,6 @@ manual_floor:
|
|||
}
|
||||
|
||||
// Do not interpolate instant movement floors.
|
||||
// Note for ZDoomGL: Check to make sure that you update the sector
|
||||
// after the floor moves, because it hasn't actually moved yet.
|
||||
bool silent = false;
|
||||
|
||||
if ((floor->m_Direction>0 && floor->m_FloorDestDist>sec->floorplane.d) || // moving up but going down
|
||||
|
@ -542,18 +540,15 @@ manual_floor:
|
|||
(floor->m_Speed >= abs(sec->floorplane.d - floor->m_FloorDestDist))) // moving in one step
|
||||
{
|
||||
stopinterpolation (INTERP_SectorFloor, sec);
|
||||
|
||||
// [Graf Zahl]
|
||||
// Don't make sounds for instant movement hacks but make an exception for
|
||||
// switches that activate their own back side.
|
||||
// I'll leave the decision about this to somebody else. In many maps
|
||||
// it helps but there are some where this omits sounds that should be there.
|
||||
#ifdef SILENT_INSTANT_FLOORS
|
||||
if (floortype != DFloor::floorRaiseInstant && floortype != DFloor::floorLowerInstant)
|
||||
if (!(i_compatflags & COMPATF_SILENT_INSTANT_FLOORS))
|
||||
{
|
||||
if (!line || GET_SPAC(line->flags) != SPAC_USE || line->backsector!=sec)
|
||||
if (!line || !(line->activation & (SPAC_Use|SPAC_Push)) || line->backsector!=sec)
|
||||
silent = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (!silent) floor->StartFloorSound ();
|
||||
|
||||
|
|
|
@ -373,7 +373,7 @@ bool P_CheckSight (const AActor* t1, const AActor* t2, int flags=0);
|
|||
void P_ResetSightCounters (bool full);
|
||||
void P_UseLines (player_t* player);
|
||||
bool P_UsePuzzleItem (AActor *actor, int itemType);
|
||||
void P_FindFloorCeiling (AActor *actor);
|
||||
void P_FindFloorCeiling (AActor *actor, bool onlymidtex = false);
|
||||
|
||||
bool P_ChangeSector (sector_t* sector, int crunch, int amt, int floorOrCeil, bool isreset);
|
||||
|
||||
|
|
|
@ -164,7 +164,7 @@ static bool PIT_FindFloorCeiling (line_t *ld, const FBoundingBox &box, FCheckPos
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void P_FindFloorCeiling (AActor *actor)
|
||||
void P_FindFloorCeiling (AActor *actor, bool onlymidtex)
|
||||
{
|
||||
sector_t *sec;
|
||||
FCheckPosition tmf;
|
||||
|
@ -195,13 +195,16 @@ void P_FindFloorCeiling (AActor *actor)
|
|||
|
||||
if (tmf.touchmidtex) tmf.dropoffz = tmf.floorz;
|
||||
|
||||
actor->floorz = tmf.floorz;
|
||||
actor->dropoffz = tmf.dropoffz;
|
||||
actor->ceilingz = tmf.ceilingz;
|
||||
actor->floorpic = tmf.floorpic;
|
||||
actor->floorsector = tmf.floorsector;
|
||||
actor->ceilingpic = tmf.ceilingpic;
|
||||
actor->ceilingsector = tmf.ceilingsector;
|
||||
if (!onlymidtex || (tmf.touchmidtex && (tmf.floorz < actor->z)))
|
||||
{
|
||||
actor->floorz = tmf.floorz;
|
||||
actor->dropoffz = tmf.dropoffz;
|
||||
actor->ceilingz = tmf.ceilingz;
|
||||
actor->floorpic = tmf.floorpic;
|
||||
actor->floorsector = tmf.floorsector;
|
||||
actor->ceilingpic = tmf.ceilingpic;
|
||||
actor->ceilingsector = tmf.ceilingsector;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -3035,6 +3038,9 @@ AActor *P_LineAttack (AActor *t1, angle_t angle, fixed_t distance,
|
|||
puff->Destroy();
|
||||
puff = NULL;
|
||||
}
|
||||
// [BB] If the puff came from a player, set the target of the puff to this player.
|
||||
if ( puff && (puff->flags5 & MF5_PUFFGETSOWNER) && t1 && t1->player )
|
||||
puff->target = t1;
|
||||
return puff;
|
||||
}
|
||||
|
||||
|
|
|
@ -529,7 +529,7 @@ sector_t *AActor::LinkToWorldForMapThing ()
|
|||
|
||||
if (distance < radius)
|
||||
{
|
||||
DPrintf ("%s at (%d,%d) lies on %s line %d, distance = %f\n",
|
||||
DPrintf ("%s at (%d,%d) lies on %s line %td, distance = %f\n",
|
||||
this->GetClass()->TypeName.GetChars(), x>>FRACBITS, y>>FRACBITS,
|
||||
ldef->dx == 0? "vertical" : ldef->dy == 0? "horizontal" : "diagonal",
|
||||
ldef-lines, FIXED2FLOAT(distance));
|
||||
|
|
|
@ -503,7 +503,7 @@ int AActor::GetTics(FState * newstate)
|
|||
bool AActor::SetState (FState *newstate)
|
||||
{
|
||||
if (debugfile && player && (player->cheats & CF_PREDICTING))
|
||||
fprintf (debugfile, "for pl %d: SetState while predicting!\n", player-players);
|
||||
fprintf (debugfile, "for pl %td: SetState while predicting!\n", player-players);
|
||||
do
|
||||
{
|
||||
if (newstate == NULL)
|
||||
|
@ -3350,6 +3350,9 @@ AActor *AActor::StaticSpawn (const PClass *type, fixed_t ix, fixed_t iy, fixed_t
|
|||
actor->floorpic = actor->floorsector->floorpic;
|
||||
actor->ceilingsector = actor->Sector;
|
||||
actor->ceilingpic = actor->ceilingsector->ceilingpic;
|
||||
// Check if there's something solid to stand on between the current position and the
|
||||
// current sector's floor.
|
||||
P_FindFloorCeiling(actor, true);
|
||||
}
|
||||
else if (!(actor->flags5 & MF5_NOINTERACTION))
|
||||
{
|
||||
|
|
|
@ -71,10 +71,7 @@ void P_SetSlopes ();
|
|||
extern AActor *P_SpawnMapThing (FMapThing *mthing, int position);
|
||||
extern bool P_LoadBuildMap (BYTE *mapdata, size_t len, FMapThing **things, int *numthings);
|
||||
|
||||
extern void P_LoadTranslator(const char *lump);
|
||||
extern void P_TranslateLineDef (line_t *ld, maplinedef_t *mld);
|
||||
extern void P_TranslateTeleportThings (void);
|
||||
extern int P_TranslateSectorSpecial (int);
|
||||
|
||||
void P_ParseTextMap(MapData *map);
|
||||
void P_SpawnTextThings(int position);
|
||||
|
|
|
@ -99,4 +99,11 @@ void P_FreeExtraLevelData();
|
|||
// Called by startup code.
|
||||
void P_Init (void);
|
||||
|
||||
struct line_t;
|
||||
struct maplinedef_t;
|
||||
|
||||
void P_LoadTranslator(const char *lumpname);
|
||||
void P_TranslateLineDef (line_t *ld, maplinedef_t *mld);
|
||||
int P_TranslateSectorSpecial (int);
|
||||
|
||||
#endif
|
||||
|
|
195
src/p_udmf.cpp
195
src/p_udmf.cpp
|
@ -41,8 +41,6 @@
|
|||
#include "templates.h"
|
||||
#include "i_system.h"
|
||||
|
||||
extern void P_TranslateLineDef (line_t *ld, maplinedef_t *mld);
|
||||
extern int P_TranslateSectorSpecial (int);
|
||||
void P_ProcessSideTextures(bool checktranmap, side_t *sd, sector_t *sec, mapsidedef_t *msd, int special, int tag, short *alpha);
|
||||
void P_AdjustLine (line_t *ld);
|
||||
void P_FinishLoadingLineDef(line_t *ld, int alpha);
|
||||
|
@ -193,16 +191,25 @@ struct UDMFParser
|
|||
}
|
||||
if (isTranslated)
|
||||
{
|
||||
// NOTE: Handling of this is undefined in the UDMF spec yet!
|
||||
maplinedef_t mld;
|
||||
line_t ld;
|
||||
if (isExtended)
|
||||
{
|
||||
// NOTE: Handling of this is undefined in the UDMF spec
|
||||
// so it is only done for namespace ZDoomTranslated
|
||||
maplinedef_t mld;
|
||||
line_t ld;
|
||||
|
||||
mld.flags = 0;
|
||||
mld.special = th->special;
|
||||
mld.tag = th->args[0];
|
||||
P_TranslateLineDef(&ld, &mld);
|
||||
th->special = ld.special;
|
||||
memcpy(th->args, ld.args, sizeof (ld.args));
|
||||
mld.flags = 0;
|
||||
mld.special = th->special;
|
||||
mld.tag = th->args[0];
|
||||
P_TranslateLineDef(&ld, &mld);
|
||||
th->special = ld.special;
|
||||
memcpy(th->args, ld.args, sizeof (ld.args));
|
||||
}
|
||||
else // NULL the special
|
||||
{
|
||||
th->special = 0;
|
||||
memset(th->args, 0, sizeof (th->args));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -226,6 +233,8 @@ struct UDMFParser
|
|||
sc.MustGetString();
|
||||
FString value = sc.String;
|
||||
sc.MustGetStringName(";");
|
||||
|
||||
// This switch contains all keys of the UDMF base spec
|
||||
switch(key)
|
||||
{
|
||||
case NAME_V1:
|
||||
|
@ -273,55 +282,65 @@ struct UDMFParser
|
|||
Flag(ld->flags, ML_MAPPED, value); break;
|
||||
case NAME_Monsteractivate:
|
||||
Flag(ld->flags, ML_MONSTERSCANACTIVATE, value); break;
|
||||
case NAME_Blockplayers:
|
||||
if (isExtended) Flag(ld->flags, ML_BLOCK_PLAYERS, value); break;
|
||||
case NAME_Blockeverything:
|
||||
if (isExtended) Flag(ld->flags, ML_BLOCKEVERYTHING, value); break;
|
||||
case NAME_Zoneboundary:
|
||||
if (isExtended) Flag(ld->flags, ML_ZONEBOUNDARY, value); break;
|
||||
case NAME_Jumpover:
|
||||
if (isExtended || namespc == NAME_Strife) Flag(ld->flags, ML_RAILING, value); break;
|
||||
Flag(ld->flags, ML_RAILING, value); break;
|
||||
case NAME_Blockfloating:
|
||||
if (isExtended || namespc == NAME_Strife) Flag(ld->flags, ML_BLOCK_FLOATERS, value); break;
|
||||
case NAME_Clipmidtex:
|
||||
if (isExtended) Flag(ld->flags, ML_CLIP_MIDTEX, value); break;
|
||||
case NAME_Wrapmidtex:
|
||||
if (isExtended) Flag(ld->flags, ML_WRAP_MIDTEX, value); break;
|
||||
case NAME_Midtex3d:
|
||||
if (isExtended) Flag(ld->flags, ML_3DMIDTEX, value); break;
|
||||
case NAME_Checkswitchrange:
|
||||
if (isExtended) Flag(ld->flags, ML_CHECKSWITCHRANGE, value); break;
|
||||
case NAME_Firstsideonly:
|
||||
if (isExtended) Flag(ld->flags, ML_FIRSTSIDEONLY, value); break;
|
||||
Flag(ld->flags, ML_BLOCK_FLOATERS, value); break;
|
||||
case NAME_Transparent:
|
||||
ld->Alpha = !value.CompareNoCase("true")? FRACUNIT*3/4 : FRACUNIT; break;
|
||||
case NAME_Passuse:
|
||||
passuse = !value.CompareNoCase("true");
|
||||
case NAME_Playercross:
|
||||
if (isExtended) Flag(ld->activation, SPAC_Cross, value); break;
|
||||
case NAME_Playeruse:
|
||||
if (isExtended) Flag(ld->activation, SPAC_Use, value); break;
|
||||
case NAME_Monstercross:
|
||||
if (isExtended) Flag(ld->activation, SPAC_MCross, value); break;
|
||||
case NAME_Impact:
|
||||
if (isExtended) Flag(ld->activation, SPAC_Impact, value); break;
|
||||
case NAME_Playerpush:
|
||||
if (isExtended) Flag(ld->activation, SPAC_Push, value); break;
|
||||
case NAME_Missilecross:
|
||||
if (isExtended) Flag(ld->activation, SPAC_PCross, value); break;
|
||||
case NAME_Monsteruse:
|
||||
if (isExtended) Flag(ld->activation, SPAC_MUse, value); break;
|
||||
case NAME_Monsterpush:
|
||||
if (isExtended) Flag(ld->activation, SPAC_MPush, value); break;
|
||||
passuse = !value.CompareNoCase("true"); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// This switch contains all keys of the UDMF base spec which only apply to Hexen format specials
|
||||
if (!isTranslated) switch (key)
|
||||
{
|
||||
case NAME_Playercross:
|
||||
Flag(ld->activation, SPAC_Cross, value); break;
|
||||
case NAME_Playeruse:
|
||||
Flag(ld->activation, SPAC_Use, value); break;
|
||||
case NAME_Monstercross:
|
||||
Flag(ld->activation, SPAC_MCross, value); break;
|
||||
case NAME_Impact:
|
||||
Flag(ld->activation, SPAC_Impact, value); break;
|
||||
case NAME_Playerpush:
|
||||
Flag(ld->activation, SPAC_Push, value); break;
|
||||
case NAME_Missilecross:
|
||||
Flag(ld->activation, SPAC_PCross, value); break;
|
||||
case NAME_Monsteruse:
|
||||
Flag(ld->activation, SPAC_MUse, value); break;
|
||||
case NAME_Monsterpush:
|
||||
Flag(ld->activation, SPAC_MPush, value); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// This switch contains all keys which are ZDoom specific
|
||||
if (isExtended) switch(key)
|
||||
{
|
||||
case NAME_Blockplayers:
|
||||
Flag(ld->flags, ML_BLOCK_PLAYERS, value); break;
|
||||
case NAME_Blockeverything:
|
||||
Flag(ld->flags, ML_BLOCKEVERYTHING, value); break;
|
||||
case NAME_Zoneboundary:
|
||||
Flag(ld->flags, ML_ZONEBOUNDARY, value); break;
|
||||
case NAME_Clipmidtex:
|
||||
Flag(ld->flags, ML_CLIP_MIDTEX, value); break;
|
||||
case NAME_Wrapmidtex:
|
||||
Flag(ld->flags, ML_WRAP_MIDTEX, value); break;
|
||||
case NAME_Midtex3d:
|
||||
Flag(ld->flags, ML_3DMIDTEX, value); break;
|
||||
case NAME_Checkswitchrange:
|
||||
Flag(ld->flags, ML_CHECKSWITCHRANGE, value); break;
|
||||
case NAME_Firstsideonly:
|
||||
Flag(ld->flags, ML_FIRSTSIDEONLY, value); break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isTranslated)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
int saved = ld->flags;
|
||||
|
||||
|
@ -523,7 +542,7 @@ struct UDMFParser
|
|||
|
||||
if (v1i >= numvertexes || v2i >= numvertexes || v1i < 0 || v2i < 0)
|
||||
{
|
||||
I_Error ("Line %d has invalid vertices: %d and/or %d.\nThe map only contains %d vertices.", i+skipped, v1i, v2i, numvertexes);
|
||||
I_Error ("Line %d has invalid vertices: %zd and/or %zd.\nThe map only contains %d vertices.", i+skipped, v1i, v2i, numvertexes);
|
||||
}
|
||||
else if (v1i == v2i ||
|
||||
(vertexes[v1i].x == vertexes[v2i].x && vertexes[v1i].y == vertexes[v2i].y))
|
||||
|
@ -589,42 +608,50 @@ struct UDMFParser
|
|||
map->Read(ML_TEXTMAP, buffer);
|
||||
sc.OpenMem(Wads.GetLumpFullName(map->lumpnum), buffer, map->Size(ML_TEXTMAP));
|
||||
sc.SetCMode(true);
|
||||
if (sc.CheckString("namespace"))
|
||||
{
|
||||
sc.MustGetStringName("=");
|
||||
sc.MustGetString();
|
||||
namespc = sc.String;
|
||||
if (namespc == NAME_ZDoom)
|
||||
{
|
||||
isTranslated = false;
|
||||
isExtended = true;
|
||||
}
|
||||
else if (namespc == NAME_Hexen)
|
||||
{
|
||||
isTranslated = false;
|
||||
}
|
||||
else if (namespc == NAME_ZDoomTranslated)
|
||||
{
|
||||
isExtended = true;
|
||||
}
|
||||
else if (namespc == NAME_Doom)
|
||||
{
|
||||
P_LoadTranslator("xlat/doom_base.txt");
|
||||
}
|
||||
else if (namespc == NAME_Heretic)
|
||||
{
|
||||
P_LoadTranslator("xlat/heretic_base.txt");
|
||||
}
|
||||
else if (namespc == NAME_Strife)
|
||||
{
|
||||
P_LoadTranslator("xlat/strife_base.txt");
|
||||
}
|
||||
else
|
||||
{
|
||||
Printf("Unknown namespace %s\n", sc.String);
|
||||
}
|
||||
sc.MustGetStringName(";");
|
||||
}
|
||||
else
|
||||
{
|
||||
Printf("Map does not define a namespace.\n");
|
||||
}
|
||||
|
||||
while (sc.GetString())
|
||||
{
|
||||
if (sc.Compare("namespace"))
|
||||
{
|
||||
sc.MustGetStringName("=");
|
||||
sc.MustGetString();
|
||||
namespc = sc.String;
|
||||
if (namespc == NAME_ZDoom)
|
||||
{
|
||||
isTranslated = false;
|
||||
isExtended = true;
|
||||
}
|
||||
else if (namespc == NAME_Hexen)
|
||||
{
|
||||
isTranslated = false;
|
||||
}
|
||||
else if (namespc == NAME_ZDoomTranslated)
|
||||
{
|
||||
isExtended = true;
|
||||
}
|
||||
else if (namespc == NAME_Doom)
|
||||
{
|
||||
}
|
||||
else if (namespc == NAME_Heretic)
|
||||
{
|
||||
}
|
||||
else if (namespc == NAME_Strife)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
sc.ScriptError("Unknown namespace %s", sc.String);
|
||||
}
|
||||
sc.MustGetStringName(";");
|
||||
}
|
||||
else if (sc.Compare("thing"))
|
||||
if (sc.Compare("thing"))
|
||||
{
|
||||
FMapThing th;
|
||||
ParseThing(&th);
|
||||
|
|
|
@ -1645,13 +1645,13 @@ void P_MovePlayer (player_t *player)
|
|||
|
||||
if (debugfile)
|
||||
{
|
||||
fprintf (debugfile, "move player for pl %d%c: (%d,%d,%d) (%d,%d) %d %d w%d [", player-players,
|
||||
fprintf (debugfile, "move player for pl %d%c: (%d,%d,%d) (%d,%d) %d %d w%d [", int(player-players),
|
||||
player->cheats&CF_PREDICTING?'p':' ',
|
||||
player->mo->x, player->mo->y, player->mo->z,forwardmove, sidemove, movefactor, friction, player->mo->waterlevel);
|
||||
msecnode_t *n = player->mo->touching_sectorlist;
|
||||
while (n != NULL)
|
||||
{
|
||||
fprintf (debugfile, "%d ", n->m_sector-sectors);
|
||||
fprintf (debugfile, "%td ", n->m_sector-sectors);
|
||||
n = n->m_tnext;
|
||||
}
|
||||
fprintf (debugfile, "]\n");
|
||||
|
@ -1924,12 +1924,12 @@ void P_PlayerThink (player_t *player)
|
|||
|
||||
if (player->mo == NULL)
|
||||
{
|
||||
I_Error ("No player %d start\n", player - players + 1);
|
||||
I_Error ("No player %td start\n", player - players + 1);
|
||||
}
|
||||
|
||||
if (debugfile && !(player->cheats & CF_PREDICTING))
|
||||
{
|
||||
fprintf (debugfile, "tic %d for pl %d: (%d, %d, %d, %u) b:%02x p:%d y:%d f:%d s:%d u:%d\n",
|
||||
fprintf (debugfile, "tic %d for pl %td: (%d, %d, %d, %u) b:%02x p:%d y:%d f:%d s:%d u:%d\n",
|
||||
gametic, player-players, player->mo->x, player->mo->y, player->mo->z,
|
||||
player->mo->angle>>ANGLETOFINESHIFT, player->cmd.ucmd.buttons,
|
||||
player->cmd.ucmd.pitch, player->cmd.ucmd.yaw, player->cmd.ucmd.forwardmove,
|
||||
|
|
|
@ -337,7 +337,7 @@ int P_TranslateSectorSpecial (int special)
|
|||
{
|
||||
int mask = 0;
|
||||
|
||||
for(unsigned i = 0; i < SectorMasks.Size(); i++)
|
||||
for(int i = SectorMasks.Size()-1; i>=0; i--)
|
||||
{
|
||||
int newmask = special & SectorMasks[i].mask;
|
||||
if (newmask)
|
||||
|
|
|
@ -1048,7 +1048,7 @@ void R_Subsector (subsector_t *sub)
|
|||
|
||||
#ifdef RANGECHECK
|
||||
if (sub - subsectors >= (ptrdiff_t)numsubsectors)
|
||||
I_Error ("R_Subsector: ss %i with numss = %i", sub - subsectors, numsubsectors);
|
||||
I_Error ("R_Subsector: ss %ti with numss = %i", sub - subsectors, numsubsectors);
|
||||
#endif
|
||||
|
||||
frontsector = sub->sector;
|
||||
|
|
|
@ -1480,7 +1480,7 @@ void R_CheckDrawSegs ()
|
|||
firstdrawseg = drawsegs + firstofs;
|
||||
ds_p = drawsegs + MaxDrawSegs;
|
||||
MaxDrawSegs = newdrawsegs;
|
||||
DPrintf ("MaxDrawSegs increased to %d\n", MaxDrawSegs);
|
||||
DPrintf ("MaxDrawSegs increased to %zu\n", MaxDrawSegs);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1498,7 +1498,7 @@ void R_CheckOpenings (size_t need)
|
|||
maxopenings = maxopenings ? maxopenings*2 : 16384;
|
||||
while (need > maxopenings);
|
||||
openings = (short *)M_Realloc (openings, maxopenings * sizeof(*openings));
|
||||
DPrintf ("MaxOpenings increased to %u\n", maxopenings);
|
||||
DPrintf ("MaxOpenings increased to %zu\n", maxopenings);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -467,7 +467,7 @@ void R_InitSkins (void)
|
|||
strncpy (key, sc.String, sizeof(key)-1);
|
||||
if (!sc.GetString() || sc.String[0] != '=')
|
||||
{
|
||||
Printf (PRINT_BOLD, "Bad format for skin %d: %s\n", i, key);
|
||||
Printf (PRINT_BOLD, "Bad format for skin %d: %s\n", (int)i, key);
|
||||
break;
|
||||
}
|
||||
sc.GetString ();
|
||||
|
@ -478,7 +478,7 @@ void R_InitSkins (void)
|
|||
{
|
||||
if (stricmp (skins[i].name, skins[j].name) == 0)
|
||||
{
|
||||
sprintf (skins[i].name, "skin%d", i);
|
||||
sprintf (skins[i].name, "skin%d", (int)i);
|
||||
Printf (PRINT_BOLD, "Skin %s duplicated as %s\n",
|
||||
skins[j].name, skins[i].name);
|
||||
break;
|
||||
|
@ -659,7 +659,7 @@ void R_InitSkins (void)
|
|||
if (!remove)
|
||||
{
|
||||
if (skins[i].name[0] == 0)
|
||||
sprintf (skins[i].name, "skin%d", i);
|
||||
sprintf (skins[i].name, "skin%d", (int)i);
|
||||
|
||||
// Now collect the sprite frames for this skin. If the sprite name was not
|
||||
// specified, use whatever immediately follows the specifier lump.
|
||||
|
@ -710,7 +710,7 @@ void R_InitSkins (void)
|
|||
|
||||
if (spr == 0 && maxframe <= 0)
|
||||
{
|
||||
Printf (PRINT_BOLD, "Skin %s (#%d) has no frames. Removing.\n", skins[i].name, i);
|
||||
Printf (PRINT_BOLD, "Skin %s (#%d) has no frames. Removing.\n", skins[i].name, (int)i);
|
||||
remove = true;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1597,7 +1597,7 @@ void FMODSoundRenderer::LoadSound(sfxinfo_t *sfx)
|
|||
{
|
||||
if (sfx->data == NULL)
|
||||
{
|
||||
DPrintf("loading sound \"%s\" (%d)\n", sfx->name.GetChars(), sfx - &S_sfx[0]);
|
||||
DPrintf("Loading sound \"%s\" (%td)\n", sfx->name.GetChars(), sfx - &S_sfx[0]);
|
||||
getsfx(sfx);
|
||||
}
|
||||
}
|
||||
|
@ -1614,7 +1614,7 @@ void FMODSoundRenderer::UnloadSound(sfxinfo_t *sfx)
|
|||
{
|
||||
((FMOD::Sound *)sfx->data)->release();
|
||||
sfx->data = NULL;
|
||||
DPrintf("Unloaded sound \"%s\" (%d)\n", sfx->name.GetChars(), sfx - &S_sfx[0]);
|
||||
DPrintf("Unloaded sound \"%s\" (%td)\n", sfx->name.GetChars(), sfx - &S_sfx[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -58,9 +58,9 @@ inline cycle_t GetClockCycle ()
|
|||
#endif
|
||||
}
|
||||
|
||||
#elif defined(__GNUG__) && defined(__i386__)
|
||||
#elif defined(__GNUC__) && (defined(__i386__) || defined(__amd64__))
|
||||
|
||||
typedef QWORD cycle_t;
|
||||
typedef unsigned long long cycle_t;
|
||||
|
||||
inline cycle_t GetClockCycle()
|
||||
{
|
||||
|
@ -78,7 +78,7 @@ inline cycle_t GetClockCycle()
|
|||
|
||||
#else
|
||||
|
||||
typedef DWORD cycle_t;
|
||||
typedef QWORD cycle_t;
|
||||
|
||||
inline cycle_t GetClockCycle ()
|
||||
{
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
// This file was automatically generated by the
|
||||
// updaterevision tool. Do not edit by hand.
|
||||
|
||||
#define ZD_SVN_REVISION_STRING "964"
|
||||
#define ZD_SVN_REVISION_NUMBER 964
|
||||
#define ZD_SVN_REVISION_STRING "970"
|
||||
#define ZD_SVN_REVISION_NUMBER 970
|
||||
|
|
|
@ -240,6 +240,7 @@ static flagdef ActorFlags[]=
|
|||
DEFINE_FLAG(MF5, NOINFIGHTING, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, NOINTERACTION, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, NOTIMEFREEZE, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, PUFFGETSOWNER, AActor, flags5), // [BB] added PUFFGETSOWNER
|
||||
|
||||
// Effect flags
|
||||
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
|
||||
|
@ -255,6 +256,7 @@ static flagdef ActorFlags[]=
|
|||
DEFINE_DEPRECATED_FLAG(LOWGRAVITY),
|
||||
DEFINE_DEPRECATED_FLAG(SHORTMISSILERANGE),
|
||||
DEFINE_DEPRECATED_FLAG(LONGMELEERANGE),
|
||||
DEFINE_DUMMY_FLAG(NONETID),
|
||||
};
|
||||
|
||||
static flagdef InventoryFlags[] =
|
||||
|
|
|
@ -120,7 +120,7 @@ void *safe_malloc(size_t count)
|
|||
void *p;
|
||||
if (count > (1 << 21))
|
||||
{
|
||||
I_Error("Timidity: Tried allocating %u bytes. This must be a bug.", count);
|
||||
I_Error("Timidity: Tried allocating %zu bytes. This must be a bug.", count);
|
||||
}
|
||||
else if ((p = malloc(count)))
|
||||
{
|
||||
|
@ -128,7 +128,7 @@ void *safe_malloc(size_t count)
|
|||
}
|
||||
else
|
||||
{
|
||||
I_Error("Timidity: Couldn't malloc %u bytes.", count);
|
||||
I_Error("Timidity: Couldn't malloc %zu bytes.", count);
|
||||
}
|
||||
return 0; // Unreachable.
|
||||
}
|
||||
|
|
|
@ -278,7 +278,7 @@ static bool check_release(double RateMul, double sec)
|
|||
bool SF2Envelope::Update(Voice *v)
|
||||
{
|
||||
double sec;
|
||||
double newvolume;
|
||||
double newvolume = 0;
|
||||
|
||||
switch (stage)
|
||||
{
|
||||
|
|
|
@ -111,20 +111,20 @@ struct XlatParseContext : public FParseContext
|
|||
//==========================================================================
|
||||
bool FindToken (char *tok, int *type)
|
||||
{
|
||||
static const char tokens[][10] =
|
||||
static const char *tokens[] =
|
||||
{
|
||||
"arg2", "arg3", "arg4", "arg5", "bitmask", "clear",
|
||||
"define", "enum", "flags", "include", "lineid",
|
||||
"nobitmask", "sector", "tag"
|
||||
"nobitmask", "sector", "tag", "maxlinespecial"
|
||||
};
|
||||
static const short types[] =
|
||||
{
|
||||
XLAT_ARG2, XLAT_ARG3, XLAT_ARG4, XLAT_ARG5, XLAT_BITMASK, XLAT_CLEAR,
|
||||
XLAT_DEFINE, XLAT_ENUM, XLAT_FLAGS, XLAT_INCLUDE, XLAT_TAG,
|
||||
XLAT_NOBITMASK, XLAT_SECTOR, XLAT_TAG,
|
||||
XLAT_NOBITMASK, XLAT_SECTOR, XLAT_TAG, XLAT_MAXLINESPECIAL
|
||||
};
|
||||
|
||||
int min = 0, max = sizeof(tokens)/sizeof(tokens[0]) - 1;
|
||||
int min = 0, max = countof(tokens) - 1;
|
||||
|
||||
while (min <= max)
|
||||
{
|
||||
|
|
|
@ -18,6 +18,7 @@ external_declaration ::= linetype_declaration.
|
|||
external_declaration ::= boom_declaration.
|
||||
external_declaration ::= sector_declaration.
|
||||
external_declaration ::= sector_bitmask.
|
||||
external_declaration ::= maxlinespecial_def.
|
||||
external_declaration ::= NOP.
|
||||
|
||||
|
||||
|
@ -452,6 +453,19 @@ list_val(A) ::= exp(B) COLON exp(C).
|
|||
A.value = C;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// max line special
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
maxlinespecial_def ::= MAXLINESPECIAL EQUALS exp(mx) SEMICOLON.
|
||||
{
|
||||
// Just kill all specials higher than the max.
|
||||
// If the translator wants to redefine some later, just let it.s
|
||||
SimpleLineTranslations.Resize(mx+1);
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// sector types
|
||||
|
|
|
@ -218,6 +218,16 @@ namespace StringFormat
|
|||
flags |= F_BIGI;
|
||||
}
|
||||
}
|
||||
else if (*c == 't')
|
||||
{
|
||||
flags |= F_PTRDIFF;
|
||||
++c;
|
||||
}
|
||||
else if (*c == 'z')
|
||||
{
|
||||
flags |= F_SIZE;
|
||||
++c;
|
||||
}
|
||||
|
||||
base = c+1;
|
||||
|
||||
|
@ -278,7 +288,11 @@ namespace StringFormat
|
|||
}
|
||||
else
|
||||
{
|
||||
if (size == F_HALFHALF)
|
||||
if (size == 0)
|
||||
{
|
||||
intarg = va_arg (arglist, int);
|
||||
}
|
||||
else if (size == F_HALFHALF)
|
||||
{
|
||||
intarg = va_arg (arglist, int);
|
||||
intarg = (signed char)intarg;
|
||||
|
@ -302,6 +316,16 @@ namespace StringFormat
|
|||
{
|
||||
int64arg = va_arg (arglist, int64_t);
|
||||
}
|
||||
else if (size == F_PTRDIFF)
|
||||
{
|
||||
if (sizeof(ptrdiff_t) == sizeof(int)) intarg = va_arg (arglist, int);
|
||||
else { int64arg = va_arg (arglist, int64_t); size = F_LONGLONG; }
|
||||
}
|
||||
else if (size == F_SIZE)
|
||||
{
|
||||
if (sizeof(size_t) == sizeof(int)) intarg = va_arg (arglist, int);
|
||||
else { int64arg = va_arg (arglist, int64_t); size = F_LONGLONG; }
|
||||
}
|
||||
else
|
||||
{
|
||||
intarg = va_arg (arglist, int);
|
||||
|
|
|
@ -284,7 +284,9 @@ namespace StringFormat
|
|||
F_HALF = 0x2000, // h
|
||||
F_LONG = 0x3000, // l
|
||||
F_LONGLONG = 0x4000, // ll or I64
|
||||
F_BIGI = 0x5000 // I
|
||||
F_BIGI = 0x5000, // I
|
||||
F_PTRDIFF = 0x6000, // t
|
||||
F_SIZE = 0x7000, // z
|
||||
};
|
||||
typedef int (*OutputFunc)(void *data, const char *str, int len);
|
||||
|
||||
|
|
17
wadsrc/xlat/doom_base.txt
Normal file
17
wadsrc/xlat/doom_base.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
include "xlat/doom.txt"
|
||||
|
||||
maxlinespecial = 272;
|
||||
|
||||
|
||||
sector bitmask 0xffe0 clear;
|
||||
|
||||
sector 15 = 0;
|
||||
sector 17 = 0;
|
||||
sector 18 = 0;
|
||||
sector 19 = 0;
|
||||
sector 20 = 0;
|
||||
sector 21 = 0;
|
||||
sector 22 = 0;
|
||||
sector 23 = 0;
|
||||
sector 24 = 0;
|
||||
|
8
wadsrc/xlat/heretic_base.txt
Normal file
8
wadsrc/xlat/heretic_base.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
include "xlat/heretic.txt"
|
||||
|
||||
maxlinespecial = 107;
|
||||
|
||||
|
||||
sector bitmask 0xffc0 clear;
|
||||
|
||||
sector 17 = 0;
|
14
wadsrc/xlat/strife_base.txt
Normal file
14
wadsrc/xlat/strife_base.txt
Normal file
|
@ -0,0 +1,14 @@
|
|||
include "xlat/strife.txt"
|
||||
|
||||
maxlinespecial = 234;
|
||||
|
||||
sector bitmask 0xffe0 clear;
|
||||
|
||||
sector 19 = 0;
|
||||
sector 20 = 0;
|
||||
sector 21 = 0;
|
||||
sector 22 = 0;
|
||||
sector 23 = 0;
|
||||
sector 24 = 0;
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue