1.1.1 update (to be made stable after GZDoom updates):

- Sound overhaul, migrated everything to A_StartSound, new sound channels, CHANF_OVERLAP where needed.
 - Fancy titlemap (two variants, one based on the ps2 menu, one based on the v222 menu).
This commit is contained in:
Marisa the Magician 2020-01-04 22:30:14 +01:00
commit 94cba843e4
42 changed files with 272 additions and 179 deletions

View file

@ -164,7 +164,7 @@ Class UTShieldBelt : UTArmor
{
if ( (amount > 0) && !DamageTypeDefinition.IgnoreArmor(damageType) )
{
Owner.A_PlaySound("belt/absorb",CHAN_7);
Owner.A_StartSound("belt/absorb",CHAN_POWERUP4,CHANF_OVERLAP);
UTMainHandler.DoFlash(Owner,Color(80,255,224,0),5);
}
Super.AbsorbDamage(damage,damageType,newdamage);

View file

@ -505,7 +505,7 @@ Class BioGel : Actor
}
b = Spawn("BioHitbox",pos);
b.target = self;
A_PlaySound("bio/hit");
A_StartSound("bio/hit",CHAN_BODY);
A_SprayDecal("BioSplat",-172);
int numpt = Min(100,int(Scale.x*10))+Random[GES](-5,5);
for ( int i=0; i<numpt; i++ )
@ -538,7 +538,7 @@ Class BioGel : Actor
if ( invoker.atline ) invoker.atline.RemoteActivate(target,invoker.atside,SPAC_Impact,pos);
UTMainHandler.DoBlast(self,Min(175,int(Scale.x*50)),20000*Scale.x);
A_Explode(int(Args[0]*Scale.x),Min(175,int(Scale.x*50)));
A_PlaySound("bio/explode",CHAN_VOICE);
A_StartSound("bio/explode",CHAN_VOICE);
int numpt = Min(300,int(Scale.x*30))+Random[GES](-10,10);
for ( int i=0; i<numpt; i++ )
{
@ -704,7 +704,8 @@ Class BioRifle : UTWeapon
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
}
A_PlaySound("bio/fire",CHAN_WEAPON);
A_StopSound(CHAN_WEAPONMISC);
A_StartSound("bio/fire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(48,0,255,0),1);
A_AlertMonsters();
@ -749,7 +750,7 @@ Class BioRifle : UTWeapon
if ( !weap ) return;
invoker.charge = 0;
invoker.special1 = 0;
A_PlaySound("bio/charge",CHAN_WEAPON);
A_StartSound("bio/charge",CHAN_WEAPONMISC);
invoker.bCharging = true;
}
action void A_ChargeUp()

View file

@ -166,8 +166,8 @@ Class UTChainsaw : UTWeapon
bool quitout = false;
if ( invoker.Ammo1 && (invoker.Ammo1.Amount <= 0) )
{
A_StopSound(CHAN_6);
A_PlaySound("chainsaw/lower",CHAN_WEAPON);
A_StopSound(CHAN_WEAPONMISC);
A_StartSound("chainsaw/lower",CHAN_WEAPON);
quitout = true;
}
else if ( !(player.cmd.buttons&BT_ATTACK) ) quitout = true;
@ -218,9 +218,9 @@ Class UTChainsaw : UTWeapon
}
override void DetachFromOwner()
{
if ( Owner ) Owner.A_StopSound(CHAN_6);
if ( Owner ) Owner.A_StopSound(CHAN_WEAPONMISC);
if ( !Ammo1 || (Ammo1.Amount > 0) )
A_PlaySound("chainsaw/lower",CHAN_6);
A_StartSound("chainsaw/lower",CHAN_WEAPONMISC);
Super.DetachFromOwner();
}
action void A_Vibrate( bool bAlt = false )
@ -287,7 +287,7 @@ Class UTChainsaw : UTWeapon
CSWI A 0
{
if ( !invoker.Ammo1 || (invoker.Ammo1.Amount > 0) )
A_PlaySound("chainsaw/idle",CHAN_6,looping:true);
A_StartSound("chainsaw/idle",CHAN_WEAPONMISC,CHANF_LOOPING);
else
return ResolveState("DryIdle");
return ResolveState(null);
@ -298,8 +298,8 @@ Class UTChainsaw : UTWeapon
A_WeaponReady();
if ( invoker.Ammo1 && (invoker.Ammo1.Amount <= 0) )
{
A_StopSound(CHAN_6);
A_PlaySound("chainsaw/lower",CHAN_WEAPON);
A_StopSound(CHAN_WEAPONMISC);
A_StartSound("chainsaw/lower",CHAN_WEAPON);
return ResolveState("DryIdle");
}
return ResolveState(null);
@ -311,7 +311,7 @@ Class UTChainsaw : UTWeapon
A_WeaponReady(WRF_NOFIRE);
if ( !invoker.Ammo1 || (invoker.Ammo1.Amount > 0) )
{
A_PlaySound("chainsaw/select",CHAN_WEAPON);
A_StartSound("chainsaw/select",CHAN_WEAPON);
return ResolveState("Idle");
}
else if ( player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK) )
@ -320,7 +320,7 @@ Class UTChainsaw : UTWeapon
}
Wait;
Fire:
CSWJ A 1 A_PlaySound("chainsaw/fire",CHAN_6,looping:true);
CSWJ A 1 A_StartSound("chainsaw/fire",CHAN_WEAPONMISC,CHANF_LOOPING);
CSWJ BCDEF 1 A_Vibrate();
Goto Hold;
Hold:
@ -332,7 +332,8 @@ Class UTChainsaw : UTWeapon
AltFire:
CSWA A 0
{
A_PlaySound("chainsaw/fire",CHAN_6);
A_StopSound(CHAN_WEAPONMISC);
A_StartSound("chainsaw/fire",CHAN_WEAPON);
UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-0.8,-1.2),FRandom[Chainsaw](-0.4,-0.7)),0,1,5,SWING_Spring,6,3);
}
CSWA ABCDE 2 A_Vibrate(true);
@ -347,10 +348,14 @@ Class UTChainsaw : UTWeapon
{
if ( invoker.Ammo1 && (invoker.Ammo1.Amount <= 0) )
{
A_StopSound(CHAN_6);
A_PlaySound("chainsaw/lower",CHAN_WEAPON);
A_StopSound(CHAN_WEAPONMISC);
A_StartSound("chainsaw/lower",CHAN_WEAPON);
}
else
{
A_StopSound(CHAN_WEAPON);
A_StartSound("chainsaw/idle",CHAN_WEAPONMISC,CHANF_LOOPING);
}
else A_PlaySound("chainsaw/idle",CHAN_6,looping:true);
}
Goto Ready;
AltFireSwipes:
@ -361,7 +366,7 @@ Class UTChainsaw : UTWeapon
CSWD A 0
{
if ( !invoker.Ammo1 || (invoker.Ammo1.Amount > 0) )
A_PlaySound("chainsaw/lower",CHAN_6);
A_StartSound("chainsaw/lower",CHAN_WEAPONMISC);
}
CSWD ABCDEF 1;
CSWD F 1 A_Lower(int.max);

View file

@ -77,7 +77,7 @@ Class UTActivatable : Inventory
let i = GetDefaultByType(GiveItem);
if ( Owner.GiveInventory(GiveItem,i.Amount) )
{
Owner.A_PlaySound(i.PickupSound,CHAN_ITEM);
Owner.A_StartSound(i.PickupSound,CHAN_ITEM);
return true;
}
return false;

View file

@ -127,7 +127,7 @@ Class UTRocket : Actor
Super.PostBeginPlay();
let l = Spawn("UTRocketTrail",pos);
l.target = self;
A_PlaySound("utrl/fly",CHAN_VOICE,1.0,true,2.5,pitch:1.5625);
A_StartSound("utrl/fly",CHAN_VOICE,CHANF_LOOPING,1.,2.5,1.5625);
if ( tracer ) vel *= 0.9;
Acceleration = vel.unit()*50;
}
@ -141,7 +141,7 @@ Class UTRocket : Actor
UTMainHandler.DoBlast(self,rad,80000);
A_Explode(dmg,rad);
A_QuakeEx(3,3,3,8,0,rad+50,"",QF_RELATIVE|QF_SCALEDOWN,falloff:rad,rollIntensity:0.2);
A_PlaySound("utrl/explode",CHAN_VOICE);
A_StartSound("utrl/explode",CHAN_VOICE);
A_AlertMonsters();
Spawn("RocketExplLight",pos);
int numpt = Random[Eightball](15,30);
@ -266,7 +266,7 @@ Class UTGrenade : UTRocket
RCKT A 0
{
bHITOWNER = true;
A_PlaySound("utrl/bounce");
A_StartSound("utrl/bounce",CHAN_BODY);
rollvel = FRandom[Eightball](-16,16);
pitchvel = FRandom[Eightball](-16,16);
anglevel = FRandom[Eightball](-16,16);
@ -321,7 +321,7 @@ Class UTRocketLauncher : UTWeapon
LockedTarget = null;
LockedOn = false;
if ( Owner.player.ReadyWeapon == self )
Owner.A_PlaySound("utrl/seeklost",CHAN_WEAPON);
Owner.A_StartSound("utrl/seeklost",CHAN_WEAPONMISC,CHANF_OVERLAP);
}
if ( LockedTarget ) crosshair = 99;
else crosshair = 0;
@ -358,8 +358,8 @@ Class UTRocketLauncher : UTWeapon
Weapon weap = Weapon(invoker);
if ( !weap ) return;
invoker.special1 = 0;
if ( weap.bAltFire ) A_PlaySound("utrl/altfire",CHAN_WEAPON);
else A_PlaySound("utrl/fire",CHAN_WEAPON);
if ( weap.bAltFire ) A_StartSound("utrl/altfire",CHAN_WEAPON,CHANF_OVERLAP);
else A_StartSound("utrl/fire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(64,255,0,0),1);
if ( self is 'UTPlayer' )
@ -427,7 +427,7 @@ Class UTRocketLauncher : UTWeapon
}
}
// lose lock-on
if ( invoker.LockedOn ) A_PlaySound("utrl/seeklost",CHAN_6);
if ( invoker.LockedOn ) A_StartSound("utrl/seeklost",CHAN_WEAPONMISC,CHANF_OVERLAP);
invoker.LockedTarget = null;
invoker.LockedOn = false;
for ( int i=0; i<12; i++ )
@ -462,8 +462,8 @@ Class UTRocketLauncher : UTWeapon
invoker.LockedTarget = a;
}
}
if ( invoker.LockedTarget ) A_PlaySound("utrl/seeklock",CHAN_WEAPON);
else if ( invoker.LockedOn ) A_PlaySound("utrl/seeklost",CHAN_WEAPON);
if ( invoker.LockedTarget ) A_StartSound("utrl/seeklock",CHAN_WEAPONMISC,CHANF_OVERLAP);
else if ( invoker.LockedOn ) A_StartSound("utrl/seeklost",CHAN_WEAPONMISC,CHANF_OVERLAP);
if ( invoker.LockedTarget ) invoker.LockedOn = true;
}
@ -524,7 +524,7 @@ Class UTRocketLauncher : UTWeapon
Reload:
EBLI A 5
{
A_PlaySound("utrl/load",CHAN_6,0.3);
A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP,0.3);
if ( invoker.bSingleRocket = !invoker.bSingleRocket )
A_Print(StringTable.Localize("$M_SINGLEROCKETON"));
else A_Print(StringTable.Localize("$M_SINGLEROCKETOFF"));
@ -537,57 +537,57 @@ Class UTRocketLauncher : UTWeapon
EBLI A 2 A_JumpIf((!invoker.bAltFire&&invoker.bSingleRocket)||(invoker.Ammo1.Amount<=0)||FireCheck(),"FireOne");
EBLI A 0; // no tween
// load two
EBR1 A 0 A_PlaySound("utrl/rotate",CHAN_6,0.1);
EBR1 A 0 A_StartSound("utrl/rotate",CHAN_WEAPONMISC,CHANF_OVERLAP,0.1);
EBR1 ABCDEFG 2 A_JumpIf(FireCheck(),"FireOne");
EBL2 A 0 A_PlaySound("utrl/load",CHAN_6);
EBL2 ABCDEFG 3 A_JumpIf(FireCheck(),"FireOne");
EBL2 A 0 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL2 ABCDEFG 2 A_JumpIf(FireCheck(),"FireOne");
EBR2 A 0
{
A_LoadRocket();
return A_JumpIf((invoker.Ammo1.Amount<=0)||FireCheck(),"FireTwo");
}
// load three
EBR2 A 0 A_PlaySound("utrl/rotate",CHAN_6,0.1);
EBR2 A 0 A_StartSound("utrl/rotate",CHAN_WEAPONMISC,CHANF_OVERLAP,0.1);
EBR2 ABCDEFG 2 A_JumpIf(FireCheck(),"FireTwo");
EBL3 A 0 A_PlaySound("utrl/load",CHAN_6);
EBL3 ABCDEFG 3 A_JumpIf(FireCheck(),"FireTwo");
EBL3 A 0 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL3 ABCDEFG 2 A_JumpIf(FireCheck(),"FireTwo");
EBR3 A 0
{
A_LoadRocket();
return A_JumpIf((invoker.Ammo1.Amount<=0)||FireCheck(),"FireThree");
}
// load four
EBR3 A 0 A_PlaySound("utrl/rotate",CHAN_6,0.1);
EBR3 A 0 A_StartSound("utrl/rotate",CHAN_WEAPONMISC,CHANF_OVERLAP,0.1);
EBR3 ABCDEFG 2 A_JumpIf(FireCheck(),"FireThree");
EBL4 A 0 A_PlaySound("utrl/load",CHAN_6);
EBL4 ABCDEFG 3 A_JumpIf(FireCheck(),"FireThree");
EBL4 A 0 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL4 ABCDEFG 2 A_JumpIf(FireCheck(),"FireThree");
EBR4 A 0
{
A_LoadRocket();
return A_JumpIf((invoker.Ammo1.Amount<=0)||FireCheck(),"FireFour");
}
// load five
EBR4 A 0 A_PlaySound("utrl/rotate",CHAN_6,0.1);
EBR4 A 0 A_StartSound("utrl/rotate",CHAN_WEAPONMISC,CHANF_OVERLAP,0.1);
EBR4 ABCDEFG 2 A_JumpIf(FireCheck(),"FireFour");
EBL5 A 0 A_PlaySound("utrl/load",CHAN_6);
EBL5 ABCDEFG 3 A_JumpIf(FireCheck(),"FireFour");
EBL5 A 0 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL5 ABCDEFG 2 A_JumpIf(FireCheck(),"FireFour");
EBR5 A 0
{
A_LoadRocket();
return A_JumpIf((invoker.Ammo1.Amount<=0)||FireCheck(),"FireFive");
}
// load six
EBR5 A 0 A_PlaySound("utrl/rotate",CHAN_6,0.1);
EBR5 A 0 A_StartSound("utrl/rotate",CHAN_WEAPONMISC,CHANF_OVERLAP,0.1);
EBR5 ABCDEFG 2 A_JumpIf(FireCheck(),"FireFive");
EBL6 A 0 A_PlaySound("utrl/load",CHAN_6);
EBL6 ABCDEF 3 A_JumpIf(FireCheck(),"FireFive");
EBL6 A 0 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL6 ABCDEF 2 A_JumpIf(FireCheck(),"FireFive");
EBL6 F 0 A_LoadRocket();
Goto FireSix;
FireOne:
EBF1 A 0 A_FireRockets(1);
EBF1 ABCDEFGH 2;
EBL1 A 0 A_CheckReload();
EBL1 A 2 A_PlaySound("utrl/load",CHAN_6);
EBL1 A 2 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL1 BCDEFG 2;
EBLI A 0;
Goto Idle;
@ -595,7 +595,7 @@ Class UTRocketLauncher : UTWeapon
EBF2 A 0 A_FireRockets(2);
EBF2 ABCDEFGHIJK 2;
EBL1 A 0 A_CheckReload();
EBL1 A 2 A_PlaySound("utrl/load",CHAN_6);
EBL1 A 2 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL1 BCDEFG 2;
EBLI A 0;
Goto Idle;
@ -603,7 +603,7 @@ Class UTRocketLauncher : UTWeapon
EBF3 A 0 A_FireRockets(3);
EBF3 ABCDEFGHIJ 2;
EBL1 A 0 A_CheckReload();
EBL1 A 2 A_PlaySound("utrl/load",CHAN_6);
EBL1 A 2 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL1 BCDEFG 2;
EBLI A 0;
Goto Idle;
@ -611,7 +611,7 @@ Class UTRocketLauncher : UTWeapon
EBF4 A 0 A_FireRockets(4);
EBF4 ABCDEFGHIJK 2;
EBL1 A 0 A_CheckReload();
EBL1 A 2 A_PlaySound("utrl/load",CHAN_6);
EBL1 A 2 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL1 BCDEFG 2;
EBLI A 0;
Goto Idle;
@ -619,7 +619,7 @@ Class UTRocketLauncher : UTWeapon
EBF5 A 0 A_FireRockets(5);
EBF5 ABCDEFGHIJKLM 2;
EBL1 A 0 A_CheckReload();
EBL1 A 2 A_PlaySound("utrl/load",CHAN_6);
EBL1 A 2 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL1 BCDEFG 2;
EBLI A 0;
Goto Idle;
@ -627,7 +627,7 @@ Class UTRocketLauncher : UTWeapon
EBF6 A 0 A_FireRockets(6);
EBF6 ABCDEFGHIJKLMNOP 2;
EBL1 A 0 A_CheckReload();
EBL1 A 2 A_PlaySound("utrl/load",CHAN_6);
EBL1 A 2 A_StartSound("utrl/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
EBL1 BCDEFG 2;
EBLI A 0;
Goto Idle;

View file

@ -83,7 +83,8 @@ Class BulletImpact : Actor
let s = Spawn("UTChip",pos+x*2);
s.vel = pvel;
}
A_PlaySound("bullet/hit",CHAN_VOICE,attenuation:3.0);
if ( !Random[Enforcer](0,3) ) A_StartSound("flak/hit",CHAN_VOICE,attenuation:2.5);
else A_StartSound("bullet/hit",CHAN_VOICE,attenuation:3.0);
let s = Spawn("Splasher",Vec3Offset(0,0,2));
s.vel = (0,0,-4);
}
@ -274,7 +275,7 @@ Class Enforcer : UTWeapon
if ( invoker.altaccuracy < 0.2 ) invoker.altaccuracy += 0.05;
if ( slave )
{
if ( flak_enforcerreload && (invoker.slaveclipcount < 5) ) A_PlaySound("enforcer/click",CHAN_6);
if ( flak_enforcerreload && (invoker.slaveclipcount < 5) ) A_StartSound("enforcer/click",CHAN_LEFTWEAPONMISC);
if ( (invoker.slaveclipcount <= 0) || (weap.Ammo1.Amount <= 0) )
{
invoker.slaverefire = 0;
@ -301,7 +302,7 @@ Class Enforcer : UTWeapon
}
else
{
if ( flak_enforcerreload && (invoker.clipcount < 5) ) A_PlaySound("enforcer/click",CHAN_WEAPON);
if ( flak_enforcerreload && (invoker.clipcount < 5) ) A_StartSound("enforcer/click",CHAN_WEAPONMISC);
if ( (invoker.clipcount <= 0) || (weap.Ammo1.Amount <= 0) )
{
A_ClearRefire();
@ -357,7 +358,7 @@ Class Enforcer : UTWeapon
}
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(32,255,128,0),1);
A_PlaySound("enforcer/shoot",slave?CHAN_6:CHAN_WEAPON);
A_StartSound("enforcer/shoot",slave?CHAN_LEFTWEAPON:CHAN_WEAPON,CHANF_OVERLAP);
A_AlertMonsters();
A_QuakeEx(2,2,2,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08);
if ( slave )
@ -518,7 +519,7 @@ Class Enforcer : UTWeapon
LeftReady:
2NFS A 0
{
A_PlaySound("enforcer/select",CHAN_6);
A_StartSound("enforcer/select",CHAN_LEFTWEAPON);
invoker.slaveactive = true;
}
2NFS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 A_JumpIf(invoker.slavedown,"LeftDeselect");
@ -619,7 +620,7 @@ Class Enforcer : UTWeapon
invoker.clipout = true;
invoker.clipcount = 0;
A_Overlay(-9999,null);
A_PlaySound("enforcer/click",CHAN_WEAPON);
A_StartSound("enforcer/click",CHAN_WEAPONMISC);
}
ENFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
ENR2 AB 1;
@ -627,7 +628,7 @@ Class Enforcer : UTWeapon
{
invoker.clipout = false;
invoker.clipcount = min(invoker.default.clipcount,invoker.Ammo1.Amount);
A_PlaySound("enforcer/reload",CHAN_WEAPON);
A_StartSound("enforcer/reload",CHAN_WEAPON);
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
invoker.slavereload = (flak_enforcerreload&&invoker.slaveactive&&(invoker.slaveclipcount<min(invoker.default.slaveclipcount,invoker.Ammo1.Amount)));
@ -639,7 +640,7 @@ Class Enforcer : UTWeapon
c.pitch = pitch;
c.vel = vel*.5+x*FRandom[Junk](-.5,.5)+y*FRandom[Junk](-.5,.5)-z*FRandom[Junk](1,2);
}
ENFS A 0 A_PlaySound("enforcer/select",CHAN_WEAPON);
ENFS A 0 A_StartSound("enforcer/select",CHAN_WEAPON);
Goto Ready;
LeftReload:
2NFR A 0
@ -652,7 +653,7 @@ Class Enforcer : UTWeapon
invoker.slaveclipout = true;
invoker.slaveclipcount = 0;
A_Overlay(-9998,null);
A_PlaySound("enforcer/click",CHAN_6);
A_StartSound("enforcer/click",CHAN_LEFTWEAPONMISC);
return ResolveState(null);
}
2NFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
@ -661,7 +662,7 @@ Class Enforcer : UTWeapon
{
invoker.slaveclipout = false;
invoker.slaveclipcount = min(invoker.default.slaveclipcount,invoker.Ammo1.Amount);
A_PlaySound("enforcer/reload",CHAN_6);
A_StartSound("enforcer/reload",CHAN_LEFTWEAPON);
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
invoker.slavereload = false;
@ -673,7 +674,7 @@ Class Enforcer : UTWeapon
c.pitch = pitch;
c.vel = vel*.5+x*FRandom[Junk](-.5,.5)+y*FRandom[Junk](-.5,.5)-z*FRandom[Junk](1,2);
}
2NFS A 0 A_PlaySound("enforcer/select",CHAN_6);
2NFS A 0 A_StartSound("enforcer/select",CHAN_LEFTWEAPON);
Goto LeftReady;
Deselect:
ENFD A 0

