[ Mugen ] --- 亲捏造刷值的写法问题

这里说的亲捏造指的是普通的借助helper的普通亲捏造。并非本体亲捏造。

普通亲捏造 并不是把原有的parent先刷成0然后再重新刷成指定的值,而是根据原有的parent,使其增加一些或者减少一些。,但是大体上并没有把parent过分的破坏。

那么问题来了,怎么刷值呢?之前我只写过persistent刷值的原理,并且里面涉及本体亲捏造的写法,但是并没有涉及借助helper的普通亲捏造的写法。也就是说,我并没有讲过怎么在原有parent的基础上增加一些数值 的 写法。

以前写过的刷值原理的一些原理:

从“persistent”的角度 重新审视“超即死"等 (含bit演算教学)

http://v-madoka.lofter.com/post/2fdf1b_5abb29f

persistent刷值原理探讨_实验报告

http://v-madoka.lofter.com/post/2fdf1b_5afbf16

Persistent 刷 全领域亲变更 + 负数

http://v-madoka.lofter.com/post/2fdf1b_5bddf0c

-----------------------------------------------

拿winmugen来举例,如果我要使得捏造后的亲的var(56)刚好落在原有的parent的位置怎么办?

也就是将parent处的值增加一点,使得它移动,刚好使得parent,var(56)落在原来parent的位置。这么说很模糊,大概如图

在 helper型 亲捏造 的几个特点 一文中有提到的图

http://v-madoka.lofter.com/post/2fdf1b_79f14a7



不明白的人,可以在我博客里翻阅翻阅亲捏造的相关介绍。


如图,相差5888个单位,换成16进制就是 1700。

也就是说要在 parent的第二个位置上刷值,使其增加17(16进制)。 

这里说明一下之所以选择var(56)而不是其他变量,因为正好var(56)能使得,helper原亲和捏造后假亲 相差 1700。注意17后面的00,也就是parent的第一个位置需要增加 00 ,即 第一个位置不用刷值。这样就只需要刷第二个位置,能明显降低刷值难度和刷值量。


那该说说写法了,上面引用的很多文章里提到,刷值是要使得原有位置的值先减少为0,然后persistent才能起作用。

将parent的值 用4个位置上的值来表示,A,B,C,D.

显然parent的值 = A + B*256 +C*256*256 + D*256*256*256

我们只考虑 B 位置

上面提到的 增加17(16进制) 用10进制表示就是 23


这里我们做两个假设。

①,B<128

②,B+23 <128

即都不超过127,也就是不考虑负数的情况(超过128就存在负数问题了)。


那么需要刷值的次数为:

B + (128-(B+23)) = 128-23 = 105

竟然和 B的值无关!

实际上刷值次数应该是 105 + 1 = 106.这个需要注意一下,在写判断语句时候要注意。



这一步看不懂的同学,请先仔细阅读上方提到的各种persistent刷值原理。


既然刷值次数知道了,那就好办了。只需要把B处的 persistent赋值为128

然后,用循环变量来控制刷值的次数即可。如下


[Statedef 666]
type      = U
movetype  = U
physics   = N
hitdefpersist =1
movehitpersist=1

[State ]  ;1
type=Varadd
trigger1=1
Var(0) = 1          ;设置循环控制变量
ignorehitpause=1
persistent = 256

[state ];2
type=null
trigger1=1

...

[state ];6688
type=null
trigger1=1

; ParentID   ;将parentID刷成0,防止报错
[state ];6689   
type=null
trigger1=1
ignorehitpause=1
persistent = 256
[state ];6690
type=null
trigger1=1
ignorehitpause=1
persistent = 256
[state ];6691
type=null
trigger1=1
ignorehitpause=1
persistent = 256
[state ];6692
type=null
trigger1=1
ignorehitpause=1
persistent = 256

; Parent
[state ];6693    
type=null
trigger1=1
[state ];6694
type=null
trigger1=1
ignorehitpause=1
persistent = 128    ;这里设置128
[state ];6695
type=null
trigger1=1
[state ];6696
type=null
trigger1=1
[state ];6697
type=null
trigger1=1
[state ];6698
type=null
trigger1=1
[state ];6699
type=null
trigger1=1
[state ];6700
type=null
trigger1=1
[state ];6701
type=null
trigger1=1
[state ];6702
type=null
trigger1=1
[state ];6703
type=null
trigger1=1
[state ];6704
type=null
trigger1=1


[State ]
type=ChangeState
trigger1= var(0) >105    ; 如果刷值超过105
value= xxx    ; 自定义状态
ignorehitpause=1
persistent = 256

[State ]
type=ChangeState
trigger1= var(0) <= 105
value= stateno     ;回到本状态继续刷
ignorehitpause=1
persistent = 256



实际上,这里的105,在人物ESC中使用的是 105 + 128 = 233


本文到此结束

------------------------

参考人物:

ESC


-------------------------

date:2017.07.06

author:yui











 
评论
热度(3)
 
回到顶部