Ultimate Hell: No Way Out

✅ 可玩

终极地狱之地狱无门

hell

🔑 fluffos / Mud@2026 更新 1c0d334 2026-09-05 源码 下载 ZIP

▶ 开始游玩 · Play Now

游戏内标题为 "REVIVE OF ULTRA HELL(BLOOD & MAGIC) FROM 1999.11.13"(作者自称"doing"),是本项目收录规模最大的金庸题材 mudlib 之一(超过 7000 个 LPC 文件),改编自金庸小说《侠客行》,建立在"东方故事Ⅱ"(Eastern Story II)引擎之上,出生地扬州客店由原著角色戚长发坐镇。它也是本项目里"地狱"/Doing 血统家族的源头:`zjdy2008wzb`、`zjdyaryl`、`zjdywzb`、`zjdyzj` 都与它大量复用同一份地图内容(字节级比对显示 67%-88% 的地图重合),`yhwhpublicfi`(炎黄武魂)的 `master.lpc` 文件头明确写着自己是在这份档案基础上修改而来,`zjmudhell`(指尖MUD)则保留了 67% 相同的地图,却把核心系统整体重写成配合自定义手机 App 协议的实现。新角色要经历一场真正的"投胎"仪式而非简单的选性别流程:注册邮箱并确认、走到不同 NPC 面前选择品性(其中一支的开场白直接点名郭靖、萧峰)、途经阎罗殿(十殿阎罗、牛头马面、地藏王坐镇)、在忘忧池中随机洗四项天赋,最后从包含慕容世家、欧阳世家、段氏皇族、关外胡家等《天龙八部》相关出身在内的 18 个地名中选择投胎地。47 块留言板覆盖了少林、武当、明教、逍遥派、天地会等几乎金庸小说宇宙里所有主要门派,并不局限于单一小说。

English

The in-game title is "Revive of Ultra Hell (Blood & Magic) from 1999.11.13" (the author calls themselves "doing") -- the largest Jin Yong-themed mudlib in this project by file count, at over 7,000 LPC files, and the root of a whole "Hell"/Doing lineage: this project's zjdy2008wzb, zjdyaryl, zjdywzb, and zjdyzj all reuse substantially the same room-tree content (a byte-level, line-ending-normalized comparison found 67-88% of hell's own map reused across those four), yhwhpublicfi's own master.lpc header states it was built as a modification of this exact archive, and zjmudhell (Fingertip MUD) carries a closely related map (67% identical) while rewriting every core system around a custom mobile-app protocol. The game's own rules text names its source precisely -- adapted from Jin Yong's "Ode to Gallantry," built atop the "Eastern Story II" mudlib -- and the starting Yangzhou inn is staffed by Qi Changfa, a named character from that novel. New characters go through a genuine reincarnation ritual rather than a plain character-creation menu: register an email, confirm, approach one of several NPCs to choose a moral disposition (one path's NPC opens by invoking Guo Jing and Xiao Feng by name), pass through the Court of Hell (the Ten Yama Kings, Ox-Head and Horse-Face, Ksitigarbha presiding), bathe in the River of Forgetfulness to randomize four core stats, then choose a birthplace from an 18-option list that includes the Demi-Gods-and-Semi-Devils-derived Murong, Ouyang, Duan-imperial, and Hu-clan origins. 47 bulletin boards cover nearly every major sect across multiple Jin Yong novels rather than a single source.

README

内容亮点

注册流程

英文 id(3-10 个小写英文字母)→ 确认建立(y/n)→ 中文姓氏(0-2 个汉 字,可留空跳过)→ 中文名字(1-2 个汉字,姓名合计至少 2 个汉字)→ 管理密码(≥5 字元)→ 确认管理密码 → 普通密码 → 确认普通密码 → 角色 类型(1-5,直接回车默认均衡型)→ 性别(m/f)→ 进入游戏世界。进入游 戏后需要依次完成"投胎"仪式:register <email> 注册邮箱 → decide 确认 → 走到某位 NPC 跟前 out 选择品性 → wash 洗天赋 → born <地名>(地名清单见 look paizi)正式投胎,此前 score 等命 令会提示"还没有出生呐",这是正常的游戏设计,不是 bug。

本次修复的关键 bug

深度功能测试(第二轮)新发现的两个阻断性 bug

此前的验证只做到"看到世界入口房间",从未真正走完新玩家的"投胎"流 程;本轮完整实测后发现两个此前从未触发过的严重 bug,任一未修都会让 全新玩家完全无法完成注册(细节见 NOTES.md 的"深度功能测试"一 节):

管理员账号 / Admin account

管理员名单存储在纯文本文件 adm/etc/wizlist 里;账号本身通过正常注 册流程创建,"目前权限:(admin)" 已在游戏内确认显示正确。

