Whole set of new features:

- Spent mags for Enforcer, Flak Cannon and Pulsegun.
- Fixed up bullet casing orientations.
- Terrain stuff (WIP).
This commit is contained in:
Marisa the Magician 2019-10-16 18:03:00 +02:00
commit da49775e7d
29 changed files with 568 additions and 10 deletions

View file

@ -9,6 +9,21 @@ Model "EClip"
FrameIndex ECLP A 0 0 FrameIndex ECLP A 0 0
} }
Model "EnforcerMag"
{
Path "models"
Model 0 "UsedMag_d.3d"
Skin 0 "jautot1_.png"
Scale 0.06 0.06 0.072
ZOffset 1
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 1
FrameIndex PCAS A 0 0
}
Model "UTCasing" Model "UTCasing"
{ {
Path "models" Path "models"
@ -20,7 +35,6 @@ Model "UTCasing"
ZOffset 1 ZOffset 1
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
DONTCULLBACKFACES
USEROTATIONCENTER USEROTATIONCENTER
Rotation-Center 0 0 1 Rotation-Center 0 0 1

View file

@ -182,6 +182,22 @@ Model "FlakChunk"
FrameIndex FCH4 L 3 0 FrameIndex FCH4 L 3 0
} }
Model "FlakMag"
{
Path "models"
Model 0 "UsedFlak_d.3d"
Skin 0 "flak_t_.png"
Scale 0.15 0.3 0.36
AngleOffset 90
ZOffset 1
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 1
FrameIndex PCAS A 0 0
}
Model "FlakCannon" Model "FlakCannon"
{ {
Path "models" Path "models"

View file

@ -55,6 +55,21 @@ Model "StarterBolt"
FrameIndex PBLT E 0 0 FrameIndex PBLT E 0 0
} }
Model "PulseMag"
{
Path "models"
Model 0 "UsedPulse_d.3d"
Skin 0 "JPulseGun_02.png"
Scale 0.2 0.2 0.24
ZOffset 2
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 2
FrameIndex PCAS A 0 0
}
Model "PulseGun" Model "PulseGun"
{ {
Path "models" Path "models"

BIN
models/Flak_t_.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
models/Jautot1_.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
models/UsedFlak_a.3d Normal file

Binary file not shown.

BIN
models/UsedFlak_d.3d Normal file

Binary file not shown.

BIN
models/UsedMag_a.3d Normal file

Binary file not shown.

BIN
models/UsedMag_d.3d Normal file

Binary file not shown.

BIN
models/UsedPulse_a.3d Normal file

Binary file not shown.

BIN
models/UsedPulse_d.3d Normal file

Binary file not shown.

View file

@ -166,9 +166,27 @@ $random ut/playerfootstep { ut/playerfootstep1 ut/playerfootstep2 ut/playerfoots
ut/bossfootstep bfootstp ut/bossfootstep bfootstp
// fluid sounds
ut/playerfootstepwet lsplash ut/playerfootstepwet lsplash
ut/wetsplash dsplash ut/wetsplash dsplash
ut/wetsurface wtrexit1 ut/wetsurface wtrexit1
ut/underwater uwater1a
ut/playerfootstepslime dsslime1
ut/slimesplash goopj1
ut/slimesurface goope1
ut/underslime ugoop1
ut/playerfootsteplava dslava1
ut/lavasplash goopj1
ut/lavasurface goope1
ut/underlava ulava1
ut/playerfootstepnitro lsplash
ut/nitrosplash dsplash
ut/nitrosurface wtrexit1
ut/undernitro ulnitro1
// everything else // everything else
@ -232,8 +250,12 @@ enforcer/select cocking
enforcer/shoot e_shot enforcer/shoot e_shot
enforcer/reload reload enforcer/reload reload
enforcer/click click enforcer/click click
enforcer/bounce clipb
$volume enforcer/bounce 0.5
$attenuation enforcer/bounce 3
bullet/casing shell2 bullet/casing shell2
$attenuation bullet/casing 2
bullet/hit1 impact1 bullet/hit1 impact1
bullet/hit2 impact2 bullet/hit2 impact2
$random bullet/hit { bullet/hit1 bullet/hit2 } $random bullet/hit { bullet/hit1 bullet/hit2 }
@ -289,6 +311,9 @@ flak/bounce3 hit3
$random flak/bounce { flak/bounce1 flak/bounce2 flak/bounce3 } $random flak/bounce { flak/bounce1 flak/bounce2 flak/bounce3 }
$limit flak/bounce 64 $limit flak/bounce 64
flak/explode expl04 flak/explode expl04
flak/sbounce chnkhit1
$volume flak/sbounce 0.5
$attenuation flak/sbounce 3
utrl/select selectin utrl/select selectin
utrl/rotate barrelmv utrl/rotate barrelmv

BIN
sounds/ChnkHit1.ogg Normal file

Binary file not shown.

BIN
sounds/GoopE1.ogg Normal file

Binary file not shown.

BIN
sounds/GoopJ1.ogg Normal file

Binary file not shown.

BIN
sounds/clipb.ogg Normal file

Binary file not shown.

BIN
sounds/dslava1.ogg Normal file

Binary file not shown.

BIN
sounds/dsslime1.ogg Normal file

Binary file not shown.

BIN
sounds/uGoop1.ogg Normal file

Binary file not shown.

BIN
sounds/uLNitro1.ogg Normal file

Binary file not shown.

BIN
sounds/uLava1.ogg Normal file

Binary file not shown.

BIN
sounds/uWater1a.ogg Normal file

Binary file not shown.

155
terrain.txt Normal file
View file

@ -0,0 +1,155 @@
// splish sploshes
splash utwater
{
smallclass utwatersplish
smallclip 4
smallsound ut/playerfootstepwet
baseclass utwatersplash
sound ut/wetsplash
}
splash utslime
{
smallclass utslimesplish
smallclip 4
smallsound ut/playerfootstepslime
baseclass utslimesplash
sound ut/slimesplash }
splash utnukage
{
smallclass utnukagesplish
smallclip 4
smallsound ut/playerfootstepslime
baseclass utnukagesplash
sound ut/slimesplash
}
splash utlava
{
smallclass utlavasplish
smallclip 4
smallsound ut/playerfootsteplava
baseclass utlavasplash
sound ut/lavasplash
}
splash utnitro
{
smallclass utnitrosplish
smallclip 4
smallsound ut/playerfootstepnitro
baseclass utnitrosplash
sound ut/nitrosplash
}
splash utblood
{
smallclass utbloodsplish
smallclip 4
smallsound ut/playerfootstepwet
baseclass utbloodsplash
sound ut/wetsplash
}
terrain utwater
{
splash utwater
footclip 6
liquid
}
terrain utslime
{
splash utslime
footclip 6
liquid
}
terrain utnukage
{
splash utnukage
footclip 6
liquid
}
terrain utlava
{
splash utlava
footclip 6
liquid
}
terrain utnitro
{
splash utnitro
footclip 6
liquid
}
terrain utblood
{
splash utblood
footclip 6
liquid
}
ifdoom
floor BLOOD1 UTBlood
floor BLOOD2 UTBlood
floor BLOOD3 UTBlood
floor FWATER1 UTWater
floor FWATER2 UTWater
floor FWATER3 UTWater
floor FWATER4 UTWater
floor LAVA1 UTLava
floor LAVA2 UTLava
floor LAVA3 UTLava
floor LAVA4 UTLava
floor NUKAGE1 UTNukage
floor NUKAGE2 UTNukage
floor NUKAGE3 UTNukage
floor SLIME01 UTSlime
floor SLIME02 UTSlime
floor SLIME03 UTSlime
floor SLIME04 UTSlime
floor SLIME05 UTSlime
floor SLIME06 UTSlime
floor SLIME07 UTSlime
floor SLIME08 UTSlime
endif
ifheretic
floor FLTWAWA1 UTWater
floor FLTFLWW1 UTWater
floor FLTLAVA1 UTLava
floor FLATHUH1 UTLava
floor FLTSLUD1 UTSlime
endif
ifhexen
floor X_005 UTWater
floor X_001 UTLava
floor X_009 UTSlime
endif
ifstrife
floor F_WATR03 UTWater
floor F_WATR02 UTWater
floor F_WATR01 UTWater
floor F_VWATR3 UTWater
floor F_VWATR2 UTWater
floor P_VWATR1 UTWater
floor F_HWATR3 UTWater
floor F_HWATR2 UTWater
floor F_HWATR1 UTWater
floor F_PWATR3 UTWater
floor F_PWATR2 UTWater
floor F_PWATR1 UTWater
endif

View file

@ -167,12 +167,36 @@ Class UTCasing : Actor
PCAS A -1 PCAS A -1
{ {
pitch = 0; pitch = 0;
angle = FRandom[Junk](0,360);
roll = FRandom[Junk](0,360); roll = FRandom[Junk](0,360);
} }
Stop; Stop;
} }
} }
Class EnforcerMag : UTCasing
{
Default
{
BounceSound "enforcer/bounce";
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
heat = 0.;
}
States
{
Death:
PCAS A -1
{
pitch = RandomPick[Junk](-90,90);
angle = FRandom[Junk](0,360);
}
Stop;
}
}
Class Enforcer : UTWeapon Class Enforcer : UTWeapon
{ {
int ClipCount, SlaveClipCount; int ClipCount, SlaveClipCount;
@ -388,6 +412,8 @@ Class Enforcer : UTWeapon
} }
origin = level.Vec3Offset(origin,x*8+ydir*y*6-z*2); origin = level.Vec3Offset(origin,x*8+ydir*y*6-z*2);
let c = Spawn("UTCasing",origin); let c = Spawn("UTCasing",origin);
c.angle = angle;
c.pitch = pitch;
c.vel = x*FRandom[Junk](-1.5,1.5)+y*ydir*FRandom[Junk](2,4)+z*FRandom[Junk](2,3); c.vel = x*FRandom[Junk](-1.5,1.5)+y*ydir*FRandom[Junk](2,4)+z*FRandom[Junk](2,3);
} }
@ -574,6 +600,13 @@ Class Enforcer : UTWeapon
if ( self is 'UTPlayer' ) if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading(); UTPlayer(self).PlayReloading();
invoker.slavereload = (invoker.slaveactive&&(invoker.slaveclipcount<min(invoker.default.slaveclipcount,invoker.Ammo1.Amount))); invoker.slavereload = (invoker.slaveactive&&(invoker.slaveclipcount<min(invoker.default.slaveclipcount,invoker.Ammo1.Amount)));
Vector3 x, y, z, origin;
[x,y,z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),x*4.+y*4.-z*8.);
let c = Spawn("EnforcerMag",origin);
c.angle = angle;
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_PlaySound("enforcer/select",CHAN_WEAPON);
Goto Ready; Goto Ready;
@ -599,6 +632,13 @@ Class Enforcer : UTWeapon
if ( self is 'UTPlayer' ) if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading(); UTPlayer(self).PlayReloading();
invoker.slavereload = false; invoker.slavereload = false;
Vector3 x, y, z, origin;
[x,y,z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),x*4.-y*4.-z*8.);
let c = Spawn("EnforcerMag",origin);
c.angle = angle;
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_PlaySound("enforcer/select",CHAN_6);
Goto LeftReady; Goto LeftReady;

