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:
parent
20666ac1bd
commit
da49775e7d
29 changed files with 568 additions and 10 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
BIN
models/Flak_t_.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
BIN
models/Jautot1_.png
Normal file
BIN
models/Jautot1_.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
models/UsedFlak_a.3d
Normal file
BIN
models/UsedFlak_a.3d
Normal file
Binary file not shown.
BIN
models/UsedFlak_d.3d
Normal file
BIN
models/UsedFlak_d.3d
Normal file
Binary file not shown.
BIN
models/UsedMag_a.3d
Normal file
BIN
models/UsedMag_a.3d
Normal file
Binary file not shown.
BIN
models/UsedMag_d.3d
Normal file
BIN
models/UsedMag_d.3d
Normal file
Binary file not shown.
BIN
models/UsedPulse_a.3d
Normal file
BIN
models/UsedPulse_a.3d
Normal file
Binary file not shown.
BIN
models/UsedPulse_d.3d
Normal file
BIN
models/UsedPulse_d.3d
Normal file
Binary file not shown.
25
sndinfo.txt
25
sndinfo.txt
|
|
@ -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
BIN
sounds/ChnkHit1.ogg
Normal file
Binary file not shown.
BIN
sounds/GoopE1.ogg
Normal file
BIN
sounds/GoopE1.ogg
Normal file
Binary file not shown.
BIN
sounds/GoopJ1.ogg
Normal file
BIN
sounds/GoopJ1.ogg
Normal file
Binary file not shown.
BIN
sounds/clipb.ogg
Normal file
BIN
sounds/clipb.ogg
Normal file
Binary file not shown.
BIN
sounds/dslava1.ogg
Normal file
BIN
sounds/dslava1.ogg
Normal file
Binary file not shown.
BIN
sounds/dsslime1.ogg
Normal file
BIN
sounds/dsslime1.ogg
Normal file
Binary file not shown.
BIN
sounds/uGoop1.ogg
Normal file
BIN
sounds/uGoop1.ogg
Normal file
Binary file not shown.
BIN
sounds/uLNitro1.ogg
Normal file
BIN
sounds/uLNitro1.ogg
Normal file
Binary file not shown.
BIN
sounds/uLava1.ogg
Normal file
BIN
sounds/uLava1.ogg
Normal file
Binary file not shown.
BIN
sounds/uWater1a.ogg
Normal file
BIN
sounds/uWater1a.ogg
Normal file
Binary file not shown.
155
terrain.txt
Normal file
155
terrain.txt
Normal 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
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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 )
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue