网页版 2D 像素 Roguelike | 元素共鸣 · 芯核替换 · 三重回廊
A top-down 2D pixel roguelike that runs entirely in the browser. Three biomes, three multi-phase bosses,
16 hot-swappable skill cores and 42 relics — built around an elemental-reaction combat system.
Every sprite, tile, icon and sound is generated procedurally in code: no external assets, no dependencies,
no build step required. Just open index.html.
你是灰烬行者,携带一枚仍在燃烧的芯核潜入回廊深处。每一局都会重新生成关卡布局、敌人配置与掉落, 穿过三片截然不同的生态、击溃三位守关者,就能抵达回廊尽头 —— 然后进入更凶险的轮回。
一局大约 20–35 分钟。死亡即结束,从头再来。
伤害不只是数字。五种元素会在同一个敌人身上叠加,触发连锁爆发:
| 组合 | 反应 | 效果 |
|---|---|---|
| 炽焰 + 霜寒 | 蒸爆 | 中范围爆炸 |
| 炽焰 + 雷弧 | 过载 | 最高单体爆发伤害 |
| 雷弧 + 腐蚀 | 剧毒扩散 | 大范围传染腐蚀 |
| 霜寒 + 腐蚀 | 凝滞 | 长时间定身 |
| 霜寒 + 雷弧 | 导电冰 | 感电扩散 |
| 虚蚀 + 任意 | 湮焰 / 虚霜 / 溃能 / 侵蚀 | 高倍率范围爆发 |
共 10 种反应。遗物「元素反应堆」能让反应伤害与范围 +80%,把配装彻底变成一套连锁引擎。
技能不是固定的。你有 2 个芯核插槽(史诗遗物「第三插槽」可扩到 3 个), 路上捡到的任何芯核都能随时换上;捡到重复的芯核则升级(最高 Lv3,威力提升、冷却缩短)。
共鸣会根据你的搭配自动生效:
- 同元素共鸣 → 该元素伤害 +25%
- 异元共鸣 → 全伤害 +8%,技能冷却 -10%
传奇遗物「织界之匙」让两种共鸣同时生效,并让所有芯核等级 +1。
每一关是一张随机房间图:战斗房、精英房、商栈、宝藏、芯核祭坛,最深处是守关者。 战斗房会在首波打掉一半时刷出增援波,避免一波流的平淡节奏。
![]() 苔垣地宫 — 孢沼、藤射手、发光孢子 |
![]() 熔渣工房 — 岩浆池、锻炉傀儡、飞锤浮械 |
![]() 霜海圣所 — 裂冰渊、霜镜刺客、回响体 |
![]() 遗骸宝匣 — 三选一的构筑决策 |
![]() 石髓 · 苔巨像 |
![]() 铁颚 · 熔炉守卫 |
![]() 永眠 · 霜海织者 — 第三阶段「时之停滞」:全场弹幕定格,随后一齐收束 |
|
| 键位 | 动作 |
|---|---|
W A S D |
移动 |
鼠标 |
瞄准 |
左键 |
攻击(近战有连段,第三段伤害更高) |
空格 |
闪避冲刺(带无敌帧,可被遗物提升次数) |
E / 右键 |
释放芯核 1 |
Q |
释放芯核 2 |
R |
释放芯核 3(需要「第三插槽」) |
F |
交互(开箱 / 购买 / 传送) |
ESC |
暂停(查看完整构筑) |
M |
静音 |
提示:闪避的无敌帧是应对 Boss 弹幕的核心手段。Boss 的红圈预警落地前躲开即可完全免伤。
| 3 张地图 | 苔垣地宫 / 熔渣工房 / 霜海圣所 —— 各自独立的配色、瓦片纹理、环境光、危险地形与音阶 |
| 3 个关底 Boss | 每个 3 阶段、5–6 套招式:拳砸冲击波、地刺、滚碾、旋转激光、熔岩通道、火雨、螺旋弹幕、镜像分身、收缩冰环、时之停滞 |
| 12 种敌人 | 冲锋、自爆、远程、持盾、钻地、环绕、瞬闪、多重弹幕、分裂等 10 类 AI,外加精英变种 |
| 16 枚芯核 | 烈焰喷涌、陨火天罚、霜爆新星、冰晶壁垒、链式雷弧、雷矛突袭、腐蚀孢云、蚀骨飞刃、回旋钢刃、震地裂波、幻影突刺、守护壁垒、血契献祭、余烬仆从、时滞领域、裂魂射线 |
| 42 件遗物 | 常见 / 稀有 / 史诗 / 传奇四档,含「不死鸟余烬」「奇点残核」「织界之匙」「深渊吞噬者」等改变构筑走向的传奇 |
| 6 种武器 | 断刃(连段)、重锤(冲击波+眩晕)、双匕(极速高暴)、长枪(贯穿突刺)、烬火弩(远程)、长镰(横扫吸血) |
| 8 种状态 | 灼烧、霜缓、感电、腐蚀、虚蚀、流血、冻结、眩晕 |
下载 index.html 双击打开即可。单文件、离线可用、无需服务器。
源码按职责拆成 9 个模块,改完用 build.js 拼回单文件:
git clone https://github.com/LvienOeria/embercore.git
cd embercore
# 修改 src/ 下的模块,然后重新打包
node build.js # 输出 dist/index.html
node build.js index.html # 直接覆盖根目录的可玩文件build.js 只做一件事:按文件名排序拼接 src/*.js,注入 src/index.tpl.html 的占位符。
没有 npm 依赖、没有打包器、没有转译。
| 想改什么 | 去哪 |
|---|---|
| 数值平衡、新武器 / 芯核 / 遗物 / 敌人 | src/30_data.js(全部是声明式数据表) |
| 像素美术、调色板、图标形状 | src/10_art.js |
| 地形瓦片、生态配色与环境光 | src/20_tiles.js |
| 关卡与房间生成 | src/40_world.js |
| 战斗、AI、技能实现 | src/50_entity.js |
| Boss 招式与阶段 | src/60_boss.js |
| 界面 | src/70_ui.js + src/index.tpl.html(CSS) |
| 主循环、渲染、光照与辉光 | src/80_game.js |
新增一件遗物只要往 RELICS 数组里加一行,属性会自动进入 Player.recalc() 的聚合流程。
embercore/
├── index.html # 打包好的可玩单文件(GitHub Pages 也部署这个)
├── build.js # 拼接构建脚本(零依赖)
├── src/
│ ├── 00_core.js # 数学、随机、输入、程序化音频合成
│ ├── 10_art.js # 像素精灵生成、自动描边/边缘光/AO、图标栅格化
│ ├── 20_tiles.js # 三生态瓦片图集与房间烘焙
│ ├── 30_data.js # 元素 / 状态 / 反应 / 武器 / 芯核 / 遗物 / 敌人 数据表
│ ├── 40_world.js # 楼层房间图、房间地形、连通性修复
│ ├── 50_entity.js # 玩家、敌人 AI、弹丸、区域、粒子、技能实现
│ ├── 60_boss.js # 三个 Boss 的阶段与招式状态机
│ ├── 70_ui.js # DOM 界面层(HUD / 弹窗 / 小地图)
│ ├── 80_game.js # 主循环、渲染管线、流程控制
│ └── index.tpl.html # HTML 外壳与全部 CSS
└── screenshots/
没有一张外部素材。 所有像素图形都在运行时由代码生成:
- 精灵以字符串像素图定义,再经过自动描边 → 顶部边缘光 → 底部环境遮蔽三道后处理,
用很少的手绘数据换到统一且干净的像素质感(
src/10_art.js) - 地形瓦片按生态用种子噪声程序化生成(8 种地面变体、4 种墙面、4 帧危险地形动画)
- 42 个遗物图标由 18 种矢量形状原语 + 每件道具的配色栅格化而成
- 音效与 BGM 全部是 WebAudio 实时合成:噪声带通做打击感,方波/锯齿做元素技能, 每个生态用不同调式(小调五声 / 弗里几亚 / 多利亚)生成随战斗强度变化的程序化配乐
渲染管线:480×270 内部分辨率 → 整数倍放大(image-rendering: pixelated),
外加一层全分辨率画布专门画浮动文字(伤害数字、反应名),保证中文与数字锐利。
光照使用离屏画布累加径向光源后 multiply 合成,辉光走半分辨率 lighter 叠加。
性能:无头 Chromium 实测 24 敌人同屏稳定 58–60 FPS。
为什么不是「小骨杀手」:小骨是横版平台 + 换头换招式;本作是俯视角 + 元素反应 + 芯核共鸣, 构筑深度来自元素组合与共鸣搭配,而非替换角色形态。
MIT — 代码与全部程序化生成的美术、音频均可自由使用、修改、商用。
由 Claude 与 LvienOeria 共同完成。






