lordquest 发表于 2004-11-6 16:01:33

GBA合金弹头L键随意换枪ROM补丁

snk的程序员真是bt
rom塞得满满的,好不容易才找了快空地把程序塞进去..........
测试中~
有bug在这儿贴出来大家讨论。

GBA合金弓单头L键随意换木仓ROM补丁

[ Last edited by vicente on 2005-6-13 at 12:59 ]

kira 888 发表于 2004-11-6 16:55:30

不能操作……
卡住了,没办法玩……

lordquest 发表于 2004-11-6 16:58:56

什么地方?

ransoma 发表于 2004-11-6 18:08:55

楼主完善一下放出来,我就给你置顶了~

鼓励一下,论坛需要这样的人才~~~~

楼主加油

kira 888 发表于 2004-11-6 19:09:01

什么地方?
任何地方……
就是画面就卡住,操作不能

lordquest 发表于 2004-11-6 21:12:24

汗,我这儿好好的,我下的ROM的CRC32是09980880,你的ROM正确吗,

ransoma 发表于 2004-11-6 23:15:48

经过我的测试,可以使用,就是换木仓的时候图像不会变,一直是某个大木仓的图形,而且子弓单使用完以后换木仓就可以实现子弓单无限,置顶鼓励~~


楼主辛苦了~~~

蝶梦 发表于 2004-11-6 23:18:49

我能用,很正常!!!!谢谢楼主,真是太方便了,呵呵....

lordquest 发表于 2004-11-7 00:32:35

不过那个空间只能把补丁文件保持一个月~

源程序及简单的分析思路我也发过来吧。
1.很容易用低阶搜索找到保存当前子弓单状态码的地址。
2.在no$gba中以为中断即可以中断在换木仓函数中,
进而可以找到其入口地址。
08012bd2 0000 lsl r0,r0,0h
08012bd4>b5f0 push r4-r7,lr (这儿就是~)
08012bd6 4657 mov r7,r10
08012bd8 464e mov r6,r9
08012bda 4645 mov r5,r8
08012bdc b4e0 push r5-r7
08012bde b084 add sp,-10h
08012be0 0600 lsl r0,r0,18h
08012be2 0e00 lsr r0,r0,18h
08012be4 4682 mov r10,r0
08012be6 0609 lsl r1,r1,18h
08012be8 0e0d lsr r5,r1,18h
08012bea 2d12 cmp r5,12h
08012bec d86d bhi 8012ccah
08012bee 4824 ldr r0,=20048a0h
-------------
在程序中查找带有这个地址(08012bd4)的跳转,可以发现之前都r1赋值了,
我们可以猜测r1是这个函数的参数。
3.以按键寄存器地址变化为中断条件(比如r0 = 04000130h),可以发现
在,这个地址中,前者保存了按键按下时瞬间的值,之后马上又变回0;
后者保存当前按键的状态值。
4.以r0,=3004448h为中断条件可以中断在这儿:
下面是我修改后的程序,
080063b8 220d mov r2,0dh
080063ba 0300 lsl r0,r0,0ch
080063bc>4804 ldr r0,=3004448h
080063be 8801 ldrh r1,
080063c0 2008 mov r0,8h
080063c2 4008 and r0,r1
080063c4 0400 lsl r0,r0,10h
080063c6 0c00 lsr r0,r0,10h
080063c8 4240 neg r0,r0
080063ca b507 push r0-r2,lr (跳转到我的子过程之前,push r0-r2及lr)
080063cc f077fa36 bl 807d83ch (只用用中程跳转!找空白地址找得好苦>_<)
080063d0 4448 add r0,r9
080063d2 0300 lsl r0,r0,0ch

