[Setup] Product=Head Shot Bonus Version=120 Archive=HeadShotBonus_v120.umod SrcPath=. MasterPath=.. Group=SetupGroup Group=umodINIGroup Group=HeadShotBonusGroup [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=530,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=321,Flags=3) [umodINIGroup] Ini=System\UnrealTournament.ini,Engine.GameEngine.ServerPackages=HeadShotBonus Ini=System\Unreal.ini,Engine.GameEngine.ServerPackages=HeadShotBonus [HeadShotBonusGroup] File=(Src=System\HeadShotBonus.u,Size=13024) File=(Src=System\HeadShotBonus.int,Size=271) File=(Src=Help\HeadShotBonus.html,Size=9700) [Setup] LocalProduct=Head Shot Bonus ReadMe=Help\HeadShotBonus.html SetupWindowTitle=Head Shot Bonus Setup AutoplayWindowTitle=Head Shot Bonus Options ProductURL=http://www.planetjeh.com/mutators/ VersionURL=http://www.planetjeh.com/mutators/ Developer=Jon 'Jeh' MacLellan DeveloperURL=http://www.planetjeh.com/ *DpH)v0<.A Q@P/ ')pNoneHeadShotBonusMutatorTakeDamageSystem PlayerPawnRegisterDamageMutatorCoreEngine DecapitatedBotPostBeginPlay TextBufferPackageObject FunctionClassVectorStructActorStructPropertyBoolProperty LevelInfoMutatorPawn DamageTypeObjectPropertyNamePropertyHealth IntPropertyactualDamage Momentum HitLocationGameNextDamageMutatorVictiminstigatedBy GameInfo InitializedLevelNoneCreateControlSetTextSetFontBroadcastMessageUWindowCreatedCheckReplacement WindowTitle HeadShotBonusDialogClientWindowHeadShotBonusFramedWindowLastManStanding HealthVialHeadShotBonusMenuItem MenuHelpExecute MenuCaption ClientClassMedBox HealthPackPreBeginPlayNotifyTLastmanStandingUMenu PlayerNameStaticSaveConfigUWindowDialogClientWindowPlayerReplicationInfoCOtherScore SniperRifleUWindowPulldownMenuItemUWindowFramedWindowDefaultWeaponCreateWindowFloatPropertyAlignWinLeft WinHeight bChecked ReturnValueRoot StrPropertyUWindowRootWindowUWindowCheckboxUWindowDialogControlUMenuModMenuItembSuperRelevant MenuItemBotpackE ScriptTextUWindowWindowOwnerBytePropertySetSizeUWindowPulldownMenu WinWidthbTakeOutHealthPickupsbSniperRifleAsDefaultWeaponbMaxOutHealth bDoubleFragbDisplayKillMsgbWorkOutPlayingModeMaximumHealthSniperRifleCheckRemoveHealth MaxHealth FragsWorth2KillMsgWinTopClassProperty'''''''''''''''' !+. - -' ( !1p~NY~NY~NYoooooo.;o.;o.;o.;o.;o.;1p Ǣʙk Ǣʙk Ǣʙk''+){-',(-(,dw!<a/! a/!, -'-'?&#-(#-'#?%?&-' -' -'+just Sniped for 2 Frags!-' -(+just Took Off Someones Head!<-( -' -'+just Sniped for 2 Lives!tw*$y  ''' ''''''''@''''@''''@'' ''@''@'''''!12>uMo o ,8/]Head Shot Bonus Options'&09ؓu~ !|.Xچ ! !|.Xچ ! !|.Xچ ! !|.Xچ ! !|.Xچ !|.Xڄ|.Xڄ|.Xڄ|.Xچ !|.Xڄ|.Xڄ|.Xڄ|.Xچ !|.Xڄ|.Xڄ|.Xڄ|.Xچ !|.Xڄ|.Xڄ|.Xڄ|.Xچ !|.Xڄ|.Xڄ|.Xڄ|.Xچ !,''Z///============================================================================= // HeadShotBonusDialogClientWindow. //============================================================================= class HeadShotBonusDialogClientWindow expands UWindowDialogClientWindow; var UWindowCheckBox SniperRifleCheck, RemoveHealth, MaxHealth, FragsWorth2, KillMsg; function Created() { Super.Created(); SniperRifleCheck = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 10, 10, 200, 1)); SniperRifleCheck.SetText("Make Sniper Rifle Default Weapon?"); SniperRifleCheck.SetFont(F_Normal); SniperRifleCheck.Align = TA_Left; SniperRifleCheck.bChecked = class'HeadShotBonus.HeadShotBonus'.default.bSniperRifleAsDefaultWeapon; FragsWorth2 = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 10, 55, 200, 1)); FragsWorth2.SetText("Head Shots Worth 2 Frags?"); FragsWorth2.SetFont(F_Normal); FragsWorth2.Align = TA_Left; FragsWorth2.bChecked = class'HeadShotBonus.HeadShotBonus'.default.bDoubleFrag; RemoveHealth = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 10, 25, 200, 1)); RemoveHealth.SetText("Remove All Health from Maps?"); RemoveHealth.SetFont(F_Normal); RemoveHealth.Align = TA_Left; RemoveHealth.bChecked = class'HeadShotBonus.HeadShotBonus'.default.bTakeOutHealthPickups; MaxHealth = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 10, 40, 200, 1)); MaxHealth.SetText("Head Shots Can Take Health Past 100?"); MaxHealth.SetFont(F_Normal); MaxHealth.Align = TA_Left; MaxHealth.bChecked = class'HeadShotBonus.HeadShotBonus'.default.bMaxOutHealth; KillMsg = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 10, 70, 200, 1)); KillMsg.SetText("Head Shot Msgs in Msg Window?"); KillMsg.SetFont(F_Normal); KillMsg.Align = TA_Left; KillMsg.bChecked = class'HeadShotBonus.HeadShotBonus'.default.bDisplayKillMsg; } function Notify(UWindowDialogControl C, byte E) { switch(E) { case DE_Change: switch(C) { case SniperRifleCheck: class'HeadShotBonus.HeadShotBonus'.default.bSniperRifleAsDefaultWeapon = SniperRifleCheck.bChecked; class'HeadShotBonus.HeadShotBonus'.static.StaticSaveConfig(); break; case RemoveHealth: class'HeadShotBonus.HeadShotBonus'.default.bTakeOutHealthPickups = RemoveHealth.bChecked; class'HeadShotBonus.HeadShotBonus'.static.StaticSaveConfig(); break; case MaxHealth: class'HeadShotBonus.HeadShotBonus'.default.bMaxOutHealth = MaxHealth.bChecked; class'HeadShotBonus.HeadShotBonus'.static.StaticSaveConfig(); break; case FragsWorth2: class'HeadShotBonus.HeadShotBonus'.default.bDoubleFrag = FragsWorth2.bChecked; class'HeadShotBonus.HeadShotBonus'.static.StaticSaveConfig(); break; case KillMsg: class'HeadShotBonus.HeadShotBonus'.default.bDisplayKillMsg = KillMsg.bChecked; class'HeadShotBonus.HeadShotBonus'.static.StaticSaveConfig(); break; } break; } } '- X\CB?,?, 'V-//============================================================================= // HeadShotBonus // Version 1.2 //============================================================================= class HeadShotBonus expands Mutator; var bool Initialized; var config bool bTakeOutHealthPickups; var config bool bSniperRifleAsDefaultWeapon; var config bool bMaxOutHealth; var config bool bDoubleFrag; var config bool bDisplayKillMsg; var bool bWorkOutPlayingMode; var int MaximumHealth; function PreBeginPlay() { if ( bSniperRifleAsDefaultWeapon == True ) { DefaultWeapon=Class'SniperRifle'; } bWorkOutPlayingMode = True; if ( Level.Game.IsA('LastManStanding') || Level.Game.IsA('TLastmanStanding') ) { bWorkOutPlayingMode = False; } } function PostBeginPlay() { if (Initialized) return; Initialized = True; Level.Game.RegisterDamageMutator( Self ); } function MutatorTakeDamage( out int ActualDamage, Pawn Victim, Pawn InstigatedBy, out Vector HitLocation, out Vector Momentum, name DamageType) { if ( bMaxOutHealth == True ) { MaximumHealth = 199; } if ( bMaxOutHealth == False ) { MaximumHealth = 100; } if ( DamageType == 'Decapitated' ) { if (InstigatedBy.IsA('Bot') || InstigatedBy.IsA('PlayerPawn')) { InstigatedBy.Health += 10; if (InstigatedBy.Health > MaximumHealth) InstigatedBy.Health = MaximumHealth; if ( bWorkOutPlayingMode == True ) { if ( bDoubleFrag == True ) { InstigatedBy.PlayerReplicationInfo.Score +=1; } } if ( bWorkOutPlayingMode == False ) { if ( bDoubleFrag == True ) { if (Victim.PlayerReplicationInfo.Score > 0) Victim.PlayerReplicationInfo.Score -= 1; } } if ( bDisplayKillMsg == True && bDoubleFrag == True && bWorkOutPlayingMode == True) { BroadcastMessage( InstigatedBy.PlayerReplicationInfo.PlayerName@"just Sniped for 2 Frags!" ); } if ( bDisplayKillMsg == True && bDoubleFrag == False) { BroadcastMessage( InstigatedBy.PlayerReplicationInfo.PlayerName@"just Took Off Someones Head!" ); } if ( bWorkOutPlayingMode == False && bDisplayKillMsg == True && bDoubleFrag == True ) { BroadcastMessage( InstigatedBy.PlayerReplicationInfo.PlayerName@"just Sniped for 2 Lives!" ); } } if ( NextDamageMutator != None ) NextDamageMutator.MutatorTakeDamage( ActualDamage, Victim, InstigatedBy, HitLocation, Momentum, DamageType ); } else return; } function bool CheckReplacement(Actor Other, out byte bSuperRelevant) { if ( bTakeOutHealthPickups == True ) { if ( Other.IsA('HealthPack') || Other.IsA('HealthVial') || Other.IsA('MedBox') ) return false; } return true; } '"''d//============================================================================= // HeadShotBonusFramedWindow. //============================================================================= class HeadShotBonusFramedWindow expands UWindowFramedWindow; function Created() { Super.Created(); SetSize(220, 115); WinLeft = (Root.WinWidth - WinWidth) / 2; WinTop = (Root.WinHeight - WinHeight) / 2; } '''p//============================================================================= // HeadShotBonusMenuItem. //============================================================================= class HeadShotBonusMenuItem expands UMenuModMenuItem; function Execute() { MenuItem.Owner.Root.CreateWindow(class'HeadShotBonusFramedWindow', 10, 10, 200, 100); } #)42$%xͷ;aGV撠o >,7]&Head Shot Bonus Options5]%$Set up the Head Shot Bonus Mutator!''-.(  A AHC?))Make Sniper Rifle Default Weapon?*%$- -.(  A\BHC?!)Head Shots Worth 2 Frags?*%$- -.(  AAHC?$)Remove All Health from Maps?*%$- -.(  A BHC?,)Head Shots Can Take Health Past 100?*%$- - .(  ABHC? %)Head Shot Msgs in Msg Window? *% $ - - '%<4; 6$ L -- 3  -- 3  -- 3  -- 3 0  - - 3 9  ';e-' -'ca/!2a/!=-( ' .i RN-'Na/!:a/!3a/!9(' '6 <  A AHCB  ,  T\BOUB@^L > HV$KE R?&ASQKa^KNG!--J.`_Kn]<oI KM;X6 YF #v % C  O  [ g "t A 8N HF!' `N&mn-l{-kH.jU.ib. e o. g {. f G/ h S/ d _/(Dk/ b x/ c D0&ZP0&C]01Fj00D p2[4e/t;-SYk [4a-ll(WM[4oZ(P I$[4{U4vP-J F<eP ;]u .VR$6Fh[Public] Object=(Name=HeadShotBonus.HeadShotBonus,Class=Class,MetaClass=Engine.Mutator,Description="Head Shot Bonus v1.2, You Get Bonus Health for Pulling Off Head Shots!") Object=(Name=HeadShotBonus.HeadShotBonusMenuItem,Class=Class,MetaClass=UMenu.UMenuModMenuItem) Head Shot Bonus v1.2 Readme & FAQ
-=[ 'Head Shot Bonus' Mutator v1.20]=-
-= Rewarding Snipers for Their "Head Shot" Skills =-
Bug Reports & Stuff: jeh@planetjeh.com

