230 lines
8.3 KiB
Text
230 lines
8.3 KiB
Text
// on-demand ammo spawners
|
|
// Ref class for ammo spawners, used by on-demand replacers
|
|
Class SWWMAmmoSpawner : Inventory abstract
|
|
{
|
|
Actor dropper;
|
|
bool enemydrop;
|
|
|
|
override bool SpecialDropAction( Actor dropper )
|
|
{
|
|
self.dropper = dropper;
|
|
enemydrop = true;
|
|
return false;
|
|
}
|
|
abstract Class<Actor> PickAmmo( bool enemydrop = false );
|
|
|
|
void SpawnAmmo()
|
|
{
|
|
let ac = PickAmmo(enemydrop);
|
|
if ( !ac ) return;
|
|
let a = Spawn(ac,pos);
|
|
if ( enemydrop )
|
|
{
|
|
a.bDropped = true;
|
|
a.bNoGravity = false;
|
|
if ( !(level.compatflags&COMPATF_NOTOSSDROPS) )
|
|
a.TossItem();
|
|
if ( a is 'Inventory' )
|
|
{
|
|
let i = Inventory(a);
|
|
i.bTossed = true;
|
|
i.ModifyDropAmount(i.Amount);
|
|
if ( i.SpecialDropAction(dropper) )
|
|
{
|
|
i.Destroy();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
SWWMUtility.TransferItemProp(self,a);
|
|
}
|
|
|
|
override void PostBeginPlay()
|
|
{
|
|
SpawnAmmo();
|
|
ClearCounters();
|
|
Destroy();
|
|
}
|
|
|
|
override bool CanPickup( Actor toucher )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
override bool TryPickup( in out Actor toucher )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
default
|
|
{
|
|
+NOGRAVITY;
|
|
+NOTELEPORT;
|
|
+DONTSPLASH;
|
|
+DONTGIB;
|
|
-SPECIAL;
|
|
}
|
|
}
|
|
Class SWWMShellAmmoSmall : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = (SWWMUtility.ItemExists('Spreadgun',ownedonly:enemydrop)||SWWMUtility.ItemExists('Wallbuster',ownedonly:enemydrop)),
|
|
bex = (SWWMUtility.ItemExists('PuntzerBeta',ownedonly:enemydrop)||SWWMUtility.ItemExists('PuntzerGamma',ownedonly:enemydrop));
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return Random[Replacements](0,2)?'SMW05Ammo2':'SMW05Ammo3';
|
|
return Random[Replacements](0,2)?'RedShell':'RedShell2';
|
|
}
|
|
}
|
|
Class SWWMShellAmmoBig : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = (SWWMUtility.ItemExists('Spreadgun',ownedonly:enemydrop)||SWWMUtility.ItemExists('Wallbuster',ownedonly:enemydrop)),
|
|
bex = (SWWMUtility.ItemExists('PuntzerBeta',ownedonly:enemydrop)||SWWMUtility.ItemExists('PuntzerGamma',ownedonly:enemydrop));
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05BigAmmo';
|
|
return Random[Replacements](0,2)?'RedShell4':'RedShell6';
|
|
}
|
|
}
|
|
Class SWWMClipAmmoSmall : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('Eviscerator',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('HeavyMahSheenGun',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return Random[Replacements](0,1)?'SheenAmmo2':'SheenAmmo3';
|
|
if ( aex ) return 'EvisceratorShell';
|
|
aex = (SWWMUtility.ItemExists('Spreadgun',ownedonly:enemydrop)||SWWMUtility.ItemExists('Wallbuster',ownedonly:enemydrop));
|
|
bex = (SWWMUtility.ItemExists('PuntzerBeta',ownedonly:enemydrop)||SWWMUtility.ItemExists('PuntzerGamma',ownedonly:enemydrop));
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return Random[Replacements](0,2)?'SMW05Ammo':'SMW05Ammo2';
|
|
return 'RedShell';
|
|
}
|
|
}
|
|
// special for chaingun ammo drops
|
|
Class SWWMClipAmmoMed : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('Eviscerator',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('HeavyMahSheenGun',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return 'SheenSmallAmmo';
|
|
return Random[Replacements](0,2)?'EvisceratorShell':'EvisceratorShell2';
|
|
}
|
|
}
|
|
Class SWWMClipAmmoBig : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('Eviscerator',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('HeavyMahSheenGun',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return 'SheenBigAmmo';
|
|
return Random[Replacements](0,2)?'EvisceratorShell2':'EvisceratorShell3';
|
|
}
|
|
}
|
|
Class SWWMBlastAmmoSmall : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('Eviscerator',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('HeavyMahSheenGun',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return Random[Replacements](0,1)?'SheenAmmo3':'SheenSmallAmmo';
|
|
return 'EvisceratorShell';
|
|
}
|
|
}
|
|
Class SWWMBlastAmmoBig : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('Eviscerator',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('HeavyMahSheenGun',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return 'SheenBigAmmo';
|
|
return Random[Replacements](0,2)?'EvisceratorShell2':'EvisceratorShell3';
|
|
}
|
|
}
|
|
Class SWWMRocketAmmoSmall : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('Hellblazer',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('Quadravol',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) ) return 'QuadravolAmmo';
|
|
return 'HellblazerMissiles';
|
|
}
|
|
}
|
|
Class SWWMRocketAmmoBig : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('Hellblazer',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('Quadravol',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
return Random[Replacements](0,3)?'QuadravolAmmo2':'QuadravolAmmo3';
|
|
return Random[Replacements](0,3)?'HellblazerMissiles2':'HellblazerMissiles3';
|
|
}
|
|
}
|
|
Class SWWMCellAmmoSmall : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
if ( !Random[Replacements](0,2) )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('CandyGun',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('MisterRifle',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) ) return Random[Replacements](0,1)?'MisterRound':'MisterRound2';
|
|
if ( aex ) return 'CandyGunBullets';
|
|
}
|
|
if ( Random[Replacements](0,1) )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('SilverBullet',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('RayKhom',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) ) return 'RayBolt2';
|
|
if ( aex ) return Random[Replacements](0,2)?'SilverBullets':'SilverBullets2';
|
|
}
|
|
bool aex = SWWMUtility.ItemExists('Sparkster',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('ModernSparkster',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) ) return Random[Replacements](0,2)?'SparksterBAmmo':'SparksterRAmmo';
|
|
return 'SparkUnit';
|
|
}
|
|
}
|
|
Class SWWMCellAmmoBig : SWWMAmmoSpawner
|
|
{
|
|
override Class<Actor> PickAmmo( bool enemydrop )
|
|
{
|
|
if ( !Random[Replacements](0,3) )
|
|
{
|
|
if ( Random[Replacements](0,1) && SWWMUtility.ItemExists('RafanKos') && SWWMUtility.CheckNeedsItem('UltimateAmmo',true) && !SWWMUtility.ItemExists('UltimateAmmo',worldonly:true) && !SWWMUtility.ItemExists('RafanKos',worldonly:true) )
|
|
return 'UltimateAmmo';
|
|
if ( (SWWMUtility.ItemExists('Ynykron')) && SWWMUtility.CheckNeedsItem('YnykronAmmo',true) && !SWWMUtility.ItemExists('YnykronAmmo',worldonly:true) && !SWWMUtility.ItemExists('Ynykron',worldonly:true) )
|
|
return 'YnykronAmmo';
|
|
}
|
|
if ( !Random[Replacements](0,2) )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('CandyGun',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('MisterRifle',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) ) return !Random[Replacements](0,2)?'MisterGAmmo':Random[Replacements](0,2)?'MisterRound5':'MisterAmmo';
|
|
if ( aex ) return Random[Replacements](0,2)?'CandyGunBullets3':'CandyGunAmmo';
|
|
}
|
|
if ( Random[Replacements](0,1) )
|
|
{
|
|
bool aex = SWWMUtility.ItemExists('SilverBullet',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('RayKhom',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) ) return Random[Replacements](0,2)?'RayBolt5':'RayAmmo';
|
|
if ( aex ) return Random[Replacements](0,3)?'SilverBullets3':'SilverBulletAmmo';
|
|
}
|
|
bool aex = SWWMUtility.ItemExists('Sparkster',ownedonly:enemydrop),
|
|
bex = SWWMUtility.ItemExists('ModernSparkster',ownedonly:enemydrop);
|
|
if ( (!aex && bex) || (Random[Replacements](0,1) && bex) )
|
|
{
|
|
if ( Random[Replacements](0,1) ) return Random[Replacements](0,2)?'SparksterBAmmo2':'SparksterBAmmo3';
|
|
return Random[Replacements](0,2)?'SparksterRAmmo2':'SparksterRAmmo3';
|
|
}
|
|
return Random[Replacements](0,3)?'SparkUnit':'SparkUnit2';
|
|
}
|
|
}
|