View file

@ -607,6 +607,33 @@ Class FlakLight : DynamicLight
} }
} }
Class FlakMag : UTCasing
{
Default
{
BounceSound "flak/sbounce";
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
if ( special1 )
{
anglevel *= .1;
pitchvel *= .1;
}
}
States
{
Death:
PCAS A -1
{
pitch = RandomPick[Junk](-90,90);
angle = FRandom[Junk](0,360);
}
Stop;
}
}
Class FlakCannon : UTWeapon Class FlakCannon : UTWeapon
{ {
action void A_Loading( bool first = false ) action void A_Loading( bool first = false )
@ -714,6 +741,11 @@ Class FlakCannon : UTWeapon
s.scale *= 2.4; s.scale *= 2.4;
s.alpha *= 0.5; s.alpha *= 0.5;
} }
let c = Spawn("FlakMag",origin);
c.angle = angle;
c.pitch = BulletSlope();
c.vel = x*FRandom[Junk](15.,20.)+y*FRandom[Junk](-.1,.1)+z*FRandom[Junk](.1,.8);
c.special1 = 1;
} }
Default Default
@ -756,7 +788,16 @@ Class FlakCannon : UTWeapon
Fire: Fire:
FLKF A 1 A_FireChunks(); FLKF A 1 A_FireChunks();
FLKF BCDEFGHI 1; FLKF BCDEFGHI 1;
FLKF J 4; FLKF J 4
{
Vector3 x, y, z, origin;
[x,y,z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),x*4.+y*3.-z*8.);
let c = Spawn("FlakMag",origin);
c.angle = angle;
c.pitch = pitch;
c.vel = vel*.5+x*FRandom[Junk](-.8,.1)+y*FRandom[Junk](-.2,.2)-z*FRandom[Junk](1,2);
}
Goto Loading; Goto Loading;
AltFire: AltFire:
FLKA A 1 A_FireSlug(); FLKA A 1 A_FireSlug();

