eko1495/HexWaste
GitHub: eko1495/HexWaste
HexWaste 是基于 C# / .NET + MonoGame 对《辐射 2》游戏引擎的重新实现,加载原版数据文件来还原地图渲染、回合制战斗、脚本对话、世界旅行等完整 CRPG 体验。
Stars: 1 | Forks: 0
# Hexwaste
一个使用 C# / .NET + MonoGame (DesktopGL) 对《辐射 2》(Fallout 2)引擎部分功能的重新实现:它加载原始数据文件,为你呈现一个鲜活的世界——真实的地图、真实的脚本、对话、拾取、跨地图旅行的持久化世界、存档/读档,以及荒野会反击你的回合制徒手战斗。
## 快速开始
```
dotnet run --project src/Hexwaste.Viewer -- --game-dir "/path/to/Fallout 2"
```
游戏目录是包含 `master.dat`、`critter.dat` 和 `patch000.dat` 的安装文件夹。如果不指定 `--game-dir`,Hexwaste 会探测常见的 GOG/Steam 安装路径以及可执行文件旁的 `game-data/` 文件夹。
预构建的独立构建版本(Linux x64 / Windows x64)由 `scripts/release.sh` 生成——详见 `docs/RELEASING.md`。
## 已实现功能
- **世界**:DAT2 档案、FRM 雪碧图 + 调色板循环、AAF 字体、完全静态光照(光晕区、昼夜时钟)、屋顶/“蛋形”透明遮罩、音效(由 Interplay ACM 解码器移植的 C# 版本——包含音乐、SFX、脚步声)、NPC 的环境生活(小动作、漫游、脚本驱动的双头牛行为)。
- **脚本**:一个微型 INT 字节码 VM 配备了真实的脚本宿主——地图进入脚本会锁门并为容器补充物品,检查/对话/开锁/计时程序均会真实运行,脚本计时器会触发事件(门会在你身后自动关闭)。
- **对话**:支持键盘选择的完整 `gsay` 对话树。
- **持久化世界**:基于原始地图文件键入的各地图增量数据——在 Den 地区搜刮一个储物箱,走到神庙再折返,它依然是搜刮过的状态;F5/F9 会将整个已探索的世界以 JSON 格式保存。
- **战斗**:采用引擎级精确排序的回合制战斗(在动画前决定结果,在完成时施加伤害)、AP 预算、近战武器与护甲(装备标志直接读取自 MAP 文件——敌人会使用自己的长矛)、治疗物品、死亡倒地及跨地图后依然保持死亡的可搜刮尸体、AI 回合、同队伍增援成员及脚本驱动的敌对反应——神庙蚂蚁看到你就会扑上来。敌人会读取其 `ai.txt` 数据包:它们会靠近到有效射击距离,并在重伤时逃跑,而不是死战到最后一滴血。暴击(自游戏内第 2 天起,与原引擎一致)会检定真实的《辐射 2》暴击表——额外伤害、护甲穿透、偶尔的瞬间击杀;瞄准特定部位(V键)攻击眼睛/头部/腿部,以牺牲命中率为代价换取好得多的暴击效果。同时暴击会带来后果(引擎的大规模暴击检定):一击可使目标致盲、致残肢体、将目标击晕(过一段时间会醒来),或使其丧失一回合——致盲的敌人攻击判定会有 −25 的减值,而 Skilldex 的 Doctor 技能可以治愈肢体和眼睛。战斗中每个六边形网格的移动都需要消耗 action points(战斗中无法自由行走地图),断腿会使移动消耗变为 4 倍导致只能爬行,而断臂则无法使用双手武器(双臂断裂则无法使用任何武器)。巨大的近战重击会将目标沿着六角线击退;暴击会使其倒地(命中 +40,站立需消耗 3 AP)。投掷长矛或石头(Throwing 技能,射程按 Strength 缩放)——落地后可在地面回收——或者投掷手榴弹进行带有衰减和击退效果的 AoE 爆炸。使用爆炸类枪械(10mm SMG、Tommy Gun、战斗霰弹枪)按住扳机(B):弹匣会喷射出锥形的弹雨——在决斗中几发子弹能命中目标,其余的则会摧毁场景,这与原引擎计算出的散布完全一致。战斗结束后击杀会给予 XP;升级会提升你的 HP。战败的话,按 F9 可回到过去。
- **角色**:创建你自己的角色(SPECIAL、性别、tagged 技能)或选择预设角色;升级会赋予你在角色面板(C)上分配的技能点,并且受属性限制的对话会运行正确的分支。休息(Z)会随着时间恢复生命值。
- **交易**:在原引擎价格公式下进行的真实店主交易(包含 Tubby 的货物箱等所有内容)。
- **世界地图**:在各个区域之间点击旅行(`maps.txt`/`city.txt`)——一个队伍圆点会穿过地图,速度受地形影响(山脉会减缓速度),并且旅行可以在半途保存/恢复。荒野充满凶险——旅行时会触发随机遭遇(`worldmap.txt` 表),并将你带入一个暂时的遭遇战地图,命名的群体会以阵型生成(老鼠、蝎子、交战派系、奴隶贩子)。高等级的 Outdoorsman 技能可以提前发现遭遇,并提供是/否选项以避开它(获得 XP);走出边缘,旅行会自动恢复前往你的目的地。X-FIGHTING-Y 遭遇战会在对立阵营上生成两拨人马,让你恰好卷入一场正在进行的斗殴——看着他们互相削减人数,或者亲自下场参战。
- **同伴**:招募后可通过控制中心(与他们交谈)——在此等待 / 跟随 / 交易 / 解散 / 重新加入;通过 1:1 的等价物交换来为他们配备装备。
- **HUD**:屏幕底部的原汁原味的《辐射 2》界面栏(`iface.frm`)——绿色滚动消息监视器、带有攻击模式标签的已装备武器槽、发亮的 action-point 指示灯、原始数字字体的 HP/AC 读数、战斗中的 END TURN / END COMBAT 按钮,以及可点击的 INV/OPT/MAP/CHA/SKILLDEX/PIP 选项卡(键盘快捷键依然有效)。SKILLDEX 选项卡会打开使用技能选择器——选择一个技能(Lockpick、First Aid、Doctor、Steal、Traps、Science、Repair、Sneak)并点击目标以应用。PIP 选项卡会打开 Pip-Boy:一个状态页(真实的《辐射 2》日历日期、等级、HP/AC、嵌入式微型地图)和一个休息菜单(定时休息或休息至完全恢复);按 A 键可显示全景自动地图,该地图会随着你的探索而显现(战争迷雾)。OPT 选项卡(或 Esc)会打开选项/暂停菜单:保存、加载、主菜单、退出、继续。每个面板和菜单都完全支持鼠标操作——点击物品栏/战利品/交易/交换列表中的行(PgUp/PgDn 翻页可查看第 9 项之后的物品)或 Pip-Boy/选项菜单;键盘快捷键同样有效。
## 控制
| 输入 | 操作 |
| --- | --- |
| 鼠标拖动 / 方向键 | 平移(按住 Shift 快速平移) |
| 点击空地 | 走到那里(基于六边形网格的 A* 寻路) |
| 点击门 / 容器 / 物品 / 楼梯 | 使用 / 搜刮(点击一行或按 1–9 获取,A 获取全部)/ 拾取 / 旅行 |
| 点击生物 | 交谈(真实的脚本化对话,1–9 进行选择;店主会打开交易面板) |
| 右键点击 | 检查(生物会显示 HP/AC) |
| F | 攻击悬停的生物(开始战斗) |
| B | 向悬停的生物扫射(需要爆炸类枪械:SMG/Tommy/战斗霰弹枪) |
| V | 切换瞄准部位(定身射击) |
| 空格键 | 结束战斗回合 |
| L | 撬开悬停的门(Skilldex 开锁技能) |
| S | Skilldex — 选择一个技能(1–8),然后点击目标使用 |
| P | Pip-Boy — 状态页 + 休息(R 呼出休息菜单,1–9 选择时长) |
| I | 物品栏(点击一个物品,或按 1–9 使用/装备/消耗,Shift+1–9 丢弃) |
| C / K | 角色面板(花费升级技能点) |
| Z | 休息治疗(附近无敌人时) |
| F5 / F9 | 保存 / 加载 |
| R | 装填已装备的枪械(战斗中消耗 2 AP) |
| F4 / T / PgUp / PgDn | 屋顶 / 步行循环 / 视角高度(PgUp/PgDn 在打开的物品面板中翻页) |
| [ / ] | 环境光(黑夜 ↔ 白天) |
| M | 世界地图 |
| Esc | 选项 / 暂停菜单(保存 / 加载 / 主菜单 / 退出 / 继续) |
提供了大量 `--flags` 用于无头测试(截图、脚本化的对话/战斗记录、确定性 RNG);详见 `src/Hexwaste.Viewer/Program.cs`。
## 构建
```
dotnet build # .NET 10 SDK
dotnet test # set FALLOUT2_DIR=/path/to/game for the data-backed tests
```
## 目录结构
- `src/Hexwaste.Formats` — 引擎 + 格式代码(DAT2/FRM/PAL/MAP/PRO/INT VM,脚本宿主,战斗算法,存档模型);不依赖 MonoGame,完全支持无头测试
- `src/Hexwaste.Viewer` — MonoGame DesktopGL 前端
- `tools/` — CLI 转储/调试工具(DatDump、FrmDump、MapDump)
- `tests/` — xUnit 测试套件
- `docs/` — 出处说明:推动每个阶段的研究报告和提示词,以及 `RELEASING.md`
## 许可证与致谢
Hexwaste 是
[fallout2-ce](https://github.com/alexbatalov/fallout2-ce)(逆向工程的引擎重新实现)的修改衍生品;移植的例程带有 `// ported from fallout2-ce ...` 注释。它采用 **Sustainable Use License v1.0**(`LICENSE.md`、`NOTICE.md`)授权:仅限免费的非商业用途及分发。
标签:多人体追踪