mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
- Fixed: When Heretic's Mace was replaced by a non-child class A_SpawnMace still
treated it as a mace and wrote into some undefined memory. - Fixed: A_BishopMissileWeave didn't initialize special2 for proper movement. - Added a speed parameter to A_SkullAttack. - Fixed: Black as first or only blood color didn't work. - Fixed: Sounds played in wi_stuff.cpp and f_finale.cpp need the CHAN_UI flag. - Fixed: Spawning a player could play the *gasp sound. - Fixed: SBARINFO's health display didn't scale to the proper maximum. - Added Skulltag's Teleport_NoStop action special. SVN r1074 (trunk)
This commit is contained in:
parent
a5c52d8371
commit
5dc42121b7
19 changed files with 143 additions and 84 deletions
|
@ -1,3 +1,17 @@
|
|||
July 19, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: When Heretic's Mace was replaced by a non-child class A_SpawnMace still
|
||||
treated it as a mace and wrote into some undefined memory.
|
||||
- Fixed: A_BishopMissileWeave didn't initialize special2 for proper movement.
|
||||
- Added a speed parameter to A_SkullAttack.
|
||||
- Fixed: Black as first or only blood color didn't work.
|
||||
- Fixed: Sounds played in wi_stuff.cpp and f_finale.cpp need the CHAN_UI flag.
|
||||
- Fixed: Spawning a player could play the *gasp sound.
|
||||
- Fixed: SBARINFO's health display didn't scale to the proper maximum.
|
||||
|
||||
July 18, 2008 (Changes by Graf Zahl)
|
||||
- Added const char &operator[] (unsigned int index) to FString class.
|
||||
- Added Skulltag's Teleport_NoStop action special.
|
||||
|
||||
July 15, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: Strife's EntityBoss didn't copy friendliness information to the
|
||||
sub-entities.
|
||||
|
|
|
@ -131,6 +131,7 @@ DEFINE_SPECIAL(Floor_Waggle, 138, 5, 5)
|
|||
DEFINE_SPECIAL(Thing_SpawnFacing, 139, 2, 4)
|
||||
DEFINE_SPECIAL(Sector_ChangeSound, 140, 2, 2)
|
||||
|
||||
DEFINE_SPECIAL(Teleport_NoStop, 154, 2, 3)
|
||||
// GZDoom/Vavoom specials
|
||||
// Although ZDoom doesn't support them it's better to have them defined so that
|
||||
// WADs using them somewhere can at least be started without aborting due
|
||||
|
|
|
@ -126,7 +126,7 @@ public:
|
|||
float BlueDamageFade;
|
||||
|
||||
bool UpdateWaterLevel (fixed_t oldz, bool splash);
|
||||
bool ResetAirSupply ();
|
||||
bool ResetAirSupply (bool playgasp = true);
|
||||
|
||||
int GetMaxHealth() const;
|
||||
};
|
||||
|
|
|
@ -620,7 +620,7 @@ void F_CastTicker (void)
|
|||
castnum = 0;
|
||||
if (castorder[castnum].info->SeeSound)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, castorder[castnum].info->SeeSound, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, castorder[castnum].info->SeeSound, 1, ATTN_NONE);
|
||||
}
|
||||
caststate = castorder[castnum].info->SeeState;
|
||||
// [RH] Skip monsters that have been hacked to no longer have attack states
|
||||
|
@ -655,7 +655,7 @@ void F_CastTicker (void)
|
|||
if (atkstates[i].match == caststate)
|
||||
{
|
||||
S_StopAllChannels ();
|
||||
S_Sound (CHAN_WEAPON, atkstates[i].sound, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_WEAPON | CHAN_UI, atkstates[i].sound, 1, ATTN_NONE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -732,11 +732,12 @@ bool F_CastResponder (event_t* ev)
|
|||
castattacking = false;
|
||||
if (castnum == 16)
|
||||
{
|
||||
S_Sound (players[consoleplayer].mo, CHAN_VOICE, "*death", 1, ATTN_NONE);
|
||||
int snd = S_FindSkinnedSound(players[consoleplayer].mo, "*death");
|
||||
if (snd != 0) S_Sound (CHAN_VOICE | CHAN_UI, snd, 1, ATTN_NONE);
|
||||
}
|
||||
else if (castorder[castnum].info->DeathSound)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, castorder[castnum].info->DeathSound, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, castorder[castnum].info->DeathSound, 1, ATTN_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -992,7 +993,7 @@ void F_BunnyScroll (void)
|
|||
stage = 6;
|
||||
if (stage > laststage)
|
||||
{
|
||||
S_Sound (CHAN_WEAPON, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_WEAPON | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
laststage = stage;
|
||||
}
|
||||
|
||||
|
@ -1074,28 +1075,28 @@ void F_AdvanceSlideshow ()
|
|||
// Macil's speech on map 3 about the Programmer.
|
||||
case 1:
|
||||
FinaleFlat = "SS2F1";
|
||||
S_Sound (CHAN_VOICE, "svox/mac10", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/mac10", 1, ATTN_NORM);
|
||||
FinalePart = 2;
|
||||
FinaleEndCount = 9 * TICRATE;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
FinaleFlat = "SS2F2";
|
||||
S_Sound (CHAN_VOICE, "svox/mac11", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/mac11", 1, ATTN_NORM);
|
||||
FinalePart = 3;
|
||||
FinaleEndCount = 10 * TICRATE;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
FinaleFlat = "SS2F3";
|
||||
S_Sound (CHAN_VOICE, "svox/mac12", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/mac12", 1, ATTN_NORM);
|
||||
FinalePart = 4;
|
||||
FinaleEndCount = 12 * TICRATE;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
FinaleFlat = "SS2F4";
|
||||
S_Sound (CHAN_VOICE, "svox/mac13", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/mac13", 1, ATTN_NORM);
|
||||
FinalePart = -99;
|
||||
FinaleEndCount = 17 * TICRATE;
|
||||
break;
|
||||
|
@ -1103,28 +1104,28 @@ void F_AdvanceSlideshow ()
|
|||
// Macil's speech on map 10 about the Sigil.
|
||||
case 5:
|
||||
FinaleFlat = "SS3F1";
|
||||
S_Sound (CHAN_VOICE, "svox/mac16", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/mac16", 1, ATTN_NORM);
|
||||
FinalePart = 6;
|
||||
FinaleEndCount = 10 * TICRATE;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
FinaleFlat = "SS3F2";
|
||||
S_Sound (CHAN_VOICE, "svox/mac17", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/mac17", 1, ATTN_NORM);
|
||||
FinalePart = 7;
|
||||
FinaleEndCount = 12 * TICRATE;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
FinaleFlat = "SS3F3";
|
||||
S_Sound (CHAN_VOICE, "svox/mac18", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/mac18", 1, ATTN_NORM);
|
||||
FinalePart = 8;
|
||||
FinaleEndCount = 12 * TICRATE;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
FinaleFlat = "SS3F4";
|
||||
S_Sound (CHAN_VOICE, "svox/mac19", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/mac19", 1, ATTN_NORM);
|
||||
FinaleEndCount = 11 * TICRATE;
|
||||
FinalePart = -99;
|
||||
break;
|
||||
|
@ -1133,21 +1134,21 @@ void F_AdvanceSlideshow ()
|
|||
case 10:
|
||||
FinaleFlat = "SS4F1";
|
||||
S_StartMusic ("D_HAPPY");
|
||||
S_Sound (CHAN_VOICE, "svox/rie01", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/rie01", 1, ATTN_NORM);
|
||||
FinaleEndCount = 13 * TICRATE;
|
||||
FinalePart = 11;
|
||||
break;
|
||||
|
||||
case 11:
|
||||
FinaleFlat = "SS4F2";
|
||||
S_Sound (CHAN_VOICE, "svox/bbx01", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/bbx01", 1, ATTN_NORM);
|
||||
FinaleEndCount = 11 * TICRATE;
|
||||
FinalePart = 12;
|
||||
break;
|
||||
|
||||
case 12:
|
||||
FinaleFlat = "SS4F3";
|
||||
S_Sound (CHAN_VOICE, "svox/bbx02", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/bbx02", 1, ATTN_NORM);
|
||||
FinaleEndCount = 14 * TICRATE;
|
||||
FinalePart = 13;
|
||||
break;
|
||||
|
@ -1162,21 +1163,21 @@ void F_AdvanceSlideshow ()
|
|||
case 14:
|
||||
S_StartMusic ("D_SAD");
|
||||
FinaleFlat = "SS5F1";
|
||||
S_Sound (CHAN_VOICE, "svox/ss501b", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/ss501b", 1, ATTN_NORM);
|
||||
FinalePart = 15;
|
||||
FinaleEndCount = 11 * TICRATE;
|
||||
break;
|
||||
|
||||
case 15:
|
||||
FinaleFlat = "SS5F2";
|
||||
S_Sound (CHAN_VOICE, "svox/ss502b", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/ss502b", 1, ATTN_NORM);
|
||||
FinalePart = 16;
|
||||
FinaleEndCount = 10 * TICRATE;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
FinaleFlat = "SS5F3";
|
||||
S_Sound (CHAN_VOICE, "svox/ss503b", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/ss503b", 1, ATTN_NORM);
|
||||
FinalePart = -1;
|
||||
FinaleEndCount = 11 * TICRATE;
|
||||
break;
|
||||
|
@ -1185,21 +1186,21 @@ void F_AdvanceSlideshow ()
|
|||
case 17:
|
||||
S_StartMusic ("D_END");
|
||||
FinaleFlat = "SS6F1";
|
||||
S_Sound (CHAN_VOICE, "svox/ss601a", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/ss601a", 1, ATTN_NORM);
|
||||
FinaleEndCount = 8 * TICRATE;
|
||||
FinalePart = 18;
|
||||
break;
|
||||
|
||||
case 18:
|
||||
FinaleFlat = "SS6F2";
|
||||
S_Sound (CHAN_VOICE, "svox/ss602a", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/ss602a", 1, ATTN_NORM);
|
||||
FinalePart = 19;
|
||||
FinaleEndCount = 8 * TICRATE;
|
||||
break;
|
||||
|
||||
case 19:
|
||||
FinaleFlat = "SS6F3";
|
||||
S_Sound (CHAN_VOICE, "svox/ss603a", 1, ATTN_NORM);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "svox/ss603a", 1, ATTN_NORM);
|
||||
FinalePart = -1;
|
||||
FinaleEndCount = 9 * TICRATE;
|
||||
break;
|
||||
|
|
|
@ -121,7 +121,7 @@ void A_Mushroom (AActor *actor)
|
|||
int i, j, n = actor->GetMissileDamage (0, 1);
|
||||
|
||||
const PClass *spawntype = NULL;
|
||||
int index = CheckIndex (1, NULL);
|
||||
int index = CheckIndex (2, NULL);
|
||||
if (index >= 0)
|
||||
{
|
||||
spawntype = PClass::FindClass((ENamedName)StateParameters[index]);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "gi.h"
|
||||
#include "gstrings.h"
|
||||
#include "a_action.h"
|
||||
#include "thingdef/thingdef.h"
|
||||
|
||||
FRandom pr_lost ("LostMissileRange");
|
||||
|
||||
|
@ -23,20 +24,29 @@ void A_SkullAttack (AActor *self)
|
|||
AActor *dest;
|
||||
angle_t an;
|
||||
int dist;
|
||||
int n;
|
||||
|
||||
if (!self->target)
|
||||
return;
|
||||
|
||||
int index = CheckIndex (1, NULL);
|
||||
if (index >= 0)
|
||||
{
|
||||
n = FLOAT2FIXED(EvalExpressionF (StateParameters[index], self));
|
||||
if (n == 0) n = SKULLSPEED;
|
||||
}
|
||||
else n = SKULLSPEED;
|
||||
|
||||
dest = self->target;
|
||||
self->flags |= MF_SKULLFLY;
|
||||
|
||||
S_Sound (self, CHAN_VOICE, self->AttackSound, 1, ATTN_NORM);
|
||||
A_FaceTarget (self);
|
||||
an = self->angle >> ANGLETOFINESHIFT;
|
||||
self->momx = FixedMul (SKULLSPEED, finecosine[an]);
|
||||
self->momy = FixedMul (SKULLSPEED, finesine[an]);
|
||||
self->momx = FixedMul (n, finecosine[an]);
|
||||
self->momy = FixedMul (n, finesine[an]);
|
||||
dist = P_AproxDistance (dest->x - self->x, dest->y - self->y);
|
||||
dist = dist / SKULLSPEED;
|
||||
dist = dist / n;
|
||||
|
||||
if (dist < 1)
|
||||
dist = 1;
|
||||
|
|
|
@ -1045,6 +1045,26 @@ IMPLEMENT_ACTOR (AMaceSpawner, Heretic, 2002, 0)
|
|||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
|
||||
|
||||
static bool RespawnMace (AActor *mace, AActor *FirstSpot, int NumMaceSpots)
|
||||
{
|
||||
if (NumMaceSpots > 0)
|
||||
{
|
||||
int spotnum = pr_macerespawn () % NumMaceSpots;
|
||||
AActor *spot = FirstSpot;
|
||||
|
||||
while (spotnum > 0)
|
||||
{
|
||||
spot = spot->target;
|
||||
spotnum--;
|
||||
}
|
||||
|
||||
mace->SetOrigin (spot->x, spot->y, spot->z);
|
||||
mace->z = mace->floorz;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Every mace spawn spot will execute this action. The first one
|
||||
// will build a list of all mace spots in the level and spawn a
|
||||
// mace. The rest of the spots will do nothing.
|
||||
|
@ -1086,11 +1106,17 @@ void A_SpawnMace (AActor *self)
|
|||
return;
|
||||
}
|
||||
mace = Spawn<AMace> (self->x, self->y, self->z, ALLOW_REPLACE);
|
||||
|
||||
if (mace)
|
||||
{
|
||||
if (mace->IsKindOf(RUNTIME_CLASS(AMace)))
|
||||
{
|
||||
// remember the values for later
|
||||
// (works only for the original mace!)
|
||||
mace->FirstSpot = firstSpot;
|
||||
mace->NumMaceSpots = numspots;
|
||||
mace->DoRespawn ();
|
||||
}
|
||||
RespawnMace(mace, firstSpot, numspots);
|
||||
// We want this mace to respawn.
|
||||
mace->flags &= ~MF_DROPPED;
|
||||
}
|
||||
|
@ -1101,21 +1127,7 @@ void A_SpawnMace (AActor *self)
|
|||
|
||||
bool AMace::DoRespawn ()
|
||||
{
|
||||
if (NumMaceSpots > 0)
|
||||
{
|
||||
int spotnum = pr_macerespawn () % NumMaceSpots;
|
||||
AActor *spot = FirstSpot;
|
||||
|
||||
while (spotnum > 0)
|
||||
{
|
||||
spot = spot->target;
|
||||
spotnum--;
|
||||
}
|
||||
|
||||
SetOrigin (spot->x, spot->y, spot->z);
|
||||
z = floorz;
|
||||
}
|
||||
return true;
|
||||
return RespawnMace(this, FirstSpot, NumMaceSpots);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
|
@ -285,6 +285,8 @@ void A_BishopMissileWeave (AActor *actor)
|
|||
int weaveXY, weaveZ;
|
||||
int angle;
|
||||
|
||||
if (actor->special2 == 0) actor->special2 = 16;
|
||||
|
||||
weaveXY = actor->special2 >> 16;
|
||||
weaveZ = actor->special2 & 0xFFFF;
|
||||
angle = (actor->angle + ANG90) >> ANGLETOFINESHIFT;
|
||||
|
|
|
@ -698,7 +698,7 @@ void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int a
|
|||
}
|
||||
else //default to the class's health
|
||||
{
|
||||
max = CPlayer->mo->GetDefault()->health;
|
||||
max = CPlayer->mo->GetMaxHealth() + CPlayer->stamina;
|
||||
}
|
||||
}
|
||||
else if(cmd.flags == DRAWNUMBER_ARMOR)
|
||||
|
@ -938,7 +938,7 @@ void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int a
|
|||
case SBARINFO_DRAWGEM:
|
||||
{
|
||||
int value = (cmd.flags & DRAWGEM_ARMOR) ? armorAmount : health;
|
||||
int max = 100;
|
||||
int max = (cmd.flags & DRAWGEM_ARMOR) ? 100 : CPlayer->mo->GetMaxHealth() + CPlayer->stamina;
|
||||
bool wiggle = false;
|
||||
bool translate = !!(cmd.flags & DRAWGEM_TRANSLATABLE);
|
||||
if(max != 0 || value < 0)
|
||||
|
|
|
@ -784,6 +784,12 @@ FUNC(LS_Teleport)
|
|||
return EV_Teleport (arg0, arg1, ln, backSide, it, true, !arg2, false);
|
||||
}
|
||||
|
||||
FUNC( LS_Teleport_NoStop )
|
||||
// Teleport_NoStop (tid, sectortag, bNoSourceFog)
|
||||
{
|
||||
return EV_Teleport( arg0, arg1, ln, backSide, it, true, !arg2, false, false );
|
||||
}
|
||||
|
||||
FUNC(LS_Teleport_NoFog)
|
||||
// Teleport_NoFog (tid, useang, sectortag)
|
||||
{
|
||||
|
|
|
@ -3611,7 +3611,7 @@ APlayerPawn *P_SpawnPlayer (FMapThing *mthing, bool tempplayer)
|
|||
p->multicount = 0;
|
||||
p->lastkilltime = 0;
|
||||
p->BlendR = p->BlendG = p->BlendB = p->BlendA = 0.f;
|
||||
p->mo->ResetAirSupply();
|
||||
p->mo->ResetAirSupply(false);
|
||||
p->Uncrouch();
|
||||
|
||||
p->momx = p->momy = 0; // killough 10/98: initialize bobbing to 0.
|
||||
|
|
|
@ -957,8 +957,8 @@ bool EV_DoChange (line_t *line, EChange changetype, int tag);
|
|||
//
|
||||
// P_TELEPT
|
||||
//
|
||||
bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle, bool useFog, bool sourceFog, bool keepOrientation);
|
||||
bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, bool fog, bool sourceFog, bool keepOrientation);
|
||||
bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle, bool useFog, bool sourceFog, bool keepOrientation, bool haltMomentum = true);
|
||||
bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, bool fog, bool sourceFog, bool keepOrientation, bool haltMomentum = true);
|
||||
bool EV_SilentLineTeleport (line_t *line, int side, AActor *thing, int id, INTBOOL reverse);
|
||||
bool EV_TeleportOther (int other_tid, int dest_tid, bool fog);
|
||||
bool EV_TeleportGroup (int group_tid, AActor *victim, int source_tid, int dest_tid, bool moveSource, bool fog);
|
||||
|
|
|
@ -207,7 +207,7 @@ void P_SpawnTeleportFog(fixed_t x, fixed_t y, fixed_t z, int spawnid)
|
|||
//
|
||||
|
||||
bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
||||
bool useFog, bool sourceFog, bool keepOrientation)
|
||||
bool useFog, bool sourceFog, bool keepOrientation, bool bHaltMomentum)
|
||||
{
|
||||
fixed_t oldx;
|
||||
fixed_t oldy;
|
||||
|
@ -299,11 +299,13 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
|||
if (thing->player)
|
||||
{
|
||||
// [RH] Zoom player's field of vision
|
||||
if (telezoom && thing->player->mo == thing)
|
||||
// [BC] && bHaltMomentum.
|
||||
if (telezoom && thing->player->mo == thing && bHaltMomentum)
|
||||
thing->player->FOV = MIN (175.f, thing->player->DesiredFOV + 45.f);
|
||||
}
|
||||
}
|
||||
if (thing->player && (useFog || !keepOrientation))
|
||||
// [BC] && bHaltMomentum.
|
||||
if (thing->player && (useFog || !keepOrientation) && bHaltMomentum)
|
||||
{
|
||||
// Freeze player for about .5 sec
|
||||
if (thing->Inventory == NULL || thing->Inventory->GetSpeedFactor() <= FRACUNIT)
|
||||
|
@ -315,7 +317,8 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle,
|
|||
thing->momx = FixedMul (thing->Speed, finecosine[angle]);
|
||||
thing->momy = FixedMul (thing->Speed, finesine[angle]);
|
||||
}
|
||||
else if (!keepOrientation) // no fog doesn't alter the player's momentum
|
||||
// [BC] && bHaltMomentum.
|
||||
else if (!keepOrientation && bHaltMomentum) // no fog doesn't alter the player's momentum
|
||||
{
|
||||
thing->momx = thing->momy = thing->momz = 0;
|
||||
// killough 10/98: kill all bobbing momentum too
|
||||
|
@ -417,7 +420,7 @@ static AActor *SelectTeleDest (int tid, int tag)
|
|||
}
|
||||
|
||||
bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, bool fog,
|
||||
bool sourceFog, bool keepOrientation)
|
||||
bool sourceFog, bool keepOrientation, bool haltMomentum)
|
||||
{
|
||||
AActor *searcher;
|
||||
fixed_t z;
|
||||
|
@ -469,7 +472,7 @@ bool EV_Teleport (int tid, int tag, line_t *line, int side, AActor *thing, bool
|
|||
{
|
||||
z = ONFLOORZ;
|
||||
}
|
||||
if (P_Teleport (thing, searcher->x, searcher->y, z, searcher->angle, fog, sourceFog, keepOrientation))
|
||||
if (P_Teleport (thing, searcher->x, searcher->y, z, searcher->angle, fog, sourceFog, keepOrientation, haltMomentum))
|
||||
{
|
||||
// [RH] Lee Killough's changes for silent teleporters from BOOM
|
||||
if (!fog && line && keepOrientation)
|
||||
|
|
|
@ -920,11 +920,11 @@ bool APlayerPawn::UpdateWaterLevel (fixed_t oldz, bool splash)
|
|||
//
|
||||
//===========================================================================
|
||||
|
||||
bool APlayerPawn::ResetAirSupply ()
|
||||
bool APlayerPawn::ResetAirSupply (bool playgasp)
|
||||
{
|
||||
bool wasdrowning = (player->air_finished < level.time);
|
||||
|
||||
if (wasdrowning)
|
||||
if (playgasp && wasdrowning)
|
||||
{
|
||||
S_Sound (this, CHAN_VOICE, "*gasp", 1, ATTN_NORM);
|
||||
}
|
||||
|
|
|
@ -2035,7 +2035,7 @@ CCMD (playsound)
|
|||
{
|
||||
if (argv.argc() > 1)
|
||||
{
|
||||
S_Sound (CHAN_AUTO, argv[1], 1.f, ATTN_NONE);
|
||||
S_Sound (CHAN_AUTO | CHAN_UI, argv[1], 1.f, ATTN_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1537,6 +1537,13 @@ static void ActorBloodColor (FScanner &sc, AActor *defaults, Baggage &bag)
|
|||
}
|
||||
PalEntry pe = MAKERGB(r,g,b);
|
||||
pe.a = CreateBloodTranslation(sc, pe);
|
||||
if (DWORD(pe) == 0)
|
||||
{
|
||||
// If black is the first color being created it will create a value of 0
|
||||
// which stands for 'no translation'
|
||||
// Using (1,1,1) instead of (0,0,0) won't be noticable.
|
||||
pe = MAKERGB(1,1,1);
|
||||
}
|
||||
bag.Info->Class->Meta.SetMetaInt (AMETA_BloodColor, pe);
|
||||
}
|
||||
|
||||
|
|
|
@ -1202,7 +1202,7 @@ void WI_updateDeathmatchStats ()
|
|||
}
|
||||
}
|
||||
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
*/
|
||||
dm_state = 4;
|
||||
}
|
||||
|
@ -1212,7 +1212,7 @@ void WI_updateDeathmatchStats ()
|
|||
{
|
||||
/*
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
|
||||
stillticking = false;
|
||||
|
||||
|
@ -1251,7 +1251,7 @@ void WI_updateDeathmatchStats ()
|
|||
}
|
||||
if (!stillticking)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
dm_state++;
|
||||
}
|
||||
*/
|
||||
|
@ -1261,7 +1261,7 @@ void WI_updateDeathmatchStats ()
|
|||
{
|
||||
if (acceleratestage)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, "players/male/gibbed", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "players/male/gibbed", 1, ATTN_NONE);
|
||||
|
||||
if (gamemode == commercial)
|
||||
WI_initNoState();
|
||||
|
@ -1423,14 +1423,14 @@ void WI_updateNetgameStats ()
|
|||
if (dofrags)
|
||||
cnt_frags[i] = WI_fragSum (i);
|
||||
}
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
ng_state = 10;
|
||||
}
|
||||
|
||||
if (ng_state == 2)
|
||||
{
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
|
||||
stillticking = false;
|
||||
|
||||
|
@ -1449,14 +1449,14 @@ void WI_updateNetgameStats ()
|
|||
|
||||
if (!stillticking)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
ng_state++;
|
||||
}
|
||||
}
|
||||
else if (ng_state == 4)
|
||||
{
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
|
||||
stillticking = false;
|
||||
|
||||
|
@ -1473,14 +1473,14 @@ void WI_updateNetgameStats ()
|
|||
}
|
||||
if (!stillticking)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
ng_state++;
|
||||
}
|
||||
}
|
||||
else if (ng_state == 6)
|
||||
{
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
|
||||
stillticking = false;
|
||||
|
||||
|
@ -1499,14 +1499,14 @@ void WI_updateNetgameStats ()
|
|||
|
||||
if (!stillticking)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
ng_state += 1 + 2*!dofrags;
|
||||
}
|
||||
}
|
||||
else if (ng_state == 8)
|
||||
{
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
|
||||
stillticking = false;
|
||||
|
||||
|
@ -1525,7 +1525,7 @@ void WI_updateNetgameStats ()
|
|||
|
||||
if (!stillticking)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, "player/male/death1", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "player/male/death1", 1, ATTN_NONE);
|
||||
ng_state++;
|
||||
}
|
||||
}
|
||||
|
@ -1533,7 +1533,7 @@ void WI_updateNetgameStats ()
|
|||
{
|
||||
if (acceleratestage)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, PASTSTATS, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, PASTSTATS, 1, ATTN_NONE);
|
||||
WI_initShowNextLoc();
|
||||
}
|
||||
}
|
||||
|
@ -1682,7 +1682,7 @@ void WI_updateStats ()
|
|||
{
|
||||
acceleratestage = 0;
|
||||
sp_state = 10;
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
}
|
||||
cnt_kills[0] = plrs[me].skills;
|
||||
cnt_items[0] = plrs[me].sitems;
|
||||
|
@ -1699,12 +1699,12 @@ void WI_updateStats ()
|
|||
cnt_kills[0] += 2;
|
||||
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
}
|
||||
if (cnt_kills[0] >= plrs[me].skills)
|
||||
{
|
||||
cnt_kills[0] = plrs[me].skills;
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
sp_state++;
|
||||
}
|
||||
}
|
||||
|
@ -1715,12 +1715,12 @@ void WI_updateStats ()
|
|||
cnt_items[0] += 2;
|
||||
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
}
|
||||
if (cnt_items[0] >= plrs[me].sitems)
|
||||
{
|
||||
cnt_items[0] = plrs[me].sitems;
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
sp_state++;
|
||||
}
|
||||
}
|
||||
|
@ -1731,12 +1731,12 @@ void WI_updateStats ()
|
|||
cnt_secret[0] += 2;
|
||||
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
}
|
||||
if (cnt_secret[0] >= plrs[me].ssecret)
|
||||
{
|
||||
cnt_secret[0] = plrs[me].ssecret;
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
sp_state++;
|
||||
}
|
||||
}
|
||||
|
@ -1745,7 +1745,7 @@ void WI_updateStats ()
|
|||
if (gameinfo.gametype == GAME_Doom)
|
||||
{
|
||||
if (!(bcnt&3))
|
||||
S_Sound (CHAN_VOICE, "weapons/pistol", 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, "weapons/pistol", 1, ATTN_NONE);
|
||||
|
||||
cnt_time += 3;
|
||||
cnt_par += 3;
|
||||
|
@ -1765,7 +1765,7 @@ void WI_updateStats ()
|
|||
if (cnt_time >= plrs[me].stime / TICRATE)
|
||||
{
|
||||
cnt_total_time = wbs->totaltime / TICRATE;
|
||||
S_Sound (CHAN_VOICE, NEXTSTAGE, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, NEXTSTAGE, 1, ATTN_NONE);
|
||||
sp_state++;
|
||||
}
|
||||
}
|
||||
|
@ -1774,7 +1774,7 @@ void WI_updateStats ()
|
|||
{
|
||||
if (acceleratestage)
|
||||
{
|
||||
S_Sound (CHAN_VOICE, PASTSTATS, 1, ATTN_NONE);
|
||||
S_Sound (CHAN_VOICE | CHAN_UI, PASTSTATS, 1, ATTN_NONE);
|
||||
WI_initShowNextLoc();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -140,6 +140,9 @@ public:
|
|||
|
||||
const char *GetChars() const { return Chars; }
|
||||
const char &operator[] (int index) const { return Chars[index]; }
|
||||
#if SIZE_MAX != UINT_MAX
|
||||
const char &operator[] (unsigned int index) const { return Chars[index]; }
|
||||
#endif
|
||||
const char &operator[] (size_t index) const { return Chars[index]; }
|
||||
|
||||
FString &operator = (const FString &other);
|
||||
|
|
|
@ -35,7 +35,7 @@ class Actor extends Thinker
|
|||
action native A_SargAttack();
|
||||
action native A_HeadAttack();
|
||||
action native A_BruisAttack();
|
||||
action native A_SkullAttack();
|
||||
action native A_SkullAttack(optional eval float speed);
|
||||
action native A_Metal();
|
||||
action native A_SpidRefire();
|
||||
action native A_BabyMetal();
|
||||
|
|
Loading…
Reference in a new issue