--------------DESCRIPTION--------------
"Modern Netcode for UT99 (AKA a bunch of hacks)" ©
FragNewNet is primarily intended for classic game modes (DM, TDM, LMS, CTF, AS, DOM). 
Inside the package there are mutators that modify these game modes (TeamLMS, ComboGib, Instagib, etc)
FragNewNet is based on the UltimateNewNet Beta 1e by Deepu http://forum.ultimateut.tk/viewtopic.php?f=15&t=987 
UltimateNewNet was most likely based on the original NewNet code written by TimTim https://ut99.org/viewtopic.php?t=5640
FragNewNet contains IG + code https://github.com/Deaod/InstaGibPlus


--------------INSTALLATION NEWNET FragNewNet--------------

Copy the fnnXX.u (XX - version FragNewNet) to System folder game.

UnrealTournament.ini:
[Engine.GameEngine]
ServerPackages=fnnXX
ServerActors=fnnXX.NewNetServer (or as a mutator: fnnXX.NewNetServer)

After starting the server, the FragNewNet.ini file with the FragNewNet settings is created in the System folder game.
Description of settings in the FragNewNet.ini file:
The default damage values ​​are the same as in the original game. To get the real damage value, multiply the NewNet value by 1.5
[fnnXX.UTPure]
HammerDamagePri=60.000000
HammerDamageSec=20.000000
HammerDamageSelfPri=36.000000
HammerDamageSelfSec=24.000000
EnforcerDamage=17.000000 (Hitscan damage)
BioDamagePri=40.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
BioDamageSec=75.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
BioDamageCharging=150.000000 (Damage when fired with a not fully charged BioRifle)
BioDamageCharged=300.000000 (Damage when fired with a fully charged BioRifle)
ShockDamagePri=40.000000 (Hitscan damage)
ShockDamageSec=55.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
ShockDamageCombo=165.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
PulseDamagePri=20.000000 (Hitscan damage)
PulseDamageSec=4.000000 (Hitscan damage)
RipperDamagePri=30.000000 (Hitscan damage)
RipperDamageSec=34.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
MinigunDamagePri=9.000000 (Hitscan damage)
MinigunDamageSec=14.000000 (Hitscan damage)
FlakDamagePri=16.000000 (Damage from one chunk. One shot contains 8 chunk)
FlakDamageSec=70.000000 (Projectile Direct Hit Damage. The projectile, upon hitting the surface, explodes and releases 8 chunk)
RocketDamagePri=75.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
RocketDamageSec=80.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
SniperDamagePri=40.000000 (Hitscan damage)
SniperHeadshotDamage=100.000000 (Hitscan damage)
SniperSpeed=1.000000 (Reload speed)
H4xDamagePri=45.000000 (Hitscan damage)
H4xHeadshotDamage=100.000000 (Hitscan damage)
H4xSpeed=1.000000 (Reload speed)
HookDamageMode0=1.000000 (Damage for setting HookKillMode=0)
HookDamageMode1=13.000000 (Damage for setting HookKillMode=1)
ComboGibDamagePri=700.000000 (Hitscan damage)
ComboGibDamageSec=700.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
ComboGibDamageCombo=700.000000 (Deals damage in a radius. The further from the center of the body, the less damage)
var localized config float RocketArenaDamagePri;
var localized config float RocketArenaDamageSec;
NNAnnouncer=True (Whether to automatically add an announcer for multi-kills, or not)
NNAnnouncerSpecs=True (Whether to automatically add a multi-kill announcer for spectators or not)
bCTFFlagInfo=True (True - displays the flag carrier name and countdown time before the return of the flag)
bAllowCenterView=False (Allow use of CenterView)
CenterViewDelay=1.000000 (How long before allowing use of CenterView again)
bAllowBehindView=True (Whether to allow 3rd Person perspective or not)
TrackFOV=0 (Track the FOV cheats [0 = no, 1 = very strict, no zooming with sniper, 2 = looser, zooming with sniper possible])
bAllowMultiWeapon=False (if true to allow the multi-weapon bug to be used)
bFastTeams=True (Allow quick teams changes)
bUseClickboard=True (Use clickboard in Tournament Mode or not)
MinClientRate=12000 (Minimum allowed client rate)
MaxClientRate=25000 (Maximum allowed client rate)
bAdvancedTeamSay=True (Whether to allow the use of advanced TeamSay or not.
Advanced TeamSay allows showing game-information in your chat messages, by replacing the following with the corresponding information:
%H ➜ " Health", %h ➜ "%", %W ➜ "" or "Empty hands", %A ➜ "Shieldbelt and Armor" or " Armor", %a ➜ "SB A" or "A", %P ➜ Current CTF objective)
ForceSettingsLevel=2 (0 = and below ➜ never, 1 = once after PostNetBeginPlay, 2 = in addition, every time a new object is spawned,
3 = and above ➜ in addition, once every 5000 server-ticks on average)
bWarmup=True (Enable or disable warmup. bTournament only)
bCoaches=False (Enable or disable coaching. bTournament only)
bAutoPause=False (Enable or disable autopause. bTournament only)
ForceModels=1 (0 = Disallow, 1 = Client Selectable, 2 = Forced)
ImprovedHUD=1 (0 = Disabled, 1 = Show boots, Clock, 2 = In addition, show enhanced team info)
bDelayedPickupSpawn=False (Enable or disable delayed first pickup spawn)
bTellSpectators=False (Enable or disable telling spectators of reason for kicks)
bBrightPlayer=False (This function makes the player to look brighter, it does not change the parameters of the light (brightness or such), 
only makes him immune to light, practically becomes visible all the time, including in dark places)
PlayerPacks[0]= (Config list of supported player packs)
PlayerPacks[1]=
PlayerPacks[2]=
PlayerPacks[3]=
DefaultHitSound=2
DefaultTeamHitSound=3
bForceDefaultHitSounds=False
TeleRadius=210 (Radius within which to telefrag enemies using translocator)
ThrowVelocity=750 (How far a player can throw weapons)
bForceDemo=False (Forces clients to do demos)
bRestrictTrading=True (If True, the server tries to determine who shot first,
and prevents shots from players that are already dead and fired their last shot after their killer by in-game time from causing a trade.
If False, any shot made while alive on your client counts.)
MaxTradeTimeMargin=0.100000 (Maximum time after death (on server) that players can still fire their weapons. Only applies if bRestrictTrading is True)
TradePingMargin=0.500000 (Trade uncertainty relative to shooters ping. Reasonable values range from 0 to 1. Higher values lead to more trades)
MinNetUpdateRate=60.000000 (Minimum frequency of client updates for server)
MaxNetUpdateRate=200.000000 (Maximum frequency of client updates for server)
bEnablePingCompensatedSpawn=True (True - players will not become visible to others until they can actually move on their end.
False - players will stand on their spawn-point visible to other players without being able to move for the duration of their ping.
Set False if you are using JailBreak game mode on your server.)