View file

@ -341,7 +341,7 @@ Class FlakChunk : Actor
rollvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
pitchvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
yawvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1)*(vel.length()/speed);
A_PlaySound("flak/bounce",volume:0.3);
A_StartSound("flak/bounce",volume:0.3);
A_AlertMonsters();
if ( vel.length() < 5 ) ExplodeMissile();
}
@ -351,7 +351,7 @@ Class FlakChunk : Actor
if ( !target.bNOBLOOD )
{
target.SpawnBlood(pos,AngleTo(target),damage);
A_PlaySound("flak/meat",volume:0.3);
A_StartSound("flak/meat",volume:0.3);
A_AlertMonsters();
}
return -1;
@ -373,7 +373,7 @@ Class FlakChunk : Actor
if ( !victim.bNOBLOOD && (victim.health-amt > victim.GetGibHealth()) )
{
victim.SpawnBlood(pos,AngleTo(victim),damage);
A_PlaySound("flak/meat",volume:0.3);
A_StartSound("flak/meat",volume:0.3);
A_AlertMonsters();
}
return 1;
@ -418,7 +418,7 @@ Class FlakChunk : Actor
else dir = vel.unit();
l.angle = atan2(dir.y,dir.x);
l.pitch = asin(-dir.z);
A_PlaySound("flak/hit",volume:0.3);
A_StartSound("flak/hit",volume:0.3);
A_AlertMonsters();
}
XDeath:
@ -519,7 +519,7 @@ Class FlakSlug : Actor
UTMainHandler.DoBlast(self,120,75000);
A_Explode(70,120);
A_QuakeEx(4,4,4,8,0,170,"",QF_RELATIVE|QF_SCALEDOWN,falloff:120,rollIntensity:0.2);
A_PlaySound("flak/explode",CHAN_VOICE);
A_StartSound("flak/explode",CHAN_VOICE);
A_AlertMonsters();
if ( !Tracer ) Spawn("SlugSmoke",pos);
Spawn("SlugLight",pos);
@ -639,8 +639,8 @@ Class FlakCannon : UTWeapon
{
action void A_Loading( bool first = false )
{
if ( first ) A_PlaySound("flak/load",CHAN_WEAPON);
else A_PlaySound("flak/reload",CHAN_6);
if ( first ) A_StartSound("flak/load",CHAN_WEAPONMISC,CHANF_OVERLAP);
else A_StartSound("flak/reload",CHAN_WEAPONMISC,CHANF_OVERLAP);
}
action void A_FireChunks()
{
@ -648,7 +648,7 @@ Class FlakCannon : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
A_PlaySound("flak/fire",CHAN_WEAPON);
A_StartSound("flak/fire",CHAN_WEAPON);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(160,255,96,0),1);
UTMainHandler.DoSwing(self,(FRandom[Flak](-0.3,-0.8),FRandom[Flak](-0.5,0.5)),4,-1.5,2,SWING_Spring,2,2);
@ -707,7 +707,7 @@ Class FlakCannon : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
A_PlaySound("flak/altfire",CHAN_WEAPON);
A_StartSound("flak/altfire",CHAN_WEAPON);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(128,255,96,0),1);
UTMainHandler.DoSwing(self,(FRandom[Flak](-0.4,-0.8),FRandom[Flak](0.4,0.8)),4,-1,3,SWING_Spring,3,5);