警告:这是一个公开的默认密码,仅供本地/浏览器试玩。正式对外开服前
请务必修改此密码。

本地运行

cd libs/hell
~/src/fluffos/build-debug/src/driver config.fluffos

游戏端口:40114

NOTES · 移植与修复记录

WASM 修复摘要(迁移自 meta.json 的 group_note)

Doing 血统的大型金庸题材 mudlib(7000+ 个 LPC 档案),游戏内标题为 REVIVE OF ULTRA HELL(BLOOD & MAGIC) FROM 1999.11.13。修复的 bug:(1)缺失的本地 log/nosave/ 目录导致 logon() 期间每一个新连线都会断线;(2)check_legal_id() 的 while(i--) 循环会静默接受一个空的英文 id,之后对这个空字符串呼叫 sprintf("%c", my_id[0]) 就会崩溃(新增 AGENTS.md §7.62);(3)经典 §8.1 GBK 字节区间 is_chinese() bug;(4)三个各自独立的字节数没减半的长度界限 bug(check_legal_name 的姓氏/名字界限、姓名合并后的最短长度、以及 named.lpc 的 invalid_new_name() 滑窗查重检查)都按已确立的 §8.1 减半模式修复;(5)§7.12 类的 message() exclude 参数 bug 就活在 message() 包装函式本身,不只是 tell_room()——channeld.lpc 的 do_channel() 和 questd.lpc 的 collect_all_quest_information() 各自独立崩溃(新增 AGENTS.md §7.61);(6)accept_kill() 里 §7.50 的 is_killing(ob) 物件/字符串不匹配 bug,是第 4 个确认的同类血统;(7)versiond.lpc 的 13 个碰 socket 的函式按 §7.52 掏空(和 zjmudhell/shujian3 那份几乎逐字节相同),修复了一个会让每个新用户在 logon() 时断线的崩溃。管理员账号(fluffos/Mud@2026,管理密码 Mud@2026Adm)通过真实注册流程 + adm/etc/wizlist 播种,游戏内"目前权限:(admin)"显示确认生效。完整的注册→look→score→quit 流程在排版格式化前后各验证过一次,用的是真实中文名字。

深度功能测试(第二轮,2026-08-03)

本轮不再满足于"注册→look→score→quit"的浅层冒烟测试,而是完整走了 一遍这份档案自己独特的"投胎"新手引导流程,并在过程中发现并修复了两 个会让游戏完全无法正常游玩的严重 bug——此前的验证记录只覆盖到 世界入口房间,从未真正触发过这两处代码。

发现并修复的 bug

1. MESSAGE_D->find_chatter()check_ok() 里未加保护呼叫 (新增 AGENTS.md §1.3(c) 条目,yanhuangwuhun/yhyxs 已知同类 bug 的第三个确认实例):adm/daemons/logind.lpccheck_ok()——每一 次密码校验通过后都会执行的函式——无条件呼叫 MESSAGE_D->find_chatter(...)MESSAGE_Dadm/daemons/network/messaged.lpc)自己的 create() 里有原始的 socket_create()/socket_bind() 呼叫(一个 UDP 聊天/跨服精灵), 在 WASM 下完全编译不过。未加保护的呼叫会抛出"*No program in object '/adm/daemons/network/messaged'!",让 check_ok() 执行到一半就中 止——早于 make_body()/enter_world(),也就是说每一次密码验证 成功之后,连线都会直接静默断开,永远走不到欢迎信息或注册房间。 已仿照 yanhuangwuhun/yhyxs 已经确立的修法,加上 if (find_object(MESSAGE_D)) { ... } 保护。 2. feature/command.lpccommand_hook 声明为 private( AGENTS.md §8.3a,第一次在这份档案上确认,且是目前记录里症状最隐 蔽的一次):private nomask int command_hook(string arg) 在这个驱 动上一旦被继承就会从 private 降级为 DECL_HIDDEN,导致 add_action("command_hook", "", 1) 这种"捕获所有指令"的注册方式 静默失效——但只对 ORIGIN_EFUN(也就是其它物件透过 command() efun 发起的呼叫)生效,玩家自己直接敲的指令走 ORIGIN_DRIVER,不 受影响。这份档案独特的"投胎"新手引导——register/decide/ wash/born——全部是通过 d/register/npc/shuisheng.lpcdo_register()/do_decide() 内部呼叫 command("say/tell/nod ...") 来实现 NPC 说话的,也就是说这一个 bug 直接卡死了每一个 全新玩家注册流程的第一步:玩家输入 register 邮箱地址 后, add_action 本身正确匹配、没有报"什么?",但水笙一句话也不会说, 连她自己被动触发的 greeting()(新手一进房间的欢迎语)也同样哑火 ——表现上和网络延迟或连线故障一模一样,很容易被误判为环境问题而 不是代码 bug。真正的诊断线索藏在驱动自己的日志里,而不是玩家看到 的画面:apply() with insufficient permission: ... function: command_hook, origin: efun, needs: private, has: hidden,时间戳 和指令发送的瞬间精确对应。修复方式和 §8.3a 记载的完全一致:去掉 private,保留 nomask

