原文由Jambo51编写,我阅读了之后感觉虽然他写的很迷离,但确实见效了,于是翻译过来了,不过不是字字对译,感觉没那个必要。
这里需要注意,本文当中的重点是如何增加飞行点,我不会对一些其它提及的专业术语作出解释,所以阅读本文时,请务必注意要有足够的基础知识和改版经验。
用到的工具:
Advance Map 1.92
Hex工具,我用的是Winhex
XSE
前言:
地图上有很多个“地点”,比如1号道路、2号道路以及各个水路。当然也包括各个城镇。但并不是所有的点都可以通过飞行到达。
本文所讲述的,就是通过修改、增添数据,将原本不能飞行达到的地点,改做可以飞行达到的。而“地点”的总数是不变的。
游戏里的“地点”是有各自的编号的,当游戏碰到一个“地点”时,通过编号来识别究竟是哪一个“地点”,从而显示一些信息(比如显示“1号路”或者“真新镇”)。
游戏内部的“地点”编号只占用一个字节(00~FF),游戏本身已经用到了BB。
本文将示范,如何将游戏中原本飞行不可到达的地点,变为可到达的地点。
第一部分:增加飞行点数量上限
0xBFCB6 - 把这个数字改高,改多高你自己看着办~(新增的飞行点数量就是[你改的数量-0x14])
0xBFC7C - 同理,要加你就两个都加一样多,不过这个总比上面那个小0x1
测试ROM是否能够正常运行,如果能,备份下~
第二部分: 重定向其它数据,为新增飞行点数据腾地方
把位于0x3EEC98,长达80字节的数据表重定向到其它你认为合适的地方,而且必须以0来结尾数据。这个表的指针位于0xBFDA4。
现在再来测试ROM,如果能够正常工作,备份~
第三部分:把额外的飞行点引入地图
现在回到0x3EEC98,在那里写入类似如下格式的数据:
[地图库号][地图编号][X坐标][00][Y坐标][00][00][00]
这就是飞行点数据的结构,要给哪张地图增加飞行点,就写那张地图的对应数据。
比如如果要给1号道路增加飞行点,就要这样写:
0313090020000000
在HEX编辑器里保存,然后打开AM,转到你增加了飞行点的那张地图,如果的确出现了那个新增的飞行点,而且位置也完全正确,那么保存备份吧~
第四部分: 让游戏识别它
之前只是让这个飞行点数据出现在了ROM里,接下来我们必须要让游戏系统知道它的存在,识别它。
打开HEX编辑器来到0x3F2EE0。这里放着的是飞行点的另一组数据,它决定了飞行点是否能够主动飞行达到(有些飞行点虽然存在,可是系统将它设定为不能飞行直达,比如1号道路上就有飞行点,当你在一号道路的时候打开地图能看到主角就在一号道路,这就是因为那个飞行点被激活了,但你无法用飞技能飞到那里)。
观察一下就可以发现这里的数据都是类似于03XXXX这样的。
实际上这样的数据一共两种,其结构是这样的:
复制内容到剪贴板
代码:
03 - 意义未知,但几乎所有的
00 - 飞行点编号
01 - 未知,但如果想要让这个地点可以到达,必须似的它的值比飞行点编号大0x2。
游戏原本占用的飞行点已经占到了031214,所以新加的飞行点就要从031315开始。
打开AM的大地图编辑器,找到你要增加飞行点的地方,比如1号道路。
按照如图所示的顺序进行操作:
这里需要注意的是,flag和脚本里的普通flag不一样,而是指的worldmapflag。游戏原本的worldmapflag占用到0x1100,我们要用的话,要写0x1100以后的(比如0x1101)。
第五部分:在游戏里激活新飞行点
大家应该注意到,并不是你拿到飞行技能之后,就能飞去所有的城市,只有曾经去过的城市,才能用飞行技能达到。
这就是因为,当你走进某个城市的地图时,地图头放置的脚本激活了这个城市的worldmapflag。
我们自己新增的worldmapflag也需要有这样一个步骤。
在1号道路新建一个地图头脚本,类型选择第三种,在脚本当中要写入:
001 │setworldmapflag
0x1101
002 ┕end点击查看原始代码
setworldmapflag 0x1101
end
这一句。
之后进入游戏,在游戏里进入1号道路这张地图,再使用飞行就可以达到了。