Release Candidate 4 (may be final):

- Spent mags for Automag, Flak Cannon and Demolisher (needs updated DT).
- Betamag defaults to both having the 0.83 skin, other options put on add-ons.
- Adjustments to bullet casings.
- Fixed flames producing water splashes.
- Fixed female models having male gibs.
- Corrected ASMD ball hit behavior to match Unreal.
- Added bubble trail to Stinger when underwater.
This commit is contained in:
Marisa the Magician 2019-10-16 18:09:43 +02:00
commit ff01ab2146
25 changed files with 182 additions and 21 deletions

View file

@ -26,6 +26,21 @@ Model "UCasing"
FrameIndex PCAS A 0 0
}
Model "AutomagMag"
{
Path "models"
Model 0 "AutoMagSpentClip_d.3d"
Skin 0 "Automa1.png"
Scale 0.06 0.06 0.072
ZOffset 1
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 1
FrameIndex PCAS A 0 0
}
Model "Automag"
{
Path "models"

View file

@ -30,6 +30,7 @@ Model "BCasing"
FrameIndex PCAS A 0 0
}
Model "BCasing2"
{
Path "models"

View file

@ -83,6 +83,22 @@ Model "BigCasing"
FrameIndex PCAS A 0 0
}
Model "BigMag"
{
Path "models"
Model 0 "BigGMag_d.3d"
Skin 0 "JBigGun1.png"
Scale 0.1 0.1 0.12
AngleOffset 90
ZOffset 2.5
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 2.5
FrameIndex PCAS A 0 0
}
Model "BigGun"
{
Path "models"

View file

@ -53,6 +53,21 @@ Model "OLSMP"
FrameIndex AMUZ I 2 0
}
Model "OLSMPMag"
{
Path "models"
Model 0 "OLSMPSpentClip_d.3d"
Skin 0 "OLSMP.png"
Scale 0.06 0.06 0.072
ZOffset 1
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 1
FrameIndex PCAS A 0 0
}
Model "OLSMP"
{
Path "models"

View file

@ -52,6 +52,22 @@ Model "UFlakSlug"
FrameIndex FSLG A 0 0
}
Model "UFlakMag"
{
Path "models"
Model 0 "FlakShSpent_d.3d"
Skin 0 "Jflakshel1.png"
Scale 0.2 0.2 0.24
AngleOffset 90
ZOffset 1
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 1
FrameIndex PCAS A 0 0
}
Model "UFlakCannon"
{
Path "models"

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

BIN
models/FlakShSpent_a.3d Normal file

Binary file not shown.

BIN
models/FlakShSpent_d.3d Normal file

Binary file not shown.

View file

@ -257,6 +257,7 @@ quadshot/shell4 qshell4
quadshot/shell5 qshell5
quadshot/shell6 qshell6
$random quadshot/shell { quadshot/shell1 quadshot/shell2 quadshot/shell3 quadshot/shell4 quadshot/shell5 quadshot/shell6 }
$attenuation quadshot/shell 2
betamag/select oldasel
betamag/fire oldmag
@ -301,8 +302,12 @@ big/dry bigmdryf
big/punch bigmejct
big/reload bigmrelo
big/shell bigmshel
$attenuation big/shell 2
big/blast bigmhit
$limit big/blast 16
big/bounce bigmagb
$volume big/bounce 0.5
$attenuation big/bounce 3
smini/select sminisel
smini/fire sminione

BIN
sounds/BigMagB.ogg Normal file

Binary file not shown.

View file

@ -290,30 +290,27 @@ Class ViewASMDSpark : ShockSpark
Class ASMDHitbox : ShockHitbox
{
override void Tick()
override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle )
{
Super.Tick();
if ( !target ) return;
let t = ThinkerIterator.Create("ASMDHitbox");
Actor a;
while ( a = Actor(t.Next()) )
if ( mod == 'jolted' )
return 0;
if ( !bAMBUSH )
{
if ( (a == self) || !(a is 'ASMDHitbox') || a.bAMBUSH || (Distance3D(a) > radius*2) ) continue;
a.bAMBUSH = true;
if ( a.target && a.target.InStateSequence(a.target.CurState,a.target.FindState("Spawn")) )
a.target.ExplodeMissile();
if ( !bAMBUSH )
{
bAMBUSH = true;
if ( target && target.InStateSequence(target.CurState,target.FindState("Spawn")) )
target.ExplodeMissile();
}
bAMBUSH = true;
if ( target && target.InStateSequence(target.CurState,target.FindState("Spawn")) )
target.ExplodeMissile();
}
return 0;
}
override bool CanCollideWith( Actor other, bool passive )
{
return true;
}
Default
{
Radius 6;
Height 12;
+SHOOTABLE;
}
}
@ -325,7 +322,7 @@ Class ASMDBall : Actor
override int SpecialMissileHit( Actor victim )
{
if ( victim == b ) return 1;
if ( victim is 'ASMDHitbox' ) return 1;
return -1;
}
override void PostBeginPlay()

View file

@ -19,6 +19,10 @@ Class UCasing : UTCasing
{
}
Class AutomagMag : EnforcerMag
{
}
Class Automag : UnrealWeapon
{
int ClipCount, SlaveClipCount;
@ -248,6 +252,8 @@ Class Automag : UnrealWeapon
}
origin = level.Vec3Offset(origin,x*8+ydir*y*6-z*2);
let c = Spawn("UCasing",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);
}
override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack )
@ -529,6 +535,13 @@ Class Automag : UnrealWeapon
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
invoker.slavereload = (invoker.slaveactive&&(invoker.slaveclipcount<invoker.default.slaveclipcount)&&(invoker.Ammo1.Amount>0));
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("AutomagMag",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);
}
AUTS A 0 A_PlaySound("automag/select",CHAN_WEAPON,!Dampener.Active(self)?1.:.1);
Goto Ready;
@ -557,6 +570,13 @@ Class Automag : UnrealWeapon
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
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("AutomagMag",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);
}
2UTS A 0 A_PlaySound("automag/select",CHAN_6,!Dampener.Active(self)?1.:.1);
Goto LeftReady;

