A Creative Device forged on Verse Island
Scoreboard Ember — Live Score & Countdown HUD
forged by BizaNator ✓ compiles
◈ Forged at Professor AweShucks' Tinker Lab
III
✓
Compiles
Scoreboard Ember — Live Score & Countdown HUD
Combines the Capture Area Device · Combines the Campfire Device
3 devices
professor-aweshucks says“Here's your Scoreboard Ember, my friend! It paints a persistent HUD widget showing SCORE and TIME every second: stand in the Score Zone to bank points, and light the Campfire nearby to DOUBLE your rate while it burns. When the clock hits zero it flashes your final score, takes a short breather, then automatically starts a fresh round. Just drop it in, hook the ScoreZone, BonusCampfire, and ScoreHUD slots to your three devices, and tweak RoundSeconds and PointsPerSecond to taste.”
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/UI }
using { /Verse.org/Verse }
# Professor AweShucks' Scoreboard Ember
# A live HUD widget that shows every player's SCORE and a COUNTDOWN clock during a round.
# Stand in the Score Zone to earn points every second. Light the nearby Campfire to
# DOUBLE your scoring rate while it burns. When the countdown hits zero the round ends,
# a final scoreboard flashes, and after a short intermission the loop resets for another go.
score_countdown_hud_device := class(creative_device):
# The zone players stand in to earn points
@editable
ScoreZone:capture_area_device = capture_area_device{}
# Light this to double your scoring rate while it burns
@editable
BonusCampfire:campfire_device = campfire_device{}
# Displays the live "Score / Time" HUD widget and the pop-up feedback
@editable
ScoreHUD:hud_message_device = hud_message_device{}
# How long each round lasts, in seconds
@editable
RoundSeconds:int = 60
# How many points a player earns per second while standing in the zone
@editable
PointsPerSecond:int = 10
# --- Runtime state ---
var Score:int = 0
var TimeLeft:int = 60
var IsFireLit:logic = false
var RoundActive:logic = false
OnBegin<override>()<suspends>:void =
# Initialise the countdown from the editable round length
set TimeLeft = RoundSeconds
# React when players step in/out of the scoring zone (drives feedback pops)
ScoreZone.AgentEntersEvent.Subscribe(OnZoneEntered)
ScoreZone.AgentExitsEvent.Subscribe(OnZoneExited)
# React when the campfire is lit/extinguished to toggle the bonus multiplier
BonusCampfire.LitEvent.Subscribe(OnFireLit)
BonusCampfire.ExtinguishedEvent.Subscribe(OnFireExtinguished)
# Run round after round forever
loop:
RunRound()
# --- The main round loop: counts down one second at a time, scoring as it goes ---
RunRound()<suspends>:void =
# Fresh round setup
set Score = 0
set TimeLeft = RoundSeconds
set RoundActive = true
ScoreZone.Enable()
BonusCampfire.Enable()
ShowToAll(RoundStartLine())
# Tick down every second until the clock runs out
loop:
Sleep(1.0)
if (TimeLeft <= 0):
break
# Award points to everyone currently in the zone this second
AwardTick()
# Advance the clock
set TimeLeft = TimeLeft - 1
# Refresh the persistent HUD widget every second
RefreshHUD()
# --- Round over: freeze the loop, show the final scoreboard ---
set RoundActive = false
ScoreZone.Disable()
ShowToAll(FinalLine())
# Short intermission before the next round begins
Sleep(6.0)
ShowToAll(IntermissionLine())
Sleep(2.0)
# Give points to every agent standing in the zone this tick
AwardTick():void =
Agents := ScoreZone.GetAgentsInVolume()
if (Agents.Length > 0):
# Double the rate while the campfire burns
var Rate:int = PointsPerSecond
if (IsFireLit?):
set Rate = PointsPerSecond * 2
set Score = Score + (Rate * Agents.Length)
# Rebuild the always-on HUD widget text from current state
RefreshHUD():void =
ScoreHUD.SetDisplayTime(0.0) # 0.0 = persistent on-screen widget
if (IsFireLit?):
ScoreHUD.SetText(WidgetBonusLine())
else:
ScoreHUD.SetText(WidgetLine())
ScoreHUD.Show()
# --- Event handlers ---
OnZoneEntered(Agent:agent):void =
# Personal pop confirming they're now earning points
ShowTo(Agent, EnteredLine())
RefreshHUD()
OnZoneExited(Agent:agent):void =
ShowTo(Agent, ExitedLine())
OnFireLit(Agent:agent):void =
set IsFireLit = true
ShowToAll(FireLitLine())
RefreshHUD()
OnFireExtinguished(Agent:agent):void =
set IsFireLit = false
ShowToAll(FireOutLine())
RefreshHUD()
# --- HUD helpers (custom messages must be `message` type via <localizes>) ---
ShowToAll(Msg:message):void =
ScoreHUD.Show(Msg, ?DisplayTime := 2.5)
ShowTo(Agent:agent, Msg:message):void =
ScoreHUD.Show(Agent, Msg, ?DisplayTime := 2.0)
# --- Localized text builders (each is a single interpolated string literal) ---
WidgetLine<localizes>():message = "SCORE {Score} | TIME {TimeLeft}s"
WidgetBonusLine<localizes>():message = "SCORE {Score} | TIME {TimeLeft}s (2x BONUS!)"
RoundStartLine<localizes>():message = "Round START! Stand in the zone to score. Light the fire for 2x!"
FinalLine<localizes>():message = "TIME'S UP! Final Score: {Score}"
IntermissionLine<localizes>():message = "Next round starting..."
EnteredLine<localizes>():message = "You entered the Score Zone - earning points!"
ExitedLine<localizes>():message = "You left the Score Zone - scoring paused."
FireLitLine<localizes>():message = "Campfire LIT! Scoring rate DOUBLED while it burns."
FireOutLine<localizes>():message = "Campfire went out - back to normal scoring."
🌴 Forge your own free at verseisland.com — code U37ZN5F, credits for us both
🧭 Join with U37ZN5F — you both earn starter coconuts
🌴 Forged on Verse Island — free UEFN/Verse learning + a keeper’s Combine Lab.