云游仙境
享乐の魔女
- 贡献度
- 1666
- 金元
- 98383
- 积分
- 16572
- 精华
- 7
- 注册时间
- 2010-4-7
|
本帖最后由 elzee 于 2017-4-5 22:28 编辑
终于见到专业的了。你说得很有道理,但是与同机型上的同类作品相比,确实是比较差的。本家的SF4也比他强很多,虽然SF4也能看出有瑕疵。也许是因为需要同时上场6人?
而且从我反编译的代码来看,这游戏在处理打击感方面也确实非常粗糙。一般2D格斗的打击暂停都会让攻击方比受击方少暂停几帧。如果是60FPS的游戏的话,一次钝性重击一般是攻击方12帧停顿,受击方13帧停顿。刃类攻击的话差距会更大一些。而这个游戏在打击暂停的处理代码上,采用了直接将双方动作速度调为0的做法,而且是双方所有角色同时归零。连受击方抖动的效果都没有,这是非常不责任的设计。
还有所有飞行道具一律不设有打击暂停。我从反编译的代码来看这完全就是偷懒。因此导致飞行道具的牵制力很失败。只能靠一些变态的飞行轨迹设计来弥补。
角色在空中的受击判定也是很不负责任拉出来的,,角色在伸直腿起跳期间,脚尖是可以被打中的。2D格斗我还没见过敢这么拉判定框的。角色在空中向下伸直腿时,受击判定最低应该在膝盖附近,这样才能保证角色有起跳优势,不会随便被一个对地技能打下来。越过飞行道具也会有一定保障。
这游戏则不然,明明角色在对方头顶,对方一个下段脚一样把你踢下来。
下面贴出这游戏处理打击暂停的反编译代码。
// ORIGINAL CODE - INJECTION POINT: "umvc3.exe"+128CA
"umvc3.exe"+128A1: 48 8B C8 - mov rcx,rax
"umvc3.exe"+128A4: E8 97 EA 01 00 - call umvc3.exe+31340
"umvc3.exe"+128A9: F3 0F 10 4B 0C - movss xmm1,[rbx+0C]
"umvc3.exe"+128AE: F3 0F 5C C8 - subss xmm1,xmm0 // 这里推测在给动作时钟倒计时,每帧扣掉1
"umvc3.exe"+128B2: 0F 2F CE - comiss xmm1,xmm6 // 这里推测在比对当前动作时钟是否到了攻击判定出现的时间段
"umvc3.exe"+128B5: F3 0F 11 4B 0C - movss [rbx+0C],xmm1
"umvc3.exe"+128BA: 73 11 - jae umvc3.exe+128CD // 如果还没到,则跳过打击暂停的赋值。
"umvc3.exe"+128BC: 8B 43 10 - mov eax,[rbx+10] //否则便开始下面的打击暂停赋值逻辑。
"umvc3.exe"+128BF: C7 43 0C 00 00 80 BF - mov [rbx+0C],BF800000
"umvc3.exe"+128C6: C6 43 18 01 - mov byte ptr [rbx+18],01
"umvc3.exe"+128CA: 89 43 14 - mov [rbx+14],eax // 这行就是在给双方角色动作速度赋值,需要打击暂停时,这里eax寄存器会被赋值为0,然后在赋值给指针[rbx+14],也就是同时控制双方角色动作的指针。如果把这行注掉,游戏将不会有任何打击暂停效果。
"umvc3.exe"+128CD: 0F 2F 73 0C - comiss xmm6,[rbx+0C]
"umvc3.exe"+128D1: 76 30 - jna umvc3.exe+12903
"umvc3.exe"+128D3: 0F 2F 73 08 - comiss xmm6,[rbx+08]
"umvc3.exe"+128D7: 73 2A - jae umvc3.exe+12903
"umvc3.exe"+128D9: E8 C2 06 FF FF - call umvc3.exe+2FA0
"umvc3.exe"+128DE: 48 8B C8 - mov rcx,rax
"umvc3.exe"+128E1: E8 5A EA 01 00 - call umvc3.exe+31340
"umvc3.exe"+128E6: F3 0F 10 4B 08 - movss xmm1,[rbx+08]
"umvc3.exe"+128EB: F3 0F 5C C8 - subss xmm1,xmm0
"umvc3.exe"+128EF: 0F 2F CE - comiss xmm1,xmm6
"umvc3.exe"+128F2: F3 0F 11 4B 08 - movss [rbx+08],xmm1
|
|