Replaced some incorrect instances of clip with magazine.

Add SMP 7243 from Oldskool to the BFG pool (toggleable).
Random fixarounds.
Spent mag models for the pistols, will be used (and backported to DT) soon.
This commit is contained in:
Marisa the Magician 2019-09-04 19:31:12 +02:00
commit bac59b45c1
31 changed files with 672 additions and 31 deletions

View file

@ -708,6 +708,13 @@ Class BetaFlare : UnrealInventory
if ( !sting_flares ) return false; // not allowed
return Super.TryPickup(toucher);
}
override void Tick()
{
Super.Tick();
if ( sting_flares ) return;
if ( Owner ) Owner.RemoveInventory(self);
Destroy();
}
Default
{
Inventory.MaxAmount 1;

393
zscript/olsmp.zsc Normal file
View file

@ -0,0 +1,393 @@
/*
usaar33 is a wiener
now watch as I turn this trash fire into a better weapon
*/
Class OLSMPAmmo : Ammo
{
override bool TryPickup( in out Actor toucher )
{
if ( !sting_olsmp ) return false; // not allowed
return Super.TryPickup(toucher);
}
override void Tick()
{
Super.Tick();
if ( sting_olsmp ) return;
if ( !Owner )
{
let r = Spawn("CellPack",pos,ALLOW_REPLACE);
r.spawnangle = spawnangle;
r.spawnpoint = spawnpoint;
r.angle = angle;
r.pitch = pitch;
r.roll = roll;
r.special = special;
r.args[0] = args[0];
r.args[1] = args[1];
r.args[2] = args[2];
r.args[3] = args[3];
r.args[4] = args[4];
r.ChangeTid(tid);
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
r.HandleSpawnFlags();
r.SpawnFlags = SpawnFlags;
r.bCountSecret = SpawnFlags&MTF_SECRET;
r.vel = vel;
r.master = master;
r.target = target;
r.tracer = tracer;
r.bDropped = bDropped;
Destroy();
}
else
{
Owner.RemoveInventory(self);
Destroy();
}
}
Default
{
Tag "$T_OLSMPAMMO";
Inventory.Icon "I_OLSMP";
Inventory.PickupMessage "$I_OLSMPAMMO";
Inventory.Amount 100;
Inventory.MaxAmount 300;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 900;
Ammo.DropAmount 100;
}
States
{
Spawn:
UCLP A -1;
Stop;
}
}
Class OLSMP : UnrealWeapon
{
int ClipCount;
double AltAccuracy;
property ClipCount : ClipCount;
override void PlayUpSound( Actor origin )
{
origin.A_PlaySound(upsound,CHAN_WEAPON,Dampener.Active(origin)?.1:1.,pitch:0.8);
}
override bool TryPickup( in out Actor toucher )
{
if ( !sting_olsmp ) return false; // not allowed
return Super.TryPickup(toucher);
}
override void Tick()
{
Super.Tick();
if ( sting_olsmp ) return;
if ( !Owner )
{
let r = Spawn("BFG9000",pos,ALLOW_REPLACE);
r.spawnangle = spawnangle;
r.spawnpoint = spawnpoint;
r.angle = angle;
r.pitch = pitch;
r.roll = roll;
r.special = special;
r.args[0] = args[0];
r.args[1] = args[1];
r.args[2] = args[2];
r.args[3] = args[3];
r.args[4] = args[4];
r.ChangeTid(tid);
r.SpawnFlags = SpawnFlags&~MTF_SECRET;
r.HandleSpawnFlags();
r.SpawnFlags = SpawnFlags;
r.bCountSecret = SpawnFlags&MTF_SECRET;
r.vel = vel;
r.master = master;
r.target = target;
r.tracer = tracer;
r.bDropped = bDropped;
Destroy();
}
else
{
Owner.RemoveInventory(self);
Destroy();
}
}
action void A_OLSMPRefire( statelabel flash = null, bool slave = false )
{
Weapon weap = Weapon(invoker);
if ( !weap || !player ) return;
if ( invoker.altaccuracy < 0.2 ) invoker.altaccuracy += 0.01;
if ( invoker.clipcount < 35 ) A_PlaySound("automag/click",CHAN_ITEM,!Dampener.Active(self)?1.:.35,pitch:1.6);
if ( (invoker.clipcount <= 0) || (weap.Ammo1.Amount <= 0) )
{
A_ClearRefire();
return;
}
A_Refire(flash);
}
action void A_OLSMPFire( bool alt = false )
{
Weapon weap = Weapon(invoker);
if ( !weap ) return;
if ( weap.Ammo1.Amount <= 0 ) return;
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
invoker.clipcount--;
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(32,255,128,0),1);
A_PlaySound("automag/fire",CHAN_WEAPON,!Dampener.Active(self)?1.:.2,pitch:FRandom[Automag](1.2,1.8)*(alt?2.5:1.));
if ( !Dampener.Active(self) ) A_AlertMonsters();
A_QuakeEx(1,1,1,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15);
A_Overlay(-2,"MuzzleFlash");
A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderstyle(-2,STYLE_Add);
UTMainHandler.DoSwing(self,(FRandom[Automag](-2.,-5.)*invoker.altaccuracy,FRandom[Automag](-3.,2.)*invoker.altaccuracy),3,1,2,SWING_Spring,1,2);
Vector3 x, y, z, x2, y2, z2;
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
if ( alt )
{
vel -= x*(player.onground?2.:0.8);
vel.z += (player.onground?.3:.08);
}
else
{
vel -= x*(player.onground?4.:1.5);
vel.z += (player.onground?.5:.15);
}
Vector3 origin = Vec2OffsetZ(0,0,player.viewz)+10.0*x;
origin = origin-z*1.0+y*4.0;
double a = FRandom[Automag](0,360), s = FRandom[Automag](0,alt?(0.05+invoker.altaccuracy):0.05);
[x2, y2, z2] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll);
Vector3 dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
FLineTraceData d;
LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d);
if ( d.HitType == TRACE_HitActor )
{
int dmg = 17;
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'shot',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x));
double mm = 3000;
if ( FRandom[Automag](0,1) < 0.2 ) mm *= 5;
UTMainHandler.DoKnockback(d.HitActor,d.HitDir,mm);
if ( d.HitActor.bNOBLOOD )
{
let p = Spawn("BulletImpact",d.HitLocation);
p.angle = atan2(d.HitDir.y,d.HitDir.x)+180;
p.pitch = asin(d.HitDir.z);
}
else
{
d.HitActor.TraceBleed(dmg,self);
d.HitActor.SpawnBlood(d.HitLocation,atan2(d.HitDir.y,d.HitDir.x)+180,dmg);
}
}
else if ( d.HitType != TRACE_HitNone )
{
Vector3 hitnormal = -d.HitDir;
if ( d.HitType == TRACE_HitFloor ) hitnormal = d.HitSector.floorplane.Normal;
else if ( d.HitType == TRACE_HitCeiling ) hitnormal = d.HitSector.ceilingplane.Normal;
else if ( d.HitType == TRACE_HitWall )
{
hitnormal = (-d.HitLine.delta.y,d.HitLine.delta.x,0).unit();
if ( !d.LineSide ) hitnormal *= -1;
}
let p = Spawn("BulletImpact",d.HitLocation+hitnormal*0.01);
p.angle = atan2(hitnormal.y,hitnormal.x);
p.pitch = asin(-hitnormal.z);
if ( d.HitLine ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation);
}
for ( int i=0; i<3; i++ )
{
let s = Spawn("UTViewSmoke",origin);
UTViewSmoke(s).ofs = (10,4,-1);
s.target = self;
s.alpha *= 0.5;
}
origin += x*8.0+y*6.0-z*2.0;
let c = Spawn("UCasing",origin);
c.vel = x*FRandom[Junk](-1.5,1.5)+y*FRandom[Junk](2,4)+z*FRandom[Junk](2,3);
}
Default
{
Tag "$T_OLSMP";
Inventory.PickupMessage "$I_OLSMP";
Weapon.UpSound "automag/select";
Weapon.SlotNumber 0;
Weapon.SelectionOrder 9;
Weapon.AmmoType "OLSMPAmmo";
Weapon.AmmoUse 1;
Weapon.AmmoType2 "OLSMPAmmo";
Weapon.AmmoUse2 1;
Weapon.AmmoGive 100;
Weapon.Kickback 320;
UTWeapon.DropAmmo 50;
OLSMP.ClipCount 100;
}
States
{
Spawn:
AUTP A -1;
Stop;
AUTP B -1;
Stop;
Select:
AUTS A 1 A_Raise(int.max);
Ready:
AUTS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 A_WeaponReady(WRF_NOFIRE);
AUS2 ABCD 1 A_WeaponReady(WRF_NOFIRE);
Idle:
AUTI A 0 A_Overlay(-9999,"Dummy");
AUTI AB 30;
AUTI A 0 A_Jump(50,"Twiddle");
Goto Idle+1;
Twiddle:
AUTT ABCDEFGHIJKLMNOPQRSTUVWXY 2;
Goto Idle+1;
Dummy:
TNT1 A 1
{
if ( (invoker.clipcount <= 0) && (invoker.Ammo1.Amount > 0) ) A_Overlay(PSP_WEAPON,"Reload");
else if ( invoker.clipcount < min(invoker.default.clipcount,invoker.Ammo1.Amount) ) A_WeaponReady(WRF_ALLOWRELOAD);
else A_WeaponReady();
}
Wait;
Fire:
AUTF A 1 A_Overlay(-9999,null);
AUTF BCD 1;
Hold:
AUTF E 1 A_OLSMPFire();
AUTF F 1;
AUTF G 0 A_OLSMPRefire(1);
Goto Release1;
AUTF G 1;
AUTF H 1 A_OLSMPFire();
AUTF I 1;
AUTF J 0 A_OLSMPRefire(1);
Goto Release2;
AUTF J 1;
AUTF K 1 A_OLSMPFire();
AUTF L 1;
AUTF M 0 A_OLSMPRefire(1);
Goto Release3;
AUTF M 1;
Goto Hold;
Release1:
AUTF G 1;
Goto Release;
Release2:
AUTF J 1;
Goto Release;
Release3:
AUTF M 1;
Goto Release;
Release:
AUTF NOPQRST 1;
AUTI A 0;
Goto Idle;
AltFire:
AUTF A 1 A_Overlay(-9999,null);
AUTF BCD 1;
AltHold:
AUTF E 1 A_OLSMPFire(true);
AUTF H 0 A_OLSMPRefire(1);
Goto AltRelease1;
AUTF H 1 A_OLSMPFire(true);
AUTF K 0 A_OLSMPRefire(1);
Goto AltRelease2;
AUTF K 1 A_OLSMPFire(true);
AUTF E 0 A_OLSMPRefire("AltHold");
Goto AltRelease3;
AltRelease1:
AUTF FG 1;
Goto Release;
AltRelease2:
AUTF IJ 1;
Goto Release;
AltRelease3:
AUTF LM 1;
Goto Release;
Reload:
AUTR A 0 A_JumpIf(invoker.clipcount>=min(invoker.default.clipcount,invoker.Ammo1.Amount),"Idle");
AUTR A 0
{
invoker.clipcount = Min(invoker.default.clipcount,invoker.Ammo1.Amount);
A_Overlay(-9999,null);
A_WeaponOffset(0,32); // fix sudden psprite lowering
A_PlaySound("automag/click",CHAN_WEAPON,!Dampener.Active(self)?1.:.1,pitch:0.8);
}
AUTR ABCDEFGHIJKLMNOPQRSTUVWXY 1;
AUTD ABCD 1;
AUTD E 30
{
A_PlaySound("automag/reload",CHAN_WEAPON,!Dampener.Active(self)?1.:.1,pitch:0.8);
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
}
AUTS A 0 A_PlaySound("automag/select",CHAN_WEAPON,!Dampener.Active(self)?1.:.1,pitch:0.8);
Goto Ready;
Deselect:
AUTD A 1 A_Overlay(-9999,null);
AUTD BCD 1;
AUTD E 1 A_Lower(int.max);
Wait;
MuzzleFlash:
TNT1 A 0 A_Jump(256,1,2,3,4,5,6,7,8,9);
AMUZ A 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AMUZ B 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AMUZ C 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AMUZ D 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AMUZ E 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AMUZ F 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AMUZ G 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AMUZ H 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
AMUZ I 2 Bright
{
let l = Spawn("EnforcerLight",pos);
l.target = self;
}
Stop;
}
}

View file

@ -793,7 +793,8 @@ Class UnrealMainHandler : EventHandler
}
else if ( (e.Replacee == 'BFG9000') || (e.Replacee == 'Mace') )
{
if ( Random[Replacements](0,1) ) e.Replacement = 'SMiniGun';
if ( sting_olsmp && Random[Replacements](0,1) ) e.Replacement = 'OLSMP';
else if ( Random[Replacements](0,1) ) e.Replacement = 'SMiniGun';
else e.Replacement = 'BigGun';
}
else if ( (e.Replacee == 'Clip') || (e.Replacee == 'GoldWandAmmo') || (e.Replacee == 'GoldWandHefty') ) e.Replacement = 'UClip';
@ -890,6 +891,7 @@ Class UnrealMainHandler : EventHandler
else e.Replacement = 'BigAmmo2';
}
else if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo';
else if ( sting_olsmp && !Random[Replacements](0,2) ) e.Replacement = 'OLSMPAmmo';
else if ( Random[Replacements](0,1) ) e.Replacement = 'UBioAmmo';
else e.Replacement = 'URifleAmmo';
}
@ -1004,15 +1006,7 @@ Class UnrealMainHandler : EventHandler
}
override void PlayerRespawned( PlayerEvent e )
{
if ( flak_translocator )
players[e.playernumber].mo.TakeInventory("Translocator",1);
if ( sting_telegun )
players[e.playernumber].mo.GiveInventory("UTranslocator",1);
if ( sting_flares )
{
players[e.playernumber].mo.GiveInventory("LightFlare",1);
players[e.playernumber].mo.GiveInventory("DarkFlare",1);
}
PlayerEntered(e);
}
override void NetworkProcess( ConsoleEvent e )
{
@ -1032,13 +1026,6 @@ Class UnrealMainHandler : EventHandler
players[i].mo.GiveInventory("UTranslocator",1);
}
}
else
{
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
{
players[i].mo.TakeInventory("UTranslocator",1);
}
}
if ( sting_flares )
{
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
@ -1047,14 +1034,6 @@ Class UnrealMainHandler : EventHandler
players[i].mo.GiveInventory("DarkFlare",1);
}
}
else
{
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] )
{
players[i].mo.TakeInventory("LightFlare",1);
players[i].mo.TakeInventory("DarkFlare",1);
}
}
}
}
override void WorldLoaded( WorldEvent e )

