Ten hostiles hold a container yard. You have three minutes to clear it. A full tactical FPS that runs in your browser tab — no download, no install, no launcher. Currently in closed beta: request access and we send an invite code when the next wave opens.
Closed beta · invite only. Staking stays off until the contract is audited.
Four decisions. Everything between them is automatic.
Sign a free message to prove the wallet is yours. No transaction, no gas. A player account is created for you — the treasury covers the rent.
Duel 1v1 or Squad 5v5. Training is free and always open if you'd rather warm up against bots first.
You see the exact numbers before you commit — what you risk, what a win pays, and the rake. Cancel any time while queuing for a full refund.
Winnings land in your in-game balance so you can queue again without gas. Withdraw to your wallet whenever you like.
Stakes are fixed per mode so nobody can be pulled into a bracket they didn't choose.
Free-for-all. First to 10 kills takes it.
Team deathmatch. First team to 40 kills. Payout splits by personal score.
The full game against bots. No stake, no reward, no wallet needed.
Rake is 5% of the pot. The economy is closed and zero-sum: SOL paid out never exceeds SOL staked minus rake, so trading kills between your own accounts only burns rake. Matchmaking is server-side and random — you cannot pick your opponent.
What runs today, what is being built, and what is still only a plan. Each phase gates the next.
No dates. Phase 4 unlocks when the audit passes, not on a calendar — a shipping date is a bad reason to put a player's SOL behind unreviewed code.
HEXOPS is one file: a custom Three.js renderer and hand-written shaders running directly in a browser tab. No launcher, no install, no account. A fully rendered 3D match loads in seconds — on the machine you already have.
Stakes are designed to sit in a program-derived vault on Solana, not in a company ledger, and settlement is a single on-chain transaction per match. The program is written but unaudited and undeployed — no funds are held anywhere today.
Nothing is purchasable that changes how you shoot — no gear tiers, no NFT boosts, no paid advantage. Winning takes the pot minus rake; inside a team it splits by personal score. Elo decides who you are matched against, never what you are paid.
There are no audio files and no texture downloads. Every gunshot, footstep and impact is synthesized live through the Web Audio API, and the yard is generated at runtime — which is why the whole game ships as a single page instead of a multi-megabyte asset bundle.
How the economy, the contract and match integrity actually work — including what is not built yet.
HEXOPS is a closed, zero-sum economy. There is no token, no emission schedule and no faucet: the only SOL that can ever leave a match is SOL that players staked into it. Every payout is funded by an opposing player's loss, minus the protocol rake. This is a deliberate constraint — an economy that mints rewards from nothing is one that pays farmers faster than it pays players, and it always collapses.
| Term | Definition | Example — 1v1 @ 0.05 SOL |
|---|---|---|
| Pot | Sum of every player's entry stake | 0.100 SOL |
| Rake | Protocol fee, 5% of pot (platform_fee_bps, hard-capped at 10%) | 0.005 SOL |
| Distributable | Pot − rake | 0.095 SOL |
| Winner take | Full distributable in 1v1 | +0.045 SOL net |
| Loser | Forfeits stake | −0.050 SOL |
The winning team divides the distributable pot in proportion to personal score, so carrying your team pays more than being carried:
score = kills × 1 + assists × 0.5 − deaths × 0.5, floored at 0.
For any match: Σ payouts + rake = Σ stakes. The program never transfers more than
the escrow holds, and the vault is never permitted to drop below its rent-exempt minimum.
The program is written in Rust with the Anchor framework. All state lives in Program Derived Addresses, so account ownership is verified by the runtime rather than by application logic. Arithmetic is checked throughout; there is no unchecked add or subtract on any balance.
GameConfig — singleton at seed ["config"]. Holds the authority,
rake in basis points, entry-fee bounds, match timeout, lifetime volume and accrued fees.PlayerProfile — one per wallet at ["player", wallet]. Career kills,
headshots, wins, lifetime earned/lost, Elo, and the in-game SOL balance.GameMatch — one per match at ["match", match_id]. Escrow record,
participants, status, result stats and the payout breakdown.Vault — a single program-owned PDA that custodies all deposited SOL.initialize / update_config — set rake, stake bounds and timeout.
Rake is rejected above 1000 bps by the program itself, not by convention.register_player — creates the profile PDA. Once per wallet, ever.init_player_sponsored — creates the same PDA with the treasury paying the
rent and the player not signing, so a first-time user needs no SOL of their own to exist
on chain.deposit / withdraw — moves SOL between your wallet and the vault.
Withdraw is user-signed; no authority can move a player's balance out.create_open_match / join_match — the 1v1 path. One player opens a
match at a stake, the second joins; both stakes are debited into escrow.create_match — the team path. The full roster (2–10 wallets split across two
teams) is known up front and every stake is escrowed in one instruction.cancel_match — creator reclaims a stake before anyone joins.timeout_match — permissionless. Anyone may crank a match the server
failed to settle, returning stakes. This exists so a backend outage can never strand funds.settle_match_1v1 / settle_match — authority-only. Splits escrow,
records stats, updates Elo, for the duel and team paths respectively.refund_team_match — unwinds a team match that cannot be settled, returning every
participant's stake rather than leaving escrow stranded.withdraw_fees — moves accrued rake to the treasury.Rating is computed in pure integer arithmetic against a precomputed expectancy table.
Floating-point powf compiles to soft-float on BPF: expensive in compute units and
not guaranteed bit-identical across toolchains. Deterministic settlement requires integers.
A browser client is fully under the player's control. Any design that trusts what the client reports is not an anti-cheat design — it is an honour system with extra steps. HEXOPS is therefore built around a single rule: the client sends input, never outcomes.
These are sanity checks, not anti-cheat. The numbers still originate on the client, and the code says so in as many words. Presenting them as more than that would be dishonest.
Two modes, deliberately separated because they need different economics. Free-for-all is easy to collude in; team play is not.
| Mode | Format | Stake | Win condition |
|---|---|---|---|
| DUEL | 1v1 free-for-all | 0.05 SOL | First to 10 kills, 5 min cap |
| SQUAD | 5v5 team deathmatch | 0.02 SOL | First team to 40 kills, 8 min cap |
| TRAINING | Solo vs AI | None | Clear 10 hostiles, 5 min cap |
Players start at Elo 1000. Rating transferred to the winner is K × (1 − expected)
with K = 32, always at least 1 point, and the loser never falls below a floor of 100. The
transfer is symmetric: the winner gains exactly what the loser loses, so the pool neither
inflates nor drains.
| Vector | Countermeasure |
|---|---|
| Kill-trading between own wallets | Zero-sum pot; collusion only burns rake |
| Picking a weak opponent | Random server-side matchmaking |
| Alt accounts / smurfing | Stake required up front; Elo-banded queue |
| Idling for a payout | Idle kick, stake forfeit |
| Rage-quitting a losing match | Disconnect scored as a loss FIX PENDING |
| Fabricated results | Server-authoritative scoring; client never reports kills |
Global ELO Leaderboard of HEXOPS Combatants
| Rank | Operator Wallet | ELO Rating | Total Wins |
|---|
Request access with your Solana wallet address and we send an invite code when the next wave opens. Codes unlock the game on your browser immediately — no payment, nothing to install, and no transaction to sign.
The escrow contract is unaudited and the server-authoritative match loop is unfinished. Controlled waves let us fix what play data exposes before anyone's SOL is involved.
No. The beta is the complete game — same map, same weapons, same AI — and costs nothing. A wallet only matters later, for staked matches.
None. Staking is disabled and no on-chain settlement is live. Nothing on this site can currently charge or pay you.
Yes, once staking ships. A staked match puts real SOL at risk: losing forfeits your entry. Never stake more than you can afford to lose.
The economy is zero-sum — payouts never exceed stakes minus rake, so trading kills between your own wallets only burns rake. Matchmaking is server-side and random, so you cannot choose your opponent.
HEXOPS is in closed testing while the escrow contract is audited and the server-authoritative match loop is hardened. Join the list and we send an invite code when the next wave opens.
Paste the code from your invite. It unlocks the game on this browser.
We'll send your invite code when the next wave opens.
LOADING ORDNANCE…