[Setup] Product=freezeGun Version=100 Archive=freezeGun.umod SrcPath=. MasterPath=.. Requires=UnrealTournamentRequirement Group=SetupGroup Group=umodINIGroup Group=freezeGunGroup Group=umodIncludeFilesGroup [UnrealTournamentRequirement] Product=UnrealTournament Version= [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=621,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=517,Flags=3) [umodINIGroup] AddIni=UnrealTournament.ini,Engine.GameEngine.ServerPackages=freezeGun [freezeGunGroup] File=(Src=System\freezeGun.u,Size=22652) File=(Src=System\freezeGun.int,Size=107) [umodIncludeFilesGroup] File=(Src=System\freezeGunReadMe.txt,Size=3051) File=(Src=freezeGunReadMe.txt,Size=3051) [Setup] LocalProduct=freezeGun ReadMe=freezeGunReadMe.txt SetupWindowTitle=freezeGun Setup AutoplayWindowTitle=freezeGun Options ProductURL=mailto:zdev@gamespotmail.com VersionURL=mailto:zdev@gamespotmail.com Developer=zdev - zdev@gamespotmail.com DeveloperURL=mailto:zdev@gamespotmail.com [UnrealTournamentRequirement] LocalProduct=UnrealTournament ProductURL=http://www.unrealtournament.com/ VersionURL=http://unreal.epicgames.com/ Developer=Epic Games, Inc. DeveloperURL=http://www.epicgames.com/ *E@ATRRFA`gvANone freezeGunEngineCoreSystemBotpackGiveTo StopMovementDeleteInventory freezeObjFrozen DoEffectBot ItemNameClientAdjustGlow freezeCore ShockFreeze MyDamageTypeTick ReplaceWithPickupMessage BeginStateTimer EndStatefreezeexplode freezeEffect freezeProjRoaming ShockRifleCheckReplacement unFrozenAmmo RateSelf ShockCoreWeaponDescriptionWeaponRegisterDamageMutatorPostBeginPlayimpactUseAmmoSuperExplosionAltProjectileClassAltFireFindInventoryType AmmoNameSetDefaultDisplayPropertiesAddAmmoIdle DeathMessage frozensphereDamageMutatorTakeDamage DamageTypeClassi InventoryTexture ScriptText HurtRadius ScaleGlow ReturnValueB AirSpeedMeshLevelMutator LevelInfo GameInfo TextBufferRole DeltaTime DrawScale actualDamagePawnActor Projectile Acceleration VelocityEnemyGame Instigator AnimRate AccelRate GroundSpeedValue bAnimLoopbAnimFinishedVictim Rotation instigatedBy Function bUseAltMode WaterSpeed AmmoType LocationState ViewRotationMomentumTransferVectorJumpZHealth TeamTexturesTeamFireTextures ExploSoundPackageLowDetailTextureObject MyEffectStruct InitializedStructProperty BytePropertyut_shieldbelt ShockProjTournamentPickup HitLocationUT_ShieldBeltEffect UT_ComboRing NamePropertyObjectPropertyFloatProperty MomentumOwnerOriginalLocationtheFrozenPawn speedArr PawnWeapons WeaponsAmmoCurrentWeapon theEnemywpnIdxammoIdx Destroying BoolProperty IntPropertyzeroVec bIsFrozentheDamageTypetheOtherDamageType theFreezer PlayerPawnbSuperRelevantOther4@L\9 }! (82  ::$2LhXu69 }9 }9 }9 }9 }9 }9 }9 }9 }8z8z9 }tѸB9 }9 }ttѸB9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }tttt9 }j@j@9 }j@9 }j@j@9 }j@9 }9 }9 }=== 3?"X] ƒ9 }2$A1$   70 2 (ԔI+\I+\9 }j@j@j@ѸBѸB"]Classification: Freeze Rifle,") 0]%k froze %o over with the %w.]You got a Freeze Gun! = Freeze Gun>2"c b_]You picked up a Freeze Core. ] Freeze Core%#,5*V Bw.*.L#HC*%&,,,%%w*  q! -' -( 2w*a/!#. w*a/!. Fa@@'a/! q!-!'-( -Mg q! +>D&%q!$ 9 ?& &  &*1/',.&& /' $1.-(w*w* w *{ a/! -'  T-' %9V - -'  $ .#J#  -'-( a+Pa  r //============================================================================= // freezeProj. // // Author: ZDev // Date: 2/6/2000 // Purpose: Projectile for alternate fire of freeze gun. //============================================================================= //Extend ShockProj class freezeProj extends ShockProj; //Overwrite parent SuperExplosion() function SuperExplosion() { //Change damage type from MyDamageType to 'freezeexplode', otherwise everyone //in the SuperExplosion radius would be frozen; HurtRadius(Damage*3, 250, 'freezeexplode', MomentumTransfer*2, Location ); Spawn(Class'ut_ComboRing',,'',Location, Instigator.ViewRotation); PlaySound(ExploSound,,20.0,,2000,0.6); Destroy(); } l //============================================================================= // freezeEffect. // // Author: ZDev // Date: 2/6/2000 // Purpose: Creates freeze effect around target pawn // by using the ut_ShieldBeltEffect //============================================================================= class freezeEffect extends UT_ShieldBeltEffect; simulated function Tick(float DeltaTime) { Super.Tick(DeltaTime); //Destroy this if the freezeObj has been destroyed if(Pawn(Owner) == None || Pawn(Owner).FindInventoryType(class'freezeObj') == None) Destroy(); } ; 3Ga- (Zw*Ca/! - '-   %a  ;-  !& ?, ; -    L?;;-   % $#% I//============================================================================= // ShockFreeze. // // Author: ZDev // Date: 2/6/2000 // Purpose: Replacment ammo for Shock Freeze, changes text for Shock Core //============================================================================= //Extend Shock Rifle class ShockFreeze extends ShockRifle; function AltFire( float Value ) { //We want it to cost two //This if keeps us from re-writing the entire AltFire function if ( AmmoType.UseAmmo(2) ) { //The parent will take the other one. AmmoType.AddAmmo(1); Super.AltFire(Value); } } //Tweak the AI a little bit function float RateSelf( out int bUseAltMode ) { local Bot B; local Inventory I; local bool bIsFrozen; B = Bot(Owner); bIsFrozen = false; //Check if the enemy target is already frozen if(B != None) if(B.Enemy != None) for ( I=B.Enemy.Inventory; I!=None; I=I.Inventory ) if ( I.IsA('freezeObj')) bIsFrozen = true; //If he is, don't continue to use this weapon if(bIsFrozen) return -2; //If not, get the parent rating return Super.RateSelf(bUseAltMode); } J//============================================================================= // freezeObj. // // Author: ZDev // Date: 2/6/2000 // Purpose: Freeze Obj, freezes pawn and keeps frozen for timed duration, // then unfreezes pawn and is destroyed. //============================================================================= class freezeObj expands TournamentPickup; var vector OriginalLocation; //Pawns Starting Location var Pawn theFrozenPawn; //Pawn Reference var float speedArr[5]; //Pawn max speeds var Inventory I; //Var for inventory var Weapon PawnWeapons[10]; //Refs to pawns weapons var Ammo WeaponsAmmo[10]; //Refs to pawn ammo var Weapon CurrentWeapon; //Pawns current weapon var Pawn theEnemy; //Pawns Enemy var int wpnIdx; //Var for loops var int ammoIdx; //Var for loops var bool Initialized; //Init var var bool Destroying; //Dest var var freezeEffect MyEffect; //Reference to visual effect replication { reliable if( Role==ROLE_Authority ) OriginalLocation; } function GiveTo(Pawn Other) { //Call parent func Super.GiveTo(Other); //Save current location OriginalLocation = Owner.Location; //Save pawn theFrozenPawn = Pawn(Owner); //Create Effect MyEffect = Spawn(class'freezeEffect', Owner,,Owner.Location, Owner.Rotation); //Set Effect's owner MyEffect.SetOwner(Owner); //Start State GotoState('Frozen'); } state Frozen { simulated function Tick(float DeltaTime) { if(theFrozenPawn.Health <= 0) { //If Pawn died, unfreeze GotoState('unFrozen'); } else { //Otherwise keep him in place StopMovement(); } } function Timer() { //Leave state GotoState(''); } function BeginState() { //Stop him StopMovement(); //Start freezeEffect DoEffect(); //Create blue haze if(PlayerPawn(theFrozenPawn) != None) PlayerPawn(theFrozenPawn).ClientAdjustGlow(-0.2,vect(0,0,200)); //Save enemy theEnemy = theFrozenPawn.Enemy; //Remove enemy, this helps stop bots from hunting theFrozenPawn.Enemy = None; //Save current max speeds speedArr[0] = theFrozenPawn.GroundSpeed; speedArr[1] = theFrozenPawn.WaterSpeed; speedArr[2] = theFrozenPawn.AirSpeed; speedArr[3] = theFrozenPawn.AccelRate; speedArr[4] = theFrozenPawn.JumpZ; //Set max speeds to 0 //We do this so that a move will be halted //on the client side where it may be lagged in recieving //the server SetLocation() call theFrozenPawn.GroundSpeed = 0; theFrozenPawn.WaterSpeed = 0; theFrozenPawn.AirSpeed = 0; theFrozenPawn.AccelRate = 0; theFrozenPawn.JumpZ = 0; //Init counts wpnIdx = 0; ammoIdx = 0; //Remove Weapons if(theFrozenPawn.Weapon != None) { //Save current weapon currentWeapon = theFrozenPawn.Weapon; //Keep weapon from targeting or doing other special functions //while it's not in pawn possesion currentWeapon.GotoState(''); //These make sure the weapon isn't in animation when it's given back currentWeapon.bAnimFinished = true; currentWeapon.bAnimLoop = false; currentWeapon.AnimRate = 0.0; //Loop through pawn inventory for ( I=theFrozenPawn.Inventory; I!=None; I=I.Inventory ) { if ( I.IsA('Weapon')) { //Store weapon in array PawnWeapons[wpnIdx] = Weapon(I); //Remove from pawn theFrozenPawn.DeleteInventory(I); //Increment count wpnIdx++; } } //Do the same as above with ammo for ( I=theFrozenPawn.Inventory; I!=None; I=I.Inventory ) { if ( I.IsA('Ammo')) { WeaponsAmmo[ammoIdx] = Ammo(I); theFrozenPawn.DeleteInventory(I); ammoIdx++; } } } //Call Timer() in three seconds SetTimer(3.0,true); //If the Pawn is a bot, take it out of any state so it's //less likely to try a move while frozen if(theFrozenPawn.IsA('Bot')) theFrozenPawn.GotoState(''); //Init these vars for later Initialized = true; Destroying = false; } function EndState() { //If we don't do this, End State will infinately recure if(Destroying) return; //Set var Destroying = true; //If the pawn is still alive, give him back his weapons and ammo. //If we didn't check first, he would alwasy get his weapons back // if he died while frozen. if(theFrozenPawn.Health > 0) { //Loop through weapons and ammo arrays and give them to //the pawn. while(--wpnIdx >= 0) PawnWeapons[wpnIdx].GiveTo(theFrozenPawn); while(--ammoIdx >= 0) WeaponsAmmo[ammoIdx].GiveTo(theFrozenPawn); //Reset enemy and current weapon theFrozenPawn.Enemy = theEnemy; theFrozenPawn.Weapon = currentWeapon; //Reset current weapon's state currentWeapon.GotoState('Idle'); } else { //If we unfroze because the pawn died, just destroy the //weapons and ammo. while(--wpnIdx >= 0) PawnWeapons[wpnIdx].Destroy(); while(--ammoIdx >= 0) WeaponsAmmo[ammoIdx].Destroy(); } //If it's a player, remove the blue haze. if(PlayerPawn(theFrozenPawn) != None) PlayerPawn(theFrozenPawn).ClientAdjustGlow(0.2,vect(0,0,-200)); //Set the max speeds back to original values. theFrozenPawn.GroundSpeed = speedArr[0]; theFrozenPawn.WaterSpeed = speedArr[1]; theFrozenPawn.AirSpeed = speedArr[2]; theFrozenPawn.AccelRate = speedArr[3]; theFrozenPawn.JumpZ = speedArr[4]; //If the pawn is bot, set it back in action //Admitadly, this may not be the last state he was in, //but being frozen should shake up anybody's train of thought. :) if(theFrozenPawn.IsA('Bot')) theFrozenPawn.GotoState('Roaming'); //Turn off effect. MyEffect.ScaleGlow = 0.0; //Clean up pawn display theFrozenPawn.SetDefaultDisplayProperties(); //Destroy effect MyEffect.Destroy(); //Remove freezeObj from pawn inventory theFrozenPawn.DeleteInventory(self); //Destroy this obj Destroy(); } } function DoEffect() { //Set Effect parameters MyEffect.Mesh = theFrozenPawn.Mesh; MyEffect.DrawScale = theFrozenPawn.Drawscale; MyEffect.ScaleGlow = 1.0; MyEffect.Texture = class'UT_ShieldBelt'.default.TeamFireTextures[1]; MyEffect.LowDetailTexture = class'UT_ShieldBelt'.default.TeamTextures[1]; } function StopMovement() { local vector zeroVec; //zeroVec represents no movement. zeroVec = vect(0, 0, 0); //All imediate movement is stopped. theFrozenPawn.Acceleration = zeroVec; theFrozenPawn.Velocity = zeroVec; //Animation is suppressed theFrozenPawn.bAnimFinished = true; theFrozenPawn.bAnimLoop = false; theFrozenPawn.AnimRate = 0.0; //Some movement will still get trough, so, put the pawn //back in it's starting location. theFrozenPawn.SetRotation( rotator(zeroVec) ); theFrozenPawn.SetLocation(OriginalLocation); } :A &y .a    aq!  1 +S a/! a/! freezeGun.ShockFreeze( a/!! a/! freezeGun.freezeCore( ( t0//============================================================================= // ShockFreeze. // // Author: ZDev // Date: 2/6/2000 // Purpose: Mutator for adding the Freeze Gun to a game //============================================================================= //extends Mutator class freezeGun extends Mutator; //Freeze Gun Damage Types var name theDamageType; var name theOtherDamageType; //Freeze Obj var freezeObj theFreezer; //Control Var var bool Initialized; function PostBeginPlay() { //Only do this once. if (Initialized) return; Initialized = True; //Store Damage Types theDamageType = class'freezeGun.freezeProj'.default.MyDamageType; theOtherDamageType = class'freezeGun.ShockFreeze'.default.MyDamageType; //Register Mutator Level.Game.RegisterDamageMutator( Self ); } function bool CheckReplacement(Actor Other, out byte bSuperRelevant) { //Replace all Shock Rifles with the Freeze Gun if(Other.IsA('ShockRifle') && !Other.IsA('ShockFreeze')) { ReplaceWith(Other, "freezeGun.ShockFreeze"); return false; } else if(Other.IsA('ShockCore') && !Other.IsA('freezeCore')) { //Replace Shock Cores with Freeze Cores ReplaceWith(Other, "freezeGun.freezeCore"); return false; } return Super.CheckReplacement( Other, bSuperRelevant ); } function MutatorTakeDamage( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation, out Vector Momentum, name DamageType) { //Is the Victim already frozen ? local bool bIsFrozen; local Inventory I; bIsFrozen = false; //Is the Victim carrying a freezeObj ? for ( I=Victim.Inventory; I!=None; I=I.Inventory ) if ( I.IsA('freezeObj')) bIsFrozen = true; //If he's not frozen and he takes body damage from a freezeProj, //freeze him. if (!bIsFrozen && DamageType == theDamageType && ActualDamage > 0) { //Create a freeze obj and give it to him. theFreezer = Spawn(class'freezeObj'); theFreezer.GiveTo(Victim); } else if (bIsFrozen && DamageType == 'impact') { //If he was frozen and hit by an impact hammer, damage is 10X ActualDamage *= 10; } else if (bIsFrozen && DamageType != theDamageType && DamageType != theOtherDamageType) { //If he was frozen and hit by something else (other than the freeze gun) //Damge is -20% ActualDamage *= 0.8; } else if (bIsFrozen && (DamageType == theDamageType || DamageType == theOtherDamageType)) { //If he was frozen and hit with the freeze gun, no damage. ActualDamage = 0.0; } //Call parent func, which will call NextDamageMutator Super.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType); } <6=ߘ9l9 }j@j@j@h====X](ԔRùM//============================================================================= // Freeze Core // // Author: ZDev // Date: 2/6/2000 // Purpose: Replacment ammo for Shock Freeze, changes text for Shock Core //============================================================================= class freezeCore extends ShockCore; ("h?,zC!?,a  ! a A D?a  A ?r.*r. + *a )  - -'%Q% '{% Q  q!/%a%a0w.*.L>#H%&,,,a/! q!-aa hh5I5Jh575w5Z5#5j55wzw75L5D5E55p55A5t5xwNlb5 5n5qn^5F5Kw#5vx>xRx\xSxc5!5BFdw]Z*w?xGZEVEUxQZZ 5rZx;Z3oEZ:nMZvw8wOw@n`x2vZZFa5C5_5onL5uZnXwPZ%wewfwiwgZ(| w#6 D$`Q$} q%k }%B J&C V&64 b&;N n&@ {&6H H'06 T'6H a'66 m' y z'2G s30= @4=I M4hY46W A6 N6~ [6=J h6D t60H @7=K L7{Y7A h7=m u7RA8:N S<@F `<m l<Gx<6s >6Y L?6y Y?/T f?0[ r?;M ~?9rK@9 }G-F ]H0< iH93uH thI*8\K ITL=%P]N}mO94} jQ94w g];< ^g=3yjg94Tck94Vw *M]w=aT=940u]t"94XQ(fiBO9rQ[Public] Object=(Name=freezeGun.freezeGun,Class=Class,MetaClass=Engine.Mutator,Description="Freeze Gun") ======================================== freezeGun UnrealTournament(tm) Mutator ======================================== Author: ZDev Date: 2/5/2000 E-Mail: zdev@gamespotmail.com ======================================== Description ------------- Greetings all, I have been working onthis for several weeks and I think it has turned out rather well. It is, however my first UT scripting project so please feel free to give my your feedback good, bad and ugly. As the name implies, I have created a freeze weapon. It replaces the ASMD Shock Rifle in any map that the mutator is used on. The primary and combo attacks have not been changed (other than wording), but the secondary attack will now freeze anyone damaged by it for three seconds. There are some important specifics to the attack which I'll list below. Details ------- -Freeze Gun replaces ASMD Shock Rifle. -Ammo is also replaced. -Primary fire mode behaves normally as does the combo attack (destroying secondary fire with the primary). -If a target takes body damage (damage after shields), it is frozen for three seconds. -When a player is frozen, he can still see all around him (even though externally he appears to be still), but he can not move, jump or shoot. -While frozen a target will take no more damage from a Freeze Gun, primary or secondary fire. -Also, while frozen the target gets a 20% reduction for all other attacks save the Impact Hammer. -Finally, while frozen a target takes 10X damage from the Impact Hammer* (i.e. a 5 point hit becomes a 50 point hit). *Tip o'the fedora to the Duke. Known Issues ------------ I've tried to test this guy pretty well, but again it's my first attempt and it delves into some rather touchy parts of UT Script. One area that I had to work on after I thought it was complete was compensating for network latency, because movement performed by the client and synced with the server (or vice versa) can get a little funky. Anyway, please let me know if you find any problems. I think that's about it. My e-mail is included for praise and jeers and I hope to see you all on gameslink #UnrealScript. Laters. -zdev Acknowledgements: ----------------- Special thanks to Tim Sweeney at Epic and everyone who has produced documentation and help files for UT add-ons. Also special thanks to the fonts of information on #UnrealScript, most especially ^Soul^ and Mongo. Disclaimer: ----------- The author of this package takes no responsibily for any changes to the users system during installation or use of this mutator. There is no warrenty explicit or implied in the distribution of this software. This software is meant soley as an add-on for a licened copy of UnrealTournament(tm) which is a registered trademark of Digital Extremes and Epic MegaGames, distributed by GT games. ======================================== freezeGun UnrealTournament(tm) Mutator ======================================== Author: ZDev Date: 2/5/2000 E-Mail: zdev@gamespotmail.com ======================================== Description ------------- Greetings all, I have been working onthis for several weeks and I think it has turned out rather well. It is, however my first UT scripting project so please feel free to give my your feedback good, bad and ugly. As the name implies, I have created a freeze weapon. It replaces the ASMD Shock Rifle in any map that the mutator is used on. The primary and combo attacks have not been changed (other than wording), but the secondary attack will now freeze anyone damaged by it for three seconds. There are some important specifics to the attack which I'll list below. Details ------- -Freeze Gun replaces ASMD Shock Rifle. -Ammo is also replaced. -Primary fire mode behaves normally as does the combo attack (destroying secondary fire with the primary). -If a target takes body damage (damage after shields), it is frozen for three seconds. -When a player is frozen, he can still see all around him (even though externally he appears to be still), but he can not move, jump or shoot. -While frozen a target will take no more damage from a Freeze Gun, primary or secondary fire. -Also, while frozen the target gets a 20% reduction for all other attacks save the Impact Hammer. -Finally, while frozen a target takes 10X damage from the Impact Hammer* (i.e. a 5 point hit becomes a 50 point hit). *Tip o'the fedora to the Duke. Known Issues ------------ I've tried to test this guy pretty well, but again it's my first attempt and it delves into some rather touchy parts of UT Script. One area that I had to work on after I thought it was complete was compensating for network latency, because movement performed by the client and synced with the server (or vice versa) can get a little funky. Anyway, please let me know if you find any problems. I think that's about it. My e-mail is included for praise and jeers and I hope to see you all on gameslink #UnrealScript. Laters. -zdev Acknowledgements: ----------------- Special thanks to Tim Sweeney at Epic and everyone who has produced documentation and help files for UT add-ons. Also special thanks to the fonts of information on #UnrealScript, most especially ^Soul^ and Mongo. Disclaimer: ----------- The author of this package takes no responsibily for any changes to the users system during installation or use of this mutator. There is no warrenty explicit or implied in the distribution of this software. This software is meant soley as an add-on for a licened copy of UnrealTournament(tm) which is a registered trademark of Digital Extremes and Epic MegaGames, distributed by GT games. System\Manifest.iniSystem\Manifest.intSystem\freezeGun.u|XSystem\freezeGun.int]kSystem\freezeGunReadMe.txt] freezeGunReadMe.txti uvQ