What Does This Do?

This is a small Mutator for Unreal Tournament that rewards those who have their "Head Shot" skills down. As well as awarding the player an extra 10 points of health for every "Head Shot" they pull off, this mutator has other options which can further increase the intensity of any game :) See the Usage section below for all features.

This Mutator also offers a player an extra way to get health if they can't find any Health packs on the map. Low on Health? Pull off a Head Shot and live a little longer :) lol.

Back To Top

Installation

Point the .umod Installer to your \UnrealTournament\ directory and let the installer do it's thing.

File Package:

  • HeadShotBonus.u (Gets put in your UnrealTournament\System\ directory)
  • HeadShotBonus.int (Gets put in your UnrealTournament\System\ directory)
  • HeadShotBonus.txt (Gets put in your UnrealTournament\Help\ directory)
  • UnrealTournament.ini
  • Unreal.ini
The two .ini files will NOT overwrite your existing files. They only contain the required "ServerPackages" lines to enable this Mutator for online play. The .umod Installer will add these lines to your existing UnrealTournament.ini and Unreal.ini files.

Back To Top

Requirements

This Mutator has been tested and works with Unreal Tournament v400. It should theoretically work with any Unreal Engine game lets you remove someone's head with the 'Decapitated' DamageType.

If you find this does not work with any Unreal/UT engine powered game that has this capability then please email jeh@planetjeh.com with the details :)

