[Setup] Product=Snipe Version=75 Archive=Snipev75.umod SrcPath=. MasterPath=.. Requires=UnrealTournament400Requirement Group=SetupGroup Group=umodINIGroup Group=SnipeGroup [UnrealTournament400Requirement] Product=UnrealTournament Version=400 [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=505,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=571,Flags=3) [umodINIGroup] AddIni=UnrealTournament.ini,Engine.GameEngine.ServerPackages=Snipe [SnipeGroup] File=(Src=System\Snipe.int,Size=250) File=(Src=System\Snipe.u,Size=16904) File=(Src=Help\Snipev75.txt,Size=2194) [Setup] LocalProduct=Snipe ReadMe=Help\Snipev75.txt SetupWindowTitle=Install Snipe AutoplayWindowTitle=Snipe Options ProductURL=http://www.planetunreal.com/thelaboratory/mymods/snipe.htm VersionURL=http://www.planetunreal.com/thelaboratory/mymods/snipe.htm Developer={KiX}ProfessorGib DeveloperURL=http://www.planetunreal.com/thelaboratory/ [UnrealTournament400Requirement] LocalProduct=UnrealTournament ProductURL=http://www.unrealtournament.com/ VersionURL=http://unreal.epicgames.com/ Developer=Epic Games, Inc. DeveloperURL=http://www.epicgames.com/ [Public] Object=(Name=Snipe.Snipe,Class=Class,MetaClass=Engine.Mutator,Description="Snipe, Sniper arena with sniper dots.") Object=(Name=Snipe.InstaSnipe,Class=Class,MetaClass=Engine.Mutator,Description="InstaGib Snipe, Instagib with sniper dots.")Įƒ*žE}@Wį<;õ:`Ä}ÜīŠÓŒoą)M¢ĖW}NoneSnipeCoreEngineBotpackTickSystem DotColorsPostBeginPlay SetupAIMMsgIDpawnsUpdateDotPos SetupIDMsg PlayerPawnSniperDotRifleInstaGibDotRifle FontSize AmmoStringWeaponStringbOwnsCrosshair AmmoNameYPos bIsSpecialXPosDefaultWeapon GetStringCalcDotbFadeMessage bIsUniqueBroadcastLocalizedMessage WeaponName GetOffset BeginPlay PostRenderPawnTexture RemoteRoleColor SnipeAIMmsg InstaSnipe AdjustAim SnipeIDmsg DrawScale TraceShot DrawColorStyle BulletBoxSuperShockCore SniperDotHealthZ LocationLocalMessageSetPos DesiredFOV DefaultFOV DeltaTimeMsgFloatProperty aimerrorObjectPropertyRelatedPRI_2ByteProperty StartTrace PlayerNameVectorWeaponStructOwnerRelatedPRI_1OptionalObjectPlayerReplicationInfoP HitLocationOtherScaleActorYL ScriptTextClipY PawnOwnerXYPackageSwitchViewRotation AdjustedAimBRG Accuracy EyeHeightClipXStaticSaveConfigRot StrProperty TextBuffer SniperRifleTranslocatorArena EndTrace ReturnValueSuperShockRifleRifleLocalMessagePlus TranglowyObject FunctionBoolPropertyStructProperty InventoryCanvasClasssightaimMSGidMSG IntProperty DotColorbShotPenaltyRotatorbFeigningDeathTargetsniperLoc HitNormal—I1)’’’’’’’’’’’’’’’’’’6ŠFÜ —=ķ„"ÓÓÓ,*%’’$D$–C—L+&’’’’’’’’’’’’’’’’’’6ŠĆ²9—=ķ„"ÓÓÓ$śĆ$HB€…†9V0’’’’’’’’’’’’’’’’’’*üļį†=•‚‡ŠĆ²9‡ŠĆ²9‡ŠĆ²9‡ŠĆ²9‡ŠĆ²9‡ŠĆ²9‡ŠFÜ ‡ŠFÜ ‡ŠFÜ ‡ŠFÜ ‡ŠFÜ ‡ŠFÜ ƒ9ė }‘.ź;ūƒ9ė }‘.ź;ūƒ9ė }ƒ9ė }ƒ9ė }ƒ9ė }ƒ9ė }†=•‚ƒ9ė }ƒ9ė }ƒ9ė }†=•‚ƒ9ė }ƒ9ė }„]botpack.translocator.tranglowŻ botpack.translocator.tranglowBŻ botpack.translocator.tranglowGŻ botpack.translocator.tranglowY$-#¹*$€>ƒ’ƒ$†ƒ’!’ €ƒĄ@’ ’ µ¤ ’Ą@šG/’’’’’’’’ €’’’’’’’’’’2©Ói¬šžŲ鶍żÆ鍿Æé…x…x…x…x…x…x…x…x…x…xżÆ鍿Æé…xüļį„Óƒƒ„.E’’’’’’’’ €’’’’’’’’’’2¶.ķP„źļgJüļį„Ó€@€¤€’’6‘*€0€)‘€@3„(‘€¬7,žr&*  &#€oclass instagibdotrifle extends supershockrifle; var SniperDot sight; var bool bFeigningDeath; function postbeginplay() { bFeigningDeath=false; enable('tick'); } simulated function Tick(float DeltaTime) { local pawn pawnowner; pawnowner=pawn(owner); if((sight == None))//if there is no dot: { //feigndeath check gave an accessed none. fix it for a later release. 1/22/00 //if(!bFeigningDeath)// if the owner was not feigning death //{ sight = Spawn(class'Snipe.SniperDot'); sight.SetOwner(Owner); //log("dot spawned"); //}//otherwise, if he was feigning //else if(playerpawn(owner).IsInState('FeigningDeath'))//and is still feigning // log("Owner feigning death.");//log it and do nothing. //else //otherwise he's not feigning death anymore so spawn the dot. //{ // bFeigningDeath=false; // log("Owner stopped feigning."); //} }//otherwise there is a dot. //else if(pawnowner.IsA('playerpawn'))//if owner is player controlled //if(playerpawn(owner).IsInState('FeigningDeath'))//and the owner feigns death //{ // sight.Destroy();//destroy the dot, // log("Owner feigning death. Dot destroyed.");//log it, // bFeigningDeath=true;//and set was feigning to true. //} } ø@!/Iز.¦‚w*µ§­¬ ?€H¦Æ«? «?,€Æ«?Ø«?,€H¦®«? «?,@®«?Ø«?,`6žœ$6¢œ=,’6›œ$¬­§/aŃpppXSD.SDÆ«?, ?, D €¬W2žr"*  "€@˜J’’’’’’’’’’’’’’’’’’4qNTŽ˜ÅŌ±„.]Snipe.SniperDotRifle]Botpack.BulletBoxH„5‘©8²«¬«@D#  -€IE//============================================================================= // SniperDot. This is a laser dot aiming device. //============================================================================= class SniperDot expands Actor; var string DotColors[4]; var texture DotColor; var int color; var bool bShotPenalty; simulated function PostBeginPlay() { //dotcolor=dotcolors[color];use for players to choose their dot color } function BeginPlay() { Enable('Tick'); } /*simulated function CheckFire() {fix this later. 1/22/00 local Weapon w; local pawn pawnowner; pawnowner=pawn(owner); w=pawnowner.weapon; if(bShotPenalty && (w.IsInState('firing') || (w.IsA('InstaGibDotRifle') && w.IsInState('AltFiring'))))//if owner is firing, subtract 1 health. pawnowner.health -= 1; }*/ simulated function Tick(float DeltaTime) { local Inventory Rifle; local pawn PawnOwner; PawnOwner=Pawn(Owner); Rifle=PawnOwner.Weapon; if(PawnOwner == None) { Destroy(); //log("No owner. Dot destroyed."); } else if(PawnOwner.Health < 1) { Destroy(); //log("Owner died. Dot destroyed."); } else if(rifle == none) { Destroy(); //log("Owner is not using the Sniper Dot Rifle. Dot destroyed."); } else CalcDot(0.0); //CheckFire(); } simulated function CalcDot( float accuracy ) { //figure out where to put the dot. it's mostly from TraceFire of SniperRifle. local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z; local actor Other; local int AimError; local rotator adjustedaim; local pawn PawnOwner; PawnOwner=Pawn(Owner); GetAxes(PawnOwner.ViewRotation,X,Y,Z); StartTrace = Owner.Location + PawnOwner.Eyeheight * Z; AdjustedAim = PawnOwner.AdjustAim(1000000, StartTrace, 2*AimError, False, False); X = vector(AdjustedAim); EndTrace = StartTrace + 10000 * X; Other = PawnOwner.TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); UpdateDotPos((HitLocation+HitNormal), rotator(HitNormal)); If(Other == none) { //log("dot is on a None and was destroyed."); Destroy(); } else If(Other.IsA('Pawn')) IDpawns(Pawn(Other)); //Else //log("dot is on a "$string(other)$"."); } /*from the identifytarget of Botpack.ChallengeHUD: local actor Other; local vector HitLocation, HitNormal, StartTrace, EndTrace; StartTrace = Owner.Location; StartTrace.Z += PawnOwner.BaseEyeHeight; EndTrace = StartTrace + vector(PawnOwner.ViewRotation) *10000; //1000.0; Other = Trace(HitLocation, HitNormal, EndTrace, StartTrace, true);*/ simulated function UpdateDotPos(vector Loc, rotator Rot) { SetLocation(Loc); SetRotation(Rot); //log("dot's co-ordinates are now "$string(Loc)$" and rotation "$string(Rot)$"."); } simulated function IDpawns(pawn target) { local pawn sniper; sniper=pawn(owner); SetupAIMmsg("Target Name: "$target.playerreplicationinfo.playername$"."); SetupIDmsg("Targeted by "$sniper.playerreplicationinfo.playername); //Log(sniper.playerreplicationinfo.playername$" is targeting "$target.playerreplicationinfo.playername$"."); if(sniper.isa('playerpawn')) { BroadcastLocalizedMessage(class'SnipeAIMmsg', 0, sniper.PlayerReplicationInfo); //log(sniper.playerreplicationinfo.playername$" was notified of his target, "$target.playerreplicationinfo.playername$"."); } //else //log(sniper.playerreplicationinfo.playername$" is a bot and was not notified."); if(target.isa('playerpawn')) { BroadcastLocalizedMessage(class'SnipeIDmsg', 0, target.PlayerReplicationInfo); //log(target.playerreplicationinfo.playername$" was notified of his predator, "$sniper.playerreplicationinfo.playername$"."); } //else //log(target.playerreplicationinfo.playername$" is a bot and was not notified."); } function SetupIDMsg(string MSG) { class'SnipeIDMsg'.default.idMSG = MSG; class'SnipeIDMsg'.default.DrawColor.G=0; class'SnipeIDMsg'.default.DrawColor.R=255; class'SnipeIDMsg'.default.DrawColor.B=0; class'SnipeIDMsg'.SaveConfig(); class'SnipeIDMsg'.static.StaticSaveConfig(); } function SetupAIMMsg(string MSG) { class'SnipeAIMMsg'.default.aimMSG = MSG; class'SnipeAIMMsg'.default.DrawColor.G=255; class'SnipeAIMMsg'.default.DrawColor.R=0; class'SnipeAIMMsg'.default.DrawColor.B=0; class'SnipeAIMMsg'.SaveConfig(); class'SnipeAIMMsg'.static.StaticSaveConfig(); } »OĄ ³; ß u! ”<>%¢m .ƒ “5r *akO– °&ak`r*ak €€”C?ń<.ƒ:r*a a =BDT".ƒå ±!׏ ÆÕ¶ ($tI,$((9×Õ?' +  × P ür *a   a/!" .ƒ  €®}-(u! €”FD÷<.ƒ:r*a a ®ƒ-(u! b!class sniperdotrifle extends sniperrifle; var SniperDot sight; var bool bFeigningDeath; function postbeginplay() { bFeigningDeath=false; enable('tick'); } simulated function Tick(float DeltaTime) { local pawn pawnowner; pawnowner=pawn(owner); if((sight == None))//if there is no dot: { //feigndeath check gave an accessed none. fix it for a later release. 1/22/00 //if(!bFeigningDeath)// if the owner was not feigning death //{ sight = Spawn(class'Snipe.SniperDot'); sight.SetOwner(Owner); //log("dot spawned"); //}//otherwise, if he was feigning //else if(playerpawn(owner).IsInState('FeigningDeath'))//and is still feigning // log("Owner feigning death.");//log it and do nothing. //else //otherwise he's not feigning death anymore so spawn the dot. //{ // bFeigningDeath=false; // log("Owner stopped feigning."); //} }//otherwise there is a dot. //else if(pawnowner.IsA('playerpawn'))//if owner is player controlled //if(playerpawn(owner).IsInState('FeigningDeath'))//and the owner feigns death //{ // sight.Destroy();//destroy the dot, // log("Owner feigning death. Dot destroyed.");//log it, // bFeigningDeath=true;//and set was feigning to true. //} } simulated function PostRender( canvas Canvas ) { local PlayerPawn P; local float Scale; Super(tournamentweapon).PostRender(Canvas); P = PlayerPawn(Owner); if ( (P != None) && (P.DesiredFOV != P.DefaultFOV) ) { Scale = Canvas.ClipX/640; Canvas.SetPos(0.5 * Canvas.ClipX - 128 * Scale, 0.5 * Canvas.ClipY - 128 * Scale ); //commented out the zoom crosshair... /*if ( Level.bHighDetailMode ) Canvas.Style = ERenderStyle.STY_Translucent; else Canvas.Style = ERenderStyle.STY_Normal; Canvas.DrawIcon(Texture'RReticle', Scale);*/ //Leave the zoom amount info Canvas.SetPos(0.5 * Canvas.ClipX + 64 * Scale, 0.5 * Canvas.ClipY + 96 * Scale); Canvas.DrawColor.R = 0; Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Scale = P.DefaultFOV/P.DesiredFOV; Canvas.DrawText("X"$int(Scale)$"."$int(10 * Scale - 10 * int(Scale))); } } €@gclass SnipeIDmsg expands LocalMessagePlus config(snipe); var config localized string idMSG; static function float GetOffset(int Switch, float YL, float ClipY ) { return (Default.YPos/768.0) * ClipY; } static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == None) return ""; return default.idMSG; } n//============================================================================= // The mutator that puts in the SniperDotRifle. It is an arena mutie as of now: 1/19/00 // In the future, it will include accuracy promoters and anticamping measures... //============================================================================= class Snipe extends arena; Pŗhclass SnipeAIMmsg expands LocalMessagePlus config(snipe); var config localized string aimMSG; static function float GetOffset(int Switch, float YL, float ClipY ) { return (Default.YPos/768.0) * ClipY; } static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject ) { if (RelatedPRI_1 == None) return ""; return default.aimMSG; } t//============================================================================= // The mutator that puts in the InstagibDotRifle. It is an arena mutie as of now: 1/19/00 //In the future, it will include accuracy promoters and anticamping measures... //============================================================================= class InstaSnipe extends arena; A df a a+ K@:N l) Ī .ƒ ppTarget Name: ™Ŗ. pTargeted by  ™Ŗž a/! % ™Ģa/! %™ ˜M'’’’’’’’’’’’’’’’’’’R(“7é˜ÅŌ±„/]Snipe.InstagibDotRifle]Botpack.SuperShockCoreU€Q' ‚t '6¢ –$6ž –=,’6› –$ b £ %€T Œ@t 6¢ –=,’6ž –$6› –$ b £ ©S ²«¬«@D%  SSpž’’’"p’’’’jpž’’’opž’’’Lp’’’’pp’’’’<p’’’’kSp’’’’:p’’’’mpž’’’pž’’’4<ś’’’DCü’’’%pž’’’GCü’’’Ap’’’’_p’’’’`p’’’’tmņ’’’,pö’’’hpö’’’c<ż’’’Gpö’’’a>š’’’Wmū’’’,pž’’’B>š’’’Xp’’’’l:ū’’’\kś’’’>š’’’Ykü’’’]Cü’’’wpö’’’fkū’’’5:ó’’’6:ū’’’Oké’’’_ļ’’’@:ņ’’’kņ’’’:ó’’’7kć’’’mś’’’3tż’’’1mż’’’Ukć’’’!kś’’’ <ż’’’Bpž’’’n:ż’’’[Sö’’’bkę’’’!#É’’’ipž’’’#kś’’’—)yW—&rPˆ/oB!‹/K O!†0[ [!ˆ/Hv*ˆAPC+ŒA?P+ˆQz]+ˆAJj+ˆ=Pw+ŒA|D,ˆqQ,ŒAQ^,ˆqk,ˆQyx,“r E-ŒAdQ-ŒAI^-ˆ=gk-ŒAVx-ŒA2E.“s R.šj^.ˆ@PH2Ÿx U2Ÿx a2ˆEPm2„cz2“V9 ]4ŒN^i4ŒN{v4ŒARC5ˆ1EP5‹7O ]5•A; i5‹WO u5ˆ+EA6“T9 N6ˆ+FZ6ˆ+=g6‹7e t6‰¬)@7•+T i7‹7M u7”N4zA8‰ø!u{K‹We pP‰¬*|P•1T fQ“+e rQ˜O~Qˆ1FMTˆ1=[T‰©)hT•7T QU”N4TE]UŸv qš‰»}š‰³ Y›‰”ex›‹=8 ]‹@8 i‰”>u‰Asž‹AZ t”‰®$@¢‹E8 d¢‰”?p¢‰®$o£”N4m!S¤“1e @Ę”N4rLĘ”4N4y~ĶˆuwÓ”N4sEŌ”RN4xŪ‰ &wį“]ā•% jā‰ cvā˜'WYå•WTpē‰ a}ē‹WM ^é‰ aj鉩*KėThis is Snipe v75 To use, just install it to your UnrealTournament folder. Then, to use it in the game, start a practice match or mulitplayer game and select either Snipe or Instagib Snipe from the mutators window. This is a client side mod. This means that the player must have it installed to use it on a server (and vice versa). Features include: -Sniper Arena and Instagib sniper dot playmodes. -Long range target identification. -Messages that tell who is targeting you. for future versions, there will probably be accuracy encouraging features to toggle, such as losing a set small amount of health for each shot fired and gaining twice that amount for each hit. Also planned for upcoming versions is an anti-camping feature similar to the Anti-Camper mod by Beppo(only yer not declared a camper unless u actually frag people, unlike in Beppo's version). bug report: if you feign death your dot goes bye-bye, and doesn't come back till you die and respawn. But I don't advise feigning death, as players can now identify targets from far away, so yer basically a sitting duck. In any case, I will fix it for the next version. Special thanks go to: For their mods (sniper mod, AntiCamper, and External Sniper, respectively) and inspiration: Ca Beppo MeltDown Necron_99 -For coding support, and being a good sport about it =) MeltDown -he helped me fix those cursed accessed nones =) DJKool -For bugging me =) for the idea for health reduction per shot: jgrace Other mods by me QuadMod UTPool SizeDoesMatter King Of The Arena Frenzy Headshot Arena Dodger questions, comments, bug reports?? contact me ian69@home.net icq 45383606 http://www.planetunreal.com/thelaboratory/ 1/22/00 Legal Crap. This mod is in no way affiliated with Epic Megagames or GT Interactive. You MAY NOT distibute it, neither for profit or for free, by any physical medium (ie CD-ROM) without my explicit written permission. You may use the code in your mods and distribute this mod via any electronic medium (ie Internet, FTP, etc.) without my permission (BUT DON'T USE THE CODE TILL THE FINAL VERSION IS RELEASED!!! AND THIS RELEASE ISN'T IT!!!).System\Manifest.ini…System\Manifest.int…;System\Snipe.intĄśSystem\Snipe.uŗBHelp\Snipev75.txtĀG’£ÅćŸTPQ!93…