View file

@ -36,8 +36,8 @@ Class UnrealHUD : BaseStatusBar
bool MidPrintLarge;
// 0.83 HUD stuff
String OldAmmo[18];
Class<Inventory> OldAmmoType[18];
String OldAmmo[19];
Class<Inventory> OldAmmoType[19];
String OldArmor[6];
Class<Inventory> OldArmorType[6];
String OldKeys[7];
@ -106,6 +106,7 @@ Class UnrealHUD : BaseStatusBar
OldAmmo[15] = "Big083";
OldAmmo[16] = "Smini083";
OldAmmo[17] = "Peace083";
OldAmmo[18] = "OLSMP083";
OldAmmoType[0] = "DefaultAmmo";
OldAmmoType[1] = "UMiniAmmo";
OldAmmoType[2] = "StingerAmmo";
@ -124,6 +125,7 @@ Class UnrealHUD : BaseStatusBar
OldAmmoType[15] = "BigAmmo";
OldAmmoType[16] = "SMiniAmmo";
OldAmmoType[17] = "PeaceAmmo";
OldAmmoType[18] = "OLSMPAmmo";
OldArmor[0] = "Armor083";
OldArmor[1] = "Kev083";
OldArmor[2] = "Asb083";
@ -646,7 +648,7 @@ Class UnrealHUD : BaseStatusBar
if ( Ammo1 )
{
if ( Ammo1.Amount ) DrawString(mOldDigits,FormatNumber(Ammo1.Amount,3),(549,366),DI_TEXT_ALIGN_RIGHT);
for ( int i=0; i<18; i++ )
for ( int i=0; i<19; i++ )
{
// match by ammo
if ( (OldAmmoType[i] is 'Ammo') && !(Ammo1 is OldAmmoType[i]) ) continue;

View file

@ -9,6 +9,13 @@ Class UTranslocatorAmmo : Ammo
Ammo.BackpackMaxAmount 2;
+INVENTORY.IGNORESKILL;
}
override void Tick()
{
Super.Tick();
if ( sting_telegun ) return;
if ( Owner ) Owner.RemoveInventory(self);
Destroy();
}
}
Class UTranslocator : UnrealWeapon
@ -18,6 +25,13 @@ Class UTranslocator : UnrealWeapon
if ( !sting_telegun ) return false; // not allowed
return Super.TryPickup(toucher);
}
override void Tick()
{
Super.Tick();
if ( sting_telegun ) return;
if ( Owner ) Owner.RemoveInventory(self);
Destroy();
}
Default
{
Tag "$T_TELEGUN";