Skip to content
starchfurryconPublic

About

Chaite: version-locked vanilla Terraria boss automation experiment with reversible installation and offline regression tests.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

拆特

GitHub 源码 · 验证记录 · 验收报告

“拆特”是面向 Windows Steam 原版 Terraria 的实验性 Boss 战斗接管器。当前唯一白名单版本是 1.4.5.8;它不是 tModLoader 模组,也不处理入侵、月亮或其他事件。生产接管白名单只有猪鲨公爵(NPC type 370);光之女皇(NPC type 636)已整体退出范围,不再接管也不再准入。

工具通过可恢复的 IL 注入,在本地玩家更新入口、原版输入复制后、快捷栏处理后、HorizontalMovement 前及 Boss 掉落结算处加入五个入口。每帧只规划一次;后续三个玩家入口依次回放输入、恢复选槽/瞄准及复核已评分的可选机动边沿,不会重新扫描威胁或重新规划。战斗热路径完全离线,不截图、不联网、不运行大模型,不直接读写 .plr、.wld 或地图文件;游戏内的战斗与物品消耗仍由原版正常执行。

当前仍是实验性 alpha,不是成熟自动通关版本。旧版本的全 Boss 代码、批次和失败证据只保留作离线研究/回归,不代表生产运行时会接管这些 Boss,也不能据此宣称无伤或高胜率。猪鲨的真实多种子验收仍需单独完成;请只用备份角色和世界试验。

2026-09-29 逐 tick 回放验收(现行结论):猪鲨两条已审路线按 每套配装胜率 ≥ 90% 判定, 均未达标 —— 强翼 78.9%(15/19 测点)、弱翼 50.0%(9/18)。 严格零接触(hits==0)只强翼达成 4 个 DPS 点,弱翼为 0。逐点数据与复现步骤见 验收报告。 此数字取自逐 tick 回放通道,与 CHANGELOG 里生产策略通道的 strong-wing 97.4% 不是同一个量,不可互相替代。

2026-09-18 实测结论(当时范围还含光女,光女现已退出范围):9 个组合(猪鲨 5 种配装 + 光女昼/夜各 2 种)在隔离原版探针上按门禁种子逐场实测,0/9 达成战斗级无伤,45 场中只有 2 场获胜且都挨过打。逐组合读数见桌面 CHAITE-NOHIT-VERIFY.txt。 训练器报告的「STABLE clean closed loops on 5 of 5 gate seeds」衡量的是单个玩家闭环内无伤且回到初始状态的数量,与「整场一次都没被打到」不是同一个量,不得互相替代。工作流与状态机的完整梳理见工作流与状态机。

2026-09-18 更正:上面那 45 场是在错误的场地上测的,而且训练目标本身也是错的。 一是场地——真实战斗是一条长直平地,猪鲨起点贴近跑道一端而非正中;旧夹具却把猪鲨 出生点放在 400 格跑道正中,还在平地上方加了两条贯穿全场的木平台(真实场地没有)。 同参数对照:场地改对后,同一套基线在同一颗种子上从「打到 45.6% 就死、挨 8 下」 变成「满血击杀、零死亡、挨 4 下」。因此此前所有基于旧夹具的路线结论都需要重测。 二是训练目标——旧排序以「干净闭环的数量」为第一项,win 在排序里根本不存在; 拿已记录的 9 个组合喂进去,它把从未赢过、5 场全死、挨 68 下的组合排第 1, 把唯一赢过的组合排第 5。现已改为验收口径优先: noHitWins → wins → deaths → hits → cleanLoopShare → playerDamagePerK → damage, 并由 tools/test-training-objective.ps1 连同文件头声明一起钉死。 同时日志改为先打 fight verdict(无伤胜场/胜场/死亡/受击)再打 loop verdict, 以免闭环数字再被读成战斗结论。

当前开发源码保留逐武器/弹药适配和历史 Boss 代码,仅用于猪鲨共用的原生模型及离线回归。生产 PlanFormula 不调用旧 Boss 路线搜索或评分器;目录中其余 Boss 的画像不代表生产白名单已经扩大。历史开发结果集中保留在 CHANGELOG.md 和 VERIFICATION.md,不再混入当前操作说明。

