Champions Ascension is an Arena RPG where you collect and battle your own squad of brutal gladiators. You will embark on the pulse-pounding story of a gladiator on a blood-soaked rise to glory!
Gameplay Programmer
Unity, C#, Photon
Arena MMORPG
Champions Ascension is an NFT-based MMORPG developed by Plai Labs (backed by $32M in seed funding), set in the gladiatorial fantasy world of Massina. Players own, train, and battle NFT champions — earning in-game resources and ascending through tiers toward Eternal status.
My role was to design and build the mini-games hosted inside The Sleeping Karkadon — the game's social tavern hub where NFT holders gathered during the pre-alpha Slice of Massina events. These mini-games were the primary live content for the game's earliest players and NFT holders.
Players select a crab and watch a chaotic race unfold on a circular tavern table. Winners earn tickets redeemable for NFT reward boxes. Built the full race simulation — crab AI locomotion, race state machine, ticket reward logic, and synchronized spectator view across all connected players.
A multiplayer bluffing dice game (also known as Liar's Dice). Each player rolls in secret, then bids on the total dice across the table — raising or calling bluff until someone shouts "Lo Dudo!" Built the full turn-flow system, hidden dice state, bid validation, Wild Ace rule logic, and networked game room management.
The core challenge was keeping game state consistent across all clients
in real time — especially for Dudo, where each player must see only their own dice
but the bid history must be perfectly authoritative for everyone at the table.
This required designing a custom hidden-state synchronisation system
using Photon RPCs and room properties, so private dice rolls were never exposed
to other clients while still being verifiable on resolution.
For Crab Racing, the challenge was different — ensuring the race simulation
felt chaotic and fun while staying deterministic enough that all clients
agreed on the outcome without a dedicated server. Solved by running the simulation
on the Master Client and broadcasting checkpoints and final results via RPCs,
while other clients ran a visual-only interpolated version locally.