YZB |
2016-08-01 17:25 |
以前在街机玩真侍魂的时候,偶尔也能打到黑子,具体方法当时也是不知道的,后来好像是看了电软还是其他什么杂志,终于知道方法了 具体出现方法为: (1) 3舞台之后任意地出现。 (2) 6舞台之后的偶数舞台内,在时间只剩20秒以下时以武器破坏必杀技解决对手后胜出。 (3) 此外,在2的条件下(第6,8,10人),2P加入对战后,若任一方在20秒以下并以武 器破坏必杀技解决对手的话,回复到由电脑对战时,黑子也会登埸。
[attachment=107475]
最近一直在想第一个方法是否真是随机,所以用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,则黑子可以出现
[attachment=107474]
以上就是黑子乱入的第1种方法
对68K不熟,写得不对理解错误的地方希望大伙指出 |
|