• 您的当前位置:首页 > HACK教程 > [ 教程 ] KOF97的S1文件调用教程 明明白白

[ 教程 ] KOF97的S1文件调用教程 明明白白

  • 作者:分享
  • 2020-04-29 23:20:40

HI,各位HACK友,小编又来发教程了,这篇教程蛮好的,可以让大家了解S1图片怎么被调用的,感谢分享此教程的大神让我们少走了不少弯路!

1、可以认为,KOF对图片的显示,是每次显示一张8×8像素的图片,你不需要了解显卡是如何将图片弄到屏幕上的,你只要知道将D0的值送到显示端口就可以了!

代码:23C0 003C 0000 汇编:MOVE.L D0,0x3C0000(D0送到显示端口)

2、D0包含了3个要素:
①该图片在S1 ROM的地址
②图片在屏幕上显示的坐标位置
③图片的配色(有10H种颜色可选)

3、S1 ROM里有1000H张图片,用NEOGEO SROM查看器,打开S1文件,一次翻动100H张图片,因此通过这个工具,你可以估计目标图片在S1的大概位置,比如RUSH HITS的第一张图片的位置是06E4H!

4、如果给这张图片加上配色值,比如选用第1种配色,就是16E4H,选第A种就是A6E4H,原版是16E4H!

5、最关键的还是图片在屏幕上显示的坐标位置了,最简单的情况,就是指定D0和D1的值(D0是横坐标因子,D1是纵坐标因子),然后调用子程序6E70,就可以得到图片在屏幕上的坐标值,以RUSH HITS为例:

01578E 302C 01CA MOVE.W (0x1CA,A4),D0
015792 5840 ADDQ.W #4,D0
015794 322C 01CC MOVE.W (0x1CC,A4),D1
015798 5341 SUBQ.W #1,D1
01579A 4EB9 0000 6E70 JSR 0x6E70(计算图片在屏幕上的坐标)
006E70 EB48 LSL.W #5,D0(横坐标因子×20→D0)
006E72 D041 ADD.W D1,D0(D0+纵坐标因子→D0)
006E74 0640 7002 ADDI.W #0x7002,D0(D0+7002→D0)
006E78 4840 SWAP D0(高4位和低4位交换,交换后高4位是最终坐标)
006E7A 4E75 RTS

KOF里面,从上往下,可以显示20H张图片(1CH张是可见的,剩下的4张在屏幕上看不到,其中最上面2张,最下面2张),从左到右可以显示28H张图片(26H张是可见的,剩下的2张在屏幕上看不到,其中最左边1张,最右边1张),也就是说,横坐标因子是从0-27H,纵坐标因子是从0-1FH,通俗的说,也可以认为有28H列,20H行!

看子程序6E70,实际上它就是计算屏幕坐标的公共子程序,解析出来就是: 7002+横坐标因子×20+纵坐标因子 我个人分析,这个7002的来由,实际上就是因为屏幕最上面有2张看不到,所以从7002而不是从7000开始,由于28H×20H=500H,因此屏幕上能容纳500H张图(包含不可见的),从7000开始的话,就是到74FF为止。

最后一行代码,是将高4位与低4位互换,因此假设是第0行第0列的话,D0的值就是70020000,这个数再加上前面的16E4,就是700216E4,这个就是D0的最终值了,送到显示端口,就完成使命了!

当然了,屏幕上显示的图片有各种各样的,每一种的程序算法都不同,静态显示的比较容易,动态显示的就复杂些,拿RUSH HITS来说,RUSH HITS是静态的,具体的HITS数是动态的!

*_*
互动小天地
点击加载更多...