View file

@ -87,7 +87,8 @@ Class ImpactHammer : UTWeapon
{
Weapon weap = Weapon(invoker);
if ( !weap ) return;
A_PlaySound("impact/release",CHAN_WEAPON);
A_StopSound(CHAN_WEAPONMISC);
A_StartSound("impact/release",CHAN_WEAPON);
invoker.FireEffect();
UTMainHandler.DoSwing(self,(FRandom[Impact](-0.3,-1.5),FRandom[Impact](-1.2,-0.4)),3,-0.8,3,SWING_Spring,3,2);
A_AlertMonsters(gameinfo.gametype&GAME_Strife?100:0);
@ -152,7 +153,7 @@ Class ImpactHammer : UTWeapon
{
Weapon weap = Weapon(invoker);
if ( !weap ) return;
A_PlaySound("impact/fire",CHAN_WEAPON);
A_StartSound("impact/fire",CHAN_WEAPON);
invoker.FireEffect();
UTMainHandler.DoSwing(self,(FRandom[Impact](-0.3,-1.5),FRandom[Impact](-1.2,-0.4)),2,-0.6,2,SWING_Spring,1,2);
A_AlertMonsters(gameinfo.gametype&GAME_Strife?100:0);
@ -249,10 +250,10 @@ Class ImpactHammer : UTWeapon
{
A_ResetCharge();
A_Overlay(-9999,"Charging");
A_PlaySound("impact/pull",CHAN_WEAPON);
A_StartSound("impact/pull",CHAN_WEAPON);
}
IMPL ABCDE 5;
IMPR A 0 A_PlaySound("impact/loop",CHAN_WEAPON,looping:true);
IMPR A 0 A_StartSound("impact/loop",CHAN_WEAPONMISC,CHANF_LOOPING);
Goto Hold;
Hold:
IMPR ABCDEFGHIJ 1;

View file

@ -247,23 +247,27 @@ Class Minigun : UTWeapon
Hold:
MGNF A 0
{
A_PlaySound("minigun/fire",CHAN_WEAPON,1.0,true);
A_StartSound("minigun/fire",CHAN_WEAPONMISC,CHANF_LOOPING);
A_Overlay(-9999,"FireDummy");
}
MGNF ABCDEFGHIJKLMNOPQRS 1 A_FireBullet();
MGNF A 0 A_JumpIf(player.cmd.buttons&BT_ALTATTACK,1);
Goto Hold+1;
AltHold:
MGNF B 0 A_PlaySound("minigun/altfire",CHAN_WEAPON,1.0,true);
MGNF B 0 A_StartSound("minigun/altfire",CHAN_WEAPONMISC,CHANF_LOOPING);
MGNF ADGJMPSCFILORBEHKNQ 1 A_FireBullet(true);
Goto AltHold+1;
Unwind:
MGNU A 0 A_PlaySound("minigun/unwind",CHAN_WEAPON);
MGNU A 0
{
A_StopSound(CHAN_WEAPONMISC);
A_StartSound("minigun/unwind",CHAN_WEAPON);
}
MGNU ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 A_MinigunRefire();
MGU2 ABCDEFGHIJKLM 1 A_MinigunRefire();
Goto Idle;
Deselect:
MGND A 1 A_StopSound(CHAN_WEAPON);
MGND A 1 A_StopSound(CHAN_WEAPONMISC);
MGND BCDEFGHIJ 1;
MGND J 1 A_Lower(int.max);
Wait;

View file

@ -74,7 +74,7 @@ Class DamageAmplifier : Powerup
{
Super.DoEffect();
if ( (EffectTics == 175) || (EffectTics == 140) || (EffectTics == 105) || (EffectTics == 70) || (EffectTics == 35) )
Owner.A_PlaySound("udamage/drain",CHAN_7,1.0,false,0.25);
Owner.A_StartSound("udamage/drain",CHAN_POWERUP2,attenuation:.25);
}
override void EndEffect()
@ -91,8 +91,8 @@ Class DamageAmplifier : Powerup
void FireEffect()
{
if ( gametic < lasteffect ) return;
if ( EffectTics < 350 ) Owner.A_PlaySound("udamage/fire2",CHAN_7,1.0,false,0.25);
else Owner.A_PlaySound("udamage/fire1",CHAN_7,1.0,false,0.25);
if ( EffectTics < 350 ) Owner.A_StartSound("udamage/fire2",CHAN_POWERUP,attenuation:.25);
else Owner.A_StartSound("udamage/fire1",CHAN_POWERUP,attenuation:.25);
UTMainHandler.DoFlash(Owner,Color(48,238,0,255),6);
lasteffect = gametic+5; // prevent excess flash
}
@ -181,7 +181,7 @@ Class UTInvulPower : Powerup
{
Super.DoEffect();
if ( (EffectTics == 175) || (EffectTics == 140) || (EffectTics == 105) || (EffectTics == 70) || (EffectTics == 35) )
Owner.A_PlaySound("uinvul/drain",CHAN_7,1.0,false,0.25);
Owner.A_StartSound("uinvul/drain",CHAN_POWERUP2,attenuation:.25);
}
override void EndEffect()
@ -200,7 +200,7 @@ Class UTInvulPower : Powerup
if ( !passive || (damage <= 0) ) return;
newdamage = 0;
if ( gametic < lasteffect ) return;
Owner.A_PlaySound("uinvul/hit",CHAN_7,1.0,false,0.25);
Owner.A_StartSound("uinvul/hit",CHAN_POWERUP4,attenuation:.25);
UTMainHandler.DoFlash(Owner,Color(48,255,238,0),6);
lasteffect = gametic+5; // prevent excess flash
}
@ -441,7 +441,7 @@ Class UTJumpBoots : Inventory
if ( (amount > 0) && (owner.player.jumptics == -1) )
{
Amount = max(0,Amount-700);
Owner.A_PlaySound("boot/jump",CHAN_BODY);
Owner.A_StartSound("boot/jump",CHAN_POWERUP3);
}
else if ( (Amount <= 0) && owner.player.onground )
{

View file

@ -161,14 +161,14 @@ Class PulseBall : Actor
}
override void PostBeginPlay()
{
A_PlaySound("pulse/fly",CHAN_BODY,0.8,true,8.0);
A_StartSound("pulse/fly",CHAN_BODY,CHANF_LOOPING,.8,8.);
let l = Spawn("PulseBallLight",pos);
l.target = self;
}
action void A_BallExp()
{
A_SetScale(0.45);
A_PlaySound("pulse/hit",CHAN_BODY);
A_StartSound("pulse/hit");
A_SprayDecal("BoltScorch");
Spawn("PulseExplLight",pos);
int numpt = Random[Pulse](20,40);
@ -692,7 +692,7 @@ Class PulseGun : UTWeapon
action void A_StartBeam()
{
invoker.special1 = 0;
A_PlaySound("pulse/bolt",CHAN_WEAPON,1.0,true);
A_StartSound("pulse/bolt",CHAN_WEAPON,CHANF_LOOPING);
Vector3 x, y, z, origin;
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+4.1*y-2.7*z);
@ -778,13 +778,13 @@ Class PulseGun : UTWeapon
PGNI A 0
{
invoker.special1 = 0;
A_PlaySound("pulse/fire",CHAN_WEAPON,1.0,true);
A_StartSound("pulse/fire",CHAN_WEAPON,CHANF_LOOPING);
}
PGNF ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 A_PulseFire();
PGF2 ABCDEFGHIJKLMN 1 A_PulseFire();
Goto Fire+1;
Release:
PGNC A 0 A_PlaySound("pulse/down",CHAN_WEAPON);
PGNC A 0 A_StartSound("pulse/down",CHAN_WEAPON);
PGNC ABCDEFGHIJKLMNOPQRSTUVWXY 1 A_PulseRefire();
PGNC Y 0;
Goto Idle;
@ -804,7 +804,7 @@ Class PulseGun : UTWeapon
PGNI A 0 A_JumpIf(invoker.clipcount >= Min(invoker.default.clipcount,invoker.Ammo1.Amount),"Idle");
PGNR A 1
{
A_PlaySound("pulse/reload",CHAN_WEAPON);
A_StartSound("pulse/reload",CHAN_WEAPONMISC);
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
}

View file

@ -76,7 +76,7 @@ Class Razor2 : Actor
Super.PostBeginPlay();
let t = Spawn("Razor2Trail",pos);
t.target = self;
A_PlaySound("ripper/hum",CHAN_VOICE,1.0,true,3.0,pitch:3.125);
A_StartSound("ripper/hum",CHAN_VOICE,CHANF_LOOPING,1.,3.,3.125);
Vector3 dir = vel.unit();
A_SetAngle(atan2(dir.y,dir.x));
A_SetPitch(asin(-dir.z));
@ -91,7 +91,7 @@ Class Razor2 : Actor
if ( !target.bNOBLOOD )
{
target.SpawnBlood(pos,AngleTo(target),damage);
A_PlaySound("ripper/flesh");
A_StartSound("ripper/flesh");
A_AlertMonsters();
}
UTMainHandler.DoKnockback(target,vel.unit(),15000);
@ -99,7 +99,7 @@ Class Razor2 : Actor
}
action void A_RazorHit()
{
A_PlaySound("ripper/hit");
A_StartSound("ripper/hit");
A_AlertMonsters();
A_SprayDecal("WallCrack",-20);
int numpt = Random[Ripper](5,10);
@ -175,7 +175,7 @@ Class Razor2Alt : Razor2
bFORCEXYBILLBOARD = true;
Scale *= 0.65;
A_StopSound(CHAN_VOICE);
A_PlaySound("ripper/althit",CHAN_VOICE);
A_StartSound("ripper/althit",CHAN_VOICE);
Spawn("Razor2AltLight",pos);
A_AlertMonsters();
A_SprayDecal("RazorBlast",20);
@ -246,8 +246,8 @@ Class Ripper2 : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
if ( alt ) A_PlaySound("ripper/altfire",CHAN_WEAPON);
else A_PlaySound("ripper/fire",CHAN_WEAPON);
if ( alt ) A_StartSound("ripper/altfire",CHAN_WEAPON,CHANF_OVERLAP);
else A_StartSound("ripper/fire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(8,0,255,255),1);
A_AlertMonsters();

View file

@ -361,7 +361,7 @@ Class ShockBeam : Actor
let r = Spawn("ShockBlastRing",b.pos);
r.angle = atan2(t.Results.HitVector.y,t.Results.HitVector.x);
r.pitch = asin(-t.Results.HitVector.z);
A_PlaySound("shock/blast",CHAN_WEAPON,attenuation:0.5,pitch:0.6);
A_StartSound("shock/blast",CHAN_WEAPON,attenuation:0.5,pitch:0.6);
int numpt = Random[ASMD](200,300);
for ( int i=0; i<numpt; i++ )
{
@ -414,7 +414,7 @@ Class ShockBeam : Actor
{
Spawn("ShockBeamLight",pos);
A_QuakeEx(2,2,2,5,0,120,"",QF_RELATIVE|QF_SCALEDOWN,falloff:60,rollIntensity:0.1);
A_PlaySound("shock/hit",CHAN_VOICE);
A_StartSound("shock/hit",CHAN_VOICE);
A_AlertMonsters();
int numpt = Random[ASMD](20,50);
for ( int i=0; i<numpt; i++ )
@ -598,8 +598,8 @@ Class SuperShockBeam : Actor
let r = Spawn("SuperShockBlastRing",b.pos);
r.angle = atan2(t.Results.HitVector.y,t.Results.HitVector.x);
r.pitch = asin(-t.Results.HitVector.z);
A_PlaySound("shock/blast",CHAN_WEAPON,attenuation:0.5,pitch:0.6);
A_PlaySound("sshock/blast",CHAN_6,attenuation:0.5);
A_StartSound("shock/blast",CHAN_WEAPON,attenuation:0.5,pitch:0.6);
A_StartSound("sshock/blast",CHAN_6,attenuation:0.5);
int numpt = Random[ASMD](200,300);
for ( int i=0; i<numpt; i++ )
{
@ -664,8 +664,8 @@ Class SuperShockBeam : Actor
A_Explode(int.max,50);
}
A_QuakeEx(6,6,6,5,0,100,"",QF_RELATIVE|QF_SCALEDOWN,falloff:50,rollIntensity:0.2);
A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5);
A_PlaySound("sshock/blast",CHAN_6,attenuation:0.5);
A_StartSound("shock/hit",CHAN_VOICE,attenuation:0.5);
A_StartSound("sshock/blast",CHAN_6,attenuation:0.5);
A_AlertMonsters();
int numpt = Random[ASMD](20,50);
for ( int i=0; i<numpt; i++ )
@ -881,8 +881,8 @@ Class ShockBall : Actor
r.angle = atan2(HitNormal.y,HitNormal.x);
r.pitch = asin(-HitNormal.z);
r.scale *= 1.5;
A_PlaySound("shock/hit",CHAN_VOICE);
A_PlaySound("shock/ball",CHAN_WEAPON,pitch:FRandom[ASMD](0.5,1.5));
A_StartSound("shock/hit",CHAN_VOICE);
A_StartSound("shock/ball",CHAN_WEAPON,pitch:FRandom[ASMD](0.5,1.5));
A_QuakeEx(4,4,4,30,0,200,"",QF_RELATIVE|QF_SCALEDOWN,falloff:70,rollIntensity:0.15);
A_AlertMonsters();
int numpt = Random[ASMD](50,100);
@ -974,9 +974,9 @@ Class SuperShockBall : Actor
r.angle = atan2(HitNormal.y,HitNormal.x);
r.pitch = asin(-HitNormal.z);
r.scale *= 1.5;
A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5);
A_PlaySound("shock/ball",CHAN_WEAPON,attenuation:0.5,pitch:FRandom[ASMD](0.5,1.5));
A_PlaySound("sshock/blast",CHAN_6,attenuation:0.5);
A_StartSound("shock/hit",CHAN_VOICE,attenuation:0.5);
A_StartSound("shock/ball",CHAN_WEAPON,attenuation:0.5,pitch:FRandom[ASMD](0.5,1.5));
A_StartSound("sshock/blast",CHAN_6,attenuation:0.5);
A_QuakeEx(8,8,8,30,0,300,"",QF_RELATIVE|QF_SCALEDOWN,falloff:120,rollIntensity:0.25);
A_AlertMonsters();
int numpt = Random[ASMD](50,100);
@ -1066,7 +1066,7 @@ Class ShockRifle : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
A_PlaySound("shock/fire",CHAN_WEAPON);
A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(128,128,0,255),1);
UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),2,-0.3,3,SWING_Spring,0,4);
@ -1104,7 +1104,7 @@ Class ShockRifle : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
A_PlaySound("shock/altfire",CHAN_WEAPON);
A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(128,128,0,255),1);
UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),3,-0.4,3,SWING_Spring,0,4);
@ -1249,7 +1249,7 @@ Class EnhancedShockRifle : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
A_PlaySound("shock/fire",CHAN_WEAPON);
A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(128,255,128,0),1);
UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),4,-0.6,3,SWING_Spring,0,4);
@ -1287,7 +1287,7 @@ Class EnhancedShockRifle : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
A_PlaySound("shock/altfire",CHAN_WEAPON);
A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(128,255,128,0),1);
UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),6,-0.8,3,SWING_Spring,0,4);
@ -1370,7 +1370,7 @@ Class EnhancedShockRifle : UTWeapon
DryFire:
ASMA I 3
{
A_PlaySound("sshock/dryfire",CHAN_WEAPON);
A_StartSound("sshock/dryfire",CHAN_WEAPON,CHANF_OVERLAP);
A_AlertMonsters();
}
ASMA J 4;

