尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A real-time multiplayer ASCII fantasy brawler that runs in the browser. The whole world is rendered as colored text glyphs with WebGL, lit by torches, campfires, runes and spells.
npm install
npm run dev # http://localhost:5173
npm run build # static site in dist/ (Vercel builds this automatically via vercel.json)
Pick a name (no account), a class and a mode. Everyone online shares one realm and follows the host's mode and map:
Maps rotate every round: Moonlit Vale, Ashen Wastes (rivers of lava, basalt spires, embers) and Frostmere (slippery frozen lake, snowy pines, ice crystals). Water can be waded at reduced speed, and a dash carries you across a narrow stretch. Lava is a wall to everyone but the Angel.
Classes (each has its own three spells on F / G / R, its own dash, and a signature):
| Class | Spells | Dash | Signature |
|---|---|---|---|
| ⚔ Knight | Crescent Wave, Judgment, Summon Blades (hold for a barrage) | Shield Charge: bowls enemies over | Wide sweeps, and every swing throws a sword wave; blocking refunds mana |
| ⚒ Berserker | Fireball, Inferno Leap, Eruption | Inferno Rush: leaves burning ground | Bloodlust: under 40% HP he hits harder and heals on hit |
| ✦ Sorcerer | Arcane Missiles, Chain Lightning, Meteor | Phase Shift: chainable teleports (22 MP each) leaving purple ooze | Deepest mana, strongest spells |
| ☾ Shadow | Shadow Daggers, Shadowstrike, Smoke Bomb | Shadow Step: invisible while dashing | Backstab: hits from behind or out of smoke always crit |
| ☠ Necromancer | Soul Bolt (drains life), Raise Dead (costs blood + mana), Corpse Nova | Grave Swap: trade places with a minion | His minions are little purple copies of him |
| ✟ Angel | Holy Lance, Radiance (heal + ward), Starfall | Radiant Glide: a long glide | Flies over water and lava, immune to burning ground |
Tap the dash for a dodge; hold it to keep sprinting while mana drains. Max HP never grows during a match; kills add damage and mana. Mana also comes back faster while moving, from melee hits and in a waystone's light.
Sound: every effect and the ambience (wind, insects, water, campfire crackle) is synthesized live with Web Audio, no audio files. M or the ♪ button mutes.
Desktop: WASD / arrows or hold left mouse to move, Shift to run, Space or a quick left-click to slash (hold Space for a ground slam), F / G / R (or right-click for F) for your class's three spells (hold any spell key to charge it with all your MP), hold Q to shield, C or Ctrl to dash (hold to sprint), E to travel at a waystone, Tab for the scoreboard, M to mute, mouse wheel or - / = to zoom.
Phone: drag to move; / slash (hold to slam), the three spell buttons (hold any to charge), ◊ shield, the dash button (hold to sprint); pinch with two fingers to zoom.
art/) on green screen. python art/build_knight.py (needs Pillow, NumPy, SciPy) cuts each frame out, packs art/knight-atlas.webp + .json, and the game converts frames to ASCII at runtime, recoloring the cape per player.python art/build_art.py finds each sheet's grid, keys out the green and packs small per-class atlases. The game loads an atlas only when someone plays that class, bakes the frames into ASCII in idle time, and falls back to the tinted knight and procedural effects until it arrives. Prompts for making more sheets are in art/PROMPTS.md.src/net.js, Trystero). Players find each other through public Nostr relays and connect directly over WebRTC. When a direct link is impossible (mobile data, strict Wi-Fi), game messages fall back to short-lived events on those same relays, a little laggier but it works on any network. The longest-standing host keeps the shared state and two standby hosts can take over. ?relayonly in the URL forces the relay path for testing. An optional /api/turn Vercel function can hand out TURN credentials if CF_TURN_KEY_ID / CF_TURN_API_TOKEN are ever set.