主题 : 【讨论】街机真侍魂 黑子乱入条件(初步完成)
YZB
级别: 超级版主

UID: 12451
精华: 6
发帖: 19104
威望: 173 星
金钱: 2052 浮游币
贡献值: 10266 点
好评度: 54888 点
人气: 4322 点
在线时间: 19808(时)
注册时间: 2004-10-02
最后登录: 2024-12-24
楼主  发表于: 2016-08-01 17:25

【讨论】街机真侍魂 黑子乱入条件(初步完成)

以前在街机玩真侍魂的时候,偶尔也能打到黑子,具体方法当时也是不知道的,后来好像是看了电软还是其他什么杂志,终于知道方法了
具体出现方法为:
(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重新编辑 ]
级别: 模拟小生
UID: 78596
精华: 0
发帖: 5
威望: 0 星
金钱: 2594 浮游币
贡献值: 0 点
好评度: 6 点
人气: 0 点
在线时间: 4(时)
注册时间: 2005-11-15
最后登录: 2024-08-06
沙发  发表于: 2016-10-03 13:12

我小时候一直以为只要是看到在加尔福特的场景看到金家潘了就能打黑子了