5.通过分析可以知道当l,r,a分别按下时中保存的值分别为0200,0001,0200
接下来用测试程序可以知道换木仓函数的参数r1的取值只能为2,3,4,5,6,a,c,d,e,f
继续~
0807d83c>1c0a mov r2,r1
0807d83e 0000 lsl r0,r0,0h
0807d840 0a12 lsr r2,r2,8h
0807d842 2a02 cmp r2,2h (比较是否按了一下l键)
0807d844 d002 beq 807d84ch
0807d846 bc07 pop r0-r2
0807d848 0fc0 lsr r0,r0,1fh
0807d84a bd00 pop pc
0807d84c 4801 ldr r0,=200006dh (这个地址保存了当前木仓的状态值)
0807d84e 8802 ldrh r2,
0807d850 2105 mov r1,5h
0807d852 e001 b 807d858h
0807d854 006d lsl r5,r5,1h (这二行是数据200006d,无作用....)
0807d856 0200 lsl r0,r0,8h
0807d858 0412 lsl r2,r2,10h (清除r2高位上的无用数据)
0807d85a 0c12 lsr r2,r2,10h
0807d85c 46c0 nop
0807d85e 2a02 cmp r2,2h (之后是一个一个比较就行了!~)
0807d860 d100 bne 807d864h
0807d862 2103 mov r1,3h
0807d864 2a03 cmp r2,3h
0807d866 d100 bne 807d86ah
0807d868 2104 mov r1,4h
0807d86a 2a04 cmp r2,4h
0807d86c d100 bne 807d870h
0807d86e 2105 mov r1,5h
0807d870 2a05 cmp r2,5h
0807d872 d100 bne 807d876h
0807d874 2106 mov r1,6h
0807d876 2a06 cmp r2,6h
0807d878 d100 bne 807d87ch
0807d87a 210a mov r1,0ah
0807d87c 2a0a cmp r2,0ah
0807d87e d100 bne 807d882h
0807d880 210c mov r1,0ch
0807d882 2a0c cmp r2,0ch
0807d884 d100 bne 807d888h
0807d886 210d mov r1,0dh
0807d888 2a0d cmp r2,0dh
0807d88a d100 bne 807d88eh
0807d88c 210e mov r1,0eh
0807d88e 2a0e cmp r2,0eh
0807d890 d100 bne 807d894h
0807d892 210f mov r1,0fh
0807d894 2a0f cmp r2,0fh
0807d896 d100 bne 807d89ah
0807d898 2102 mov r1,2h
0807d89a 2a02 cmp r2,2h
0807d89c d100 bne 807d8a0h
0807d89e 2103 mov r1,3h
0807d8a0 f795f998 bl 8012bd4h (调用换木仓函数)
0807d8a4 bc07 pop r0-r2
0807d8a6 0fc0 lsr r0,r0,1fh
0807d8a8 bd00 pop pc

Detianzou 发表于 2004-11-7 11:32:12

- -好像调出来秘密武器了。。。像是超级手木仓似的。。。连发啊。。。其他武器调不出来了(在激光木仓之后的就是超级手木仓/重手木仓- -|||。。。没有别的了)。

cystev 发表于 2004-11-11 13:31:47

用NOGBA玩吃到面包后立刻自动退出。怎么办?

特别完美的达人 发表于 2004-11-13 07:37:47

连射手抢??不就是在设定里调出B见连射么??

the DACK BIBLE 发表于 2004-11-13 12:45:33

谢谢了~~~我的变态欲望(EVA暴走)终于爆发了

nahoo 发表于 2004-11-18 23:12:22

楼主的这个我没有测试,不过赞叹楼主L键改木仓的想法。GBA版合金弓单头的子弓单模式我也研究过,只是不懂编程,也不懂修改rom,纯属个人的一点体会,写出来与大家共享。

合金弓单头有关子弓单的地址一共有9位,下面举例说明:
00 FF 02 01 14 00 00 FF FF
在这9位地址中,第1位00指的是子弓单的发射速度,最快为00,所以该位可以锁定为0;第2位与子弓单无关,没有分析;第3位02指子弓单的种类,相信楼主也研究过,理论上从00到0F共16种,但是我测试的时候有些代码似乎并没有对应的子弓单(没有认真测试 ),现在的02是霰弓单木仓,是威力最大的木仓了;第4、5、6、7位与子弓单无关,没有分析;最后两位就是子弓单的数量了,FF FF是10进制的65535,在游戏中代表子弓单无限。

这样说来,修改子弓单所需要修改的就只有4个地址了,而且由于子弓单的种类与数量地址非常接近,也就非常便于寻找。上文中的实例是我认为最强的组合了,以最快的速度发射无限的霰弓单,真的很爽,而且由于速度很快,子弓单追子弓单,屏幕上显示子弓单的位置会有花屏现象,但是决不会花版。实际效果也非常的好,打BOSS卡片简直轻而易举,第5关的BOSS在没有发射大激光之前就能够被干掉了(BOSS一定特冤)。只是这样的修改会产生副作用,即在游戏的过程中如果吃到其他的子弓单,将会造成只开木仓,没有子弓单打出的空壳弓单,这是只要进出一下坦克或是进出一下场景就可以恢复了。

还是第一次写这种修改的心得,而且由于不会编程,文中肯定有很多不正确的地方,还希望能够跟达人多多取经,多多交流。

电王 发表于 2004-11-20 10:42:31

楼上的朋友很厉害嘛~~~

修改BC路过的说~~~

其实,我是来仰慕小兰的

无谓无所 发表于 2004-11-21 19:19:26

有一个小问题就是在乘上坦克后换子弓单的话坦克就是透明的

deepexe 发表于 2004-11-23 18:32:41

let me c c sin

deepexe 发表于 2004-11-23 18:35:53

显示表情弓单出窗口

fb123990 发表于 2006-4-6 11:43:08

有些ROM玩不了~~

231377523 发表于 2007-7-31 20:59:02

到底怎么使用啊 ?
请LZ 帮忙下 好好教我下 ,可以么?
页: [1] 2
查看完整版本: GBA合金弓单头L键随意换木仓ROM补丁