Skip to main content

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, ...
MemberGives
GzSeason[]the island's running season (fails if there is none)
Season.GetMissions(Player):[]gz_mission_viewthe player's missions right now, in display order (daily, weekly, this life or round, season)
Season.MissionsChangedsignalled 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):floatseconds until daily or weekly missions reset (-1 when the tab doesn't reset on a clock)
Season.GzNow():floatthe 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_summarydone and shown per tab: DailyDone/DailyTotal, WeeklyDone/WeeklyTotal, SeasonDone/SeasonTotal, for a line such as "Daily 4/10" (added in v1)
Season.MatchEndedsignalled 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_movethe 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):logicaccepts 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)
GzMissionApiVersionthe 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.