Your own mission UI
GroundZero shows missions out of the box (What players see). If you want your own look (Epic's Verse UI Kit, a board in your lobby, a scoreboard), read the missions from the season device and draw them yourself. GroundZero still decides which missions a player gets and when they're done.
What you can read
Mission data API version 1 (GzMissionApiVersion = 1). It is frozen: future SDK versions only add members, fields (with defaults) and enum values (at the end); nothing is renamed or removed. A breaking change would come as version 2, with version 1 still working for at least one Fortnite release.
Reach the island's season from any of your devices, no reference to wire up:
if (Season := GzSeason[]):
# use Season.GetMissions(...), Season.MissionsChanged, ...
| Member | Gives |
|---|---|
GzSeason[] | the island's running season (fails if there is none) |
Season.GetMissions(Player):[]gz_mission_view | the player's missions right now, in display order (daily, weekly, this life or round, season) |
Season.MissionsChanged | signalled for a player when progress moves, a mission completes, or new missions are served. Subscribe(Handler) returns a cancelable; Await() waits for the next change |
Season.ResetsIn(Tab, Now):float | seconds until daily or weekly missions reset (-1 when the tab doesn't reset on a clock) |
Season.GzNow():float | the season's clock (Unix seconds): pass it as Now to ResetsIn. It includes the device's Debug Day Offset, so countdowns match what is served in a test with an offset |
Season.TabOf(Mission) | which tab a mission belongs to |
Season.HideDefaultToasts() | your UI shows the toasts: the season device stops showing its own (added in v1) |
Season.GetSummary(Player):gz_mission_summary | done and shown per tab: DailyDone/DailyTotal, WeeklyDone/WeeklyTotal, SeasonDone/SeasonTotal, for a line such as "Daily 4/10" (added in v1) |
Season.MatchEnded | signalled for a player when a match ends (one life by default, or one round) and its missions have been evaluated: the moment for a death or round summary (added in v1) |
Season.GetMatchMoves(Player):[]gz_mission_move | the missions that moved in the player's last finished match: Mission (a gz_mission_view), Before (progress when the match started), Completed (finished in that match) (added in v1) |
Season.AcceptMission(Player, Id):logic | accepts an InMatch mission for the match being played (your accept button). True when accepted or already accepted. The mission counts that whole match. The next match starts with nothing accepted unless Overlay Auto Accept is on (added in v1) |
GzMissionApiVersion | the API version (1) |
Each gz_mission_view has: Index, Id, Name, Description (localized text), Tab (Daily, Weekly, InMatch for this life or round only, Season), Progress, Goal, Done, XpTier, HasItem and ItemName (an island item granted on completion), ResetsInSeconds, Accepted (InMatch missions accepted for this match).
To use your own accept button, turn Overlay Auto Accept off on the season device; otherwise every InMatch mission is accepted at each match start.
Example
my_board_device := class(creative_device):
OnBegin<override>()<suspends>:void =
Sleep(1.0) # let the season device start
if (Season := GzSeason[]):
Season.MissionsChanged.Subscribe(Redraw)
Redraw(Player:agent):void =
if (Season := GzSeason[]):
Missions := Season.GetMissions(Player) # call it on its own line, not inside an if / for condition
for (Mission : Missions):
# Draw Mission.Name, Mission.Progress / Mission.Goal, Mission.Done ... your way.
Print("{Mission.Progress} / {Mission.Goal}")
Starting points
GroundZero doesn't ship sample screens: you get the SDK and its displays, and you build your own UI on the API above if you want one. The in-game HUD is the simplest working example of that API: its full mission list is built only from GetMissions, so whatever it shows, your UI can show too.
Coming: a sample season you can install to see how missions look on your island before you build anything.
Hiding GroundZero's own display
On the season device: Pinned Count 0, Show List On Respawn off, Join List Seconds 0 and Show Toasts off (or call Season.HideDefaultToasts() from your Verse). Turn Debug Log off too.
Other devices on your island can add their own HUD. For example, a Tracker device shows a progress card top left unless its Show on HUD is set to No.