View file

@ -82,7 +82,7 @@ Class SniperRifle : UTWeapon
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(32,0,0,255),1);
A_PlaySound("sniper/fire",CHAN_WEAPON);
A_StartSound("sniper/fire",CHAN_WEAPON,CHANF_OVERLAP);
A_AlertMonsters();
if ( zoomed )
{
@ -255,11 +255,11 @@ Class SniperRifle : UTWeapon
if ( invoker.sniperzoom > 1. )
{
if ( CVar.GetCVar('flak_zoomsound',players[consoleplayer]).GetBool() && CheckLocalView() )
A_PlaySound("sniper/zoomdown",CHAN_WEAPON);
A_StartSound("sniper/zoomdown",CHAN_WEAPONMISC,CHANF_OVERLAP);
return ResolveState("AltHold2");
}
if ( CVar.GetCVar('flak_zoomsound',players[consoleplayer]).GetBool() && CheckLocalView() )
A_PlaySound("sniper/zoomup",CHAN_WEAPON);
A_StartSound("sniper/zoomup",CHAN_WEAPONMISC,CHANF_OVERLAP);
return ResolveState(null);
}
AltHold:
@ -279,7 +279,7 @@ Class SniperRifle : UTWeapon
SRFD A 0
{
if ( (invoker.sniperzoom>1.0) && CVar.GetCVar('flak_zoomsound',players[consoleplayer]).GetBool() && CheckLocalView() )
A_PlaySound("sniper/zoomdown",CHAN_WEAPON);
A_StartSound("sniper/zoomdown",CHAN_WEAPONMISC,CHANF_OVERLAP);
A_ZoomFactor(invoker.sniperzoom=1.0,ZOOM_INSTANT);
}
SRFD ABCDEFG 1;

