FluffOS 是一款高性能游戏引擎,专为构建持久性多人虚拟世界而设计。它是 MudOS 的现代继任者,也是网络游戏史上最具影响力的引擎之一,目前仍在积极维护。
如果您仍在运行 MudOS,现在是升级的时候了。FluffOS 与现有的 MudOS mudlib 完全向后兼容,同时新增了十余年的性能优化、现代协议(WebSocket、TLS)、数据库集成(SQLite3、MySQL、PostgreSQL)和 UTF-8 支持。
请使用 GitHub 上的最新版本或
master分支。 旧版(尤其是 v2017)已不再受支持。
一个 LPMUD 系统由三个层次构成,各司其职:
┌─────────────────────────────────────────────────────────┐
│ Mudlib(游戏框架) │
│ 一组 LPC 文件 — 定义房间、物品、NPC、战斗、命令、登录。 │
│ (如 Dead Souls、Discworld、Lima、Nightmare) │
├─────────────────────────────────────────────────────────┤
│ 驱动程序(FluffOS) │
│ LPC 虚拟机 + 网络层 + Efun │
│ 将 LPC 编译为字节码并执行,管理连接 │
│ (Telnet/WebSocket/TLS)、数据库、I/O。 │
├─────────────────────────────────────────────────────────┤
│ LPC(Lars Pensjö C) │
│ 编程语言。 │
│ 面向对象、类 C 语法、垃圾回收、 │
│ 热重载、事件驱动。 │
└─────────────────────────────────────────────────────────┘
| 层次 | 是什么 | 类比 |
|---|---|---|
| LPC | 一种面向对象、类 C 语法的编程语言,专为构建交互式虚拟世界而设计。 | 编程语言(如 C# 或 Lua) |
| 驱动程序 | 包含 LPC 字节码编译器与 VM、网络栈(Telnet、WebSocket、TLS)、数据库驱动(SQLite3、MySQL、PostgreSQL)以及数百个内置函数(efun)的 C++ 运行时。这就是 FluffOS。 | 引擎 / 操作系统(如 Unity 或 JVM) |
| Mudlib | 一组 LPC 文件,共同构成完整的游戏编程框架——包含房间、物品、玩家、NPC 的基类,命令解析器,登录系统等。一切皆对象,对象之间可以相互交互。 | 框架 / SDK(如 .NET 或游戏模板) |
LPC(Lars Pensjö C)是一种专为持久性虚拟世界设计的面向对象语言。游戏世界中的一切都是 LPC 对象。
/obj/sword.c → 世界中数千把独立的剑对象。/std/weapon.c → /obj/sword.c → /obj/cursed_sword.c。free()。call_out() 定时器。FluffOS 在完全兼容 MudOS LPC 方言的基础上,新增了 UTF-8 / EGC 感知字符串操作、引用参数、新类型修饰符和更多 efun,同时完全向后兼容现有的 MudOS LPC 代码。
FluffOS 是引擎,位于 LPC 源文件与操作系统之间,提供运行 MUD 所需的一切:
clone_object()、call_out()、write()、regexp()、crypt()、db_exec() 等数百个。create(),定时器触发时调用 heart_beat(),玩家进入房间时调用 init(),垃圾回收时调用 clean_up()。Mudlib 就是游戏本身:一棵 LPC 文件树,定义了房间、物品、NPC、战斗、法术、命令解析器、登录界面以及世界规则。驱动程序启动时加载 mudlib;一个典型 MUD 安装中 /src/ 以上的所有内容都是 mudlib 代码。
FluffOS 内置了 testsuite/ 目录下的测试用 mudlib。对于真实游戏,您需要单独选择或构建 mudlib。以下是与 FluffOS 开箱即用的流行选择:
使用同一个 FluffOS 二进制文件但不同 mudlib 的两个 MUD 可以给玩家完全不同的体验——驱动程序本身不强加任何游戏机制。
LPMud(Lars Pensjö,1989 年)── 发明了驱动/mudlib 分离架构
│
├── LPC 语言 ────────────────── 衍生出 Pike(1994 年)
│
├── DGD(Felix Croes,1993 年)── 极简主义,基于磁盘的持久化
│
├── LDMud(Lars Düning,1997 年)── 延续原始 LPMud 路线
│
└── MudOS(1992 年)
│
└── FluffOS ◄── 您在这里
完全兼容 MudOS +
UTF-8、WebSocket/TLS、异步数据库、jemalloc、
600+ efun,积极开发与 CI 持续集成
这个家族中的每个驱动程序都共享同一核心理念——LPC 源文件由 C 运行时加载并执行,引擎(驱动)与游戏内容(mudlib)严格分离。不同之处在于范围和哲学。DGD 注重极简主义和基于磁盘的持久化。LDMud 忠于原始设计。MudOS 是"功能齐全"的分支,而 FluffOS 延续了这一传统,采用现代 C++、跨平台支持和持续集成。
完整的代码库架构和贡献者指南,请参阅 AGENTS.md。LPC 文档请访问 FluffOS 官方文档。
FluffOS 支持多个目标平台。请根据您的部署目标选择对应的方案。
| 目标 | 环境 | 二进制类型 |
|---|---|---|
| Linux (Ubuntu/Debian) | 原生 Linux 或 WSL | Linux ELF |
| macOS | 原生 macOS | Mach-O |
| Windows | MSYS2 / MinGW64 | Windows PE |
| Alpine Linux | Docker 或原生 Alpine | 静态 Linux ELF |
Tip
在 Windows 主机上,您有两种选择:
构建 Windows 原生二进制文件 → 使用 MSYS2 / MinGW64 工作流。
构建 Linux 原生二进制文件 → 使用 WSL 工作流。
这是主要支持的平台(Ubuntu 24.04 LTS)。
1. 安装依赖:
sudo apt update
sudo apt install -y build-essential autoconf automake bison expect \
libmysqlclient-dev libpcre3-dev libpq-dev libsqlite3-dev \
libssl-dev libtool libz-dev telnet libgtest-dev libjemalloc-dev \
pkg-config libffi-dev libdw-dev libbz2-dev
Note
仅当你修改 LPC 词法分析器(src/compiler/internal/lexer.l)时才需要 flex;否则构建将使用预先提交的生成文件。
2. 编译:
mkdir build && cd build
cmake ..
make -j$(nproc) install
1. 安装依赖(Homebrew):
brew install cmake pkg-config pcre libgcrypt openssl jemalloc icu4c \
mysql sqlite3 googletest libffi
2. 编译:
mkdir build && cd build
OPENSSL_ROOT_DIR="/usr/local/opt/openssl" ICU_ROOT="/opt/homebrew/opt/icu4c" cmake ..
make -j$(nproc) install
构建 Windows 原生 FluffOS 二进制文件必须使用 MSYS2 / MinGW64 环境。
1. 安装依赖(在 MINGW64 终端中执行):
pacman --noconfirm -S --needed \
git mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake \
mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre \
mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 \
mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest \
mingw-w64-x86_64-pkgconf mingw-w64-x86_64-libffi \
bison make
2. 编译:
mkdir build && cd build
cmake -G "MSYS Makefiles" -DMARCH_NATIVE=OFF -DPACKAGE_CRYPTO=OFF -DPACKAGE_DB_MYSQL="" -DPACKAGE_DB_SQLITE=1 ..
make -j$(nproc) install
编辑器设置: 项目根目录中的 open-editor-msys2.bat 脚本可自动检测 MSYS2 安装位置,设置 MSYS2_ROOT,并将 MinGW64 添加到 PATH,然后启动您选择的 Antigravity IDE 或 VS Code。直接双击即可运行。
在 Windows 主机上构建 Linux 原生 FluffOS 二进制文件,请使用 WSL(Windows Subsystem for Linux)。
Important
性能:代码库必须位于 WSL 发行版的原生文件系统上(如 /home/user/fluffos),不能放在映射的 Windows 驱动器(/mnt/c/...)上。跨文件系统的 I/O 会严重影响构建速度。
1. 设置 WSL 并克隆仓库(在 WSL 终端中):
# 如果尚未安装 WSL 发行版(在 PowerShell/cmd 中运行):
# wsl --install -d Ubuntu
# 然后打开 WSL 终端,将仓库克隆到原生 Linux 文件系统:
git clone https://github.com/fluffos/fluffos ~/fluffos
2. 安装依赖并编译: 在 WSL 终端中按照上述 Ubuntu/Debian 步骤操作。
3. 打开编辑器: 在 Windows 资源管理器中,通过 WSL UNC 路径导航到项目(如 \\wsl.localhost\Ubuntu\home\<用户>\fluffos),双击 open-editor-wsl.bat。该脚本从 UNC 路径读取发行版名称,并以 --remote wsl+<distro> 模式启动您选择的 Antigravity IDE 或 VS Code。
1. 安装依赖:
apk add --no-cache linux-headers gcc g++ clang-dev make cmake bash \
mariadb-dev mariadb-static postgresql-dev sqlite-dev sqlite-static \
openssl-dev openssl-libs-static zlib-dev zlib-static icu-dev icu-static \
pcre-dev bison git musl-dev libelf-static elfutils-dev \
pkgconf libffi-dev zstd-static bzip2-static xz-static
2. 编译(静态构建):
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DSTATIC=ON -DMARCH_NATIVE=OFF
make -j$(nproc) install
通过 open-editor-msys2.bat 或 open-editor-wsl.bat 打开编辑器后,CMake Tools 扩展会自动处理配置。使用任务菜单(终端 → 运行任务)或 Ctrl+Shift+B 执行默认构建:
| 任务 | 说明 |
|---|---|
driver: build |
增量构建 — 仅重新编译已更改的文件 (默认构建任务) |
driver: clean rebuild |
删除所有构建产物,然后从头重新构建 |
driver: testsuite |
使用 LPC 测试套件配置启动驱动程序(etc/config.test) |
driver: autotest |
运行完整的自动化 LPC 测试套件并以通过/失败状态码退出 |
Tip
首次打开时,CMake Tools 会提示选择工具链(Kit)。Windows 请选择 GCC (MSYS2 MinGW64),WSL/Linux/macOS 请选择系统 GCC 或 Clang。
以下 CMake 标志可与任意平台组合使用:
| 标志 | 说明 |
|---|---|
-DCMAKE_BUILD_TYPE=Debug |
带符号信息的调试构建 |
-DCMAKE_BUILD_TYPE=Release |
优化的生产构建 |
-DENABLE_SANITIZER=ON |
启用地址与未定义行为 Sanitizer(Clang) |
-DSTATIC=ON |
完全静态二进制文件 |
-DMARCH_NATIVE=OFF |
禁用原生 CPU 优化(提高可移植性) |
FluffOS 拥有完善的单元测试和 LPC 层面的测试套件。
在 build 目录下使用 GTest 运行标准的二进制级单元测试:
cd build
make test
# 或者手动执行特定测试
./src/lpc_tests
./src/ofile_tests
# 使用测试套件配置运行驱动
./build/bin/driver testsuite/etc/config.test
# 或者直接运行 LPC 测试套件
cd testsuite
../build/bin/driver etc/config.test -ftest
Note
测试套件贡献指南:LPC 测试用例均位于 testsuite/ 目录中。当您添加新的 package efun 或修改现有的驱动程序特性时,应当在 testsuite/single/tests/efuns/(或通常的 testsuite/single/tests/)下添加对应的 LPC 测试文件,以确保所做更改能通过 CI 工作流的持续验证。
src/:核心驱动程序源代码。
main.cc:入口点。backend.cc:主游戏循环与网络/事件派发器。comm.cc:网络套接字与数据包处理。user.cc:连接与会话管理。src/vm/:LPC 执行虚拟机。
interpret.cc:字节码解释器循环。simulate.cc:游戏对象生命周期与模拟函数。src/compiler/:LPC 编译引擎 (grammar.y、lex.cc、generate.cc)。src/packages/:模块化的 efun 功能(数学、数据库、加密、套接字等)。testsuite/:包含 LPC 测试和配置的官方测试套件。docs/:Markdown 文档。
v2017 是旧版,使用 autoconf 构建系统,支持在 CentOS/Ubuntu 和 Windows(使用 CYGWIN)上编译。此版本不再受支持,仅出于历史兴趣保留。
所有之前的 MudOS 和 FluffOS 版本也以标签形式保留在代码库中作为历史参考。
非捆绑的平台依赖包括:libevent、ICU4C、OpenSSL、Zlib 等。
我要特别感谢所有赞助商和贡献者给予的支持。 所有捐赠 100% 用于购买 FluffOS 开发和网站及论坛托管的工具、设备和托管费用。
列表按收到捐赠的时间降序排列。
感谢所有的支持者!🙏 成为支持者
通过成为赞助商来支持这个项目。您的标志将显示在这里并链接到您的网站。成为赞助商