Commit 3d98d81c authored by Mor'ladim's avatar Mor'ladim
Browse files

-Stinger cover detection range increased slightly.

-Stinger has additional effects for more ease of use, such as allowing the cover bonus to activate when switching to the weapon.
-Lowered drop chance of Stinger.
-Adjusted some spawn rates of certain items such as weapons.
-Elite items will now spawn from red boxes, still acquired from the same sources. I liked the red rare boxes in Phantasy Star Online, alright?!
-Locked money chests now drop slightly more GP.
-Players can now summon a machine which is meant for selling. The mechanics are the same as normal vending machines until a proper system can be implemented. (Bind the key in the controls)
-Dread Troopers that become allies due to the Dread Trooper Mail can no longer be harmed by the player's projectiles. Explosions can still harm them, however.
-War Spoils GP value increased, and now has a chance to spawn in secret areas. This was mainly done to balance the surplus of weapons/keys. (Finding almost all weapons by map 3-4 is a little too much!)
parent e4d1394d
......@@ -3,6 +3,7 @@ AddMenuKey "Activate Bullet-Eye Mode" +zoom
AddMenuKey "Use Primary Weapon Secondary Function" +altattack
AddMenuKey "Use Flash Guard" +user1
AddMenuKey "Use Quick Melee" +user2
AddMenuKey "Call Selling Machine" +user3
AddMenuKey "Drop Equipment Item" "BE_DropEquipmentItem"
alias "BE_DropEquipmentItem" "netevent BE_DropEquipmentItem"
......
......@@ -30,10 +30,10 @@ $Limit NDLSHOTL 0
weapons/spitfirerebound SPRPREBN
$Limit weapons/spitfirerebound 0
weapons/spitfirepowered SPTFIRPO
weapons/spitfirepowered SPTFIRPO //Now used by Stinger
$Limit SPTFIRPO 0
weapons/spitfirepowered2 SPTFIRP2
weapons/spitfirepowered2 SPTFIRP2 //Now used by Decimator
$Limit SPTFIRP2 0
weapons/spitfirecloseanim SPTFRECL
......
......@@ -49,4 +49,28 @@ class BulletEyeDebug play
a.A_SpawnParticle(col, SPF_FULLBRIGHT | SPF_RELATIVE, 1, 2, 0, i * cos(a.pitch), 0, i * sin(-a.pitch));
}
}
}
//DEBUG ITEMS
class ABMB : BEScoreItem
{
Default
{
Inventory.Amount 1;
BEScoreItem.CraftingMatAmount 999999;
Inventory.PickupMessage "\clBig Money Bag - \cf1 Point! Debug item, you cheater!";
}
States
{
Spawn:
_WRS AAAAAA 2;
_WRS A 0 GatherCountdown();
Loop;
AutoGather:
_WRS A 0 A_JumpIf((GetCVAR("bulleteye_scoremagnet") == 0),"Spawn");
_WRS A 0 A_CheckSight("Spawn");
_WRS AAAAAA 2 CheckMagnet();
Loop;
}
}
\ No newline at end of file
......@@ -186,7 +186,8 @@ class BEEnemyBase : Actor
if (random(1, 256) <= 2 && !bSMALLENEMY)
{
A_SpawnItemEx("DroppedWeaponPool", random(-15, 15), random(-15, 15), 5, 0, 0, 0, 0, SXF_NOCHECKPOSITION);
//A_SpawnItemEx("DroppedWeaponPool", random(-15, 15), random(-15, 15), 5, 0, 0, 0, 0, SXF_NOCHECKPOSITION);"LockedWeaponChest" : "NewWeaponCapsule"
A_SpawnItemEx("LockedWeaponChest", random(-15, 15), random(-15, 15), 5, 0, 0, 0, 0, SXF_NOCHECKPOSITION);
}
// Health Drop.
......@@ -196,7 +197,7 @@ class BEEnemyBase : Actor
}
// [Ace] Drop some keys!
if (random(1, 256) <= 5 + (bulleteye_dreadlevel * 1 / 2) && !bSMALLENEMY)
if (random(1, 256) <= 4 + (bulleteye_dreadlevel * 1 / 2) && !bSMALLENEMY)
{
A_SpawnItemEx("UniversalChestKeySpawner", random(-8, 8), 0, random(0, 16), random(-2, 2), 0, random(5, 12), random(0, 359), SXF_NOCHECKPOSITION);
}
......@@ -204,11 +205,11 @@ class BEEnemyBase : Actor
//Items that drop only with a Dread Level of 3 or higher.
if (random(1, 256) <= 12 + (bulleteye_dreadlevel * 1 / 2) && (GetCvar("bulleteye_dreadlevel") >= 3 && GetSpawnHealth() >= 450 && !bSMALLENEMY))
{
A_SpawnItemEx("EliteItemPool", 0, 0, 5, 0, 0, 0, 0, SXF_NOCHECKPOSITION);
A_SpawnItemEx("EliteItemCrateSpawnerDread", 0, 0, 5, 0, 0, 0, 0, SXF_NOCHECKPOSITION);
}
else if (random(1, 256) <= 2 && (GetCvar("bulleteye_dreadlevel") == 0 && GetSpawnHealth() >= 450 && !bSMALLENEMY)) //Dread level requirement for elite items is no longer needed, but the drops are very rare.
{
A_SpawnItemEx("EliteItemPoolNonDread", 0, 0, 5, 0, 0, 0, 0, SXF_NOCHECKPOSITION);
A_SpawnItemEx("EliteItemCrateSpawnerNoDread", 0, 0, 5, 0, 0, 0, 0, SXF_NOCHECKPOSITION);
}
//Drop extra Bullet-Eye Energy
......@@ -390,7 +391,7 @@ class BEEnemyBase : Actor
}
}
if (random(1, 100) <= 65) //Equipment gacha machine spawner.
if (random(1, 100) <= 25) //Equipment gacha machine spawner.
{
vector3 SpawnPosition = (pos.x - random(-20, 20), pos.y - random(-20, 20), pos.z);
......
......@@ -76,7 +76,8 @@ class DreadTrooper : BEEnemyBase
{
if (random(1, 100 <= 5 + (bulleteye_dreadlevel * 2)) && plr && plr.CheckInventory("ArmorDreadTrooperMail", 0))
{
bDOHARMSPECIES = true;
bDONTHARMSPECIES = true;
A_SetSpecies("Player");
DreadTrooperMailCheck = true;
A_SetFriendly(true);
A_GiveInventory("DreadTrooperMailConversion", 1);
......@@ -415,7 +416,7 @@ class DreadTrooper : BEEnemyBase
A_DropItem("DreadTrooperMailSpawner", 1, 1 + (bulleteye_dreadlevel * 1));
}
}
_DTR A 0 A_DropItem("StingerWeapon", 1, 6 + (bulleteye_dreadlevel * 1));
_DTR A 0 A_DropItem("StingerSpawner", 1, 8 + (bulleteye_dreadlevel * 1));
_DTR AA 0 SpawnDeathExplosion(Exp_Small);
_DTR AAAAA 0 SpawnDeathExplosion(Exp_Extra);
_DTR K 8 A_Scream;
......@@ -457,7 +458,7 @@ class DreadTrooper : BEEnemyBase
A_DropItem("DreadTrooperMailSpawner", 1, 1 + (bulleteye_dreadlevel * 1));
}
}
_DTR A 0 A_DropItem("StingerWeapon", 1, 6 + (bulleteye_dreadlevel * 1));
_DTR A 0 A_DropItem("StingerSpawner", 1, 8 + (bulleteye_dreadlevel * 1));
TNT1 A 1;
Stop;
Raise:
......@@ -631,4 +632,13 @@ class DreadTrooperMailSpawner : RandomSpawner //For extra rarity
DropItem "DoomBuilderCamera", 255, 3;
DropItem "ArmorDreadTrooperMail", 255, 1;
}
}
class StingerSpawner : RandomSpawner //For extra rarity
{
Default
{
DropItem "DoomBuilderCamera", 255, 10;
DropItem "StingerWeapon", 255, 6;
}
}
\ No newline at end of file
......@@ -740,4 +740,78 @@ class EnemyVendingMachineSpawnPool : RandomSpawner //Spawns from some enemies. A
DropItem "VendingMachineSpawnerTechAmmo", 255, 1;
DropItem "VendingMachineSpawnerSupportAmmo", 255, 1;
}
}
class BESellingMachine : Actor
{
override void Tick()
{
BlockThingsIterator it = BlockThingsIterator.Create(self, 40);
while (it.Next())
{
if (!(it.thing is 'BEEquipmentItem') && !(it.thing is 'BEWeaponBase') || Distance3D(it.thing) > 15)
{
continue;
}
let wpn = BEWeaponBase(it.thing);
let item = BEEquipmentItem(it.thing);
if (wpn && wpn.LastOwner && wpn.LastOwner.CheckInventory('EquipmentLockToggle', 0))
{
wpn.LastOwner.A_GiveInventory('CraftingMaterials', wpn.CraftingCost / (wpn.bELITEWEAPON ? 1 : 3));
SpawnCoinEffect();
wpn.Destroy();
}
else if (item && item.LastOwner && item.LastOwner.CheckInventory('EquipmentLockToggle', 0))
{
item.LastOwner.A_GiveInventory('CraftingMaterials', item.SellPrice);
SpawnCoinEffect();
item.Destroy();
}
}
Super.Tick();
}
protected void SpawnCoinEffect()
{
A_StartSound("environment/vendingmachinesell", CHAN_BODY, CHANF_OVERLAP, 1.0, 2);
A_SpawnItemEx("VendingMachineSellLabelFX", 0, 0, 35, flags: SXF_NOCHECKPOSITION);
A_SpawnItemEx("VendingMachineSellCoinSpawner", 0, 0, 35, flags: SXF_NOCHECKPOSITION);
}
Default
{
Radius 30;
Height 50;
Mass 10000;
-SOLID
+DONTTHRUST
+FLOORHUGGER
ReactionTime 600;
}
States
{
Spawn:
SVND A 3;
SVND A 0
{
if (--ReactionTime <= 0)
{
SetStateLabel("Death");
}
}
SVND A 0 A_CheckProximity("Death", "BEPlayerBase", 400, 0, CPXF_LESSOREQUAL | CPXF_ANCESTOR);
Loop;
// [Ace] State for animations, if any.
BuyItem:
SVND A 1;
Goto Spawn;
Death:
SVND A 1;
Stop;
}
}
\ No newline at end of file
......@@ -367,10 +367,12 @@ class BEEquipmentItem : Inventory abstract
if (GetCVar("bulleteye_pushableequipment") == 1 && CheckProximity("BEEquipmentItem", 50, 0, CPXF_LESSOREQUAL | CPXF_ANCESTOR))
{
bPUSHABLE = true;
bSLIDESONWALLS = true;
}
else
{
bPUSHABLE = false;
bSLIDESONWALLS = false;
}
}
#### A 3 A_SpawnItemEx("EquipmentPowerupL"..invoker.EquipmentLevel.."FX1", frandom(-8,8), frandom(-8,8), frandom(4,10), flags: SXF_SETMASTER);
......
......@@ -104,7 +104,7 @@ class EnhancerEgg : Actor replaces Soulsphere
TNT1 AAAA 0 A_SpawnItemEx("PowerUpMediGemLarge", 0, 0, 6, random(2, 5), random(2, 5), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
TNT1 AA 0 A_DropItem("UniversalChestKey", 1, 255);
TNT1 A 0 A_DropItem("AmmoLockboxLarge", 1, 255);
TNT1 AA 0 A_DropItem("NewWeaponCapsule", 1, 255);
//TNT1 AA 0 A_DropItem("NewWeaponCapsule", 1, 255);
Stop;
}
}
......@@ -134,7 +134,7 @@ class EnhancerContainer : EnhancerEgg
TNT1 AAAA 0 A_SpawnItemEx("PowerUpMediGemSmall", 0, 0, 6, random(2, 5), random(2, 5), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
TNT1 A 0 A_DropItem("UniversalChestKey", 1, 255);
TNT1 A 0 A_DropItem("AmmoLockboxSmall", 1, 255);
TNT1 A 0 A_DropItem("NewWeaponCapsule", 1, 255);
//TNT1 A 0 A_DropItem("NewWeaponCapsule", 1, 255);
Stop;
}
}
\ No newline at end of file
......@@ -229,4 +229,70 @@ class ItemCapsuleLarge : Actor
ICPL A 0 A_SpawnItemEx("WeaponAmmoPool", 0, 0, 6, random(-2, 2), random(-2, 2), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
Goto Death+2;
}
}
class EliteItemCrate : Actor
{
override void Die(Actor source, Actor inflictor, int dmgflags, Name MeansOfDeath)
{
if (random(1, 100) <= 70)
{
if (source && source.CheckInventory("HelmSentrysGuard", 0))
{
A_SpawnItemEx("SentrysGuardTurret", flags: SXF_NOCHECKPOSITION);
}
}
if (random(1, 100) <= 2) // 2% chance.
{
for (int i = 0; i < 300; ++i) // [Ace] Not 'while' so it doesn't hang up the game if it ends up being an infinite loop.
{
vector3 SpawnPosition = (pos.x - random(-512, 512), pos.y - random(-512, 512), pos.z);
if (level.IsPointInLevel(SpawnPosition))
{
Actor.Spawn("SpecialChest", SpawnPosition);
break;
}
}
}
Super.Die(source, inflictor, dmgflags, MeansOfDeath);
}
Default
{
Health 1;
Radius 12;
Height 28;
+SHOOTABLE
+NOBLOOD
-SOLID
+DONTGIB
+NOTAUTOAIMED
+DONTTHRUST
Mass 10;
Scale 0.45;
}
States
{
Spawn:
REIC A 1;
Loop;
Death:
REIC A 0 A_SpawnItemEx("EliteItemPool", 0, 0, 6, random(-2, 2), random(-2, 2), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
REIC AA 0 A_SpawnItemEx("BEGenExplosionBig", 0, 0, 12, 0, 0, 0);
REIC AAA 0 A_SpawnItemEx("EnemyDeathExplosionExtra", 0, 0, 8, frandom(-4, 4), frandom(-4, 4), frandom(3, 7), frandom(0, 359), 32);
REIC A 0
{
let plr = BEPlayerBase(target);
if (plr && plr.CheckInventory("LegsDemolishersLegPlates", 0))
{
A_GiveToTarget("PowerDemolisherDamage", 1);
}
}
TNT1 A 1;
Stop;
}
}
\ No newline at end of file
......@@ -87,10 +87,12 @@ class LockedChest : Actor
if (CheckProximity("LockedChest", 40, 1, CPXF_ANCESTOR | CPXF_NOZ) || CheckProximity("BEScoreItem", 50, 1, CPXF_ANCESTOR | CPXF_NOZ))
{
bPUSHABLE = false;
bSLIDESONWALLS = false;
}
else
{
bPUSHABLE = true;
bSLIDESONWALLS = true;
}
Super.Tick();
......@@ -318,8 +320,8 @@ class LockedMoneyChest : LockedChest
TNT1 A 0 DropCollectible();
TNT1 A 0 A_SpawnItemEx("LockedChestOpenedFX", 0, 0, 12, 0, 0, 0);
TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("ScorePoolSmall", 0, 0, 6, random(2, 5), random(2, 5), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
TNT1 AAAAAAAAAAAAAA 0 A_SpawnItemEx("ScorePoolMedium", 0, 0, 6, random(2, 5), random(2, 5), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
TNT1 AAAAAAAAAAAAA 0 A_SpawnItemEx("ScorePoolLarge", 0, 0, 6, random(2, 5), random(2, 5), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
TNT1 AAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("ScorePoolMedium", 0, 0, 6, random(2, 5), random(2, 5), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
TNT1 AAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("ScorePoolLarge", 0, 0, 6, random(2, 5), random(2, 5), random(4, 9), random(0, 359), SXF_NOCHECKPOSITION);
TNT1 A 0
{
let plr = BEPlayerBase(target);
......
......@@ -496,7 +496,7 @@ class WarSpoils : BEScoreItem
Default
{
Inventory.Amount 5000;
BEScoreItem.CraftingMatAmount 1500;
BEScoreItem.CraftingMatAmount 3000;
Inventory.PickupMessage "\clWar Spoils - \cf5000 Points!";
}
......
......@@ -61,6 +61,48 @@ class EnemyDropHighPool : RandomSpawner
}
}
class EliteItemCrateSpawnerDread : RandomSpawner //Dread Level > 0 Spawn
{
Default
{
+DROPPED
DropItem "DoomBuilderCamera", 255, 10;
DropItem "DoomBuilderCamera", 255, 8;
DropItem "DoomBuilderCamera", 255, 6;
DropItem "EliteItemCrate", 255, 5;
}
}
class EliteItemCrateSpawnerNoDread : RandomSpawner //Dread Level = 0 Spawn
{
Default
{
+DROPPED
DropItem "DoomBuilderCamera", 255, 10;
DropItem "DoomBuilderCamera", 255, 8;
DropItem "DoomBuilderCamera", 255, 6;
DropItem "DoomBuilderCamera", 255, 4;
DropItem "DoomBuilderCamera", 255, 2;
DropItem "EliteItemCrate", 255, 2;
}
}
class EliteItemPool : RandomSpawner
{
Default
{
+DROPPED
DropItem "BloodletterMagnumWeapon", 255, 5;
DropItem "DecimatorWeapon", 255, 5;
DropItem "HelmOnslaughtGreatHelm", 255, 5;
DropItem "AccessoryEtherealCoating", 255, 5;
DropItem "ArmorCombatArmorFortress", 255, 5;
DropItem "AccessoryGravityAmmo", 255, 5;
DropItem "AccessoryTraitorAmmo", 255, 5;
}
}
/*
class EliteItemPool : RandomSpawner
{
Default
......@@ -98,6 +140,7 @@ class EliteItemPoolNonDread : RandomSpawner //Spawns on Dread Level 0 but extrem
DropItem "AccessoryTraitorAmmo", 255, 2;
}
}
*/
class EnhancerPool : RandomSpawner
{
......@@ -112,11 +155,12 @@ class SecretSectorSpawner : RandomSpawner
{
Default
{
DropItem "UniversalChestKey", 255, 10;
DropItem "EnhancerContainer", 255, 6;
DropItem "WarSpoils", 255, 10;
DropItem "UniversalChestKey", 255, 5;
DropItem "EnhancerContainer", 255, 4;
DropItem "LockedEquipmentChest", 255, 2;
DropItem "SecretGearPool", 255, 4;
DropItem "LockedWeaponChest", 255, 8;
DropItem "SecretGearPool", 255, 5;
DropItem "LockedWeaponChest", 255, 6;
}
}
......
......@@ -161,9 +161,10 @@ class BEChainsaw : RandomSpawner replaces Chainsaw
{
Default
{
DropItem "ItemCapsule", 256, 8;
DropItem "NewWeaponCapsule", 256, 10;
DropItem "LockedChestSpawner", 256, 4;
DropItem "ItemCapsule", 256, 10;
DropItem "ItemCapsuleLarge", 256, 6;
DropItem "NewWeaponCapsule", 256, 3;
DropItem "LockedChestSpawner", 256, 6;
}
}
......@@ -171,9 +172,9 @@ class BEPistol : RandomSpawner replaces Pistol
{
Default
{
DropItem "ItemCapsule", 256, 8;
DropItem "NewWeaponCapsule", 256, 10;
DropItem "LockedChestSpawner", 256, 4;
DropItem "ItemCapsule", 256, 10;
DropItem "NewWeaponCapsule", 256, 3;
DropItem "LockedChestSpawner", 256, 6;
}
}
......@@ -181,9 +182,9 @@ class BEShotgun : RandomSpawner replaces Shotgun
{
Default
{
DropItem "ItemCapsule", 256, 8;
DropItem "NewWeaponCapsule", 256, 10;
DropItem "LockedChestSpawner", 256, 4;
DropItem "ItemCapsule", 256, 10;
DropItem "NewWeaponCapsule", 256, 3;
DropItem "LockedChestSpawner", 256, 6;
}
}
......@@ -191,9 +192,9 @@ class BESuperShotgun : RandomSpawner replaces SuperShotgun
{
Default
{
DropItem "ItemCapsuleLarge", 256, 8;
DropItem "NewWeaponCapsule", 256, 10;
DropItem "LockedChestSpawner", 256, 4;
DropItem "ItemCapsuleLarge", 256, 10;
DropItem "NewWeaponCapsule", 256, 6;
DropItem "LockedChestSpawner", 256, 6;
}
}
......@@ -201,9 +202,9 @@ class BEChaingun : RandomSpawner replaces Chaingun
{
Default
{
DropItem "ItemCapsuleLarge", 256, 8;
DropItem "NewWeaponCapsule", 256, 10;
DropItem "LockedChestSpawner", 256, 4;
DropItem "ItemCapsuleLarge", 256, 10;
DropItem "NewWeaponCapsule", 256, 3;
DropItem "LockedChestSpawner", 256, 6;
}
}
......@@ -211,9 +212,9 @@ class BERocketLauncher : RandomSpawner replaces RocketLauncher
{
Default
{
DropItem "ItemCapsuleLarge", 256, 8;
DropItem "NewWeaponCapsule", 256, 10;
DropItem "LockedChestSpawner", 256, 4;
DropItem "ItemCapsuleLarge", 256, 10;
DropItem "NewWeaponCapsule", 256, 6;
DropItem "LockedChestSpawner", 256, 6;
}
}
......@@ -221,9 +222,9 @@ class BEPlasmaRifle : RandomSpawner replaces PlasmaRifle
{
Default
{
DropItem "ItemCapsuleLarge", 256, 8;
DropItem "NewWeaponCapsule", 256, 10;
DropItem "LockedChestSpawner", 256, 4;
DropItem "ItemCapsuleLarge", 256, 10;
DropItem "NewWeaponCapsule", 256, 6;
DropItem "LockedChestSpawner", 256, 6;
}
}
......
......@@ -55,6 +55,7 @@ class BEPlayerFastProjectile : FastProjectile
Default
{
+GETOWNER
+DONTHARMSPECIES
BEPlayerFastProjectile.MaxRipCount 0;
}
}
......@@ -66,6 +67,7 @@ class BEPlayerProjectile : Actor
Default
{
Projectile;
+DONTHARMSPECIES
BEPlayerProjectile.MaxRipCount 0;
}
}
\ No newline at end of file
......@@ -891,6 +891,11 @@ class BEWeaponBase : Weapon
TNT1 A 5;
TNT1 A 16 A_SetTics(CheckInventory("BootsPowerStompers", 0) ? 10 : 16);
Goto QuickMeleeReady;
User3:
#### A 0 A_CheckProximity("Ready", "BESellingMachine", 400, 1, CPXF_ANCESTOR);
#### A 35 A_SpawnItemEx("BESellingMachine", 45, 0, 0, flags: SXF_NOCHECKPOSITION);
#### A 0 A_JumpToReady();
Stop;
//-------------------------------------------------------
// BULLET-EYE MODE
......
......@@ -201,7 +201,7 @@ class ShotwaveLaunched : BEPlayerProjectile
Death:
TNT1 A 0 A_SpawnItemEx("ShotwaveGroundShockwaveSpawner", flags: SXF_NOCHECKPOSITION | SXF_TRANSFERPOINTERS);
TNT1 A 0 A_SetScale(0.9);
TNT1 A 0 A_Explode(20, 100, 0, 1, 100); //Helps when enemies are up close to a player.
TNT1 A 0 A_Explode(40, 100, 0, 1, 100); //Helps when enemies are up close to a player.
TNT1 A 0 A_StartSound("weapons/shotwavepodexplode", CHAN_BODY);
CLSD ABCDEFGHI 1;
Stop;
......@@ -353,7 +353,7 @@ class ShotwaveGroundShockwave : Actor
{
sprite = GetSpriteIndex(random[shotwaverand](0, 1) ? "FBFL" : "FBF2");
}
#### A 0 A_Explode(25, 100, 0, 1, 50);
#### A 0 A_Explode(18, 100, 0, 1, 50);
#### A 0 A_AlertMonsters();
#### A 0 A_StartSound("weapons/shotwaveforwardshockwave", CHAN_BODY, volume: 0.2);
#### A 0 A_Jump(128, 5);
......
......@@ -7,12 +7,38 @@ class StingerWeapon : BEWeaponBase
hud.DrawImage("STNGCOVR", (-135, -35), flags);
}
if (hud.CheckInventory("PowerStingerReloadBonus", 0))
if (hud.CheckInventory("PowerStingerReloadBonus", 0) || hud.CheckInventory("PowerStingerReloadBonusSwitch", 0))
{
hud.DrawImage("STNGFAUT", (-115, -35), flags);
}
}
override void DoEffect()
{
if (owner)
{
FLineTraceData CheckCover;
owner.LineTrace(owner.angle, 120, owner.pitch, TRF_THRUACTORS | TRF_BLOCKSELF | TRF_THRUHITSCAN | TRF_THRUSPECIES | TRF_SOLIDACTORS, offsetz: owner.height-12, data: CheckCover);
if (CheckCover.HitType == TRACE_HitWall && A_GetWeaponLevel() >= 2)
{
owner.A_GiveInventory("PowerStingerCoverSpeedL2", 1);
}
else if (CheckCover.HitType == TRACE_HitWall && A_GetWeaponLevel() == 1)
{
owner.A_GiveInventory("PowerStingerCoverSpeed", 1);
}
if (A_GetWeaponLevel() >= 2 && owner.CountInv("AmmoStinger") <= 6)
{
owner.A_GiveInventory("PowerStingerCoverSpeedL2", 1);
}
}
Super.DoEffect();
}
Default
{
Inventory.Icon "WEAP35";
......@@ -29,7 +55,7 @@ class StingerWeapon : BEWeaponBase
BEWeaponBase.Type WTYPE_Tech;
BEWeaponBase.ExpGainMult 1.5;
BEWeaponBase.Attributes 2, 3, 3, 4;
BEWeaponBase.EffectTexts "- Fires in a 3 round burst. Damage is increased, ammo consumption is reduced, and burst delay is decreased for 3 seconds after leaving cover.", "- Increases damage and burst delay bonus duration to 6 seconds, and now increases burst count to 5 at no additional ammo cost after leaving cover.", "- Finishing a reload while behind cover grants the weapon infinite ammo for 3 seconds and changes the firing mode to full auto with higher damage.";
BEWeaponBase.EffectTexts "- Fires in a 3 round burst. Damage is increased, ammo consumption is reduced, and burst delay is decreased for 3 seconds after leaving cover. Switching to this weapon will also activate the bonus.", "- Increases cover bonus duration to 6 seconds, and now increases burst count to 5 at no additional ammo cost after leaving cover. Bonus is now always active while the magazine count is at 6 or below.", "- Finishing a reload while behind cover grants the weapon infinite ammo for 4 seconds and changes the firing mode to full auto with higher damage and homing capabilities. Switching to this weapon grants 2 seconds of this bonus.";
BEWeaponBase.FlavorText "The mass produced weapons carried by the Dread Troopers. It features a burst fire mode in order to conserve ammo, which explains why said Dread Troopers carry so much of it at times. The weapon works wonders while firing from cover, meaning users can easily eliminate threats while constantly shifting their defensive position. Combined with the reliability, light weight, and ease of use, it's easy to see why the Dread Troopers are outfitted this weapon over heavier armaments.";
BEWeaponBase.CraftingCost 2000;
+WEAPON.NO_AUTO_SWITCH
......@@ -43,7 +69,24 @@ class StingerWeapon : BEWeaponBase
PSTN A 0;
Goto Super::Spawn;
Ready:
_WST A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER3|WRF_ALLOWUSER4);
_WST A 0
{
if (A_GetWeaponLevel() == 3)
{
A_GiveInventory("PowerStingerCoverSpeedL2", 1);
A_GiveInventory("PowerStingerReloadBonusSwitch", 1);
}
else if (A_GetWeaponLevel() == 2)
{
A_GiveInventory("PowerStingerCoverSpeedL2", 1);
}
else if (A_GetWeaponLevel() == 1)
{
A_GiveInventory("PowerStingerCoverSpeed", 1);
}
}
//_WST A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER3|WRF_ALLOWUSER4);
/*
_WST A 0
{
FLineTraceData CheckCover;
......@@ -61,6 +104,9 @@ class StingerWeapon : BEWeaponBase