- 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:
Christoph Oelckers 2008-07-19 12:40:10 +00:00
parent a5c52d8371
commit 5dc42121b7
19 changed files with 143 additions and 84 deletions

View File

@ -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.

View File

@ -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

View File

@ -126,7 +126,7 @@ public:
float BlueDamageFade;
bool UpdateWaterLevel (fixed_t oldz, bool splash);
bool ResetAirSupply ();
bool ResetAirSupply (bool playgasp = true);
int GetMaxHealth() const;
};

View File

@ -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;

View File

@ -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]);

View File

@ -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;

View File

@ -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)
{
mace->FirstSpot = firstSpot;
mace->NumMaceSpots = numspots;
mace->DoRespawn ();
if (mace->IsKindOf(RUNTIME_CLASS(AMace)))
{
// remember the values for later
// (works only for the original mace!)
mace->FirstSpot = firstSpot;
mace->NumMaceSpots = numspots;
}
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);
}
//----------------------------------------------------------------------------

View File

@ -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;

View File

@ -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)

View File

@ -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)
{

View File

@ -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.

View File

@ -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);

View File

@ -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)

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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);

View File

@ -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();