[Setup] Product=Assassins Version=100 Archive=Assassins.umod SrcPath=. MasterPath=.. Requires=Unreal Tournament Demo348Requirement Group=SetupGroup Group=AssassinsGroup [Unreal Tournament Demo348Requirement] Product=Unreal Tournament Demo Version=348 [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=440,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=351,Flags=3) [AssassinsGroup] File=(Src=System\assassins.int,Size=151) File=(Src=System\Assassins.u,Size=8212) File=(Src=Help\Assassins.txt,Size=2064) [Setup] LocalProduct=Assassins ReadMe=Help\Assassins.txt SetupWindowTitle=Assassins Mutator Setup AutoplayWindowTitle=Assassins Options ProductURL=None VersionURL=None Developer=SoulStorm DeveloperURL=None [Unreal Tournament Demo348Requirement] LocalProduct=Unreal Tournament Demo ProductURL= VersionURL= Developer=Epic DeveloperURL= [Public] Object=(Name=Assassins.Assassins,Class=Class,MetaClass=Engine.Mutator,Description="Assassins!,You only get frags for killing your target.") Áƒ*žD>@0k ‹@•ßþK”Ó—æ xÇ%0>None ChooseTargetGetPlayerList IsSameTeam SendMessage Assassins Initialize ModifyPlayer ScoreKillEngineCore PreBeginPlaySendMessageToAll PostRenderSystemCriticalEventClientMessagePackageCanvasPlayerReplicationInfo PlayerPawnClassPawnFontYHUDjkitMutatorObjectA FunctionBegin ReturnValue bIsPlayer TextBufferTeamSetPosmyHUDOther NumPlayersScoreDeathsTargetPKiller NextMutator KillerName HUDMutator PlayerNameOutput StrPropertyObjectPropertyFloatProperty BoolProperty IntProperty ByteProperty SmallFontGuys TargetName @€‚  €‰ €‚!‚ ‚‚€‚ €‚‚‚@‚€‚Œ@0€"€‚,;-'‚w†* w †‹%w–,mz w¥I! !Õ{†‹¹†š?&z†‹%wŽ*Ž .Š W%/a0 ‚TS-†‹¥10 %#™ ¡/a0 ‚ON‚-%z†‹"O10š:#†‘:†‘-'˜-(- Ÿ- ÅE, ”™’HCaÑCurrent Target:(/a0 ‚ BA‚ -w.Œ * %×– ,Íz  †‹×¥ —  ’®HC? aÑpTargeting -> (’, 10  s÷%){¥ Bš&õ%‰–,z†‹‰¥ID«?ÃÙ„z†‹‰  ˆ/'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0)¢–îòˆ1¹òp‰x‰x‰x‰x‚oœ‚oœ„‰|J‰x‰x‚oœ‚oœ„‰|JŒ¦1‚oœ‚oœ„‰|J‚oœ„‰|J‚oœ„‰|J‚oœ‚oœ„‰|JŒ¦1“Y+î’‚oœ„‰|J‚oœ‚oœ„‰|Jˆ1¹òp‚oœ‚oœ„‰|J‚oœ„‰|J‚oœ„‰|J‚oœ„‰|Jˆ1¹òp‚oœ‚oœ„‰|J‚oœ„‰|J •ž$ZÖˆ/a0 Œ*œ˜10 %T{ ¥ 8 mš&gy-‡-'³´†›/a0 ‚ fe‚ - w %-–,#z †‹-¥íe„z 10†wŽ*Ž  &ªV %G–,=z†‹G¥ .Œ%ppKill !!! (*'7/a0 ‚43-10 + ·D 1/a0 ‚.--10  * ƒÂ -( ׳I?//============================================================================= // Assassins. //============================================================================= class Assassins expands Mutator; var string Guys [16]; var int Target [16]; var bool Begin; function ChooseTarget (Pawn P) { local int i; local int NumPlayers; local int j; GetPlayerList(); i=0; while (Guys[i] != "") { i++; } NumPlayers = i; if (NumPlayers==1) goto End; for (i=0; i<16; i++) { if (Guys[i] == P.PlayerReplicationInfo.PlayerName) break; } Choose: j=(NumPlayers*frand()); if ((Guys[j] == P.PlayerReplicationInfo.PlayerName) || (IsSameTeam(P,j))) goto Choose; Target[i] = j; SendMessage (P); End: } function Initialize() { local Pawn A; GetPlayerList(); foreach AllActors (class 'Pawn', A) { if (A.bIsPlayer) { ChooseTarget(A); } } } function Scorekill (Pawn Killer, Pawn Other) { local string KillerName; local string TargetName; local int i; local int j; if ((Killer.PlayerReplicationInfo != None) && (Killer != Other)) { KillerName = Killer.PlayerReplicationInfo.PlayerName; for (i=0; i<16; i++) { if (Guys[i] == KillerName) break; } j= Target[i]; TargetName = Guys[j]; if (Other.PlayerReplicationInfo.PlayerName != TargetName) { Killer.PlayerReplicationInfo.Score -= 1; } if (Other.PlayerReplicationInfo.PlayerName == TargetName) { ChooseTarget(Killer); } } if (NextMutator != None) NextMutator.ScoreKill(Killer, Other); } function ModifyPlayer (Pawn Other) { local int i; local int NumPlayers; local int k; local Pawn P; local PlayerPawn A; foreach AllActors (class 'PlayerPawn', A) { A.myHUD.HUDMutator = self; } GetPlayerList(); i=0; while (Guys[i] != "") { i++; } NumPlayers = i; if (NumPlayers==1) goto End; if (Begin) goto NoInit; Initialize(); Begin = true; NoInit: if (Other.PlayerReplicationInfo.Deaths == 0.0) ChooseTarget(Other); foreach AllActors (class 'Pawn', P) { if ((P.bIsPlayer) && (P != Other)) { for (k=0; k<16; k++) { if (Guys[k] == P.PlayerReplicationInfo.PlayerName) break; } if ((IsSameTeam(Other, k)) || (Guys[Target[k]] == "")) ChooseTarget(Other); } } End: if (NextMutator != None) NextMutator.ModifyPlayer(Other); } function PreBeginPlay() { Begin = false; } function GetPlayerList () { local int i; local Pawn A; i=0; foreach AllActors (class 'Pawn', A) { if (A.bIsPlayer) { Guys[i]= A.PlayerReplicationInfo.PlayerName; i++; } } } function bool IsSameTeam (Pawn Other, int T) { local Pawn P; local bool Output; foreach AllActors (class 'Pawn', P) { if ((P.bIsPlayer) && (P.PlayerReplicationInfo.PlayerName == Guys[T])) break; } if (Other.PlayerReplicationInfo.Team == P.PlayerReplicationInfo.Team) Output = True; else Output = False; return Output; } function SendMessage(pawn P) { local int i; local int j; for (i=0;i<16;i++) { if (Guys[i] == P.PlayerReplicationInfo.PlayerName) break; } j=Target[i]; PlayerPawn(P).ClientMessage("Kill "$Guys[j]$"!!",'CriticalEvent'); } function SendMessageToAll() { local Pawn A; foreach AllActors (class 'Pawn', A) { if (A.bIsPlayer) SendMessage(A); } } simulated event PostRender(Canvas canvas) { local Pawn P; local int i; local int j; local int y; y=10; Canvas.Font = Canvas.SmallFont; Canvas.SetPos(0,200); Canvas.DrawText("Current Target:", false); foreach AllActors (class 'Pawn', P) { if ((P.bIsPlayer) && (PlayerPawn(P) != None)) { for (i=0;i<16;i++) { if (Guys[i] == P.PlayerReplicationInfo.PlayerName) break; } j=Target[i]; Canvas.SetPos(0,200+y); Canvas.DrawText("Targeting -> "$Guys[j], false); y=y+10; } } } €  ÿÿÿÿ  ÿÿÿÿ ýÿÿÿ9 6þÿÿÿ ýÿÿÿ6 ÿÿÿÿ ÿÿÿÿ ýÿÿÿ! 5üÿÿÿ3 ÿÿÿÿ 8þÿÿÿ$ 6øÿÿÿ0 ýÿÿÿ5 ýÿÿÿ8 :üÿÿÿ& !÷ÿÿÿ' ÿÿÿÿ 6÷ÿÿÿ ýÿÿÿ ýÿÿÿ ýÿÿÿ% 6íÿÿÿ2 6÷ÿÿÿ; 7üÿÿÿ+ 7üÿÿÿ, 6ôÿÿÿ( !øÿÿÿ !øÿÿÿ !øÿÿÿ !øÿÿÿ )< ]…( i‡$/ u…* B‡' N‡*) […$ h…+ t…' @…)- L…* X‡*. d‡'. q…( ~‡&. J‡(. W…' d‡$) p)" }…% I‡%  U…(* b‡-  n$= {‡,  G&4 T‡+. `…+ m…** y‡*  E…' R$1 ^…$ j…& v‡&) BŠ)NOŠ)O]Š)DlŠŸ) {pŠ)skˆ$s^"Šž)TQ*Š)se.Š);X0Š) 8S1Š )  K2—4T?k2&# qAssassins Mutator v1.1 Author: SoulStorm E-mail: SoulStorm5@ign.com Gameplay: The Assassins Mutator will assign each new player a target and frags are only scored for killing your assigned target. Killing sprees are still based on total kills, not frags, but the game frag limit is affected. As a result, I reccomend that this limit be set lower than normal (trying to get to 30 could take all night :o) ). The current incarnation of Assassins is single player only, but I promise a netplay compatable version very soon. This should wet your whistles for now... Questions are welcome and comments are encouraged. Known Issues: When playing team games, I don't recommend switching teams in mid-game. Everytime I try this, I die instantly and I'm not sure why this is. If anyone figures it out, mail me and I'll fix it. Change History: v1.0 - Initial Version v1.1 - fixed Teamplay bug (not completely, see Known Issues), mutator now works if you start a game with only one player, installation issues, added HUD notification (thanx JbP!), broke network code (oops! :( ). ======================================================== ----------------------- Copyright / Permissions ----------------------- You are NOT allowed to commercially exploit this "product", i.e. put it on a CD or any other electronic medium that is sold for money, without my express permission (or a big check!) You MAY distribute this "product" through any electronic network (internet, FIDO, local BBS, whatever), provided you include this file and leave the archive intact. ======================================================== UNREALTOURNAMENT (c)1999 Epic Megagames, Inc. All Rights Reserved. UNREALTOURNAMENT and the UNREALTOURNAMENT logo are registered trademarks of Epic Megagames, Inc. All other trademarks and trade names are properties of their respective owners. I reserve the right to clarify any other legal crap that this doesn't cover. ======================================================== System\Manifest.iniCSystem\Manifest.intC_System\assassins.int¢—System\Assassins.u9 Help\Assassins.txtM$£ÅãŸ],-¦Ž<&