View file

@ -172,6 +172,8 @@ Class Minigun : UTWeapon
} }
origin = level.Vec3Offset(origin,x*8+y*5-z*5); origin = level.Vec3Offset(origin,x*8+y*5-z*5);
let c = Spawn("UTCasing",origin); let c = Spawn("UTCasing",origin);
c.angle = angle;
c.pitch = pitch;
c.vel = x*FRandom[Junk](-1.5,1.5)+y*FRandom[Junk](2,4)+z*FRandom[Junk](2,3); c.vel = x*FRandom[Junk](-1.5,1.5)+y*FRandom[Junk](2,4)+z*FRandom[Junk](2,3);
c.Scale *= 0.5; c.Scale *= 0.5;
} }

View file

@ -531,6 +531,31 @@ Class StarterBolt : PulseBolt
} }
} }
Class PulseMag : UTCasing
{
Default
{
BounceSound "enforcer/bounce";
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
heat = 0.;
}
States
{
Death:
PCAS A -1
{
pitch = Normalize180(pitch);
if ( abs(deltaangle(pitch,0)) < 35 ) pitch = 0;
else pitch = (pitch>0)?90:-90;
angle = FRandom[Junk](0,360);
}
Stop;
}
}
Class PulseGun : UTWeapon Class PulseGun : UTWeapon
{ {
int clipcount; int clipcount;
@ -778,7 +803,17 @@ Class PulseGun : UTWeapon
invoker.clipcount = 0; invoker.clipcount = 0;
} }
PGNR QRSTUVWXYZ 1; PGNR QRSTUVWXYZ 1;
PGR2 ABCD 1; PGR2 A 1
{
Vector3 x, y, z, origin;
[x,y,z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),x*4.-y*6.-z*8.);
let c = Spawn("PulseMag",origin);
c.angle = angle;
c.pitch = pitch;
c.vel = vel*.5+x*FRandom[Junk](-.5,.5)+y*FRandom[Junk](-.5,.5)-z*FRandom[Junk](1,2);
}
PGR2 BCD 1;
PGR2 E 1 PGR2 E 1
{ {
invoker.clipcount = Min(invoker.default.clipcount,invoker.Ammo1.Amount); invoker.clipcount = Min(invoker.default.clipcount,invoker.Ammo1.Amount);

View file

@ -171,6 +171,8 @@ Class SniperRifle : UTWeapon
origin = level.Vec3Offset(origin,x*8+y*6-z*9); origin = level.Vec3Offset(origin,x*8+y*6-z*9);
let c = Spawn("UTCasing",origin); let c = Spawn("UTCasing",origin);
c.scale *= 1.25; c.scale *= 1.25;
c.angle = angle;
c.pitch = pitch;
c.vel = x*FRandom[Junk](-1.5,1.5)+y*FRandom[Junk](2,4)+z*FRandom[Junk](2,3); c.vel = x*FRandom[Junk](-1.5,1.5)+y*FRandom[Junk](2,4)+z*FRandom[Junk](2,3);
} }
override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack ) override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack )

View file

@ -11,6 +11,7 @@ Class UTPlayer : DoomPlayer
int last_fm_tap, last_sm_tap; int last_fm_tap, last_sm_tap;
int last_tap_fm, last_tap_sm; int last_tap_fm, last_tap_sm;
int last_jump_held; int last_jump_held;
Actor underwatersnd;
int tempslide; int tempslide;
double ssup; double ssup;
@ -250,7 +251,7 @@ Class UTPlayer : DoomPlayer
if ( lastvelz < -8 ) if ( lastvelz < -8 )
{ {
double vol = clamp((-lastvelz-8)*0.05,0.01,1.0); double vol = clamp((-lastvelz-8)*0.05,0.01,1.0);
if ( ((waterlevel > 0) || GetFloorTerrain().IsLiquid) && !bOnMobj ) A_PlaySound("ut/wetsplash",CHAN_AUTO,vol); if ( ((waterlevel > 0) || GetFloorTerrain().IsLiquid) && !bOnMobj ) PlaySplash(vol);
else A_PlaySound("*uland",CHAN_AUTO,vol); else A_PlaySound("*uland",CHAN_AUTO,vol);
PlayLanding(); PlayLanding();
} }
@ -265,13 +266,20 @@ Class UTPlayer : DoomPlayer
{ {
double vol = abs(vel.xy.length())*0.03; double vol = abs(vel.xy.length())*0.03;
if ( forcefootstep ) vol = clamp(-lastvelz*0.05,0.01,1.0); if ( forcefootstep ) vol = clamp(-lastvelz*0.05,0.01,1.0);
if ( (waterlevel > 0) || GetFloorTerrain().IsLiquid && !bOnMobj ) A_PlaySound("ut/playerfootstepwet",CHAN_5,vol); if ( (waterlevel > 0) || GetFloorTerrain().IsLiquid && !bOnMobj ) PlayWetFootstep(vol);
else PlayFootstep(vol); else PlayFootstep(vol);
} }
if ( (waterlevel >= 2) && (lastwaterlevel < 2) ) if ( (waterlevel >= 2) && (lastwaterlevel < 2) )
A_PlaySound("ut/wetsplash",CHAN_AUTO); PlaySplash(1.);
else if ( (waterlevel < 2) && (lastwaterlevel >= 2) ) else if ( (waterlevel < 2) && (lastwaterlevel >= 2) )
A_PlaySound("ut/wetsurface",CHAN_AUTO); PlaySurface();
if ( (waterlevel >= 3) && !underwatersnd )
{
underwatersnd = Spawn("UTUnderSound",pos);
underwatersnd.target = self;
}
else if ( (waterlevel < 3) && underwatersnd )
underwatersnd.Destroy();
lastground = player.onground; lastground = player.onground;
lastvelz = prevvelz; lastvelz = prevvelz;
prevvelz = vel.z; prevvelz = vel.z;
@ -385,8 +393,17 @@ Class UTPlayer : DoomPlayer
else Angle += cmd.yaw*(360./65536.); else Angle += cmd.yaw*(360./65536.);
player.onground = (pos.z <= floorz) || bOnMobj || bMBFBouncer || (player.cheats & CF_NOCLIP2); player.onground = (pos.z <= floorz) || bOnMobj || bMBFBouncer || (player.cheats & CF_NOCLIP2);
// slant (aka steep slope) detection // slant (aka steep slope) detection
// TODO make it 3d floor aware when the PR makes it in Vector3 floornormal = floorsector.floorplane.normal;
if ( floorsector.floorplane.normal dot (0,0,1) < (46342./65536.) ) for ( int i=0; i<floorsector.Get3DFloorCount(); i++ )
{
F3DFloor ff = floorsector.Get3DFloor(i);
if ( ff.top.ZAtPoint(pos.xy) ~== floorz )
{
floornormal = -ff.top.normal;
break;
}
}
if ( floornormal dot (0,0,1) < (46342./65536.) )
player.onground = false; player.onground = false;
if ( player.onground ) lastgroundtic = gametic; if ( player.onground ) lastgroundtic = gametic;
if ( !player.onground && !bNoGravity && (waterlevel < 2) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) && (vel.z < 0) ) if ( !player.onground && !bNoGravity && (waterlevel < 2) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) && (vel.z < 0) )
@ -726,7 +743,70 @@ Class UTPlayer : DoomPlayer
virtual void PlayFootstep( double vol ) virtual void PlayFootstep( double vol )
{ {
A_PlaySound("ut/playerfootstep",CHAN_5,vol); A_PlaySound("ut/playerfootstep",CHAN_AUTO,vol);
}
virtual void PlaySplash( double vol )
{
TerrainDef t = GetFloorTerrain();
String snd = "ut/wetsplash";
switch ( t.TerrainName )
{
case 'UTLava':
case 'Lava':
snd = "ut/lavasplash";
break;
case 'UTSlime':
case 'UTNukage':
case 'Slime':
case 'Nukage':
case 'Sludge':
snd = "ut/slimesplash";
break;
}
A_PlaySound(snd,CHAN_AUTO,vol);
}
virtual void PlaySurface()
{
TerrainDef t = GetFloorTerrain();
String snd = "ut/wetsurface";
switch ( t.TerrainName )
{
case 'UTLava':
case 'Lava':
snd = "ut/lavasurface";
break;
case 'UTSlime':
case 'UTNukage':
case 'Slime':
case 'Nukage':
case 'Sludge':
snd = "ut/slimesurface";
break;
}
A_PlaySound(snd,CHAN_AUTO);
}
virtual void PlayWetFootstep( double vol )
{
TerrainDef t = GetFloorTerrain();
String snd = "ut/playerfootstepwet";
switch ( t.TerrainName )
{
case 'UTLava':
case 'Lava':
snd = "ut/playerfootsteplava";
break;
case 'UTSlime':
case 'UTNukage':
case 'Slime':
case 'Nukage':
case 'Sludge':
snd = "ut/playerfootstepslime";
break;
}
A_PlaySound(snd,CHAN_AUTO,vol);
} }
override void PlayIdle() override void PlayIdle()
@ -1120,6 +1200,139 @@ Class UTPlayer : DoomPlayer
} }
} }
Class UTUnderSound : Actor
{
enum EFluidType
{
FLUID_WATER,
FLUID_SLIME,
FLUID_LAVA,
FLUID_NITRO
};
int curfluid, lastfluid;
String fluidsounds[4];
Default
{
+NOBLOCKMAP;
+NOGRAVITY;
+DONTSPLASH;
+NOINTERACTION;
}
int GetFluid()
{
int thisfluid = FLUID_WATER;
// try to guess where we are
for ( int i=0; i<CurSector.Get3DFloorCount(); i++ )
{
F3DFloor ff = CurSector.Get3DFloor(i);
switch ( ff.model.damagetype )
{
case 'Slime':
thisfluid = FLUID_SLIME;
break;
case 'Fire':
thisfluid = FLUID_LAVA;
break;
case 'Ice':
thisfluid = FLUID_NITRO;
break;
}
}
return thisfluid;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
SetOrigin(target.Vec2OffsetZ(0,0,target.player.viewz),true);
curfluid = lastfluid = GetFluid();
fluidsounds[0] = 'ut/underwater';
fluidsounds[1] = 'ut/underslime';
fluidsounds[2] = 'ut/underlava';
fluidsounds[3] = 'ut/undernitro';
A_PlaySound(fluidsounds[curfluid],CHAN_VOICE|CHAN_LISTENERZ,1.,true,100.);
A_SoundVolume(CHAN_VOICE,(players[consoleplayer].camera==target)?1.:0.);
}
override void OnDestroy()
{
A_StopSound(CHAN_VOICE);
Super.OnDestroy();
}
override void Tick()
{
Super.Tick();
if ( !target )
{
Destroy();
return;
}
SetOrigin(target.Vec2OffsetZ(0,0,target.player.viewz),true);
curfluid = GetFluid();
if ( curfluid != lastfluid )
A_PlaySound(fluidsounds[curfluid],CHAN_VOICE|CHAN_LISTENERZ,1.,true,100.);
lastfluid = curfluid;
A_SoundVolume(CHAN_VOICE,(players[consoleplayer].camera==target)?1.:0.);
}
}
// TODO terrain stuff
Class UTTerrainFX : Actor
{
States
{
Spawn:
TNT1 A 1;
Stop;
}
}
Class UTWaterSplish : UTTerrainFX
{
}
Class UTWaterSplash : UTTerrainFX
{
}
Class UTBloodSplish : UTTerrainFX
{
}
Class UTBloodSplash : UTTerrainFX
{
}
Class UTSlimeSplish : UTTerrainFX
{
}
Class UTSlimeSplash : UTTerrainFX
{
}
Class UTNukageSplish : UTTerrainFX
{
}
Class UTNukageSplash : UTTerrainFX
{
}
Class UTLavaSplish : UTTerrainFX
{
}
Class UTLavaSplash : UTTerrainFX
{
}
Class UTNitroSplish : UTTerrainFX
{
}
Class UTNitroSplash : UTTerrainFX
{
}
// these only exist for sound // these only exist for sound
// female classes have identical sounds, so they use the same soundclass here // female classes have identical sounds, so they use the same soundclass here
Class UTPlayerTMale1 : UTPlayer Class UTPlayerTMale1 : UTPlayer