Back To Top

Usage: How Do I Use and Configure This?

Head Shot Bonus, by default, will credit you with 10 points of extra health for every "Head Shot" you pull off. This works in all modes of play! In order to further intensify the matches, I've implemented a few options. All the following options are DISABLED by default. In order to enable them you have to click the "Mod" tab on the UT Desktop when UT first loads. Select the "Head Shot Bonus Options" selection and a menu box will appear. Put a check in the box next to the option you want to enable:

  • Make Sniper Rifle Default Weapon?:
    As the title suggests, your Impact Hammer is replaced with a Sniper Rifle as your starting weapon! You're only given 8 bullets though, so be careful and don't waste these if the map doesn't actually contain any Sniper Rifles or Sniper Rifle ammo by default.

  • Remove All Health from Maps?:
    For hardcore Snipers :) Will remove every single piece of health from the maps. All Health boxes, vials and Keg o' Health's are gone. The only way to get health is to snipe those heads :)

  • Head Shot Can Take Health Past 100?:
    By default the 10 points of health rewarded increase your health up to a maximum of 100 points, just like picking up a Health Pack does. If this option is enabled, that maximum will raise to 199 health. Don't worry though. This option only affects the Head Shot bonus given out by this Mutator so all the Health Vials and Keg o' Health's will still give out the same amount of health no matter what this is set to.

  • Head Shots Worth 2 Frags?:
    Pulling off a head shot will award you an extra frag on top of your default reward :) So every time you pull off a head shot you get 2 frag points instead of 1! In Last Man Standing however, this option will remove 2 "Lives" from your opponent if you kill them via a Decapitation :)

  • Head Shot Msgs in Msg Window?:
    I added some custom Head Shot messages that display in the Message Window when anyone pulls off a Head Shot! It's disabled by default as most people don't like this sort of thing, but hey, I'm targetting everyone here :)
