info.html · 介绍 · play.html · 游玩 · llms.txt · 下载与本地运行 · ZIP · GitHub
SIMud, an Apache-2.0 English LDMud-style mudlib by Allaryin, Acius, Venger, and Malap. LDMud → FluffOS conversion: catalog login lands in the Temple of All Gods. Walkable temple hall and Oldtown street (further streets closed). The saved world.obj tree is not in the snapshot. Not StickLib or Age of Elements.
README
LDMud → FluffOS conversion. Snapshot of git clone https://github.com/shentino/simud.
Slug simud, number 978, port 40287.
This collection’s copy is a snapshot, not a live mirror.
SIMud, an Apache-2.0 English LDMud-style mudlib by Allaryin, Acius, Venger, and Malap. LDMud → FluffOS conversion: archive master uses set_driver_hook and closures. Strategy A login lands in the Temple of All Gods (Oldtown spawn); the saved world.obj tree is not in the snapshot. Not StickLib or Age of Elements.
Authors: Allaryin, Acius, Venger, Malap (Apache 2.0). Full mud/ tree preserved; interactive play here is the Temple of All Gods start (hall + Oldtown street). Published as playable on that start.
Registration flow
Name (2–16 letters) → new character: password (≥6, twice) → Temple of All Gods. Existing names prompt for password only.
Admin / test account
- name:
fluffos - password:
Mud@2026 - privilege: seeded mortal (level 1). This overlay does not auto-god the first player.
Verified live after Strategy A: create fluffos / Mud@2026 → Temple of All Gods; look / look at altar / north hall / north Oldtown / south ×2 / score / quit; reconnect still the shrine.
Local run
cd libs/simud
~/src/fluffos/build-debug/src/driver config.fluffosGame port: 40287.
python3 scripts/mudclient.py 127.0.0.1 40287 --timeout 25 --idle 0.6 \
--send fluffos --send Mud@2026 \
--send look --send score --send quitNOTES · 移植与修复记录
SIMud (simud) — porting notes
Source: git clone https://github.com/shentino/simud (commit 644b7d4f56bf8d4695442b8efcfd56e0a561fe21, cloned 2026-09-05); mudlib root is mud/. Converted 2026-09-05. Config name SIMud.
Slug simud, number 978, port 40287.
This is an LDMud → FluffOS conversion. Discovery triage normally
drops LDMud-lineage libs; this onboard is an explicit exception in the
same family as questmud / acme (AGENTS.md §7.158).
This collection’s copy is a snapshot, not a live mirror. Do not onboard the same upstream repo again.
0. Layout
Repo root is the mudlib. raw/ is gitignored. Original LDMud master
preserved as /secure/master_ldmud.lpc.
1. Convert (2026-09-05)
convert_lib.sh with UTF-8 source encoding (already UTF-8 English /
German sources). .c → .lpc rename + literal .c" fixups +
static→nosave as usual.
2. FluffOS port (LDMud → FluffOS)
The archive is LDMud 3.x (set_driver_hook, inaugurate_master,
#' / unbound_lambda closures, multi-file or directory simul_efun).
FluffOS has none of those driver hooks. A mechanical dialect rewrite of
the whole tree is not attempted; the original login/command stack is
kept as source and not loaded.
config.fluffos: master /catalog/master, simul /catalog/simul_efun,
global include "/catalog/auto.h", port 40287,
lazy resets : 1.
Catalog overlay (questmud §7.158 cluster):
/catalog/master.lpc—get_root_uid/get_bb_uid,creator_filealways returns string"BACKBONE",valid_readincludesload_object/recompile_object/include/restore_object,valid_overridereturns 1,error_handler→/log/catch/catalog/simul_efun.lpc— thincat/log_file/exists/catalog/login.lpc,/catalog/player.lpc— name/password → Void/catalog/void.lpc,/catalog/workshop.lpc— look/score/quit surface
3. Live-verified (native, port 40287)
Create fluffos / Mud@2026. Lands in The Void; look / score /
north (workshop) / south / quit. Reconnect after cold restart
reloads data/f/fluffos.o.
深度功能测试(§10.7, 2026-09-05)
Catalog overlay only — rooms/races/magic/economy under the mud/ tree
are not loaded. Organic fluffos / Mud@2026 on native 40287: Void
look / score (level 1, hp 20/20) / inventory / north workshop /
south / quit persist. Reconnect: Void look / score / quit.
Shop, combat, guild, death: N/A (needs a real LDMud driver).
Logs this boot (PID started 20:09:43, live fd
libs/simud/log/debug.log): stdout + debug.log clean.
work/log/catch proven live with a one-shot catchprobe
(CAUGHT /catalog/player.lpc *catch-path-probe) then reverted;
play itself left no other catch lines.
6. Full dialect port (Strategy A, 2026-09-06)
Catalog Void/workshop is no longer the live start. User asked for the real SIMud spawn, not a demo skeleton.
The archive spawn is ;ch;oldtown;temple;temple2 ("Temple of All
Gods"). SIMud's world is a saved object tree (/world/world.obj);
that dump is not in the git snapshot. Strategy A reconstructs
the spawn path as FluffOS rooms under /world/start/:
/world/start/temple2— inner shrine (login)/world/start/temple— public hall/world/start/oldtown— street outside
/catalog/login still handles name/password. /catalog/player
enter_world() moves into temple2 (fallback Void if load fails).
Live walk (native 40287, 2026-09-06, organic fluffos /
Mud@2026):
- Lands in Temple of All Gods.
look at altar. - North → temple hall. North → Oldtown street (further streets closed). South ×2 back to the shrine.
scorelevel 1, hp 20/20. Quit persist. Reconnect lands in the shrine again.
This-boot live libs/simud/log/debug.log (fd, PID 1693124
BOOT_MARKER1 simud-temple): start rooms compiled. Catch this
walk: empty after the marker.
Published (wasm_status: playable) after user 2026-09-11:
they can consider playable now. Temple / hall / Oldtown street
is the snapshot start. The rest of Oldtown still lived in
world.obj — do not invent streets. Shop / combat / guild are
not in those rooms.
4. What is not ported yet
Full LDMud world object tree (no world.obj in the snapshot),
guilds, protocol stacks, OSB/MG kernel daemons, shop, combat.
Original /world/room uses LDMud closures ((: $1->… :)).
Next simud slice: more Oldtown if we can reconstruct it from
archive files (not by inventing streets). Published as playable
on the existing start.
<!-- librarian-leftover:634 -->
Leftover 634 (2026-09-10, cheap reconfirm, no boot).
find still has no world.obj. Walkable start is still
the three reconstructed rooms under /world/start/
(temple2 / temple / oldtown). Oldtown is south-only
(“further streets are closed”). Shop / combat / guild
are not in those rooms. Do not invent Oldtown. Do not
flip. aoh is already playable (29d73abf400).
<!-- librarian-leftover:635 -->
Leftover 635 (2026-09-10, persist only, no boot).
Same tree as leftover 634 (f0975b36b09): no
world.obj; start still temple2 / temple /
oldtown. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:636 -->
Leftover 636 (2026-09-11, persist only, no boot).
Same tree as leftover 635 (1ddf6f10123): no
world.obj. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:637 -->
Leftover 637 (2026-09-11, persist only, no boot).
Same tree as leftover 636 (d60cd9919c7): no
world.obj. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:638 -->
Leftover 638 (2026-09-11, persist only, no boot).
Same tree as leftover 637 (3dcd14f5af3): no
world.obj. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:639 -->
Leftover 639 (2026-09-11, persist only, no boot).
Same tree as leftover 638 (b7106c81e28): no
world.obj. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:640 -->
Leftover 640 (2026-09-11, persist only, no boot).
Same tree as leftover 639 (16876edf6d8): no
world.obj. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:641 -->
Leftover 641 (2026-09-11, persist only, no boot).
Same tree as leftover 640 (f89c13266ea): no
world.obj. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:642 -->
Leftover 642 (2026-09-11, persist only, no boot).
Same tree as leftover 641 (25e2370fa27): no
world.obj. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:643 -->
Leftover 643 (2026-09-11, persist only, no boot).
Same tree as leftover 642 (7860bad89b1): no
world.obj. Do not invent Oldtown. Do not flip.
<!-- librarian-leftover:644 -->
Leftover 644 (2026-09-11). User: they can consider
playable now. Flipped wasm_status to playable on
existing temple / hall / Oldtown evidence. Do not
invent Oldtown. world.obj is still missing.
<!-- librarian-leftover:645 -->
Leftover 645 (2026-09-11, persist only, no boot).
Already playable (546d780ee87). Same tree: no
world.obj. Do not invent Oldtown. Do not flip
again.
<!-- librarian-leftover:646 -->
Leftover 646 (2026-09-11, persist only, no boot).
Already playable (546d780ee87). Same tree as
leftover 645 (bfcd764dde2): no world.obj. Do
not invent Oldtown. Do not flip again.
<!-- librarian-leftover:647 -->
Leftover 647 (2026-09-11). User: source-complete
is done; do not invent. Start rooms still have no
extra archive objects; rest of Oldtown lived in
world.obj. Do not invent streets.
Deep test (§10.7, 2026-10-08) -- fixed-width .lpc suffix slices
The .c -> .lpc rename changed the string but not the slice width: f[<2..] == ".lpc" compares two characters with four and is never true (!= always true), so suffix filters and strips never ran or cut x.l (KB 06 §7.238). scripts/lpc_lpc_suffix_slice.py --apply fixed 6 comparison(s) and 2 strip(s) (e.g. bin/wiz/clone.lpc); the changed files load at HEAD and in the tree (fresh processes) with no regression.
- 2026-10-10:编译警告第二轮(按驱动报告逐条修):按位 & 改逻辑运算 0 处,返回类型/原型 0 处,NPC+F_UNIQUE 的 init() 0 个,带初始化的未用局部变量 31 个,只在 #if 分支用的声明移进分支 0 个文件;改动 25 个文件,HEAD 与工作树各载入一次无回退(15 objects; HEAD PASS 3, tree PASS 3; regress 0; newly loading 0),这些文件的警告 39 -> 19。
- 2026-10-10(续):第二轮编译警告整理误改了
test/quote.lpc测试文件,已恢复原样。
Compile warnings (2026-10-13)
scripts/toolkit_fix.sh round: bare return; in int functions became return 0; (the driver already returned 0), unused locals were removed, and the LDMud-only pragmas FluffOS does not know (#pragma strong_types, no_clone) were dropped. By hand: a stray ; after the class body in include/legible.h. No warnings left in compiling files except one in test/quote.lpc, a test file left as is. The 46 changed objects load the same at HEAD and in the tree (regress 0).
- 2026-10-14 (FluffOS 970d9f09 rescan):
test/quote.lpcdrops a local it never used (the macro test only stringifies the literal"x"). The file loads.
- 2026-10-14: 1 files did not compile with
Type of returned value doesn't match function return type ( int vs void ): a function declaredvoid(or with no type) returns a value, which the old driver passed to the caller. Functions whose value a caller reads (add_action handlers, commands, helpers) now carry the type they return:on_action(). HEAD vs tree in fresh drivers: 1 objects, 0 newly loading, 0 regressions (scripts/lpc_fix_void_return.py, KB 04 §6.3).
sizeof(x == n): the comparison inside the parentheses (KB 06 §7.350, 2026-10-21)
sizeof(tmp != 2), sizeof(casualties ==1), sizeof(arr==1), sizeof(file_list == 0) evaluate the comparison first and take sizeof() of the 0 or 1 it gives (sizeof(1) is 0 in this driver), so the guard or message branch never runs; in the poker dealer, where hand is string *, the typed comparison is a compile error and the dealer never loaded. Rewritten as sizeof(x) == n. Left alone: /std/living.lpc and /std/user.lpc query_prestige_level(), /std/living/body.lpc "one handed" (the same typo, but enabling the branch changes class and weapon rules). Changed: /bin/wiz/mv.lpc.
log/ subdirectories nobody created: the logging write_file() / log_file() raises (2026-10-22, KB 06 §7.358)
The code of this lib writes logs into 2 subdirectories of log/: log/chat (daemon/chat.lpc), log/comm (obj/newplayer.lpc). Neither the archive, a git clone nor the site pack has them (no local boot wrote into them, so gen_keep_dirs.py never recorded them), and write_file() raises *Wrong permissions for opening file /log/dlog/money for append. "No such file or directory" for a missing directory: the function that logs stops on that line and what came after it (the reward, the flag, the next step) never runs. This lib's log_file() is write_file(LOG_DIR + file, text) and raises the same error for a missing directory (measured). log/chat, log/comm are now in scripts/wasm_keep_dirs.txt (scripts/lpc_keep_log_dirs.py; the site and the pristine tree create the empty directories from it). Proof (scripts/lpcc_eval.py, an eval object under /adm/daemons or similar writes /log/zzdirprobe/..., fresh processes): the measured table in KB 06 §7.358.
深度功能测试(2026-10-27,§6.25 LDMud foreach 冒号)
与 sticklib 同形:foreach (T x : arr) / foreach (k, v : map) 改为 in(约 291 文件 / 677 处)。证明:HEAD /ai/beast 因冒号失败;改后加载。
深度功能测试(2026-10-27,§6.10 LDMud 未知 pragma)
master_security.lpc / world.lpc 的 LDMud-only pragma 已删。
深度功能测试(2026-10-27,§6.25 LDMud #'fn 闭包)
同 sticklib:#'ident → (: ident :)(跳过 #'? / 'symbol 行)。
深度功能测试(2026-10-28,remove_call_out 闭包→字符串)
telnet_ob 的 remove_call_out((:timeout:)) 改为字符串。