//============================================================================= // SchlonzMutator. //============================================================================= class SchlonzMutator expands Mutator config(SchlonzUT98); enum WeaponId { WI_NONE, // value 0 WI_LIVINGBIO, WI_PULSEGUN, WI_SHOCKMAGIC, WI_SUPEREIGHTBALL, WI_FLAKCANNON, WI_ERSTAUGUST, WI_CLUSTERREDEEMER, WI_RIPPER, WI_LASERSNIPER, WI_MINIGUN2 }; var string WeaponNames[10]; var string ClassNames[10]; // config var() config int ReplaceEnforcer; var() config int ReplaceBioRifle; var() config int ReplacePulseGun; var() config int ReplaceShockRifle; var() config int ReplaceMinigun; var() config int ReplaceRipper; var() config int ReplaceFlakCannon; var() config int ReplaceEightBall; var() config int ReplaceSniperRifle; var() config int ReplaceRedeemer; var() config int ReplaceUnknownWeapon; var() config int RedeemerLoadCount; var bool ReplaceFlakAmmo; /* ReplaceWith() Call this function to replace an actor Other with an actor of aClass. */ function Actor SchlonzReplaceWith( actor Other, string aClassName ) { local Actor A; local class aClass; local bool isinventory; if ( Other.IsA('Inventory') && (Other.Location == vect(0,0,0)) ) return None; aClass = class(DynamicLoadObject(aClassName, class'Class')); if ( aClass != None ) A = Spawn(aClass,Other.Owner,Other.tag,Other.Location, Other.Rotation); if ( Other.IsA('Inventory') ) { if ( Inventory(Other).MyMarker != None ) { Inventory(Other).MyMarker.markedItem = Inventory(A); if ( Inventory(A) != None ) { Inventory(A).MyMarker = Inventory(Other).MyMarker; A.SetLocation(A.Location + (A.CollisionHeight - Other.CollisionHeight) * vect(0,0,1)); } Inventory(Other).MyMarker = None; } else if ( A.IsA('Inventory') ) { if( Inventory(Other).bHeldItem ) { Inventory(A).bHeldItem = true; Inventory(A).Respawntime = 0.0; } else { Inventory(A).bHeldItem = false; Inventory(A).Respawntime = 1.0; } } } if ( A != None ) { A.event = Other.event; A.tag = Other.tag; } return A; } function bool SchlonzReplaceWeapon( Actor Other, string name, int id ) { local weapon W; if( id == 0 ) { log( "Schlonz don't replace "$name ); return true; } else { log( "replace "$name$" by "$ClassNames[id] ); W = Weapon( SchlonzReplaceWith( Other, ClassNames[id] ) ); W.bWeaponStay = true; W.RespawnTime = 1.0; W.bInstantRespawn = true; W.LifeSpan = 0.0; W.Charge = 999999; W.bHeldItem = false; W.bTossedOut = false; checkWeaponAddAmmo( W ); return false; } } function bool checkReplaceWeapon( Actor Other ) { if( Other.IsA('SchlonzLivingBioRifle') || Other.IsA('SchlonzPulseGun') || Other.IsA('SchlonzShockMagicRifle') || Other.IsA('SchlonzMinigun2') || Other.IsA('SchlonzRipper') || Other.IsA('SchlonzFlakCannon') || Other.IsA('SchlonzSuperEightBall') || Other.IsA('SchlonzErstAugustSniper') || Other.IsA('SchlonzClusterWarheadLauncher') ) { // already replaced return true; } /* else if( Other.IsA('Enforcer') && !Other.IsA('SchlonzEnforcer') ) { return SchlonzReplaceWeapon( Other, "Enforcer", ReplaceEnforcer ); } */ else if( Other.IsA('UT_BioRifle') || Other.IsA('GESBioRifle') || Other.IsA('OLGESBioRifle') ) { return SchlonzReplaceWeapon( Other, "UT_BioRifle", ReplaceBioRifle ); } else if( Other.IsA('PulseGun') || Other.IsA('AutoMag') || Other.IsA('OLAutoMag') || Other.IsA('QuadShot') ) { return SchlonzReplaceWeapon( Other, "PulseGun", ReplacePulseGun ); } else if( Other.IsA('ShockRifle') || Other.IsA('ASMD') || Other.IsA('OLASMD') ) { return SchlonzReplaceWeapon( Other, "ShockRifle", ReplaceShockRifle ); } else if( Other.IsA('Minigun2') || Other.IsA('Minigun') || Other.IsA('OLMinigun') ) { return SchlonzReplaceWeapon( Other, "Minigun2", ReplaceMinigun ); } else if( Other.IsA('Ripper') || Other.IsA('Razorjack') || Other.IsA('OLRajorjack') ) { return SchlonzReplaceWeapon( Other, "Ripper", ReplaceRipper ); } else if( Other.IsA('UT_FlakCannon') || Other.IsA('FlakCannon') || Other.IsA('OLFlakCannon') ) { return SchlonzReplaceWeapon( Other, "UT_FlakCannon", ReplaceFlakCannon ); } else if( Other.IsA('UT_Eightball') || Other.IsA('Eightball') || Other.IsA('OLEightball') ) { return SchlonzReplaceWeapon( Other, "UT_Eightball", ReplaceEightBall ); } else if( Other.IsA('SniperRifle') || Other.IsA('Rifle') || Other.IsA('OLRifle') ) { return SchlonzReplaceWeapon( Other, "SniperRifle", ReplaceSniperRifle ); } else if( Other.IsA('WarHeadLauncher') || Other.IsA('Stinger') || Other.IsA('OLStinger') ) { return SchlonzReplaceWeapon( Other, "WarHeadLauncher", ReplaceRedeemer ); } else { log( "found unknown weapon "$Other.Class.Name ); if( ReplaceUnknownWeapon != 0 ) { return SchlonzReplaceWeapon( Other, ""$Other.Class.Name, ReplaceUnknownWeapon ); } } return true; } function bool checkReplaceAmmo( Actor Other ) { local bool rc; rc = true; if( ReplaceFlakAmmo && Other.IsA('FlakAmmo') && !Other.IsA('SchlonzFlakAmmo') ) { Other = SchlonzReplaceWith( Other, "SchlonzUT98.SchlonzFlakAmmo" ); rc = false; } else if( Other.IsA('ASMDAmmo') ) { Other = SchlonzReplaceWith( Other, "Botpack.ShockCore" ); rc = false; } else if( Other.IsA('FlakBox') ) { Other = SchlonzReplaceWith( Other, "Botpack.FlakAmmo" ); rc = false; } else if( Other.IsA('RazorAmmo') ) { Other = SchlonzReplaceWith( Other, "Botpack.BladeHopper" ); rc = false; } else if( Other.IsA('RifleRound') ) { Other = SchlonzReplaceWith( Other, "Botpack.RifleShell" ); rc = false; } else if( Other.IsA('RifleAmmo') ) { Other = SchlonzReplaceWith( Other, "Botpack.BulletBox" ); rc = false; } else if( Other.IsA('RocketCan') ) { Other = SchlonzReplaceWith( Other, "Botpack.RocketPack" ); rc = false; } else if( Other.IsA('Clip') ) { Other = SchlonzReplaceWith( Other, "Botpack.EClip" ); rc = false; } else if( Other.IsA('ShellBox') ) { Other = SchlonzReplaceWith( Other, "Botpack.Miniammo" ); rc = false; } else if( Other.IsA('Sludge') ) { Other = SchlonzReplaceWith( Other, "Botpack.BioAmmo" ); rc = false; } else if( Other.IsA('StingerAmmo') ) { Other = SchlonzReplaceWith( Other, "Botpack.WarHeadAmmo" ); rc = false; } Ammo(Other).RespawnTime = 1.0; return rc; } function gnampf( Vector loc ) { local Vector loc2; loc2 = loc; loc2.Z += 96; Spawn( class'SchlonzFlakCannon',,,loc2,Rotator(loc2) ); } function bool CheckReplacement( Actor Other, out byte bSuperRelevant ) { /* if( Other.IsA('FlakBox') || Other.IsA('FlakShellAmmo') ) { ReplaceWith( Other, "SchlonzUT98.SchlonzFlakAmmo" ); return false; } if( Other.IsA('RocketCan') ) { ReplaceWith( Other, "Botpack.RocketPack" ); return false; } if( Other.IsA('Weapon') && !Other.isA( 'TournamentWeapon' ) ) if( Other.IsA('OLFlakCannon') ) { ReplaceWith( Other, "SchlonzUT98.SchlonzFlakCannon" ); gnampf( Other.Location ); return false; } */ if( Other.IsA( 'Weapon' ) ) { return checkReplaceWeapon( Other ); } else if( Other.isA( 'Ammo' ) ) { return checkReplaceAmmo( Other ); } else if( Other.isA( 'TournamentPickup' ) ) { if( Other.isA( 'UDamage' ) && !Other.isA( 'SchlonzDamageAmplifier' ) ) { ReplaceWith( Other, "SchlonzUT98.SchlonzDamageAmplifier" ); return false; } } return true; } function checkAddAmmo( Weapon w, class ammoclass ) { local float radius; local Actor a; local Vector off; radius = 256; foreach RadiusActors( ammoclass, a, radius, w.Location ) { // found ammo near weapon log( "found ammo near weapon" ); return; } // off = Vector( 64, 0, 0 ); off.X = 64; off.Y = 0; off.Z = 0; log( "adding ammo near weapon" ); Spawn( ammoclass,,,w.Location+off,Rotator(off) ); Spawn( ammoclass,,,w.Location-off,Rotator(off) ); off.Y = off.X; off.X = 0; Spawn( ammoclass,,,w.Location+off,Rotator(off) ); Spawn( ammoclass,,,w.Location-off,Rotator(off) ); } function checkWeaponAddAmmo( Weapon w ) { /* if( w.isA( 'Enforcer' ) ) { checkAddAmmo( w, class'' ); } else */ if( w.isA( 'UT_BioRifle' ) ) { checkAddAmmo( w, class'BioAmmo' ); } else if( w.isA( 'PulseGun' ) ) { checkAddAmmo( w, class'PAmmo' ); } else if( w.isA( 'ShockRifle' ) ) { checkAddAmmo( w, class'ShockCore' ); } else if( w.isA( 'Minigun2' ) ) { checkAddAmmo( w, class'Miniammo' ); } else if( w.isA( 'Ripper' ) ) { checkAddAmmo( w, class'BladeHopper' ); } else if( w.isA( 'UT_FlakCannon' ) ) { checkAddAmmo( w, class'FlakAmmo' ); } else if( w.isA( 'UT_Eightball' ) ) { checkAddAmmo( w, class'RocketPack' ); } else if( w.isA( 'SniperRifle' ) ) { checkAddAmmo( w, class'BulletBox' ); } } function checkAllAddAmmo() { local TournamentWeapon w; foreach AllActors( class'TournamentWeapon', w ) { checkWeaponAddAmmo( w ); } } /* function PostBeginPlay() { checkAllAddAmmo(); } */ function PreBeginPlay() { Super.PreBeginPlay(); /* Level.Game.bCoopWeaponMode = true; */ if( ReplaceEnforcer == WeaponId.WI_FLAKCANNON || ReplaceBioRifle == WeaponId.WI_FLAKCANNON || ReplacePulseGun == WeaponId.WI_FLAKCANNON || ReplaceShockRifle == WeaponId.WI_FLAKCANNON || ReplaceMinigun == WeaponId.WI_FLAKCANNON || ReplaceRipper == WeaponId.WI_FLAKCANNON || ReplaceFlakCannon == WeaponId.WI_FLAKCANNON || ReplaceEightBall == WeaponId.WI_FLAKCANNON || ReplaceSniperRifle == WeaponId.WI_FLAKCANNON || ReplaceRedeemer == WeaponId.WI_FLAKCANNON ) { ReplaceFlakAmmo = true; } else { ReplaceFlakAmmo = false; } checkAllAddAmmo(); } // WeaponNames(7)="LSR: Laser Sniper" // ClassNames(7)="LSR.LSR" defaultproperties { WeaponNames(0)="don't replace" WeaponNames(1)="SchlonzLivingBioRifle" WeaponNames(2)="SchlonzPulseGun" WeaponNames(3)="SchlonzShockMagicRifle" WeaponNames(4)="SchlonzSuperEightBall" WeaponNames(5)="SchlonzFlakCannon" WeaponNames(6)="SchlonzErstAugustSniper" WeaponNames(7)="SchlonzClusterRedeemer" WeaponNames(8)="SchlonzRipper" WeaponNames(9)="SchlonzMinigun" ClassNames(0)="-" ClassNames(1)="SchlonzUT98.SchlonzLivingBioRifle" ClassNames(2)="SchlonzUT98.SchlonzPulseGun" ClassNames(3)="SchlonzUT98.SchlonzShockMagicRifle" ClassNames(4)="SchlonzUT98.SchlonzSuperEightBall" ClassNames(5)="SchlonzUT98.SchlonzFlakCannon" ClassNames(6)="SchlonzUT98.SchlonzErstAugustSniper" ClassNames(7)="SchlonzUT98.SchlonzClusterWarheadLauncher" ClassNames(8)="SchlonzUT98.SchlonzRipper" ClassNames(9)="SchlonzUT98.SchlonzMinigun2" ReplaceBioRifle=WI_LIVINGBIO ReplacePulseGun=WI_PULSEGUN ReplaceShockRifle=WI_SHOCKMAGIC ReplaceRipper=WI_RIPPER ReplaceEightBall=WI_SUPEREIGHTBALL ReplaceFlakCannon=WI_FLAKCANNON ReplaceSniperRifle=WI_LASERSNIPER ReplaceRedeemer=WI_CLUSTERREDEEMER ReplaceMinigun=WI_MINIGUN2 RedeemerLoadCount=0 }