Magnus — 3D magnetic puzzle-platformer
Translation pending
GamesJavaScript · CSSGitHub @pradhulOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A grid puzzle game about a salvage rigger whose body became a magnet.
Magnus can pull and push anything ferrous. Force is mutual: light things slide to him or away from him, heavy things move him. Unlike poles pull, like poles push, iron can only be pulled, and crystal is invisible to a field. Every puzzle is one of those facts, applied.
Chapter 1, The Clearing, is ten rooms of increasing difficulty. See
DESIGN.md for the storyline, the rules, the obstacle catalogue,
and a walkthrough of each room.
Version 0.3.0.
Open index.html in a browser. Nothing to install; Three.js is loaded from a CDN.
If your browser blocks scripts on file://, serve the folder instead:
python3 -m http.server 8765 # then open http://localhost:8765/
?level=7 in the URL jumps straight to a room.
The page opens on a title screen: field lines trace between two poles and
flip every few seconds. Enter the bay (or Enter) starts the game;
Play fullscreen (or F) starts it in fullscreen.
The board fills the window with no text on it. Info (or I) opens rules,
story, and level select; Fullscreen (or F) hides the browser chrome and
puts the pad on screen so the game is playable on a phone or in a kiosk.
The game is a static site (no server), so it fits Render's free static tier.
render.yaml describes the service; the level solver runs as the build step so
a broken room fails the deploy instead of shipping.
Or manually: Render Dashboard → New → Blueprint → pick this repo. Every push
to main redeploys; pull requests get their own preview URL.
| Key | Action |
|---|---|
| Arrows / WASD | Walk |
| Shift + direction | Pulse your field that way (or tap a tile in your row/column) |
| Space | Flip your pole N ⇄ S |
| Z | Undo |
| R | Restart room |
| F | Toggle fullscreen |
| I | Open / close info |
| H | Open info and toggle hint |
[ ] | Previous / next room |
Touch / fullscreen: on-screen d-pad on the left; Pulse, Flip, Undo, Restart on the right. Toggle Pulse to make the pad pulse instead of walk.
index.html page shell, splash screen, overlay controls, info panel
src/splash.js title-screen animation: traced field lines between two poles
src/engine.js the rules — pure logic, runs in the browser and in Node
src/levels.js the ten rooms as ASCII maps
src/render3d.js Three.js view: geometry, lighting, animation of engine events
src/main.js input, undo history, progress (localStorage), level flow
src/style.css
tools/solve.js breadth-first solver: proves every room solvable, computes par
The renderer never decides anything. engine.js produces a new state plus a
list of events for every action; render3d.js animates those events. The game
is deterministic and turn-based, which is what makes undo exact and levels
verifiable.
node tools/solve.js # all rooms: solvable? par correct?
node tools/solve.js 4 # one room, with an ASCII replay of the solution
The solver exits non-zero if a room is unsolvable or its recorded par is stale.
# rock / hedge / log = crystal (field passes, bodies don't)
. grass _ stone plate
~ water (pit) D wooden gate (open while every plate is held)
A iron-banded boulder X lantern / exit
N S heavy lodestones @ Magnus start
i crate n s light magnet blocks