Back To Top

Future Enhancements

Yes, I do plan on expanding this Mutator with a few different options! :)

  • On screen Head Shot count on the HUD
  • Full Compatibility for Team Frag Count's in Team games
  • Possibly more randomized kill messages
And anything else I can think of :)

Back To Top

Known Issues

  • Head Shot kill messages, if enabled, may be displayed prematurely. If you hit the head area but the opponent doesn't die, you may sometimes get a Kill message anyway. This happens with UT's original v400 code as well in non-Mutated play so it's not me :) This only happens rarely though.
  • In Team DM Games or any team mode that has a "Team Frag Score", when using the "2 Frags for a Head Shot" option, the "Team Frag Score" is not credited with 2 kills even if the player is. As a result, your extra frags won't count towards the team total. I'm working on getting this functional. See the "Future Enhancements" section above.
Back To Top

Version History

v1.20: Second Public Release

  • Added an Options Menu to the UT GUI for setting the options. You should now see a "Mod" tab on the main UT Desktop!
  • Fixed Last Man Standing bug when using the "2 Frags for a Head Shot" option. Using this option when playing Last Man Standing will now remove 2 "Lives" from your opponent if you pull off a Head Shot :)
  • Added functionality for Servers to auto-send this Mutator to any clients joining that do not have the Mutator installed.
  • Added functionality for users of older versions of this Mutator to play on servers running the newer version! Upgrade to get all these new options though! :)
  • Implemented Option: Custom Head Shot kill messages in Message Window
  • As this Readme file got longer and longer, I decided to "HTML" it.
