Please select what you are reporting on:
Creative
What Type of Bug are you experiencing?
Stability
Summary
When players join a map in progress, there is a measurable drop in TPS of the server. This causes undesirable behavior for the player such as rubber banding and hitching.
Using TPS estimation code, you can observe the drop in TPS on/near player join. You can also feel the change in performance as a player
The TPS of a server can be estimated using this code (credit to @olivier_101 on X):
using { /Fortnite.com/Devices }
using { /Fortnite.com/Game }
using { /Verse.org/Simulation }
using { /Verse.org/Colors }
using { /Verse.org/Random }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /UnrealEngine.com/Temporary/UI }
using { /UnrealEngine.com/Temporary/SpatialMath }
using { /Fortnite.com/UI }
tick_rate_device := class(creative_device):
TickRateText<localizes><private>(TickRateString : string) : message = {"{TickRateString} TPS"}
TickRateTextBlock<private> : text_block = text_block:
DefaultTextColor := NamedColors.White
DefaultJustification := text_justification.Right
var AverageTickRate : float = 0.0
Canvas<private> : canvas = canvas{}
OnBegin<override>()<suspends>:void =
LabelSlot := canvas_slot:
Anchors := anchors:
Minimum := vector2{X := 1.0, Y := 1.0}
Maximum := vector2{X := 1.0, Y := 1.0}
Alignment := vector2{X := 1.0, Y := 1.0 }
Offsets := margin{Left := -195.0, Top := -8.0}
Widget := TickRateTextBlock
Canvas.AddWidget(LabelSlot)
if:
FirstPlayer := GetPlayspace().GetPlayers()[0]
PlayerUI := GetPlayerUI[FirstPlayer]
then:
PlayerUI.AddWidget(Canvas)
var PreviousTime : float = GetSimulationElapsedTime()
loop:
Sleep(0.0)
CurrentTime := GetSimulationElapsedTime()
DeltaTime := CurrentTime - PreviousTime
set PreviousTime = CurrentTime
TickRate := 1.0 / DeltaTime
set AverageTickRate += (TickRate - AverageTickRate) / 3.0 # smooth it out so the text doesn't flicker distractingly as much
TickRateTextBlock.SetText(TickRateText(GetRoundedString(AverageTickRate,2)))
BarPercent := TickRate/30.0
GetRoundedString<private>(Input : float, NumDigitsAfterDecimal : int) : string =
if:
Multiplier := Pow(10.0, NumDigitsAfterDecimal * 1.0)
RoundedValue := float[Round[Input*Multiplier]*1.0] / Multiplier
BeforeDecimal := Floor[RoundedValue]
AfterDecimal := Abs(Round[(RoundedValue - BeforeDecimal*1.0)*Multiplier])
var AfterDecimalString : string = ToString(AfterDecimal)
#pad the number after the decimal with leading zeroes
for (It := 0..(NumDigitsAfterDecimal-AfterDecimalString.Length-1)):
set AfterDecimalString = array{'0'} + AfterDecimalString
then:
"{BeforeDecimal}.{AfterDecimalString}"
else:
ToString(Input)
Steps to Reproduce
- Be playing fortnite creative map
- Wait for someone to join game
- Observe rubber banding/hitching/TPS drop
Expected Result
Game does not hitch, rubber band, or drop TPS on player join game
Observed Result
Game does hitch, rubber band, and drop TPS on player join game
Platform(s)
ALL