操作与启动门槛

  • F8:Boss 出现前开启监视。先检查是否有猪鲨公式机动路线,不要求召唤物或鱼竿在快捷栏。
  • 监视期间操作权属于玩家;不会自动切武器、走位、抛竿或清怪。请自行召唤。
  • 检测到单个猪鲨后,核验当前配装与监视时路线一致,并检查战斗准备,随后接管。其他 Boss、混合或重复 Boss 均拒绝。
  • F9:取消监视或立即终止接管。监视取消不修改玩家当前武器;正式接管结束时按配置恢复接管前武器。
  • 战斗中途按 F8 不接管。监视中死亡或切换角色、世界、连接会取消监视。
  • 开始监视复用现有 man.wav,真正接管播放 try_minnie.wav;没有音频文件会提示,不生成或修改梗音频。
  • 机动路线不匹配时播放 never_tried_this_loadout.wav;不支持的 Boss 播放 boss_too_hard_for_me.wav。
  • 公式路线目录中的路线仍在开发,尚无新路线完成独立多种子通关验收。

玩家自行召唤

猪鲨:开启监视后,自行用松露虫在海洋钓鱼。生产 Runtime 已移除自动召唤与等待时生存走位调用;旧召唤辅助代码只保留作离线研究。

战斗规划

当前产品目标只针对猪鲨公爵:在声明的最低机动与场地条件下形成机械化闭环。其他 Boss 不属于生产目标,接管请求直接拒绝;这只是开发目标,当前没有逐 Boss 大样本证据证明“接近 100%”结论。

逐 Boss 验收要求猪鲨按难度、场地、机动路线、配装分别统计,不以其他变种的胜利抵消失败。现有 tools/evaluate-boss-readiness.ps1 仍使用统一门禁:预先固定目标及独立抽样种子清单,每格至少 40 个不同种子,且双侧 95% Wilson 区间下界不低于 90%;这不能把离线阶段回归转换成“接近 100%”证明。死亡、超时、重复种子和缺证据不能补成胜利。

战前准入只按公式路线目录核对精确机动身份;武器、弹药与非机动饰品不参与路线选择。接管后路线锁定,每个 Boss × 路线使用独立预编写状态机,只读原生攻击状态和时钟,不逐弹幕搜索、不评分训练、不中途换装。生产接管只拥有走位:开火、快捷栏武器槽、目标与输出路线在应用前会被全部清空(Runtime.DropNonMovementCommands),下文提到的武器/瞄准行为只属于离线路线与旧版本。当前声明仍是“开发中”,直到每条路线完成逐难度、多种子、零受击隔离验收。

原版 1.4.5.8 的 MountID 0..65 已全部进入身份目录,其中 27 种是矿车;活动坐骑身份和 QuickMount_GetItemToUse() 实际选中的物品/坐骑对会分别发布。目录记录只说明“它是哪一种”,不说明“拆特会驾驶它”。除已审核路线外的任何活动坐骑仍会输出全中性并归还操作,也绝不会因为背包里有坐骑就自行按下坐骑键。

普通 Grappling Hook item 84 / projectile 13 也已具备精确只读身份、纯运动、路线证书和控制器回归,但控制器尚未被任何生产 Boss 规划路径调用;当前遇到活动抓钩仍会全中性归还操作,不会自动发射或猜测解钩。读取/验证代码存在不等于生产接线完成。

用 -Summary <项目内绝对 summary.json 路径> -DescribeProfiles 可只读查看构建及配置身份;正式计算另传 -Targets <预声明目标 JSON>。默认只输出 JSON,未达标退出码为 2;此工具补充统计,不代替原生证据和文件清单审计。开发中的同种子回归不得事后改称未见独立验收样本。

