diff --git a/modeldef.automag b/modeldef.automag index 077a578..06074fc 100644 --- a/modeldef.automag +++ b/modeldef.automag @@ -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" diff --git a/modeldef.betamag b/modeldef.betamag index f7c99b0..ec071c9 100644 --- a/modeldef.betamag +++ b/modeldef.betamag @@ -30,6 +30,7 @@ Model "BCasing" FrameIndex PCAS A 0 0 } + Model "BCasing2" { Path "models" diff --git a/modeldef.biggun b/modeldef.biggun index 3b7f8aa..e176984 100644 --- a/modeldef.biggun +++ b/modeldef.biggun @@ -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" diff --git a/modeldef.olsmp b/modeldef.olsmp index 8effcb5..ef6e70f 100644 --- a/modeldef.olsmp +++ b/modeldef.olsmp @@ -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" diff --git a/modeldef.uflak b/modeldef.uflak index 17467df..b6fddd7 100644 --- a/modeldef.uflak +++ b/modeldef.uflak @@ -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" diff --git a/models/AutoMagSpentClip_d.3d b/models/AutoMagSpentClip_d.3d index 020a4a9..f22a162 100644 Binary files a/models/AutoMagSpentClip_d.3d and b/models/AutoMagSpentClip_d.3d differ diff --git a/models/Autom1.png b/models/Autom1.png index b30d060..b70a0ea 100644 Binary files a/models/Autom1.png and b/models/Autom1.png differ diff --git a/models/Autom1_.png b/models/Autom1_.png index b30d060..b70a0ea 100644 Binary files a/models/Autom1_.png and b/models/Autom1_.png differ diff --git a/models/FlakShSpent_a.3d b/models/FlakShSpent_a.3d new file mode 100644 index 0000000..a1dd3e9 Binary files /dev/null and b/models/FlakShSpent_a.3d differ diff --git a/models/FlakShSpent_d.3d b/models/FlakShSpent_d.3d new file mode 100644 index 0000000..2147660 Binary files /dev/null and b/models/FlakShSpent_d.3d differ diff --git a/sndinfo.txt b/sndinfo.txt index ca233c2..fe1cf86 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -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 diff --git a/sounds/BigMagB.ogg b/sounds/BigMagB.ogg new file mode 100644 index 0000000..baac575 Binary files /dev/null and b/sounds/BigMagB.ogg differ diff --git a/zscript/asmd.zsc b/zscript/asmd.zsc index 59f567b..0df7781 100644 --- a/zscript/asmd.zsc +++ b/zscript/asmd.zsc @@ -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() diff --git a/zscript/automag.zsc b/zscript/automag.zsc index d1aa4a3..3f08c10 100644 --- a/zscript/automag.zsc +++ b/zscript/automag.zsc @@ -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.slaveclipcount0)); + 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; diff --git a/zscript/betamag.zsc b/zscript/betamag.zsc index ecfd7f1..ea41a65 100644 --- a/zscript/betamag.zsc +++ b/zscript/betamag.zsc @@ -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 ) diff --git a/zscript/biggun.zsc b/zscript/biggun.zsc index 0f7b877..dfc6260 100644 --- a/zscript/biggun.zsc +++ b/zscript/biggun.zsc @@ -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 { diff --git a/zscript/flamegun.zsc b/zscript/flamegun.zsc index 7781d17..ba88f33 100644 --- a/zscript/flamegun.zsc +++ b/zscript/flamegun.zsc @@ -63,6 +63,7 @@ Class UFireball : Actor +FORCERADIUSDMG; +NODAMAGETHRUST; +FORCEXYBILLBOARD; + +DONTSPLASH; UFireball.SpreadFactor 0.2; UFireball.NumSmokes 1; UFireball.NumSparks 2; diff --git a/zscript/napalm.zsc b/zscript/napalm.zsc index 9616c1b..31387b5 100644 --- a/zscript/napalm.zsc +++ b/zscript/napalm.zsc @@ -295,6 +295,7 @@ Class UFlame : Actor +FORCEXYBILLBOARD; +DROPOFF; +NOBLOCKMONST; + +DONTSPLASH; //+THRUIMPASSABLE; // gonna have to implement this } States diff --git a/zscript/olsmp.zsc b/zscript/olsmp.zsc index 3876fc2..e7bd280 100644 --- a/zscript/olsmp.zsc +++ b/zscript/olsmp.zsc @@ -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; diff --git a/zscript/quadshot.zsc b/zscript/quadshot.zsc index 4c9db24..2192bd7 100644 --- a/zscript/quadshot.zsc +++ b/zscript/quadshot.zsc @@ -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 ) diff --git a/zscript/rifle.zsc b/zscript/rifle.zsc index bd1dddd..d92c760 100644 --- a/zscript/rifle.zsc +++ b/zscript/rifle.zsc @@ -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 ) diff --git a/zscript/stinger.zsc b/zscript/stinger.zsc index 0555a35..38606be 100644 --- a/zscript/stinger.zsc +++ b/zscript/stinger.zsc @@ -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; diff --git a/zscript/uflakcannon.zsc b/zscript/uflakcannon.zsc index bee87d6..dfd8e24 100644 --- a/zscript/uflakcannon.zsc +++ b/zscript/uflakcannon.zsc @@ -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(); diff --git a/zscript/uminigun.zsc b/zscript/uminigun.zsc index 10ea3aa..4f9d741 100644 --- a/zscript/uminigun.zsc +++ b/zscript/uminigun.zsc @@ -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); } diff --git a/zscript/unrealcommon.zsc b/zscript/unrealcommon.zsc index 64dfc50..7f62a3d 100644 --- a/zscript/unrealcommon.zsc +++ b/zscript/unrealcommon.zsc @@ -352,6 +352,7 @@ Class UPlayerFemale : UPlayer { Player.SoundClass "ufemale"; UTPlayer.VoiceType VOICE_FemaleOne; + UTPlayer.DollType DOLL_Female; } void A_ArmPop()