v1.11: Internal Test Version
  • Implemented Option: Be awarded 2 Frags for each Head Shot(!)
v1.10: Internal Test Version
  • Implemented Option: Set Sniper Rifle as Default Weapon
  • Implemented Option: Remove all Health from the Map
  • Implemented Option: Head Shot health awards can either take you to 100 or past that to 199. Health Vials and the Keg O' Health will take you to 199 whatever you set this option to. This option only affects whether the 10 health points you're awarded for your Head Shots take you to or past 100.
  • Fixed a weird bug that sometimes caused the Mutator to require the Akimbo Arena mutator(!). Weirdness :)
v1.00: Initial Release

Back To Top

Mutator Base

I admit I'm no programmer. While this Mutator was relatively simple to code (once I knew what I was doing), I used Jack 'Mek' Porters example "Vampire" Mutator code that is contained in Epic's "Mod Authoring for UT" doc on the Tech Page initially for v1.00. I've just built on the code ever since :)

Great Reference:
http://unreal.epicgames.com/UTMods.html

It's my first Mutator for UT and I'm still slowly learning UnrealScript :) We all have to start somewhere :)

Back To Top

Special Thanks

  • My wife 'LadyICE' for answering all the lame programming questions I had. :) She's much more experienced in programming than I :)
  • Jack 'Mek' Porter (although he didn't know it) for his example "Vampire" Mutator and for contributing to the Mod Authoring Doc on the Tech Page.
  • Brandon 'GreenMarine' Reinhart & Everyone in Gameslink #UnrealScript for answering all my questions and giving me invaluable tips & advice with UnrealScript coding :) irc.gameslink.net
  • The UT Bots for allowing(!) me to remove their heads time after time to test this Mutator. Lol. :)
Back To Top

Bug Reports: jeh@planetjeh.com

System\Manifest.iniSystem\Manifest.intASystem\HeadShotBonus.u2System\HeadShotBonus.int6Help\HeadShotBonus.html7%㟲]x^