Stop Being That Player Who Spams "Where Do I Go?"
Stop Being That Player Who Spams "Where Do I Go?"
So you’ve built an island. You’ve placed the traps. You’ve even made the boss music sound like it’s coming from a dumpster fire. But the moment the match starts, your friends spawn in, look around with the blank stare of a deer in headlights, and immediately ask, "Wait, what are we supposed to do?"
We’ve all been there. It’s the digital equivalent of a tutorial level that doesn’t load.
In this tutorial, we’re going to fix that. We’re going to build a Visual Aid System using Verse. Instead of waiting for players to figure out their role (Attackers vs. Defenders), we’ll flash a custom message on their screen the second they join, telling them exactly what to do. No more confusion. No more "I thought I was on the other team!" Just pure, unadulterated clarity.
What You'll Learn
- The HUD Message Device: How to use a built-in UEFN device to talk directly to the player’s screen.
- Verse Variables: Storing that message so you can change it easily without digging through code.
- Events: Triggering that message at the exact right moment (when the round starts).
- Scene Graph Basics: Understanding where devices live in your island’s hierarchy.
How It Works
Think of a Variable in Verse like a loot drop. Before the game starts, the loot drop is sitting in the world with nothing in it (or a default item). When the game starts, you decide what goes inside it. In our case, the "loot drop" is a piece of text, and we’re filling it with instructions for the players.
We aren’t writing complex math here. We’re writing a sign. But instead of a physical sign you place in the grass, this sign appears directly on the player’s monitor, floating in their view.
Here is the game mechanic analogy:
- The Device: This is like a Prop Mover or a Trigger. It’s a physical object in your UEFN editor.
- The Variable: This is like the Storm Timer. It holds a value (time, or in our case, text) that changes or is read by the system.
- The Event: This is like the Round Start signal. It’s the moment the bus door opens. We want our message to appear then, not before, not after.
By combining these, we create a system that says: "When the Round Starts, take this text and show it to everyone."
Let's Build It
First, open UEFN. You need to have a basic island set up with at least two teams (e.g., Attackers and Defenders).
Step 1: The Device Setup
- Go to the Devices tab.
- Search for HUD Message.
- Drag it into your level. It doesn’t matter where—it’s a "ghost" device, so it won’t clutter your view.
- In the Details panel on the right, look for User Options.
- Find the Message field. Type something short and punchy.
- Example: "Defend the Objective!" or "Find the Keycards!"
- Tip: Keep it short. The HUD has limited space. If you write a novel, it’ll get cut off like a poorly edited TikTok.
Step 2: The Verse Code
Now, let’s bring this to life with Verse. We’ll create a simple script that ensures this message pops up when the game begins.
Create a new Verse file (e.g., VisualAids.verse) and paste in this code. Don’t panic—I’ve annotated it so you know exactly what’s happening.
# This is the main structure for our island logic.
# Think of it as the "Main Menu" of your code.
struct Main : WorldDevice {
# 1. DECLARE THE DEVICE
# We need to tell Verse which HUD Message device we are controlling.
# This is like plugging a controller into the console.
HudDevice : HUDMessageDevice = HUDMessageDevice{}
# 2. DEFINE THE MESSAGE CONTENT
# This is our "Variable." It holds the text string.
# We define it here so we can change the text in one place if we want.
MessageContent := "Welcome! Your objective is to survive."
# 3. THE EVENT: Round Start
# This function runs automatically when the round begins.
# It’s the "Bus Drop" moment for your code.
OnBegin<override>()<suspends>: void = {
# 4. ASSIGN THE MESSAGE
# We take our variable (MessageContent) and set it into the device.
# It’s like loading the ammo into the gun before firing.
HudDevice.SetMessage(MessageContent)
# 5. TRIGGER THE DISPLAY
# Now that the message is set, we tell the device to show it.
# This is the "Fire" button.
HudDevice.Show()
# Optional: Hide it after a few seconds so it doesn't block gameplay forever.
# Uncomment the next line if you want it to disappear after 5 seconds.
# -> HideMessage()
}
# Helper function to hide the message later (if you uncomment the line above)
HideMessage(): void = {
# Wait for 5 seconds (5000 milliseconds)
<- 5000
# Then hide it
HudDevice.Hide()
}
}
Walkthrough: What Just Happened?
HudDevice : HUDMessageDevice: We created a reference to the device you placed in the editor. In Verse, we don’t just guess where the device is; we explicitly link to it. This is part of the Scene Graph—the device is an Entity in the world, and our script is the Component that controls it.MessageContent := "...": We defined a constant string. This is your variable. If you want to change the message, you only change it here.OnBegin: This is the event handler. It’s tied to the game loop. When the round starts, Verse calls this function.SetMessage&Show: These are the API calls.SetMessageloads the text into the device’s memory.Showmakes it visible on the player’s screen.
Try It Yourself
You’ve got the basics. Now, let’s make it dynamic.
Challenge: Modify the code so that the message is different for Attackers vs. Defenders.
Hint: You can’t just have one message for everyone. Look into how you might use Player Events or check the player’s team inside the OnBegin or a new event like OnPlayerJoined. If you’re feeling fancy, try using a switch statement to check the team ID.
Stuck?
Remember, the HUD Message device is just a container. You can call SetMessage multiple times. If you can detect which team a player is on, you can set the message to "Attack!" for one team and "Defend!" for the other.
Recap
- HUD Message Device: A built-in UEFN tool to display text on the player’s screen.
- Variables: Store your text strings so they are easy to edit.
- Events (
OnBegin): Trigger your code at the right time (round start). - Scene Graph: Your devices are entities in the world; your Verse code is the logic that interacts with them.
Now go forth and stop your players from being confused. A clear objective is the first step to a fun game.
References
- https://dev.epicgames.com/documentation/en-us/fortnite/triad-inflitration-09-creating-visual-aids-in-verse
- https://dev.epicgames.com/documentation/en-us/fortnite/triad-infiltration-9-creating-visual-aids-in-verse
- https://dev.epicgames.com/documentation/en-us/fortnite/triad-infiltration-in-verse
- https://dev.epicgames.com/documentation/en-us/uefn/triad-infiltration-9-creating-visual-aids-in-verse
- https://dev.epicgames.com/documentation/en-us/uefn/triad-infiltration-in-verse
Verse source files
- 01-fragment.verse · fragment
Turn this into a guided course
Add triad-inflitration-09-creating-visual-aids-in-verse to your free study plan — we'll suggest related pages and stitch the lot into one compile-checked, self-guided lesson with worked examples and quizzes.
References
Original tutorial generated by Verse Island from the Verse/UEFN knowledge base, with references to the Epic Games sources above. Code is validated against the knowledge base.