View file

@ -40,7 +40,7 @@ Class ModuleHitbox : Actor
if ( !bi.Thing || (bi.Thing != master.target) ) continue;
if ( (Distance2D(bi.Thing)-bi.Thing.radius <= radius) && ((bi.Thing.pos.z <= pos.z+height) && (bi.Thing.pos.z+bi.Thing.height >= pos.z-height)) )
{
A_PlaySound("misc/i_pkup");
A_StartSound("misc/i_pkup",CHAN_ITEM);
master.Destroy();
return;
}
@ -154,7 +154,7 @@ Class TranslocatorModule : Actor
}
b = Spawn("ModuleHitbox",pos);
b.master = self;
A_PlaySound("transloc/hum",CHAN_VOICE,0.5,true,2.0);
A_StartSound("transloc/hum",CHAN_VOICE,CHANF_LOOPING,.5,2.);
}
override bool CanCollideWith( Actor other, bool passive )
@ -188,7 +188,7 @@ Class TranslocatorModule : Actor
Super.Tick();
if ( bAMBUSH && !Random[Transloc](0,40) )
{
A_PlaySound("transloc/spark");
A_StartSound("transloc/spark",CHAN_BODY,CHANF_OVERLAP);
int numpt = Random[Transloc](20,40);
for ( int i=0; i<numpt; i++ )
{
@ -223,7 +223,7 @@ Class TranslocatorModule : Actor
else
{
A_SetPitch(0);
A_PlaySound("transloc/bounce");
A_StartSound("transloc/bounce");
if ( BlockingFloor || (tracer && (pos.z >= tracer.pos.z+tracer.height) && tracer.bACTLIKEBRIDGE) ) alreadyhit = true;
}
}
@ -391,7 +391,7 @@ Class Translocator : UTWeapon
{
Weapon weap = Weapon(invoker);
if ( !weap ) return;
A_PlaySound("transloc/throw",CHAN_WEAPON);
A_StartSound("transloc/throw",CHAN_WEAPON);
invoker.FireEffect();
UTMainHandler.DoSwing(self,(FRandom[Translocator](-0.2,0.4),FRandom[Translocator](-0.2,0.7)),2,-0.3,3,SWING_Spring,2,3);
A_AlertMonsters();
@ -413,14 +413,15 @@ Class Translocator : UTWeapon
{
Weapon weap = Weapon(invoker);
if ( !weap ) return;
A_PlaySound("transloc/return",CHAN_WEAPON);
A_StartSound("transloc/return",CHAN_WEAPON);
invoker.FireEffect();
UTMainHandler.DoSwing(self,(FRandom[Translocator](-0.2,-0.4),FRandom[Translocator](-0.2,0.7)),3,-1,2,SWING_Spring,2,2);
A_AlertMonsters();
if ( invoker.module && invoker.module.bAMBUSH )
{
UTMainHandler.DoFlash(self,Color(255,255,255,255),50);
A_PlaySound("transloc/spark",CHAN_WEAPON);
for ( int i=0; i<3; i++ )
A_StartSound("transloc/spark",CHAN_WEAPONMISC,CHANF_OVERLAP);
DamageMobj(invoker,self,int.max,'Telefrag',DMG_THRUSTLESS);
}
if ( invoker.module ) invoker.module.Destroy();
@ -434,7 +435,7 @@ Class Translocator : UTWeapon
{
invoker.FireEffect();
A_AlertMonsters();
A_PlaySound("transloc/return",CHAN_WEAPON);
A_StartSound("transloc/return",CHAN_WEAPON);
return;
}
// consume ammo if any
@ -468,7 +469,7 @@ Class Translocator : UTWeapon
SpawnTeleportFog(newpos,false,false);
player.fov = min(175,player.desiredfov+60);
}
else A_PlaySound("transloc/return",CHAN_WEAPON);
else A_StartSound("transloc/return",CHAN_WEAPON);
for ( int i=0; i<MAXPLAYERS; i++ )
{
if ( !playeringame[i] || !players[i].mo ) continue;
@ -477,7 +478,8 @@ Class Translocator : UTWeapon
if ( bBroken )
{
UTMainHandler.DoFlash(self,Color(255,255,255,255),50);
A_PlaySound("transloc/spark",CHAN_WEAPON);
for ( int i=0; i<3; i++ )
A_StartSound("transloc/spark",CHAN_WEAPONMISC,CHANF_OVERLAP);
DamageMobj(invoker,self,int.max,'Telefrag',DMG_THRUSTLESS);
}
}

View file

@ -1,3 +1,14 @@
// constants for extra sound stuff, all starting at 0x4360 (436 was the last official UT version)
const CHAN_ANNOUNCER = 0x4360; // announcer voices
const CHAN_FOOTSTEP = 0x4361; // footsteps and splashes (should have OVERLAP flag)
const CHAN_LEFTWEAPON = 0x4362; // for dual wielded weapons
const CHAN_WEAPONMISC = 0x4363; // extra sounds (e.g.: idle loops)
const CHAN_LEFTWEAPONMISC = 0x4364; // ... for dual wielded weapons
const CHAN_POWERUP = 0x4365; // powerup/item use sounds
const CHAN_POWERUP2 = 0x4366; // auxiliary powerup sounds
const CHAN_POWERUP3 = 0x4367; // even more powerup sounds (used by jump boots, mainly)
const CHAN_POWERUP4 = 0x4368; // even more (used by shield belt / invuln hit sounds)
Class UTPlayer : DoomPlayer
{
bool doprintnoammo;
@ -288,7 +299,7 @@ Class UTPlayer : DoomPlayer
{
double vol = clamp((-lastvelz-8)*0.05,0.01,1.0);
if ( ((waterlevel > 0) || GetFloorTerrain().IsLiquid) && !bOnMobj ) PlaySplash(vol);
else A_PlaySound("*uland",CHAN_AUTO,vol);
else A_StartSound("*uland",CHAN_FOOTSTEP,CHANF_OVERLAP,vol);
PlayLanding();
}
else forcefootstep = true;
@ -491,7 +502,7 @@ Class UTPlayer : DoomPlayer
}
bOnMobj = false;
if ( !(player.cheats&CF_PREDICTING) )
A_PlaySound("*jump",CHAN_BODY);
A_StartSound("*jump",CHAN_VOICE);
if ( player.cheats & CF_REVERTPLEASE )
{
player.cheats &= ~CF_REVERTPLEASE;
@ -701,7 +712,7 @@ Class UTPlayer : DoomPlayer
bOnMobj = false;
player.jumpTics = -1;
if ( !(player.cheats&CF_PREDICTING) )
A_PlaySound("*jump",CHAN_BODY);
A_StartSound("*jump",CHAN_VOICE);
}
last_jump_held = gametic;
}
@ -770,7 +781,7 @@ Class UTPlayer : DoomPlayer
virtual void PlayFootstep( double vol )
{
A_PlaySound("ut/playerfootstep",CHAN_AUTO,vol);
A_StartSound("ut/playerfootstep",CHAN_FOOTSTEP,CHANF_OVERLAP,vol);
}
virtual void PlaySplash( double vol )
@ -791,7 +802,7 @@ Class UTPlayer : DoomPlayer
snd = "ut/slimesplash";
break;
}
A_PlaySound(snd,CHAN_AUTO,vol);
A_StartSound(snd,CHAN_FOOTSTEP,CHANF_OVERLAP,vol);
}
virtual void PlaySurface()
@ -812,7 +823,7 @@ Class UTPlayer : DoomPlayer
snd = "ut/slimesurface";
break;
}
A_PlaySound(snd,CHAN_AUTO);
A_StartSound(snd,CHAN_FOOTSTEP,CHANF_OVERLAP);
}
virtual void PlayWetFootstep( double vol )
@ -833,7 +844,7 @@ Class UTPlayer : DoomPlayer
snd = "ut/playerfootstepslime";
break;
}
A_PlaySound(snd,CHAN_AUTO,vol);
A_StartSound(snd,CHAN_FOOTSTEP,CHANF_OVERLAP,vol);
}
override void PlayIdle()
@ -1052,7 +1063,7 @@ Class UTPlayer : DoomPlayer
return;
}
vel = (0,0,0);
A_PlaySound ("misc/icebreak",CHAN_BODY);
A_StartSound("misc/icebreak");
// [RH] In Hexen, this creates a random number of shards (range [24,56])
// with no relation to the size of the self shattering. I think it should
// base the number of shards on the size of the dead thing, so bigger
@ -1080,19 +1091,19 @@ Class UTPlayer : DoomPlayer
void A_PainDT()
{
if ( waterlevel > 2 ) A_PlaySound("*death-drowning",CHAN_VOICE);
if ( waterlevel > 2 ) A_StartSound("*death-drowning",CHAN_VOICE);
else A_Pain();
}
void A_PlayerScreamDT()
{
if ( waterlevel > 2 ) A_PlaySound("*death-drowning",CHAN_VOICE);
if ( waterlevel > 2 ) A_StartSound("*death-drowning",CHAN_VOICE);
else A_PlayerScream();
}
void A_XScreamDT()
{
if ( waterlevel > 2 ) A_PlaySound("*death-drowning",CHAN_VOICE);
if ( waterlevel > 2 ) A_StartSound("*death-drowning",CHAN_VOICE);
else A_XScream();
}
@ -1334,7 +1345,7 @@ Class UTUnderSound : Actor
fluidsounds[1] = 'ut/underslime';
fluidsounds[2] = 'ut/underlava';
fluidsounds[3] = 'ut/undernitro';
A_PlaySound(fluidsounds[curfluid],CHAN_VOICE|CHAN_LISTENERZ,1.,true,0.);
A_StartSound(fluidsounds[curfluid],CHAN_VOICE,CHANF_LOOPING|CHANF_LISTENERZ,1.,0.);
A_SoundVolume(CHAN_VOICE,(players[consoleplayer].camera==target)?1.:0.);
}
override void OnDestroy()
@ -1353,7 +1364,7 @@ Class UTUnderSound : Actor
SetOrigin(target.pos,true);
curfluid = GetFluid();
if ( curfluid != lastfluid )
A_PlaySound(fluidsounds[curfluid],CHAN_VOICE|CHAN_LISTENERZ,1.,true,0.);
A_StartSound(fluidsounds[curfluid],CHAN_VOICE,CHANF_LOOPING|CHANF_LISTENERZ,1.,0.);
lastfluid = curfluid;
A_SoundVolume(CHAN_VOICE,(players[consoleplayer].camera==target)?1.:0.);
}
@ -1540,7 +1551,7 @@ Class FlameExplosion : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
A_PlaySound("ut/lavaex",CHAN_VOICE);
A_StartSound("ut/lavaex",CHAN_VOICE);
Spawn("SlugSmoke",pos);
Spawn("SlugLight",pos);
}
@ -1743,7 +1754,7 @@ Class UTPlayerTBoss : UTPlayer
override void PlayFootstep( double vol )
{
if ( !bossfootsteps ) bossfootsteps = CVar.GetCVar('flak_bossfootsteps',players[consoleplayer]);
if ( bossfootsteps.GetBool() ) A_PlaySound("ut/bossfootstep",CHAN_5,vol);
if ( bossfootsteps.GetBool() ) A_StartSound("ut/bossfootstep",CHAN_FOOTSTEP,CHANF_OVERLAP,vol);
else Super.PlayFootstep(vol);
}
States
@ -1810,12 +1821,20 @@ Class UTWeapon : Weapon
override void DetachFromOwner()
{
Owner.A_StopSound(CHAN_WEAPON);
Owner.A_StopSound(CHAN_WEAPONMISC);
Owner.A_StopSound(CHAN_LEFTWEAPON);
Owner.A_StopSound(CHAN_LEFTWEAPONMISC);
Super.DetachFromOwner();
}
override void OwnerDied()
{
if ( Owner.player && (Owner.player.ReadyWeapon == self) )
{
Owner.A_StopSound(CHAN_WEAPON);
Owner.A_StopSound(CHAN_WEAPONMISC);
Owner.A_StopSound(CHAN_LEFTWEAPON);
Owner.A_StopSound(CHAN_LEFTWEAPONMISC);
}
A_ClearRefire();
Super.OwnerDied();
}
@ -1991,7 +2010,7 @@ Class UTTeleportFog : Actor
{
Super.PostBeginPlay();
Spawn("UTTeleportLight",Vec3Offset(0,0,16));
A_PlaySound ("misc/teleport");
A_StartSound("misc/teleport");
Spawn("UTTeleportParticles",Vec3Offset(0,0,16));
}
States
@ -2491,7 +2510,7 @@ Class ShredCorpseHitbox : Actor
{
if ( wasonair )
{
A_PlaySound("misc/corpsefall",CHAN_BODY,clamp(-lastvel.z*0.2,0.1,1.0));
A_StartSound("misc/corpsefall",CHAN_BODY,CHANF_DEFAULT,clamp(-lastvel.z*.2,.1,1.));
if ( lastvel.z < -20 ) DamageMobj(null,null,int.max,'Falling');
}
wasonair = false;
@ -2908,24 +2927,26 @@ Class QueuedFlash
Class UTStaticHandler : StaticEventHandler
{
ui TextureID tex[2];
ui TextureID tex[3];
ui void StartMenu()
{
tex[0] = TexMan.CheckForTexture("DTLogo",TexMan.Type_Any);
tex[1] = TexMan.CheckForTexture("graphics/DTLogo.png",TexMan.Type_Any);
CVar protomenu = CVar.GetCVar('flak_protomenu',players[consoleplayer]);
if ( !protomenu ) return; // this can happen
int proto = protomenu.GetInt();
if ( proto )
{
tex[1] = TexMan.CheckForTexture("protobg",TexMan.Type_Any);
tex[0] = TexMan.CheckForTexture("graphics/UTProtoBg.png",TexMan.Type_Any);
tex[2] = TexMan.CheckForTexture("graphics/protobg.png",TexMan.Type_Any);
if ( gamestate != GS_TITLELEVEL ) return;
if ( proto > 1 ) S_ChangeMusic("menu2");
else S_ChangeMusic("xyzdMenu");
}
else
{
tex[1] = TexMan.CheckForTexture("finalbg",TexMan.Type_Any);
tex[0] = TexMan.CheckForTexture("graphics/UTBg.png",TexMan.Type_Any);
tex[2] = TexMan.CheckForTexture("graphics/finalbg.png",TexMan.Type_Any);
if ( gamestate != GS_TITLELEVEL ) return;
S_ChangeMusic("utmenu23");
}
@ -2948,22 +2969,26 @@ Class UTStaticHandler : StaticEventHandler
Vector2 tsize = TexMan.GetScaledSize(tex[0]);
double sar = tsize.x/tsize.y;
Vector2 vsize;
if ( sar > ar ) vsize = (tsize.y*ar,tsize.y);
else if ( sar < ar ) vsize = (tsize.x,tsize.x/ar);
else vsize = tsize;
Screen.DrawTexture(tex[0],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true);
tsize = TexMan.GetScaledSize(tex[1]);
sar = tsize.x/tsize.y;
if ( sar > ar ) vsize = (tsize.x,tsize.x/ar);
else if ( sar < ar ) vsize = (tsize.y*ar,tsize.y);
else vsize = tsize;
Screen.Dim("Black",1.0,0,0,Screen.GetWidth(),Screen.GetHeight());
Screen.DrawTexture(tex[0],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true);
Screen.DrawTexture(tex[1],false,(vsize.x-tsize.x)/2,(vsize.y-tsize.y)/2,DTA_VirtualWidthF,vsize.x,DTA_VirtualHeightF,vsize.y,DTA_KeepRatio,true);
}
override void RenderOverlay( RenderEvent e )
{
// well this if sure is a long one
if ( players[consoleplayer].camera.player && players[consoleplayer].camera.player.ReadyWeapon && (players[consoleplayer].camera.player.ReadyWeapon is 'UTWeapon') )
UTWeapon(players[consoleplayer].camera.player.ReadyWeapon).RenderOverlay(e);
if ( !menuactive || (Menu.GetCurrentMenu() is 'ConversationMenu') ) return;
if ( !CVar.GetCVar('flak_showmenu',players[consoleplayer]).GetBool() ) return;
Screen.Dim("Black",1.0,0,0,Screen.GetWidth(),Screen.GetHeight());
Screen.DrawTexture(tex[1],true,0,0,DTA_VirtualWidth,1024,DTA_VirtualHeight,768);
Screen.Dim("Black",1.,0,0,Screen.GetWidth(),Screen.GetHeight());
Screen.DrawTexture(tex[2],true,0,0,DTA_VirtualWidth,1024,DTA_VirtualHeight,768);
}
}
@ -3086,7 +3111,7 @@ Class UTMainHandler : EventHandler
else if ( e.Replacee == 'RadSuit' ) e.Replacement = 'UTJumpBoots';
else if ( (e.Replacee == 'ArtiFly') || (e.Replacee == 'ArtiSpeedBoots') ) e.Replacement = 'ActJumpBoots';
else if ( (e.Replacee == 'Backpack') || (e.Replacee == 'BagOfHolding') || (e.Replacee == 'ArtiHealingRadius') ) e.Replacement = 'UTBackpack';
else if ( (e.Replacee == 'ArmorBonus') || (e.Replacee == 'ArtiTimeBomb') || (e.Replacee is 'ArtiPoisonBag') || (e.Replacee is 'ArtiBlastRadius') ) e.Replacement = 'UTArmorBonus';
else if ( (e.Replacee == 'ArmorBonus') || (e.Replacee == 'ArtiTimeBomb') || (e.Replacee == 'ArtiBlastRadius') ) e.Replacement = 'UTArmorBonus';
else if ( (e.Replacee == 'HealthBonus') || (e.Replacee == 'CrystalVial') ) e.Replacement = 'UTHealthBonus';
else if ( (e.Replacee == 'GreenArmor') || (e.Replacee == 'AmuletOfWarding') || (e.Replacee == 'PlatinumHelm') ) e.Replacement = 'UTThighPads';
else if ( e.Replacee == 'Silvershield' )
@ -3145,7 +3170,7 @@ Class UTMainHandler : EventHandler
else if ( e.Replacee == 'FWeaponPiece1' ) e.Replacement = 'WarheadAmmo';
else if ( e.Replacee == 'CWeaponPiece1' ) e.Replacement = 'UTBackpack';
else if ( (e.Replacee == 'MWeaponPiece1') || (e.Replacee == 'MWeapBloodscourge') || (e.Replacee.GetClassName() == 'mkFullBloodscourge') ) e.Replacement = 'WarheadLauncher';
else if ( e.Replacee == 'Mana1' ) e.Replacement = 'UTMinorAmmoBox';
else if ( (e.Replacee == 'Mana1') || (e.Replacee is 'ArtiPoisonBag') ) e.Replacement = 'UTMinorAmmoBox';
else if ( e.Replacee == 'Mana2' ) e.Replacement = 'UTMediumAmmoBox';
else if ( e.Replacee == 'Mana3' ) e.Replacement = 'UTMajorAmmoBox';
else if ( e.Replacee == 'ArtiBoostMana' ) e.Replacement = 'ActUTFullAmmoBox';
@ -3167,7 +3192,7 @@ Class UTMainHandler : EventHandler
{
Actor a = Actor.Spawn("MapSpot",pos);
if ( !a ) return null;
a.A_PlaySound(snd,CHAN_BODY,volume,true,attenuation);
a.A_StartSound(snd,CHAN_BODY,CHANF_LOOPING,volume,attenuation);
return a;
}
@ -3585,15 +3610,15 @@ Class UTMainHandler : EventHandler
{
if ( !(gframe%11) && gframe < 160 )
{
S_Sound("ut/malejump",CHAN_VOICE|CHAN_UI,(gframe>100)?.5:1.);
S_Sound("ut/malejump",CHAN_WEAPON|CHAN_UI,(gframe>100)?.5:1.);
S_StartSound("ut/malejump",CHAN_VOICE,CHANF_UI|CHANF_MAYBE_LOCAL,(gframe>100)?.5:1.);
S_StartSound("ut/malejump",CHAN_WEAPON,CHANF_UI|CHANF_MAYBE_LOCAL,(gframe>100)?.5:1.);
}
if ( ((gframe >= 37) && (gframe < 49) && !((gframe-37)%3))
|| ((gframe >= 89) && (gframe < 101) && !((gframe-89)%3))
|| ((gframe >= 141) && (gframe < 153) && !((gframe-141)%3)) )
{
S_Sound("ut/land",CHAN_BODY|CHAN_UI,(gframe>100)?.5:1.);
S_Sound("ut/land",CHAN_ITEM|CHAN_UI,(gframe>100)?.5:1.);
S_StartSound("ut/land",CHAN_BODY,CHANF_UI|CHANF_MAYBE_LOCAL,(gframe>100)?.5:1.);
S_StartSound("ut/land",CHAN_ITEM,CHANF_UI|CHANF_MAYBE_LOCAL,(gframe>100)?.5:1.);
}
gframe++;
}

View file

@ -284,7 +284,7 @@ Class UTGibber : Actor
States
{
Spawn:
TNT1 A 0 NoDelay A_PlaySound("misc/gibbed");
TNT1 A 0 NoDelay A_StartSound("misc/gibbed");
TNT1 A 1 BurstGibs();
Wait;
}
@ -491,7 +491,7 @@ Class UTGib : Actor
if ( tracer ) tracer.Destroy();
}
else if ( spd > 20 ) vel *= 0.8;
A_PlaySound("misc/gibp");
A_StartSound("misc/gibp");
double ang, pt;
int max = flak_blood?6:2;
for ( int i=0; i<max; i++ )

