Inspiration

Finance is a very daunting subject. A lot of games have tried to make it fun, but none of them seemed to click for us. So, we decided to create our own finance game that's actually fun, not just looking through spreadsheets and technical analysis, and it still actually teaches you how to make good financial decisions.

What it does

Atlantis is a 2D pixel-art game set in a sinking underwater city. The 'Council' has read the tides: Atlantis sinks after the Long Dark. One ship will leave, and Passage on it is sold for coin, only to people who owe nothing to anyone.

You have one year to get on that ship:

  • Four seasons: Spring, Summer, Autumn and the Long Dark.
  • Six tides each: every tide is one move. You work, trade at the Market, invest at the Harbor Exchange, borrow, save and pay down debt.
  • A rising price: Passage costs 1,200◈ in Spring and climbs every season. Coin that just sits there falls behind.
  • About ten minutes for a full run.

Everyone starts somewhere different. Each of the four classes is built on a real financial barrier, and none is labelled by identity:

  • The Newcomer: no credit history, so no card or loans until they build one with a secured card.
  • First of Their Line: no family wealth, and starts 500◈ in debt to the guild.
  • The Caretaker: care duties cost tides and coin every season, but they have a community lending circle.
  • The Tidewalker: pay swings between 0 and 120◈ a shift, and the Bank won't give them a savings account at first.

Every mechanic is a real money concept. Inside the game everything uses in-world names. Then the Modern Mirror, a gilded mirror button in every building, reveals the real thing behind it:

  • Purse / Vault → Checking / savings account
  • Leviathan Credit → Credit card (30% a year, minimum payments, late fees)
  • Standing (300–850) → Credit score
  • Harbor Exchange → Stock market
  • The Tide Index → S&P 500 index fund
  • Deepcoral Salvage → Penny stocks and lottery tickets
  • The Council's debasement → Inflation
  • Grin at the Black Reef → Payday lender
  • Old Maro's lending circle → ROSCA (tandas, susus, chit funds)
  • The Pearl Exchange → Ponzi scheme
  • Nerissa's games at the Drowned Bell → The house edge

The game teaches by consequence:

  • Market shocks: one unexpected event hits every season, such as a crab raid on the granaries, a kraken in the shipping lanes or a pearl divers' strike, so you feel volatility.
  • Event cards with real choices: dispute a fraudulent charge, walk away from a "guaranteed" 40% return, or take Grin's easy money.
  • A season report card on a parchment scroll: how close you are to Passage, A–D grades on your choices, where every tide and coin went, how your investments did, and three blunt feedback bullets from Chelo, a 300-year-old turtle.
  • 13 Scrolls: earned for good and bad play, like The Debt Spiral, Siren Song and Read the Ledger, so even losing teaches something.
  • Endings with a lesson: escape with wealth, escape with nothing, get rescued by your lending circle, or miss the last ship. The final Modern Mirror then explains what happened in real-world terms.

How we built it

Capital One Nessie is the money layer. Every coin movement in the game is a real banking record:

  • Accounts: each class is its own Nessie customer with checking (Purse), savings (Vault) and a credit card account.
  • Loans: the guild loan, the lending circle and Black Reef advances are loan records, kept current with PUT updates.
  • Money movements: wages, sales and dividends are deposits. Market, Exchange and Passage spending are purchases at in-world merchants. Moving coin between Purse and Vault, and paying the card, are transfers.
  • Confirmation: each money effect is queued, POSTed to Nessie, then read back with a GET to confirm it landed. Responses are cached locally, so the game keeps running if the API lags.
  • The in-game Ledger: shows every Nessie record with its status and checks the Purse and Vault against Nessie's balances.

A deterministic game engine (Python):

  • Pure and seeded: its seeded so every run in different and unique. It makes the game much more fun to replay.
  • One config file: every number in the game lives there.
  • A balance simulator: bots play thousands of seeded years per class with different strategies (wages only, saver, gambler, kelp trader, diversified, thoughtful) so we can measure what numbers are actually fair to keep.

The rest of the stack:

  • Backend: FastAPI and Pydantic, with SQLite storing runs, actions and the Nessie queue.
  • Frontend: React and TypeScript, plus Phaser 3 for the clickable underwater city: three rings of land and water, caustic light, swaying kelp and fish schools.
  • Gemini API. The engine calculates every grade and number. Gemini writes only Chelo's three feedback bullets. Every reply is checked automatically: filler phrases are rejected, length is limited, and any number that didn't come from the engine fails the check.
  • Hosting: the frontend is on Vercel and the backend on Render.

Challenges we ran into

  • Making it fun and honest at once. Balancing took a lot of simulator runs. Early on, a few hundred coins invested earned less than the shift it cost to trade, so investing lost to saving. We made the first Market and Exchange visit each season free. We also found that money owed to the lending circle wasn't counted as debt, which let one class buy Passage in Spring, so we closed that loophole.
  • Nessie in production. Some resources behaved differently from the docs. Bill reads returned errors, and transaction records didn't update account balances. We built a sync layer that confirms every record with a GET, holds later records behind unconfirmed ones, and only sends loan and bill records once they're verified live.
  • Explaining a deep game quickly. Playtesters were lost at first. We added Chelo's guided tour, short plain explanations in every building, and the Modern Mirror. That way the real-world lesson arrives after you've felt the mechanic, not before.

Accomplishments that we're proud of

  • A complete game: a full year, four classes, 14 market shocks, 13 Scrolls, a season report card, four endings, and a hand-built beautiful pixel-art city.
  • Real banking behind every coin: each move is posted to Nessie and confirmed.
  • Real barriers, not stereotypes: the classes change where you start, never the rules.
  • Teaching by consequence: real-world finance terms appear only in the Modern Mirror. Everywhere else, you learn by playing.

What we learned

  • People remember what happened to them far longer than what they were told. A credit card that snowballed, or a fraud charge they forgot to dispute, sticks better than any definition.
  • A deterministic, fully tested engine made balancing possible. We could change one number and see its effect across thousands of games in seconds.
  • Building on a real banking API forces you to handle the messy parts: failures, retries, confirmations and records that don't behave as documented.

What's next for Atlantis - The Long Night

  • A classroom mode with a shared seed, so a whole class plays the same year and compares choices.
  • More starting classes based on other real barriers.
  • Business ownership and bank loans. Both are already built in the engine and switched off until they're balanced.
  • Sound, and a more dramatic Long Dark.

Built With

Share this project:

Updates

Submission history