前情
前面几篇讲了版本研究、重打包和实体生成方法论。这篇是实战记录:RBO7 阿克莫丹二世做成双 Boss,以及 RBO4 弗兰肯斯坦的狂暴化。
两个改动都已在实机验证,镜像基线如下:
- 大小 595,683,984 字节(253,267 扇区)
- SHA256 2A93C42D4DC2CCCB01C952FBE7DFC2173A60E0537187EEA8D243A0EFD2C08BCE
一、双 Boss:两只木乃伊
RBO7 原本只有一个阿克莫丹二世。我们让它同时出现两个,问题立刻来了:怎么判定胜利?
双死亡判定
原版逻辑是「这个 Boss 死了就过关」。两只的话,打死一只就结束,另一只还站着。
改法是:扫全部实体,同类型全部处于 FLAG_DEAD 才置 g_BossMgrState |= 2。
这里有个实现选择值得记一笔:判定时用 pfnUpdate(更新函数指针) 匹配,而不是用 entityId。因为同一个覆盖层里可能有多个实体槽共用相同的 entityId,只用 id 判断会误伤;而更新函数指针能准确区分「这只木乃伊」和「别的东西」。
软分离:防止两只重叠
两只 Boss 如果贴在一起,看起来就是一团。我们在 step 3 加了一段分离逻辑,让它们保持大约 40px 的距离。
不是硬推(会抖),而是每帧轻微修正——玩家几乎看不出来,但两只始终是分开的。
招式 A:扇形毒雾
- params = 0;
- 触发距离 40 到 140px;
- 一次生成 4 发 UNK_1C,按扇形角度铺开;
- 生成时逐个设置 rotate 和 zPriority。
招式 B:突进
- params = 1;
- 触发距离大于等于 100px;
- 用的是「抓人」动作,30 帧大约推进 90px;
- 撞到玩家后转入抓人状态。
抓人之后
- 抓到后反向投掷——往背后丢,比原版更出人意料;
- 抓人伸手动画减速 50%,给玩家一点反应窗口;
- 双抓闸门:如果另一只正在抓人,这一只这次就不抓,避免被两只连续抓死。
二、RBO4 弗兰肯斯坦:从「散步型」到「压迫型」
The Creature 原版的问题不是不强,而是节奏太慢——攻击间隔长、后摇长、还会自己后撤,玩家可以很从容地绕。
改后的参数:
| 参数 | 原值 | 改后 |
|---|---|---|
| 出招间隔 | 64 | 32 |
| 砸地后摇 | 32 | 16 |
| 翻滚时长 | — | 128 |
| 走路速度 | 0.5 | 0.8 |
外加三条行为改动:
- 永不后撤——删掉后撤分支,它只会往前压;
- 每帧强制朝向——走路速度直接按玩家 X 计算(玩家在左就是 -0.8,在右就是 +0.8),不再依赖 facingLeft 标志;
- 转身判断跳过——原来的转身逻辑会把朝向又翻回去,直接跳过。
出招决策也变简单了:计时到点时比较水平距离,小于 104 就砸地,否则翻滚。
三、一次失败的实验:砸地火焰
我们曾经给砸地加了「地面喷出两团火」,代码跑通了、火焰也生成了,最后却撤掉了。
原因很实在:那两团火没有伤害。
RBO4 的火焰实体(0x18)是纯外观,hitboxState = 0、attack = 0。它能被画出来,但不参与碰撞。玩家站在火里毫发无伤,只会觉得「这游戏出 bug 了」。
要让它有伤害,得在 child 的 step 0、InitializeEntity 之后补 hitbox 字段,或者直接改 EInit / enemyDef。这次先记下这个教训:
「看得见」和「有判定」是两件事,别把特效当成攻击。
等以后给这个 Boss 导入别的实体 VRAM,再用真正带判定的实体重做这一招。
四、怎么确认改动真的生效
光看游戏里「好像打得疼了」不算数。我们的验证是三层的:
- 自制 MIPS 解释器:带延迟槽语义,跑一遍补丁代码,检查寄存器与内存结果;
- 镜像回读:确认光盘上的字节与本地文件一致(on-disc == local),DRA 的 LBA 和长度都对;
- 存档扫描:在模拟器里触发招式后存档,扫 g_Entities[192..255],看子实体是否按预期生成。
第三层最有说服力——它直接读的是游戏运行时的内存。
五、当前基线里还有什么
除了上面两个,镜像里还包含:
- CAT 骷髅甩头伤害 65;
- RBO3 美杜莎石化后必放毒液;
- RNZ1 暗翼蝙蝠伤害加 50%;
- RBO2 死神出招间隔减半。
六、扩容文件的位置(方便下次继续)
| 文件 | LBA | 长度 |
|---|---|---|
| RBO7X_ATK.BIN | 250487 | 0x22D40 |
| RBO4X.BIN | 250560 | 0x26800 |
DRA 表项分别落在 0x4624 / 0x4628 和 0x46A8 / 0x46AC。
RBO4 的钩子放在朝向 0x801A6700(文件 0x26700)和速度 0x801A6750(文件 0x26750)。
七、下一步
按这个方法论,下一个目标是 RBO3 美杜莎——她的 clouds 实体已经在覆盖层里,可以直接复用,属于「性价比最高」的那类改造。
小结
双 Boss 的难点不在「多放一只」,而在胜负判定和行为分离;狂暴化的难点不在「调数字」,而在别把纯特效当成攻击。这两条经验,比具体参数值更值得记。
系列文章
