Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
一款网游文风格的「文字 + 图画」RPG。 纯前端实现(HTML5 Canvas + 原生 ES Module),零依赖、可离线运行。 所有美术(立绘、场景、战斗特效、精灵动画)都是代码程序化绘制的,没有任何外部图片素材。 这是什么:本项目改编自网络小说《网游之邪龙逆天》(火星引力), 属于个人自用的同人作品,未公开发布。 事件顺序、人物、地名、设定数值按原文(refs/ 下的原文,不进仓库); 台词与场景文字是重写的——小说的叙述体塞进对话框读不了。 原著版权归作者所有。 方式一(推荐):双击 启动游戏.cmd → 自动在本机起一个静态服务器并打开浏览器。 ⚠️ 必须通过 http 打开。游戏使用 ES Module,直接双击 index.html(file://)会被浏览器的 跨域策略拦住。任何静态服务器都可以,例如 python -m http.server 8123。 调试模式:http://127.0.0.1:8123/?debug=1 会额外挂上自动化测试接口 (__autoRun / __setScene / __partyJoin / __G 等),供 tools/ 下的脚本使用;正常游玩不需要。 序章 ~ 第十一章,48 个场景,1 场战斗(演出),一个结局 vol1_ch11。README 전문 보기 ↗
一款网游文风格的「文字 + 图画」RPG。 纯前端实现(HTML5 Canvas + 原生 ES Module),零依赖、可离线运行。 所有美术(立绘、场景、战斗特效、精灵动画)都是代码程序化绘制的,没有任何外部图片素材。
「上有碧落,下有黄泉。」
这是什么:本项目改编自网络小说《网游之邪龙逆天》(火星引力), 属于个人自用的同人作品,未公开发布。 事件顺序、人物、地名、设定数值按原文(
refs/下的原文,不进仓库); 台词与场景文字是重写的——小说的叙述体塞进对话框读不了。 原著版权归作者所有。
方式一(推荐):双击 启动游戏.cmd
→ 自动在本机起一个静态服务器并打开浏览器。
方式二(手动):
node tools/serve.cjs 8123
# 浏览器打开 http://127.0.0.1:8123/
⚠️ 必须通过 http 打开。游戏使用 ES Module,直接双击
index.html(file://)会被浏览器的 跨域策略拦住。任何静态服务器都可以,例如python -m http.server 8123。
调试模式:http://127.0.0.1:8123/?debug=1 会额外挂上自动化测试接口
(__autoRun / __setScene / __partyJoin / __G 等),供 tools/ 下的脚本使用;正常游玩不需要。
序章 ~ 第十一章,48 个场景,1 场战斗(演出),一个结局 vol1_ch11。
对照全书:第一卷共 97 章,全书 12 卷 1264 章 411 万字——现在做完的是 0.6%。
| 章 | 标题 | 本项目实现 |
|---|---|---|
| 序 | 风华绝代 | 京华大学新生入学日,承泽湖,结识刘桦 |
| 一 | 当街非礼 | 《命运》设备发放点;蓝白格子裙少女;可选逃 / 站着不动 |
| 二 | 《命运》世界 | 设备绑定、无删号重练、角色创建入口 |
| 三 | 不该出现的意外 | 自由属性 25 点 / 固定属性 10 点由玩家分配;天赋扫描;职业赋予失败 |
| 四~五 | 不败神话(上/下) | 旧游戏《弑神》里的旧 ID「天莫邪」已被人占用 |
| 六 | 普洛斯 | 天外集团总裁、《命运》主研发者(白发老人) |
| 七 | 新手村 | 第 60001 号新手村;杂货摊补给 |
| 八 | 杀狼! | 被封印的老人;任务【收集十颗狼的眼睛】;投石 -1 引来三只野狼;一场演出战斗 |
| 九 | 萝莉果果(上) | 三只狼只掉一枚铜币、一颗狼眼都没有(幸运 0);想起要先学采集术;挂饰在游戏里出现并亮起白光;果果登场 |
| 十 | 萝莉果果(下) | 「大胡子的怪叔叔」;棒棒糖;探知术对她没有任何信息回应;「看到的第一个人就是主人」;她让他在心中念「命运之刻」 |
| 十一 | 永恒命运之刻 | 挂饰放大成近三十厘米宽、与他等身的武器;仙灵之器;命运之赐;命运七杀(全部「命运之核缺失,不可使用」);十阶装备阶梯 |
战斗只有一场——原文就是一场:石子砸中最近的一只(-1 强制伤害),
它的嚎声引来另外两只,三只一起扑上来。
(此前拆成四场,其中「四只狼」和「狼群首领」原著中并不存在,已删。)
数值全部照抄原文,不做平衡。0 级初始面板与原文第7章逐项一致:
| 本项目 | 原文 | |
|---|---|---|
| 等级 | 0 | 0 级 |
| 生命值 | 70 | 70(体质 7 × 10) |
| 魔法值 | 40 | 40(精神 4 × 10) |
| 物理攻击力 | 23 | 23(力量 10 × 2 + 新手短剑 +3) |
| 物理防御力 | 11 | 11(体质 7 × 1 + 新手衣 +4) |
| 魔法攻击力 | 8 | 8(精神 4 × 2) |
| 命中 / 回避 | 4 / 4 | 4 / 4(敏捷 4 × 1) |
| 出手速度 | 100 | 100(初始值) |
野狼 5 级 / 生命 170(原文第8章)。伤害 = 物攻 − 物防,由原文两组伤害数字反解
(物攻 23 打野狼 -12~-15;拿到永恒命运之刻后物攻 ≈94 打同一只 -85~-87)。
⚠️ 只有主角可玩。按原文,果果第 9~10 章才登场, 所以
js/characters.js里的 仙儿 / 梦羽衣 / 果果虽有完整数据,但当前流程不会让她们入队 ——只能靠?debug=1的__partyJoin强行加进来。
第 9~10 章 萝莉果果 → 第 11 章 永恒命运之刻 → 第 16 章 红叶盟。
原文笔记目前只做到 refs/notes/vol1-001-008.md,继续往下要先补笔记。
js/realm.js 是唯一事实源。换算公式直接用原文给的战士公式。
| 属性 | 换算 |
|---|---|
| 力量 | 物攻 +2 |
| 体质 | 生命 +10、防御 +1 |
| 敏捷 | 回避 +1、命中 +1 |
| 精神 | 魔攻 +2、魔法值 +10 |
幸运 / 悟性 / 魅力。幸运是真生效的:原文系统警告「幸运为 0,爆率和暴击率会变到最低, 攻击时全部取攻击值的下限」——所以幸运 0 的角色永不暴击,且每一刀的伤害浮动恒定取下限。
反应力 / 感知力 / 专注力,常人平均 7~10;叶天邪 72 / 53 / 42(约七倍于常人)。 接进战斗:反应力 → 闪避,感知力 → 命中,专注力 → 异常抗性。 折算只算超出常人的部分且收益递减,所以常人基准处收益为 0,七倍很强但不会变成免疫一切。
角色创建是玩家真正要做的决定:自由 / 固定属性各三种取向,都真实生效。 可以照抄叶天邪(力10/体7/敏4/精4,魅10/幸0/悟0),也可以不。
没有职业——按原文,职业赋予失败,整个新手期无职业,10 级才能转职, 邪龙系技能要到原文第 111 章才解锁。现有五招围绕反应力设计:
他一个战斗技能都没有。原文第9章:
「即使是0级的玩家,也会自带一个见习职业的见习技能。而全世界只有叶天邪一个例外, 他没有技能,没有职业,只能以新手剑并不华丽的砍、劈、刺……」
所以指令只有普攻(砍/劈/刺)和全职业共有的探知术。 ⚠ 此前配了「短剑斩/读招/投石/擦身反手/凝神」五个技能和一整条邪龙线, 全部是本项目编的,已删除。邪龙系技能要到原文第 111 章转职之后才存在。
活下来靠的是反应力 72(常人 7~10)折算出的闪避——原文里三只五级野狼 「连碰到没有碰到他」,全场唯一挨的一爪是他自己故意挨的。
这一节列的是写好了但玩家现在碰不到的内容。不是 bug,是剧情还没走到。
js/realm.js| 转 | 职业 | 等级 | 试炼 |
|---|---|---|---|
| 一转 | 逆骨邪龙 | 10 | trial_dragonsoul |
| 二转 | 逆天邪龙 | 40 | trial_defysky |
| 三转 | 黄金龙神 | 70 | trial_goldendragon |
⚠ 职业名查证自百科;等级门槛 10/40/70 与试炼全部是本项目自配,原著未考证。 三个试炼一个都没实现,所以目前转职不可能发生。 另有四个支线身份(幻兽神使 / 深渊的爪皇 / 魔武圣 / 黎明圣射手),数据已定义,解锁路径未实现。
苍白之器 → 钢铁 → 青铜 → 白银 → 黄金 → 仙灵 → 天煌 → 神玄 → 圣灭 → 禁断之器
「十个名称,构成了命运世界所有器的等级阶梯。」
⚠ 此前是 11 阶,多出一个自己编的「亚·圣灭之器」,第 7 阶还把「天煌」写成了
「天绝」。已按原文改正,460 件装备分布在 1~9 阶(禁断之器只能由剧情授予)。
数值由 js/loot.js 派生(阶位→档位与词缀条数,主题→属性倾向,类别→曲线)。
1 星精英 → 2 星精英 → 3 星级BOSS → 领主BOSS → 异兽(仙灵之兽 / 天煌之兽 / 神玄之兽 / 圣灭之兽)
0/110,承受上限 = 100 + 力量属性,到顶后每秒掉 1% 生命。掉落闸门看转职进度:6 阶要一转、78 阶要二转、910 阶要三转、11 阶永不掉落。
由于转职尚未实现,现在实际能掉的只有 1~5 阶,而剧情停在新手村,实际接触到的更少。
只查证到一个组织:天魂佣兵团,定位、规模、与主角的关系都不清楚,
所以 GUILDS 只留一个占位条目,没有给数值。争夺目标类型(刷新点 / 灵脉 / 传送阵 / 遗物)
保留为数据,没有任何关卡使用。
《炎之刃》与上一版原创虚构的东西已从仓库整体删除,不是停用:
| 删掉的 | 原因 |
|---|---|
chapter-one / journey / finale / beyond / rebirth.js | 旧剧情,台词建立在不存在的角色上 |
bonds.js(羁绊)、relics.js(遗物) | 原著中没有这两个系统 |
| 连携(COMBOS)、营地补给、商店、图鉴 | 同上;原文第7章他在新手村没和任何人说过话 |
| 三地支援 / 封门 / 旅程结算 / 二周目 | 《炎之刃》的流程结构 |
| 40+ 个敌人(四天王、魔王、诸神、幽风精…) | 随旧章节一同退役 |
| 20+ 个技能(邪龙线 ni_、xi_、th_、gg_) | 原文第9章:主角「没有技能,没有职业」 |
| 8 种道具、19 件固定装备 | 原文第7章:背包里「孤零零的躺着一把细长的剑」 |
| 立绘映射里的小铃 / 健次郎 / 阿斯特 / 古兰 / 铁匠 / 船长… | 原著中不存在 |
璃仙儿 / 梦羽衣 / 果果是原著角色(分别出现在 136 / 141 / 283 章里), 但她们此前的数值与技能全是编的,已一并移除,等剧情推进到各自登场那一章 再按原文重建(果果在第 9~10 章)。
| 操作 | 按键 / 鼠标 |
|---|---|
| 推进对话 / 确认 | Z Enter 空格 或 直接点击画面 |
| 下达战斗指令 | 点击指令按钮(战斗中不需要任何按键操作) |
| 打开队伍 / 道具 / 存档 | 右上角按钮 |
| 返回标题 | 右上角 ✦ 标题 |
这个项目是为了体验原文,所以有原文逐拍描写的战斗写成演出: 按原文的节拍一拍一拍播,玩家只看,界面上只留「倍速」和「跳过」。
原因是原文自己就把重复段压掉了——第9章写的是 -12,-13,-14,-12,-12……
五个数字加一个省略号,代表的是十几刀。逐回合模拟要 42 次出手,
看起来比读原文慢十倍。所以照抄的是节拍,不是回合数。
伤害数字由引擎按真实属性现算,不在剧本里写死:改了公式或装备,数字会自己跟着变。
引擎侧的能力(大部分在当前八章里用不满,随剧情推进逐步启用):
gauge: ±N 直接加减目标的行动条,另有 haste / slow 状态。rage,开战为 0,靠出手与挨打积攒);其余角色用术力类资源(开战满值,自然回复)。全部按原文的外貌描写用代码画(js/portraits.js),没有任何外部图片。
每条配方的注释里都附了依据的原文原话:
| 立绘 | 原文依据 |
|---|---|
| 叶天邪 / 邪天 | 「棱角分明的面孔……一缕碎发不羁的垂在他的额前,两弯眉毛浑如刷漆……眼眸中偶尔闪过的邪灵之芒」 |
| 刘桦 | 「清瘦面孔,满面书生气的少年男子」+大号浅色背包 |
| 承泽湖畔的谪仙女子 | 「肌肤莹润如若冰雪……弯月般的细长柳眉、明澈潋滟的翦水双瞳」 |
| 大胖子 | 「粗壮中又呈现着明显肥胖……身高近两米」「眼睛半眯着」 |
| 普洛斯 | 「虽然年事已高……两只偶尔闪过精芒的双目没有一丝的浑浊」 |
| 被封印的老人 | 「一张脸也如干枯如树皮」「双腿……呈现着灰暗的颜色」 |
| 果果 | 「小小的脸儿却是无比的精致……不染一丝凡尘」「眨巴着星钻一般的眼睛」 |
| 接待小姐 | ⚠ 原文只写了「职业化的微笑」「赏心悦目」,五官属推测 |
⚠ 原文没写外貌的说话人(蓝白格子裙少女、黑西装保镖、记者、路人玩家) 宁可没有立绘也不编。
对照图:screenshots/portraits-canon.png。
程序化 SVG 到头也就是个几何拼脸。要更好看,把图片丢进 art/portraits/:
art/portraits/kaito.png ← 默认立绘
art/portraits/kaito-angry.png ← 可选,某个表情专用
node tools/gen-art.mjs ← 加删图片后必须跑
游戏会自动改用图片,没有图片的角色继续用代码画的,不需要改任何代码。
art/portraits/README.md 里按原文写好了每个角色的生成提示词
(方括号内是原文原话,直接可用)。
横屏 16:9,已做手机适配:触屏一次触摸只算一次确认、对话框 / 指令栏按屏宽重排、 禁用双击缩放与下拉刷新、兼容刘海屏安全区。竖屏会提示横过来。
已用无头 Chrome 在 6 种手机/平板视口验证布局与输入链路,未在真机上实测。
game/
├── index.html 入口(Canvas + 所有 UI 层)
├── css/style.css UI 样式
├── equipment-catalog.json 装备命名策划稿(512 件 / 11 阶)
├── refs/ 原文与笔记(.gitignore,不进仓库)
└── js/
├── realm.js ★ 世界观数值:三层属性 / 十阶装备 / 星级 / 货币 / 饥饿度
│ ⚠ 它导出的 MAX_LEVEL(99) / expToNext / expFromKill
│ 没有任何文件 import——经验曲线实际在 characters.js
├── characters.js 角色 / 技能 / 敌人 / 道具 / 商店 / 经验曲线(50 级)
├── chapter-destiny.js★ 第一卷剧情(序章 ~ 第8章,当前唯一活跃剧情)
├── story.js 流程装配
├── battle.js 战斗引擎(行动条 / 资源 / 弹反 / 状态)
├── loot.js 掉落:阶位 → 数值、主题 → 倾向、词缀
├── growth.js 属性点分配与天赋树
├── power.js 战力评估(面板显示 + 关卡配平共用同一套公式)
├── portraits.js 程序化 SVG 立绘(8 人 × 6 种表情差分,按原文外貌描写画)
├── sprites.js 场景 / 战斗精灵 / 特效
└── equipment-data.js ⚠ 生成产物,勿手改
node tools/validate.mjs # 剧情图 + 数据一致性校验
node tools/reach.mjs # 可达性:定义了但玩家永远碰不到的内容
node tools/battlesim.mjs # 无浏览器:把每场战斗真的打完 + 技能机制回归
node tools/balance.mjs # 数值配平:每场战斗的长度与生存预估
node tools/gen-equipment.mjs # 改完 equipment-catalog.json 后必须跑
node tools/gen-art.mjs # 往 art/portraits/ 加删图片后必须跑
node tools/serve.cjs 8123 # 起服务器,下面两个需要它
node tools/playthrough.cjs # 无头浏览器全流程通关
node tools/mobile.cjs # 6 种视口的布局与真实输入链路
⚠️ 改了
equipment-catalog.json一定要重新生成。js/equipment-data.js是生成产物,忘记重跑会让掉落池静默停在旧数据上—— 高阶装备一件都不掉,而且不报任何错。这个坑已经踩过一次。
| 脚本 | 状态 |
|---|---|
validate.mjs | ✔ 通过(4 条非阻塞警告;但内置的成长模拟仍是硬编码,见 TODO A4) |
reach.mjs | ✔ 通过 |
playthrough.cjs | ✔ **真实路径(邪天单人)**通关,Lv7 收尾,控制台零报错 |
mobile.cjs | ✔ 7 个视口全部通过(布局 / 触屏推进 / 抉择按钮 / 战斗选目标) |
battlesim.mjs | ✔ 4 场战斗全部正常结束 + 4 项技能机制全绿 |
balance.mjs | ✔ 预设已对齐真实路径;点名 d_fight2(四狼)偏难,与实战一致 |
已知问题与待办见 TODO.md。