using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
using { /Verse.org/Verse }
# Main game controller device
runner_tycoon_controller := class(creative_device):
\# Device references
@editable
RunningScoreManager : score_manager_device = score_manager_device{}
@editable
WinScoreManager : score_manager_device = score_manager_device{}
@editable
WinTrigger : trigger_device = trigger_device{}
@editable
RebirthButton : button_device = button_device{}
\# Player multipliers
var PointGainMultiplier : \[agent\]float = map{}
\# Rebirth thresholds
RebirthThresholds : \[\]tuple(int, float) array{ =
(20, 1.10),
(50, 1.25),
(100, 1.45),
(200, 1.70)
}
OnBegin<override>()<suspends>:void=
\# Subscribe to events
WinTrigger.TriggeredEvent.Subscribe(OnWin)
RebirthButton.InteractedWithEvent.Subscribe(OnRebirthAttempt)
\# Main game loop
loop:
Sleep(0.1)
for (Player : GetPlayspace().GetPlayers()):
spawn{CheckPlayerMovement(Player)}
\# Check player movement and award points
CheckPlayerMovement(Player : agent)<suspends>:void=
if (Character := fort_character\[Player\]):
\# Award points based on multiplier
var Multiplier : float = 1.0
if (StoredMultiplier := PointGainMultiplier\[Player\]):
set Multiplier = StoredMultiplier
RunningScoreManager.Activate(Player)
\# Handle win event
OnWin(MaybeAgent : ?agent):void=
if (Agent := MaybeAgent?):
WinScoreManager.Activate(Agent)
\# Handle rebirth attempt
OnRebirthAttempt(Agent : agent):void=
var CurrentMultiplier : float = 1.0
if (StoredMultiplier := PointGainMultiplier\[Agent\]):
set CurrentMultiplier = StoredMultiplier
\# Find next threshold
for (Threshold : RebirthThresholds):
if (Threshold(1) > CurrentMultiplier):
CurrentWins := WinScoreManager.GetCurrentScore(Agent)
if (CurrentWins >= Threshold(0)):
\# Update multiplier
if (set PointGainMultiplier\[Agent\] = Threshold(1)):
\# Reset scores by activating with 0
RunningScoreManager.Activate(Agent)
return