View file

@ -291,6 +291,8 @@ Class Betamag : UnrealWeapon
}
origin = level.Vec3Offset(origin,x*5+ydir*y*8-z*2);
let c = Spawn(slave?"BCasing2":"BCasing",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);
}
override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack )

View file

@ -229,6 +229,30 @@ Class BigCasing : UTCasing
}
}
// hambagah?
Class BigMag : UTCasing
{
Default
{
BounceSound "big/bounce"; // much heavier sound
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
heat = 0.;
}
States
{
Death:
PCAS A -1
{
pitch = clamp(Normalize180(pitch),-5,5);
angle = FRandom[Junk](0,360);
}
Stop;
}
}
Class BigGun : UnrealWeapon
{
int ClipCount;
@ -536,7 +560,18 @@ Class BigGun : UnrealWeapon
A_PlaySound("big/punch",CHAN_WEAPON,Dampener.Active(self)?.3:1.);
if ( self is 'UTPlayer' ) UTPlayer(self).PlayReloading();
}
BIGR NOPQRSTUVWXYZ[\] 2;
BIGR NOPQRSTUVW 2;
BIGR X 2
{
Vector3 x, y, z, origin;
[x,y,z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),x*5.-z*9.);
let c = Spawn("BigMag",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);
}
BIGR YZ[\] 2;
BIR2 ABCDEF 2;
BIR2 G 2
{

View file

@ -63,6 +63,7 @@ Class UFireball : Actor
+FORCERADIUSDMG;
+NODAMAGETHRUST;
+FORCEXYBILLBOARD;
+DONTSPLASH;
UFireball.SpreadFactor 0.2;
UFireball.NumSmokes 1;
UFireball.NumSparks 2;

View file

@ -295,6 +295,7 @@ Class UFlame : Actor
+FORCEXYBILLBOARD;
+DROPOFF;
+NOBLOCKMONST;
+DONTSPLASH;
//+THRUIMPASSABLE; // gonna have to implement this
}
States

View file

@ -61,6 +61,10 @@ Class OLSMPAmmo : Ammo
}
}
Class OLSMPMag : EnforcerMag
{
}
Class OLSMP : UnrealWeapon
{
int ClipCount;
@ -217,6 +221,8 @@ Class OLSMP : UnrealWeapon
}
origin = level.Vec3Offset(origin,x*8+y*6-z*2);
let c = Spawn("UCasing",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);
}
override bool CheckAmmo( int fireMode, bool autoSwitch, bool requireAmmo, int ammocount )
@ -346,6 +352,13 @@ Class OLSMP : UnrealWeapon
A_PlaySound("automag/reload",CHAN_WEAPON,!Dampener.Active(self)?1.:.1,pitch:0.8);
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
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*18.);
let c = Spawn("OLSMPMag",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);
}
AUTS A 0 A_PlaySound("automag/select",CHAN_WEAPON,!Dampener.Active(self)?1.:.1,pitch:0.8);
Goto Ready;

View file

@ -333,6 +333,8 @@ Class QuadShot : UnrealWeapon
{
let c = Spawn("QCasing",origin);
c.vel = x*FRandom[Junk](-1.5,0.25)-y*FRandom[Junk](1,4)-z*FRandom[Junk](1,4);
c.angle = angle;
c.pitch = pitch;
}
}
action bool A_QuadshotCheckForReload( bool bDryFire = false )

View file

@ -211,6 +211,8 @@ Class URifle : UnrealWeapon
origin = level.Vec3Offset(origin,x*4+y*6-z*10);
let c = Spawn("UCasing",origin);
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);
}
override String GetObituary( Actor victim, Actor inflictor, Name mod, bool playerattack )

View file

@ -493,8 +493,12 @@ Class StingerProjectile : Actor
States
{
Spawn:
TPRJ A -1 Bright;
Stop;
TPRJ A 1 Bright
{
if ( waterlevel > 0 )
Spawn("UTBubble",pos);
}
Wait;
Bounce:
TPRJ A 0 Bright A_HandleBounce();
Goto Spawn;

View file

@ -176,6 +176,10 @@ Class UFlakSlug : FlakSlug
}
}
Class UFlakMag : FlakMag
{
}
Class UFlakCannon : UnrealWeapon
{
action void A_Loading( bool first = false )
@ -332,7 +336,16 @@ Class UFlakCannon : UnrealWeapon
FLKF J 5;
FLKE A 1 A_PlaySound("flak/click",CHAN_6,Dampener.Active(self)?.05:.5);
FLKE BCDEFGHIJKLMN 1;
FLKE S 4;
FLKE S 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("UFlakMag",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;
AltFire:
FLKA A 1 A_FireSlug();

View file

@ -128,6 +128,8 @@ Class UMinigun : UnrealWeapon
}
origin = level.Vec3Offset(origin,x*4+y*3-z*12);
let c = Spawn("UCasing",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,1);
}

View file

@ -352,6 +352,7 @@ Class UPlayerFemale : UPlayer
{
Player.SoundClass "ufemale";
UTPlayer.VoiceType VOICE_FemaleOne;
UTPlayer.DollType DOLL_Female;
}
void A_ArmPop()