Beta 2. Changes are as follows:
- Corrected selection order of all weapons. - Rewrote flaky reloading code. Should be more robust now. - [flak_m] manually triggered player animations no longer happen while dead. - Protomag whip damage changed to 15, instead of same damage as Doom fist. This matches the Unreal 0.83 default melee damage. - Adjusted dual-wielded weapons to try and prevent spin/reload from triggering right when the second gun is brought up. - Razorclaw no longer stunlocks and can gib. - Razorclaw damages increased (5/20 → 6/30). - Dispersion Pistol alt splash damage radius reduced (120 → 80); - Fixed Dispersion Pistol switching out instead of releasing when out of ammo. - Dispersion Pistol will only autoselect if it has at least 10 ammo. - Increased Fireblaster alt projectile damage (50 → 60). - Fireblaster no longer forces an autoswitch when trying to altfire with less than 30 ammo. - Increased Autocannon ammo capacity (30/50 → 32/64) and pickup ammo (20 → 32). - Increased Autocannon hit damage (150 → 300) and explosion radius (50 → 120). - Adjusted Impaler bolt damage formula (2*amplifiermult**3 → 10*amplifiermult**1.5). - Impaler bolt seek range now affected by Amplifier. - Reduced Impaler base explosion radius (120 → 80). - Impaler altfire drain also affected by Amplifier too. - Removed the ability to put out fire by moving very fast. This was a dumb idea as it would make fast monsters harder to burn. - Increased Quadshot per-trace damage to fixed value (Random(4,8) → 11). This matches the 0.83 damage value for it. - Doubled the damage boost of Razorjack charging. - Fix Stinger altfire only firing 4 shoots. Was supposed to fire 5 with the first being always accurate. - Adjusted Stunner damage and charge range so it matches Unreal Bible values (0-6/1-6 → 0-5/1-20). - Reduced Stunner ammo consumption for a full charge (20 → 10). - Stunner now also flagged as a "wimpy weapon". - Reduced Eightball splash damage radius (200/200 → 120/140). - Dispersion Pistol and Stunner always have at least 1 ammo after each shot. - Added option to disable Impaler beam self-damage.
This commit is contained in:
parent
f2f5391b3d
commit
da224bcfae
26 changed files with 215 additions and 146 deletions
|
|
@ -86,3 +86,4 @@ server bool sting_razoraim = false; // razorjack alt follows aim instead of
|
||||||
server bool sting_biosplash = false; // biorifle alt splashes like in ut
|
server bool sting_biosplash = false; // biorifle alt splashes like in ut
|
||||||
server bool sting_flametspread = false; // targets on fire spread the flames
|
server bool sting_flametspread = false; // targets on fire spread the flames
|
||||||
// to anyone nearby (may be op)
|
// to anyone nearby (may be op)
|
||||||
|
server bool sting_impself = false; // disable impaler beam self-hit
|
||||||
|
|
@ -248,6 +248,7 @@ STING_AUTOSCUBA = "Automatic SCUBA Gear toggling";
|
||||||
STING_RAZORAIM = "Razorjack altfire follows the crosshair";
|
STING_RAZORAIM = "Razorjack altfire follows the crosshair";
|
||||||
STING_BIOSPLASH = "Biorifle altfire splashes like in UT";
|
STING_BIOSPLASH = "Biorifle altfire splashes like in UT";
|
||||||
STING_FLAMETSPREAD = "Flamethrower fire spreads between targets";
|
STING_FLAMETSPREAD = "Flamethrower fire spreads between targets";
|
||||||
|
STING_IMPSELF = "Impaler beam cannot hurt user";
|
||||||
STING_MCREDS = "Unreal Credits";
|
STING_MCREDS = "Unreal Credits";
|
||||||
STING_CDR = "Doomreal";
|
STING_CDR = "Doomreal";
|
||||||
STING_CLEAD = "Development Lead:";
|
STING_CLEAD = "Development Lead:";
|
||||||
|
|
@ -485,6 +486,7 @@ STING_AUTOSCUBA = "Uso automático de Kit de Buceo";
|
||||||
STING_RAZORAIM = "El fuego alt. del Razorjack sigue el punto de mira";
|
STING_RAZORAIM = "El fuego alt. del Razorjack sigue el punto de mira";
|
||||||
STING_BIOSPLASH = "El fuego alt. del Biorifle salpica como en UT";
|
STING_BIOSPLASH = "El fuego alt. del Biorifle salpica como en UT";
|
||||||
STING_FLAMETSPREAD = "El fuego del Lanzallamas se propaga entre objetivos";
|
STING_FLAMETSPREAD = "El fuego del Lanzallamas se propaga entre objetivos";
|
||||||
|
STING_IMPSELF = "El haz del Empalador no daña al usuario";
|
||||||
STING_MCREDS = "Créditos de Unreal";
|
STING_MCREDS = "Créditos de Unreal";
|
||||||
STING_CDR = "Doomreal";
|
STING_CDR = "Doomreal";
|
||||||
STING_CLEAD = "Desarrolladora Jefe:";
|
STING_CLEAD = "Desarrolladora Jefe:";
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ OptionMenu "UnrealOptionMenu"
|
||||||
Option "$STING_RAZORAIM", "sting_razoraim", "YesNo"
|
Option "$STING_RAZORAIM", "sting_razoraim", "YesNo"
|
||||||
Option "$STING_BIOSPLASH", "sting_biosplash", "YesNo"
|
Option "$STING_BIOSPLASH", "sting_biosplash", "YesNo"
|
||||||
Option "$STING_FLAMETSPREAD", "sting_flametspread", "YesNo"
|
Option "$STING_FLAMETSPREAD", "sting_flametspread", "YesNo"
|
||||||
|
Option "$STING_IMPSELF", "sting_impself", "YesNo"
|
||||||
}
|
}
|
||||||
|
|
||||||
AddOptionMenu "OptionsMenu"
|
AddOptionMenu "OptionsMenu"
|
||||||
|
|
|
||||||
|
|
@ -745,7 +745,7 @@ Class ASMD : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_ASMD";
|
Inventory.PickupMessage "$I_ASMD";
|
||||||
Weapon.UpSound "shock/select";
|
Weapon.UpSound "shock/select";
|
||||||
Weapon.SlotNumber 4;
|
Weapon.SlotNumber 4;
|
||||||
Weapon.SelectionOrder 4;
|
Weapon.SelectionOrder 2000;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "ASMDAmmo";
|
Weapon.AmmoType "ASMDAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ Class Automag : UnrealWeapon
|
||||||
{
|
{
|
||||||
int ClipCount, SlaveClipCount;
|
int ClipCount, SlaveClipCount;
|
||||||
bool SlaveActive, SlaveDown, SlaveReload, SlaveAltFire, SlaveSpin;
|
bool SlaveActive, SlaveDown, SlaveReload, SlaveAltFire, SlaveSpin;
|
||||||
|
bool ClipOut, SlaveClipOut;
|
||||||
int SlaveRefire;
|
int SlaveRefire;
|
||||||
double AltAccuracy;
|
double AltAccuracy;
|
||||||
|
|
||||||
|
|
@ -31,8 +32,8 @@ Class Automag : UnrealWeapon
|
||||||
|
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
if ( Amount > 1 ) return ClipCount, SlaveClipCount, (ClipCount<5), (SlaveClipCount<5);
|
if ( Amount > 1 ) return ClipOut?-1:ClipCount, SlaveClipOut?-1:SlaveClipCount, (ClipCount<5), (SlaveClipCount<5);
|
||||||
return ClipCount, -1, (ClipCount<5), false;
|
return ClipOut?-1:ClipCount, -1, (ClipCount<5), false;
|
||||||
}
|
}
|
||||||
override bool HandlePickup( Inventory item )
|
override bool HandlePickup( Inventory item )
|
||||||
{
|
{
|
||||||
|
|
@ -252,7 +253,20 @@ Class Automag : UnrealWeapon
|
||||||
override void OwnerDied()
|
override void OwnerDied()
|
||||||
{
|
{
|
||||||
Super.OwnerDied();
|
Super.OwnerDied();
|
||||||
slaverefire = 0;
|
slavespin = slavereload = slaverefire = 0;
|
||||||
|
if ( Owner.player.ReadyWeapon != self ) return;
|
||||||
|
let psp = Owner.player.FindPSprite(2);
|
||||||
|
if ( psp )
|
||||||
|
{
|
||||||
|
slaveactive = false;
|
||||||
|
Owner.player.SetPSprite(2,ResolveState("LeftDeselect"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override void DoEffect()
|
||||||
|
{
|
||||||
|
Super.DoEffect();
|
||||||
|
if ( Amount > 1 ) SelectionOrder = 1250;
|
||||||
|
else SelectionOrder = default.SelectionOrder;
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
|
|
@ -288,7 +302,7 @@ Class Automag : UnrealWeapon
|
||||||
Inventory.InterHubAmount 2;
|
Inventory.InterHubAmount 2;
|
||||||
Weapon.UpSound "automag/select";
|
Weapon.UpSound "automag/select";
|
||||||
Weapon.SlotNumber 2;
|
Weapon.SlotNumber 2;
|
||||||
Weapon.SelectionOrder 2;
|
Weapon.SelectionOrder 2800;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "UMiniAmmo";
|
Weapon.AmmoType "UMiniAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -312,9 +326,13 @@ Class Automag : UnrealWeapon
|
||||||
Ready:
|
Ready:
|
||||||
AUTS A 0
|
AUTS A 0
|
||||||
{
|
{
|
||||||
|
invoker.slaveclipout = invoker.clipout = false;
|
||||||
invoker.slavedown = false;
|
invoker.slavedown = false;
|
||||||
if ( !invoker.slaveactive && (CountInv("Automag") > 1) )
|
if ( !invoker.slaveactive && (CountInv("Automag") > 1) )
|
||||||
|
{
|
||||||
|
invoker.slavespin = invoker.slavereload = invoker.slaverefire = 0;
|
||||||
A_Overlay(2,"LeftReady");
|
A_Overlay(2,"LeftReady");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
AUTS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 A_WeaponReady(WRF_NOFIRE);
|
AUTS ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 A_WeaponReady(WRF_NOFIRE);
|
||||||
AUS2 ABCD 1 A_WeaponReady(WRF_NOFIRE);
|
AUS2 ABCD 1 A_WeaponReady(WRF_NOFIRE);
|
||||||
|
|
@ -347,20 +365,19 @@ Class Automag : UnrealWeapon
|
||||||
{
|
{
|
||||||
A_CheckReload();
|
A_CheckReload();
|
||||||
if ( (invoker.clipcount <= 0) && (invoker.Ammo1.Amount > 0) ) player.SetPSprite(PSP_WEAPON,ResolveState("Reload"));
|
if ( (invoker.clipcount <= 0) && (invoker.Ammo1.Amount > 0) ) player.SetPSprite(PSP_WEAPON,ResolveState("Reload"));
|
||||||
else if ( ((invoker.clipcount < min(invoker.default.clipcount,invoker.Ammo1.Amount)) || (invoker.slaveclipcount < min(invoker.default.slaveclipcount,invoker.Ammo1.Amount))) ) A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM);
|
else if ( ((invoker.clipcount < invoker.default.clipcount) || (invoker.slaveclipcount < invoker.default.slaveclipcount)) && (invoker.Ammo1.Amount > 0) ) A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM);
|
||||||
else A_WeaponReady(WRF_ALLOWZOOM);
|
else A_WeaponReady(WRF_ALLOWZOOM);
|
||||||
if ( !invoker.slaveactive && (CountInv("Automag") > 1) ) A_Overlay(2,"LeftReady");
|
if ( !invoker.slaveactive && (CountInv("Automag") > 1) )
|
||||||
|
{
|
||||||
|
invoker.slavespin = invoker.slavereload = invoker.slaverefire = 0;
|
||||||
|
A_Overlay(2,"LeftReady");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Wait;
|
Wait;
|
||||||
LeftDummy:
|
LeftDummy:
|
||||||
TNT1 A 1
|
TNT1 A 1
|
||||||
{
|
{
|
||||||
if ( health <= 0 )
|
if ( invoker.slavereload ) player.SetPSprite(2,ResolveState("LeftReload"));
|
||||||
{
|
|
||||||
invoker.slaveactive = false;
|
|
||||||
player.SetPSprite(2,ResolveState("LeftDeselect"));
|
|
||||||
}
|
|
||||||
else if ( invoker.slavereload ) player.SetPSprite(2,ResolveState("LeftReload"));
|
|
||||||
else if ( invoker.slavedown ) player.SetPSprite(2,ResolveState("LeftDeselect"));
|
else if ( invoker.slavedown ) player.SetPSprite(2,ResolveState("LeftDeselect"));
|
||||||
else if ( invoker.slavespin ) player.SetPSprite(2,ResolveState("LeftZoom"));
|
else if ( invoker.slavespin ) player.SetPSprite(2,ResolveState("LeftZoom"));
|
||||||
else A_LeftWeaponReady();
|
else A_LeftWeaponReady();
|
||||||
|
|
@ -474,17 +491,16 @@ Class Automag : UnrealWeapon
|
||||||
Reload:
|
Reload:
|
||||||
AUTR A 0
|
AUTR A 0
|
||||||
{
|
{
|
||||||
if ( invoker.clipcount>=min(invoker.default.clipcount,invoker.Ammo1.Amount) )
|
if ( invoker.clipcount >= invoker.default.clipcount )
|
||||||
{
|
{
|
||||||
invoker.slavereload = (invoker.slaveactive&&(invoker.slaveclipcount < min(invoker.default.slaveclipcount,invoker.Ammo1.Amount)))||(invoker.slaveclipcount <= 0);
|
invoker.slavereload = (invoker.slaveactive&&(invoker.slaveclipcount<invoker.default.slaveclipcount)&&(invoker.Ammo1.Amount>0));
|
||||||
return ResolveState("Idle");
|
return ResolveState("Idle");
|
||||||
}
|
}
|
||||||
return ResolveState(null);
|
return ResolveState(null);
|
||||||
}
|
}
|
||||||
AUTR A 0
|
AUTR A 0
|
||||||
{
|
{
|
||||||
invoker.special1 = min(invoker.default.clipcount,invoker.Ammo1.Amount)-invoker.clipcount;
|
invoker.clipout = true;
|
||||||
invoker.clipcount = -1;
|
|
||||||
A_Overlay(-9999,null);
|
A_Overlay(-9999,null);
|
||||||
A_PlaySound("automag/click",CHAN_WEAPON,!Dampener.Active(self)?1.:.1);
|
A_PlaySound("automag/click",CHAN_WEAPON,!Dampener.Active(self)?1.:.1);
|
||||||
}
|
}
|
||||||
|
|
@ -492,25 +508,26 @@ Class Automag : UnrealWeapon
|
||||||
AUTD ABCD 1;
|
AUTD ABCD 1;
|
||||||
AUTD E 30
|
AUTD E 30
|
||||||
{
|
{
|
||||||
invoker.clipcount = Min(invoker.default.clipcount,invoker.Ammo1.Amount);
|
invoker.clipout = false;
|
||||||
invoker.Ammo1.Amount -= invoker.special1;
|
let aadd = min(invoker.Ammo1.Amount,invoker.default.clipcount-invoker.clipcount);
|
||||||
|
invoker.clipcount += aadd;
|
||||||
|
invoker.Ammo1.Amount -= aadd;
|
||||||
A_PlaySound("automag/reload",CHAN_WEAPON,!Dampener.Active(self)?1.:.1);
|
A_PlaySound("automag/reload",CHAN_WEAPON,!Dampener.Active(self)?1.:.1);
|
||||||
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.slaveclipcount <= 0);
|
invoker.slavereload = (invoker.slaveactive&&(invoker.slaveclipcount<invoker.default.slaveclipcount)&&(invoker.Ammo1.Amount>0));
|
||||||
}
|
}
|
||||||
AUTS A 0 A_PlaySound("automag/select",CHAN_WEAPON,!Dampener.Active(self)?1.:.1);
|
AUTS A 0 A_PlaySound("automag/select",CHAN_WEAPON,!Dampener.Active(self)?1.:.1);
|
||||||
Goto Ready;
|
Goto Ready;
|
||||||
LeftReload:
|
LeftReload:
|
||||||
2UTR A 0
|
2UTR A 0
|
||||||
{
|
{
|
||||||
if ( invoker.slaveclipcount>=min(invoker.default.slaveclipcount,invoker.Ammo1.Amount) )
|
if ( invoker.slaveclipcount >= invoker.default.slaveclipcount )
|
||||||
{
|
{
|
||||||
invoker.slavereload = 0;
|
invoker.slavereload = 0;
|
||||||
return ResolveState("LeftIdle");
|
return ResolveState("LeftIdle");
|
||||||
}
|
}
|
||||||
invoker.special2 = min(invoker.default.slaveclipcount,invoker.Ammo1.Amount)-invoker.slaveclipcount;
|
invoker.slaveclipout = true;
|
||||||
invoker.slaveclipcount = -1;
|
|
||||||
A_Overlay(-9998,null);
|
A_Overlay(-9998,null);
|
||||||
A_PlaySound("automag/click",CHAN_6,!Dampener.Active(self)?1.:.1);
|
A_PlaySound("automag/click",CHAN_6,!Dampener.Active(self)?1.:.1);
|
||||||
return ResolveState(null);
|
return ResolveState(null);
|
||||||
|
|
@ -519,8 +536,10 @@ Class Automag : UnrealWeapon
|
||||||
2UTD ABCD 1;
|
2UTD ABCD 1;
|
||||||
2UTD E 30
|
2UTD E 30
|
||||||
{
|
{
|
||||||
invoker.slaveclipcount = Min(invoker.default.slaveclipcount,invoker.Ammo1.Amount);
|
invoker.slaveclipout = false;
|
||||||
invoker.Ammo1.Amount -= invoker.special2;
|
let aadd = min(invoker.Ammo1.Amount,invoker.default.slaveclipcount-invoker.slaveclipcount);
|
||||||
|
invoker.slaveclipcount += aadd;
|
||||||
|
invoker.Ammo1.Amount -= aadd;
|
||||||
A_PlaySound("automag/reload",CHAN_6,!Dampener.Active(self)?1.:.1);
|
A_PlaySound("automag/reload",CHAN_6,!Dampener.Active(self)?1.:.1);
|
||||||
if ( self is 'UTPlayer' )
|
if ( self is 'UTPlayer' )
|
||||||
UTPlayer(self).PlayReloading();
|
UTPlayer(self).PlayReloading();
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ Class Betamag : UnrealWeapon
|
||||||
{
|
{
|
||||||
if ( d.HitType == TRACE_HitActor )
|
if ( d.HitType == TRACE_HitActor )
|
||||||
{
|
{
|
||||||
int dmg = Random[Betamag](1,10)<<1;
|
int dmg = 15;
|
||||||
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Melee',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x));
|
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Melee',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x));
|
||||||
UTMainHandler.DoKnockback(d.HitActor,d.HitDir,35000);
|
UTMainHandler.DoKnockback(d.HitActor,d.HitDir,35000);
|
||||||
if ( d.HitActor.player ) d.HitActor.A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.25);
|
if ( d.HitActor.player ) d.HitActor.A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.25);
|
||||||
|
|
@ -244,7 +244,21 @@ Class Betamag : UnrealWeapon
|
||||||
override void OwnerDied()
|
override void OwnerDied()
|
||||||
{
|
{
|
||||||
Super.OwnerDied();
|
Super.OwnerDied();
|
||||||
slaverefire = 0;
|
slavespin = slavewhip = slaverefire = 0;
|
||||||
|
if ( Owner.player.ReadyWeapon != self ) return;
|
||||||
|
let psp = Owner.player.FindPSprite(2);
|
||||||
|
if ( psp )
|
||||||
|
{
|
||||||
|
slaveactive = false;
|
||||||
|
Owner.player.SetPSprite(2,ResolveState("LeftDeselect"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override void DoEffect()
|
||||||
|
{
|
||||||
|
Super.DoEffect();
|
||||||
|
if ( Ammo1.Amount <= 0 ) SelectionOrder = 6800;
|
||||||
|
else if ( Amount > 1 ) SelectionOrder = 2200;
|
||||||
|
else SelectionOrder = default.SelectionOrder;
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
|
|
@ -275,7 +289,7 @@ Class Betamag : UnrealWeapon
|
||||||
Inventory.InterHubAmount 2;
|
Inventory.InterHubAmount 2;
|
||||||
Weapon.UpSound "betamag/select";
|
Weapon.UpSound "betamag/select";
|
||||||
Weapon.SlotNumber 2;
|
Weapon.SlotNumber 2;
|
||||||
Weapon.SelectionOrder 1;
|
Weapon.SelectionOrder 3000;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
Weapon.AmmoType "UMiniAmmo";
|
Weapon.AmmoType "UMiniAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -301,7 +315,10 @@ Class Betamag : UnrealWeapon
|
||||||
{
|
{
|
||||||
invoker.slavedown = false;
|
invoker.slavedown = false;
|
||||||
if ( !invoker.slaveactive && (CountInv("Betamag") > 1) )
|
if ( !invoker.slaveactive && (CountInv("Betamag") > 1) )
|
||||||
|
{
|
||||||
|
invoker.slavespin = invoker.slavewhip = invoker.slaverefire = 0;
|
||||||
player.setpsprite(2,ResolveState("LeftReady"));
|
player.setpsprite(2,ResolveState("LeftReady"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
AUTS ABCDEFGHIJK 2 A_WeaponReady(WRF_NOFIRE);
|
AUTS ABCDEFGHIJK 2 A_WeaponReady(WRF_NOFIRE);
|
||||||
Idle:
|
Idle:
|
||||||
|
|
@ -334,18 +351,16 @@ Class Betamag : UnrealWeapon
|
||||||
{
|
{
|
||||||
A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM);
|
A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM);
|
||||||
if ( !invoker.slaveactive && (CountInv("Betamag") > 1) )
|
if ( !invoker.slaveactive && (CountInv("Betamag") > 1) )
|
||||||
|
{
|
||||||
|
invoker.slavespin = invoker.slavewhip = invoker.slaverefire = 0;
|
||||||
player.setpsprite(2,ResolveState("LeftReady"));
|
player.setpsprite(2,ResolveState("LeftReady"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Wait;
|
Wait;
|
||||||
LeftDummy:
|
LeftDummy:
|
||||||
TNT1 A 1
|
TNT1 A 1
|
||||||
{
|
{
|
||||||
if ( health <= 0 )
|
if ( invoker.slavedown ) player.setpsprite(2,ResolveState("LeftDeselect"));
|
||||||
{
|
|
||||||
invoker.slaveactive = false;
|
|
||||||
player.setpsprite(2,ResolveState("LeftDeselect"));
|
|
||||||
}
|
|
||||||
else if ( invoker.slavedown ) player.setpsprite(2,ResolveState("LeftDeselect"));
|
|
||||||
else if ( invoker.slavewhip ) player.setpsprite(2,ResolveState("LeftReload"));
|
else if ( invoker.slavewhip ) player.setpsprite(2,ResolveState("LeftReload"));
|
||||||
else if ( invoker.slavespin ) player.setpsprite(2,ResolveState("LeftZoom"));
|
else if ( invoker.slavespin ) player.setpsprite(2,ResolveState("LeftZoom"));
|
||||||
else A_LeftWeaponReady();
|
else A_LeftWeaponReady();
|
||||||
|
|
|
||||||
|
|
@ -230,6 +230,7 @@ Class BigCasing : UTCasing
|
||||||
Class BigGun : UnrealWeapon
|
Class BigGun : UnrealWeapon
|
||||||
{
|
{
|
||||||
int ClipCount;
|
int ClipCount;
|
||||||
|
bool ClipOut;
|
||||||
BigTracer t;
|
BigTracer t;
|
||||||
|
|
||||||
property ClipCount : ClipCount;
|
property ClipCount : ClipCount;
|
||||||
|
|
@ -277,7 +278,7 @@ Class BigGun : UnrealWeapon
|
||||||
}
|
}
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
return ClipCount, -1, (ClipCount<2), false;
|
return ClipOut?-1:ClipCount, -1, (ClipCount<2), false;
|
||||||
}
|
}
|
||||||
override bool CheckAmmo( int fireMode, bool autoSwitch, bool requireAmmo, int ammocount )
|
override bool CheckAmmo( int fireMode, bool autoSwitch, bool requireAmmo, int ammocount )
|
||||||
{
|
{
|
||||||
|
|
@ -393,7 +394,7 @@ Class BigGun : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_BIGGUN";
|
Inventory.PickupMessage "$I_BIGGUN";
|
||||||
Weapon.UpSound "big/select";
|
Weapon.UpSound "big/select";
|
||||||
Weapon.SlotNumber 9;
|
Weapon.SlotNumber 9;
|
||||||
Weapon.SelectionOrder 0;
|
Weapon.SelectionOrder 50;
|
||||||
Weapon.SlotPriority 0.8;
|
Weapon.SlotPriority 0.8;
|
||||||
Weapon.AmmoType "BigAmmo";
|
Weapon.AmmoType "BigAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -419,6 +420,7 @@ Class BigGun : UnrealWeapon
|
||||||
Ready:
|
Ready:
|
||||||
BIGS A 0
|
BIGS A 0
|
||||||
{
|
{
|
||||||
|
invoker.clipout = false;
|
||||||
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.3,-0.2),FRandom[BigGun](0.4,0.5)),3,0,6,SWING_Spring,2,1.8);
|
UTMainHandler.DoSwing(self,(FRandom[BigGun](-0.3,-0.2),FRandom[BigGun](0.4,0.5)),3,0,6,SWING_Spring,2,1.8);
|
||||||
}
|
}
|
||||||
BIGS ABC 2 A_WeaponReady(WRF_NOFIRE);
|
BIGS ABC 2 A_WeaponReady(WRF_NOFIRE);
|
||||||
|
|
@ -517,8 +519,7 @@ Class BigGun : UnrealWeapon
|
||||||
BIGR M 2
|
BIGR M 2
|
||||||
{
|
{
|
||||||
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.3,0.4),FRandom[BigGun](0.6,0.8)),6,0,3,SWING_Spring,2,3);
|
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.3,0.4),FRandom[BigGun](0.6,0.8)),6,0,3,SWING_Spring,2,3);
|
||||||
invoker.special1 = min(invoker.ammo1.amount,invoker.default.clipcount)-invoker.clipcount;
|
invoker.clipout = true;
|
||||||
invoker.clipcount = -1;
|
|
||||||
A_QuakeEx(2,2,2,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollintensity:0.18);
|
A_QuakeEx(2,2,2,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollintensity:0.18);
|
||||||
A_PlaySound("big/punch",CHAN_WEAPON,Dampener.Active(self)?.3:1.);
|
A_PlaySound("big/punch",CHAN_WEAPON,Dampener.Active(self)?.3:1.);
|
||||||
if ( self is 'UTPlayer' ) UTPlayer(self).PlayReloading();
|
if ( self is 'UTPlayer' ) UTPlayer(self).PlayReloading();
|
||||||
|
|
@ -528,8 +529,10 @@ Class BigGun : UnrealWeapon
|
||||||
BIR2 G 2
|
BIR2 G 2
|
||||||
{
|
{
|
||||||
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.2,0.3),FRandom[BigGun](0.3,0.5)),6,0,3,SWING_Spring,2,3);
|
UTMainHandler.DoSwing(self,(FRandom[BigGun](0.2,0.3),FRandom[BigGun](0.3,0.5)),6,0,3,SWING_Spring,2,3);
|
||||||
invoker.clipcount = min(invoker.ammo1.amount,invoker.default.clipcount);
|
invoker.clipout = false;
|
||||||
invoker.Ammo1.Amount -= invoker.special1;
|
let aadd = min(invoker.ammo1.amount,invoker.default.clipcount-invoker.clipcount);
|
||||||
|
invoker.clipcount += aadd;
|
||||||
|
invoker.Ammo1.Amount -= aadd;
|
||||||
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollintensity:0.12);
|
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollintensity:0.12);
|
||||||
A_PlaySound("big/reload",CHAN_WEAPON,Dampener.Active(self)?.3:1.);
|
A_PlaySound("big/reload",CHAN_WEAPON,Dampener.Active(self)?.3:1.);
|
||||||
if ( self is 'UTPlayer' ) UTPlayer(self).PlayReloading();
|
if ( self is 'UTPlayer' ) UTPlayer(self).PlayReloading();
|
||||||
|
|
|
||||||
|
|
@ -97,12 +97,12 @@ Class Bonesaw : UnrealWeapon
|
||||||
if ( invoker.special1 < 5 ) return;
|
if ( invoker.special1 < 5 ) return;
|
||||||
invoker.special1 = 0;
|
invoker.special1 = 0;
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
for ( int i=0; i<8; i++ ) if ( TryHit(angle+i*(45./16),5) || TryHit(angle-i*(45./16),5) ) return;
|
for ( int i=0; i<8; i++ ) if ( TryHit(angle+i*(45./16),6) || TryHit(angle-i*(45./16),6) ) return;
|
||||||
}
|
}
|
||||||
action void A_Clamp()
|
action void A_Clamp()
|
||||||
{
|
{
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
for ( int i=0; i<8; i++ ) if ( TryHit(angle+i*(45./16),20) || TryHit(angle-i*(45./16),20) ) return;
|
for ( int i=0; i<8; i++ ) if ( TryHit(angle+i*(45./16),30) || TryHit(angle-i*(45./16),30) ) return;
|
||||||
}
|
}
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
|
|
@ -110,11 +110,9 @@ Class Bonesaw : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_RAZORCLAW";
|
Inventory.PickupMessage "$I_RAZORCLAW";
|
||||||
Weapon.UpSound "bonesaw/select";
|
Weapon.UpSound "bonesaw/select";
|
||||||
Weapon.SlotNumber 1;
|
Weapon.SlotNumber 1;
|
||||||
Weapon.SelectionOrder 9;
|
Weapon.SelectionOrder 5500;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
+WEAPON.MELEEWEAPON;
|
+WEAPON.MELEEWEAPON;
|
||||||
+FORCEPAIN;
|
|
||||||
+NOEXTREMEDEATH;
|
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -64,10 +64,9 @@ Class DefaultAmmo : Ammo
|
||||||
Ammo.BackpackAmount 0;
|
Ammo.BackpackAmount 0;
|
||||||
Ammo.BackpackMaxAmount 50;
|
Ammo.BackpackMaxAmount 50;
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void DoEffect()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( !Owner ) return;
|
|
||||||
rechargespeed = max(1.1,0.11*Amount);
|
rechargespeed = max(1.1,0.11*Amount);
|
||||||
rechargephase += 1./rechargespeed;
|
rechargephase += 1./rechargespeed;
|
||||||
if ( rechargephase < 35 ) return;
|
if ( rechargephase < 35 ) return;
|
||||||
|
|
@ -341,8 +340,8 @@ Class DispersionAmmo : Actor
|
||||||
a = Spawn(invoker.ExploClass,pos);
|
a = Spawn(invoker.ExploClass,pos);
|
||||||
a.A_SetScale(min(0.8+invoker.mult*0.8,2.5));
|
a.A_SetScale(min(0.8+invoker.mult*0.8,2.5));
|
||||||
if ( !bAMBUSH ) return;
|
if ( !bAMBUSH ) return;
|
||||||
UTMainHandler.DoBlast(self,120,6000);
|
UTMainHandler.DoBlast(self,80,6000);
|
||||||
A_Explode(GetMissileDamage(0,0),120);
|
A_Explode(GetMissileDamage(0,0),80);
|
||||||
}
|
}
|
||||||
override void PostBeginPlay()
|
override void PostBeginPlay()
|
||||||
{
|
{
|
||||||
|
|
@ -478,9 +477,9 @@ Class DispersionPistol : UnrealWeapon
|
||||||
{
|
{
|
||||||
return bCharging?min(5,int(chargesize+0.1)):-1, -1, false, false;
|
return bCharging?min(5,int(chargesize+0.1)):-1, -1, false, false;
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void DoEffect()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.DoEffect();
|
||||||
if ( MainUse < 1 ) MainUse = 1;
|
if ( MainUse < 1 ) MainUse = 1;
|
||||||
if ( sting_dpistol ) ChargeUse = 1;
|
if ( sting_dpistol ) ChargeUse = 1;
|
||||||
else ChargeUse = max(1,MainUse/2);
|
else ChargeUse = max(1,MainUse/2);
|
||||||
|
|
@ -490,7 +489,7 @@ Class DispersionPistol : UnrealWeapon
|
||||||
Weapon weap = Weapon(invoker);
|
Weapon weap = Weapon(invoker);
|
||||||
if ( !weap ) return;
|
if ( !weap ) return;
|
||||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
DefaultAmmo(weap.Ammo1).rechargephase = 0;
|
DefaultAmmo(weap.Ammo1).rechargephase = ((weap.Ammo1.Amount>0)?0:30);
|
||||||
A_PlaySound("dpistol/fire",CHAN_WEAPON,Dampener.Active(self)?.4:1.,pitch:1.2);
|
A_PlaySound("dpistol/fire",CHAN_WEAPON,Dampener.Active(self)?.4:1.,pitch:1.2);
|
||||||
double mult = Amplifier.GetMult(self,80);
|
double mult = Amplifier.GetMult(self,80);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
|
|
@ -569,7 +568,7 @@ Class DispersionPistol : UnrealWeapon
|
||||||
invoker.bCharging = false;
|
invoker.bCharging = false;
|
||||||
if ( self is 'UTPlayer' )
|
if ( self is 'UTPlayer' )
|
||||||
UTPlayer(self).PlayAttacking3();
|
UTPlayer(self).PlayAttacking3();
|
||||||
DefaultAmmo(weap.Ammo1).rechargephase = 0;
|
DefaultAmmo(weap.Ammo1).rechargephase = ((weap.Ammo1.Amount>0)?0:30);
|
||||||
A_PlaySound("dpistol/altfire",CHAN_WEAPON,Dampener.Active(self)?.4:1.);
|
A_PlaySound("dpistol/altfire",CHAN_WEAPON,Dampener.Active(self)?.4:1.);
|
||||||
double mult = Amplifier.GetMult(self,int(invoker.ChargeSize*50)+50);
|
double mult = Amplifier.GetMult(self,int(invoker.ChargeSize*50)+50);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
|
|
@ -636,25 +635,47 @@ Class DispersionPistol : UnrealWeapon
|
||||||
ViewASMDSpark(s).vvel += (FRandom[ASMD](0.5,2.0),FRandom[ASMD](-1.5,1.5),FRandom[ASMD](-1.5,1.5));
|
ViewASMDSpark(s).vvel += (FRandom[ASMD](0.5,2.0),FRandom[ASMD](-1.5,1.5),FRandom[ASMD](-1.5,1.5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
action bool A_DispCharge()
|
void UpdateSelectionOrder()
|
||||||
|
{
|
||||||
|
switch ( pendingupgrade )
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
SelectionOrder = default.SelectionOrder;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
SelectionOrder = 6400;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
SelectionOrder = 5000;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
SelectionOrder = 2700;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
default:
|
||||||
|
SelectionOrder = 1800;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
action State A_DispCharge( statelabel next )
|
||||||
{
|
{
|
||||||
Weapon weap = Weapon(invoker);
|
Weapon weap = Weapon(invoker);
|
||||||
if ( !weap ) return false;
|
if ( !weap ) return ResolveState(null);
|
||||||
DefaultAmmo(weap.Ammo1).rechargephase = 0;
|
DefaultAmmo(weap.Ammo1).rechargephase = 0;
|
||||||
UTMainHandler.DoSwing(self,(FRandom[DPistol](-1,1),FRandom[DPistol](-1,1)),0.02*invoker.chargesize,0,2,SWING_Spring);
|
UTMainHandler.DoSwing(self,(FRandom[DPistol](-1,1),FRandom[DPistol](-1,1)),0.02*invoker.chargesize,0,2,SWING_Spring);
|
||||||
A_WeaponOffset(FRandom[DPistol](-1,1)*1.2*invoker.chargesize,32+FRandom[DPistol](-1,1)*1.2*invoker.chargesize);
|
A_WeaponOffset(FRandom[DPistol](-1,1)*1.2*invoker.chargesize,32+FRandom[DPistol](-1,1)*1.2*invoker.chargesize);
|
||||||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||||
invoker.chargesize += (2.-invoker.upgradelevel*0.15)/35.;
|
invoker.chargesize += (2.-invoker.upgradelevel*0.15)/35.;
|
||||||
invoker.count += 1./35.;
|
invoker.count += 1./35.;
|
||||||
if ( invoker.count < 0.3 ) return false;
|
if ( invoker.count < 0.3 ) return ResolveState(null);
|
||||||
invoker.count = 0;
|
invoker.count = 0;
|
||||||
if ( invoker.chargesize >= 5. ) return true;
|
if ( invoker.chargesize >= 5. ) return ResolveState(next);
|
||||||
if ( !(sv_infiniteammo || (FindInventory('PowerInfiniteAmmo',true))) )
|
if ( !(sv_infiniteammo || (FindInventory('PowerInfiniteAmmo',true))) )
|
||||||
{
|
{
|
||||||
if ( weap.Ammo1.Amount < invoker.ChargeUse ) return true;
|
if ( weap.Ammo1.Amount < invoker.ChargeUse ) return ResolveState(next);
|
||||||
weap.Ammo1.Amount -= invoker.ChargeUse;
|
weap.Ammo1.Amount -= invoker.ChargeUse;
|
||||||
}
|
}
|
||||||
return false;
|
return ResolveState(null);
|
||||||
}
|
}
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
|
|
@ -662,13 +683,15 @@ Class DispersionPistol : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_DPISTOL";
|
Inventory.PickupMessage "$I_DPISTOL";
|
||||||
Weapon.UpSound "dpistol/select";
|
Weapon.UpSound "dpistol/select";
|
||||||
Weapon.SlotNumber 1;
|
Weapon.SlotNumber 1;
|
||||||
Weapon.SelectionOrder 2;
|
Weapon.SelectionOrder 7700;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "DefaultAmmo";
|
Weapon.AmmoType "DefaultAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
Weapon.AmmoType2 "DefaultAmmo";
|
Weapon.AmmoType2 "DefaultAmmo";
|
||||||
Weapon.AmmoUse2 1;
|
Weapon.AmmoUse2 1;
|
||||||
Weapon.AmmoGive 50;
|
Weapon.AmmoGive 50;
|
||||||
|
Weapon.MinSelectionAmmo1 10;
|
||||||
|
Weapon.MinSelectionAmmo2 10;
|
||||||
UTWeapon.DropAmmo 25;
|
UTWeapon.DropAmmo 25;
|
||||||
+WEAPON.WIMPY_WEAPON;
|
+WEAPON.WIMPY_WEAPON;
|
||||||
}
|
}
|
||||||
|
|
@ -804,40 +827,40 @@ Class DispersionPistol : UnrealWeapon
|
||||||
return ResolveState("AltFire5");
|
return ResolveState("AltFire5");
|
||||||
}
|
}
|
||||||
AltFire1:
|
AltFire1:
|
||||||
#### # 1 A_JumpIf(A_DispCharge(),2);
|
#### # 1 A_DispCharge(1);
|
||||||
#### # 0 A_ReFire("AltFire1");
|
Wait;
|
||||||
AltRelease1:
|
AltRelease1:
|
||||||
#### # 3 A_DispAltFire();
|
#### # 3 A_DispAltFire();
|
||||||
DPF1 ABC 8;
|
DPF1 ABC 8;
|
||||||
DPI1 A 6;
|
DPI1 A 6;
|
||||||
Goto Idle;
|
Goto Idle;
|
||||||
AltFire2:
|
AltFire2:
|
||||||
#### # 1 A_JumpIf(A_DispCharge(),2);
|
#### # 1 A_DispCharge(1);
|
||||||
#### # 0 A_ReFire("AltFire2");
|
Wait;
|
||||||
AltRelease2:
|
AltRelease2:
|
||||||
#### # 3 A_DispAltFire();
|
#### # 3 A_DispAltFire();
|
||||||
DPF2 ABC 8;
|
DPF2 ABC 8;
|
||||||
DPI2 A 6;
|
DPI2 A 6;
|
||||||
Goto Idle;
|
Goto Idle;
|
||||||
AltFire3:
|
AltFire3:
|
||||||
#### # 1 A_JumpIf(A_DispCharge(),2);
|
#### # 1 A_DispCharge(1);
|
||||||
#### # 0 A_ReFire("AltFire3");
|
Wait;
|
||||||
AltRelease3:
|
AltRelease3:
|
||||||
#### # 3 A_DispAltFire();
|
#### # 3 A_DispAltFire();
|
||||||
DPF3 ABC 8;
|
DPF3 ABC 8;
|
||||||
DPI3 A 6;
|
DPI3 A 6;
|
||||||
Goto Idle;
|
Goto Idle;
|
||||||
AltFire4:
|
AltFire4:
|
||||||
#### # 1 A_JumpIf(A_DispCharge(),2);
|
#### # 1 A_DispCharge(1);
|
||||||
#### # 0 A_ReFire("AltFire4");
|
Wait;
|
||||||
AltRelease4:
|
AltRelease4:
|
||||||
#### # 3 A_DispAltFire();
|
#### # 3 A_DispAltFire();
|
||||||
DPF4 ABC 8;
|
DPF4 ABC 8;
|
||||||
DPI4 A 6;
|
DPI4 A 6;
|
||||||
Goto Idle;
|
Goto Idle;
|
||||||
AltFire5:
|
AltFire5:
|
||||||
#### # 1 A_JumpIf(A_DispCharge(),2);
|
#### # 1 A_DispCharge(1);
|
||||||
#### # 0 A_ReFire("AltFire5");
|
Wait;
|
||||||
AltRelease5:
|
AltRelease5:
|
||||||
#### # 3 A_DispAltFire();
|
#### # 3 A_DispAltFire();
|
||||||
DPF5 ABC 8;
|
DPF5 ABC 8;
|
||||||
|
|
@ -848,6 +871,7 @@ Class DispersionPistol : UnrealWeapon
|
||||||
{
|
{
|
||||||
A_Overlay(-9999,"Null");
|
A_Overlay(-9999,"Null");
|
||||||
invoker.MainUse = min(6,invoker.upgradelevel+1);
|
invoker.MainUse = min(6,invoker.upgradelevel+1);
|
||||||
|
invoker.UpdateSelectionOrder();
|
||||||
invoker.upgradelevel++;
|
invoker.upgradelevel++;
|
||||||
if ( invoker.upgradelevel == 0 ) return ResolveState("Idle");
|
if ( invoker.upgradelevel == 0 ) return ResolveState("Idle");
|
||||||
else if ( invoker.upgradelevel == 1 ) return ResolveState("Upgrade1");
|
else if ( invoker.upgradelevel == 1 ) return ResolveState("Upgrade1");
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,7 @@ Class UFireball2 : UFireball
|
||||||
{
|
{
|
||||||
Radius 8;
|
Radius 8;
|
||||||
Height 8;
|
Height 8;
|
||||||
DamageFunction 50;
|
DamageFunction 60;
|
||||||
Speed 5;
|
Speed 5;
|
||||||
UFireball.SpreadFactor 0.35;
|
UFireball.SpreadFactor 0.35;
|
||||||
UFireball.NumSmokes 2;
|
UFireball.NumSmokes 2;
|
||||||
|
|
@ -283,7 +283,7 @@ Class FlameGun : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_FLAMEGUN";
|
Inventory.PickupMessage "$I_FLAMEGUN";
|
||||||
Weapon.UpSound "flamegun/select";
|
Weapon.UpSound "flamegun/select";
|
||||||
Weapon.SlotNumber 5;
|
Weapon.SlotNumber 5;
|
||||||
Weapon.SelectionOrder 2;
|
Weapon.SelectionOrder 1200;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
Weapon.AmmoType "FlameAmmo";
|
Weapon.AmmoType "FlameAmmo";
|
||||||
Weapon.AmmoUse 10;
|
Weapon.AmmoUse 10;
|
||||||
|
|
@ -356,7 +356,8 @@ Class FlameGun : UnrealWeapon
|
||||||
TNT1 A 1
|
TNT1 A 1
|
||||||
{
|
{
|
||||||
A_CheckReload();
|
A_CheckReload();
|
||||||
A_WeaponReady();
|
if ( invoker.Ammo1.Amount >= 30 ) A_WeaponReady();
|
||||||
|
else A_WeaponReady(WRF_NOSECONDARY);
|
||||||
}
|
}
|
||||||
Wait;
|
Wait;
|
||||||
Idle:
|
Idle:
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@ Class SMiniAmmo : Ammo
|
||||||
Default
|
Default
|
||||||
{
|
{
|
||||||
Inventory.Icon "I_SMini";
|
Inventory.Icon "I_SMini";
|
||||||
Inventory.Amount 20;
|
Inventory.Amount 32;
|
||||||
Inventory.MaxAmount 30;
|
Inventory.MaxAmount 32;
|
||||||
Ammo.BackpackAmount 0;
|
Ammo.BackpackAmount 0;
|
||||||
Ammo.BackpackMaxAmount 50;
|
Ammo.BackpackMaxAmount 64;
|
||||||
}
|
}
|
||||||
override bool TryPickup( in out Actor toucher )
|
override bool TryPickup( in out Actor toucher )
|
||||||
{
|
{
|
||||||
|
|
@ -37,7 +37,7 @@ Class SMiniShell : FastProjectile
|
||||||
{
|
{
|
||||||
Obituary "$O_SMINI";
|
Obituary "$O_SMINI";
|
||||||
DamageType 'Shot';
|
DamageType 'Shot';
|
||||||
DamageFunction 150;
|
DamageFunction 300;
|
||||||
Radius 4;
|
Radius 4;
|
||||||
Height 4;
|
Height 4;
|
||||||
Speed 200;
|
Speed 200;
|
||||||
|
|
@ -71,12 +71,12 @@ Class SMiniShell : FastProjectile
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_SetRenderStyle(1.0,STYLE_Add);
|
A_SetRenderStyle(1.0,STYLE_Add);
|
||||||
A_NoGravity();
|
A_NoGravity();
|
||||||
A_Explode(150,50,XF_HURTSOURCE|XF_EXPLICITDAMAGETYPE,damagetype:'exploded');
|
A_Explode(150,120,XF_HURTSOURCE|XF_EXPLICITDAMAGETYPE,damagetype:'exploded');
|
||||||
A_QuakeEx(4,4,4,10,0,250,"",QF_RELATIVE|QF_SCALEDOWN,falloff:120,rollintensity:0.2);
|
A_QuakeEx(4,4,4,10,0,250,"",QF_RELATIVE|QF_SCALEDOWN,falloff:120,rollintensity:0.2);
|
||||||
A_PlaySound("smini/explode",CHAN_VOICE,pitch:FRandom[SMini](0.8,1.2));
|
A_PlaySound("smini/explode",CHAN_VOICE,pitch:FRandom[SMini](0.8,1.2));
|
||||||
A_SprayDecal("SmallRocketBlast");
|
A_SprayDecal("SmallRocketBlast");
|
||||||
UTMainHandler.DoBlast(self,50,20000);
|
UTMainHandler.DoBlast(self,120,20000);
|
||||||
Scale *= FRandom[ExploS](0.8,1.1);
|
Scale *= FRandom[ExploS](1.4,1.8);
|
||||||
Scale.x *= RandomPick[ExploS](-1,1);
|
Scale.x *= RandomPick[ExploS](-1,1);
|
||||||
Scale.y *= RandomPick[ExploS](-1,1);
|
Scale.y *= RandomPick[ExploS](-1,1);
|
||||||
Vector3 dir = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
Vector3 dir = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
||||||
|
|
@ -244,13 +244,13 @@ Class SMiniGun : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_SMINI";
|
Inventory.PickupMessage "$I_SMINI";
|
||||||
Weapon.UpSound "smini/select";
|
Weapon.UpSound "smini/select";
|
||||||
Weapon.SlotNumber 0;
|
Weapon.SlotNumber 0;
|
||||||
Weapon.SelectionOrder 1;
|
Weapon.SelectionOrder 10;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
Weapon.AmmoType "SMiniAmmo";
|
Weapon.AmmoType "SMiniAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
Weapon.AmmoType2 "SMiniAmmo";
|
Weapon.AmmoType2 "SMiniAmmo";
|
||||||
Weapon.AmmoUse2 1;
|
Weapon.AmmoUse2 1;
|
||||||
Weapon.AmmoGive 20;
|
Weapon.AmmoGive 32;
|
||||||
Inventory.RespawnTics 2100;
|
Inventory.RespawnTics 2100;
|
||||||
+INVENTORY.IGNORESKILL;
|
+INVENTORY.IGNORESKILL;
|
||||||
UTWeapon.DropAmmo 4;
|
UTWeapon.DropAmmo 4;
|
||||||
|
|
|
||||||
|
|
@ -267,21 +267,18 @@ Class ImpalerBolt : Actor
|
||||||
if ( !(GetAge()%5) )
|
if ( !(GetAge()%5) )
|
||||||
{
|
{
|
||||||
UTMainHandler.DoKnockback(t.hitlist[i].hitactor,t.hitlist[i].x,500*specialf1**2);
|
UTMainHandler.DoKnockback(t.hitlist[i].hitactor,t.hitlist[i].x,500*specialf1**2);
|
||||||
t.hitlist[i].hitactor.DamageMobj(self,target,int(2*specialf1**3),'Impaler',DMG_THRUSTLESS);
|
t.hitlist[i].hitactor.DamageMobj(self,target,int(10*specialf1**1.5),'Impaler',DMG_THRUSTLESS);
|
||||||
}
|
}
|
||||||
if ( start.Hitlist.Find(t.HitList[i].HitActor) == start.HitList.Size() )
|
if ( start.Hitlist.Find(t.HitList[i].HitActor) == start.HitList.Size() )
|
||||||
start.Hitlist.Push(t.HitList[i].HitActor);
|
start.Hitlist.Push(t.HitList[i].HitActor);
|
||||||
}
|
}
|
||||||
// seeking
|
// seeking
|
||||||
double closest = 500;
|
double closest = 500*specialf1;
|
||||||
if ( tracer )
|
if ( tracer )
|
||||||
{
|
{
|
||||||
double closest = Distance3D(tracer);
|
double tdist = Distance3D(tracer);
|
||||||
if ( (closest > 500) || (tracer.Health <= 0) )
|
if ( (tdist > closest) || (tracer.Health <= 0) )
|
||||||
{
|
|
||||||
tracer = null;
|
tracer = null;
|
||||||
closest = 500;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
let bt = BlockThingsIterator.Create(self,closest);
|
let bt = BlockThingsIterator.Create(self,closest);
|
||||||
while ( bt.Next() )
|
while ( bt.Next() )
|
||||||
|
|
@ -358,14 +355,14 @@ Class ImpalerBolt : Actor
|
||||||
next.special2 = special2+1;
|
next.special2 = special2+1;
|
||||||
next.specialf1 = max(1.,specialf1);
|
next.specialf1 = max(1.,specialf1);
|
||||||
next.oldx = dir;
|
next.oldx = dir;
|
||||||
next.bHITOWNER = true;
|
next.bHITOWNER = !sting_impself;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
next.tracer = tracer;
|
next.tracer = tracer;
|
||||||
next.special1 = special1+1;
|
next.special1 = special1+1;
|
||||||
next.specialf1 = max(1.,specialf1);
|
next.specialf1 = max(1.,specialf1);
|
||||||
next.bHITOWNER = true;
|
next.bHITOWNER = !sting_impself;
|
||||||
next.UpdateBeam(self,t.Results.HitPos+normal,dir);
|
next.UpdateBeam(self,t.Results.HitPos+normal,dir);
|
||||||
}
|
}
|
||||||
if ( t.Results.HitType != TRACE_HitNone )
|
if ( t.Results.HitType != TRACE_HitNone )
|
||||||
|
|
@ -373,7 +370,6 @@ Class ImpalerBolt : Actor
|
||||||
if ( !weffect ) weffect = Spawn("ImpalerBoltHit",t.Results.HitPos+normal*4);
|
if ( !weffect ) weffect = Spawn("ImpalerBoltHit",t.Results.HitPos+normal*4);
|
||||||
weffect.SetOrigin(t.Results.HitPos+normal*4,true);
|
weffect.SetOrigin(t.Results.HitPos+normal*4,true);
|
||||||
weffect.sprite = weffect.GetSpriteIndex('IHIT');
|
weffect.sprite = weffect.GetSpriteIndex('IHIT');
|
||||||
|
|
||||||
}
|
}
|
||||||
else if ( weffect ) weffect.Destroy();
|
else if ( weffect ) weffect.Destroy();
|
||||||
return;
|
return;
|
||||||
|
|
@ -547,9 +543,9 @@ Class ImpalerProjectile : Actor
|
||||||
A_AlertMonsters();
|
A_AlertMonsters();
|
||||||
A_SetRenderStyle(1.,STYLE_Add);
|
A_SetRenderStyle(1.,STYLE_Add);
|
||||||
A_NoGravity();
|
A_NoGravity();
|
||||||
A_Explode(50+special1/2,120+special1/5);
|
A_Explode(50+special1/2,80+special1/5);
|
||||||
UTMainHandler.DoBlast(self,120+special1/5,40000);
|
UTMainHandler.DoBlast(self,80+special1/5,40000);
|
||||||
A_QuakeEx(2,2,2,5,0,250+special1/5,"",QF_RELATIVE|QF_SCALEDOWN,falloff:120+special1/2,rollintensity:0.2);
|
A_QuakeEx(2,2,2,5,0,150+special1/5,"",QF_RELATIVE|QF_SCALEDOWN,falloff:80+special1/2,rollintensity:0.2);
|
||||||
A_PlaySound("impaler/hit",CHAN_VOICE);
|
A_PlaySound("impaler/hit",CHAN_VOICE);
|
||||||
A_SprayDecal("ShockMark",20);
|
A_SprayDecal("ShockMark",20);
|
||||||
let l = Spawn("ImpalerBurstLight",pos);
|
let l = Spawn("ImpalerBurstLight",pos);
|
||||||
|
|
@ -734,9 +730,10 @@ Class Impaler : UnrealWeapon
|
||||||
if ( !(invoker.special1%15) )
|
if ( !(invoker.special1%15) )
|
||||||
{
|
{
|
||||||
if ( invoker.ClipCount <= 0 ) return;
|
if ( invoker.ClipCount <= 0 ) return;
|
||||||
|
double mul = Amplifier.GetMult(self,10);
|
||||||
if ( invoker.beam )
|
if ( invoker.beam )
|
||||||
invoker.beam.specialf1 = Amplifier.GetMult(self,10);
|
invoker.beam.specialf1 = mul;
|
||||||
invoker.clipcount--;
|
invoker.clipcount = max(0,invoker.clipcount-int(mul));
|
||||||
}
|
}
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
UTMainHandler.DoFlash(self,Color(16,255,32,255),3);
|
UTMainHandler.DoFlash(self,Color(16,255,32,255),3);
|
||||||
|
|
@ -836,6 +833,8 @@ Class Impaler : UnrealWeapon
|
||||||
override void DoEffect()
|
override void DoEffect()
|
||||||
{
|
{
|
||||||
Super.DoEffect();
|
Super.DoEffect();
|
||||||
|
if ( (Ammo1.Amount <= 0) && (ClipCount <= 0) ) SelectionOrder = 6600;
|
||||||
|
else SelectionOrder = default.SelectionOrder;
|
||||||
if ( Owner.player.ReadyWeapon != self ) return;
|
if ( Owner.player.ReadyWeapon != self ) return;
|
||||||
if ( (Owner.waterlevel > 2) && !(level.maptime%5) )
|
if ( (Owner.waterlevel > 2) && !(level.maptime%5) )
|
||||||
ClipCount = max(0,ClipCount-1);
|
ClipCount = max(0,ClipCount-1);
|
||||||
|
|
@ -853,7 +852,7 @@ Class Impaler : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_IMPALER";
|
Inventory.PickupMessage "$I_IMPALER";
|
||||||
Weapon.UpSound "impaler/select";
|
Weapon.UpSound "impaler/select";
|
||||||
Weapon.SlotNumber 7;
|
Weapon.SlotNumber 7;
|
||||||
Weapon.SelectionOrder 0;
|
Weapon.SelectionOrder 700;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
Weapon.AmmoType "ImpalerAmmo";
|
Weapon.AmmoType "ImpalerAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -61,10 +61,7 @@ Class OnFire : Thinker
|
||||||
if ( !(victim is 'UNapalm') )
|
if ( !(victim is 'UNapalm') )
|
||||||
{
|
{
|
||||||
if ( !(level.maptime%3) )
|
if ( !(level.maptime%3) )
|
||||||
{
|
|
||||||
amount--;
|
amount--;
|
||||||
amount -= int(victim.vel.length()/10);
|
|
||||||
}
|
|
||||||
if ( victim.player ) amount -= int(abs(actor.deltaangle(victim.angle,oangle))/30);
|
if ( victim.player ) amount -= int(abs(actor.deltaangle(victim.angle,oangle))/30);
|
||||||
oangle = victim.angle;
|
oangle = victim.angle;
|
||||||
}
|
}
|
||||||
|
|
@ -910,7 +907,7 @@ Class UFlamethrower : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_FLAMETHROWER";
|
Inventory.PickupMessage "$I_FLAMETHROWER";
|
||||||
Weapon.UpSound "flamet/select";
|
Weapon.UpSound "flamet/select";
|
||||||
Weapon.SlotNumber 6;
|
Weapon.SlotNumber 6;
|
||||||
Weapon.SelectionOrder 4;
|
Weapon.SelectionOrder 300;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
Weapon.AmmoType "FlameAmmo";
|
Weapon.AmmoType "FlameAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -228,7 +228,7 @@ Class OLSMP : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_OLSMP";
|
Inventory.PickupMessage "$I_OLSMP";
|
||||||
Weapon.UpSound "automag/select";
|
Weapon.UpSound "automag/select";
|
||||||
Weapon.SlotNumber 0;
|
Weapon.SlotNumber 0;
|
||||||
Weapon.SelectionOrder 9;
|
Weapon.SelectionOrder 800;
|
||||||
Weapon.SlotPriority 0.95;
|
Weapon.SlotPriority 0.95;
|
||||||
Weapon.AmmoType "OLSMPAmmo";
|
Weapon.AmmoType "OLSMPAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -453,7 +453,7 @@ Class Peacemaker : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_PEACE";
|
Inventory.PickupMessage "$I_PEACE";
|
||||||
Weapon.UpSound "peace/select";
|
Weapon.UpSound "peace/select";
|
||||||
Weapon.SlotNumber 8;
|
Weapon.SlotNumber 8;
|
||||||
Weapon.SelectionOrder 1;
|
Weapon.SelectionOrder 1050;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
Weapon.AmmoType "PeaceAmmo";
|
Weapon.AmmoType "PeaceAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -81,21 +81,22 @@ Class QuadshotTracer : LineTracer
|
||||||
|
|
||||||
Class QuadShot : UnrealWeapon
|
Class QuadShot : UnrealWeapon
|
||||||
{
|
{
|
||||||
int ClipCount;
|
int ClipCount, HeldShells;
|
||||||
|
bool ClipOut;
|
||||||
QuadshotTracer t;
|
QuadshotTracer t;
|
||||||
|
|
||||||
property ClipCount : ClipCount;
|
property ClipCount : ClipCount;
|
||||||
|
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
return ClipCount, -1, (ClipCount<2), false;
|
return ClipOut?-1:ClipCount, -1, (ClipCount<2), false;
|
||||||
}
|
}
|
||||||
|
|
||||||
action void ProcessTraceHit( Linetracer t )
|
action void ProcessTraceHit( Linetracer t )
|
||||||
{
|
{
|
||||||
if ( t.Results.HitType == TRACE_HitActor )
|
if ( t.Results.HitType == TRACE_HitActor )
|
||||||
{
|
{
|
||||||
int dmg = Random[Quadshot](4,8);
|
int dmg = 11;
|
||||||
FlakAccumulator.Accumulate(t.Results.HitActor,dmg,invoker,self,'shot');
|
FlakAccumulator.Accumulate(t.Results.HitActor,dmg,invoker,self,'shot');
|
||||||
double mm = 2400;
|
double mm = 2400;
|
||||||
UTMainHandler.DoKnockback(t.Results.HitActor,t.Results.HitVector+(0,0,0.025),mm*FRandom[Quadshot](0.4,1.2));
|
UTMainHandler.DoKnockback(t.Results.HitActor,t.Results.HitVector+(0,0,0.025),mm*FRandom[Quadshot](0.4,1.2));
|
||||||
|
|
@ -257,7 +258,7 @@ Class QuadShot : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_QUADSHOT";
|
Inventory.PickupMessage "$I_QUADSHOT";
|
||||||
Weapon.UpSound "quadshot/select";
|
Weapon.UpSound "quadshot/select";
|
||||||
Weapon.SlotNumber 3;
|
Weapon.SlotNumber 3;
|
||||||
Weapon.SelectionOrder 2;
|
Weapon.SelectionOrder 1400;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
Weapon.AmmoType "UShells";
|
Weapon.AmmoType "UShells";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -279,6 +280,12 @@ Class QuadShot : UnrealWeapon
|
||||||
QUAS A 1 A_Raise(int.max);
|
QUAS A 1 A_Raise(int.max);
|
||||||
Wait;
|
Wait;
|
||||||
Ready:
|
Ready:
|
||||||
|
QUAS A 0
|
||||||
|
{
|
||||||
|
invoker.clipout = false;
|
||||||
|
invoker.clipcount += invoker.heldshells;
|
||||||
|
invoker.heldshells = 0;
|
||||||
|
}
|
||||||
QUAS ABCDEFGHIJK 2 A_WeaponReady(WRF_NOFIRE);
|
QUAS ABCDEFGHIJK 2 A_WeaponReady(WRF_NOFIRE);
|
||||||
Goto Idle;
|
Goto Idle;
|
||||||
Dummy:
|
Dummy:
|
||||||
|
|
@ -288,7 +295,7 @@ Class QuadShot : UnrealWeapon
|
||||||
if ( !A_QuadshotCheckForReload() )
|
if ( !A_QuadshotCheckForReload() )
|
||||||
{
|
{
|
||||||
let weap = Weapon(invoker);
|
let weap = Weapon(invoker);
|
||||||
if ( invoker.clipcount < min(weap.Ammo1.Amount,invoker.default.clipcount) )
|
if ( (invoker.clipcount < invoker.default.clipcount) && (invoker.Ammo1.Amount > 0) )
|
||||||
A_WeaponReady(WRF_ALLOWRELOAD);
|
A_WeaponReady(WRF_ALLOWRELOAD);
|
||||||
else A_WeaponReady();
|
else A_WeaponReady();
|
||||||
}
|
}
|
||||||
|
|
@ -359,25 +366,25 @@ Class QuadShot : UnrealWeapon
|
||||||
QUAR LMNOPQRSTU 1;
|
QUAR LMNOPQRSTU 1;
|
||||||
QUAR V 0
|
QUAR V 0
|
||||||
{
|
{
|
||||||
|
invoker.clipout = true;
|
||||||
A_DropShells();
|
A_DropShells();
|
||||||
let weap = Weapon(invoker);
|
let weap = Weapon(invoker);
|
||||||
invoker.special1 = min(weap.Ammo1.Amount,invoker.default.clipcount);
|
|
||||||
invoker.special2 = invoker.special1-invoker.clipcount;
|
|
||||||
invoker.clipcount = -1;
|
|
||||||
}
|
}
|
||||||
QUAR VWXYZ[\] 1;
|
QUAR VWXYZ[\] 1;
|
||||||
QUR2 ABCDEFGHIJKLMNOPQR 1;
|
QUR2 ABCDEFGHIJKLMNOPQR 1;
|
||||||
QUR2 S 0
|
QUR2 S 0
|
||||||
{
|
{
|
||||||
|
invoker.clipout = false;
|
||||||
|
invoker.heldshells = invoker.clipcount;
|
||||||
|
invoker.clipcount = 0;
|
||||||
A_PlaySound("quadshot/load",CHAN_6,Dampener.Active(self)?.1:1.);
|
A_PlaySound("quadshot/load",CHAN_6,Dampener.Active(self)?.1:1.);
|
||||||
let weap = Weapon(invoker);
|
let weap = Weapon(invoker);
|
||||||
invoker.clipcount = 0;
|
for ( int i=0; i<2; i++ )
|
||||||
if ( invoker.special1 > 0 )
|
|
||||||
{
|
{
|
||||||
weap.Ammo1.Amount -= min(2,invoker.special2);
|
if ( (invoker.clipcount >= 4) || (invoker.heldshells+weap.Ammo1.Amount <= 0) ) continue;
|
||||||
invoker.clipcount += min(2,invoker.special1);
|
invoker.clipcount++;
|
||||||
invoker.special1 = max(0,invoker.special1-2);
|
if ( invoker.heldshells > 0 ) invoker.heldshells--;
|
||||||
invoker.special2 = max(0,invoker.special2-2);
|
else weap.Ammo1.Amount--;
|
||||||
}
|
}
|
||||||
if ( self is 'UTPlayer' )
|
if ( self is 'UTPlayer' )
|
||||||
UTPlayer(self).PlayReloading();
|
UTPlayer(self).PlayReloading();
|
||||||
|
|
@ -388,12 +395,12 @@ Class QuadShot : UnrealWeapon
|
||||||
{
|
{
|
||||||
A_PlaySound("quadshot/load",CHAN_6,Dampener.Active(self)?.1:1.);
|
A_PlaySound("quadshot/load",CHAN_6,Dampener.Active(self)?.1:1.);
|
||||||
let weap = Weapon(invoker);
|
let weap = Weapon(invoker);
|
||||||
if ( invoker.special1 > 0 )
|
for ( int i=0; i<2; i++ )
|
||||||
{
|
{
|
||||||
weap.Ammo1.Amount -= min(2,invoker.special2);
|
if ( (invoker.clipcount >= 4) || (invoker.heldshells+weap.Ammo1.Amount <= 0) ) continue;
|
||||||
invoker.clipcount += min(2,invoker.special1);
|
invoker.clipcount++;
|
||||||
invoker.special1 = max(0,invoker.special1-2);
|
if ( invoker.heldshells > 0 ) invoker.heldshells--;
|
||||||
invoker.special2 = max(0,invoker.special2-2);
|
else weap.Ammo1.Amount--;
|
||||||
}
|
}
|
||||||
if ( self is 'UTPlayer' )
|
if ( self is 'UTPlayer' )
|
||||||
UTPlayer(self).PlayReloading();
|
UTPlayer(self).PlayReloading();
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ Class RazorBlade : Actor
|
||||||
Radius 2;
|
Radius 2;
|
||||||
Height 2;
|
Height 2;
|
||||||
Speed 25;
|
Speed 25;
|
||||||
DamageFunction (int((30+special1*5)*((DamageType=='Decapitated')?3.5:1.0)));
|
DamageFunction (int((30+special1*10)*((DamageType=='Decapitated')?3.5:1.0)));
|
||||||
DamageType 'Shredded';
|
DamageType 'Shredded';
|
||||||
Obituary "$O_RAZORJACK";
|
Obituary "$O_RAZORJACK";
|
||||||
BounceType "Hexen";
|
BounceType "Hexen";
|
||||||
|
|
@ -269,7 +269,7 @@ Class Razorjack : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_RAZORJACK";
|
Inventory.PickupMessage "$I_RAZORJACK";
|
||||||
Weapon.UpSound "ripper/select";
|
Weapon.UpSound "ripper/select";
|
||||||
Weapon.SlotNumber 7;
|
Weapon.SlotNumber 7;
|
||||||
Weapon.SelectionOrder 7;
|
Weapon.SelectionOrder 1500;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "RazorAmmo";
|
Weapon.AmmoType "RazorAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -223,7 +223,7 @@ Class URifle : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_RIFLE";
|
Inventory.PickupMessage "$I_RIFLE";
|
||||||
Weapon.UpSound "sniper/select";
|
Weapon.UpSound "sniper/select";
|
||||||
Weapon.SlotNumber 9;
|
Weapon.SlotNumber 9;
|
||||||
Weapon.SelectionOrder 9;
|
Weapon.SelectionOrder 900;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "URifleAmmo";
|
Weapon.AmmoType "URifleAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -515,7 +515,7 @@ Class Stinger : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_STINGER";
|
Inventory.PickupMessage "$I_STINGER";
|
||||||
Weapon.UpSound "stinger/select";
|
Weapon.UpSound "stinger/select";
|
||||||
Weapon.SlotNumber 3;
|
Weapon.SlotNumber 3;
|
||||||
Weapon.SelectionOrder 7;
|
Weapon.SelectionOrder 2500;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "StingerAmmo";
|
Weapon.AmmoType "StingerAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -599,12 +599,12 @@ Class Stinger : UnrealWeapon
|
||||||
Actor p;
|
Actor p;
|
||||||
double a, s;
|
double a, s;
|
||||||
Vector3 dir;
|
Vector3 dir;
|
||||||
for ( int i=0; i<4; i++ )
|
for ( int i=0; i<5; i++ )
|
||||||
{
|
{
|
||||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||||
a = FRandom[Stinger](0,360);
|
a = FRandom[Stinger](0,360);
|
||||||
s = FRandom[Stinger](0,0.08);
|
s = FRandom[Stinger](0,(i>0)?.08:0.); // first shot always accurate
|
||||||
dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
|
dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
|
||||||
p = Spawn("StingerProjectile",origin);
|
p = Spawn("StingerProjectile",origin);
|
||||||
p.angle = atan2(dir.y,dir.x);
|
p.angle = atan2(dir.y,dir.x);
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,9 @@ Class StunnerAmmo : Ammo
|
||||||
Ammo.BackpackAmount 0;
|
Ammo.BackpackAmount 0;
|
||||||
Ammo.BackpackMaxAmount 50;
|
Ammo.BackpackMaxAmount 50;
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void DoEffect()
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
if ( !Owner ) return;
|
|
||||||
rechargespeed = max(2.,.2*Amount);
|
rechargespeed = max(2.,.2*Amount);
|
||||||
rechargephase += 1./rechargespeed;
|
rechargephase += 1./rechargespeed;
|
||||||
if ( rechargephase < 7 ) return;
|
if ( rechargephase < 7 ) return;
|
||||||
|
|
@ -143,7 +142,7 @@ Class StunProj : Actor
|
||||||
SetOrigin(t.Results.HitPos-t.Results.HitVector*4,false);
|
SetOrigin(t.Results.HitPos-t.Results.HitVector*4,false);
|
||||||
StunExplode();
|
StunExplode();
|
||||||
Actor a = t.Results.HitActor;
|
Actor a = t.Results.HitActor;
|
||||||
a.DamageMobj(self,target,max(1,int(1.1*specialf1)),'jolted',DMG_USEANGLE,atan2(t.Results.HitVector.y,t.Results.HitVector.x));
|
a.DamageMobj(self,target,max(1,int(4*specialf1)),'jolted',DMG_USEANGLE,atan2(t.Results.HitVector.y,t.Results.HitVector.x));
|
||||||
if ( !a.bDONTTHRUST )
|
if ( !a.bDONTTHRUST )
|
||||||
{
|
{
|
||||||
UTMainHandler.DoKnockback(a,t.Results.HitVector,(bAMBUSH?-22000:26000)*specialf1);
|
UTMainHandler.DoKnockback(a,t.Results.HitVector,(bAMBUSH?-22000:26000)*specialf1);
|
||||||
|
|
@ -274,7 +273,7 @@ Class Stunner : UnrealWeapon
|
||||||
|
|
||||||
override int, int, bool, bool GetClipAmount()
|
override int, int, bool, bool GetClipAmount()
|
||||||
{
|
{
|
||||||
return bCharging?min(6,int(chargesize)):-1, -1, false, false;
|
return bCharging?min(5,int(chargesize)):-1, -1, false, false;
|
||||||
}
|
}
|
||||||
action void A_StunnerFire()
|
action void A_StunnerFire()
|
||||||
{
|
{
|
||||||
|
|
@ -284,7 +283,7 @@ Class Stunner : UnrealWeapon
|
||||||
invoker.bCharging = false;
|
invoker.bCharging = false;
|
||||||
if ( self is 'UTPlayer' )
|
if ( self is 'UTPlayer' )
|
||||||
UTPlayer(self).PlayAttacking3();
|
UTPlayer(self).PlayAttacking3();
|
||||||
StunnerAmmo(weap.Ammo1).rechargephase = 0;
|
StunnerAmmo(weap.Ammo1).rechargephase = ((weap.Ammo1.Amount>0)?0:5);
|
||||||
A_PlaySound("stun/fire",CHAN_WEAPON,Dampener.Active(self)?.4:1.,pitch:1.2-invoker.chargesize*0.06);
|
A_PlaySound("stun/fire",CHAN_WEAPON,Dampener.Active(self)?.4:1.,pitch:1.2-invoker.chargesize*0.06);
|
||||||
double mult = Amplifier.GetMult(self,int(invoker.ChargeSize*50)+50);
|
double mult = Amplifier.GetMult(self,int(invoker.ChargeSize*50)+50);
|
||||||
invoker.FireEffect();
|
invoker.FireEffect();
|
||||||
|
|
@ -353,15 +352,15 @@ Class Stunner : UnrealWeapon
|
||||||
UTMainHandler.DoSwing(self,(FRandom[Stunner](-1,1),FRandom[Stunner](-1,1)),0.02*invoker.chargesize,0,2,SWING_Spring);
|
UTMainHandler.DoSwing(self,(FRandom[Stunner](-1,1),FRandom[Stunner](-1,1)),0.02*invoker.chargesize,0,2,SWING_Spring);
|
||||||
A_WeaponOffset(FRandom[Stunner](-1,1)*1.2*invoker.chargesize,32+FRandom[Stunner](-1,1)*1.2*invoker.chargesize);
|
A_WeaponOffset(FRandom[Stunner](-1,1)*1.2*invoker.chargesize,32+FRandom[Stunner](-1,1)*1.2*invoker.chargesize);
|
||||||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||||
if ( invoker.chargesize >= 6. )
|
if ( invoker.chargesize >= 5. )
|
||||||
{
|
{
|
||||||
invoker.count += 1./35.;
|
invoker.count += 1./35.;
|
||||||
if ( invoker.count > 1.5 ) return ResolveState("Release");
|
if ( invoker.count > 1.5 ) return ResolveState("Release");
|
||||||
return ResolveState(null);
|
return ResolveState(null);
|
||||||
}
|
}
|
||||||
invoker.chargesize += 2./35.;
|
invoker.chargesize += 2.4/35.;
|
||||||
invoker.count += 1./35.;
|
invoker.count += 1.2/35.;
|
||||||
if ( invoker.count < 0.14 ) return ResolveState(null);
|
if ( invoker.count < 0.24 ) return ResolveState(null);
|
||||||
invoker.count = 0;
|
invoker.count = 0;
|
||||||
if ( !(sv_infiniteammo || (FindInventory('PowerInfiniteAmmo',true))) )
|
if ( !(sv_infiniteammo || (FindInventory('PowerInfiniteAmmo',true))) )
|
||||||
{
|
{
|
||||||
|
|
@ -378,7 +377,7 @@ Class Stunner : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_STUNNER";
|
Inventory.PickupMessage "$I_STUNNER";
|
||||||
Weapon.UpSound "stun/select";
|
Weapon.UpSound "stun/select";
|
||||||
Weapon.SlotNumber 4;
|
Weapon.SlotNumber 4;
|
||||||
Weapon.SelectionOrder 9;
|
Weapon.SelectionOrder 8000;
|
||||||
Weapon.SlotPriority 0.9;
|
Weapon.SlotPriority 0.9;
|
||||||
Weapon.AmmoType "StunnerAmmo";
|
Weapon.AmmoType "StunnerAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
@ -386,6 +385,7 @@ Class Stunner : UnrealWeapon
|
||||||
Weapon.AmmoUse2 1;
|
Weapon.AmmoUse2 1;
|
||||||
Weapon.AmmoGive 50;
|
Weapon.AmmoGive 50;
|
||||||
UTWeapon.DropAmmo 50;
|
UTWeapon.DropAmmo 50;
|
||||||
|
+WEAPON.WIMPY_WEAPON;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -669,7 +669,7 @@ Class UBioRifle : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_BIORIFLE";
|
Inventory.PickupMessage "$I_BIORIFLE";
|
||||||
Weapon.UpSound "ges/select";
|
Weapon.UpSound "ges/select";
|
||||||
Weapon.SlotNumber 8;
|
Weapon.SlotNumber 8;
|
||||||
Weapon.SelectionOrder 8;
|
Weapon.SelectionOrder 1300;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "UBioAmmo";
|
Weapon.AmmoType "UBioAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -196,7 +196,7 @@ Class URocket : Actor
|
||||||
Death:
|
Death:
|
||||||
TNT1 A 0
|
TNT1 A 0
|
||||||
{
|
{
|
||||||
A_RocketExplode(100,200);
|
A_RocketExplode(100,120);
|
||||||
return A_Jump(256,"Explo1","Explo2","Explo3","Explo4","Explo5");
|
return A_Jump(256,"Explo1","Explo2","Explo3","Explo4","Explo5");
|
||||||
}
|
}
|
||||||
Explo1:
|
Explo1:
|
||||||
|
|
@ -284,7 +284,7 @@ Class UGrenade : URocket
|
||||||
}
|
}
|
||||||
Goto Spawn;
|
Goto Spawn;
|
||||||
Death:
|
Death:
|
||||||
TNT1 A 0 A_RocketExplode(120,200);
|
TNT1 A 0 A_RocketExplode(120,140);
|
||||||
Goto Super::Death+1;
|
Goto Super::Death+1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -498,7 +498,7 @@ Class Eightball : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_EIGHTBALL";
|
Inventory.PickupMessage "$I_EIGHTBALL";
|
||||||
Weapon.UpSound "utrl/select";
|
Weapon.UpSound "utrl/select";
|
||||||
Weapon.SlotNumber 5;
|
Weapon.SlotNumber 5;
|
||||||
Weapon.SelectionOrder 5;
|
Weapon.SelectionOrder 1000;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "URocketAmmo";
|
Weapon.AmmoType "URocketAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -290,7 +290,7 @@ Class UFlakCannon : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_FLAKCANNON";
|
Inventory.PickupMessage "$I_FLAKCANNON";
|
||||||
Weapon.UpSound "flak/select";
|
Weapon.UpSound "flak/select";
|
||||||
Weapon.SlotNumber 6;
|
Weapon.SlotNumber 6;
|
||||||
Weapon.SelectionOrder 4;
|
Weapon.SelectionOrder 1100;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "UFlakBox";
|
Weapon.AmmoType "UFlakBox";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,7 @@ Class UMinigun : UnrealWeapon
|
||||||
Inventory.PickupMessage "$I_MINIGUN";
|
Inventory.PickupMessage "$I_MINIGUN";
|
||||||
Weapon.UpSound "minigun/select";
|
Weapon.UpSound "minigun/select";
|
||||||
Weapon.SlotNumber 0;
|
Weapon.SlotNumber 0;
|
||||||
Weapon.SelectionOrder 10;
|
Weapon.SelectionOrder 500;
|
||||||
Weapon.SlotPriority 1;
|
Weapon.SlotPriority 1;
|
||||||
Weapon.AmmoType "UMiniAmmo";
|
Weapon.AmmoType "UMiniAmmo";
|
||||||
Weapon.AmmoUse 1;
|
Weapon.AmmoUse 1;
|
||||||
|
|
|
||||||
|
|
@ -203,6 +203,7 @@ Class UPlayer : UTPlayer
|
||||||
{
|
{
|
||||||
dsp.pendingupgrade = dsp.upgradelevel = 4;
|
dsp.pendingupgrade = dsp.upgradelevel = 4;
|
||||||
dsp.MainUse = min(6,dsp.upgradelevel+1);
|
dsp.MainUse = min(6,dsp.upgradelevel+1);
|
||||||
|
dsp.UpdateSelectionOrder();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -255,6 +256,7 @@ Class UPlayer : UTPlayer
|
||||||
|
|
||||||
override void PlayAttacking()
|
override void PlayAttacking()
|
||||||
{
|
{
|
||||||
|
if ( player.Health <= 0 ) return;
|
||||||
// no animation if crouched
|
// no animation if crouched
|
||||||
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
|
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
|
||||||
// check weapon type
|
// check weapon type
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,7 @@ Class UTranslocator : UnrealWeapon
|
||||||
Tag "$T_TELEGUN";
|
Tag "$T_TELEGUN";
|
||||||
Inventory.PickupMessage "$I_TELEGUN";
|
Inventory.PickupMessage "$I_TELEGUN";
|
||||||
Weapon.SlotNumber 1;
|
Weapon.SlotNumber 1;
|
||||||
Weapon.SelectionOrder 1;
|
Weapon.SelectionOrder 9000;
|
||||||
Weapon.SlotPriority 0.1;
|
Weapon.SlotPriority 0.1;
|
||||||
Weapon.AmmoType1 "UTranslocatorAmmo";
|
Weapon.AmmoType1 "UTranslocatorAmmo";
|
||||||
Weapon.AmmoUse1 1;
|
Weapon.AmmoUse1 1;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue