光明之魂2吧 关注:10,672贴子:320,379

为战士正名,【COUNTER】不是废技能!

只看楼主收藏回复

SS2中战士的定位是近战专家,各方面比较平衡。但就技能而言,就显得单调了一些,三种武器技能、两种防御提升、攻击力提升、道具效果强化以及饱受争议的 COUNTER 。更何况前期不会三种武器都练,防御提升选其一就够了,攻击力提升7级也才加22点,不练抗性回复道具也不多用(后期有钱就无所谓了)。因此即便都说 COUNTER 无用,我还是会点上几级。最近魔法师通关了,于是便决定在拿起战士玩之前,先分析一下 COUNTER 究竟有没有用,结果自然没有令人失望!
不过这里还是要吐槽一下,【COUNTER】本意为【反击】,而中文版翻译为【HIT BACK】,这就可能存在理解上的误区(如攻击背后的敌人、攻击敌人的后背、后背受到攻击时发起攻击……),如果以这些方式测试,自然不可能顺利得到结果!事实上,即便是在正确理解反击的前提下测试,也很难看到结果,而这就与具体的触发条件以及成功触发后的反馈表现形式有关了,后面会详细说明~
最后顺带提一下,本次关于 COUNTER 的研究并非是通过大量测试数据统计得到的,而是直接分析ROM的汇编程序整理出来的,准确性方面是毋庸置疑的,具体的说明就放2楼了 ^_^