源码仍保留每个原版 Boss 的独立策略及阶段标签,但它们只用于离线研究与回归:

  • 肉前:史莱姆王、克苏鲁之眼、世界吞噬怪、克苏鲁之脑、蜂王、骷髅王、独眼巨鹿、血肉墙。
  • 肉后:史莱姆皇后、双子魔眼、毁灭者、机械骷髅王、世纪之花、石巨人、猪鲨公爵、拜月教邪教徒、月亮领主。
  • 机械混战、天顶世界机械美杜莎,以及任意不同 Boss 家族同时存在时,生产边界会在接管前拒绝,而不是尝试复合控制。

上层模式为 EstablishPattern → StablePattern。即将碰撞时短暂进入 EmergencyEvade,脱离后经 RecoverToPattern 回到原闭环。方向有滞回,场地边缘按制动距离提前回转;飞行资源不足时进入降落、补充资源与重新起飞的恢复过程。克盾冲刺和重力药水翻转只有在精确身份、输入边沿、完整威胁轨迹与返回闭环都成立时才作为评分候选;未接入生产闭环的活动坐骑或活动抓钩会立即中性归还操作。

v0.3 修复原版延迟换槽被旧槽位回放取消的问题;当时曾用原版“松开跳跃→跳跃”脉冲解钩。当前生产版已用上述 fail-closed 边界取代该通用解钩逻辑,只有将来接入完整普通抓钩路线证书后才会重新授权脉冲。跑鞋按基础速度与疾跑速度分段预测,考虑空中加速限制、制动和减速;倒置重力时正确转换瞄准坐标。

v0.4 补齐落地后的松跳/重按、平台单向通行,以及迷你鲨/发条式突击步枪的原生只读选弹和子更新弹速换算。风筝模式会保持交战距离;毁灭者分开选择射击体节与头部避让参考、优先可见目标/近身探测怪,并在脚下有已观测落脚面时争取高度。目标视线缓存最多保留 12 帧,任一端移动超过 64 像素失效;每帧最多 3 条探索射线,加开火前 1 条原版即时射线。

平台不再按横向空旷宽度推断支撑:新落点只采用实际连续、净空足够的平顶表面,离开边缘会预测下坠,并检查移动中真正穿过落点高度时的横坐标。飞行资源不足时提前回接近期验证过的落脚区,紧急避障仍可覆盖这条回接路线。支撑扫描垂直最多 70 格、连续行左右各 96 格,沿用局部缓存;落地、重力或站立高度变化会提前刷新。斜坡、半砖不作为已验证的新平顶落点,不承诺任意地形的全程可达性。

飞行恢复只用于实际装备有有限飞行资源的角色;普通地面跳跃不会触发回接。装备判定不单看当前剩余条或原版火箭计时的默认上限,因此既不把无翼角色当成耗尽,也不漏掉真正耗尽的翅膀/火箭靴。

通常安全路线只评估 1 个候选,危险或恢复时才展开有限候选。不同候选共享弹幕预测缓存,累计风险剪枝只跳过已不可能获胜的候选;不会减少预测时长或丢掉多 Boss 来换速度。攻击目标与绕行中心分开,最后对实际射击目标执行原版视线检查。坐骑和钩爪读取原版实际会选中的物品,不把不同坐骑、不同抓钩或库存中的闲置装备拼成不存在的运动能力。

“有策略”不代表“可独立发起”:除猪鲨外的策略只存在于离线目录,永远不会获得生产控制权。策略覆盖也不等于已经逐 Boss 实战验证。

状态与音频

条件 音频槽位
开启监视(F8 武装成功) man.wav
无合法启动条件,或场地/机动性不足 no_slime_ang.wav
接管成立 try_minnie.wav
接管期间受伤 man.wav
死亡 dead.wav
零死亡完成 mamba_out.wav
死过但最终完成 failed_boss_design.wav
死亡后 Boss 已无法继续 low_level_chaite.wav
Boss 不在当前生产白名单(拒绝接管) boss_too_hard_for_me.wav
机动配装不在已审核路线 never_tried_this_loadout.wav

