以前在街机玩真侍魂的时候,偶尔也能打到黑子,具体方法当时也是不知道的,后来好像是看了电软还是其他什么杂志,终于知道方法了
具体出现方法为:
(1) 3舞台之后任意地出现。
(2) 6舞台之后的偶数舞台内,在时间只剩20秒以下时以武器破坏必杀技解决对手后胜出。
(3) 此外,在2的条件下(第6,8,10人),2P加入对战后,若任一方在20秒以下并以武 器破坏必杀技解决对手的话,回复到由电脑对战时,黑子也会登埸。
最近一直在想第一个方法是否真是随机,所以用mame调试了一下,看看能不能找到~
首先找到判断黑子出现的程序地址
过关以后,程序到此
002340: tst.b (-$750e,A5) A5 = 0x108000
002344: beq $2350 判断 A5-0x750e 的内存是否为0,为0就跳到黑子出现的程序
至于A5-0x750e 的内存 是怎么变化的呢?
重新追一下就看见了
打完对手以后直接到此中断
00728C: 102D 8AEE move.b (-$7512,A5), D0
007290: 0C00 0004 cmpi.b #$4, D0
007294: 6B00 0030 bmi $72c6 小于第4关跳转
007298: 0C00 000A cmpi.b #$a, D0
00729C: 6A00 0028 bpl $72c6 大于第10关跳转
0072A0: 0800 0000 btst #$0, D0
0072A4: 6700 0020 beq $72c6 为单数关跳转
0072A8: 0C2D 0020 8AC6 cmpi.b #$20, (-$753a,A5)
0072AE: 6200 0016 bhi $72c6 时间大于20秒跳转
0072B2: 0C2C 0001 00E6 cmpi.b #$1, ($e6,A4) ??
0072B8: 6600 000C bne $72c6
0072BC: 0C2C 0025 00E7 cmpi.b #$25, ($e7,A4)
0072C2: 6700 0006 beq $72ca 最后出招ID 为25 超杀 跳过
0072C6: 14BC 0001 move.b #$1, (A2) A2 = A5-0x750e 这里写入1黑子就不会出现了
0072CA: 16BC 0001 move.b #$1, (A3)
move.b (-$7512,A5), D0 D0可以理解为打过几关(注意:当前关不算)
所以可以得出 要想黑子出现,
必须到第5关和第10关之间,而且关数不能是单数,时间剩下20秒以内(包括20秒) 用超杀打赢对手(时间到了不打死也算,只要最后一下是用超杀结束),还有0072B2: 0C2C 0001 00E6 cmpi.b #$1, ($e6,A4) 这个条件是啥没搞清楚?有知道的麻烦说一下
以上就是黑子乱入的第2种方法
================================================================
(1) 3舞台之后任意地出现的方法
今天又追了一下,貌似找到了
先回到前面
002340: tst.b (-$750e,A5) A5 = 0x108000
002344: beq $2350 判断 A5-0x750e 的内存是否为0,为0就跳到黑子出现的程序
在2340前面还有几个判断,如果正确则直接跳到黑子出现的程序
002316: 4A2D 8AF4 tst.b (-$750c,A5)
00231A: 6600 003A bne $2356 这个判断未知
下面开始有2个判断,全部满足以后才可以出现黑子
00231E: 102D 8AEE move.b (-$7512,A5), D0 当前关数
002322: B02D 8AF1 cmp.b (-$750f,A5), D0
002326: 6600 0018 bne $2340
这里说一下 (-$750f,A5)这个地址的值,追了一下,结果是这样的
001216: 3039 0010 09F8 move.w $1009f8.l, D0
00121C: 0240 000F andi.w #$f, D0
001220: 13FB 000E 0010 0AF1 move.b ($e,PC,D0.w), $100af1.l
用1009f8内存地址的值&f,得到的值和后一条指令相加 得到的结果就是实际地址,
实际地址其实就是0x12130那16个值
001230: 02 03 04 02 03 04 05 02 03 04 05 06 08 09 09 02
从上面读取一个字节,写入到100af1,这个100af1就是要判断你当前打的关数是否大于或者等于这个值
如果满足上面的条件才可以进入下面继续判断
00232A: 002D 0080 8AF1 ori.b #$80, (-$750f,A5)
002330: 4EB9 0000 A84E jsr $a84e.l
来看看a84e里面都有什么
////////////////////
00A84E: 48E7 0080 movem.l A0, -(A7)
00A852: 4240 clr.w D0
00A854: 102D 8AD1 move.b (-$752f,A5), D0
00A858: 522D 8AD1 addq.b #1, (-$752f,A5)
00A85C: 41F9 00C0 4200 lea $c04200.l, A0
00A862: 1030 0000 move.b (A0,D0.w), D0
00A866: 4CDF 0100 movem.l (A7)+, A0
00A86A: 4E75 rts
简单来说就是从地址 (-$752f,A5),读取一个值和地址c04200相加,然后得到的就是实际地址,从实际地址读取一个值到D0
ps: (-$752f,A5) 这个地址的值是随机给的,但是每次运行到这都会+1,,然后在游戏中还会随着你的动作增加,动作不同增加的数值也不同(数值从00-ff)有没有点像圆桌武士的乱步值?:em01:
////////////////////////////
002336: 0200 000F andi.b #$f, D0 D0低字节&f
00233A: C000 and.b D0, D0
00233C: 6700 0012 beq $2350 如果d0低字节为0则跳到黑子出现程序
总结一下上面2个条件
1 程序随机给出一个数值,你必须打过这一关才可以往下一个判断
2 根据 (-$752f,A5)这个地址的值+c04200,从里面读取一个字节,如果该字节的低4bit为0,则黑子可以出现
以上就是黑子乱入的第1种方法
对68K不熟,写得不对理解错误的地方希望大伙指出
[ 此帖被YZB在2016-08-01 17:33重新编辑 ]