--------------GAME MODES AND MUTATORS--------------

-------Last Man Standing-------

MapVote.ini
CustomGameConfig[1]=(bEnabled=True,GameClass="fnnXX.LastManStanding",NewPrefix="LMS",Mutators="",Settings="")

UnrealTournament.ini
[fnnXX.LastManStanding]
bHighDetailGhosts=False
bDynamicBots=False
NumberDynamicBots=0
StartWeapon=
FragLimit=20
TimeLimit=13
bMultiWeaponStay=True
bForceRespawn=False
bUseTranslocator=False
MaxCommanders=0
bNoMonsters=True
bHumansOnly=False
bCoopWeaponMode=False
bClassicDeathMessages=False
MinFOV=80.000000
MaxFOV=130.000000
MaxNameChanges=0


-------Last Team Standing-------

MapVote.ini
CustomGameConfig[1]=(bEnabled=True,GameClass="fnnXX.TLastManStanding",NewPrefix="TeamLMS",Mutators="",Settings="MinPlayers=2")

UnrealTournament.ini
[fnnXX.TLastManStanding]
bHighDetailGhosts=False
StartWeapon=
bNoTeamChanges=False
FriendlyFireScale=1.000000 (do not change this value, change this value in mapvote)
MaxTeams=2
GoalTeamScore=0.000000
MaxTeamSize=16
FragLimit=0
TimeLimit=15
bMultiWeaponStay=True
bForceRespawn=True
bUseTranslocator=False
MaxCommanders=0
bNoMonsters=True
bHumansOnly=False
bCoopWeaponMode=False
bClassicDeathMessages=False
MinFOV=80.000000
MaxFOV=130.000000
MaxNameChanges=0

