您当前的位置: 首页 生活 > > 正文

修改晓月圆舞曲怪物的攻击属性(以三种特殊状态为主)

2023-08-26 11:38:13 来源:哔哩哔哩 分享到:

在dsvania_editor中我们可以轻易地勾选人物武器、红魂、装备的属性和抗性。但是对于怪物,却没有复选框供人修改。因为怪物的攻击属性并不简单。持有武器、或者发射投射物的怪物,身体和武器算作不同的物体,攻击力和属性也不相同。蝎尾狮蝎尾有毒但身体无毒。石化牛/石化鸡本体不石化,但是他们的雾和激光会石化。所以属性不能简单的修改。

此方法可能产生无法估计的后果。为了减少bug对您的rom产生的不可逆转的破坏,先备份再修改。修改需要能看内存的gba模拟器,这里我用VisualBoyAdvance(vba)。no$gba也行,顺便可以自己设置中断或者修改指令看看会发生什么。还需要一个16进制编辑器,我用的是crystaltile2(ct2)。再准备一份晓月圆舞曲rom,我用美版,汉化版同理。

从dsv的文档,可以知道一些重要信息。


(资料图片)

=== 020004E4-02007863: Entity memory. Each entity is0x84 byteslong. Entities range from 00-DF.

What each range of entity slots is for:

00,4: Pointer to update code。实体的updatecode(似乎是每帧要执行的东西)

。。。。。。

1B-48  020012D0-02002A87  Room entities, including enemies and special objects.

房间内的实体,敌人/特殊物品

。。。。。。

敌人的数据就在加粗的位置了。

Memory used for entities in AoS is 020004E4 - 02007863. Each entity is 0x84 bytes long. They range from 0-DF.

。。。。。。

40,4: X pos on the screen in subpixels.

In the GBA games, each pixel is 0x10000 subpixels.

Note that unlike the DSVanias, there is no X/Y pos in the room. Only on the screen.

44,4: Y pos on the screen in subpixels.

In the GBA games, each pixel is 0x10000 subpixels.

Note that unlike the DSVanias, there is no X/Y pos in the room. Only on the screen.

这两个是横纵坐标,可以改动这两个的值,然后看有什么实体发生了移动,从而确定这段内存是哪个实体的。

。。。。。。

7C,4: On-hurt-player callback.

This function pointer is called when the entity collides with the player.

击中玩家时调用的函数指针

80,4: On-damaged callback.

This function pointer is called when the entity collides with a player weapon.

It calculates the damage that should be done and kills the enemy if its HP is 0 or below.被玩家击中时调用的函数指针,关系到怪物的死亡,不要乱改,但是在这方法里有其他用途。

。。。。。。

这函数关系到伤害计算和属性了。所以要改属性就从这里下手。

打开gba模拟器,打开晓月圆舞曲。进入一个你要改/用的怪的房间。比如我现在要史莱姆的毒。

用dsv看到史莱姆的updatecode是080C1349(49 13 0C 08),打开内存查看器。每0x84字节是一只怪的数据。转到020012d0。找到49130c08.

打败史莱姆,这一段全变成00了,说明这里就是史莱姆的数据。从这里开始,地址往后0x7c就是攻击代码了。

经过测试,得到一些重要的攻击函数指针(以小端模式记录)。

319B0908        诅咒魔

DD130C08       史莱姆

CDE30A08       毒虫

CD990808       牛的雾

牛的雾是重点,因为这个是牛生成后会自动消失的,也找不到updatecode,只能看这段内存有没有哪里会突然随着雾出现又随着雾消失了。其他投射物同理。在消失之前赶紧暂停然后查看。

接下来是修改。这里找到了史莱姆,试着把它改成诅咒属性。把上面图中的dd 13 0c 08改成31 9b 09 08,结果如下。

成功,也没有什么异常,那就可以这么改了。现在我只改了内存,所以只影响这一只史莱姆。要改动rom才行。幸运的是,怪物受击代码和攻击代码存放在一块。攻击代码有复用,受击代码的复用可能没那么多。而两个代码都符合的就更少了。打开ct2,打开晓月,搜索dd130c080d140308。

dd130c08改成诅咒魔(还是叫外质?太久不看中文版,忘了)的攻击指针319b0908,保存,重新打开rom,找史莱姆看看效果。

改成石化雾的CD990808试试。

大致就是这样了。敌人的投射物也可以这么改。比如让飞刀鬼的刀带毒。

原理就是改变怪打中人调用的函数,因为属性受这个函数控制。大致如此,可能有未发现的不明后果,谨慎使用。比如改换皮怪,改了蓝色米诺陶斯,红色的也跟着变了。美杜莎头的函数别的怪用了没反应。也许存在很多我没发现的问题和错误。

关键词:

x 广告

Copyright   2015-2022 全球超市网版权所有  备案号:豫ICP备20009784号-11   联系邮箱:85 18 07 48 3@qq.com