Game Guide

The Soltara Handbook

Soltara is a free, browser-based Solana MMO where the grind is the game. Skill up like old-school RuneScape, throw down in arena duels, push north into the lawless PK wilderness, and run a player-driven gold economy validated coin by coin on a real server. No download and no token gate: connect a Solana wallet or jump straight in as a guest, and you are in the world in seconds.

This is the complete, no-fluff breakdown of every system that is live today, plus an honest look at what is coming next.

At a glance: Free to play. Optional Sign-In-With-Solana. Levels 1 to 100. Five skills (Combat, Mining, Fishing, Cooking, Smithing). Gather, duel, and PK your way to gold. Server-authoritative everything.

Quick Start

New here? You'll be playing in under a minute:

  1. Get in. Type a name and hit Play as Guest, or Connect Wallet, Sign In (a free Solana signature, no gas, nothing leaves your wallet).
  2. Pick a world. Click World 1 (the live one).
  3. Move. Click the ground to walk there. Tap the run button to sprint, watch the gold stamina orb.
  4. Earn your first gold. Walk to a rock and mine it, or a fishing spot and fish, to fill your Satchel with Tin Ore / Shrimp.
  5. Cash out. Open the Wallet / Satchel panel and hit Sell All for instant gold, or list your goods on The Bazaar.
  6. Go deeper. Knock out Daily Grind quests for bonus gold + XP, kill monsters for loot, duel players in the Arena, or push north into The Trenches to PK (and risk your loot).

That's the whole loop, gather, sell, fight, repeat. Everything else in this guide is depth on top of it. Welcome to the grind.

1. Getting Started & Your Account

Soltara meets you at a single login screen with one job: get you into the world fast. There are two doors in, jump in instantly as a Guest, or connect a Solana wallet and lock in a permanent identity. Both land you in the same live world; the wallet path just makes your name and progress provably yours.

At a glance: Guest = instant, no friction, name not reserved. Wallet = a real Sign-In-With-Solana handshake (no gas, no transaction), a globally unique name locked to your wallet, and cryptographic ownership of your account.

The Two Ways to Play

1. Play as Guest (the blue "Play as Guest" button)

The fast lane. Type a name, hit the button, and you're in. No wallet, no signature, no friction. Guest names are not reserved or unique, two guests can run around with the same name, and nothing about a guest name is "owned." A guest account is keyed purely by the name you typed (sanitized to a filename), so if you come back later with the exact same name, the server reloads that name's saved look and progress. There is no password, so a guest "account" is really just a name anyone could re-enter.

2. Play Now, Connect Wallet (the gold "Play Now" button, Sign-In-With-Solana)

The gold "Play Now" button sits stacked above the guest button. This is the real account path, and it runs a proper Sign-In-With-Solana (SIWS) handshake:

  • Clicking it calls Phantom (window.solana.connect()). If no Solana wallet is detected in the browser, you get a toast: "No Solana wallet found. Install Phantom from phantom.com, then refresh." and the button shakes.
  • Once Phantom returns your public key, the button flips to "Enter Soltara", the guest button hides, and a "Connected · <addr>" chip appears top-right (address shortened, e.g. BLp8…h4Li).
  • Behind the scenes the client immediately asks the server "what name does this wallet already own?" via GET /api/walletname?pubkey=.... If the wallet has a saved name, the heading changes to "Welcome back" and you get "Welcome back, <name>! Tap Enter Soltara.", your name is pre-filled and you enter with one tap, no retyping. If it's a new wallet, you're prompted: "Pick a username, it'll be locked to your wallet."

