流れる時の中で

主にmugenの凶悪キャラを制作しております

スポンサーサイト 

--/--/--
--. --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[edit]

CM: --
TB: --

page top

続・1ステートで1~4Byte目の値を弄る 

2015/03/10
Tue. 10:43

まず結果から述べると, 1ステートで1~4Byte目の値を同時に弄る事はできました。
ただこれ, すっごいめんどくさいことになったんですよね・・・orz

流れとしては,

1.trigger1=0(条件式を満たさない)状況で1~4Byte目の値を全て0にする
トリガーを満たさない場合のアドレスの値の変動は0なら0のまま, そうでなければ-1される
つまり, 前の親のIDの1~4Byte目の値の中で最も大きい値分ループさせれば良い。
(1Byte目:120 2Byte目:1 3Byte目:0なら120ループさせれば値は0になる)

2.現在の親のIDの1~4Byte目の値の中で一番小さい(0を除く)数値を求める
(なぜ一番数値かというと, ループ回数が最も多くなるものを求める為。現在の影のIDの値は0なので128-var(X)がループ回数)

3.現在の親のIDの1~4Byte目の値の小さい順にトリガーを満たして値を変動させていく。
かなり言葉にしにくいんですが・・・。
例えば1Byte目の値が12 2Byte目の値が1 3Byte目の値が0の時。影のIDは現在0。

最初の1ループ目にもっともループ回数が多くなる2Byte目のトリガーを満たせるようにする。
(128-1=127ループ。この時点で2Byte目の値は127に。以降2Byte目のトリガーは一切満たさない。つまり以降は値が-1されていく)

次にループ回数が多い1Byte目のトリガーを満たせるようにする。
この1Byte目がトリガーを満たす条件は
ループ回数=((128-現在の親のIDの2Byte目の値)-(128-現在の親のIDの1Byte目の値)+1)
つまり, =((128-1)-(128-12)+1)=(127-116+1)=12ループ目に1Byte目の値を127にする。
以降1Byte目のトリガーは満たさないようにして値を-1させていく。

この状態で127回ループさせると, 1ループ目に値を127に変動させた2Byte目の値は残りの126回のループで値は(127-126=)1に。
12ループ目に値を127に変動させた1Byte目の値は残り115回のループで値は(127-115=)12になります。


[State ,6689:影のID-1Byte目]
type=Null
triggerall=(Floor(fvar(11))&1)&&var(4)>0
trigger1=(Floor(fvar(11))&2)
trigger1=Floor(fvar(10))=1
trigger2=(Floor(fvar(11))&4)
trigger2=Floor(fvar(10))=(var(8)-var(7)+1)
trigger3=(Floor(fvar(11))&8)
trigger3=Floor(fvar(10))=(var(9)-var(7)+1)
persistent=128
ignorehitpause=1
[State ,6690:影のID-2Byte目]
type=Null
triggerall=(Floor(fvar(11))&1)&&var(5)>0
trigger1=(Floor(fvar(11))&2)
trigger1=Floor(fvar(10))=(var(7)-var(8)+1)
trigger2=(Floor(fvar(11))&4)
trigger2=Floor(fvar(10))=1
trigger3=(Floor(fvar(11))&8)
trigger3=Floor(fvar(10))=(var(9)-var(8)+1)
persistent=128
ignorehitpause=1
[State ,6691:影のID-3Byte目]
type=Null
triggerall=(Floor(fvar(11))&1)&&var(6)>0
trigger1=(Floor(fvar(11))&2)
trigger1=Floor(fvar(10))=(var(7)-var(9)+1)
trigger2=(Floor(fvar(11))&4)
trigger2=Floor(fvar(10))=(var(7)-var(9)+1)
trigger3=(Floor(fvar(11))&8)
trigger3=Floor(fvar(10))=1
persistent=128
ignorehitpause=1
[State ,6692:影のID-4Byte目]
type=Null
trigger1=1

[State ,6709:ループ処理(値のリセット)]
type=ChangeState
triggerall=!(Floor(fvar(11))&1)
trigger1=1||fvar(10):=Floor(fvar(10))+1
trigger1=Floor(fvar(10)) < var(1)
trigger2=Floor(fvar(10)) < var(2)
trigger3=Floor(fvar(10)) < var(3)
trigger4=1||fvar(10):=0
trigger4=0*(fvar(11):=(Floor(fvar(11))|1))
persistent=256
value=StateNo
ignorehitpause=1
[State ,6710:ループ処理]
type=ChangeState
trigger1=!(Floor(fvar(11))&2)&&var(4)>0
trigger1=((var(4) < var(5))||!var(5))&&((var(4) < var(6))||!var(6))
trigger1=0*(fvar(11):=(Floor(fvar(11))|2))
trigger2=!(Floor(fvar(11))&4)&&var(5)>0
trigger2=((var(5) < var(4))||!var(4))&&((var(5) < var(6))||!var(6))
trigger2=0*(fvar(11):=(Floor(fvar(11))|4))
trigger3=!(Floor(fvar(11))&8)&&var(6)>0
trigger3=((var(6) < var(4))||!var(4))&&((var(6) < var(5))||!var(5))
trigger3=0*(fvar(11):=(Floor(fvar(11))|8))
trigger4=Floor(fvar(10)) < var(7+!!(Floor(fvar(11))&4)+2*!!(Floor(fvar(11))&8))
trigger4=1||fvar(10):=Floor(fvar(10))+1
persistent=256
value=StateNo
ignorehitpause=1
[State ,6711:親変更後ステートへ]
type=ChangeState
trigger1=1
persistent=256
value=58580611
ignorehitpause=1


これはもう完全におまけもおまけですね・・・。
ここまでするくらいならステート分けたほうが楽ですし(
(全領域親変更の場合はChangeStateで値弄るのでトリガー管理で問題ないですし)
よく考えたら全領域親変更だとこの方法使えませんね・・・。(128超える部分と127以下の部分が複合したら組み合わせ次第で詰む)
通常親変更のみ搭載で限りなく容量小さくしたい時くらいしか役に立たないんじゃないですかねこれ・・・・(

もしかしたらもっと簡単な方法があるのかもしれないですけど・・・ChangeState系以外での値を弄る方法ではこれが限界な気がします・・・。

スポンサーサイト

[edit]

CM: 0
TB: 0

page top

コメント

page top

コメントの投稿

Secret

page top

トラックバック

トラックバックURL
→http://awmm.blog3.fc2.com/tb.php/699-a10565f0
この記事にトラックバックする(FC2ブログユーザー)

page top

2017-08

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。