文章 15
评论 3
浏览 65501
PS1 月下夜想曲 Best 版本研究(四):双 Boss 与狂暴化的实战

PS1 月下夜想曲 Best 版本研究(四):双 Boss 与狂暴化的实战

前情

前面几篇讲了版本研究、重打包和实体生成方法论。这篇是实战记录: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 原版的问题不是不强,而是节奏太慢——攻击间隔长、后摇长、还会自己后撤,玩家可以很从容地绕。

改后的参数:

参数原值改后
出招间隔6432
砸地后摇3216
翻滚时长—128
走路速度0.50.8

外加三条行为改动:

  1. 永不后撤——删掉后撤分支,它只会往前压;
  2. 每帧强制朝向——走路速度直接按玩家 X 计算(玩家在左就是 -0.8,在右就是 +0.8),不再依赖 facingLeft 标志;
  3. 转身判断跳过——原来的转身逻辑会把朝向又翻回去,直接跳过。

出招决策也变简单了:计时到点时比较水平距离,小于 104 就砸地,否则翻滚。

三、一次失败的实验:砸地火焰

我们曾经给砸地加了「地面喷出两团火」,代码跑通了、火焰也生成了,最后却撤掉了。

原因很实在:那两团火没有伤害。

RBO4 的火焰实体(0x18)是纯外观,hitboxState = 0、attack = 0。它能被画出来,但不参与碰撞。玩家站在火里毫发无伤,只会觉得「这游戏出 bug 了」。

要让它有伤害,得在 child 的 step 0、InitializeEntity 之后补 hitbox 字段,或者直接改 EInit / enemyDef。这次先记下这个教训:

「看得见」和「有判定」是两件事,别把特效当成攻击。

等以后给这个 Boss 导入别的实体 VRAM,再用真正带判定的实体重做这一招。

四、怎么确认改动真的生效

光看游戏里「好像打得疼了」不算数。我们的验证是三层的:

  1. 自制 MIPS 解释器:带延迟槽语义,跑一遍补丁代码,检查寄存器与内存结果;
  2. 镜像回读:确认光盘上的字节与本地文件一致(on-disc == local),DRA 的 LBA 和长度都对;
  3. 存档扫描:在模拟器里触发招式后存档,扫 g_Entities[192..255],看子实体是否按预期生成。

第三层最有说服力——它直接读的是游戏运行时的内存。

五、当前基线里还有什么

除了上面两个,镜像里还包含:

  • CAT 骷髅甩头伤害 65;
  • RBO3 美杜莎石化后必放毒液;
  • RNZ1 暗翼蝙蝠伤害加 50%;
  • RBO2 死神出招间隔减半。

六、扩容文件的位置(方便下次继续)

文件LBA长度
RBO7X_ATK.BIN2504870x22D40
RBO4X.BIN2505600x26800

DRA 表项分别落在 0x4624 / 0x4628 和 0x46A8 / 0x46AC。

RBO4 的钩子放在朝向 0x801A6700(文件 0x26700)和速度 0x801A6750(文件 0x26750)。

七、下一步

按这个方法论,下一个目标是 RBO3 美杜莎——她的 clouds 实体已经在覆盖层里,可以直接复用,属于「性价比最高」的那类改造。

小结

双 Boss 的难点不在「多放一只」,而在胜负判定和行为分离;狂暴化的难点不在「调数字」,而在别把纯特效当成攻击。这两条经验,比具体参数值更值得记。


系列文章


标题:PS1 月下夜想曲 Best 版本研究(四):双 Boss 与狂暴化的实战
作者:Miaocat
地址:https://small7g.cn/articles/2026/11/04/1793783140261.html

Lazy Cat Days. 什么都有,又好像什么都没有.

取消