When you actually enter the world, the cryptographic proof runs (server-authoritative, in this order):

  1. Client to server: request a challenge for your pubkey (CmdRequestWalletNonce).
  2. Server: mints a one-time 32-byte CSPRNG nonce, bound to your connection + pubkey, with a 120-second TTL (single-use; stored server-side as the source of truth). A DoS backstop caps the store at 5,000 entries.
  3. Server to client: sends the nonce, and the client builds the exact canonical message:
    Soltara Sign-In
    Domain: play.soltara.gg
    Wallet: <your pubkey>
    Nonce: <nonce>
    Issued: <timestamp>
    Signing proves you control this wallet. No transaction, no fees.
  4. You sign in Phantom (window.solana.signMessage, UTF-8). This is a plain message signature, there is NO transaction, NO gas, NO SOL spent, nothing leaves your wallet. It only proves you hold the key. The message text says so outright.
  5. Client to server: submits the 64-byte Ed25519 signature.
  6. Server: consumes the nonce (one-time, can't be replayed), rebuilds the exact message, and verifies the Ed25519 signature using the BouncyCastle library bundled with Mirror. Any expiry / pubkey-mismatch / bad-signature is rejected ("Challenge expired," "Signature did not verify," etc.).
Phishing/replay defense: the domain line + server-minted single-use nonce + 120s TTL together mean a captured signature can't be reused and can't be tricked out of you on a fake site.

Only after this passes does the server trust the wallet. Guests never touch any of this. One special case: the founder wallet is flagged isTeam on verify, giving it a gold TEAM nameplate and the right to claim otherwise-reserved names.

Username Rules

RuleGuest namesWallet-locked names
Minimum length3 chars (login button stays disabled below 3)3 chars ("Name must be 3+ letters or numbers.")
Maximum length (typing)12 chars (warning shown above 12; button disabled)12 chars at the login box; claimed names may be 3-20 so returning players with longer locked names aren't re-blocked
Server-side cap32 chars (sanitizer)20 chars ("Name is too long.")
Allowed charactersSanitized to lowercase a-z, 0-9, _, - (everything else stripped)Same sanitizer for the storage key; the original-case display form is kept
Reserved names blockedNot enforced on guestsYes, see list below
UniquenessNot unique, guests can collideGlobally unique & wallet-locked via the name registry

Live username UX rules (login screen): Type < 3 chars, warning lights up, button disabled. Type > 12 chars, warning lights up, button disabled. Empty, < 3, or > 12, button disabled. Valid 3-12, button enabled.

Reserved names (blocked for wallet claims; founder wallet is exempt):
admin, administrator, mod, moderator, soltara, support, system, official, staff, root, owner, help, null, undefined, guest, server, console, everyone

Wallet name-locking mechanics:

  • Claiming writes a registry entry (name → pubkey) that locks the name to your wallet. Anyone else trying to claim it gets "That name is already taken."
  • One active name per wallet, claiming a new name automatically frees your previous one.
  • Claiming is idempotent for the same wallet (re-claiming your own name is fine) and only runs after the signature is verified.
  • Success message: "<name>" is now locked to your wallet.

Worlds

Soltara presents a 3-world select screen, but only World 1 is live. There is exactly one real game server:

WorldStatusDisplay
World 1LIVE, clickable, the real serverHonest "Online" (fake player count removed)
World 2Coming soonGrayed out + dark overlay + "COMING SOON", clicks blocked
World 3Coming soonGrayed out + dark overlay + "COMING SOON", clicks blocked

The fake "player count" numbers that originally decorated all three worlds have been stripped. Worlds 2 and 3 are a roadmap tease but fully non-interactive, the overlay both grays the panel and eats clicks.

What Is Saved to Your Account

Persistence is server-authoritative, stored as one JSON file per account on the dedicated server. Guest accounts are keyed by sanitized name; wallet accounts are keyed by base58 pubkey, with the name registry alongside. Writes are atomic (temp-file swap) so a crash mid-save can never corrupt an account, and the whole subsystem is fail-safe, if storage breaks, the game keeps running, you just don't persist that session.

Saved & persists between sessions (active today):

FieldNotes
NameYour identity; wallet names also persist in the registry
Wallet pubkeyFor wallet accounts ("" for guests)
Last seen (UTC)Timestamp
Character lookFull hero customization, hair style/color, skin tone, pant/shirt/socks/shoe/border colors, body type, gender. Only saved once you've actually customized (hasLook), so a brand-new default avatar is never frozen in as index-0. Indices are clamped on reload in case art packs changed size.
Level & total XPServer-authoritative leveling, 1-100 (curve below).
Per-skill XP3 tracks, 0 = Combat, 1 = Mining, 2 = Fishing, same curve as account level
GoldServer-authoritative balance (the Bazaar can even credit gold to offline accounts from sales made while you were logged out)
Satchel itemsStackable inventory v1, 0 = Tin Ore, 1 = Shrimp
Wins / LossesCombat record
Daily Grind questsThe UTC date the progress belongs to, plus per-quest progress (4 slots) and done flags (4 slots)

When the server learns your name (guest path) it restores XP, economy, skills, items, and look, or stamps a fresh stub for a brand-new name. For wallets, the verify path does the same and hands back your already-claimed name so you're greeted by your saved name the moment you sign in. Progress is written on autosave (every 60s) and again on disconnect/logout.

Note on guest security: because guests have no signature, a guest "account" is only as protected as the name being unclaimed and un-guessed, anyone can re-enter a guest name and load its saved look/progress. Wallet accounts are the only cryptographically owned identities, and only wallet names are guaranteed unique. The future $SOLT token is not part of the current account/economy data, nothing token-related is saved today.

2. Controls & Getting Around

Soltara plays like old-school RuneScape: point and click. No twitchy keybinds to memorize. If you can click, you can play. This section covers how to actually move, sprint, travel, and stay alive.

At a glance: Click the ground to walk. The gold orb is Stamina (sprint drains it), the red orb is Health. Open the World Map to fast-travel. Die, respawn in town.

Moving Around

  • Click anywhere on the ground to walk there. Your hero auto-paths across the world on the navmesh, exactly like OSRS.
  • Drag to swing the camera around your character; scroll to zoom in and out.
  • Walking is the default; running is opt-in (below).

Sprint & Stamina, the gold orb

That gold orb in the top-left corner (the big number, up to 600) is your Stamina, your run energy.

  • Tap the Run / Sprint button to toggle running on and off. Running moves you noticeably faster than walking.
  • While you're running and actually moving, stamina drains steadily.
  • When stamina hits 0, you're forced back down to a walk until it recovers. You can't sprint on empty.
  • Stamina regenerates while you stand still or move slowly (roughly +0.5 per second), so rest a beat between sprints. The orb fills back up and the number climbs toward 600.
Tip: Save your sprint for crossing open ground or escaping a fight. Don't burn it all walking around town.

Health, the red orb

The red orb (the number near 99) is your Health. You start nearly full.

  • You take damage in monster fights, Arena duels, and Trenches ambushes; the red orb drains as you get hit.
  • If your health hits zero you die and respawn back at the town spawn point with your health restored. No XP or gold is lost to a monster death.
  • Dying in The Trenches is different: on top of respawning, you drop a Rekt Bag with your materials and a cut of your gold (see The Trenches). Town deaths are safe; wild deaths cost you.

Fast Travel, the World Map

You don't have to walk everywhere.

  • Open the World Map (the globe icon, top-right by the minimap) and click a destination to fast-travel. A teleport prompt pops up right at your click.
  • There's also a teleport button for quick hops and returns to spawn.
  • The minimap (top-right) is for your immediate surroundings; the world map is the big-picture travel tool. Town names render crisp on both.

The Right-Click Menu (and a heads-up on Trade)

Right-clicking another player opens a context menu: Follow, Walk to, Trade, Challenge (and, inside The Trenches, Attack).

Heads-up: direct player-to-player Trade is not wired up yet. The option appears in the menu but doesn't open a trade window. For now, all trading goes through The Bazaar (server-escrowed, dupe-proof, with offline payouts). Treat the Trade entry as coming soon, same as the in-town bank. Challenge (duel) and Attack (Trenches) are fully live.

3. Levels & Progression

Soltara levels you up two ways at once: your overall Character Level and five separate Skills, and almost everything you do raises both at the same time. Everything here is server-authoritative, XP totals live only on the server and clients cannot influence them; your level is synced to your nameplate, but the raw XP never leaves the server except as a read-only copy pushed to your own HUD.

At a glance: Two tracks, Character Level (1 to 100) and five Skills (1 to 100 each). XP comes ONLY from doing things, no idle, no AFK. Character 100 is a true mountain at about 2.7 million XP; skills climb a gentler curve.

Two Kinds of Levels

  • Character Level (1 to 100), your overall level, shown on your nameplate and the XP bar. It climbs a steep curve, about 2,704,380 XP to reach 100.
  • Skills (1 to 100 each), five tracks: Combat, Mining, Fishing, Cooking, and Smithing, shown in the Skills panel. They use the original, gentler curve, about 247,500 XP to max one.

Most actions feed both at once: kill a goblin and you earn Combat XP and Character XP; mine tin and you earn Mining XP and Character XP.

The Character XP Curve

The ceiling is level 100, where the XP bar just reads MAX. The early levels fly by, but the top is a mountain: reaching Character Level 100 costs about 2,704,380 total XP, and more than half of that is earned in the final 10 levels alone. The curve stays gentle through the low levels, then steepens hard past level 20.

The Skills Curve

Each of the five skills uses the original, gentler curve, so skills climb much faster than your Character Level (you will max skills long before your character). Total XP to reach a skill level:

Skill levelTotal XP to reach
250
5500
102,250
2515,000
5061,250
100247,500

Leveling Is ACTIVITY-BASED, No Idle, No AFK

This is a hard rule, and it's deliberate. The old passive "10 XP/min playtime" trickle was removed entirely (2026-06-11 founder call): levels now come only from DOING things, duels, mining, fishing, kills. Standing in town doing nothing earns you exactly zero XP. You level by playing, not by leaving the client open.

Exact XP per Action

All XP amounts are server-side constants that clients can't tamper with:

ActionXPCooldownNotes
Duel win150-Goes to the survivor. Also credited to the Combat skill.
Duel loss25-Consolation XP, you still earn for showing up. Also to Combat.
Mining (per ore)157 sAlso to the Mining skill; yields 1 Tin Ore.
Fishing (per catch)128 sAlso to the Fishing skill; yields 1 Shrimp.
Cooking (per cook)10~1.2 sAlso to the Cooking skill; cooks a shrimp.
Smithing (bronze sword)40~4 sAlso to the Smithing skill; costs 3 Tin Ore.
Mob kill12-2003 sScales with the monster (full table below). Also to the Combat skill.
Deep mine (rich vein, Trenches)30 (2x)~7 sDouble-yield vein deep in the wild; +2 Tin Ore.
Deep fish (teeming pool, Trenches)24 (2x)~8 sDouble-yield pool deep in the wild; +2 Shrimp.
Trenches ambush bonus+50-Winner-only, stacks on top of the 150 duel-win XP, 200 XP total for a wild PK kill. (The +50 goes to account XP only, not the Combat skill track.)

Gathering and combat are rate-limited on the server (the cooldowns above), so spamming the command can never out-earn honest play.

Per-Monster Kill XP

Mob-kill XP is no longer flat, it scales with what you killed:

MonsterXP per kill
Chicken12
Cow22
Wild Animal30
Bear35
Goblin55
Brigand80
Demon140
Cyclops200

Quest rewards (the Daily Grind). Completing a daily grants a one-time XP bonus on top of its gold payout; these reset on the UTC date boundary:

Daily questGoalGoldXP reward
Mine 5 rocks5100g50 XP
Catch 5 fish580g40 XP
Slay 3 mobs3120g60 XP
Win a duel1200g100 XP

Clearing the full daily board is worth 250 XP + 500 gold on top of whatever the underlying activities already paid out.

Mastery Capes

Reaching level 99 in any skill unlocks that skill's Mastery Cape, and a server-wide announcement fires the moment you claim it. Cape colors: Combat red, Mining grey, Fishing blue, Cooking orange, Smithing iron. Capes are purely cosmetic and are never lost on death, a permanent flex for maxing a skill.

The On-Screen XP Bar

A slim, Soltara-styled bar sits top-center of the screen whenever you're in-world (out of the way of the minimap on the right and chat at the bottom). It shows:

  • "Lv N" on the left
  • A gold fill (#C2A45A) tracking progress toward the next level
  • current / needed XP text inside the bar (e.g. 175 / 225 XP), XP within the current level, not lifetime totals
  • At level 100 the bar fills solid and reads "MAX"

It ticks four times a second from the locally-cached values the server pushes to your own client.

Floating Nameplates ("Lv N Name")

Every player wears a floating nameplate above their head, billboarded in world space and kept live in sync with their level, so when someone dings a level, their plate updates in real time for everyone. Format is Lv N Name, with the level badge colored by tier and the name in cream (#ECE3C8).

Level-tier badge colors (the flex climbs with your level):

LevelsColorHex
1-10Green#7FE66B
11-20Teal#35D6A4
21-30Cyan#35C2E6
31-40Blue#4F9BF5
41-50Indigo#6E78F0
51-60Purple#9D67F0
61-70Magenta#CB5BDC
71-80Rose#F25B9A
81-90Orange#FF8636
91-100Gold#FFD400

The badge color climbs one band every 10 levels, from green at the start all the way to gold at 91-100, so a player's rank is readable at a glance across the map.

The [TEAM] founder badge. Verified founder/team accounts get a special override: the entire plate renders in Soltara gold as Lv N [TEAM] Name. This is driven by the server-authoritative isTeam flag, set only when a wallet's SIWS signature matches the founder wallet, so impostors cannot fake it by stuffing "[TEAM]" into a display name.

4. Skills: Five Parallel Grinds

Soltara runs a RuneScape-style parallel skill system layered on top of your overall Character Level. Every player has five independent skill tracks, Combat, Mining, Fishing, Cooking, and Smithing, each leveling on its own from 1 to 100. Doing an activity feeds both your Character Level and the matching skill track at the same time, so a mining session fattens your Mining level and your Character Level in one swing.

These tracks are server-authoritative: XP is granted only on the dedicated server, persisted per account, and pushed to your client for display.

Status note: the five skills are fully wired for XP, leveling, persistence, level-up toasts, and the Skills panel. The one thing a skill level unlocks today is its Mastery Cape at level 99 (a cosmetic flex, see Levels & Progression above); skills do not yet boost yields, scale damage, or gate content. Combat is the only skill earned from more than one source.

The Skill XP Curve

All five skills use the gentler curve (the one your Character Level used to use before it was made much steeper). Skills still cap at MAX_LEVEL 100, on the curve below.

XpForLevel(L) = 25·(L−1)² + 25·(L−1)
LevelTotal XP to reach
10
250
5500
102,250
2515,000
5061,250
100247,500

This is the same gentle curve the table in Levels & Progression describes, so maxing a skill (247,500 XP) is far quicker than maxing your Character Level (about 2.7 million).

The Five Skills: What Feeds Them and How Much

XP awards are fixed server-side constants. Each action is rate-limited on the server to its real cycle length, so spamming the command can never out-earn actually playing the loop. Combat is unique: it draws from three sources (mob kills and both sides of a duel).

SkillActionXP per actionServer cooldownAlso gives
MiningMine a rock157.0s+1 Tin Ore, "Mine" daily, +15 Character XP
FishingCatch a fish128.0s+1 Shrimp, "Fish" daily, +12 Character XP
CookingCook a shrimp10~1.2s+10 Character XP
SmithingSmith a bronze sword40~4scosts 3 Tin Ore, +40 Character XP
CombatKill a mob12-2003.0sscales by monster, "Slay" daily, + Character XP
CombatWin a duel150-+150 Character XP, duel W, "Win a duel" daily
CombatLose a duel25-+25 Character XP (loser still earns), duel L

Rules worth knowing:

  • Combat from duels is granted in the server fight-resolution coroutine, not via the rate-limited gather command, so it has no cooldown: it's gated by actually finishing a duel. Both fighters earn Combat XP: winner 150, loser a consolation 25.
  • The Trenches wild bonus (+50) for winning an ambush stacks onto account XP only, it is not routed into the Combat skill track. So a Trenches kill gives Combat the standard duel-win 150, and the extra 50 goes to your overall level alone.
  • A level-up handler ignores any out-of-range skill index and any non-positive amount, records the level before/after, and if you crossed a boundary it fires a level-up toast and re-pushes the skill cache to you.

Level-Up Feedback

Crossing a skill level triggers a 5-second success toast in this exact form:

MINING LEVEL UP! Mining is now level 7.

The skill name is uppercased for the headline (COMBAT / MINING / FISHING / COOKING / SMITHING). This is separate from the account-level toast ("LEVEL UP! You are now level N."), so a single action can fire two toasts at once when both your skill and overall level tick up together.

The Skills Panel

The Skills UI is a draggable HUD window in the Solana-degen-fantasy stone-and-gold style.

  • Skills pill: a 190×44 stone-colored pill labeled "Skills" in gold, in the left HUD pill column. Appears only in-world; click to toggle the panel.
  • Panel: a 400×260 gold-bordered, stone-filled window titled "SKILLS", draggable (drag key "skills"). Auto-closes when you leave the world.
  • Five rows in fixed order Combat, Mining, Fishing, Cooking, Smithing, each showing: the skill name plus a gold Lv N badge (e.g. Combat Lv 12), a blue XP fill bar over a stone track, and centered progress text reading currentInLevel / neededForLevel.
  • At level 100 the bar fills completely and the progress text reads "MAX".
  • Refreshes on a 0.5-second tick. If the cache is missing/malformed, each skill safely reads as 0 XP (level 1).

5. Gathering: Mining & Fishing

Soltara has two production "skilling" loops you can grind anywhere in the world without ever throwing a punch: Mining rocks for Tin Ore, and Fishing spots for Shrimp. Both feed the same server-authoritative reward pipeline, account XP, a parallel skill level, a Daily Grind tick, and a stackable item dropped straight into your Satchel, and both are rate-limited on the server so no amount of click-spam can out-earn an honest grinder.

At a glance: Mine = 6s swing to 1 Tin Ore + 15 XP (7s server gate). Fish = continuous catch loop to 1 Shrimp + 12 XP (8s server gate). Nodes don't currently deplete permanently; they reset in place.

Where the Nodes Come From

Rock and fishing-spot nodes are spawned once, server-side, at scene start, then network-spawned so every connected client sees the same nodes. Unlike NPCs/animals, mining rocks and fishing spots have no respawn method, they visually "deplete" and reset in place rather than being destroyed and respawned.

How to Mine a Rock

  1. Walk up to a rock. Once you're within 3 units, you're auto-snapped to a stand-off of 2.5 units, your NavMesh agent stops, and you turn to face it.
  2. The swing starts automatically. You log "you swing your pick at the rock" to public chat, your pickaxe is auto-equipped, the mining animation plays, and the client fires the mine command.
  3. Server runs the mine cycle. It waits 6 seconds, tints the rock red, then calls back into completion. After 2 more seconds the server resets the rock to white so it can be mined again.
  4. You get your loot: logs "you manage to mine some tin", drops a Tin Ore into your Satchel, fires the XP award, and clears the mining state.

How to Fish a Spot

  1. Walk up to a fishing spot. Within 6 units you're snapped to a stand-off of 3.5 units, your agent stops, and you face the water.
  2. Casting starts automatically. Your Fishing Net is auto-equipped and the fishing animation plays.
  3. Continuous catch loop. While the spot's collider is enabled: every cycle waits 1s, logs "you catch some shrimps" and drops a Shrimp into your Satchel, then waits another 1s, roughly one Shrimp every ~2 seconds of active fishing. When the spot disables, the catch completes and the XP award fires.
  4. Spot depletion & reset. Each fishing spot runs its own fill-bar timer: it counts up to 7 seconds (the fill drains from full to empty over those 7s), then disables itself. After a random 4-8 second cooldown it re-enables and the bar refills.
Build note: The Satchel-fill tick (the "+1 Shrimp every ~2s" visual drop) and the single server XP award (fired once on completion) are separate code paths. The on-screen Shrimp counter can climb faster than the server grants fishing XP, because XP is hard-gated by the cooldown below. The visual Satchel count and the authoritative server item count are tracked independently in this build, treat the on-screen Shrimp number as cosmetic until reconciled.

The Anti-Spam Server Gate (the important part)

All gather rewards route through one server command, CmdAwardGatherXp(int kind), kind 0 = mine, kind 1 = fish (kind 2 = mob kill, combat). The server keeps a per-activity "next allowed" timestamp and silently ignores any call that arrives early. Spamming does nothing until the timer is up:

KindTriggerServer cooldownAccount XPSkill XP (track)Daily Grind tickSatchel item
0 - Minemining completed7.0 s+15+15 MiningMine 5 rocks+1 Tin Ore
1 - Fishfishing completed8.0 s+12+12 FishingCatch 5 fish+1 Shrimp

The cooldowns (7s mining / 8s fishing) are slightly shorter than the in-world animation cycles, so a player gathering at a node naturally lands one award per node cycle, the gate exists to kill packet-spam, not to throttle honest play.

What Each Gather Feeds

A single successful gather pays out in four places at once, all server-authoritative:

  • Account XP to account level. Crossing a threshold fires a "LEVEL UP!" toast. (No passive playtime XP, levels come only from doing things.)
  • Per-skill level. Mining and Fishing are independent RuneScape-style tracks using the same curve.
  • Daily Grind quest tick. Advances the matching daily, "Mine 5 rocks" (to 100 gold, +50 XP) and "Catch 5 fish" (to 80 gold, +40 XP). Resets on the UTC date boundary.
  • The Satchel. The item lands in the server inventory, syncs to your HUD, and persists per account. Only two stackables exist in v1, Tin Ore (0) and Shrimp (1), each stack-capped at 999.

Cashing Out & Risk

  • Sell to the merchant. "Sell All" dumps the whole Satchel at fixed prices: Tin Ore = 5 gold each, Shrimp = 4 gold each.
  • The Trenches take their cut. Carry Tin Ore or Shrimp into the PK wilderness and get rekt, and your full Tin + Shrimp stacks (plus a fixed fraction of your gold) drop in a Rekt Bag for your killer. Gathered loot is not safe north of the ditch.

Partially-Built / Rough Edges (stated plainly)

  • No node respawn for rocks/fishing spots, they reset in-place via state flags / the 7s+(4-8s) timer rather than despawn-and-respawn.
  • Mining/Fishing scripts contain commented-out / partially-dead logic (empty-node branches, an unused fishing-timer Update loop). The live path is the coroutine-driven one above.
  • Visual Satchel count vs. server item count diverge for fishing (see build note above).
  • Inventory "full" warnings are cosmetic, manual pickup of dropped objects warns "you don't have room to hold that" past 19 collected client objects but doesn't actually block the pickup. (This refers to a legacy client-only display, not the real server Satchel.)

6. The Satchel: Your Inventory

The Satchel is Soltara's inventory system (v1). It is deliberately lean: only two stackable, gathered resources exist right now, and they're the payoff for working the world's two gathering skills.

At a glance: Two items (Tin Ore, Shrimp), each stacks to 999, server-authoritative. "Sell All" liquidates everything at 5g / 4g. A maxed Satchel is worth 8,991 gold.

What You Can Carry

SlotItemHow you get itSource skill
0Tin Ore+1 per successful mining tickMining
1Shrimp+1 per successful fishing tickFishing

Items are awarded server-side when a gather lands. Mining is gated to one Tin Ore at most every 7 seconds; fishing to one Shrimp at most every 8 seconds. Each gather also pays XP (Mining 15, Fishing 12) and feeds the matching Daily Grind quest, but the item in the Satchel is Tin Ore / Shrimp only.

Stack Cap: 999

Every item stacks up to a hard cap of 999 per slot, enforced on the server:

_items[item] = Mathf.Min(_items[item] + count, 999);   // stack cap like the big MMOs

Once a slot hits 999, additional gathers of that resource are silently capped. Counts are clamped to exactly two slots, anything outside Tin Ore (0) / Shrimp (1) is rejected.

Where You See It: The Satchel Panel

The Satchel lives inside the Wallet panel, injected right under your gold balance:

  • A gold SATCHEL header.
  • Two live rows that update roughly every 0.4s: Tin Ore ×{count} and Shrimp ×{count}.
  • A Sell All button beneath the rows.

The rows read from the owner-side cache the server pushes to you whenever your Satchel changes. If you're not in the world, the panel clears itself. It's a HUD overlay drawn on top of the Wallet window, not a standalone inventory grid.

Selling to the Merchant: Sell All

Hitting Sell All liquidates your entire Satchel at fixed per-item prices. There's no partial sell and no haggling, it's all or nothing.

ItemSells for
Tin Ore5 gold each
Shrimp4 gold each

For each slot with a positive count, the server adds count × price to the total, then zeroes the slot. After the sweep:

  • Empty Satchel → nothing happens economically; toast: "Nothing to sell, go gather something first."
  • Otherwise → gold credited server-side, Satchel pushed back to your HUD (now ×0 / ×0), and a green toast: "Sold! +{total} gold."

A full Satchel at the cap is worth a fixed maximum:

  • 999 Tin Ore × 5 = 4,995 gold
  • 999 Shrimp × 4 = 3,996 gold
  • Both maxed in one sale = 8,991 gold

Rules & Current Limits

  • Server-authoritative. All item counts, the stack cap, sell prices, and gold live on the server. The client only displays a cached copy and requests a sale, it can't mint items or set its own prices.
  • Only two items exist. Tin Ore and Shrimp are the full catalog. No armor, no consumables, no equipment, the Satchel is the foundation for the first complete gather → sell → gold loop, with The Bazaar and Rekt Bags built on the same item plumbing.
  • Persistent. Saved per account and restored on login; autosaved every 60s and on logout.
  • Fixed-price merchant only. Player-set prices are a separate system, that's The Bazaar.
  • The Trenches connection. These same two slots are what get looted when you die in The Trenches: a Rekt Bag scoops your Tin Ore and Shrimp plus a cut of your gold. Carrying a fat Satchel into PK territory is a real risk.

7. Gold & The Economy

Soltara runs on one currency you actually earn by playing: gold. Everything below is live in the code today, plus a clearly-marked look at the future on-chain layer ($SOLT), gated on legal review and not yet built.

At a glance: Gold is server-only, the client can never forge it. Faucets: material sales, the Daily Grind, mob drops, Rekt Bags. Sink: the Bazaar (fee-free). $SOLT is future direction, not in the code today.

Gold Is Server-Authoritative, the Client Can Never Forge It

Gold does not live in your browser. It lives on the server, in your account record (a 64-bit value), and the client only ever displays a copy. Every credit and debit runs through two server-side methods:

  • AddGoldServer(amount), the only way gold is created. Ignores non-positive amounts, adds to the server-side balance, then pushes a read-only copy to your HUD.
  • SpendGoldServer(amount), the only way gold leaves you. Refuses if amount <= 0 or if your balance < amount (you can never spend into the negative).

Both are server-only, so they physically cannot execute on a client. The client receives its balance through a one-way display-only cache; there is no client path that writes gold. Even the activity that triggers an earn (mining, fishing, kills) is rate-limited server-side, so spamming commands can never out-earn actually playing. Gold persists per account via atomic temp-file writes, so a crash mid-save can never corrupt or dupe a balance.

Every Way to EARN Gold (the Faucets)

1. Selling materials to the merchant (the core gather to sell loop). Your Satchel holds Tin Ore and Shrimp (each capped at 999); "Sell All" pays count × price per stack (Tin Ore 5g, Shrimp 4g) and credits the total. This is the first complete gather to sell to gold loop.

2. The Daily Grind (daily quests). Four daily quests, reset on the UTC date boundary:

QuestGoalGoldXP
Mine 5 rocks510050
Catch 5 fish58040
Slay 3 mobs312060
Win a duel1200100

Completing all four pays 500 gold (plus 250 XP). The duel quest only credits the winner of an arena fight.

3. Looting Rekt Bags and mob drops in the Trenches. The Trenches (everything north of the ditch line, z > -250) is lawless PK territory. Two kinds of lootable pile spawn, both surviving 300 seconds (5 minutes). Loot is first-come, first-served, walk within range (server checks a lag-tolerant 9-unit radius) and right-click.

  • Rekt Bags (PvP death drops). Lose a Trenches fight and the server strips your lootables into a blood-red Rekt Bag at the spot you fell: 20% of your gold (floored) plus every Tin Ore and Shrimp you carried. If you were genuinely broke, no bag spawns, "the flex is the loot." Dying grants 60 seconds of grace during which you can't be re-jumped.
  • Mob loot piles (gold-colored). Killing a monster reports a tiered drop, rolled server-side (the client can't pick rich loot), rate-limited to one drop per 6 seconds per connection:
TierMobsGold rollBonus materials
BossDemon, Cyclops25-8055% chance of 1-2 Tin Ore; 35% chance of 1-2 Shrimp
GruntGoblin, NPC5-2020% chance of 1 Tin Ore
CritterChicken, Cow, Animal, Bear1-5none

4. The Bazaar (player-to-player sales). When another player buys your listing, you're paid the full asking price, instantly if online, or credited straight into your account file if offline. For the seller this is a gold faucet; for the buyer it's a sink.

Designed-but-not-yet-wired faucets: the economy design names a duel-win purse and a free daily spin wheel as gold sources. As of today, arena duels award XP, quest progress, and a W/L record only, no direct gold purse is transferred in code. The duel "wager" UI is a stubbed match-flow panel with no gold call behind it; treat the wager system and the daily spin as planned, not live.

Every Gold SINK

The Bazaar is currently the one true gold sink, the only place gold actually moves between players and leaves a buyer's balance. It's a server-side escrow marketplace persisted to disk:

  • List: you set a price in gold for a whole lot. Items are escrowed out of your Satchel immediately (no dupe window). Limits: max 5 active listings per trader, price 1 to 1,000,000 gold, can't list more than you hold.
  • Buy: the buyer's gold is debited (refused if they can't afford it), the items land in their Satchel, the listing is removed, and the seller is paid the full price, no transaction fee on gold listings today.
  • Cancel: only the original seller can cancel; escrowed items return to their Satchel.

Offline payout loads the seller's account file, adds the gold, and saves, safe from the autosave race precisely because the seller is offline.

Faucet/sink honesty: today the live faucets (material sales, the Daily Grind, mob drops, Rekt Bags) outnumber the live sinks (just the Bazaar, fee-free). The design doc flags tracking sinks-vs-faucets "from day one" to keep inflation controllable, that balancing work is acknowledged as still ahead. Cosmetics (visual-only Hero Customizer rarity tiers, never pay-to-win) and building/shop consumables are named as future sinks but neither charges gold yet.

Coming Soon, $SOLT, the Treasury, and the One Bridge (future / legal-gated)

This layer is documented direction only, not built, and explicitly gated on the lawyer conversation. Nothing on-chain exists in the codebase today; gold stands alone as a complete game.

  • $SOLT is the planned on-chain Solana token, carrying real external market value. Gold never will, that separation is deliberate.
  • The one bridge: the only sanctioned path between the two layers is selling gold for $SOLT, player-to-player, on the Bazaar. Reference split: 95% to the seller / 5% to the game treasury.
  • Direct $SOLT spend is reserved for special sinks like paid wheel spins (~$3 USD worth), with a reference 50% burned / 50% to treasury split.
  • No token gate, ever: free guest play plus an optional wallet stays Soltara's funnel advantage. There is no minimum-token requirement to play, by design.

The deliberate stance: a token done wrong (thin, volatile, anonymous-team) is worse than no token, so the gold layer ships first and complete, and $SOLT only happens after proper legal review, tokenomics, and a liquidity plan.

8. The Bazaar: Player Marketplace

The Bazaar is Soltara's open-air trading floor: a server-run marketplace where any player can list gathered goods for gold and any other player can buy them. No haggling, no trade windows, no scams, you set a price, your goods go into escrow, and the first buyer to slap down the gold walks away with the loot. Every coin and every item is validated server-side, so there are no dupes and no funny business.

The whole market lives in one shared order book that persists to disk (bazaar.json, written with an atomic temp-file-and-rename so a crash mid-write can't corrupt it). Close the server, reopen it, and every live listing is still on the counter.

At a glance: Gold-only listings, items escrowed on listing (zero dupes), max 5 listings per trader, price 1 - 1,000,000 gold per lot, sellers paid online or offline. Fully server-validated.

What You Can Trade

The Bazaar is wired to the server-authoritative Satchel, which today holds exactly two stackable resources, the only things that can be listed:

Item IDNameHow you get itMerchant sell price (reference)
0Tin OreMining5 gold each
1ShrimpFishing4 gold each

The "merchant sell price" is the flat rate the NPC merchant pays for a Satchel dump, it's not a Bazaar price. On the Bazaar, you name the price; it's where you go to beat the merchant's lowball. The server hard-rejects any listing for an item outside this range ("Unknown item."). When more item types ship, the Bazaar inherits them automatically.

How to List an Item for Sale

Open The Bazaar pill in the left HUD column. At the bottom is the SELL FROM YOUR SATCHEL strip with steppers and a LIST button:

  • Item, toggles between Tin Ore and Shrimp.
  • Count -/+, sets the quantity (UI clamps to 1-999).
  • Price -/+, sets the asking price for the whole lot, in steps of 5 gold (UI clamps to 1-1,000,000).
  • LIST, escrows the goods and posts the offer.

The live summary reads, e.g., "Listing: 3x Shrimp for 50 gold." The price is for the entire stack, not per-unit.

Listing rules (enforced server-side):

RuleValueIf you break it
Price range1 - 1,000,000 gold per lot"Price must be 1 - 1,000,000 gold."
Quantity≥ 1 and you must actually own that many"You don't have that many."
Max listings per trader5 active listings"Max 5 listings per trader."
Item must be validTin Ore or Shrimp only"Unknown item."

Listing Escrows Your Goods Immediately (Zero Dupes)

This is what makes the Bazaar safe: the instant you list, the items leave your Satchel. The server removes them before the listing is even written to the book, so you cannot list the same stack twice, cannot list goods and then sell them to the merchant, and cannot have your loot in two places at once. While a listing is live, those items simply don't exist in your Satchel, they're locked in escrow until bought or cancelled. Each listing records the seller's account name, item, count, price, a unique listing ID, and a UTC timestamp.

How Buying Works

The panel shows every active listing as a row: {count}x {item} {price}g by {seller}. Listings you don't own show a green BUY button; your own show a red CANCEL instead.

When you hit BUY, the server runs the whole transaction atomically:

  1. Checks your gold. If your gold < listing price, refused with "Not enough gold." Nothing moves.
  2. Takes your gold for the full asking price.
  3. Delivers the items into your Satchel (stack-capped at 999 like everywhere else).
  4. Removes the listing and saves.
  5. Pays the seller (see below).

You get a toast: "Bought 3x Shrimp for 50g." If two players race for the same listing, whoever the server processes first wins it; the loser gets "That listing is gone.", no double-sell.

How Sellers Get Paid: Online or Offline

The seller always gets their gold the moment their listing sells:

  • Seller onlineinstant live payout. The server credits their gold on the spot and fires a toast: "BAZAAR SALE! 3x Shrimp sold for 50 gold."
  • Seller offlineoffline payout, credited straight to their account file. The server loads their account, adds the gold to the stored balance, and saves. Next login, the gold is already there. List goods, log off, and still get paid while you sleep.

Either way the sale is logged server-side with a live=true/false flag for auditability. (Edge case: if the seller's account can't be loaded, the credit is logged as failed rather than silently lost, but the buyer's purchase still completes, since the gold was already debited and items delivered.)

Cancelling a Listing

Hit CANCEL on any of your own listings and the escrow reverses cleanly:

  • The server confirms the listing still exists ("That listing is gone." if it already sold) and that it's actually yours ("Not your listing." otherwise).
  • The listing is pulled, the book is saved, and your escrowed items return to your Satchel.
  • Toast: "Listing cancelled, items returned."

There is no cancellation fee and no cooldown.

Everything Is Validated Server-Side

The client UI is just a window into a fully server-authoritative system. Every action, list, buy, cancel, refresh, goes through a server command, and the server re-checks everything: ownership, gold balance, item counts, price bounds, listing limits. The client never decides whether a trade is legal; it only sends the request and renders the JSON snapshot the server sends back. Because gold and inventory are server-only truths, a tampered client can't conjure gold, forge items, or sell goods it doesn't have, the worst it can do is send a command the server immediately rejects.

Quick Reference: the Hard Numbers

MechanicValue
Tradeable itemsTin Ore (id 0), Shrimp (id 1)
Price range per listing1 - 1,000,000 gold (whole lot)
UI price step5 gold
Listing quantity (UI)1 - 999
Satchel stack cap999 per item
Max active listings per trader5
EscrowItems removed from Satchel on listing (no dupes)
Cancellation fee / cooldownNone, items returned in full
Seller payout (online)Instant gold + sale toast
Seller payout (offline)Gold credited directly to account file
Persistencebazaar.json, atomic, survives restarts
AuthorityFully server-side validated

9. The Daily Grind: Daily Quests

The Daily Grind is Soltara's retention engine: four bite-sized daily tasks that funnel gold and XP straight into your account just for playing the game the way you'd play it anyway. Pop the gold "Daily Grind" pill on your HUD and a stone-and-gold panel slides open, listing all four dailies with live progress bars. Every quest is tracked server-side so there's no cheating the counters, and the whole board wipes clean on the UTC date boundary each day.

At a glance: 4 dailies, server-tracked, UTC-reset. Full clear = 500 gold + 250 XP on top of base activity rewards. One payout per quest per day.

The Four Daily Tasks

Each task has a fixed goal, gold payout, and XP reward (exact server constants):

#QuestGoalGoldXPHow you progress
0Mine 5 rocks5100 gold50 XPEach mining cycle (also +1 Tin Ore, +15 Mining XP)
1Catch 5 fish580 gold40 XPEach fishing cycle (also +1 Shrimp, +12 Fishing XP)
2Slay 3 mobs3120 gold60 XPEach mob kill (also Combat XP, 12-200 by monster)
3Win a duel1200 gold100 XPWin a single arena duel

Full-clear payout: finishing all four in a day nets 500 gold + 250 XP on top of everything those activities already pay (base activity XP, gathered items, and any duel results are all separate and stack).

Live Progress Bars

When the panel is open it refreshes about every 0.4 seconds. Each row shows:

  • The quest name with a bullet () while in progress, flipping to a green checkmark () the moment it's done.
  • A gold fill bar tracking your fraction toward the goal, turning green on completion.
  • A live counter reading current / goal (e.g. 3 / 5).
  • Footer: "Rewards: gold + XP, resets daily."

Progress and gold are pushed from the server, so the bars reflect true server-authoritative state. On completion you get a gold success toast: "DAILY COMPLETE: {quest name}, +{gold} gold, +{xp} XP!"

The Rules (exact mechanics)

  • Server-authoritative, period. Gold balance, daily progress, and completion flags all live on the server. The client only holds a read-only copy.
  • One payout per quest per day. Once a quest is marked done, further progress is ignored, no double-dipping, and overshooting does nothing extra.
  • Completion is atomic. The instant your progress hits the goal, the server flips the done flag, adds the gold, and grants the XP (which can itself trigger an account level-up toast) in a single step.
  • UTC daily reset. Freshness is checked against the current UTC calendar date (yyyyMMdd). The first progress on a new UTC day detects the change, stamps the new date, and zeroes all progress and done flags. The reset also runs on login/account-load, so a stale board is wiped before you see it. It's tied to the calendar date in UTC, so the board flips at 00:00 UTC regardless of when you finished yesterday's quests.
  • Progress persists within the day. Your daily date, progress array, and done flags are saved with your account (autosave every 60s, plus a final save on disconnect), so logging out and back in mid-day keeps your partial progress.

Anti-Cheat Note on Gather Quests

The three gather/kill quests (Mine, Catch, Slay) feed off the same rate-limited server command that gates each activity to its real cycle length, mining every 7s, fishing every 8s, mob kills every 3s. Spamming the command can't out-earn actually playing, so daily progress on those three can only tick at the legitimate pace of the activity. (The "Win a duel" quest is credited from the server fight-resolution path on a duel win.)

10. Combat & The Arena: Duels

Soltara's duel system is its oldest combat loop: two players agree to throw down, get whisked to a hidden sky-arena, and the server plays out the entire fight round-by-round while both clients just watch the animations and damage numbers. Win and you bank a fat XP payout, a Combat-skill bump, and a permanent notch in your win/loss record. Lose and you still walk away with a consolation handful of XP. It is fully server-authoritative, no client ever decides who wins.

At a glance: Consensual challenge then accept. Both fighters start at 100 HP. Damage is pure random rolls, gear/level do NOT affect it. Winner +150 XP, loser +25 XP. The wager number is cosmetic, no gold moves in a town duel today.
This is the consensual Arena duel. It's a separate path from The Trenches, where north of the ditch you can jump anyone with no challenge and no accept. The Trenches use the same underlying fight engine but the entry, stakes (Rekt Bags), and rules differ, see Section 10.

How You Challenge Another Player

  1. Right-click a nearby player. This opens a context menu (Follow / Walk / Trade / Challenge) at your mouse. The Challenge option only wires up if you are within range of the target; out-of-range right-clicks get a stripped-down menu with no Challenge button. The menu holds for an 8-second timer.
  2. Click "Challenge." A challenge panel appears on the target's screen reading "{name} wishes to duel with you" and drops a request line into chat with Accept / Decline buttons.
In the Trenches the same right-click slot relabels itself to "ATTACK {name}" and routes to the no-consent ambush flow instead.

The Accept (and Wager) Flow

When the target accepts, both sides open a wager/betting panel. Each player can adjust a bet amount (default "50"), synced to the opponent. Every time the wager value changes, the Accept button locks for a 3-second countdown ("Accept in 3... 2... 1...") before going green again, an anti-misclick / anti-snipe delay so nobody confirms a number the other player just changed.

Both players must hit Accept. The server runs a rendezvous handshake:

  • It maintains a pending record keyed by initiator|accepter, collecting which players have voted "accept."
  • A pending handshake expires after 60 seconds if the second player never confirms.
  • It rejects the vote if either player is unknown, votes on a duel they aren't part of, or either player is already in a fight.
  • Only when both have reported accept does the server start the fight exactly once.
Honest status, the wager is cosmetic. The betting/wager UI is fully built and the bet value syncs between both players, but it does NOT move any gold. There is no escrow, no deduction from the loser, and no payout to the winner anywhere in the code, the bet value is never read by any gold function. The panel itself is a re-skinned leftover of an old crypto "Next Refresh" price ticker (now relabeled "WALLET" with the dead crypto rows hidden). Treat the wager as vestigial flavor until real-money/$SOLT stakes are wired. The only things that change hands in a duel today are XP and your W/L record.

How the Fight Is Resolved (server-side, round-by-round)

Once both accept, the server picks one of 4 arena locations at random, lifted to y = 100 (a hidden sky arena), spawns two networked fighter avatars one unit apart, faces them off, and snaps both cameras onto the arena. A countdown of 3 to 0 plays (1 second per tick), then the damage loop begins.

Both fighters start at 100 HP. Each round of the loop, damage is rolled identically for both fighters:

StepRollResult
Tier pickdist = {0,0,0,1,1,1,1,2,2,2}, index Random(0,10)30% tier-0, 40% tier-1, 30% tier-2
Tier 0 ("miss/graze")Random(0, 3)0-2 damage
Tier 1 ("hit")Random(3, 7)3-6 damage
Tier 2 ("crit")Random(7, 12)7-11 damage

So per round each fighter takes a hit of 0 to 11 damage (effective average around 3.9/round), HP clamped to [0, 100].

Round resolution & tie-handling:

  • If both land on the same HP value and both are still alive, the round re-rolls until totals diverge (prevents a stalemate).
  • If both hit 0 HP simultaneously (double-KO), a coin flip revives one fighter to exactly 1 HP, there is always exactly one survivor.
  • Attack animations, hit sounds, a randomized 0.3s stagger between strikes, damage-number popups (blue for 0, red for >0), and a health-bar update fire each round, then the loop waits 1.5 seconds.

The fight ends the instant one fighter reaches 0 HP. The survivor plays Victory; the loser plays Death. After a 1.5s cleanup, the arena avatars are destroyed and players return to their spawn point.

Rewards: XP, Combat-Skill XP, and Your W/L Record

All rewards are granted server-side the moment a winner is decided:

OutcomeAccount XPCombat-skill XPDaily GrindW/L record
Winner+150Combat +150progresses "Win a duel"_wins++
Loser+25Combat +25-_losses++
  • Account XP feeds your overall level (1-100). A single duel win (150 XP) clears level 2 on its own; level-ups fire a "LEVEL UP!" toast.
  • Combat skill is a parallel RuneScape-style track (skill index 0). Duels and mob kills both feed it, with its own "COMBAT LEVEL UP!" toast.
  • Daily Grind: a duel win counts toward the "Win a duel" quest (goal 1). Completing it pays +200 gold and +100 XP. (This is the only path by which a duel indirectly yields gold today, via the daily reward, not a wager.)
  • Win/Loss record: persistent _wins / _losses counters, saved/restored with your account and explicitly intended as leaderboard fodder.

Duel Rules at a Glance

  • Starting HP: 100 each, fixed. No gear, levels, or stats affect damage, duels are currently a pure coin-flip of random rolls (both fighters use the identical damage table). Higher account/Combat level does not make you hit harder.
  • One fight at a time: the server refuses a duel-accept if either player is already in any fight (arena or Trenches).
  • Consent required (in town): both players must explicitly Accept. Declining at any stage tears down both panels.
  • Accept-lock: every wager change re-locks Accept for a 3-second countdown.
  • Handshake timeout: an unanswered accept handshake expires after 60 seconds.
  • Arena is hidden: fights resolve at one of 4 randomized sky-arena points (y = 100); cameras auto-snap there and back.
  • No real stakes yet: the wager number is cosmetic. Death in a town duel costs you nothing but a tick in the loss column, no item/gold drop (that only happens in the Trenches via Rekt Bags).

11. The Trenches: PK Wilderness

North of the ditch line lies The Trenches: a lawless, blood-soaked stretch of the map where there are no rules, no referees, and no consent forms. Cross that line and you've opted into open PvP, anyone can jump you, and if they put you down, you bleed loot. It's the classic high-stakes wilderness every old-school degen is nostalgic for, rebuilt for Soltara.

At a glance: Everything north of z = -250 is open PK. Ambush anyone within ±15 levels, 10s attack cooldown, 60s death grace. Lose and drop a Rekt Bag (20% of your gold + ALL materials). Winner gets +50 bonus XP.

Where It Is: The Ditch Line

The Trenches is everything north of the ditch line, any world position with z > -250.

ConstantValueMeaning
Ditch line (WILD_Z)-250South = safe town; north = open PvP.
  • The border is drawn in-world as an unmistakable blood-red ground line spanning the city's reach (x from -250 to 700, 96 segments raycast onto the terrain).
  • The mob camps sit inside the wild on purpose, goblins at roughly z ≈ -203, the big camp at roughly z ≈ +115. Want the good loot? You hunt it in hostile territory where another player can rek you mid-fight.

Depth: How Deep You've Gone

The further north you push, the deeper (and scarier) the Trenches get. Depth is purely a flavor/UI readout, it does NOT currently change loot, damage, or rules.

Depth = max(1, 1 + floor((z − (−250)) / 30))

Every 30 units north of the ditch adds one Depth level. At the line itself you're at Depth 1; ~30u in, Depth 2, and so on.

The On-Screen Warning + DEPTH Badge

The client-only HUD (disabled in headless/bot mode) gives constant, hard-to-miss feedback:

  • Entry toast (crossing north): a blood-red center banner reading ENTERING THE TRENCHES, No law here. Anyone can attack you, die and you drop a REKT BAG.
  • Exit toast (crossing back south): "You crossed back to safety."
  • Persistent DEPTH badge (centered under the XP bar, blood-dark plate): THE TRENCHES · DEPTH N.
  • Toasts display for 4.5 seconds and can also be fired by the server (ambush/loot messages).

No Challenge, No Consent: Anyone Can Attack Anyone

Outside the Trenches, fights are consensual duels (challenge, then accept). Inside, that's gone: it's a no-consent, OSRS-style attack. You right-click a player and the context action becomes ATTACK instead of Challenge, they don't get a say. The server is the sole judge and re-validates every rule before the fight starts.

The Exact Rules

Every attack runs through the server's CmdWildAttack, which enforces the following in order. If any check fails, the attacker gets a toast and nothing happens:

RuleValueBehavior
Self-attack-Can't target yourself or an empty target.
Attack cooldown10sOne ambush every 10 seconds per attacker. Early: "Catch your breath, one ambush every 10 seconds."
Both in the wildz > -250 for bothAttacker AND target must be north of the ditch. Else: "Both of you must be inside the Trenches."
Level bracket±15 levelsabs(level − target.level) > 15 fails. Else: "Out of your bracket, you can only jump players within 15 levels."
Grace protection60sCan't attack someone who died in the wild within the last 60 seconds. Else: "{name} just got rekt, they have a minute of grace."
Already fighting-Neither party may already be in a fight. Else: "One of you is already in a fight."

When all checks pass, the cooldown is set, both players get toasts ("{attacker} JUMPED YOU in the Trenches! Fight!" / "You ambush {target}!"), and a wild fight begins.

On the proximity requirement: range is gated only on the client by a withinRange flag, the right-click ATTACK option appears only when both you and the target are flagged "within range" (a proximity trigger-collider configured in the Unity scene). There is no hard distance check on the server and no fixed meter value in the code. So the proximity gate is real in practice but client-side only.

How to Attack

Two ways to jump someone, both routing to the same server command:

  1. Right-click a player in the wild, then ATTACK. The right-click context button's label becomes "ATTACK {name}"; clicking fires the ambush and closes the panel. Only happens when both players are confirmed in the wild.
  2. The ATTACK button (HUD). The Trenches HUD shows a blood-red ATTACK button (bottom-center) whenever you're in the wild AND have a living, non-self target also in the wild. It polls your selected target every 0.25s and reads "ATTACK {name}".

The fight itself is the standard Soltara auto-resolved combat (sky arena, 3-2-1 countdown, randomized damage rounds). Wild fights are flagged so the loser's loot drops at their real-world position (captured before the arena teleport), not at the arena or respawn.

What You LOSE If You Die: Rekt Bags

Lose a Trenches fight and you get REKT. The server strips your loot and drops a Rekt Bag at the exact spot you were jumped:

LootAmount
Gold20% of your carried gold (floored to an integer), spent via the normal gold path so your HUD and account stay in sync.
MaterialsALL of your carried stackables, every Tin Ore and Shrimp in your Satchel.

Since the inventory only tracks Tin Ore and Shrimp, "all your materials" means your full Tin + Shrimp stacks. There is no equipment/weapon loss, gear isn't part of the server inventory yet. The winner also pockets a flat +50 XP on top of the normal duel-win 150.

The Rekt Bag drop & loot mechanics:

PropertyValueDetail
Drop locationWhere the loser fellCaptured before the arena teleport, so the bag lands at the real ambush spot.
Despawn timer300s (5 minutes)Bag auto-expires unclaimed, then vanishes for all clients.
LootingFirst come, first servedANYONE can grab it, not just the killer. Removed server-side before payout to prevent double-loot.
How to lootRight-click the bag pile (OSRS-style "Take")Client raycasts the click and calls the loot command.
Loot range (client)4 unitsHow close the client wants you.
Loot range (server)9 unitsLag-tolerant server check; too far gives "Walk closer to take that loot."
If the loser was carrying nothing (no gold cut, no materials), no bag drops, both get a toast: winner gets "YOU REKT {name}! ...but they were carrying nothing. The flex is the loot." and the loser gets "You got REKT by {winner}, lucky you were broke. 60s grace protection." Either way, dying gives the loser 60s of grace so they can't be instantly re-jumped on the corpse run.

Rekt Bags render as a blood-red cube (#6B1A1A) with a floating "REKT BAG ({owner})" label, visually distinct from gold mob loot piles (gold cubes labeled "Loot: Ng + materials"), which use the same drop/loot system.

Related Note: Mob Loot in the Wild

Since the camps live inside the Trenches, killing mobs there drops the same kind of lootable pile (server-rolled, tiered by mob, rate-limited to one drop per 6s per connection):

TierMobsGoldBonus materials
BossDemon, Cyclopes25-80g55% chance 1-2 Tin Ore; 35% chance 1-2 Shrimp
GruntNPC, Goblin5-20g20% chance 1 Tin Ore
CritterChicken, Cow, Animal, Bear1-5gnone

These mob piles share the 5-minute despawn and 9-unit server loot range, and are grabbed the same right-click way, but unlike Rekt Bags they're not tied to PvP grace or the level bracket.

12. Loot: Monster Drops & Rekt Bags

Soltara has two ways to get loot off the ground: Monster Loot (kill a mob, it drops a glittering gold pile) and Rekt Bags (kill a player in The Trenches, they drop a blood-red bag of their stuff). Both land as a lootable prop that anyone can grab, right-click to Take, first come first served, gone in 5 minutes.

Everything below is authoritative server logic. The server rolls all rewards (a hacked client can't pick rich loot) and rate-limits drops so kill-spam can't farm them.

At a glance: Mobs anywhere drop gold piles (tiered by what you killed). Players in the Trenches drop Rekt Bags (20% gold + all materials). Right-click within 9 units to loot; everything despawns after 5 minutes.

1. Monster Loot: Gold Piles from Mobs

Every mob you kill drops a gold loot pile (tagged Loot: Ng, or Loot: Ng + materials if it rolled an item). The haul is tiered by what you killed, the mob's tag maps to one of three tiers:

TierMobs (by tag)
0 - CritterChickens, cows, bears, generic animals (the default, anything not matched below)
1 - GruntGoblins, NPCs
2 - BossDemons, Cyclopes

Exact drop table. Gold uses Random.Range(min, max) on ints (max exclusive); the real inclusive spans are listed below. Material chances roll independently:

TierGold range (inclusive)Tin OreShrimp
Critter (chicken/cow)1-5 goldnonenone
Grunt (goblin/NPC)5-20 gold20% chance, exactly 1 Tin Orenone
Boss (demon/cyclops)25-80 gold55% chance, 1-2 Tin Ore35% chance, 1-2 Shrimp

On the boss roll, Tin Ore and Shrimp are rolled separately, so a single demon kill can drop both, one, or neither on top of its 25-80 gold. Tin/Shrimp counts are 1 or 2 each.

Rules & anti-cheat:

  • Who triggers it: when a mob's health hits 0, the killer's local client reports the kill once (one drop per mob) along with the mob's tier and death position.
  • Per-player cooldown: the drop command is rate-limited to one drop every 6 seconds per connection. Kills inside that window report no loot. (Same anti-farm guard that gates mob-kill XP.)
  • Empty rolls are skipped: a roll of 0 gold and 0 items spawns no pile.
  • A mob pile is owned by "Monster" and renders gold-colored (#D9B44A). It obeys the exact same pickup, range, and despawn rules as a Rekt Bag.
Monster loot is not PK-gated, mobs anywhere on the map drop these gold piles. Only Rekt Bags require The Trenches.

2. Rekt Bags: Player Death Drops in The Trenches

Win a Trenches ambush and the loser coughs up a Rekt Bag: a blood-red bag (#6B1A1A) that drops exactly where they fell, labeled REKT BAG (theirname).

What the loser drops:

  • Gold: 20% of their current gold, floored to a whole number. The cut is actually spent from their account via the normal gold path, so their HUD and save stay in sync.
  • Materials: 100% of their carried gatherables, every Tin Ore and Shrimp in their Satchel (not a percentage, all of it).

The "broke loser" case: 0 gold and 0 materials, no bag spawns; both get the "flex is the loot" toast. You still get the kill, just no bag.

Grace protection: the moment you get rekt you gain 60 seconds of grace during which no one in The Trenches can ambush you again, time to run back for your bag.

Trenches PK rules (context for when a bag can even drop): both attacker and target must be inside The Trenches; ±15 level bracket; 10-second attack cooldown per attacker; no attacking someone in their 60s grace window; neither party already fighting. Winning also grants +50 bonus XP on top of normal duel XP, separate from the loot.

3. Pickup: Right-Click to Take

Both mob piles and Rekt Bags are picked up the same way (OSRS-style):

  • Right-click the pile/bag to Take it. Clicks on UI are ignored; the raycast must actually hit that specific prop. The prop is a trigger collider, clickable but never blocks movement.
  • You must be close enough. The server checks range: if you're more than 9 units away, it refuses and toasts "Walk closer to take that loot." Nothing is consumed, just walk up and right-click again.
  • First come, first served. The server removes the bag from the registry before paying out, so two players racing can't both get it, whoever's command lands first wins, the other finds it gone.
  • Payout goes straight into your account: gold and items credited server-side. You get a toast spelling out exactly what you grabbed, e.g. "You looted Vex's Rekt Bag: 14 gold, 2 Tin Ore, 1 Shrimp." (mob piles read "You picked up the loot: ...").

Despawn: every pile/bag lives for 5 minutes from the moment it drops; an unclaimed bag is then removed and vanishes for everyone. The loser's toast warns: "RUN BACK, the bag expires in 5 minutes and ANYONE can grab it!"

Item Reference

Only two gatherable resources exist in the loot tables today:

Item idNameSource skill
0Tin OreMining
1ShrimpFishing
Current scope: the loot system drops gold, Tin Ore, and Shrimp only, the sole stackable resources wired into drops and the Satchel right now. There are no weapon/armor/gear drops; the bag's item array is fixed at two slots. Headless/bot clients skip spawning the visual prop, but the server-side bag, range, and payout logic are identical.

13. Leaderboards

Soltara ships live, in-game Leaderboards, degen catnip for anyone grinding their way up The Trenches. A gold-trimmed "Leaderboard" pill sits in the left HUD column and only appears once you're in-world. Click it and a draggable, Soltara-styled panel pops open beside the pill column.

At a glance: Three tabs, Level / Gold / Wins, Top 10 each, pulled live from a read-only stats sidecar. Only public fields (name, level, value) ever leave the service; gold balances and wallets stay private.

Categories

TabStat keyRanks byDisplays as
LevellevelHighest character levelraw number (e.g. 42)
GoldgoldMost gold bankednumber with a g suffix (e.g. 15000g)
WinswinsMost Arena / combat winsraw number

Level is the default tab when the panel opens. The backend stats service also understands an xp key, but there is no XP tab in the UI, XP is a latent category, not a player-facing board today. Any unrecognized category silently falls back to Level.

How Ranking Works

  • The board shows the Top 10 accounts for the selected stat.
  • Ranked by raw value, highest first (simple descending sort). There is no tie-breaker, equal values fall back to whatever order the account files are read in.
  • Accounts with no display name are excluded, only named champions make the board.
  • Missing values are treated as 0; a missing level defaults to Lv 1.
  • Each row renders as: rank · name · level · value, e.g. 1. DegenKnight Lv 42 - 15000g.

Rank styling:

RankTreatment
1stGold medal numeral (#FFD700)
2ndSilver medal numeral (#C0C0C0)
3rdBronze medal numeral (#CD7F32)
4th-10thPlain 4.10.

Where the Data Comes From (read-only, off to the side)

The leaderboard never touches the live game server. The client fetches it over plain HTTP from a tiny read-only public stats sidecar:

GET https://play.soltara.gg/api/leaderboard?by=level|gold|wins
  • The host is auto-detected from the page URL; on localhost or an unknown host it falls back to https://play.soltara.gg.
  • The request times out after 8 seconds.
  • The response is JSON: { "rows": [ { "name", "level", "value" }, ... ] }, and only those three public fields ever leave the service. Gold balances, wallet look, last-seen, and every other field stay private.
  • The sidecar runs in its own container with the account-data volume mounted read-only. It physically cannot write, alter accounts, or reach the game server, it just scans the account JSON files, sorts, and returns the top 10. It sends Cache-Control: no-store, so every open pulls live standings.

Empty / Error States

ConditionWhat you see
Request in flightloading…
Request failed / timed outleaderboard unavailable
Reachable but zero ranked playersno champions yet - be the first!

Refresh Behavior

The board is fetched on demand, not polled, it pulls fresh standings every time you open the panel and every time you switch tabs. No auto-refresh interval; close and reopen (or tap another tab) to re-pull. If you leave the world, the pill hides and any open panel auto-closes.

Implementation caveat: the client points at /api/leaderboard and the sidecar's per-account scan reads files directly from the data root, whereas the wallet-name lookup in the same service reads from a wallets/ subfolder. Depending on the exact on-disk layout the board reads from, deployment details can affect which accounts the scan sees, a known rough edge being tracked.

14. Customize Your Hero

Every degen deserves a face. The Hero Customizer is Soltara's full-body character editor, a live, drag-to-spin 3D dressing room where you sculpt your hero's skin, hair, build, threads, and kicks, then lock the look to your account forever. Pop it open from the gold Customize Hero pill (bottom-left, just above your chat block) any time you're walking the world.

At a glance: 7 tabs (Skin, Hair, Body, Top, Pants, Footwear, Hat). Live drag-to-rotate preview. Everything is local until you Save, then it's broadcast to the world and persisted to your account. Free and unlimited. Hats are locked (coming soon).

Opening It / When It's Available

The gold pill only shows when all of these are true:

ConditionRule
You're in-worldConnected with a live local player (a polling watcher checks twice a second)
You're not fightingThe pill hides the instant combat starts; if the modal is open and you get pulled into a fight, it force-closes and reverts your unsaved tweaks
No modal already openOne customizer at a time

When the editor opens, it re-seeds your working look from your saved appearance, so restored accounts don't spawn bald or naked before you've touched a thing. The world dims behind it and a private preview camera spins up just for you.

The Live 3D Preview (drag-to-rotate)

The big framed panel in the center is your actual hero, rendered live by a dedicated 512×700 preview camera at a chest-level frontal angle (FOV 30°, orbiting ~2.9 units out from a point 1.0m above your feet). Every change repaints instantly.

  • Drag to rotate: click-drag left/right anywhere on the preview to orbit the camera. Sensitivity is 0.6° per pixel; a "drag to rotate" hint sits under the frame.
  • The camera default tracks the way your hero faces, so you start looking at the front.
  • It's a tight shot framing only you, scenery, bystanders, and gameplay markers are excluded (the editor hides world props scene-wide while open, then switches them back on when you close).
Crucially: everything you do in here is LOCAL until you Save. Other players see nothing while you experiment, no flickering, no half-finished looks. Your changes only go live to the world (and your account) when you hit Save.

The Tabs, Every Appearance Option

Options live in a left-hand tab rail listing seven tabs: Skin, Hair, Body, Top, Pants, Footwear, Hat. The right side shows a scrollable SHAPE grid and a COLOR swatch row beneath it. Each shape card carries a small rarity dot, today every cosmetic is Common (gray dot); the dot exists so a future cosmetics economy can recolor by rarity.

TabWhat you changeNotes
SkinSkin toneCards labeled "Skin 1", "Skin 2", … (intended count 4). Swaps the skin color-set live.
HairHair style + hair colorIntended 12 styles / 11 colors. The "No Hair" style is relabeled "Bald"; color swatches preview dark-brown to blonde, with bald excluded from the color list (no color set).
BodyBody type / buildOne card per blend-shape preset (intended 10 builds). Picking body index 0 or 1 also sets your gender preset to match; other indices leave gender as-is.
TopShirt + trim colorTwo sub-cards, Tunic (shirt) and Trim (border), then 6 color swatches. Click one to choose which part you're recoloring, then pick a swatch.
PantsTrouser colorOne Trousers card (style fixed) + 6 color swatches. Only color is selectable.
FootwearBoots + socks colorTwo sub-cards, Boots and Socks, then 6 color swatches.
Hat-All locked, see below.

Color swatches: every clothing tab (Top, Pants, Footwear) uses the same 6-hue palette: red, green, blue, orange, purple, teal (swatches are approximate; the live preview shows the true in-engine color). Presets are 1-based (indices 1-6) and drive hue/saturation shader values on the garment meshes.

Hats, Locked / Coming Soon

The Hat tab is built but not yet unlocked. It shows five greyed-out cards, Beret, Cap, Bandana, Helmet, Mask, each stamped "(coming soon)" and non-interactable. This is Phase 2: the headgear models, show/hide toggles, and color cycling already exist in the underlying character system, but they're deliberately not wired into the customizer UI and cannot be equipped or saved through it today.

Saving, Restoring, and Canceling

ActionTriggerWhat happens
SaveGold Save button (bottom-right)Sends your full 10-value look (pant, hair style, hair color, skin, socks, shirt, shoe, trim, body, gender) to the server. Toast: "Your hero has been saved."
CancelCancel button, the X top-right, OR getting pulled into a fight / logging outReverts your hero to the exact snapshot taken when you opened the editor, every unsaved tweak undone. The X press flashes blood-red.

Your look SAVES to your account and restores next login. Save routes through the battle-tested server command CmdSaveLook; the server applies it authoritatively, flags the look updated, and broadcasts it to every client so the world sees you change in real time. Persistence rides the account autosave (a 60-second repeating timer) plus a guaranteed final save on logout/disconnect. Wallet-verified accounts persist by pubkey. So your saved look is reliably written within ~60s and again whenever you leave, and loads back onto your hero next login.

Partially-Built / Honest Caveats

  • Hats are not functional in the customizer, locked placeholders only.
  • Rarity is cosmetic-only today, every item is Common; the rarity-dot system is plumbing for a future cosmetics economy and gates nothing yet.
  • No prices, no currency cost, no cooldowns, no caps, restyling your hero is free and unlimited. (No $SOLT, no gold sink attached here.)
  • Skin/body option counts are data-driven from the character art arrays; the customizer's header documents intended counts (Skin 4 · Hair 12 styles/11 colors · Body 10), but the grid renders whatever the art actually provides.

15. The World, NPCs & Monsters

Soltara is split down the middle by a single rule: safe in town, lawless in the wild. Everything south of the ditch is the city hub where you respawn, restock, and rub shoulders with the local degens. Everything north of it is The Trenches, open PK wilderness where other players (and the nastier monsters) can end your run and dump your loot into a Rekt Bag.

At a glance: South of the ditch = safe town with degen citizens, the Bazaar, and the Daily Grind board. North = The Trenches. Monsters come in three loot tiers; every mob starts at ~100 HP and respawns on death.

The City Hub and the Safe-vs-Wild Split

  • The city is the social and economic core: it's where you land on login (the player spawns on the tagged SpawnLocation anchor), home of the degen citizens, the Bazaar, and the Daily Grind board.
  • The dividing line is a ditch/wall. Town sits south of the ditch; The Trenches sit north. Crossing north means you've opted into PvP danger.
  • The monster roster is seeded at server start: when the headless server boots, the spawner runs once and instantiates every mob, rock, and fishing spot from its prefab list, network-spawned so all clients see the same world.
  • Important distinction: the combat monsters are server-authoritative networked objects; the degen citizens are not, they're pure client-side ambience. The two systems are completely separate.

The Degen Citizens, Soltara's Signature Flavor

This is a Soltara original and one of our clearest differentiators: the city is populated by a hand-written crew of crypto-degen NPCs who stand around the plaza cracking jokes. They exist purely to give the hub personality.

How they work (and their honest limitations):

  • They are 100% client-side ambience. No network spawn, no wire traffic, the dedicated server never even knows they exist. Every client spawns the same fixed crew with the same names. If the baked prefabs aren't found, the system quietly skips ("no funny NPCs this run").
  • They spawn in a ring around the city anchor and snap onto the navmesh.
  • They are stationary by design. An earlier version let them wander, but the wander brain walked them through walls (founder request, 2026-06-11), so they now freeze at their spawn spot and just talk. Their colliders are triggers, so brushing past a citizen can never shove a player around. They face the plaza center.

The crew (six fixed personalities):

#CitizenVibe
0Officer RugpullThe city "guard" who polices the floor price
1Hopium Dealer HankMerchant peddling 100x copium
2Diamond Hands DariaCannot sell. Will not sell.
3FOMO FionaBought the top so you don't have to
4Liquidated LindaLeverage as a lifestyle
5Sandwich Bot 9000A literal MEV front-running robot

The bark system, each citizen floats a chat bubble above their head that types out a line, holds, then fades:

  • Each bark is 60% a personality-specific line, 40% a shared common bark (e.g. "gm", "wen $SOLT?", "probably nothing", "few understand", "have fun staying poor").
  • Text types at 0.03s per character, holds 3.5s, fades over 0.5s, then waits a random 9-22s before the next line.
  • Each citizen has a staggered start delay so the plaza doesn't all talk in unison.
  • Example lines: Diamond Hands Daria, "down 97% but the tech is solid."; Liquidated Linda, "I have been liquidated 14 times today. it's fine."; Sandwich Bot 9000, "beep boop. front-running your dreams."

The in-fiction nods (Hank advertising hopium at "two gold a bag", citizens referencing $SOLT) are flavor barks, not live shop mechanics.

The Monster Roster, What You Can Fight

These are the real, server-spawned, fightable mobs. Every mob starts at 100 health (set to 99 on the server the moment it spawns). When health hits 0, the mob plays its death animation, despawns after a 3-second delay, and a replacement respawns at the same prefab position, the world keeps itself stocked.

MobTagCategoryEngage rangeNotes
ChickensChickenCritter1.5mEasiest fodder
CowsCowCritter (animal)3.0mBigger reach than chickens
Animals / BearsAnimal / BearCritter1.5m (Bear 3.0m)Generic wildlife
GoblinsGoblinGrunt1.5mStep up from critters
DemonsDemonBoss(default)Top-tier threat
CyclopsCyclopesBoss1.5mTop-tier threat
GuardsNPC (isGuard)Grunt1.5mSword-wielding humanoids
NPC humanoidsNPCGrunt1.5mGeneric human enemies

Which are tougher, the loot tier tells the real story:

  • Boss tier: Demons and Cyclops, the scariest things you can fight, drop the best loot.
  • Grunt tier: Goblins and NPC humanoids/Guards.
  • Critter tier: everything else, chickens, cows, animals, bears (the default, lowest tier).

Combat behavior (how a fight plays out):

  • Aggro & chase: once a mob has a target, it chases the player when they're between its engage range and 20m. Beyond 20m it gives up, drops the target, and returns to patrol speed. Chase speed: NavMeshAgent at 5.
  • Engage distance is per category (the column above): critters/grunts close to 1.5m, heavier bodies (Cows, Bears) stop at 3.0m.
  • Attack loop: when in range and standing still, the mob attacks on roughly a 1s wind-up, swing, then 2s recovery cycle. Sword-armed mobs play SwordAttack; bare-handed mobs play Attack.
  • Damage YOU deal uses a weighted distribution (dist = {0,0,0,1,1,1,1,2,2,2}):
    • 30% chance: 0-2 damage (a near-miss; the splat shows blue when the roll is 0)
    • 40% chance: 3-5 damage
    • 30% chance: 7-10 damage (red splat)
    • Average ~4-5/hit, so a full-health (99) mob takes ~20 hits to drop. (Note: a "6" damage result can't occur, and the 0-roll is a true whiff.)

Rewards for the kill (server-rate-limited so you can't farm spam):

  • XP: the killer's client reports the kill exactly once (one award per mob). The server rate-limits awards so kill-spam can't farm XP (Combat and Character XP that scales with the monster, 12-200; 3s cooldown).
  • Loot: on the same kill, the server rolls the tiered loot table and spawns a lootable pile. Boss kills roll the best table (see Section 11).

Mob-specific death plumbing (partially-built / quirks worth knowing):

  • Each mob type has its own destroy+respawn command; all respawn a fresh instance at the prefab's original position.
  • Known bug to flag plainly: the chicken respawn actually instantiates from the Cows array, so a slain chicken currently respawns as a cow. This is a real defect, not intended behavior.
  • Guards are special: when an armed guard dies, its sword detaches and is flung upward, and a replacement is queued after a 5-second delay, re-flagged as an armed guard. (The guard-respawn loop has a quirk that effectively respawns the same guard slot.)
  • The world also seeds non-combat resource nodes alongside the monsters: Rocks (mining) and Fishing Spots.

Bottom line for players: start on chickens and cows in the safe zone to warm up your swing, graduate to goblins and guards, and only push into The Trenches for demons and cyclops once you can take a hit, because up north, dying doesn't just cost you the fight, it costs you your Rekt Bag.

16. The Interface, Chat & Social Layer

Everything you touch in the world, talking trash, flexing your level, hauling loot to market, and arranging your screen exactly how you like it, lives in Soltara's HUD and social layer. It is built almost entirely in code at runtime (procedural panels, no scene clutter), themed in the house palette: Soltara gold #C2A45A, dark stone #1E1B12, cream #ECE3C8, royal blue #2E69AB, blood red #8E1F1F. Every window only appears once you're actually in the world and vanishes the moment you log out or drop into a fight.

At a glance: Four-tab chat, a left rail of pill buttons opening draggable/closable/position-remembering windows, a top-center XP bar, overhead nameplates, a minimap + full world map, the Trenches HUD, and a shared toast system.

World Chat

Chat is anchored bottom-left and split into four tabs:

TabPurpose
ALLGlobal world chat, everything everyone says, server-wide
CHALLENGESDuel-challenge requests/accepts with inline Accept / Decline buttons
PRIVATEOne-to-one whispers
TRADEBuy/sell shouting

Mechanics, exactly as built:

  • 80-character cap on every message, public and private.
  • Send on Enter / end-of-edit. Public messages broadcast via server command → client RPC so every client instantiates the line.
  • Color coding in the log: sender names in stone #483E33, normal text in blue, private-relayed lines in red.
  • Floating speech: the message you just sent also appears over your own head for 5 seconds, then auto-clears.
  • Private whispers push a rolling 3-slot notification stack, newest on top, labeled To:<name> or From:<name>, plus a persistent private chat log.
  • Chat layout fix: a client-side guardian auto-sizes rows to their text height (so long messages stop overlapping neighbors), forces word-wrap, kills TMP auto-sizing, and pins a readable 16px font, fully wrapped in try/catch so it can never break the game.
Note: the four tab labels are scene UI objects, not C# constants, the tabs exist and are wired, but tab content routing (which messages land in which tab) is handled at the scene/UI level, so message filtering by tab is only partially formalized in code.

Draggable HUD Windows

Every major panel, The Bazaar, Skills, Leaderboard, Daily Grind, is a window you own:

  • Draggable, hold-and-drag the panel body to move it (canvas-scale-aware).
  • Focus-on-click, clicking a window bumps it to the front of the stack.
  • Position-remembering, on drag-end, the position is saved to PlayerPrefs (which becomes IndexedDB on WebGL). Every player arranges their own HUD and it persists across sessions.
  • Clamped, windows can't be dragged off-screen (center clamped against the 1920x1080 reference canvas).
  • Closable, each window auto-gets a 26x26 "X" button top-right (stone fill; gold on hover, blood-red on press). Closing deactivates the panel; re-clicking its pill reopens it.

The Left Pill Rail

A vertical column of gold-outlined pills (190x44 each) runs up the left edge. They appear only in-world and hide in fights. Top to bottom:

PillOpens
The BazaarMarketplace panel (Section 7)
SkillsCombat/Mining/Fishing panel (Section 3)
LeaderboardLevel/Gold/Wins boards (Section 12)
Daily GrindDaily quest tracker (Section 8)
Customize HeroHero customizer modal (Section 13), solid-gold pill, sits above the chat block

(Each panel's mechanics are detailed in its own section; the Bazaar panel is 560x520, Skills 400x260, Leaderboard 460x470, Daily Grind 430x330, all draggable.)

The Wallet & Satchel

The legacy crypto "Next Refresh" betting panel was repurposed into a clean WALLET, the header is relabeled and every crypto-price row hidden, leaving only the gold balance. The Daily Grind system then drives the balance text with your real server-authoritative gold (no more hardcoded "100") and injects a SATCHEL block:

  • Tin Ore xN and Shrimp xN rows (live counts), plus a gold Sell All button, the merchant pays fixed prices: Tin Ore 5g, Shrimp 4g each, then toasts your haul. Items stack to 999.

(The future $SOLT token row is planned but not yet wired, only added once the token + icon exist.)

The XP Bar

A slim stone bar (380x22) pinned top-center, out of the way of the minimap (right) and chat (bottom). Shows Lv {n} and a gold fill with {cur} / {needed} XP inside, or MAX at level 100. XP comes only from doing things (the old idle trickle was removed):

SourceXPServer cooldown
Duel win150-
Duel loss25-
Mob kill12-2003s
Mining157s
Fishing128s
Cooking10~1.2s
Smithing40~4s
Trenches ambush win bonus+50stacks on duel XP

Floating Overhead Nameplates

Every player carries a billboarded world-space plate, Lv {n} {Name}, synced to their name/level/team flags so it updates live on level-up. Plate height is measured from the player's mesh bounds (clamped to dodge weapon/effect bounds). It's a level-tier flex, the badge color climbs with level:

LevelsBadge color
1-10green #7FE66B
11-20teal #35D6A4
21-30cyan #35C2E6
31-40blue #4F9BF5
41-50indigo #6E78F0
51-60purple #9D67F0
61-70magenta #CB5BDC
71-80rose #F25B9A
81-90orange #FF8636
91-100gold #FFD400

Founders/team get a server-authoritative isTeam flag (set only on a SIWS-verified founder wallet) rendering the entire plate in gold with a [TEAM] tag, impostors can't fake it via display names.

The Minimap & World Map

  • Minimap, a top-down camera that follows the player by a fixed offset each frame (null-guarded so it never throws on the headless server). Left-click the minimap to click-to-move. Disabled while in combat.
  • World Map, a full-screen map you can open (also combat-gated). Opening it swaps to the map camera and hides the gameplay camera, minimap, fight tools, chat, and info panels; closing restores them. Right-click the world map to open a teleport panel at the cursor and fast-travel.
Recent fix: town names on both the minimap and world map were pixelated and have since been sharpened.

The Trenches HUD

The PK-wilderness overlay (its own canvas). Everything north of the ditch line (z > −250) is lawless. It gives you:

  • Depth badge, under the XP bar, blood-red, THE TRENCHES · DEPTH {n} (depth = 1 + floor((z + 250) / 30)). Shows only in the wild.
  • Entry/exit toast banner, center-screen warnings on crossing in/out (4.5s lifetime).
  • The blood-red ditch line, a 96-segment line raycast onto the terrain at z = −250, spanning x −250→700.
  • ATTACK button, appears (center-bottom, blood-red) only when you're in the wild and targeting a living, non-local player also in the wild; reads ATTACK {name}.

(Full ambush rules, Rekt Bags, grace, and brackets are in Section 10.)

Toasts

The shared notification system used by every system above. Slides in from top-center, stacks downward, auto-dismisses (default 4s) with a thin timer bar. Three kinds color the left accent and timer bar: Info (gold), Success (green), Error (red). A persistent variant adds a gold action button (e.g. "Refresh"). Boxes auto-size and wrap long text.

Overall HUD Layout (at a glance)

  • Top-center: XP bar → (in the wild) Trenches depth badge directly beneath it.
  • Left edge (bottom-up rail): The Bazaar, Skills, Leaderboard, Daily Grind, Customize Hero pills; each opens a draggable, closable, position-remembering window.
  • Bottom-left: the four-tab chat block (ALL / CHALLENGES / PRIVATE / TRADE).
  • Right: the minimap (click-to-move; opens the full World Map).
  • Wallet panel: gold balance + the Satchel (Tin/Shrimp + Sell All).
  • Center/over-the-world: Trenches toast banners and ATTACK button, plus the global toast stack.
  • Overhead: floating Lv N Name nameplates with level-tier color flex and the gold [TEAM] tag for founders.

17. Roadmap & Coming Soon

Everything above is live in the build today. Below is the honest roadmap, features that are designed, named, or partially scaffolded but not yet playable. We ship the gold layer first and complete; the on-chain layer only happens after proper legal review. Nothing here is a promise of dates, it's the direction.

At a glance: $SOLT token + treasury (legal-gated), the Degen Wheel daily spinner, more gatherables/items, player profiles + PFP, and World 2. All planned, none live yet.

$SOLT, the Token, Treasury & the One Bridge (planned · legal-gated)

The planned on-chain Solana token. Unlike gold, $SOLT carries real external market value, gold never will, by deliberate design. The reference architecture:

  • The one bridge: the only sanctioned path between gold and token is selling gold for $SOLT, player-to-player, on the Bazaar, reference split 95% seller / 5% treasury.
  • Direct $SOLT spend reserved for special sinks (e.g. paid wheel spins ~$3 USD), reference split 50% burned / 50% treasury.
  • No token gate, ever, free guest play + optional wallet stays our funnel advantage; there is no minimum-token requirement to play. (Our deliberate edge over wallet-gated competitors.)

This entire layer is gated on the lawyer conversation, tokenomics, and a liquidity plan. A token done wrong is worse than no token.

The Degen Wheel, Daily Spinner (planned)

A free daily spin for gold and materials, a daily-login habit engine. Reference design: a 20-segment wheel where roughly 1/20 wins gold and the rest pay materials, with a free spin on a timer plus an anti-bot gate (a minimum average skill level to qualify, so fresh bots can't farm it). The paid-spin model (extra spins for ~$3 in $SOLT, 50% burned / 50% treasury) is the reference design for the future token economy, also legal-gated.

More Gatherables & Items (planned)

The Satchel, Bazaar, loot tables, and Rekt Bags are all built on a generic item system that today carries just two resources (Tin Ore, Shrimp). The plumbing is deliberately general so new gathered materials, tiers, and item types slot in with minimal work, and the Bazaar/loot systems inherit them automatically. Deeper gathering (tools, more nodes, more resources) is on the list.

Player Profiles + PFP + Badges (planned)

A profile page that renders your customized hero as a generated PFP, plus a motto, badges, and a privacy toggle, pairing directly with the existing Hero Customizer. The customizer's rarity-dot system (every cosmetic is "Common" today) is already plumbing for this future cosmetics-and-flex layer. Cosmetics will always be visual-only, never pay-to-win.

Hats & Phase-2 Cosmetics (partially built)

The Hero Customizer's Hat tab is built but locked, five greyed-out cards (Beret, Cap, Bandana, Helmet, Mask) stamped "(coming soon)". The headgear models and color cycling already exist in the underlying character system; they just aren't wired into the customizer UI yet. Phase-2 outfits and hats are planned.

World 2 (and World 3) (planned)

The world-select screen already teases World 2 and World 3 as grayed-out "COMING SOON" panels. There is one live server (World 1) today; additional worlds are a roadmap placeholder, not yet running.

Other Designed-But-Not-Live Systems

  • Duel wager stakes, the wager UI is fully built and syncs a bet value between players, but moves no gold today. Wiring it with real escrow (or removing it) is on the list; it's the natural home for $SOLT stakes later.
  • Banking, a Banker NPC opens a PIN-pad UI shell, but there's no deposit/withdraw/item-storage logic behind it yet. Non-functional for now.
  • More gold sinks, cosmetics purchases and building/consumable systems (e.g. heal-station crafting) are named as future sinks to balance the economy's faucets; none charge gold yet.
  • World item index, a public live supply count of every item in the game ("checking the supply"), a degen-native transparency flex, planned once the economy warrants it.