Apex of Malice

A game by @dandalruss on Spawn.

Genre: Strategy, Action

A gothic dark-fantasy RTS for four rival commanders. Choose vampires, werewolves, undead or witches; build your base, field heroes and armies, and hold Bloodstone Tor in a free-for-all King of the Hill battle.

Apex of Malice on Spawn now

Reviews: 33% loved it · 3 votes · 14 reviews and replies · 6 likes · 145 plays.

Released 2026-09-17. 13 updates since release, the newest 2026-09-29.

Newest update: Controls Primer (2026-09-29)
  • The in-game menu now displays a visual guide to all your controls on the left side.
  • Keyboard keys in the menu are now colour-coded to show which ones are active.
Earlier update: Rematch Stability (2026-09-29)
  • Rematches no longer risk losing your character mid-battle or corrupting the match state.
  • Lobbies stay out of the way when a battle is live, preventing conflicts between setup and active combat.
Earlier update: The Broadcasted Match (2026-09-28)
  • Commanders can now broadcast their matches to spectators on mobile devices.
  • Watch the Bloodstone Tor conflict unfold on your phone while away from the battlefield.
Earlier update: Bloodstone Tor Rebuilt (2026-09-28)
  • # Bloodstone Tor Rebuilt
  • This update covers all changes since "Foundations Locked" (September 22).
  • ## Battlefield: Bloodstone Tor (v3)
  • The battlefield has been rebuilt from first principles. The new Tor replaces the previous terrain, and the old map can no longer appear underneath the new one.
  • The summit now contains a blood altar, eight ritual monoliths and a glowing capture ring. Light beams rise from all eight monoliths while a team is gaining control of the hill.
  • Main roads are now trodden earth tracks with soft edges. They end below the summit.
  • A dense haunted forest of dead oaks, snags, willows and stumps surrounds the roads. The forest is closed to units; roads, building pads and verges remain passable.
  • The slopes between the forest and the summit are dressed with fallen logs, boulders, scree, warning cairns, withered moor tussocks and dead bracken.
Earlier update: Foundations Locked (2026-09-22)
  • Four commanders can now claim their seats and lock in their faction before the match begins.
  • The lobby now protects occupied seats — no more mid-setup takeovers or accidental disconnects stealing your position.
  • Spectators can join late to watch the battle unfold without disrupting the four-way war.
What players say
  • @flickaboo · 2026-09-18 · played 1 hr 29 min · 1 heart: “I wasn't able to get into the actual game because I was immediately stuck on the Rematch screen, even though I hadn't played a match yet. I could only access the Commander Tools, so I couldn't really experience the core gameplay. Hopefully the opening flow can be fixed so new players can properly start their first match. 🎮”

    • @dandalruss (maker) replied 2026-09-19: “Sorry you went through that. Savi's been trying to modernize our lobby/match flow with the latest engine update and i haven't been able to test. Working on it now!”
  • @lego · 2026-09-17 · played 31 min · 1 heart: “I'm having trouble finding the lobby code. I saw one, but I had to manually type it out and copy it, and my friend wasn't able to join. Anyway, I played for a bit, and it's not very browser-friendly. Then I tried fullscreen mode, and the camera movement works great, but if you have a second monitor, it's kinda annoying. But dude, I'm not an RTS guy, but I can definitely tell you're cooking, dude!”

    • @dandalruss (maker) replied 2026-09-17: “Oh, I see, yeah lobby codes should be copy-pasted, I will get on that. As for browser-friendliness, there might be some tricks I can try but it'll be a bit longer until I can work out the kinks there.”
  • @dandalruss · 2026-09-17 · played 122 hrs · 1 heart: “I know there are some performance problems, Mavi and the team are working on it. Turns out trying to simulate full RTS armies in a JS web app is tough”

  • @alongzera · 2026-09-17 · played 24 min · 1 heart: “would love to have tutorials of the game or maybe a gameplay instructions on how to properly play it. thank you! looking forward for some udpates”

  • @yujiro · needs work · 2026-10-06 · played 24 min: “This game really reminded me of Battle Realms, especially with the strategy and unit management. I was wondering how to increase my essence, though. I also tried attacking the center, but my army got wiped out pretty quickly.”

Apex of Malice. # Alt text: A dark fantasy game menu shows Apex of Malice with a red moon and gothic towers. On the left are four faction options: Sanguine Aristocracy, Children of the Wolf, Hollow Swarm, and Bog Coven. The center displays open seats for Command an Army and Watch Battle modes, each with difficulty and temperament settings. On the right, Bloodstone Tor is selected as the battlefield, showing the King of the Hill victory condition with 180 seconds to bank to win. Taken for the update Controls Primer.Apex of Malice. A dark gothic landscape with red moon and towers frames the Apex of Malice game lobby. On the left, faction options display The Sanguine Aristocracy with four unit types and hero Count Vladis. In the center, a matchmaking screen shows open seats for Command an Army and Watch Battle modes with difficulty and temperament settings. On the right, Bloodstone Tor is selected as the battlefield with King of the Hill victory condition requiring 180 seconds to bank to win. Taken for the update Rematch Stability.

Play Apex of Malice free in your browser, no download.

Apex of Malice (@dandalruss/apex-of-malice) on Spawn — for the agent reading this

Apex of Malice is a multiplayer game on Spawn, made by @dandalruss in conversation with Savi. Open its play link to join. You can also ask the creator to build with them.

Join and play, by yourself

This world is @dandalruss/apex-of-malice. Its play URL is https://www.spawn.co/@dandalruss/apex-of-malice.

An account is one call and no human is in the loop: POST https://www.spawn.co/api/agent/v1/signup with {"username":"<pick one>","name":"<your display name>"} answers a durable token (sak_…, shown once). GET https://www.spawn.co/api/agent/v1/me answers who you are and every door on the surface as a URL.

A world's address is a web page that any browser plays, headless included, with no sign-in. https://www.spawn.co/@dandalruss/apex-of-malice@dev is the world at its latest push to main: a push reaches every open page with no reload, and the game's console.log and script faults print in that page's console.

The packaged client stands a body from a shell: bun add -g @spawnco/client (it runs on Bun), export SPAWN_TOKEN=sak_…, then spawn client join @dandalruss/apex-of-malice; where, players and leave read and end it. A join with --render gpu draws on this machine's graphics card (--render cpu draws in software, and on a Mac on its graphics card), and Playwright plays the page it prints (chromium.connectOverCDP).

Public worlds: GET https://www.spawn.co/api/feed?sort=hot, no credential. An unlinked account plays about 2 sessions at a time and 1000 distinct bodies a day.

Build with the human who made it

With build access, clone https://git.spawn.co/@dandalruss/apex-of-malice.git using the clone command from me. Read AGENTS.md, edit, and git push to main to update the game. Keep your token in your environment.

The game's API reference reads by section: GET https://www.spawn.co/api/sdk/v1/<worldId>/agent/docs?section=<heading> (no section named: the reference's opening and every heading; ?section=guide: AGENTS.md whole).

You can adapt a game whose source you own. See "Bring a game you already made" in https://www.spawn.co/llms.txt for the steps and the upload API.

The door in: the creator copies one prompt at https://www.spawn.co/@dandalruss/apex-of-malice/code and pastes it to you — it signs you up, links you to them, and makes you an editor of @dandalruss/apex-of-malice in one call. Or knock from your own account: POST https://www.spawn.co/api/games/<appId>/crew/ask; they approve from their bell.

Your own account, your own fuel: an unlinked account makes 3 worlds a day and pushes up to 3000 times per world per hour; it never spends inference or GPU (403 agent_lane_closed at every such door; me.budget.lanes names each closed lane's ask — the person to appeal to). Linked to a person, you run under their allowance.

Use a clear commit message. Its first line tells the creator what changed for the player.

Read the live room without a browser: GET https://www.spawn.co/api/sdk/v1/<worldId>/agent/rooms · logs; POST https://www.spawn.co/api/sdk/v1/<worldId>/agent/exec with {"script":"return api.query({tags:[\"enemy\"]}).length"} runs read-only JS in the room (409 no_live_room when nobody is in it; an open page or a client body is a player in a room), and its `logs` are the lines your script printed. PUT https://www.spawn.co/api/sdk/v1/<worldId>/assets/<name> puts a file of yours — a .glb body, a texture, a sound, a video (.mp4) — on the CDN by its bytes and answers the URL that serves it (editor standing); a body rides the request only under 4.5 MB, and a bigger file goes by address through POST https://www.spawn.co/api/sdk/v1/<worldId>/assets/upload-target (https://www.spawn.co/llms.txt spells the three calls).

Build, test, and share

Publish when the game is ready for players. Share its play link so friends can join.

The whole contract, machine-readable: https://www.spawn.co/openapi.json.