diff --git a/Readme.md b/Readme.md index c23c852..8305b6f 100644 --- a/Readme.md +++ b/Readme.md @@ -59,15 +59,16 @@ This mod requires GZDoom 4.2.4 or later. - Liquid splashes - Original Invulnerability and Night Vision items - Hexen compatibility + - Fancy titlemap + - Semi-accurate UT sound behaviour ## In progress - - N/A, this is the 1.1 release. + - N/A this is the 1.1.1 release. ## Planned - Stuff for 1.2 - - Fancy titlemap with intro narration. - Touch up blood/gibbing features. At the moment, Nashgore is still a superior alternative. - Help screens describing items and stuff (maybe?). diff --git a/gldefs.txt b/gldefs.txt index f1b9e19..1985c2f 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -882,6 +882,16 @@ HardwareShader Texture "models/S_Ammo.png" Shader "shaders/glsl/AmbientGlow_Brightmapped.fp" Texture brighttex "brightmaps/S_Ammo.png" } +HardwareShader Texture "graphics/UTBg.png" +{ + Shader "shaders/glsl/UTBg.fp" + Texture starstex "graphics/UTBg_Stars.png" + Texture moontex "graphics/UTBg_Moon.png" +} +HardwareShader Texture "graphics/UTProtoBg.png" +{ + Shader "shaders/glsl/UTProtoBg.fp" +} // PP shaders HardwareShader PostProcess scene { diff --git a/graphics/DTLogo.png b/graphics/DTLogo.png index c237da3..057cfca 100644 Binary files a/graphics/DTLogo.png and b/graphics/DTLogo.png differ diff --git a/graphics/UTBg.png b/graphics/UTBg.png new file mode 100644 index 0000000..405c93e Binary files /dev/null and b/graphics/UTBg.png differ diff --git a/graphics/UTBg_Moon.png b/graphics/UTBg_Moon.png new file mode 100644 index 0000000..ef9946b Binary files /dev/null and b/graphics/UTBg_Moon.png differ diff --git a/graphics/UTBg_Stars.png b/graphics/UTBg_Stars.png new file mode 100644 index 0000000..ccfde8e Binary files /dev/null and b/graphics/UTBg_Stars.png differ diff --git a/graphics/UTProtoBg.png b/graphics/UTProtoBg.png new file mode 100644 index 0000000..63359e9 Binary files /dev/null and b/graphics/UTProtoBg.png differ diff --git a/menudef.txt b/menudef.txt index baad1b1..510af6b 100644 --- a/menudef.txt +++ b/menudef.txt @@ -98,9 +98,9 @@ OptionMenu "UTCreditsMenu" StaticText "Epic Games", "White" StaticText " " StaticText "$FLAK_CPATRON", "Gold" - StaticText "Aisamai, Alexa Jones-Gonzales, Jonas Höglund,", "White" - StaticText "Zard1084, Jonathan Nemo, NekoMithos, 3d0xp0xy", "White" - StaticText "Xada Xephron, m8f, john", "White" + StaticText "john, Alexa Jones-Gonzales, Jonas Höglund,", "White" + StaticText "Xada Xephron, Zard1084, Jonathan Nemo,", "White" + StaticText "NekoMithos, m8f, 3d0xp0xy", "White" StaticText " " StaticText "$FLAK_CTHANK", "Gold" StaticText "KynikossDragonn, Raffine52, KeksDose, Skerion", "White" @@ -132,4 +132,4 @@ OptionMenu "UTCreditsMenu" StaticText "$FLAK_CBIZ", "Gold" StaticText "Jay Wilbur, Mark Rein", "White" StaticText " " -} \ No newline at end of file +} diff --git a/shaders/glsl/utbg.fp b/shaders/glsl/utbg.fp new file mode 100644 index 0000000..1ef854c --- /dev/null +++ b/shaders/glsl/utbg.fp @@ -0,0 +1,21 @@ +vec4 ProcessTexel() +{ + vec2 uv = vTexCoord.st; + vec2 ccoord = uv-vec2(.5,1.1); + ccoord.y = abs(ccoord.y); + vec3 pt = vec3(ccoord.x,ccoord.y-1.,ccoord.y); + vec2 proj = pt.xy/pt.z; + vec2 coord = uv*4.; + vec3 bcol = texture(starstex,fract(coord)).rgb; + coord = uv*1.5; + coord = (coord-vec2(.8,.3))*2.; + vec4 mcol = texture(moontex,coord); + bcol = mix(bcol*.3,mcol.rgb*.7,mcol.a); + coord = proj*.5+vec2(-.5,-1.)*timer*.1; + coord = fract(coord); + vec3 col = getTexel(coord).rgb; + col *= mix(vec3(1.9,.4,.2),vec3(1.),pow(pt.z,.5)); + col *= mix(vec3(1.3,.5,.3),vec3(1.),pow(pt.x+.8,.5)); + col *= mix(vec3(1.1,1.4,1.3),vec3(.3),clamp(1.3*pow(distance(pt.xy,vec2(.2,-.25)),.9),0.,1.)); + return vec4(bcol+col,1.); +} diff --git a/shaders/glsl/utprotobg.fp b/shaders/glsl/utprotobg.fp new file mode 100644 index 0000000..73ebc31 --- /dev/null +++ b/shaders/glsl/utprotobg.fp @@ -0,0 +1,22 @@ +// based on https://www.shadertoy.com/view/Ms2SWW + +vec4 ProcessTexel() +{ + vec2 uv = vTexCoord.st; + vec2 p = 2.*(uv-.5); + p.x += sin(timer*.2)*.3; + p.y += cos(timer*.2)*.3; + float a = atan(p.y,p.x); + a += timer*.1; + float r = length(p); + vec2 ccoord = fract(vec2(.25/r+.1*timer,a/3.14169265)*4.); + vec3 col = getTexel(ccoord).rgb; + a += .125*3.14159265; + ccoord = fract(vec2(.25/r+.05*timer,a/3.14169265)*4.); + col += getTexel(ccoord).rgb; + col *= vec3(.3,.6,1.); + col += pow(max(0.,1.2-r),1.5); + col *= vec3(1.,1.2,1.5); + col = clamp(col,vec3(0.),vec3(1.)); + return vec4(col,1.); +} diff --git a/sounds/intro/bane.ogg b/sounds/intro/bane.ogg deleted file mode 100644 index a9ce3d2..0000000 Binary files a/sounds/intro/bane.ogg and /dev/null differ diff --git a/sounds/intro/betaintro0.ogg b/sounds/intro/betaintro0.ogg deleted file mode 100644 index b09f2c8..0000000 Binary files a/sounds/intro/betaintro0.ogg and /dev/null differ diff --git a/sounds/intro/betaintro1.ogg b/sounds/intro/betaintro1.ogg deleted file mode 100644 index 7edd715..0000000 Binary files a/sounds/intro/betaintro1.ogg and /dev/null differ diff --git a/sounds/intro/betaintro2.ogg b/sounds/intro/betaintro2.ogg deleted file mode 100644 index 50dd4ec..0000000 Binary files a/sounds/intro/betaintro2.ogg and /dev/null differ diff --git a/sounds/intro/betaintro3.ogg b/sounds/intro/betaintro3.ogg deleted file mode 100644 index 6e9b635..0000000 Binary files a/sounds/intro/betaintro3.ogg and /dev/null differ diff --git a/sounds/intro/betaintro4.ogg b/sounds/intro/betaintro4.ogg deleted file mode 100644 index e639e2d..0000000 Binary files a/sounds/intro/betaintro4.ogg and /dev/null differ diff --git a/sounds/intro/betaintro5.ogg b/sounds/intro/betaintro5.ogg deleted file mode 100644 index 6c9e92d..0000000 Binary files a/sounds/intro/betaintro5.ogg and /dev/null differ diff --git a/sounds/intro/betaintro6.ogg b/sounds/intro/betaintro6.ogg deleted file mode 100644 index 112e7b0..0000000 Binary files a/sounds/intro/betaintro6.ogg and /dev/null differ diff --git a/sounds/intro/betaintro7.ogg b/sounds/intro/betaintro7.ogg deleted file mode 100644 index 02eb988..0000000 Binary files a/sounds/intro/betaintro7.ogg and /dev/null differ diff --git a/sounds/intro/betaintro8.ogg b/sounds/intro/betaintro8.ogg deleted file mode 100644 index dead9e6..0000000 Binary files a/sounds/intro/betaintro8.ogg and /dev/null differ diff --git a/sounds/intro/miner.ogg b/sounds/intro/miner.ogg deleted file mode 100644 index 955b68d..0000000 Binary files a/sounds/intro/miner.ogg and /dev/null differ diff --git a/sounds/intro/openingv.ogg b/sounds/intro/openingv.ogg deleted file mode 100644 index 8041b28..0000000 Binary files a/sounds/intro/openingv.ogg and /dev/null differ diff --git a/zscript.txt b/zscript.txt index 8bc5fa1..f5b9ff3 100644 --- a/zscript.txt +++ b/zscript.txt @@ -1,4 +1,4 @@ -version "4.2.4" +version "4.3" #include "zscript/dt_libeye/projector.txt" #include "zscript/dt_libeye/projector gl.txt" @@ -6,8 +6,8 @@ version "4.2.4" #include "zscript/dt_libeye/viewport.txt" #include "zscript/dt_coordutil.zsc" #include "zscript/dt_quaternion.zsc" -#include "zscript/utgore.zsc" #include "zscript/utcommon.zsc" +#include "zscript/utgore.zsc" #include "zscript/impacthammer.zsc" #include "zscript/chainsaw.zsc" #include "zscript/translocator.zsc" diff --git a/zscript/armoritems.zsc b/zscript/armoritems.zsc index 3cc5fa0..3240559 100644 --- a/zscript/armoritems.zsc +++ b/zscript/armoritems.zsc @@ -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); diff --git a/zscript/biorifle.zsc b/zscript/biorifle.zsc index 6603350..d701ab8 100644 --- a/zscript/biorifle.zsc +++ b/zscript/biorifle.zsc @@ -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 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); diff --git a/zscript/compat.zsc b/zscript/compat.zsc index 5a0b4b1..1ba3b2b 100644 --- a/zscript/compat.zsc +++ b/zscript/compat.zsc @@ -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; diff --git a/zscript/eightball.zsc b/zscript/eightball.zsc index 7ea87e4..374f81d 100644 --- a/zscript/eightball.zsc +++ b/zscript/eightball.zsc @@ -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; diff --git a/zscript/enforcer.zsc b/zscript/enforcer.zsc index bd3fb3f..137c38a 100644 --- a/zscript/enforcer.zsc +++ b/zscript/enforcer.zsc @@ -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 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); diff --git a/zscript/impacthammer.zsc b/zscript/impacthammer.zsc index d5053df..9ea9f3b 100644 --- a/zscript/impacthammer.zsc +++ b/zscript/impacthammer.zsc @@ -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; diff --git a/zscript/minigun.zsc b/zscript/minigun.zsc index 67dea94..c19e721 100644 --- a/zscript/minigun.zsc +++ b/zscript/minigun.zsc @@ -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; diff --git a/zscript/powerups.zsc b/zscript/powerups.zsc index c2dac03..f4d037b 100644 --- a/zscript/powerups.zsc +++ b/zscript/powerups.zsc @@ -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 ) { diff --git a/zscript/pulsegun.zsc b/zscript/pulsegun.zsc index 190db1e..2dd188f 100644 --- a/zscript/pulsegun.zsc +++ b/zscript/pulsegun.zsc @@ -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(); } diff --git a/zscript/ripper.zsc b/zscript/ripper.zsc index 0a534df..10a8a31 100644 --- a/zscript/ripper.zsc +++ b/zscript/ripper.zsc @@ -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(); diff --git a/zscript/shockrifle.zsc b/zscript/shockrifle.zsc index 1c3345c..1b585ad 100644 --- a/zscript/shockrifle.zsc +++ b/zscript/shockrifle.zsc @@ -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 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; diff --git a/zscript/translocator.zsc b/zscript/translocator.zsc index b36e932..5c924e8 100644 --- a/zscript/translocator.zsc +++ b/zscript/translocator.zsc @@ -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= 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 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++; } diff --git a/zscript/utgore.zsc b/zscript/utgore.zsc index 550abef..920f593 100644 --- a/zscript/utgore.zsc +++ b/zscript/utgore.zsc @@ -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 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; } diff --git a/zscript/warheadlauncher.zsc b/zscript/warheadlauncher.zsc index 5be2455..bc5697f 100644 --- a/zscript/warheadlauncher.zsc +++ b/zscript/warheadlauncher.zsc @@ -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();