BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
Explore a snowy browser game, answer coding questions to earn badges, and find the treasure
AI summary · README
GamesTypeScript · PLpgSQLGitHub @francis463OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
"Solve the Map, Break the Code, Find the Treasure."
A browser game for an HCI course project. Explore the snowy C++ Peaks with your AI drone, fix a CSS bug at the terminal gate to open the way north, survey the Frozen River, walk west into Dev Village, where Ada the villager has hints, and go south into the Dense Forest, where a ranger keeps a campfire.Read the full README ↗"Solve the Map, Break the Code, Find the Treasure."
A browser game for an HCI course project. Explore the snowy C++ Peaks with your AI drone, fix a CSS bug at the terminal gate to open the way north, survey the Frozen River, walk west into Dev Village, where Ada the villager has hints, go south into the Dense Forest, where a ranger keeps a campfire, walk west out of the forest into the Sunbaked Desert, or east to Sunny Beach.
Along the way, 11 language treasure chests ask questions in HTML, CSS, PHP, Python, Java, C#, SQL, C++ and JavaScript, and each one you answer earns a badge. In the village, the Syntax Matcher at the Syntax Terminal prints an access code that unseals the Archive, and the Codex keeps every badge you've earned with the question behind it. Team games have a chat box, and every game has a small command line.
Built with Vite, React 19, TypeScript and Tailwind CSS 4. Play with a keyboard on a computer, or with on-screen touch controls on a phone or tablet. The layout fits screens down to 360px wide, and on a desktop the map fills most of the window.
npm install
npm run dev # http://localhost:5173
npm test # unit + component tests (Vitest)
npm run build # type-check and build to dist/
| Action | Keyboard | Touch screen |
|---|---|---|
| Move | W A S D or arrow keys | D-pad under the map (tap = one step, hold = keep moving) |
| Inspect / interact with a nearby point | E | [E] button (lights up when something is in range) |
| Open or close the Codex | C | [C] Codex in the top bar |
| Close the terminal or the Codex | Esc or [X] CLOSE | [X] CLOSE |
| Chat (team) or type a command (solo) | Enter or / from the map, then Esc to go back to walking | the CHAT / COMMANDS tab beside the log |
The touch controls only appear on touch screens; keyboard players never see them. To try the game on a phone on the same Wi-Fi, run npm run dev -- --host and open the Network link it prints.
Continue after a refresh: a solo game saves itself in this browser as you play (your place, HP, time, items, badges and class, kept per account or for the guest). After a refresh or reopening the tab, the game resumes by itself where you were (no click needed). [=] Menu still leaves to the main menu, which then shows Continue above Solo Quest; Solo Quest starts a fresh game. Windows that were open (terminals, the Codex) come back shut. Team games are not saved, because the room lives on the server; a refresh returns to the menu. Private windows or blocked storage just forget.
A bigger map: the map now fills the window. Zoom (− and + at the map's top-right; the label shows the zoom as a multiple of the fit, like 1.5×) steps up one whole pixel at a time so the art stays sharp; once the map is larger than the window it scrolls with you. It starts on auto, which steps up once if the fit would leave wide empty bands, and your choice is remembered in this browser. Full-screen map (F or the ⛶ button) hides the side panels, keeps a slim top bar (hearts, time, Help, Codex, Menu) and shows the newest log line over the map; the full log stays available to screen readers. F or ✕ (or Esc, where the browser's own full screen was used) goes back. A phone held sideways gets the full-screen layout by itself, with the move pad and [E] button floating over the map instead of in a bar under it.
Health: Your health is 5 hearts (5 HP, one per heart, with the number beside them). The river costs a heart every 4.5 seconds, and every wrong answer costs a heart (at a chest, the gate, the cipher, the signal tower circuit, the matcher, the sandcastle, the Archive keypad or the lighthouse lamp; the log says so, and at your last heart a wrong answer downs you and closes the window). Only food heals, and each piece restores one heart. The map flashes red when you are hurt and green when you heal, and at 2 hearts or less the hearts pulse, the screen edges glow red and the log warns you once (the flashes and pulse stay still if your device is set to reduce motion). You get food from the world and from NPCs: a healing herb in the Dense Forest, a cactus fruit in the Sunbaked Desert and a glass of cold lemonade on the Sunny Beach, and a garden carrot beside the Dev Village garden (pick one with E beside it, or tap its button once you stand there), the ranger's stew once you bring her the three glow mushrooms, the nomad's waterskin once you bring her the three water jars, and the Ski Lodge keeper's soup. Food goes into your bag and is eaten from the inventory (see Food below). In team games, appears when a teammate stands beside you: it hands them one of your own pieces of food (you must have one; you can give one every 10 seconds). They eat it themselves, so a teammate can never change your HP directly.
The top bar shows the time with a small pixel icon: a sun by day, a sunset at dusk and a moon at night. The map is drawn in pixel art on a canvas: snowy peaks, the frozen river, the meadow and the dense forest, with your hooded explorer and your AI drone. In team games your teammates are explorers in their own colours. Bushes, rocks and trees mark the edge of the walkable area, with a gap in the hedge where the path leads west, and a stone wall with a barred gate closes off the north. Dev Village has huts, a well and fences around a dirt square, and the whole village is one big meadow (no snow and no wall, so you can walk its north half too): a windmill whose sails turn, a pond with a footbridge, a town square with a fountain and benches, an orchard, a fenced crop field and three more huts, joined to the main road by a new dirt road. The huts have smoke curling from their chimneys, windows and a lantern that glow from dusk, three villagers who pace the road and square, a pecking chicken, two garden plots in the south and a market stall (all decoration: only Ada talks, and nothing in the village changes your stats). The smoke and the villagers stand still if your device is set to reduce motion. The mini-map shows the village, the Peaks, the desert, the forest, the beach and Foggaten Island side by side, with yours outlined. Pixels stay sharp at any screen size; on some laptop scaling settings (such as Windows at 125 %) the map is drawn a little smaller to keep them sharp. If your device is set to reduce motion, characters step instead of gliding and the blinking lights, pulses and glints stay still.
The game opens on a login screen. Log in or Sign up with a name (3–12 letters, digits, - or _) and a password (8 or more characters), Sign in with Google, or Play as guest. Signed-in players keep their 11 badges, and the answers behind them, on any computer: each new game starts with them earned, and the Codex shows the question you actually answered. Guests can play Solo Quest and Team Lobby too, but nothing of theirs is saved. Quest progress, your position and your inventory are not saved.
The menu shows who is playing, with [ Log out ] (or [ Log in ] for a guest). A signed-in player can add an optional email with [ Add email ]; once it is confirmed, Forgot your password? sends a reset link to it (an account with no email can't reset its password). A Google player picks a name the first time. In a team game your team name is your account name.
Accounts setup (for whoever runs the Supabase project). Accounts use the same Supabase project as Online play, with two tables (profiles, badges) locked so a player can only read and write their own rows, and one Edge Function (account) that signs players up and in by name. In supabase/: apply migrations/20261017000000_accounts.sql, deploy functions/account (supabase functions deploy account --no-verify-jwt, which supabase/config.toml also sets; set the secret SITE_URLS to the comma-separated sites a reset link may return to, for example https://your-game.example,http://localhost:5173, never a wildcard such as *.vercel.app; it reads its service key from the platform's environment, never from this repo), and check the row rules with tests/policies.sql. For Google sign-in, enable the Google provider in Supabase and Google Cloud and list the redirect URLs (the production site, Vercel previews and http://localhost:5173). Turn off "Secure email change" in Supabase Auth settings, or [ Add email ] can never be confirmed (the hidden sign-in address can't receive mail). Password-reset emails go through Supabase's built-in sender, which is heavily rate-limited: add a custom SMTP sender for real use. If the account server can't be reached, the login screen says so and Play as guest still works.
From the main menu choose TEAM LOBBY, type a nickname and pick a connection:
One player presses [ Create Room ] and reads out the 4-letter room code; the others type it and press [ Join ]. The host (the creator) presses [ Start Expedition ] once at least 2 players are in. A player who joins after the start drops straight into the game.
In the game, teammates appear as colored dots with their names, and the top bar shows ROOM <CODE> · <N> online. A teammate in another zone (Peaks, Dev Village, Dense Forest, Sunbaked Desert, Sunny Beach or Foggaten Island) shows only on the mini-map.
Enter (or [ SEND ]), or tap a quick reply (On my way, Need help, Meet at the gate, Found it!, Wait for me, Good job!). Messages are 120 characters at most, one a second; rude words are masked and a nickname that would be masked is refused when you create or join. Two players with the same nickname read as Kai and Kai (2). The CHAT tab shows how many messages you haven't read, and on a phone the top bar does too. /ping marks the map for the whole team.For teachers. The chat is filtered (rude words in English and Filipino are masked, invisible characters are removed) and rate-limited (one message a second and one ping every 5 seconds per player, checked again on receipt), and a player can mute any teammate; a mute lasts while you are in the room. It is a classroom aid, not a moderated service: a modified copy of the game can still post under another player's roster name, anyone who has the room code can read that room's chat, and nothing is stored anywhere (a refresh or leaving the room clears it). Keep room codes within each team. A team's traffic is at most about 16 position updates, 4 chat messages and 0.8 pings per second.
Online setup. Online play works out of the box with the game's own Supabase project (chronicles-of-devlandia; team play itself uses Realtime only and stores nothing, while accounts add the two tables above). To use a different project, put its URL and publishable key in a .env file (see .env.example):
VITE_SUPABASE_URL=https://your-project-ref.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=sb_publishable_your_key
If the server can't be reached, Online shows "Can't reach the team server…" and Same computer still works. The claude.ai preview link blocks outside connections, so there only Same computer works (between windows of the same browser).
Before Solo Quest and before a team game, Choose your class: Warrior, Archer, Mage, Assassin, Tank or Healer. A class is a look only (an outfit colour and a small item such as a helm, bow, hat, mask, shield or staff); it changes no stat, speed or puzzle. In a team everyone sees each other's class, two players may pick the same one, and the hood colour still tells teammates apart. A signed-in player's last choice is saved in their account's own profile data and preselected next time (no database change); guests start on Warrior and nothing is saved. A class value that is missing or not one of the six is shown as Warrior.
Turn a phone to landscape (or use a window shorter than 500 px) and the map goes full-screen with a slim one-row top bar and touch controls over the map. The bar keeps the hearts, the clock and the region, and gains a Food ×N button (the inventory bar is hidden here, so this is how you eat and heal) and a Chat button that opens the chat (or the command line, in solo play) as a sheet over the lower part of the map, with [X] to close it; Help, Codex and Menu become small [?], [C] and [=] keys. The controls are smaller and see-through until you touch them (they wake for two seconds after each touch), and the ⇄ button between them swaps the sides (D-pad on the right, [E] on the left; remembered in this browser). The Stick / Pad button next to it switches the arrow pad (the default) for a joystick: put a thumb on the ring and lean it, and you step the way you lean furthest (up, down, left or right, repeating while you hold; resting in the middle is not a step). The choice is remembered in this browser, works in both the sideways and the upright view, and the four arrow buttons stay in the page for keyboards and screen readers. The bar and controls keep clear of a notch, rounded corners and the home bar (safe-area insets; the page runs edge to edge). On a touch screen the floating [E] prompt chip over the map is hidden, because the big [E] button already says it. The newest log line over the map fades out after about four seconds and shows again with each new line.
The menu's Leaderboards button shows the top 20 players by badges earned (out of 11). Players with the same count share a rank, and the one who earned their latest badge first is listed first. Anyone can open it, guests included. A signed-in player sees their own row (or their rank if they are outside the top 20) and a Hide me from the leaderboard switch; a hidden player disappears from the list but still sees their own rank. Only names, ranks and counts leave the database: two read-only functions (leaderboard_top, leaderboard_me) do the counting, so the badge and profile tables stay private to their owners. The server stamps each badge's time, so nobody can back-date one to win a tie; badge counts are still self-reported (nothing checks a saved answer), which is fine for a friendly board but not for prizes. It needs supabase/migrations/20261017010000_leaderboards.sql applied after the accounts migration (check it locally with supabase/tests/leaderboard.sql); until then the screen says "Can't reach the leaderboard." and everything else works as before.
Profile photos. A signed-in player can press [ Change photo ] on the Leaderboard screen to choose a picture (JPG, PNG or WebP, up to 10 MB). A crop window opens with a round frame: drag the picture (or use the arrow keys) to choose which part is inside it and zoom with the slider (or + and -, up to 4×); [ Save photo ] keeps it and [ Cancel ] leaves your old photo alone. The browser then cuts exactly the part inside the frame and redraws it as a 96×96 JPEG (which also drops camera data such as location), and only that small file (about 10 KB) is uploaded to a public Supabase Storage bucket called avatars. Each photo is named by a random key held in the avatars table, never by the user id, and leaderboard_top hands out the key, so the list still shows no account ids; a new photo gets a new key, so an old picture is never served from a cache. A round picture sits between the rank and the name, or the first letter of the name when there is none (or it fails to load); [ Remove photo ] deletes it, and hidden players show no photo. Guests cannot upload. There is no automatic moderation: the owner can delete a file in the Supabase dashboard (Storage, avatars) and remove the row from the avatars table. It needs supabase/migrations/20261019000000_avatars.sql applied after the leaderboards one (check it with supabase/tests/avatars.sql; it also replaces leaderboard_top and leaderboard_me with versions that add a photo column; the list keeps working before or after, and until it is applied the photo buttons say "Couldn't save your photo. Try again."). If a replacement upload fails, the old photo is gone too and the player is told to try again.
North of Dev Village (walk up the new road at the top of the village, through the gap in its north hedge) lies the Hall of Fame, the leaderboard as a place. The top 10 players stand in it: the first three on the stage, on gold, silver and bronze podium blocks (their hoods match), and ranks 4 to 10 on the ground below. Each is drawn as their own class hero, with a name plate floating above the head: their round profile picture (or the first letter of their name) and their name, cut to eight characters on the plate. Spots nobody has earned yet show a grey silhouette and a ?.
Walk up to a figure and press E (or tap it) to read who they are in the log: Alice: rank 1, 3/11 badges, Mage. Tied players keep their true rank (two players tied for first both read "rank 1"; the stage fills in list order). Names go through the same rude-word filter as the leaderboard. The signpost in the corner explains the place. The list is fetched each time you walk in (not live while you stand there): while it loads the log says "The Hall is waking up…", and if the leaderboard cannot be reached, "Can't reach the leaderboard." and the spots stay empty. Anyone can visit: guests, signed-in players and teammates (hidden players never appear). The world map has a Hall cell above the village.
The class comes from one extra column on leaderboard_top (cls: the class key from the account's private metadata, cut to 12 characters, and nothing else of the metadata). It needs supabase/migrations/20261019010000_leaderboard_class.sql applied after the avatars one: run it in the Supabase SQL Editor (the connector holds DROP statements for approval) and check it with supabase/tests/leaderboard.sql. Until it runs, the client still works: a row without a class is drawn as the default Warrior.
src/game/ pure game rules: constants, classes, geometry, clock, cipher, logic, challenges, roll, cards, team, wall, zones, village, forest, island, lamp, reducer
src/learn/ the challenge engine and question bank: live check, shuffling, access codes, the 11 chests and their questions
src/chat/ chat rules and commands: text cleaning and masking, display names, ping places, the command line
src/hooks/ keyboard controls, game timers, team session, chat feed, pings
src/net/ team transports: Supabase (Online), BroadcastChannel (Same computer), in-memory (tests); the shared Supabase client
src/auth/ accounts: name and password rules, the auth client (Supabase and in-memory), useAuth, add-email
src/leaderboard/ the leaderboard: types and parsing, the store (Supabase and in-memory)
src/progress/ saved badges: the store (Supabase and in-memory), restoring a game from them, the saver
supabase/ the accounts and leaderboards migrations, the `account` Edge Function and the SQL checks
src/render/ the pixel-art map: world geometry, sprites, areas/ (each zone's art), terrain, motion, scene description and painting
src/screens/ AuthScreen, ChooseName, SetPassword, ClassPicker, Leaderboard, MainMenu, TeamLobby, ChallengeTerminal + challenge/* (chests, gate, scroll, Matcher, keypad), Codex, LogicModal (tower), chat/* (chat panel and announcer), overworld/*
src/ui/ Panel, Button, Meter, TerminalDialog primitives
Figma Make wireframe: https://www.figma.com/make/Um3mf7sQOJeCYGX5jdffnz/Create-Wireframe--Copy-
Spec with exact values: docs/superpowers/specs/2026-10-07-devlandia-ui-spec.md
Visual mockup: docs/reference/game-ui-mockup.svg
Implementation plan: docs/superpowers/plans/2026-10-07-devlandia-ui.md
Food (inventory): the healing finds (herb, cactus fruit, cold drink, garden carrot) and the keeper's soup are packed into your bag as food instead of healing on the spot. The first inventory slot shows Food ×N; click it to eat one (+1 HP, never past the maximum; "not hungry" at full health keeps it). The Key slot is still a placeholder. A small pop-up fades over the map when an NPC gives you food ("Thank you!": the ranger's stew, the nomad's waterskin, the keeper's soup) and when you eat or drink ("Yummy!", "Delicious!", "Tasty!", "Mmm, so good!", "Refreshing!", in turn), next to the scroll's "Ohh, a scroll!".
[ Give food to <name> ]Day and night: the animals keep hours. By day (and at dusk) the squirrel, hen, goat, camel, lizard, birds and vultures are out; at night they turn in and are not drawn. From dusk the owl, the fennec fox and the mountain fox come out and sleep through the day. The deer, rabbit, snake, scorpion and crab never sleep. The campfires (Peaks camp, Dense Forest and Foggaten) burn from dusk until dawn and are cold logs and ash by day, with no flame or glow. /light day and /light night change the animals and fires for your view too. It is decoration only and changes no stats.
A bigger Peaks: like the forest, desert and beach, the C++ Peaks are 2 × 2 screens (640 × 360 art pixels) and the camera follows you; − all the way out shows the "Whole map". Everything keeps its place as a percent of the area, so the camp, gate, river, tower, cache and dock are about twice as far apart; a step is still the same number of art pixels (two percent instead of four), the river's cold is exactly the ice, the north wall runs across the whole width with its gate in the middle, and the new snow is filled with pines, boulders and drifts.
Snowy Peaks: the whole map is snow. It snows by default (turn it off for your view with /weather clear), the snow sparkles, you leave footprints that fade after a few seconds, your breath puffs in the cold and a gust of snow sweeps across now and then. At night an aurora ripples across the sky. Base camp has a ski lodge with smoke and a glowing window and a campfire with two benches; a frozen waterfall and two ice caves sit along the mountain edge; a fox, a mountain goat and three birds live on the map (the fox and goat drift away if you get close); wooden trail posts line the way from camp to the gate, from the gate toward the tower and east toward the dock; and a bouncing arrow marks the ski lodge (the HTML chest) until you earn your first badge. On the east road, [P] Signpost lists where everything is and what is still locked, and [W] Weather Station shows the time of day. Once the signal tower is powered (for the whole team), a hidden [C] Cave appears in the north-west with a short story card. All of this is decoration or a read-only card: nothing changes your HP, quest or badges, and the footprints, breath, gusts, aurora, birds and animals stand still if your device is set to reduce motion.
Ski Lodge (indoors): every new game (solo or team) begins inside the lodge, and a respawn brings you back to it. The lodge in the Peaks' south-west camp has a door: walk into it (along the bottom row, onto the door) and you are inside, in a cosy one-screen room with bunks, a table, a bookcase and a crackling fireplace; walk onto the door mat at the bottom to go back out. It is always lit, and the Peaks' snow and cold stay outside. The lodge keeper ([K] Keeper, or /ping keeper in team games) gives hints for the next step of the story and, once per game, a bowl of soup that goes into your bag as food (not offered in hard mode). The HTML chest is on the shelf by the fire. An open review book lies on the table (Book; press E beside it): filter it by language (All, C++, HTML, CSS, Java, JavaScript, PHP, SQL, Python, C#) and read the question, your answer and the explanation for every language you have earned; the ones you have not earned are locked ("Earn the HTML badge to read this."), and their questions are not shown. Esc or [X] CLOSE shuts it. It is personal to you in a team game. On the mini-map the lodge is shown on the Peaks cell, at its door, and teammates inside it appear there too.
North wall: a stone wall runs across the map at the snow line, and the Terminal Gate is the only way through. The gate stays locked until you solve its terminal, so the river and the Signal Tower are out of reach until then (clicking them only shows what they are).
Dev Village: walk left off the map near base camp, through the gap in the hedge. Ada ([V] Ada, or E next to her) gives a hint for your next step. The signpost ([P] Signpost) points the way back east to the Peaks.
Dense Forest: the forest is a big place, 2 × 2 screens, with the camera following you; flower patches, fern and mushroom clumps and fallen logs fill the floor, and the woods beyond the edge thin out: the trees, the paths, the fireflies, the falling leaves and the animals (deer, rabbit, squirrel) spread over all of it, and the campfire glows at its fire. walk down off the map at the south of the Peaks, through the gap in the trees (the Forest ↓ sign). The forest has no wall and no fog. The ranger ([R] Ranger) gives hints for your next step, and the campfire and the signpost ([F], [P]) can be inspected, and the old oak holds the JavaScript chest. The signpost lists where everything nearby is (and, once you've decoded the scroll, which way the treasure lies), and it and the north gap lead back to the Peaks. A winding dirt trail runs from the north gap through the clearing, and leaves drift down through patches of sunlight (the light fades at night, and everything holds still if your device is set to reduce motion). Birches, ferns, stumps, logs, toadstools and flowers fill the woods over a mossy floor; a deer, a rabbit and a squirrel wander and shy away when you come near; morning mist drifts by day, and at dusk and night fireflies come out and an owl blinks in the old oak. Five landmarks (inspect them with E or a click; their captions show on hover on a small map) each link something in the woods to a coding idea: the Hunter's Cabin (if), the Stone Well (recursion), the Log Bridge (an API), the Fairy Ring (a loop) and the Hollow Tree (a variable). The ranger also asks for three glow mushrooms (violet, pulsing, in the north-west, north and east): pick each with E beside it (each pick teaches a fact about arrays, counted from 0), then talk to her and she cooks a stew and packs you a bowl as food, once.
Terminal Gate: press E next to it, or click [G] Gate. Fix the CSS property to open the gate. Stuck? Click [ USE HINT ITEM ].
Sunbaked Desert: The desert is a big place too, 2 × 2 screens, with the camera following you: a palm grove rings the oasis, cactus and rock patches, a ruin and bones fill the sand between the landmarks, and the dunes beyond the edge thin out into open sand. "Whole map" now fits the whole zone to your window exactly (it may use fractional scaling), so no wide border of scenery shows when zoomed out; the road, the dunes, the vultures (a pair over each screen), the tumbleweed and the sandstorm cover all of it, and a few more cacti, an arch, a skull and a palm lie out in the dunes. walk off the Dense Forest's west edge, through the gap in the trees (the ← Desert sign). Golden dunes, cacti, dry bushes, a few palms, an oasis with a footbridge and an old pyramid. A nomad ([N] Nomad) tells you where things are, the pyramid and the oasis hold the Java and Python II chests, and the signpost ([S]) points back to the forest; the east edge (the Forest → sign) leads back. Heat haze wavers, sand blows slowly across, a tumbleweed rolls through and a lizard suns itself on a rock (all still if your device is set to reduce motion). Ripples mark the dunes, with flowering saguaros, bleached skulls and rock arches among the cacti. A scorpion scuttles by the sand road, the nomad's camel shifts its weight, a snake slithers away from you, vultures circle overhead and a fennec fox trots out at dusk. A mirage shivers in the far dunes by day, sand devils spin across, the sand sparkles under the moon, and every two minutes a sandstorm sweeps across for a few seconds (never if your device is set to reduce motion). Five landmarks (inspect them with E or a click; captions show on hover on a small map) each link something in the dunes to a coding idea: the Caravan Camp (classes), the Old Well (async), the Buried Door (a password check), the Dry Riverbed (null) and the Obelisk (a cipher). The nomad also asks for three lost water jars: pick each up with E beside it (each teaches a string method), then talk to her and she gives you a waterskin of food, once. The desert has no fog and no snow and changes none of your stats. /ping nomad works in team games, as do /ping java and /ping py2 for the pyramid and the oasis.
Sunny Beach: The beach is a big place, 2 × 2 screens, with palm groves, rocks and umbrellas down the whole shore and thinner scenery beyond the edge: the map follows you as you walk, the zoom − all the way out shows the whole beach ("Whole map"), the mini-map outlines what the main map shows, and a teammate's ping off the screen shows as an arrow at the edge. The foam, the tide, the gulls and the crab now run the length of the whole shore. walk off the Dense Forest's east edge, through the gap in the trees (the Beach → sign). Pale sand, palms, rocks, umbrellas, a sandcastle, shells, a beached boat, a shipwreck and a pier running into the sea (you can't walk into the water). A fisher ([F] Fisher) tells you where things are, the pier and the shipwreck hold the C++ I and C++ II chests, and the signpost ([S]) points back to the forest; the west edge (the ← Forest sign) leads back. Foam washes along the shore, the sea glints, gulls fly over and a crab scuttles along the sand (all still if your device is set to reduce motion). The tide comes in and out every 12 hours of game time (the top bar says Tide: Low, Rising, High or Falling while you are on the beach): at high tide shallow water covers the strip of shore by the sea, and at low tide it uncovers three extra shells. Two lanterns on the pier glow from dusk, an angler's line hangs from its end with a bobber, and a rowboat is moored beside it. The [C] Sandcastle is a puzzle: press E and pair each building line with its step number (first to fifth); getting the order right finishes the castle, which then wears a flag. The beach has no fog and no snow and changes none of your stats. /ping fisher works in team games, as do /ping cpp1 and /ping cpp2 for the pier and the shipwreck.
Hidden spots: each of the forest, the desert, the beach and the Peaks hides two small spots out in the far corners of the new part of the map (Moss Clearing and Fox Den; Hidden Cave and Dune Ridge; Tide Pool and Message in a Bottle; Frozen Pointer Stone and Buried Ski Hut). They have no caption until you stand beside them, so look for them on the map (zoom out to see a whole area). Press E beside one to find it: you get a short card linking the spot to a coding idea and a line in the log. Found spots stay on the map and twinkle. The Codex shows Secrets found: n/8. They are personal, so a team game does not share them, and they give no badge and change no story step.
Foggaten Island: once the Terminal Gate is solved, the boatman at the Peaks' east dock ([B] Dock, on the shore) sails you across (until then it only says he is waiting for the gate). The island is one foggy screen: a hermit ([H]) gives hints for your next step, and an unlit lighthouse, a campfire and some ruins ([L], [F]) can be inspected; the ruins hold the Python I chest. The island's own dock sails you back. A slow mist drifts over it (still if your device is set to reduce motion) until the lighthouse is lit, when the mist fades away, and the crossing fades to black for under a second. Nothing on the island changes your HP, speed or the quest. The lighthouse lamp: press E beside the lighthouse ([L], Light the Lamp) to open its lamp lock. Set the eight switches (128 on the left down to 1 on the right) to the binary for the letter H and press [ RUN LAMP ]. A wrong setting says which letter the lamp sent instead, and after two wrong tries the drone's tip appears. Lighting it is shared with the whole team: the lamp glows and a beam sweeps the fog (steady if your device is set to reduce motion). It changes no stats. A sailing mini-game, a 12th chest and a second island come in later phases.
Code chests: there are no chests lying on the ground: each of the 11 is inside a landmark, and the landmark is the chest. HTML is on the shelf in the Ski Lodge (go in through the lodge door) and CSS in the Ice Cave (Peaks; the cave is north of the wall, so it waits for the gate), PHP in a hut and SQL in the windmill (Dev Village), C# in the Archive, JavaScript in the Old Oak (Dense Forest), Java in the Pyramid and Python II at the Oasis (Sunbaked Desert), C++ I on the Pier and C++ II in the Shipwreck (Sunny Beach), and Python I in the Ruins (Foggaten Island). Press E next to a landmark (Search Windmill) or click it; its caption gets a ✓ once you've earned its badge. Each chest asks one question, picked at random for each game from a bank of 12 (it avoids the two it asked in your last games on this browser): fill the blank in a snippet, or pick one of four answers (some ask what a snippet prints, which line has the bug, or what order the lines run in), or answer true or false. A right answer earns that language's badge, and the chest stays open so you can review it.
Typing or Blocks: every code blank has a Type / Blocks switch. In Blocks mode, tap a tile to put it in the blank, drag it there with the mouse, or on a touch screen hold it and drag. [ UNDO ] and [ RESET ] step back through your edits.
Live syntax check: as you type, a line under the code says when what's in the blank can't be valid there (an unclosed quote, a word that isn't an SQL keyword…). It never tells you whether the answer is right. [ SUBMIT CODE ] waits until the blank passes the check, and after two wrong answers the drone shows its tip.
Syntax Terminal and the Archive: in Dev Village, use the Syntax Terminal (Terminal) and pair 5 snippets with their languages. Solving it prints a 4-character access code; type it at the Archive's keypad to unseal it and reach the C# chest.
Help and tutorial: press ? (or [?] Help in the top bar, or [?] HCI Help / Tutorials on the main menu) for a Help window with four tabs: Controls (every key and its touch equivalent), How to play (the goal, where the chests are, the world, the story), a six-step Tutorial with a "Try it" line each, and Tips. The game pauses while it is open, and ? or Esc closes it.
The finale and New Game+: earn all 11 badges and, when you close the last chest, a Master of Devlandia card opens with confetti, your badges, the real time you played and the hints you used (every hint adds 2 minutes to the time, and the certificate says so: "Time played 25 min (includes 3 hints)"). From then on your explorer wears a golden crown, Ada congratulates you, and the village lights fireworks (they hold to one small burst if your device is set to reduce motion). The Codex has [ ★ View the finale ] to see the card again. [ Get certificate ] on the card opens a Devlandia Graduate certificate with your name (your account's, or type one if you are a guest), your 11 badges, the date and your game time: [ Download PNG ] saves it as a picture and [ Print ] opens a printable landscape page (allow pop-ups for the site if your browser blocks it). [ NEW GAME+ ] (solo games only) starts a fresh hard run: each chest asks one of the harder questions from the later half of its bank, the top bar says Hard mode (a wrong answer costs a heart in every run now). A hard run never touches your account's saved badges.
Codex: press C (or [C] Codex). It shows a badges bar with a hint at the nearest chest you haven't opened, a Story checklist (north gate, frozen river, signal tower, Supply Cache, scroll, Golden Semicolon, lighthouse lamp, Archive) with where to look for what's left, and all 11 badges grouped by zone with a coloured language tag each. Filter by All, Earned or To find. [ Go there ] on an unearned badge closes the Codex, writes where it is and how to get there (the gate, a boat) in the event log, and rings the landmark on your map if you're in its zone. Earned badges open to the question, your answer and its explanation, and [ Practice ] lets you answer that language's other questions as a study sheet, which never changes your badges or game.
Quest: go through the gate and walk onto the Frozen River to survey it. Until the Signal Tower is powered, the ice drains 8 HP every 1.8 seconds while you stand on it.
Supply Cache: hidden inside the Hollow Tree in the north-east of the Dense Forest (south of the Peaks): press E beside the tree to open it for a Repair Patch; an "Ohh, a scroll!" pop-up fades in over the map the first time you find the scroll. It does not need the north gate. The tree's card keeps its variable lesson (let acorns = 3;).
Hidden artifact: the Supply Cache also holds an encrypted scroll. Click [ Decode Scroll ] in the bottom bar and decode it (it uses ROT13: every letter is shifted 13 places). The decoded clue says where the Golden Semicolon is buried; take the boat to Foggaten Island and walk to its south-east corner (the dig spot is only there) and press E (or the touch [E] button) to dig it up. The spot stays hidden until you've decoded the scroll.
Signal Tower: press E next to the tower in the snowy top-left (or click [T] Tower). Flip switches A–D and press [ RUN CIRCUIT ]: every line (A AND B, B XOR C, NOT D) must output 1. The readout shows your switches as a binary and decimal number. Powering the tower lifts the fog of war and rebuilds the bridge, which makes the river safe to cross.
At 0 HP you're downed. Click [ Respawn ] to wake up inside the Ski Lodge, by the fire, with one heart left (from any zone, solo or team); eat food, or get some from a teammate, to heal.
The clock advances 5 in-game minutes every 2 seconds and cycles through day, dusk and night.
Commands: the side panel has a LOG tab and a CHAT tab (COMMANDS in a solo game). Type /help to see what runs where you are:
/where where your teammates are · /time the game clock · /badges [name] your badges, or what you know of a teammate's/ping [place] mark your spot, or a place (gate, tower, cache, river, dock, pier, lighthouse, hermit, ada, signpost, terminal, archive, ranger, campfire, nomad, fisher, or a chest such as html, cpp1, sql), for your team/weather snow|clear snowfall and /light day|night|auto lighting, on your own map only/mute name and /unmute name hide or show a teammate's messages (in the lobby, use the [ Mute ] button on their row)Commands answer only you (and /ping shows a ring on everyone's maps for 5 seconds). None of them can skip a puzzle or change anyone else's game.