[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 GiveAmmoGiveTo ArmorClassesMutatorTakeDamageEngineCoreIdleSetSwitchPriorityIdle2 ScoreKillSetHand AddInventory DownWeaponSystem PlayerPawn BecomeItem InventoryDeleteInventoryCheckReplacement WeaponSet ModifyPlayerPawnClassActorPackageWeapon TextBufferObject DamageType FunctionDynamicLoadObjectMutator ReturnValueAmmo StrProperty ScriptTextStructPropertyiClassProperty NamePropertyStructVector RespawnTime AmbientGlowHealth bCanThrow Handedness Momentum HitLocationOtherInvKiller actualDamagebSuperRelevantNextDamageMutator aClassNameVictim instigatedByItemPendingWeapon bHeldItem AmmoName AmmoType AmmoAmountMaxAmmoOwner ItemClassObjectPropertyFloatPropertyPickupClasses BoolProperty IntProperty WeaponItem ByteProperty 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 ţ˙˙˙ #ř˙˙˙†N Y†7 f†N s†!8 @‘+ M†!7 Y‘!+ f•Hr†@ @†7 MŽ  Z•!Pf†"7 tŽ K AŽ  M†7 Y†? f†> s‘: @†7 L†9 YŽ= fŁ" r“6 ~“5 KŠš 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†