-------InstaGib-------
Mutator: fnnXX.NewNetIG

-------Zooming InstaGib-------
Mutator: fnnXX.NewNetZIG

-------Sniper Arena-------
Mutator: fnnXX.NewNetSA

-------Shock Domination-------
Mutator: fnnXX.NewNetSDOM

-------Rocket Arena-------
Mutator: fnnXX.NewNetRA

FragNewNet.ini
[fnnXX.NewNetCG]
bAllowJumpBoots=True
bAllowHealthPickups=True
bAllowArmorItems=True
bAllowNoSmoke=True (True - removes smoke from rockets)

-------ComboGib-------
Mutator: fnnXX.NewNetCG

FragNewNet.ini
[fnnXX.NewNetCG]
EnableNoSpam=False (True - to enable no spam options)
FireRateScale=0.500000 (Adjust primary firing speed)
MinSecBetweenBalls=0.700000 (Adjust this setting when enabling "AntiSpamMethod=3")
MaxShockBalls=3 (Max shock ball for shock secondary fire when enabling "AntiSpamMethod=2 or AntiSpamMethod=1")
AntiSpamMethod=1
bAllowJumpBoots=True
bAllowScubaGear=False
bAllowFlashlight=False
bAllowSuits=False
bAllowHealthPickups=False
bAllowArmorItems=False

Methods
AntiSpamMethod=1 (Limit shock balls with adjusting "MaxShockBalls=*" value)
AntiSpamMethod=2 (Remove old fired shock ball if more than this "MaxShockBalls=*" value)
AntiSpamMethod=2 (Timed shock ball fire with adjusting "MinSecBetweenBalls=*" value)

-------Grapple-------
Mutator: fnnXX.GrapMut

FragNewNet.ini
[fnnXX.UTPure]
HookDamageMode0=1.000000 (Damage for setting HookKillMode=0)
HookDamageMode1=13.000000 (Damage for setting HookKillMode=1)

[fnnXX.Grappling]
HookSpeed=2700
HookKillMode=1 (0 - be attracted by the grapple to the enemy and inflict constant damage,
1 - damaging an enemy when firing a grapple, 2 - disable kill mode)
Range=5000.000000
FlySpeed=1.000000
FFlySpeed=1.000000
SpeedFactor=2.000000
bFlagFly=False
bFlagNoAttach=True
bFlagTeamTravel=False
bDropOnfire=True

-------h4x Sniper-------
Mutator: fnnXX.h4x_Mut
Mutator: fnnXX.XlocMut (Translocator for large maps)
Mutator: fnnXX.ND_Mut  (Bind key for grapple)

FragNewNet.ini
[fnnXX.UTPure]
H4xDamagePri=45.000000 (To get the real damage value, multiply the NewNet value by 1.5)
H4xHeadshotDamage=100.000000
H4xSpeed=1.000000

[fnnXX.XlocToss]
XlocTossForce=830 (Changing the distance the translocator can be thrown)

[fnnXX.ND_Mut]
MessageTimer=30
bNotifyKeyBind=True

-------All weapons-------
Loads the weapon to the player's inventory at the start of the game.
Mutator: fnnXX.GiveWeapons

FragNewNet.ini
[fnnXX.GiveWeapons]
bGiveAllWeapons=True (True - the player player will get all weapons, False - the player will get default weapon )
bGiveRedeemer=False (True - the player will get Redeemer)
bGiveTranslocator=False (True - the player will get Translocator)

-------All armors-------
Adds armor to the player's inventory at the start of the game.
Mutator: fnnXX.GiveArmors

FragNewNet.ini
[fnnXX.GiveArmors]
bGiveShieldBelt=True
bGiveArmor=True
bGivePads=True
bGiveBigKegHealth=True

-------Items on the map-------
Allows to remove items from the map.
Mutator: fnnXX.NoItemsMap

FragNewNet.ini
[fnnXX.NoItemsMap]
bNoAllWeapons=True
bNoRedeemer=True
bNoAmmo=True
bNoInvisibility=True
bNoAmplifier=True
bNoShieldbelt=True
bNoArmor=True
bNoThighPads=True
bNoBigKegOHealth=True
bNoMedBoxes=True
bNoVials=True
bNoJumpBoots=True