IP属地:浙江1楼2020-02-25 20:01回复
    【触发条件】
    在 COUNTER 技能等级不为 0 的前提下,战士当前所攻击并命中(不是MISS就行)的敌人正在进行【不蓄力攻击】时,即可触发成功。
    此处需要注意的是,其触发的关键是【敌人的状态】,换句话说,就是趁着敌人用【不蓄力攻击】打你的时候攻击他即可触发。而所谓的【不蓄力攻击】就例如【冷冻史莱姆】不是仍冰块而是直接打你,【地精】不是丢石子而是直接砸你,【魔法骷髅兵】不是搓火球而是直接拿刀砍你~~
    【反馈表现形式】
    在 COUNTER 成功触发之后,在声音上会直接使用会心一击的音效,这个音效不惹人注意,并且往往会被挥动武器、释放蓄力、攻击命中、敌人死亡、主角惨叫、真正的会心一击等音效覆盖,再加上永不间断的BGM干扰,自然容易忽略,而最为关键的画面上除了伤害值显示外并没有其他变化,致命的是,SS2伤害值是有1~1.49倍浮动变化的,而7级 COUNTER 在伤害上的附加也不过26%,因此即使成功触发了,玩家也可能没有发现。这可能是造成“无用技能”的根本原因吧。
    【伤害附加效果】
    最后就是具体的伤害附加效果了,当然前提是没有MISS,毕竟伤害为 0 ,附加也就没有意义了~


    IP属地:浙江2楼2020-02-25 20:03
    收起回复
      厉害了,膜拜大佬


      IP属地:黑龙江来自Android客户端3楼2020-02-25 20:50
      回复
        厉害!支持一个呀。
        另外狼人表示也想得到正名『拍砖』几年前Wash用同步模拟器对比的方法,似乎结果显示闪避技能是有效果的。


        IP属地:湖北来自iPhone客户端4楼2020-02-26 07:57
        回复
          不过话说光II的简体汉化版会心一击有音效的么?表示从来没听到过……


          IP属地:湖北来自iPhone客户端6楼2020-02-26 08:01
          收起回复
            ROM汇编的代码有没有,挺好奇的,这么些年一直不知道,所以甚至不敢相信


            IP属地:澳大利亚7楼2020-02-26 17:44
            收起回复
              玩会dnf没?这技能其实就是破招。


              IP属地:江苏来自iPhone客户端8楼2020-02-29 23:58
              回复
                【COUNTER】处理部分的汇编程序
                0801E610 FB20F7FF bl 801DC54h <——【读取角色代码子程序】,详见后面解释
                0801E614 0600 lsl r0, r0, 18h
                0801E616 2800 cmp r0, 0h <——如果不是战士,则跳过【counter】处理
                0801E618 D11F bne 801E65Ah
                0801E61A 482D ldr r0, [pc, B4h] ;=0x3003580
                0801E61C 6801 ldr r1, [r0, 0h]
                0801E61E 1C08 mov r0, r1
                0801E620 3054 add r0, 54h
                0801E622 8800 ldrh r0, [r0, 0h] <——读取COUNTER技能等级
                0801E624 2800 cmp r0, 0h <——如果等级为0,则跳过【COUNTER】处理
                0801E626 D018 beq 801E65Ah
                0801E628 4642 mov r2, r8
                0801E62A 8990 ldrh r0, [r2, Ch] <——读取敌人当前状态
                0801E62C 2802 cmp r0, 2h <——如果不是【不蓄力攻击】,则跳过【COUNTER】处理
                0801E62E D114 bne 801E65Ah
                0801E630 1C2C mov r4, r5 <——【r4】= 原来的伤害值
                0801E632 1C08 mov r0, r1
                0801E634 3038 add r0, 38h
                0801E636 2106 mov r1, 6h <——用于控制读取第七个技能(从0开始)的等级值
                0801E638 FC3AF7FF bl 801DEB0h <——【伤害附加计算子程序】返回x,详见后面解释
                0801E63C 0440 lsl r0, r0, 11h
                0801E63E 26A0 mov r6, A0h
                0801E640 0336 lsl r6, r6, Ch
                0801E642 1980 add r0, r0, r6
                0801E644 0C00 lsr r0, r0, 10h
                0801E646 3064 add r0, 64h
                0801E648 4360 mul r0, r4 <——【总结,被除数】[ r4*(2x+110) ]
                0801E64A 2164 mov r1, 64h<——【除数】[ 100 ]
                0801E64C F92AF09C bl 80BA8A4h <——【除法计算子程序】
                0801E650 0400 lsl r0, r0, 10h
                0801E652 0C05 lsr r5, r0, 10h <——【结果】[ r4*(2x+110)/100 ](COUNTER处理完成)
                0801E654 2027 mov r0, 27h
                0801E656 FA19F03B bl 8059A8Ch <——【声音处理子程序】(此处使用会心一击音效)
                【读取角色代码子程序】
                0801DC54 4803 ldr r0, [pc, Ch] ;=0x3003580
                0801DC56 6800 ldr r0, [r0, 0h]
                0801DC58 8A00 ldrh r0, [r0, 10h] <——读取角色代码
                0801DC5A 2808 cmp r0, 8h <——如果是[ 8 隐藏角色 ],则跳转至801DC68
                0801DC5C D004 beq 801DC68h
                0801DC5E 0600 lsl r0, r0, 18h
                0801DC60 0E00 lsr r0, r0, 18h
                0801DC62 E002 b 801DC6Ah
                0801DC64 03003580(ldr伪指令读取的地址)
                0801DC68 2006 mov r0, 6h <——将其修正为[ 6 暗黑魔法师 ]
                0801DC6A 4770 bx lr
                【伤害附加计算子程序】<——【总结:1~6级,x为等级值;7级时,x取8】
                0801DEB0 0409 lsl r1, r1, 10h
                0801DEB2 0B89 lsr r1, r1, Eh
                0801DEB4 1840 add r0, r0, r1
                0801DEB6 8880 ldrh r0, [r0, 4h] <——读取该技能的等级
                0801DEB8 2807 cmp r0, 7h <——如果不是 7 级,则跳转至801DEBE
                0801DEBA D100 bne 801DEBEh
                0801DEBC 2008 mov r0, 8h <——若是 7 级,修正为 8
                0801DEBE 4770 bx lr


                IP属地:浙江9楼2020-03-01 20:16
                收起回复


                  IP属地:四川来自Android客户端10楼2020-03-02 00:37
                  回复
                    这么说来,狼人的回避也有很大可能不是废弃技能了(虽然两个技能都不一定有很好的效果)


                    IP属地:澳大利亚11楼2020-03-02 13:02
                    收起回复
                      又过了两年来挖坟了,好希望把战士的这个技能改成 蓄力A后快速平A的蓝色攻击伤害提升啊, 或者直接给改成会心一击
                      可怜的战士


                      IP属地:澳大利亚12楼2022-02-21 20:31
                      回复
                        我挖个坟,他说的触发方式是错误的,经过测试加与不加都没有增加伤害,因为最高伤害是不会骗人,无论怎么测试都没有超过伤害最大值。而且会心一击和白字伤害音效一样。不存在特殊音效。我已经+100%必杀试过了么有任何区别,所以会心和白字都没有音效区别,怎么拿来区分效果


                        IP属地:上海来自Android客户端13楼2022-05-09 14:55
                        收起回复
                          不实用,所以说不加,技能触发机制墨迹


                          IP属地:福建来自Android客户端15楼2022-05-10 14:48
                          回复
                            感谢大家指出错误,我重新分析了ROM汇编程序,发现官方触发机制【程序】是有BUG的。
                            ① 触发机制分析
                            【COUNTER】是官方正式名,意思非常准确,触发与否看【战士攻击命中敌人时,敌人的状态】。
                            据我不完全统计,游戏中人物状态情况如下:
                            0000通常状态(PS: 捡东西、使用力量连携、带地鼠戒指也是0000)
                            0001人物移动(上下左右均为 0001)
                            0002A键攻击
                            0003A键蓄力
                            0004A键蓄力+人物移动(0003+0001)
                            0005释放A键蓄力(物理攻击)
                            0006B键蓄力
                            0007B键蓄力+人物移动(0006+0001)
                            0008释放B键蓄力
                            0009释放A键蓄力(魔法攻击)
                            000A受到攻击(伴随惨叫的时候)
                            000B人物死亡
                            000C天使带着飞的时候/躺床上的时候/剧情发生时……(总之不能操作的时候)
                            000E释放SOUL
                            敌人状态地址:第一个敌人【状态】动态内存地址为2006C94,此后每个敌人相差454h
                            玩家状态地址:3003DA6
                            简言之:趁敌人处于【0002 A键攻击】状态时,战士的攻击命中即可触发【COUNTER】


                            IP属地:浙江16楼2022-06-04 17:31
                            收起回复
                              ② BUG程序分析:
                              当玩家发出物理攻击(平A+非魔法蓄力攻击)时,命中时有两种情况:正常伤害(白字)和较低伤害(黄字)。
                              (1)判定为【较低伤害(黄字)】时,会直接进行伤害计算,程序如下:
                              0801F17A 4640 mov r0, r8
                              0801F17C 1C29 mov r1, r5
                              0801F17E 464A mov r2, r9
                              0801F180 2301 mov r3, 1h<————【r3 = 1,低伤害命中】
                              0801F182 F8E9F7FF bl 801E358h<————【0801E358】伤害计算子程序
                              0801F186 2280 mov r2, 80h
                              0801F188 0212 lsl r2, r2, 8h
                              0801F18A 1C11 mov r1, r2
                              0801F18C 4308 orr r0, r1<———— r0 = r0(伤害值) Or r1(8000h),[ 低4位:8XXX,XXX为伤害值 ]
                              0801F18E 0400 lsl r0, r0, 10h
                              0801F190 0C00 lsr r0, r0, 10h
                              (2)判定为【正常伤害】时,会先将敌人的状态改变为【000A 受到攻击】,再进行伤害计算,程序如下:
                              0801F1C0 200A mov r0, Ah
                              0801F1C2 81A8 strh r0, [r5, Ch]<————【02006C94】 [ 状态,0A受到伤害(除低伤害攻击和MISS)]
                              0801F1C4 4640 mov r0, r8
                              0801F1C6 1C29 mov r1, r5
                              0801F1C8 464A mov r2, r9
                              0801F1CA 2300 mov r3, 0h<————【r3 = 0,正常命中】
                              0801F1CC F8C4F7FF bl 801E358h<————【0801E358】伤害计算子程序
                              0801F1D0 0400 lsl r0, r0, 10h
                              0801F1D2 0C00 lsr r0, r0, 10h<———— r0 = 伤害值
                              (3)处理战士【COUNTER】的程序在【0801E358】伤害计算子程序中:
                              0801E610 FB20F7FF bl 801DC54h<————【读取职业代码子程序】【返回值r0为职业代码】
                              0801E614 0600 lsl r0, r0, 18h
                              0801E616 2800 cmp r0, 0h<————如果不是【0000 战士】则跳过【counter】处理
                              0801E618 D11F bne 801E65Ah
                              0801E61A 482D ldr r0, [pc, B4h] ;=0x3003580
                              0801E61C 6801 ldr r1, [r0, 0h]
                              0801E61E 1C08 mov r0, r1
                              0801E620 3054 add r0, 54h<————【地址】【02003C44】【第 7 个技能的等级】
                              0801E622 8800 ldrh r0, [r0, 0h]<————【读取】【战士,counter_level】
                              0801E624 2800 cmp r0, 0h<————如果是等级为0,则跳过【counter】处理
                              0801E626 D018 beq 801E65Ah
                              0801E628 4642 mov r2, r8<————【r8 = 2006C88】[敌人]
                              0801E62A 8990 ldrh r0, [r2, Ch]<————【读取】【敌人对应的人物具体状态】
                              0801E62C 2802 cmp r0, 2h<————若不是【0002 = 正在进行物理攻击】,则跳过【counter】处理
                              0801E62E D114 bne 801E65Ah
                              0801E630 1C2C mov r4, r5<————【r4 = r5 = 伤害值】
                              0801E632 1C08 mov r0, r1
                              0801E634 3038 add r0, 38h<————【r0 = r1(02003BF0) + 38h = 02003C28】
                              0801E636 2106 mov r1, 6h<———— r1 = 6(表示第7个技能)COUNTER
                              0801E638 FC3AF7FF bl 801DEB0h<————【技能效果参数计算】【1~6级,取等级值;7级,值为8】
                              0801E63C 0440 lsl r0, r0, 11h
                              0801E63E 26A0 mov r6, A0h
                              0801E640 0336 lsl r6, r6, Ch
                              0801E642 1980 add r0, r0, r6
                              0801E644 0C00 lsr r0, r0, 10h
                              0801E646 3064 add r0, 64h
                              0801E648 4360 mul r0, r4<————【总结】【r0 = ( hurt_attach * 2 + 110 ) * r4 ( damage ) 】
                              0801E64A 2164 mov r1, 64h<————【除数】【r1 = 64h】
                              0801E64C F92AF09C bl 80BA8A4h<———— * 除法程序【r0=被除数,r1=除数;返回值r0=商,r1不变】
                              0801E650 0400 lsl r0, r0, 10h
                              0801E652 0C05 lsr r5, r0, 10h<————【r5 = counter处理后的伤害值】
                              0801E654 2027 mov r0, 27h
                              0801E656 FA19F03B bl 8059A8Ch<————【声音处理程序,se_offset = 27 h】【counter 同Critical音效】
                              简言之:
                              判定为【正常伤害(白字)】时,由于把【敌人状态】改为【000A 受到伤害】,影响了之后COUNTER的判定【0002 A键攻击】。而【较低伤害(黄字)】因为不改变敌人状态,所以会触发COUNTER。


                              IP属地:浙江17楼2022-06-04 17:53
                              回复