Lumoria Get alpha access
Devlog

What works, what is next, and what is honestly broken

Lumoria is built by one person. This page is an honest account of where the game stands, and it is updated every time something new goes live.

Where it stands

Three honest columns

✔ Working now
  • A world you can walk around in, right in your browser. It keeps running after you log off.
  • Sign in with Discord, or jump straight in as a guest without making an account.
  • Fight monsters, take what they drop, and level up.
  • Zones built with an in-game editor
  • Chat to people, party up with them, and travel from the world map.
◆ Being built
  • The seven orders. Pick a god at level 10 and their whole class tree opens up to you.
  • Artwork for every class is finished and is being added to the game.
  • Oath quests at each order’s hall in town
  • The bestiary families and named bosses
  • The Emberforge crafting system
○ Not built yet
  • Balance. Every number in the game is a placeholder right now, and all of them will move.
  • Second Oath fusions for late-game characters
  • Any kind of player-versus-player fighting
  • Phones. It runs on them, but it is not designed for them yet.
  • Real music, and sound effects worth turning up
Under the hoodevery system already built, with the code file that proves it
The world server

One server runs the whole world, measures its own speed, and only sends you what is happening near you.

SystemWhat it doesWhere it lives
Authoritative simulationThe server owns the world. Movement, combat and loot all resolve there, so nothing is decided by your client and nothing is decided by trust.server/src/WorldRoom.ts
Area-of-interest networkingYou are only sent entities relevant to where you are standing. It is the difference between a town that holds people and a town that stutters.server/src/aoi-relevance.ts · aoi-view.ts · spatial/SpatialGrid.ts
Interpolation bufferingOther players arrive on a short delay and are drawn along the path they took, so movement is smooth instead of teleporting.client/src/game/InterpolationBuffer.ts
Tick profilingEvery server tick is measured. When something gets slow there is a number saying which part.server/src/TickProfiler.ts
Seeded procedural dungeonsDungeon layouts generate from a seeded stream, so a run can be reproduced exactly, which is what makes them debuggable instead of mysterious.server/src/procgen/dungeon.ts · rng-streams.ts
Instanced stages and boss roomsStage rooms and boss encounters run as their own instances with their own lifecycle.server/src/rooms/StageRoom.ts · BossEncounter.ts
Postgres persistence with migrationsCharacters, equipment instances, stages and souls all persist, with a migration path and a proof-of-save test.server/src/db.ts · migrate.ts · prove-save-migration-postgres.ts
Combat

Cast bars, swings that wind up, hits that land on time, and a camera that reacts.

SystemWhat it doesWhere it lives
Cast-time combatSkills have cast time and a cast bar. Movement, interruption and latency are all handled explicitly rather than hidden.shared/src/combat-cast.ts · client/src/game/CombatCastController.ts
Swing anticipation and impact syncThe animation leads the hit and the impact lands on the frame it should, so a swing feels connected rather than approximate.client/src/game/BasicSwingAnticipation.ts · attackImpactSync.ts
Combat feelHit pause, camera kick, and feedback presentation are separate tunable systems, not side effects.client/src/game/combatFeel.ts · combatCameraKick.ts · CombatFeedbackPresenter.ts
Status effects and elementsA real status-effect layer and an elemental table underneath the numbers.content/status-effects · shared/src/elements.ts
Monster mechanicsMonsters carry authored mechanics packages rather than a single attack loop.content/monster-mechanics · server/src/monster-content-runtime.ts
Kill chains and rewardsCredit, experience and reward presentation resolve through their own path so group play pays correctly.shared/src/kill-chain.ts · server/src/monster-xp.ts
Character and gear

Every item is its own object, with set bonuses, extra stats and upgrades, the parts an MMO lives or dies on.

SystemWhat it doesWhere it lives
Equipment instancesItems are instances with their own state and their own persistence, not stack counts. That is what makes an individual piece yours.server/src/equipment-instance-runtime.ts · equipment-instance-persistence.ts
Stat scalingGear scales through a real stat pipeline rather than flat numbers stapled to a name.server/src/equipment-stat-scaling.ts · shared/src/attributes.ts
Affixes and item budgetTen affix families, and an item budget system so a piece cannot quietly out-scale its tier.content/affixes · shared/src/item-budget.ts · server/src/item-budget-outcomes.ts
Item sets and bonusesEight authored sets with real set bonuses.content/item-sets · shared/src/item-set-bonuses.ts
EnhancementPush a weapon one level higher. It can fail, and at the top end it can break, so the odds are shown before you commit.server/src/systems/EnhancementSystem.ts
Crafting and recipesA crafting system with authored recipes behind it.server/src/systems/CraftingSystem.ts · content/recipes
Class advancementThe class tree is code, not a diagram: advancement and progression are separate services with their own rules.server/src/class-advancement.ts · class-progression.ts
ProfessionsMining levels on its own track alongside your class, so time in a mine is never time away from progress.server/src/profession-progression.ts
EssencesAn essence layer for character customisation beyond gear.server/src/essences.ts · content/essences
Things to chase