两处 bug 一起意味着:在这次修复之前,这份档案的 WASM 打包版本任何 一个全新玩家都无法真正完成注册——check_ok() 的崩溃会先一步掐断 连线;就算侥幸绕过(比如管理员账号已经存在存档,走的是不同分支), "投胎"引导流程本身也会在 register 这一步彻底哑火。此前的验证记录 只做到"看到世界入口房间"就停了,从未真正把这两条路径走通过。

完整验证:从注册到进入游戏世界

用一个全新账号(非既有的 fluffos 管理员存档)在浏览器环境 (Playwright 驱动的真实 Chromium,不是脚本化的 telnet 客户端——排查 过程中发现脚本化客户端对这份档案的编译延迟计时特别敏感,容易把"driver 正忙着编译"误判成"指令没有响应",回头改用真实浏览器环境后同样的操 作序列每次都干净复现)完整走通:

已知但不是本次范围内 bug 的观察

重新登录测试时撞上了"您要将另一个连线中的相同人物赶出去,取而代之 吗?(y/n)"——是 check_ok() 里正常的"同一角色已有一个连线存在"保 护逻辑(旧连线的 quit 和新连线的重新登录之间存在一个正常的竞态窗 口),不是 bug,是预期的多重连线保护设计,符合 AGENTS.md §10.7 第 5 条记载的"quit 保留窗口"现象。

未覆盖范围(诚实说明,未做代码审查冒充实测)

本轮预算集中在把"投胎"全流程和两个阻断性 bug 排查清楚,没有走到: 战斗(木人训练木人在 d/guanwai/,离出生点扬州有一段路)、拜师、 经济系统/商店、以及门派加入。这些留给下一轮深入测试;目前的验证边 界到"进入游戏世界 + score + board + quit"为止,如上所述。

深度功能测试(第二轮,2026-08-18)——发现并修复两个真实 bug:messaged.lpc 的 socket_bind() 崩溃、eval-cost 过低

补完上一轮留下的战斗/门派测试,过程中发现并修复两个真实 bug。

深度功能测试(第四轮,2026-08-19)——补完门派加入与经济系统测试

本轮专门针对第二轮/第三轮明确留白的两个系统:门派加入(拜师)与经济系统 (商店买卖)。检查清单上的既有 bug 条目(§7.90/§7.111/§7.112/§7.113/§7.114/ §7.115)全部做了逐项复查,均已在此档案上确认修复到位或本来就不适用,无异常。

门派加入(拜师)——机制本身工作正常,无 bug

- 拒绝路径:初始角色 str=14(默认值)时,bai bai shijing 正确触 发 attempt_apprentice() 里的门槛检查,NPC 回应"我们丐帮的武艺一向以 刚猛为主,小兄弟臂力太弱,似乎不宜学丐帮的功夫?"(str<26 的检查)。 - 用 call me->set_skill("force", 320) 把内功技能设到刚好越过第二道门 槛(query_skill() 非 raw 模式返回值是 set_skill 存入值的一半,所以 需要设 320 才能让 query_skill("force")>=150),配合 str=30,再次 bai bai shijing 正确触发接受路径:"白世镜说道:好吧,希望小兄 弟能好好学习本门武功...白世镜决定收你为弟子...恭喜您成为丐帮的第十九 代弟子。" - 两条路径都验证通过,bai/attempt_apprentice() 机制本身没有 bug—— 和之前几轮在其它档案(niaoren、aoxiangtianji)上得出的结论一致。 - 测试完毕后已清理:call me->delete("family")set("str",14)delete_skill("force")set("title","普通百姓"),把 fluffos 管理测 试账号恢复到测试前状态(该账号本身就是一个跨轮次复用的巫师/管理员测 试身份,不是真实玩家存档;本轮验证后重启的驱动进程也确认了 family/ str 的清理确实落盘持久化)。

经济系统——sell/value 只在少数商人身上注册,确认是内容设计,不是 bug

§7.86 跨库扫描修复(留言板 post 崩溃)

AGENTS.md §7.100 fix (2026-08-19): redundant replace_program(ROOM) landmine

Same corpus-wide bug as §7.86 above, but on the universal ROOM base class ("/inherit/room/room" from include/globals.h) instead of just boards — the batch-1-6 sweep's shape. Deleted 2,372 live standalone replace_program(ROOM); lines under work/ via fix_710_room.py, plus hand-fixed the room-building tool's string-builder template (work/clone/misc/roommaker.lpc). 8 real .lpc files under work/data/ checked for the known false-negative class — none had the bug pattern. Remaining matches after the fix are all pre-existing //-commented.

Verified: clean build-debug boot (zero new compile errors, zero "cannot replace"/"cannot bind" in debug.log), live admin login (fluffos/Mud@2026) into the game world, look/score/quit all worked cleanly (the "还没有出生呐" score response is pre-existing admin-account behavior, unrelated to this fix). Incidental data/{login,user}/f/fluffos.o save drift from the login test was reverted via git checkout HEAD before committing.

§7.30 uninitialized-mapping accessor sweep (2026-08-20)

Corpus-wide mechanical sweep of the feature/skill.lpc shared-lineage bug (confirmed independently on xiakexing2017/jqxz2015/haiyang2 via round-four testing): 5 accessor(s) in this file returned a raw never-initialized mapping instance variable (defaults to int 0, not ([]), until first assigned), crashing any unguarded keys()/sizeof()/indexing caller for a fresh/untrained character. Fixed at the accessor level (mapp(x) ? x : ([])) per the documented remedy. Verified via lpcc --batch static compile check only (not a live boot) as part of a large mechanical sweep; not individually functionally re-tested live on this lib.

深度功能测试(第五轮,2026-08-24)——补完真实战斗测试,§10.7 收尾

前四轮已验证注册投胎、拜师门派、经济系统均干净通过,唯独"战斗"一 直只测过练功房木人(clone/npc/mu-ren.lpc),而它的 accept_fight()/ accept_hit() 要求 combat_exp>=12000,全新角色永远打不过这道门 槛——已在第二轮记录为内容/数值设计,不是 bug,但也意味着战斗机制 本身从未被真正打通过一次。本轮专门找一个新手够得着的、真正会打的 敌对 NPC 补上这一测试项。

结论:战斗机制本身工作正常,没有发现程序 bug。 木人门槛依旧 是内容设计(维持第二轮结论不变),但这份档案的战斗系统现在已经用 一个真正可达、真正会打的敌对 NPC 完整验证过一次真实交手到收尾。 至此 hell 档案的注册、投胎、拜师、经济、战斗五大系统全部完成过 至少一轮真实的端到端验证,§10.7 深度功能测试可以标记为完整收尾。

AGENTS.md §8.3a variant fix (2026-08-27): feature/action.lpc::eval_function() and inherit/item/combined.lpc::destruct_me() wrongly private

Targeted follow-up from libs/revive's own deep-test pass (its NOTES.md "§8.3a variant confirmed" section), which flagged that its sibling revive/zjdyaryl/xuanjianlu lineage carries the same private mixin-function demotion bug beyond command_hook, and specifically named hell and zjmudhell as still carrying it unfixed. Confirmed present here byte-identical to the revive shape:

Fix (matching the established revive/§8.3a pattern exactly): dropped private from both declarations, function bodies unchanged.

Verified live (native build-debug driver, port 40114, exact-PID kill between reboots): before the fix, sleep in a sleep_room (/d/guanwai/xiuxishi) printed "你往床上一躺,开始睡觉。不一会儿, 你就进入了梦乡。" and then genuinely never woke the character up (no wakeup() message even after 6+ idle seconds) — a live-reproduced instance of start_call_out()'s call_out("eval_function", ...) silently failing. After the fix, the identical sleep sequence correctly fired wakeup() within its 1-2s delay window ("你一觉醒 来,只觉精力充沛。该活动一下了。"). debug.log clean of any 执行时段错误/Bad argument both before and after (the bug fails silently, it doesn't throw). Incidental data/newsd.o and data/user/f/fluffos.o save drift from the test login reverted via git checkout before committing.

destruct_me() not independently live-repro'd this session (would require driving a coin/material stack down to exactly zero via item commands) — fix rests on the identical fixed-in-place eval_function mechanism and the established revive/demonangel precedent.

Locked sibling: 谁与争锋 / SYZF is hell4 (2026-09-05)

User identification: leftover archive 谁与争锋.7z (catalog slug swzf, row 932) is hell4, a Doing/地狱 branded snapshot of this same family, not a new unique game. The 7z is still header-encrypted. hell4 is the game name, not the extract password (7z t -phell4 and related variants fail). File size differs from this lib's hell.7z (9.0 MiB vs 5.4 MiB), so it is not duplicate_of. When it opens, number it as 076-N.