-------NoDamageBoost-------
Mutator: fnnXX.NoDamageBoost

FragNewNet.ini
[fnnXX.NoDamageBoost]
bNoSelfDamage=True (True - the player will not take damage from his weapon)
bNoTeamBoost=True

-------TeleportToPoint-------
Allows, using commands to teleport the player to the designated place.
Mutator: fnnXX.TeleportToPoint

FragNewNet.ini
[fnnXX.TeleportToPoint]
bCmdInform=True (True - the players will be told the command to print all the available commands.)
CmdFormatting=! (Symbol ! to be put at the start of the message to be interpreted as a command.)
bCmdFormattingMutate=True (True - cmdFormatting must be put when using "mutate" command.)
MaxCPs=3 (Max amount of CPs that can be spawned. When reached, CPs will start to recycle.)
bTeleportEffect=False (True - the GameType's teleport effect will be spawned at target location when teleporting.)

Commands:
!cmd - Displays this thing
!spawn - Teleports you to a PlayerStart
!cp - Creates a checkpoint
!prevcp - Moves your CP to a previous location
!nocp - Deletes your checkpoint
!gocp - Teleports you to your checkpoint
!go <player_name> - Teleports you to the first player found with a similar player_name
!goview - Teleports you to the viewing player

-------Double Jump-------
Mutator: fnnXX.DoubleJump

FragNewNet.ini
[fnnXX.DoubleJump]
MaxJumps=2 (Changing number of jumps, no more than 10)
JumpHeight=1.200000
bJumpWithFlag=True
bJumpWithDodge=True (True - enable double jumps after dodge, False - disable jumps after dodge)
bJumpWithBoots=True (True - double jump will be at the height of JumpBoots, False - double jump will be at the height JumpHeight)

-------Commands-------
Mutator: fnnXX.CmdMut

FragNewNet.ini
[fnnXX.CmdMut]
bUseTeamSwitch=True (team change allowed using commands)
bUseBalanceTeams=True (team balance allowed using commands)

Commands:  
- Team commands - !R, !B, !G, !Y, !T, !TEAM, !TEAMS
- Game commands - !P (!PLAY), !S (!SPEC), !QUIT (!EXIT), !LEAVE (!BYE), !V (!VOTE)

-------BeaconPlayer-------
Displays the player's name above his head.
Mutator: fnnXX.BeaconPlayer

FragNewNet.ini
[fnnXX.UBeaconPlayer]
bShowForSpectators=True (True - shows the names to spectators)
bShowForPlayers=True ( True - shows the names to players)
bShowForTeammates=False (True - shows the names of only teammates)
bShowHealth=False (True - displays health next to the name)
bSmallFont=False
bMediumFont=True
bBigFont=False

-------UnlimitedAmmo-------
Adds unlimited ammo to the player's inventory.
Mutator: fnnXX.UnlimitedAmmo

FragNewNet.ini
[fnnXX.UnlimitedAmmo]
RedeemerUnlimited=False

-------NoSmoke-------
Removes smoke from rockets in weapon Rocket Launcher.
Do not use it in conjunction with the NewNetRA mutator, as it already contains this feature 
or disable this feature in the NewNetRA mutator bAllowNoSmoke=False.
Mutator: fnnXX.NoSmoke

-------Disabling NewNet for custom game support-------
Mutator: fnnXX.DisableNewNet

-------Disabling NewNet weapons for custom game support (siege, unreal1, etc)-------
Mutator: fnnXX.DisableWeapons

-------Auto Pause-------
Mutator: fnnXX.PureAutoPause

FragNewNet.ini
[fnnXX.PureAutoPause]
PauseTotalTime=300
Pausetime=60
Timeouts=0


--------------INSTALLATION SKINS Bonus Pack 1, Bonus Pack 4:--------------

This skin packs within itself such skins as: Nali Cow, Nali, Skaarj Trooper, XanMK2, WarBoss
Some skins may have problems with team colors in team games.

Copy the BP1HXX.u, BP4HXX.u (XX - version FragNewNet) to System folder game.

UnrealTournament.ini:
[Engine.GameEngine]
ServerPackages=BP1HXX
ServerPackages=BP4HXX
ServerPackages=multimesh
ServerPackages=EpicCustomModels
ServerPackages=TCowMeshSkins
ServerPackages=TNaliMeshSkins
ServerPackages=TSkMSkins
ServerPackages=SkeletalChars

FragNewNet.ini
[fnnXX.UTPure]
PlayerPacks[0]=BP1
PlayerPacks[1]=BP4
PlayerPacks[2]=
PlayerPacks[3]=
PlayerPacks[4]=
PlayerPacks[5]=
PlayerPacks[6]=
PlayerPacks[7]=


--------------INSTALLATION SKINS Valhalla Avatar:--------------

These skin pack a number of bugs due to incompatibility with newnet:
- flying after the start of the match
- no sounds of jumping, dodging, walking ...
- "freezing" after death
- strange movements
- DoubleJump settings do not work
- etc
This skin pack contains a lot of confusing code. It takes a lot of time and effort to tidy up this code and make it newnet compatible.
I strongly advise against using these skin pack on your server. If you do decide to do this, then what you need to know:
- These skins need to be run without BP1 and BP4. 
- This skin pack contains such skins as: 
  Male 1, Male 2, Male 3, Female 1, Female 2, Nali, Skaarj Trooper, Nali Cow, War Boss, Xan Mark ][, Boss.
  They can be selected in the game in the "Player Settings" menu after you enter the server
- This skin pack allows you to run other skins on the server by adding them to the ServerPackages ut.ini of your server. 
  But they will not have the sounds of jumping, dodging, walking, etc.

Copy the VAHXX.u (XX - version FragNewNet) to System folder game.

UnrealTournament.ini:
[Engine.GameEngine]
ServerPackages=VAHXX

FragNewNet.ini
[fnnXX.UTPure]
PlayerPacks[0]=VA
PlayerPacks[1]=
PlayerPacks[2]=
PlayerPacks[3]=
PlayerPacks[4]=
PlayerPacks[5]=
PlayerPacks[6]=
PlayerPacks[7]=


--------------USEFUL INFO--------------

-------Info-------
This FragNewNet is based on the UltimateNewNet Beta 1e by Deepu http://forum.ultimateut.tk/viewtopic.php?f=15&t=987 
UltimateNewNet was most likely based on the original NewNet code written by TimTim https://ut99.org/viewtopic.php?t=5640

-------Tick rates & client rate-------

UnrealTournament.ini:
[IpDrv.TcpNetDriver]
MaxClientRate=25000 or 65000
NetServerMaxTickRate=65
LanServerMaxTickRate=65

-------Demo Record-------

For correct display of demo rec need to use Demo Manager: 
- 3.5 for client with path 436 (or 451) https://github.com/stijn-volckaert/udemo/releases/tag/v3.5
- 3.5.1 (inside the patch) for client with path 469 

UnrealTournament.ini:
[Engine.Engine]
DemoRecordingDevice=udemo.uDemoDriver
;DemoRecordingDevice=Engine.DemoRecDriver

-------Distribution the game Unreal Tournament '99 with patch 469b official-------
Download (size 265Mb): https://drive.google.com/file/d/1HmjT_Sh5n11jeQ7vapUwFEwf7G7CC3KH/view?usp=sharing
Instructions: unzip the archive, launch UnrealTournament.exe game from the System folder

-------Bugs-------
- Rocket Launcher does not always deal damage when it hits the enemy's feet.
- In Strangelove game mode, it is possible to get stuck in the air when jumping off the rocket.
- TeleporterZone (class UnrealShare) not work.
If you have other errors, this does not mean that the problem is in FragNewNet. Before making a conclusions, test multiplayer without FragNewNet.
Also you can go to the servers where FragNewNet is configured and working correctly:
1.FRAG - DM TDM LMS CTF - BEST MAP --> 195.98.73.166:7777
2.FRAG - DUEL  --> 195.98.73.166:5555
3.DECK16][ ALL WEAPONS  --> 195.98.73.166:6666

-------Credits-------
TimTim - Original NewNet code.
Deepu - Ultimate NewNet code.
Deaod - IG+ code.
`esnesi, medor, Zim, vw!rato.skt, Dark191, ue - Testers.
ProAsm - Code.

-------Contacts-------
EMail: asosed@gmail.com
Discord: asosed#3303