项目只提供音频槽位,不生成、下载、变声或分发 Ezfic/EZ、科比原片段。把自己有权使用的 PCM WAV 放入安装后的 Terraria/Chaite/Audio;缺失只提示一次,不影响规划。音频目录固定为 Terraria/Chaite/Audio,不由 config.json 改写;配置文件只控制热键、规划和提示行为,音频槽位始终按安装包中的 Audio/README.txt(源码:src/Chaite.Plugin/Audio/README.txt)的文件名读取。WAV 在启动后由后台线程预载;预载完成前同一槽位最多保留一次待播请求,战斗帧不会读取或解码 WAV。

梗的完整登记(EzFic/老庄的「桑百颗」「星星炮大战骷髅王」,以及科比梗)见玩梗登记表。

控制台界面与本体贴图

控制台只显示三件事:标题、猪鲨栏(列出该 Boss 已审核的配装,可选中查看所需装备)、底部按键说明。兼容性细节(哈希、版本横幅、安装状态长文、验收口径)已从界面移除,只留在日志与文档里。

界面上的猪鲨与各饰品图标全部是本体贴图,由管理器在运行时从玩家自己的 Terraria/Content/Images/*.xnb 读出,缓存到 Terraria/Chaite/Sprites/:

  • 读取方式是 XNA 自己的 ContentManager,它内置 LZX 解压。此前"XNB 读不出来"的判断是错的:Terraria 的 XNB 头部 flags=0x80 确实是 LZX 压缩位(0x01 才是 HiDef),但不需要自己实现 LZX 解码器。
  • 因此需要活动 GraphicsDevice,管理器固定为 x86(XNA 只有 32 位程序集,Terraria 本体也是 x86)。代价是没有显示设备的机器上无法提取,此时界面显示中性占位框,不影响安装与使用。
  • 仓库与安装包不含任何 Re-Logic 美术资源,贴图始终来自玩家自己的游戏副本。Boss 头像索引(猪鲨 370→4)读自 Terraria.exe 里 NPCID.Sets.BossHeadTextures 的 (npcType, headIndex) 表,不是猜的。

梗图槽位

管理器额外提供 Terraria/Chaite/Memes/(安装时创建,附 README.txt)。把 PNG/JPG/BMP/GIF 放进去,管理器下次检查后即显示缩略图;最多 8 张,按文件名排序,单张过大自动缩小,解码失败跳过且不影响任何功能。与音频一致,项目不分发任何梗图;本体元素由上面的贴图机制提供,老庄大头这类站外素材放这里。

构建与离线验证

要求 Visual Studio 2022(.NET 桌面开发)和 .NET Framework 4.8:

./tools/build.ps1 -Configuration Release -Package

默认新包输出位于 artifacts/Chaite-v0.7.0-alpha。打包先执行 x86 回归、离线证据门禁、逐 Boss 统计工具回归,以及后台 UI 布局检查;不删除已有包,同名目录存在时需指定新的 -PackageVersion。依赖本机白名单 Terraria 的 API/注入点、抓钩和坐骑元数据审计需在正式发布前另行运行,打包命令本身不会加载或执行 Terraria。已生成的 v0.1 至 v0.6 alpha 包留作回退;修改默认版本号不代表新包已经通过原生验收。

在拥有白名单游戏文件的开发机上,可分别运行 ./tools/audit-native-mount-catalog.ps1、./tools/audit-native-mount-motion-matrix.ps1 和 ./tools/audit-native-dash-sources.ps1。这些命令锁定游戏与 Mono.Cecil 哈希,只读取 PE/IL 元数据和目录源码,不加载或执行 Terraria;它们分别核对坐骑身份映射、39 种非矿车坐骑的原生运动矩阵,以及原版冲刺来源与状态机。它们是正式发布前的本机只读审计,不属于无游戏文件的 CI 或可移植打包门禁。

运行 Chaite.Manager.exe 可查看白名单状态、安装或恢复。新版界面采用深蓝/琥珀色分区、固定底部操作区和醒目的 F9 提示;状态哈希检查在后台防抖执行,避免输入路径时卡住界面。安装、恢复均有默认取消的确认。安装器:

  1. 要求 Terraria 已退出,绝不会代为结束进程。
  2. 同时校验文件版本和完整 SHA-256;未知更新一律拒绝。
  3. 在 Terraria/Chaite 保存哈希锁定的原版备份和 XML 清单。
  4. 先写临时程序集并验证注入点,再原子替换。
  5. 恢复时只有当前文件仍与清单中的 patched hash 一致才覆盖,避免误抹 Steam 更新或其他修改。
  6. 每次成功安装都会更新 Audio/README.txt;已有 config.json 和用户 WAV 始终保留,不覆盖也不删除。

命令行:

Chaite.Patcher.exe status
Chaite.Patcher.exe install
Chaite.Patcher.exe restore

当前支持边界

  • 仅支持白名单中的 Windows Steam Terraria 1.4.5.8 x86;游戏更新后必须重新验证字段、Boss AI 和注入点。
  • 自动选择武器只看快捷栏,不整理背包、不改装备;特殊召唤只进行原版流程必需的选槽、输入与单个巫毒娃娃拆堆。
  • 单机死亡通常会使普通 Boss 立即消失,因此会按“死亡后无法继续”终止;多人状态下 Boss 仍在则复活后继续。
  • 周边地形扫描每 20 tick 或玩家明显移动后更新,范围只覆盖策略需要的局部净空与钩爪锚点,不进行全世界扫描。
  • 普通跳、云瓶与一个固定 Demon Wings/Lightning Boots 子集已有原生逐 tick 合同,但其他二段跳、翅膀、火箭靴批次、坐骑、冲刺和组合装备仍需逐来源扩展;不能把“读到机动饰品”当成已充分利用其能力,也不能依据单场胜负调整距离常数。
  • 局部净空是近似边界,不是整片场地的精确可达性证明;钩爪使用保守射程,复杂斜坡、平台和极端装备组合仍需实测。
  • 普通弹幕预测包含线性运动、扫掠碰撞和寿命;月亮领主死亡射线已加入专用旋转、预热、宽度与连续扫掠模型。发射源未来运动仍近似为线性,不保证避开所有攻击。
  • 预检尚未完整估算生命、护甲、法力/弹药总量与实际武器循环 DPS;坐骑还没有可用于生产 Boss 战的完整运动/场地/疲劳闭环。“通过基础开战检查”不是胜率保证,不能据此自动消耗珍贵召唤物反复试错。
  • 原版手柄锁定/辅助瞄准可能在回放后改写瞄准;当前实测为键鼠输入路径,手柄模式尚未验收。
  • 已在工作区独立副本中运行原版无渲染战斗更新,经典克眼自动召唤、输出、击破与结束链通过,零死亡但有受伤。没有安装到正式游戏目录或读取用户角色/世界。私有桌面完整图形客户端受 XNA 显卡初始化限制,未改用用户桌面;无渲染测试不等于完整客户端、近战判定或逐 Boss 验收。

后台原版引擎测试(开发者)

需要本机拥有白名单原版及 XNA 运行库。每次使用新的目录:

.\tools\prepare-game-probe.ps1 -RunName game-probe-local01 -Headless
.\tools\start-isolated-test.ps1 -TargetExe "$PWD\artifacts\game-probe-local01\Terraria.exe" -OutputDirectory "$PWD\artifacts\game-probe-local01-desktop"

启动器核对所有运行文件哈希,强制工作区 Save 路径、禁用 Steam/social,不发送系统按键、不切换桌面。只允许单次运行,不复用有日志/存档的目录;测试角色及场地仅在内存中创建,存盘入口被测试副本禁止。退出码 0 需要完整战胜断言通过,拒绝激活、超时、原版异常或接管错误均非成功。光照、成就使用隔离的原版数据初始化;文字弹出与碎块呈现被省略。测试工具和副本不是可分发的游戏版本,GitHub 不包含任何 Terraria 文件或音频。

参考与许可证

代码采用 MIT 许可证。行为与召唤条件依据 Terraria 1.4.5.8 程序集、Terraria Wiki 和 tModLoader 输入时序资料核对;架构调研参考了 michaelcox3/terragent 与 brkcnr/terragent,没有复制它们的网络或 LLM 控制路径。

About

Chaite: version-locked vanilla Terraria boss automation experiment with reversible installation and offline regression tests.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages