[Setup] Product=UTRA Alpha Demo Test Version=001 Archive=UTRA.umod SrcPath=. MasterPath=.. Requires=Unreal Tournament Demo348Requirement Group=SetupGroup Group=UTRAGroup [Unreal Tournament Demo348Requirement] Product=Unreal Tournament Demo Version=348 [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=421,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=526,Flags=3) [UTRAGroup] File=(Src=System\UTRA.int,Size=154) File=(Src=System\UTRA.u,Size=8057) File=(Src=Help\UTRA.txt,Size=1661) [Setup] LocalProduct=UTRA Alpha Demo Test ReadMe=Help\UTRA.txt SetupWindowTitle=UTRA mutator AutoplayWindowTitle=UTRA Alpha Demo Test Options ProductURL=http://www.planetunreal.com/mutation VersionURL=http://www.planetunreal.com/mutation Developer=JbP DeveloperURL=mailto:jbp@planetunreal.com [Unreal Tournament Demo348Requirement] LocalProduct=Unreal Tournament Demo ProductURL=http://www.unrealtournament.com VersionURL=http://unreal.epicgames.com Developer=Epic Games DeveloperURL=http://www.epicgames.com [Public] Object=(Name=UTRA.UTRA,Class=Class,MetaClass=Engine.Mutator,Description="*UT Rocket Arena*, Full weapons, full armor, full ammo. No pickups.") Áƒ*žDQ@$s*4ßŸŮŽÓŤcDEST$QNoneWeaponClassesUTRA GiveItemToRestockPlayerFindInventoryType GiveAmmoGiveToArmorClassesMutatorTakeDamageEngineCoreIdleSetSwitchPriorityIdle2 ScoreKillSetHandAddInventory DownWeaponSystem PlayerPawn BecomeItem InventoryDeleteInventoryCheckReplacement WeaponSetModifyPlayerPawnClassActorPackageWeapon TextBufferObject DamageType FunctionDynamicLoadObjectMutator ReturnValueAmmo StrProperty ScriptTextStructPropertyiClassPropertyNamePropertyStructVector RespawnTime AmbientGlowHealth bCanThrow Handedness Momentum HitLocationOtherInvKilleractualDamagebSuperRelevantNextDamageMutator aClassNameVictiminstigatedByItemPendingWeapon bHeldItem AmmoName AmmoType AmmoAmountMaxAmmoOwner ItemClassObjectPropertyFloatPropertyPickupClassesBoolProperty IntProperty WeaponItemByteProperty InvClassƒ€„€ƒ …€„ Œ……€„@Œ…$€‹ @@€„€„€„€€„€„€@€€”€”š"}Á 7’-Ś(š €Jdr* ‰.‡`w‰* ţ‰a‰‰‰œ‰˜‰q! › g˘› %P–,F{ Ľ%•–,‹{ ĽW  § ‡ Pr%Nwž*ž$  !Ř…– ŒD„r*w * Žwƒ*.ƒaŒw*— -Ÿ'  ¤$a?a/!.˘Oq! ’q! *’  a —  -Ÿ' ˆ#˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙6 ę:2çˆ1šňpˆ1šňp„oœƒ÷Â2Ÿ‹~NY‹~NY„oœ„oœ„oœ…ôŻôűƒ÷Â2Ÿ‡_ä°Tƒ÷Â2Ÿ‡_ä°T…ôŻôű„oœ„oœƒ÷Â2Ÿƒ÷Â2Ÿ„oœƒ÷Â2Ÿƒ÷Â2Ÿƒ÷Â2Ÿƒ÷Â2Ÿ„oœƒ÷Â2Ÿƒ÷Â2Ÿ‡_ä°Tƒ÷Â2Ÿ‡_ä°Tƒ÷Â2Ÿ‡_ä°Tƒ÷Â2Ÿ‡_ä°T„oœƒ÷Â2Ÿƒ÷Â2Ÿƒ÷Â2Ÿƒ÷Â2Ÿƒ÷Â2Ÿƒ÷Â2Ÿƒ÷Â2Ÿ„oœƒ÷Â2ŸŚ1ƒ÷Â2Ÿ„oœƒ÷Â2Ÿ„oœ„oœ…ôŻôű…ôŻôű…ôŻôű ]Botpack.ImpactHammerÝBotpack.EnforcerÝBotpack.ShockRifleÝBotpack.PulseGunÝBotpack.Minigun2ÝBotpack.UT_Eightball]Botpack.ThighPadsÍBotpack.Armor2`Ń =™œw*…w.ƒ*.ƒ‰œ.ƒ‰˜™1%;–,1{  …– Œ  w*  ĽŁ Ş!u+ 3/‚a/!w¨(1' [;//============================================================================= // UTRA. //============================================================================= class UTRA expands Mutator; var() string WeaponClasses[16]; var() string PickupClasses[8]; var() string ArmorClasses[8]; function ModifyPlayer( pawn Other ) { local int i; Super.ModifyPlayer( Other ); for ( i = 0; i < 16; i++ ) if ( WeaponClasses[i] != "" ) GiveItemTo( Other, WeaponClasses[i] ); for ( i = 0; i < 8; i++ ) if ( PickupClasses[i] != "" ) GiveItemTo( Other, PickupClasses[i] ); RestockPlayer( Other ); } function GiveItemTo( pawn Other, string aClassName ) { local class ItemClass; local Inventory Item; local Weapon WeaponItem; ItemClass = class( DynamicLoadObject( aClassName, class'Class' ) ); // If already owned, or class not found, return. if ( ItemClass == None || Other.FindInventoryType(ItemClass) != None ) return; // Procedure for weapons. if ( class( ItemClass ) != None ) { WeaponItem = Weapon( Spawn( ItemClass, Self ) ); if ( WeaponItem != None ) { WeaponItem.RespawnTime = 0.0; WeaponItem.GiveTo( Other ); WeaponItem.bHeldItem = TRUE; GiveAmmo( WeaponItem, Other ); WeaponItem.SetSwitchPriority( Other ); WeaponItem.WeaponSet( Other ); WeaponItem.AmbientGlow = 0; WeaponItem.SetOwner( Other ); if ( Other.IsA( 'PlayerPawn' ) ) WeaponItem.SetHand( PlayerPawn( Other ).Handedness ); else WeaponItem.GotoState( 'Idle' ); Other.Weapon.GotoState( 'DownWeapon' ); Other.PendingWeapon = None; Other.Weapon = WeaponItem; } return; } Item = Spawn( ItemClass, Self ); Item.RespawnTime = 0.0; Item.GiveTo( Other ); Item.bHeldItem = TRUE; } function GiveAmmo( weapon WeaponItem, Pawn Other ) { if ( WeaponItem.AmmoName == None ) return; WeaponItem.AmmoType = Ammo(Other.FindInventoryType(WeaponItem.AmmoName)); if ( WeaponItem.AmmoType != None ) return; else { WeaponItem.AmmoType = Spawn(WeaponItem.AmmoName, Self); // Create ammo type required Other.AddInventory(WeaponItem.AmmoType); // and add to player's inventory WeaponItem.AmmoType.BecomeItem(); WeaponItem.AmmoType.AmmoAmount = WeaponItem.AmmoType.MaxAmmo; WeaponItem.AmmoType.GotoState('Idle2'); } } function RestockPlayer( pawn Other ) { local int i; local inventory Inv; local class InvClass; Other.Health = Other.Default.Health; for (Inv = Other.Inventory; Inv != None; Inv = Inv.Inventory ) if ( Weapon( Inv ) != None ) Weapon( Inv ).AmmoType.AmmoAmount = Weapon( Inv ).AmmoType.MaxAmmo; for ( i = 0; i < 8; i++ ) { if ( ArmorClasses[i] != "" ) { InvClass = class( DynamicLoadObject( ArmorClasses[i], class'Class' ) ); Inv = Other.FindInventoryType( InvClass ); if ( Inv != None ) Other.DeleteInventory(Inv); GiveItemTo( Other, ArmorClasses[i] ); } } } function bool CheckReplacement( actor Other, out byte bSuperRelevant ) { if ( Other.IsA('Inventory') && Other.Owner != Self ) return FALSE; else return TRUE; } function ScoreKill( pawn Killer, pawn Other ) { RestockPlayer( Killer ); // better off left for the 1-on-1 mod.. Other.Weapon.bCanThrow = False; // don't throw out weapon. Super.ScoreKill( Killer, Other ); } function MutatorTakeDamage( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation, out Vector Momentum, name DamageType) { if ( Victim == InstigatedBy ) ActualDamage = 0; if ( NextDamageMutator != None ) NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); } €   ˙˙˙˙ ˙˙˙˙ ˙˙˙˙ ţ˙˙˙I ˙˙˙˙' ˙˙˙˙% Iý˙˙˙D ţ˙˙˙# ˙˙˙˙ ţ˙˙˙ ţ˙˙˙! ţ˙˙˙( ,ý˙˙˙C ˙˙˙˙ ţ˙˙˙M Iü˙˙˙ ţ˙˙˙* .ó˙˙˙/ ţ˙˙˙, #ó˙˙˙$ Jű˙˙˙0 Mů˙˙˙F Iő˙˙˙ #ř˙˙˙ #ř˙˙˙ Mů˙˙˙E Mü˙˙˙2 Iř˙˙˙< Lű˙˙˙B Iü˙˙˙A ţ˙˙˙L Jđ˙˙˙4 ţ˙˙˙- Oő˙˙˙1 ţ˙˙˙O Lý˙˙˙3 #ř˙˙˙ Iő˙˙˙G ţ˙˙˙ #ř˙˙˙†NY†7f†Ns†!8@‘+ M†!7Y‘!+ f•Hr†@@†7MŽ  Z•!Pf†"7tŽ K AŽ  M†7Y†?f†>s‘: @†7L†9YŽ= fŁ" r“6~“5KŠš 8XĄ"& PŠ |\Š› yXЧ EQŠ zV ˆ_ P%Š Ro0ŠŞ @A4Š )4f;A5Ľ";gp** UTRA (UT rocket arena) ** Author: JbP ** email: jbp@planetunreal.com ** Code date: an afternoon in late October. ** Release date: 16 November 1999. ** Version: Alpha-Demo-Test version 0.01a. Description: Okay, I'm breaking all my 'mutators 101' rules with this release, because I evidently can't keep my trap shut :). Welcome to the Alpha-Demo-Test version 0.01a of UTRA. (If id can do it, I feel totally justified). What is UTRA? Well, it's a simple weapon mutator which mimics some of the gameplay in the Rocket Arena Quake mods. Which bits specifically? -- The 'Full Armament, Full Ammo, Full Armor, No Pickups' bits. (Like it? I came up with that the other day). I made this mutator as a test mutator for a complete one-on-one mod which may or may not ever arrive (but I hope so). At the present time, I have my head buried in the Talismen RPG DM mod, which is going to blow your socks off. Thus this mutator is somewhat starved of my recent attention/interest,and whilst there are no bugs that I am aware of, it's hardly polished software. Therefore, please get in touch with me if you have suggestions or complaints, because I am more than willing to revise it at some stage. Installation: Double-click the UMod file, and point it to your \tournamentdemo\ directory. The mutator will then appear in the mutators dialog box, under the somewhat cheeky, alphabet-jumping title of "* UT Rocket Arena *". If it irks you, edit the .int file :) I have not tested this online, but I would be moderately surprised if it didn't work... JbP's strong recommendation: MaxPlayers = 2; // One-on-one is where this shines.System\Manifest.ini0System\Manifest.int0System\UTRA.int>šSystem\UTRA.uŘyHelp\UTRA.txtQ$}ŁĹăŸÎ*x+;J†