Collections, deeds, hunts, leaderboards, monster souls.

SystemWhat it doesWhere it lives
MVP bossesFour named world bosses on real respawn windows, the kind you camp, race for, and lose. Coralsting Cactuscorpion, Pearlthrone Clamdragon, Sevenhorn Waywarden, Starcap Triune.server/src/mvp-respawn-policy.ts · content/monsters/monster_mvp_*.json
CollectionsThirty collection cards across seven sets, with their own drop-rate system.server/src/systems/CollectionSystem.ts · collection-drop-rate.ts · content/collection-cards
Monster soulsSome monsters leave a soul behind. Socket it and it pays a stat, so the bestiary is something you fill, not just read.server/src/monster-soul-catalog.ts · monster-soul-persistence.ts
DeedsAchievements with their own system and their own storage.server/src/deeds.ts · systems/DeedSystem.ts
The hunt boardFourteen hunts on a board. Take one, run it in an evening, get paid in Oathtokens and spend them at the hunt shop.server/src/systems/HuntBoardSystem.ts · hunt-week-ledger.ts · HuntShopSystem.ts
Leaderboards and lifetime statsTwo boards, fastest stage clear and the level race, plus a lifetime tally for your character.server/src/systems/LeaderboardService.ts · lifetime-stats.ts
LootForty-two loot tables and a projection system so drops can be reasoned about before they ship.server/src/systems/LootSystem.ts · shared/src/loot-projection.ts
Chests and interactablesChests worth opening, and objects worth walking over to: levers, shrines, and the things a quest sends you to touch.server/src/systems/ChestSystem.ts · InteractableSystem.ts
The living world

Parties, chat, travel, a day/night clock, and events on a schedule.

SystemWhat it doesWhere it lives
Parties with ready checksParty chat and a ready-check flow, because the coordination is the content.server/src/party-chat-hub.ts · party-ready-check.ts
ChatGlobal chat, party chat and whispers, all through the server.server/src/chat.ts
World map and travelThirteen maps joined by eleven portals, and a world map you travel from, so you are never walking the whole way back.server/src/world-map-travel-policy.ts · content/maps · content/portals
Day and nightThe sun goes round every sixteen minutes and it rains sometimes. Same sky for everyone on the server.client/src/hud/DayNightClock.ts · server/src/world-environment.ts
Scheduled eventsFive events with a scheduler and a calendar, so the world has dates in it.server/src/systems/EventScheduler.ts · EventService.ts · visit-calendar.ts
Quests and dialogueFifty-two quests and twenty NPCs, driven by a dialogue service.server/src/systems/DialogueService.ts · content/quests · content/npcs
MailSend another player a letter with coin or items attached. They collect it next time they log in.server/src/systems/MailService.ts
Guided first hourA prologue, a tutorial system, coach marks and a first-hour guide, the part most solo projects skip.server/src/systems/IntroTutorialSystem.ts · client/src/hud/firstHourGuide.ts · coachMarks.ts
Built to be built with

The tools around the game, which is the part that makes one person able to make an MMO at all.

SystemWhat it doesWhere it lives
An in-game zone editorZones are laid out inside the running game, place, collide, undo, batch, apply, with durable history. Not config files.client/src/editor/EmbeddedEditorController.ts and 15 sibling modules
GM commands and a bot harnessA GM command service plus an orchestrator that drives bots through the world to find bugs.server/src/gm-commands.ts · systems/GmBotOrchestrator.ts
In-game bug reportingPlayers report bugs from inside the game and the reports are stored server-side.server/src/bug-report.ts · bug-report-storage.ts
Headless captureThe game renders zones headlessly, so the way it looks can be reviewed without a human opening it.pnpm capture:zone
An asset pipelineAn asset bank with semantic metadata, promotion gates and automated checks over every image that ships.content/asset-bank · content/asset-semantic-metadata.json
277 build and check scriptsValidation, fixtures, audits and proofs, run as one battery.package.json
The order of arrivalthe order the seven arrive in

Launch is the seven Lv 10 lines. Branch jobs land per order, in updates, in this sequence. The seven annual festivals (Oathstone Day, Naming Nights, the Overgrowth Fair, First Flame, the Quiet Feast, Sparkfair, Packmoot) are the recurring layer over the top of it. The whole spine is seven trees and roughly 450 to 550 beats: a multi-year build, said out loud.

  1. the Wallsworn: Aegemar builds walls to shelter what is inside them, and stands outside all of them.
  2. the Dawnflame: Aurelith is the dawn that was never allowed to end.
  3. the Emberforge: Ignivar says every mortal talent is one of his escaped sparks.
  4. the Wildhunt: Sylvara hunts a wild that obeys nobody, herself included.
  5. the Starspire: Caelendra wrote the world in one night of falling stars and has regretted exactly one word of it since.
  6. the Packsworn: Fenriel the Packmother gives the bond between a soul and a wild thing.
  7. the Moonveil: Vesperine offers quiet endings and keeps the name the others struck.