View file

@ -1088,7 +1088,7 @@ Class UTHud : BaseStatusBar
{
PickupMsg = CPlayer.mo.InvSel.GetTag();
PickupMsgTic = gametic+50;
S_Sound("misc/hud_sel",CHAN_UI);
S_StartSound("misc/hud_sel",CHAN_BODY,CHANF_UI|CHANF_MAYBE_LOCAL);
}
}
if ( CPlayer.inventorytics > 0 ) justselected = false;
@ -1097,7 +1097,7 @@ Class UTHud : BaseStatusBar
if ( !justselected && CPlayer.mo.InvSel )
{
Console.Printf(StringTable.Localize("$M_ISELECT"),CPlayer.mo.InvSel.GetTag());
S_Sound("misc/hud_sel",CHAN_UI);
S_StartSound("misc/hud_sel",CHAN_BODY,CHANF_UI|CHANF_MAYBE_LOCAL);
}
justselected = true;
}

View file

@ -43,7 +43,7 @@ Class ShockWave : Actor
override void PostBeginPlay()
{
lifespan = ReactionTime;
A_PlaySound("warhead/explode",CHAN_VOICE,attenuation:ATTN_NONE);
A_StartSound("warhead/explode",CHAN_VOICE,attenuation:ATTN_NONE);
A_QuakeEx(9,9,9,100,0,12000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:1200,rollIntensity:0.5);
}
override void Tick()
@ -250,7 +250,7 @@ Class WarShell : Actor
l.target = self;
b = Spawn("WarheadHitbox",pos);
b.target = self;
A_PlaySound("warhead/fly",CHAN_VOICE,1.0,true);
A_StartSound("warhead/fly",CHAN_VOICE,CHANF_LOOPING);
destangle = angle;
destpitch = pitch;
}
@ -306,7 +306,7 @@ Class WarShell : Actor
A_Explode(1000,180);
A_SprayDecal("BigBlast");
A_QuakeEx(8,8,8,20,0,300,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.35);
A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5);
A_StartSound("shock/hit",CHAN_VOICE,attenuation:0.5);
A_AlertMonsters();
A_SetRenderStyle(1.0,STYLE_Add);
Spawn("WarheadExplodLight",pos);
@ -320,7 +320,7 @@ Class WarShell : Actor
A_Explode(1000,220);
A_SprayDecal("BigBlast");
A_QuakeEx(8,8,8,20,0,300,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.35);
A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5);
A_StartSound("shock/hit",CHAN_VOICE,attenuation:0.5);
A_AlertMonsters();
A_SetRenderStyle(1.0,STYLE_Add);
Spawn("WarheadExplodLight",pos);
@ -352,7 +352,7 @@ Class GuidedWarShell : WarShell
{
Super.PostBeginPlay();
if ( target && target.player ) target.player.camera = self;
A_PlaySound("warhead/altfire",CHAN_WEAPON,local:true);
A_StartSound("warhead/altfire",CHAN_WEAPON,CHANF_LOCAL);
justleft = true;
}
override void Tick()
@ -682,7 +682,7 @@ Class WarheadLauncher : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
A_PlaySound("warhead/fire",CHAN_WEAPON);
A_StartSound("warhead/fire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(128,255,128,128),1);
UTMainHandler.DoSwing(self,(FRandom[Warhead](0.6,1.2),FRandom[Warhead](0.2,0.5)),4,-1,3,SWING_Spring,2,5);
@ -722,7 +722,7 @@ Class WarheadLauncher : UTWeapon
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
A_PlaySound("warhead/altfire",CHAN_WEAPON);
A_StartSound("warhead/altfire",CHAN_WEAPON,CHANF_OVERLAP);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(128,255,128,128),1);
A_AlertMonsters();