Build an Island Quest
RPG Adventure!
Explore a tropical island, talk to NPCs, accept quests, collect loot and face off against a final boss to win. This is the biggest Roblox project yet!
We'll build terrain with sand beaches, a grassy jungle, ancient ruins and a volcano giving players lots of places to discover.
Set Up the World
- 1Open Roblox Studio → New → Baseplate
- 2In the Explorer, click Workspace → Baseplate and press Delete to remove it
- 3Open the Terrain Editor (Home tab → Terrain Editor button)
- 4Click Generate and set: Biome = Tropics, Size X = 512, Size Z = 512, then click Generate
- 5Use the Paint brush to add sandy beach around the coast (Sand material, large brush)
Add Island Landmarks
- 6Insert a SpawnLocation Part on the beach rename it SpawnLocation, set Material = SmoothPlastic, colour white
- 7Build a small Village Area: 3–4 stone walls and a floor using Parts (Material = SmoothPlastic, medium grey). Group it as Village
- 8Build an Ancient Ruins area inland: crumbled walls, stone pillars, overgrown floor. Group as Ruins
- 9Build a Volcano platform at the far end of the island a dark grey wedge hill with a red glowing top (Neon material, BrickRed colour)
We'll use the leaderstats folder so Roblox shows our stats on the leaderboard automatically.
Create PlayerSetup Script
- 1In ServerScriptService, insert a new Script, rename it PlayerSetup
- 2Paste this code:
We'll use a ProximityPrompt so players press E to talk to the Elder and see a dialogue message.
Build the NPC Model
- 1In the Toolbox, search "NPC" and insert any free humanoid NPC into the village area
- 2Rename the NPC Model to VillageElder
- 3In the NPC's HumanoidRootPart, insert a ProximityPrompt
- 4Set the ProximityPrompt's ActionText = Talk, ObjectText = Village Elder, KeyboardKeyCode = E
- 5In the NPC Model, insert a Script, rename it ElderScript
NPC Dialogue Script
A LocalScript on the client listens for the ShowDialogue RemoteEvent and displays each line one at a time.
Build the Dialogue Frame
- 1In StarterGui, insert a ScreenGui, rename it DialogueGui
- 2Inside it, insert a Frame set: Size = {0.6, 0}{0.18, 0}, Position = {0.2, 0}{0.78, 0}, BackgroundColor = dark navy (21, 31, 48), BackgroundTransparency = 0.1
- 3Inside the Frame, add a TextLabel: Size = {1,0}{0.6,0}, Position = {0,0}{0.1,0}, TextColor = white, Font = GothamBold, TextWrapped = true rename DialogueText
- 4Add another TextLabel for the NPC name: Size = {0.5,0}{0.3,0}, Position = {0.02,0}{0,0}, TextColor = #38bdf8 (sky blue), rename NPCName, Text = "Village Elder"
- 5Set the Frame's Visible = false to start hidden
- 6In StarterPlayerScripts, insert a LocalScript, rename DialogueClient
task.wait(3) pauses the script for 3 seconds before showing the next line.Each crystal glows cyan. Touching it adds 1 to the player's CrystalsFound attribute and then disappears.
Build a Crystal Part
- 1Insert a Part into the Ruins area set Size = (1.5, 2, 1.5), Material = Neon, Colour = Cyan
- 2Add a SpecialMesh inside it set MeshType = Diamond
- 3Add a PointLight Brightness = 3, Colour = Cyan, Range = 10
- 4Rename the Part Crystal
- 5Insert a Script inside the Crystal Part
- 6Right-click the Crystal in Explorer → Duplicate it 4 times (5 crystals total)
- 7Scatter them around the Ruins behind pillars, on ledges, hidden in corners
collected variable, so they work independently. Don't put one shared script outside it won't know which crystal was touched.collected variable?Players always know what they need to do and how many crystals they've collected.
Build the Quest UI
- 1In StarterGui, insert a new ScreenGui, rename QuestGui
- 2Add a Frame Position = {0.01,0}{0.01,0}, Size = {0.28,0}{0.12,0}, BackgroundColor = navy, BackgroundTransparency = 0.2, corner radius 12
- 3Add a TextLabel for quest title rename QuestTitle, Size = {1,0}{0.4,0}, Text = "📋 Quest", TextColor = sky blue, FontFace = GothamBold
- 4Add another TextLabel for quest detail rename QuestDetail, Size = {1,0}{0.5,0}, Position = {0,0}{0.45,0}, TextColor = white, Text = "Talk to the Village Elder"
- 5In StarterPlayerScripts, insert a LocalScript, rename QuestTracker
ActiveQuest to "ReturnToElder".What will the Quest Tracker display?
updateQuest function every time a player attribute changes?Update the Elder's dialogue for returning players, award Gold, and add a shop NPC that sells a sword tool.
Update ElderScript for Quest Turn-In
Open VillageElder → ElderScript and replace the Triggered function with this updated version:
Add a Merchant NPC
- 1Insert another NPC from the Toolbox near the village rename it Merchant
- 2Add a ProximityPrompt: ActionText = Buy Sword (50G), ObjectText = Merchant
- 3Get a free sword from the Toolbox (search "sword") drag it into ServerStorage, rename IslandSword
- 4Insert a Script in the Merchant model:
The Volcano Beast has 200 HP, a floating health bar, and hurts players on contact. Defeat it to win the game!
Build the Boss Model
- 1On the volcano platform, insert a Part Size = (8, 12, 8), Material = Neon, Colour = Really Red, Anchored = false, rename BossBody
- 2Add a Humanoid inside BossBody set MaxHealth = 200, Health = 200
- 3Add a BillboardGui inside BossBody: Size = {4,0}{0.8,0}, StudsOffset = (0, 8, 0), AlwaysOnTop = true
- 4Inside the BillboardGui, add a Frame (full size, dark bg), then a smaller red Frame named HealthFill
- 5Add a TextLabel above: Text = "🐉 Volcano Beast", TextColor = red
- 6Group BossBody into a Model named VolcanoBoss, insert a Script:
MoveTo. Without it the movement won't work. Make sure Humanoid is directly inside BossBody (the Part), not in the Model.MoveTo to work.RunService.Heartbeat runs code every single frame, so the boss constantly chases players.When the boss's health reaches zero, we fire a RemoteEvent to every player and show a big victory banner.
Boss Death Detection
Add this at the bottom of VolcanoBoss → Script:
Victory Screen GUI
- 1In StarterGui, insert a ScreenGui, rename WinGui
- 2Add a full-screen Frame: Size = {1,0}{1,0}, dark navy background, Transparency = 0.15, Visible = false
- 3Add a centre TextLabel: Text = "⚔️ VICTORY! ⚔️", Font = FredokaOne, large text, sky blue
- 4Add a sub-label: Text = "You defeated the Volcano Beast and saved the island!"
- 5In StarterPlayerScripts, add a LocalScript named WinClient:
FireClient and FireAllClients?Click a chest to open it and get a random loot reward. Potions restore health; Gold goes into the leaderboard.
Build a Treasure Chest
- 1Insert a Part Size = (3, 2, 2), Material = Wood, Colour = medium brown. Rename TreasureChest
- 2Add a SpecialMesh MeshType = Brick (gives a nice box shape)
- 3Add a ClickDetector inside the Part
- 4Add a PointLight Colour = Gold, Brightness = 2, Range = 8
- 5Insert a Script inside TreasureChest:
- 6Duplicate the chest 5 times and hide them around the island in caves, behind trees, at the foot of the ruins
lootTable randomly picks {type = "Potion", amount = 50}.What happens to the player?
math.random(#lootTable) do?We'll update PlayerSetup to load saved data on join and save it when the player leaves.
Update PlayerSetup for Saving
Replace the whole PlayerSetup script with this version:
pcall?Add ambient sounds, tropical lighting, volcano fire effects and palm tree decorations.
Lighting Setup
- 1Click Lighting in Explorer → set: Brightness = 2.5, Ambient = (170, 195, 255) (cool blue sky), OutdoorAmbient = (160, 200, 255)
- 2Insert Sky in Lighting set SkyboxBk/Dn/Ft/Lt/Rt/Up = any sky asset IDs from the Toolbox (search "tropical sky")
- 3Insert ColorCorrection in Lighting Saturation = 0.1 (makes colours pop), Contrast = 0.05
- 4Insert Atmosphere in Lighting Density = 0.2, Haze = 0.5, Glare = 0.2 (gives a warm island haze)
Volcano Fire Effects
- 5On the volcano top, insert a Part (flat, red Neon) add a Fire effect inside: Color = orange, Size = 10, Heat = 9
- 6Add several PointLights around the rim orange colour, Brightness 3, Range 20
Ambient Sounds
- 7In Workspace, insert a Sound search Toolbox for a free "tropical ambient" or "ocean waves" sound, paste the SoundId. Set Looped = true, Volume = 0.4
- 8In ServerScriptService, insert a Script:
Palm Tree Decorations
- 9Search the Toolbox for "palm tree" insert 5–8 palm trees along the beach and jungle edge
- 10Search for "tropical flowers" or "fern" scatter around the ruins for overgrown atmosphere
Play through every step talk to the Elder, collect crystals, buy the sword, fight the boss — and check for bugs.
Full Playthrough Checklist
- 1Click Play in the toolbar to enter the game
- 2Walk up to the Village Elder and press E dialogue appears, quest assigned
- 3Quest Tracker updates to show "💎 Crystals: 0 / 5"
- 4Head to the Ruins and collect all 5 crystals tracker updates each time
- 5Return to the Elder get 100 Gold reward, quest changes to "Slay Boss"
- 6Go to the Merchant and buy the sword for 50 Gold
- 7Head to the Volcano the Volcano Beast chases you
- 8Attack the boss with the sword health bar decreases
- 9Boss defeated Victory screen appears, Gold and XP awarded
- 10Open some Treasure Chests along the way loot drops work
Anyone with the link will be able to explore your island, complete quests and fight the boss!
Publish Your Game
- 1Click File → Publish to Roblox As… (or press Ctrl+Shift+P)
- 2Give your game a name — something like "Island Quest RPG 🗺️"
- 3Write a short description: "Explore a tropical island, complete quests and defeat the Volcano Beast!"
- 4Set Genre to Adventure
- 5Click Create
- 6After publishing, go to Game Settings → Permissions and set to Public
- 7Click the Roblox button in the toolbar to open your game page copy the link and share it!
