FC2ブログ

 |   | 

ビット演算

3/20
00:51 (Oracle) あれー・・・なんでだ
00:51 (Oracle) カウンタが初期化されねぇ・・・
00:53 (Oracle) いったいどんな条件なんだろうなー
00:53 (Oracle) もみじー
00:53 (Momizi) うぃ
00:54 (Oracle) (ceil(sysfvar(0))&-16711681)でカウント1が65536で0-255まで使ってるんだけど
00:54 (Oracle) (ceil(sysfvar(0))&-16711681)は初期化ね。これで初期化できるはずだよね?
00:55 (Momizi) ん、256*256*256-1で16777215でわないの?
00:56 (Oracle) 16777215だと65535を巻き込んじゃう
00:56 (Momizi) あぁ、せやな
00:56 (Oracle) 初期化したいのは65536を1カウントとした0-255の範囲のみ
00:57 (Momizi) んー
00:57 (Momizi) ちょっと待ってね
00:59 (Oracle) うん
01:01 (Oracle) おっかしいなあ・・・
01:02 (Momizi) そも、私のリセットの仕方が違うからの
01:02 (Oracle) 狂うのは16777216からだったはずなんだが
01:02 (Momizi) fvarはそうやね。(0)ha
01:02 (Oracle) せやな
01:02 (Momizi) はなんかあやしかったきもするが
01:04 (Momizi) んー
01:05 (Oracle) あれー・・・
01:05 (Momizi) そも16711681って数字がいまいちピンとこんのだが(
01:05 (Oracle) デバックだと初期化できてるのに
01:05 (Momizi) どっかで弄ってる?
01:05 (Oracle) -16711681
01:05 (Oracle) 電卓のプログラマとか使用してビット確認してもらえば分かるはず
01:05 (Momizi) デバッグ上で初期化できてるのならその後に弄ってるとしか
01:06 (Oracle) なくても二の補数の逆やって元に戻してるって理解できればわかる
01:06 (Oracle) ないんだよなあ
01:06 (Oracle) 65536をaddするしかしてない
01:06 (Oracle) だから初期化自体できてない、のにstatenoの記録だけはきっちりできてやがるんだよなあ・・・
01:07 (Momizi) 私の脳が追いつけないレベル(
01:08 (Momizi) そもそもbit系弱かったのを何とかカウントとして利用できるレベルまでなんとか知識付けた程度しかないからなぁ・・・(
01:09 (Oracle) http://gyazo.com/54036339dac7668e8560c01ec66b3198
01:09 (vesper) [URL] Gyazo - 54036339dac7668e8560c01ec66b3198.png
01:10 (Oracle) これを&で計算すればそのビットだけをオフにできるでしょ?
01:10 (Momizi) なるほど
01:10 (Momizi) 片っぽが0の時点で0になるしかないのか
01:11 (Momizi) そんでその他のbitは1だから1なら1のまま、0なら0に、と
01:11 (Momizi) ふむ。となると理論上は0になるはずやね
01:13 (Oracle) 実際デバックではそうなった
01:13 (Oracle) なのにステコンで実行してもうごかぬえ
01:13 (Oracle) いみふ
01:13 (Momizi) ふーむ。ちと私も記述書いて実験するかな
01:14 (Momizi) とりあえず入れる値は65536を1とした値で0-255ならなんでも良いか
01:17 (Oracle) やっべ訳わからん
01:17 (Oracle) -2で無条件初期化やったら動くわ
01:18 (Oracle) ぶっ・・・
01:18 (Oracle) ごめん・・・
01:18 (Oracle) 私のシステムのミスだわ・・・
01:18 (Momizi) ほむ。
01:18 (Momizi) 元々役に立ってないし気にしない(
01:18 (Momizi) 私はリセット方法学べて得したがな
01:19 (Oracle) そだね
01:19 (Oracle) これ白虎が使ってたからね
01:19 (Momizi) これってとりあえずその範囲bitだけ0にしてその他1にすれば良いだけよね
01:19 (Oracle) そっすね
01:19 (Momizi) 最初こそ電卓いるけど楽やね
01:19 (Oracle) 0にしたい範囲をまず割り出す
01:19 (Oracle) 1足して、マイナスにする
01:19 (Oracle) これで完成
01:20 (Oracle) 1を初期化したいとき、1に1足して2、マイナスにして-2
01:20 (Oracle) これを&で計算すれば初期化
01:20 (Ryusei) すんげえ今更遅いけど もみもみといちゃいちゃしたロリコン話をみんなに公開してください!お願いします!なんでも(ry
01:21 (Momizi) 私は一向に構わんっ!!!(
01:21 (_609z) ん?いまなんでm(ry
01:22 (Momizi) これアクセサリの電卓の使いやすさを再認識するやり方やね(
01:23 (Momizi) とりあえずくるちゃんありがとー(質問された側が感謝ってどうなの
01:25 (Oracle) どいたしました
01:26 (Momizi) これ初期化用の数値一見意味わからんからしらないと何してるのか意味不明やね(
01:27 (simotsuki) ビットはもう忘れたぜー
01:27 (Momizi) ビットはややこくて嫌なんだぜー
01:27 (simotsuki) オンオフでしか使ってない
01:27 (simotsuki) 元々w
01:28 (vesper) ビットがなかったらキーディスプレイ作るのに変数が足りなかった
01:28 (Momizi) システム圧迫の為カウント使えるようにくるちゃんにご教授賜ったけどその範囲でしか理解できてない
01:29 (Momizi) onかoffか、1か0かなら簡単なのにどうしてそれが組み合わさるとややこくなるのか・・・(
スポンサーサイト



bit演算

2/1
00:59 (_609z) なんでぇ...
01:00 (_609z) bit演算ェ...
01:01 (emeru) bit演算は便利(
01:01 (_609z) 4を立てると1も立つ謎現象
01:02 (emeru) んん
01:02 (emeru) どの変数で4を入れようとしてる?
01:02 (_609z) なので現verのアメンタちゃんは強制onだと12PでAIが起動する。
01:03 (_609z) sysvar(4)
01:03 (emeru) ふむ
01:03 (_609z) sysvar(4)はいろんなスイッチを入れてる。
01:03 (_609z) 修正しなきゃ。
01:03 (emeru) ビット演算の代入は注意が必要さね
01:04 (emeru) 因みにだけど、その代入するステートの記述見せられるかな(
01:05 (_609z) [State 5900, 強制死の宣告許可スイッチ]
01:05 (_609z) type = VarSet
01:05 (_609z) trigger1 = 1 ;可(1)||否(0)
01:05 (_609z) sysvar(4) = (sysvar(4)|4)
01:05 (_609z) ignorehitpause = 1
01:06 (_609z) これで1が立つ
01:06 (emeru) あー、やっぱり(
01:06 (_609z) ?
01:06 (emeru) (sysvar(4)|4)で(sysvar(4)&4)が成立するのはご存知ですよね
01:06 (_609z) うん
01:07 (vesper_Skype) trueの1かぁ。
01:08 (emeru) (sysvar(4)&4)というフラグが成立していない時に(sysvar(4)|4)を代入するので、トリガーの修正が必要ですな
01:08 (_609z) うわらばー!!!
01:09 (_609z) でもさ
01:09 (_609z) [State 5900, 12P専用BGMスイッチ]
01:09 (_609z) type = VarSet
01:09 (_609z) trigger1 = Palno = 12
01:09 (_609z) trigger1 = 1 ;on(1)||off(0)
01:09 (_609z) sysvar(4) = (sysvar(4)|2)
01:09 (_609z) ignorehitpause = 1
01:09 (_609z) こいつは大丈夫なんだけど
01:10 (_609z) あ、
01:10 (_609z) こいつは良いんだww
01:11 (emeru) フラグはよーくメモしてないと後で大変な事に(
01:11 (_609z) ちゃんとメモってます。
01:12 (emeru) (sysvar(4)&4)i
01:13 (emeru) (sysvar(4)&4)に(sysvar(4)|4)が代入されていない時は(sysvar(4)&4)に何も入っていないので、参考になるかと
01:14 (_609z) i?虚数かな
01:16 (emeru) あれです 変数の代入と同じです
01:17 (emeru) その数値が入っていない時にだけ代入してやればいい
01:17 (_609z) ほむ。
01:21 (_609z) おぅ、直った
01:21 (emeru) おおっ
01:22 (_609z) ただし12Pのときだけ
01:23 (_609z) 直った
01:23 (emeru) あら(
01:23 (_609z) 専用のとき動くなww
01:23 (_609z) triggerどうすっか
01:24 (emeru) 見ます
01:26 (emeru) もしかして(sysvar(4)|2)のステートではないですよね(
01:27 (_609z) 2は12Pのときだけonだからおk
01:27 (_609z) 4のtriggerで終わってるww
01:28 (_609z) そっか。offればええねん
01:28 (emeru) んー、プロテクトは掛けるべきかな
01:29 (emeru) トリガーを一個追加してやるだけですねん
01:30 (_609z) しかし、ひどい仕様?だなぁ。わけがわからないよ
01:31 (emeru) トリガーの修正ですな(
01:32 (_609z) triggerall = Palno != 12
01:32 (_609z) trigger1 = 1 ;可(1)||否(0)
01:32 (_609z) 今はこれ
01:32 (_609z) しかし追加する条件がねぇ
01:33 (emeru) ん、特定の変数を代入させる場合 処理を軽くさせる為にこういった記述を書く場合があります
01:34 (emeru) [state ]
01:34 (emeru) type=varset
01:34 (emeru) trigger1=!ishelper
01:34 (emeru) trigger1=!var(x)
01:34 (emeru) var(x)=y
01:34 (emeru) ignorehitpause=1
01:37 (_609z) ほむ。
01:38 (_609z) 何も代入されてないときに代入かぁ
01:45 (_609z) ああああああ!何もかもちくしょーーーーー!!
01:46 (_609z) AIだけ別の変数使うわ!
01:46 (emeru) んん、ガンバです!
01:47 (emeru) ビット演算は使いこなすと 用途が増えてきます
01:49 (emeru) ビット演算が入ってる数値を参照させる場合はどうすれば良いかはご存知ですよね
01:54 (_609z) ??
02:13 (emeru) ん・・と、先ほどの記述ですが (sysvar(4)|4)か(sysvar(4)|2)のどちらで管理しますか?
02:15 (_609z) 4は強制死の宣告、2は12P専用BGMだからええっと...
02:16 (_609z) とりあえずAIフラグは空いてた変数に変えてみた
02:18 (emeru) なら・・・まずは(sysvar(4)|4)と(sysvar(4)|2)のトリガー修正ですな 後々にも響いてくるので覚えて損はないかと(
02:21 (_609z) やっぱりbit演算のせいだったなw
02:22 (emeru) 先ほども言ったように、(sysvar(4)|4)がまだ代入されていない(sysvar(4)&4)には、0が入っているわけです
02:22 (_609z) ほむ
02:24 (emeru) 代入された(sysvar(4)&4)を参照する場合はtriggerx=(sysvar(4)&4) のようにすればいいので、後は0かどうかを判断すれば良い
02:25 (_609z) ふむふむ

ビット演算による格納

9/5
00:06 (Momizi_Manju-) ふーむ、いよいよ訳わからん記述になってきたな
00:06 (Momizi_Manju-) これもbit演算のお蔭やな(
00:06 (Oracle) せやろ
00:06 (Oracle) これ使い始めると解読クッソ面倒になる
00:07 (Oracle) だけど
00:07 (Momizi_Manju-) 何でもない記述でもすごいことしてるように感じる不思議
00:08 (Oracle) これができてなかったころに比べると、一気に進化したように感じるのよね
00:08 (Oracle) 分かりやすく世界が変わるというか
00:09 (Momizi_Manju-) せやなぁ・・・あの鬼巫女R覗いて絶望してた頃が懐かしい(
00:09 (simotsuki) あれ?元々使ってたんじゃなかったっけ?
00:10 (Momizi_Manju-) フラグ管理でのbit演算は使ってるけど、カウントとしては使ったことなかった
00:10 (Oracle) カウント以外にも使えるけどね
00:10 (Momizi_Manju-) (var(X)&Y)/Zの形
00:10 (Oracle) 固定範囲内のランダム変動数でもOKだし
00:11 (Momizi_Manju-) なんて読んだらいいのかわからんかったからね(
00:11 (Oracle) 10bitあればランダム格納できるよ
00:11 (Momizi_Manju-) 1000だから1023じゃないのん?
00:11 (simotsuki) ほう
00:11 (Oracle) 1023だね
00:12 (Oracle) 1023は10bitで足りる
00:12 (Momizi_Manju-) あ、そっか
00:13 (Oracle) カウンタやフラグだけじゃなくて、一定範囲内の変化なら全て取り込める
00:13 (Oracle) それこそstatenoですら
00:13 (Momizi_Manju-) 11bit目に行くのは1024だから10bitか
00:13 (Momizi_Manju-) 使ってる変数でかいから流石にbit演算じゃしないけどね(
00:14 (Momizi_Manju-) 使ってるステート
00:14 (Oracle) ・・・そうね。それをだね
00:14 (Oracle) 0-255の範囲にして、1ずつstatenoの番号を割り当てたらどうなる?
00:15 (Momizi_Manju-) ふむ・・・
00:15 (Oracle) そう使えば、255個の数値を問わないステートの記録が可能になる
00:16 (Oracle) という使い方も、できるよ
00:16 (Oracle) 復元するときに捨て変数一個使えばOK。
00:17 (Oracle) 割り当ての中に更に割り当てを作るという感じかな
00:18 (Momizi_Manju-) bit単位に割り当てるより数が多いし使い勝手良いねぇ
00:19 (Oracle) こう考えると大量に使えるでそー
00:19 (Momizi_Manju-) メモがなくなったら死ねそうだけどね(
00:20 (Oracle) メモの重みが増える
00:23 (Momizi_Manju-) ステートもだけど、個人的にはAnim偽装用のanim保存に使いたいかな(
00:23 (Oracle) リスト化すればOKだね
00:23 (Momizi_Manju-) だねー
00:23 (Oracle) 存在する個数分の領域を取ればいい
00:24 (Momizi_Manju-) 1つでAnimElemNo(0)も同時に保存できるのがぐっど
00:24 (Oracle) それ+拡張用に1bit余裕を持たせるもよし
00:24 (Oracle) そそ
00:24 (Momizi_Manju-) +でステートも保存できるし(
00:24 (Oracle) もうね、詰め込み放題
00:24 (Oracle) 苦労は大けれど、変数がここまできっちり使えると
00:25 (Oracle) やりつくした感が凄い
00:25 (Momizi_Manju-) せやな
00:25 (Momizi_Manju-) ただ、それを今からする気力はないので次回制作からですね(
00:25 (Oracle) はい
00:25 (Oracle) 最初からやるべきことだからねホントに
00:27 (Oracle) ビットに関しては、私は全てオキ氏から盗んできた感じだな
00:28 (Momizi_Manju-) オキ氏の記述はほんと解読するのが大変だからね(
00:29 (Oracle) それだけきっちり使ってるんだよな
00:29 (Oracle) だから参考になる。
00:29 (Oracle) し、実際に使ってみて素晴らしいと思った
00:30 (Momizi_Manju-) だねー
00:37 (Oracle) ふが

1つの変数で複数の回数カウント

9/4
02:13 (Momizi) 1つの変数で複数の回数カウントってどうやったらいいかなぁ・・・
02:13 (Oracle) うにゃ?
02:14 (Momizi) 1と2と3というフラグがあって、そのフラグが立つごとに回数を+1するんだけど
02:14 (Momizi) それを1つの変数でやるとしたらどうしたらいいかなぁと
02:15 (Oracle) それって何回までカウントするの?
02:15 (Momizi) 多くても10くらい
02:15 (Oracle) んじゃ余裕だな
02:15 (Momizi) ふむ
02:15 (Oracle) ビット演算使いましょう
02:15 (Momizi) bit演算なー、私フラグ以外で使うの苦手なのよね(
02:15 (Oracle) がんばれ
02:15 (Oracle) 使えると凄い便利だぞ
02:16 (Oracle) 余ったビットの領域でカウンタにも使えるからな
02:16 (Oracle) しかもビットでやるとな、変数いじられてもカウンタは一定範囲で止まってくれるから
02:16 (Oracle) 無限ループも防止してくれるんじゃ
02:17 (Momizi) 確か((var(X)&Y)/Z)みたいな方式だっけか
02:18 (Oracle) うむ
02:18 (Oracle) var(0)
02:18 (Oracle) 0 - 511 画像回転角度 (360)
02:18 (Oracle) 512 - 65535 イントロカウンタ (120)
02:18 (Oracle) 65536 - 8388607 回転停止時間 (120)
02:18 (Oracle) 8388608 - 134217727 回転停止ディレイ (15)
02:18 (Oracle) 134217728 - 2147483647 回転停止ディレイカウント (15)
02:18 (Momizi) うむ。わけわからぬ
02:19 (Oracle) 変数一個でコレだけの役割を持たせられるようになる
02:19 (Momizi) あー
02:19 (Momizi) *2でbitが増えるなら/2でbitが減るって事かな
02:19 (Momizi) bitというか、桁
02:20 (Oracle) そうね
02:20 (Oracle) 一例とすると
02:21 (Oracle) 512が1カウント扱いとすると
02:21 (Oracle) これを127カウントまで使えるようにしたい
02:21 (Oracle) (var(X)&512*127)/512
02:22 (Oracle) こんな感じになる
02:22 (Momizi) ほー
02:22 (Oracle) 実際に1~127の数字を割り当てると正しく出てこないかい?
02:23 (Oracle) 512なら1って帰ってくるし、1024なら2って帰ってくる
02:23 (Momizi) せやな
02:23 (Oracle) んで、512*127のおかげで127カウント以上にはならない
02:24 (Momizi) ふむふむ
02:24 (Oracle) というのをオススメします
02:25 (Oracle) 絶対できたほうがいい・・・変数が浮く。
02:25 (Momizi) せやなぁ・・・
02:27 (Momizi) んーっと・・・
02:28 (Momizi) 0-31(20) :1 32-2023(20):2 1024-32767(20):3って感じでいいのかね
02:28 (Momizi) 一応最大を20とした場合だけど
02:29 (Oracle) 2023の下記間違いはあるけどOK
02:29 (Oracle) ばっちりだよ
02:29 (Momizi) 2047か(
02:29 (Momizi) んで
02:30 (Oracle) ちゃう1023や
02:30 (Momizi) あれ
02:30 (Oracle) 32*20は640だから512で足りず1023まであればいける
02:30 (Momizi) 640だから、確かにw
02:30 (Oracle) にゃにゃ、こういう計算は慎重にしないとね
02:30 (Momizi) せやね
02:31 (Oracle) デバッグとかでお試しに作ってみるのがいいねー
02:31 (Momizi) 1:(var(X)&1*20)/1 2:(var(X)&32*20)/32 3:(var(X)&1024*20)/1024
02:31 (Momizi) かな
02:31 (Oracle) ほ、ほげ・・・?
02:31 (Oracle) 一個ずれてる・・・
02:32 (Momizi) ほんまや(
02:32 (Oracle) 1:(var(X)&31)
02:32 (Momizi) せやね
02:33 (Oracle) 2と3も間違ってるからよく考え直す
02:34 (Oracle) おおう・・・
02:34 (Oracle) そうだ、私の方式とは違うんだ
02:35 (Momizi) ぬ?
02:37 (Oracle) えーと・・・(var(X)&31)、(var(X)&1023)/32、(var(X)&32767)/1024
02:37 (Oracle) 私はこうやって書くんだよねぇ
02:37 (Momizi) あー、なるほど
02:37 (Oracle) 普通にそれで合ってる。ごめんち
02:37 (Oracle) 増える可能性を考慮して、使える領域全部使えるようにしてるのよね
02:38 (Momizi) 元から()内を限界値で見てるってことでいいのかな
02:38 (Oracle) そそ
02:38 (Momizi) そっちのがいいかもねー
02:38 (Momizi) ただ、越えたら困る場合は前のが確実なのかな
02:38 (Oracle) いんや
02:38 (Oracle) あれでも無意味
02:38 (Oracle) 超えたらまた0になるもの
02:38 (Momizi) ふむ
02:39 (Momizi) あぁ、そっか
02:39 (Oracle) だから(var(X)&31)<20とかで防ぐ
02:39 (Momizi) なるなる
02:39 (Oracle) これで完璧だよ
02:39 (Momizi) やった!また1つ賢くなったよ!
02:39 (Oracle) 絶対メモしておかないといけないからねこれ
02:39 (Oracle) 忘れると悲惨だよ
02:40 (Oracle) 使い方慣れるとこれが便利で便利でね・・・
02:40 (Momizi) よし、ログ保存完了(
02:41 (Oracle) あ、ログも大事だけど変数よ(
02:41 (Oracle) 変数に使ってる範囲、これこういうものってメモ
02:41 (Momizi) 確かにこれメモ忘れたらひさんやな
02:41 (Oracle) うむ
02:42 (Momizi) bit演算のフラグですらないと困るのに(
02:42 (Oracle) これでもみじの記述がまた一つ洗練される
02:42 (Momizi) おうよ
02:42 (Momizi) だんだん私の記述ぽくなくなってきたよ(
02:42 (Oracle) ある範囲内って決まってればそれは全部ビット演算に取り込める
02:42 (Momizi) ヘルパー数なんかはこれで十分やね
02:43 (Oracle) そそ
02:43 (Momizi) 絶対にその範囲でしか変動しないものだし
02:43 (Oracle) 56まで記録するのに64まであればいいから7bitあれば記録できる
02:43 (Momizi) 32bitもいらんかったんや!
02:44 (Oracle) まだ25bit分も使える
02:44 (Oracle) と考えると素晴らしい
02:45 (Momizi) 実際20もいらんから15にして圧縮しよう
02:45 (Oracle) 分かると楽しいよね
02:46 (Momizi) うむうむ
02:46 (Oracle) 今まで変数無駄にしてきたーって悲しい気持ちになったけど(
02:46 (Momizi) 全部書き換えたいけどそんな余力はなかった(
02:46 (Oracle) しゃーね
02:46 (Oracle) これは後からやるもんじゃない
02:46 (Momizi) 流石にシステム変数は弄るかな
02:46 (Momizi) ライフとパワーを1つで管理してやる・・・!
02:47 (Oracle) パワーはそうね
02:48 (Oracle) 1023+1023で20bit。まだ12bitある
02:48 (Momizi) ついでにヘルパー数ですね。
02:48 (Oracle) 24bit、残り8bit、255までいける
02:48 (Momizi) お、おそろしや・・・
02:50 (Momizi) あ、ちなみにカウントするだけならvalue=var(X)+32とかでいいのかな
02:50 (Oracle) そうねー
02:50 (Oracle) var(X):=var(X)+32
02:51 (Oracle) 大体はこれを使うことになるかなー
02:51 (Momizi) 初期化は・・・var(X):=var(X)-(var(X)&1023)かな?
02:51 (Oracle) そうね
02:51 (Momizi) ふむ
02:51 (Momizi) 完璧じゃなイカ!
02:52 (Momizi) 早速仮実装してみるお
02:52 (Oracle) あ、ちょっとまった
02:52 (Momizi) うぇい
02:53 (Oracle) それだと下の領域を巻き込む
02:53 (Momizi) ・・・・ほんとだ(
02:54 (Oracle) だから32*15・・・かな
02:54 (Oracle) カウント1に値するもの*限界量
02:54 (Momizi) var(X):=var(X)-(var(X)&32*15)
02:54 (Momizi) ってことかな
02:54 (Oracle) そそ
02:55 (Oracle) var(X):=var(X)-(var(X)&1024*15)
02:55 (Momizi) カウント値が1の時だけvar(X):=var(X)-(var(X)&15)にすればいいのか
02:55 (Oracle) そそ
02:55 (Momizi) 15じゃねぇ、31や(
02:56 (Oracle) ん・・・15はヘルパー数か(
02:56 (Oracle) いや違うごめん忘れてくれ(
02:56 (Momizi) くるちゃんあなた疲れてるのよ・・・
02:56 (Momizi) 15はさっき言った通り20から15にする予定だからだよ(
02:57 (Oracle) うん
02:57 (Oracle) まあそんな感じでOK
02:57 (Momizi) んじゃ一回実験してみるぜ!
03:02 (Momizi) ふむ
03:02 (Momizi) 流石に5bit目までの計算は問題ないか
03:02 (Oracle) ん、どこミスった?
03:03 (Momizi) ん?
03:03 (Oracle) どこか(
03:03 (Momizi) あぁ、いやまだ&31までしかしてないよw
03:03 (Oracle) そか(
03:03 (Momizi) だから流石にここでミスることはなかったって意味でw
03:03 (Oracle) 先走る人なんですごめんち
03:03 (Momizi) ドジっ子くるちゃん
03:03 (Oracle) もう少し待てる広いこころ、がんばる
03:11 (Momizi) おおぉ・・・・
03:11 (Momizi) できてる・・・・
03:12 (Oracle) おめおめ
03:13 (Momizi) これは感動ものですね
03:13 (Oracle) 感動ものだよ
03:13 (Oracle) 夢が広がる
03:14 (Momizi) ほわぁ・・・ってなった(
03:14 (Momizi) きちんと03:23 (Oracle) うにゅ
03:23 (Momizi) とりあえず6個のカウントを行えるようになった
03:24 (Momizi) そういえば
03:24 (Momizi) 試合時間カウントしてる変数も使おうと思えば他と一緒に使えるのかな。最大50万とかに設定して(
03:25 (Oracle) うん
03:25 (Oracle) 50万だったら
03:25 (Oracle) 524288以降だから
03:26 (Oracle) まだ13bitも余ってる
03:26 (Momizi) うへー・・・
03:26 (Oracle) 50万も使うか?
03:26 (Momizi) いや、あくまで保険として
03:26 (Oracle) 5万あっても5万くらいで十分だと思うが・・・
03:26 (Oracle) 日本語がおかしい
03:26 (Momizi) 例えばだけどさ
03:27 (Momizi) とおりすがる氏の大会とかだと1時間戦わせることがあるじゃんか
03:27 (Momizi) このときの最大フレームって大体21万だから、大目に見て50万(
03:27 (Oracle) んで50万まで動作を設定するのかい?
03:28 (Oracle) それなら、5万までにして、5万になったら数値減らしてループの構造を作ればよくないかな
03:28 (Momizi) そ れ だ
03:28 (Oracle) だろ?
03:28 (Momizi) 賢く生きないとダメね
03:28 (Oracle) こうすると65536までで済むから
03:28 (Oracle) 16bitも扱える
03:29 (Momizi) うへー・・・ってことは、これ変数1つでRoundState=[0,4]のカウント全部扱えそうだな
03:29 (Oracle) 便利じゃろ
03:29 (Momizi) 便利すぎます
03:29 (Oracle) イントロカウンタやtimeや試合後カウンタなんか全部まとめれるぞ
03:29 (Momizi) ちょっと変更するの手間だけど変えてみるかなぁ・・・
03:30 (Momizi) これにはそれだけの価値がある
03:30 (Momizi) とりあえず一番大きくなる上に使用頻度が高いroundstate=2のカウント値を1にすればいいかな
03:31 (Oracle) どこでも自由よ
03:31 (Oracle) 自分の扱いやすいように
03:31 (Oracle) 私も大きいものを1にするね。
03:31 (Momizi) いや、あんまり大きい値でroundstate=2カウントすると1行あたりの文字数の問題が(
03:32 (Oracle) うん、考えたら多分文字数だと思った(
03:32 (Oracle) 直で取り出せるからね
03:32 (Momizi) だねー
03:33 (Momizi) うわー・・一気にやることが増えた・・・w
03:33 (Oracle) それだけやれることがあるってことなのさ
03:34 (Oracle) 知ればしるほどやることは増えるが、豊かにはなる
03:34 (Momizi) 後、この使い方ならフラグで用意してる変数であまりまくってるところを有効活用できるのか
03:34 (Oracle) そうそう
03:34 (Momizi) 変数が圧縮されていく(

ビット演算による記述短縮

8/26
20:50 (Ryusei_) TriggerAll=1||var(7):=(var(7)|1)-1||var(7):=(var(7)|2)-2||var(7):=(var(7)|4)-4||var(7):=(var(7)|8)-8||(var(7)|16)-16||var(7):=(var(7)|32)-32||var(7):=(var(7)|64)-64||var(7):=(var(7)|128)-128||var(7):=(var(7)|256)-256||var(7):=(var(7)|512)-512
20:50 (Ryusei_) TriggerAll=1||var(7):=(var(7)|1024)-1024||var(7):=(var(7)|2048)-2048||var(7):=(var(7)|4096)-4096||var(7):=(var(7)|8192)-8192||var(7):=(var(7)|16384)-16384||var(7):=(var(7)|32768)-32768||var(7):=(var(7)|65536)-65536||var(7):=(var(7)|131072)-131072
20:50 (Ryusei_) TriggerAll=1||var(7):=(var(7)|262144)-262144||var(7):=(var(7)|524288)-524288||var(7):=(var(7)|1048576)-1048576||var(7):=(var(7)|2097152)-2097152||var(7):=(var(7)|4194304)-4194304||var(7):=(var(7)|8388608)-8388608||var(7):=(var(7)|16777216)-16777216
20:50 (Ryusei_) TriggerAll=1||var(7):=(var(7)|33554432)-33554432||var(7):=(var(7)|67108864)-67108864||var(7):=(var(7)|134217728)-134217728||var(7):=(var(7)|268435456)-268435456||var(7):=(var(7)|536870912)-536870912||var(7):=(var(7)|1073741824)-1073741824
20:51 (Ryusei_) くだらないミスをしてたわ(白目
20:51 (Momizi) おう、見にくいぜ
20:51 (Ryusei_) おう、もみもみさせろ
20:51 (Ryusei_)  
20:53 (Momizi) 私の記述に直すとこうかなぁ
20:53 (Momizi) TriggerAll=1||var(7):=var(7)-(var(7)&(1+2+4+8+16+32+64+128+256+512))
20:53 (Ryusei_) あ~
20:53 (Ryusei_) そんなんでいいのか
20:54 (Ryusei_) 使わせてもらうわ
20:54 (Ryusei_)  
20:54 (Momizi) もっとコンパクトにしたいなら()内全部計算して合計値にすればいい(
20:54 (Ryusei_) 常時OFFにしたいんじゃ~^~
20:54 (Momizi) triggerall=1||var(7):=var(7)-(var(7)&1023)
20:54 (Momizi) こうかな
20:55 (Ryusei_) ああ~なるほど・・・
20:55 (Ryusei_) マジ助かりました

20:57 (Ryusei_) もみもみのおかげで記述が圧縮できそうだ
20:57 (Ryusei_) あんがと
20:58 (Momizi) まぁ、実を言うと、リュウセイ氏のキャラの記述見た時から言おうとは思ってた(
20:58 (Momizi) エグゼリカの記述が特にすごいことになってたからぬ
20:58 (Ryusei_) やったことないからな 基本的に俺は他人からパクルし
20:58 (Momizi) 私の記述はluna氏の参考にしてる(
20:59 (Oracle) ビット詰めないと文字数が足りないというか長すぎて見づらくなる
20:59 (Ryusei_) あ~それありそうだな~
20:59 (blue-eyes) 他人の記述は読めないのでオリジナルでやるしかない辛さ(
20:59 (emeru) 私は記述に詰まった時は熄氏の記述見てる(
21:00 (Momizi) 後は代入の連続は多少なり重くなるから軽量化にもなるんかね(
21:00 (Oracle) なるよー。処理数が減るからね
21:00 (Oracle) デバック時には見やすく分けておいたりするのもいい
21:01 (blue-eyes) 製作者自身のキャラ以外の記述読める人って本当すげーって思います(
21:01 (Oracle) !(sysvar(0)&32)&&!(sysvar(0)&64)は!(sysvar(0)&96)でまとめられるけど、ぱっと見て分かり辛いからね
21:01 (Momizi) それがあるから(32+64)にしてるんだよなぁ・・
21:02 (Momizi) コメントで残せばいいだけなんだろうけど(
21:02 (Oracle) あーそうかその方法でも見やすく出来るかー
21:02 (Momizi) でも結局は文字数増えますからねー
21:03 (Oracle) このあたりは人それぞれだなー
21:03 (Momizi) (1+2+4+8+16+32+64+128+256+512)なんて見た目ではわかりやすいけど文字数かさみ過ぎて(
21:04 (Oracle) 長い・・・
21:05 (Momizi) trigger1=1||var(1):=var(1)-(var(1)&1023)
21:05 (Momizi) ;(1+2+4+8+16+32+64+128+256+512)
21:05 (Momizi) こんな風に残す方が自然なのかねぇ
21:05 (emeru) (var(x)&y)=y じゃダメなのかな
21:06 (Momizi) !(var(1)&1)&&(var(1)&4)を(var(1)&(1+4))=4って使い方なら結構するかな
21:07 (Oracle) ビット集合から特定ビットを取り出すときに使う手法だね
21:07 (Momizi) 少なくともOFFに(var(x)&y)=yを使うことはないかに
21:08 (Ryusei_) 淡水氏、本当にありがとうございました
21:08 (Momizi) おう、敬いたまえ
21:08 (Ryusei_) ( ´゚д゚`)は?
21:09 (Momizi) ごめんなさいごめんなさいごめんなさいごめんなさいごめんなさいごめんなさいごめんなさいごめんなさいごめんなさいごめんなさい
21:09 (Oracle) オキ氏はビット普通にまとめたまま書いてあるから結構読むの大変。
21:10 (Momizi) あー、それは私もある。コメントでできるだけ見やすく書き直すけど(
21:11 (Oracle) 変数表とにらめっこしながら何してんのか書いたりしてますね
21:11 (Momizi) 変数表必須ですね
21:11 (emeru) 変数表ないと フラグとか色々被ってて(
21:12 (Oracle) 文字にして書くと一発で必要毎が分かるので、複雑なのは色々追記してますねぇ
21:12 (Ryusei_) 変数表なんてくだらねえぜ!勘で当てるぜ!
21:12 (Ryusei_)  
21:12 (Oracle) 変数表なしで変数管理は痛い目にあったのできっちりやってます
21:13 (Momizi) 変数1つbit演算だけで使い切ったからないと無理(
21:14 (Momizi) 後は意外と気づきにくいのよね、変数かぶり(
21:14 (Oracle) 不信な動作を確認できないと気付かないのよねぇ
21:15 (Momizi) そういうのに限って見た目では変化なかったりするからね(
21:16 (Momizi) 以前変数表更新サボって、原因追及に丸1日使ったからなぁ・・・。変数かぶりと分かってからはきちんとつけるように・・・
21:16 (Oracle) 必要なこと羅列して変数詰めないと後が怖い
21:17 (Oracle) あ、足りないとか発生したときには心が折れそうになる
21:20 (Oracle) (妖怪1たりない)
21:20 (Momizi) どこにでも出てくるからね。仕方ないね
21:21 (Ryusei_) TriggerAll = 1 || var(7):= var(7)-(var(7)&(1+2+4+8+16+32+64+128+256+512+1024+2048+4096+8192+16384+32768+65536+131072+262144+524288+1048576+2097152+4194304+8388608+16777216+33554432+67108864+134217728+268435456+536870912+1073741824))
21:21 (Ryusei_) やっぱながかった(
21:21 (Momizi) 合計値でいいと思う(
21:21 (Ryusei_) わすれそうだからやめとく
21:21 (Momizi) var(7)&1073741824
21:22 (Ryusei_) だ~か~ら~細かい部分も忘れそうだから合計値はやめとくって言ったじゃん!(主砲準備
21:23 (Momizi) triggerall=1||var(7):=var(7)-(var(7)&1073741824);1~31bitOFF
21:23 (Momizi) これでいい(
21:23 (Oracle) うわぁぁぁぁぁ
21:23 (Ryusei_) ( ´゚д゚`)
21:23 (Oracle) いや2147483647じゃないか?
21:24 (Ryusei_) だよね
21:24 (Momizi) ぬ、こぴって電卓に張り付けたんだけど抜けてたかな

立ってるビット数を数える

2/25
08:40 (Sance_) あー、DRMさんの言ってた立ってるビット数ってこういう意味かw
08:41 (Sance_) 記事でようやくわかった(
08:41 (Sance_) 確かこれ数行でできたはず・・・ 一回やってみよう
09:57 (Sance_) できた・・・!
09:57 (Sance_) くっそ面倒な数式ができた(
10:15 (Sance_) コメントも追加してみた。
10:15 (Sance_) [State Bit]
10:15 (Sance_) Type = Varset
10:15 (Sance_) Trigger1 = 1 || Var(0) := 345645657 ;立ってるビット数が欲しい数値
10:15 (Sance_) Trigger1 = 1 || Var(1) := Var(0)
10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)) - (Var(1)&-2147483648) ;マイナス値だと計算が狂うので一旦オフに
10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)&1431655765) + ((Var(1)/2)&1431655765) ; 1431655765 = 0x55555555 = 0101010101010101...
10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)&858993459) + ((Var(1)/4)&858993459) ; 858993459 = 0x33333333 = 0011001100110011...
10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)&252645135) + ((Var(1)/16)&252645135) ;252645135 = 0x0F0F0F0F = 0000111100001111...
10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)&16711935) + ((Var(1)/256)&16711935) ;16711935 = 0x00FF00FF = 0000000011111111...
10:15 (Sance_) var(1) = ((Var(1)&31) + (Var(1)/256/256)) + !!(Var(0)&-2147483648) ;立ってる最初の16ビット+次の15ビット+マイナス値だった場合の誤差
10:15 (Sance_) ignorehitpause=1
10:15 (Sance_) わかるだろうか?
10:17 (Sance_) まぁ、DRM氏がきたらもう一度貼ろう・・・

16:31 (dry_ice) あ、そうだDRM氏 なんかSance氏がお話したいことがあるそうですぜ(今起きてるかわからないけど
16:32 (DRM) ほぉ~、なんじゃろなぁ
16:32 (dry_ice) 一応ログ残ってるんで貼りましょうかね?
16:33 (DRM) あ、お願いします
16:34 (dry_ice) 10:15 (Sance_) Type = Varset
16:34 (dry_ice) 10:15 (Sance_) Trigger1 = 1 || Var(0) := 345645657 ;立ってるビット数が欲しい数値
16:34 (dry_ice) 10:15 (Sance_) Trigger1 = 1 || Var(1) := Var(0)
16:34 (dry_ice) 10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)) - (Var(1)&-2147483648) ;マイナス値だと計算が狂うので一旦オフに
16:34 (dry_ice) 10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)&1431655765) + ((Var(1)/2)&1431655765) ; 1431655765 = 0x55555555 = 0101010101010101...
16:34 (dry_ice) 10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)&858993459) + ((Var(1)/4)&858993459) ; 858993459 = 0x33333333 = 0011001100110011...
16:34 (dry_ice) 10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)&252645135) + ((Var(1)/16)&252645135) ;252645135 = 0x0F0F0F0F = 0000111100001111...
16:34 (dry_ice) 10:15 (Sance_) Trigger1 = 1 || Var(1) := (Var(1)&16711935) + ((Var(1)/256)&16711935) ;16711935 = 0x00FF00FF = 0000000011111111...
16:34 (dry_ice) 10:15 (Sance_) var(1) = ((Var(1)&31) + (Var(1)/256/256)) + !!(Var(0)&-2147483648) ;立ってる最初の16ビット+次の15ビット+マイナス値だった場合の誤差
16:34 (dry_ice) 10:15 (Sance_) ignorehitpause=1
16:34 (dry_ice) ということらしいですが
16:35 (dry_ice) DRMさんの言ってた立ってるビット数に関する記述らしいです
16:36 (DRM) サンキューです。早速解析開始しようw
17:09 (DRM) うお、やべぇw 答えがしっかり出とるなぁ。まだ理解はしていないが確認はした
17:17 (dry_ice) すげぇ、あれ分かるのか・・・w(全然わからんかったw
17:18 (DRM) 電卓使って2進数化した値を並べればどうなっているか分かるね~
18:14 (DRM) あれ
18:14 (DRM) Trigger1 = 1 || Var(1) := (Var(1)&16711935) + ((Var(1)/256)&16711935)
18:15 (DRM) これ必要か・・・?
18:16 (DRM) いや、きっと必要だ、うん
18:18 (DRM) あれだ、2分するんだからきっと必要
18:24 (DRM) あー、最終的に右に寄せて10進数にした時に個数として出せるようにしたのか
18:32 (DRM) (Var(1)/256/256)は((Var(1)/256/256)&31)が正しいのか?
18:42 (DRM) なるほど、分割しないで右に寄せ続けたのがゴリ押しの方法だったか

20:21 (Sance_) DRMさんに見せたい記述あるよー、って思ってたらもう貼られてたでござる。
20:21 (DRM) おはよう&ありがとうでっせ
20:21 (Sance_) まぁ、いいや
20:21 (Sance_) というか、あのコメントでよくわかったなーw
20:21 (Sance_) 自分なら投げてたと思うw
20:22 (DRM) いやまぁ多少は調べたから内容は分かったのよw
20:23 (Sance_) でもまぁ、結局ゴリ押しにはかわんねーけどねw
20:24 (Sance_) 必要な数式の数は減るけど(
20:25 (DRM) 1ずつシフトする自分よか遥かにスマートやろw
20:25 (Sance_) 確かハミング重みっていうらしい。
20:28 (DRM) しかし最大30行超えるものが10行以内に抑えられるのはええものや
20:29 (Sance_) だねーw
20:29 (Sance_) コメントなかったら全く意味不明の記述に見えるけどw
20:29 (Sance_) 数値的に
20:29 (DRM) 10進数ならねw
20:30 (Sance_) というか、そもそも何に使うのだろう?
20:31 (DRM) ちょっとAIのトリガーにねー
20:32 (DRM) 広範囲のInGuardDistをビット演算で記憶→広範囲にInGuardDistが発生していたらぶっぱみたいな
20:32 (Sance_) 実は記事にするまで立ってるビットって「キャラが立ち状態」でのビットの数とか考えてて質問の意味がわからなかった・・・
20:33 (Sance_) ふむ、なるほどー
20:33 (DRM) 主語無かったもんね、ごめんw
20:37 (Sance_) でも、広範囲で一つでも立ってるだけって状況なら普通に(Var(X)&○○+○○+○○)でよかったんじゃ・・・
20:38 (Sance_) 別に立ってる数が必要ってわけでも
20:38 (Sance_) 括弧忘れたかな?
20:38 (Sance_) 多分(
20:39 (DRM) 20か所で感知しているんですけど、
20:40 (DRM) Random <= 1の数*2.0 みたいにしてるんですよね、発生条件
20:40 (Sance_) なるほど・・・

リンク1:立ってるビットの数を求める[でぃーあーるM]
リンク2:立ってるビットの数を求める式[Sanceのブログ~]

ビット演算

5/17
17:15 (emeru) ビット演算とは何ぞや・・・ぐぬぬ・・スイッチに使いたいんだがのぅ・・
17:24 (DRM) ビット演算は
17:24 (DRM) http://homepage3.nifty.com/andil/mugen/
17:24 (vesperAFK) [URL] ADIのMUGENメモ
17:24 (DRM) こういうところ見るとだんだん理解できます(
17:26 (DRM) まぁ2進法が理解できればビット演算も使えるようになるかな・・・
17:26 (mosa) 日本語、日本語を使う
17:26 (mosa) あばば(´゚'ω゚`)
17:26 (emeru) なるたけsysvar使いたいけど、残ってるsysvarがもう一個しかないと言う自体;
17:28 (mosa) sysvar(5),
17:28 (emeru) えっw
17:28 (mosa) sysvar(6),sysvar(7)を使う
17:29 (mosa) ・・・使えたらいいね(´・ω・`)
17:29 (emeru) んーとつまり、ビット演算使う時はsysvar(x)&1とかそんな感じなのだろうか
17:29 (qeg) sysfvarは使っちゃってる?
17:30 (mosa) おっすおっし
17:30 (emeru) sysfvarは全部埋まってますねぇ
17:30 (DRM) FVarはビット演算には向いてないっしょ
17:30 (mosa) sysvar(59)・・・
17:30 (emeru) スイッチが六つくらいあります(・
17:32 (qeg) sysvarって本来そんなに使うモンじゃないからねぇ
17:32 (qeg) 通常キャラならただの変数で事足りるし
17:34 (DRM) えっと、まずMUGENでは通常32bit目まで扱うことが出来ます。なので1つの変数につき32個のスイッチを作ることが出来ます。
17:35 (emeru) セットする時はvarsetでsysvar(x)|1なのねぇ
17:35 (emeru) コレが1ビット目なのかしら
17:35 (DRM) ただし32bit目はいろいろ扱い辛いので、普通は31bit目までしか扱いません。
17:35 (DRM) その記述は1bit目をONにする記述ですね
17:36 (emeru) ふむ・・色々と便利そうだ
17:37 (emeru) 解除する時はvarsetで適当に0でも入れるのかしら
17:39 (DRM) 例えば3bit目をOFFにしたいなら、(SysVar(X) | 4) - 4という感じにします
17:39 (DRM) うまい表現方法が分からぬ・・・w
17:41 (DRM) 2bit目と5bit目をOFFにしたいなら、(SysVar(X) | 18) - 18という感じ
17:42 (emeru) あーなるほど 2ビット目+5ビット目の計算なのね
17:43 (emeru) 1ビット~6ビットなら(SysVar(X) | 63) - 63と言う感じ
17:44 (DRM) そうですね~
17:44 (emeru) なるほどー・・大体分かってきたぞー
17:45 (emeru) ありがとうございます!
17:49 (DRM) 単純な用途の説明しかできんかった・・・まぁ2進数と10進数の関係も調べておくと良いよ
17:49 (emeru) そんなにあるのかー・・・;
17:51 (emeru) 条件に使う時は(sysvar(x)&1)・・・と
17:56 (emeru) 1ビット~6ビットまで全部ONの時は(sysvar(x)&1&2&4&8&16&32)で良いのかしら
18:02 (DRM) いや、違う
18:02 (emeru) 個別にしないとなのかしら
18:02 (DRM) (sysvar(x)&(1|2|4|8|16|32))
18:03 (DRM) あるいは
18:03 (DRM) (sysvar(x)&63)
18:03 (emeru) あー、なるほどー・・
18:03 (emeru) ありがとうございます!
18:04 (DRM) 更にこの中から3bit目だけがONな場合を確認したい時は
18:04 (DRM) (sysvar(x)&63) = 4
18:04 (DRM) まぁ参考までに・・・
18:05 (emeru) なるほど・・・指定するわけですな
18:10 (emeru) おーーーーーキチンと動いたぁぁぁぁぁ
18:11 (emeru) ありがとうございます!
18:11 (DRM) よかよか
18:11 (emeru) ビット演算がこんなに楽だとは・・
18:12 (emeru) 覚えたら変数節約に為に使って損はないですなぁ
18:13 (DRM) ですねー。ビット演算は便利ですな

bit演算

1/20
16:33 (Momizi_Xkaiseki) カラーbit演算で記憶するとしたら&16まで確保しとけばいけるかな?
16:35 (Momizi_Xkaiseki) sysvar(x)=sysvar(x)|palno
16:35 (Momizi_Xkaiseki) こんな感じで。
16:38 (Melt) よ、よくわからないです・・・。
16:38 (Rel) うん
16:38 (Momizi_Xkaiseki) 累乗以外のbit演算ってよくわからないのよねぇw
16:39 (Rel) 後から(sysvar(x) & 15)で記憶したpalnoを参照やね
16:39 (Momizi_Xkaiseki) なるほどー
16:39 (Momizi_Xkaiseki) Relちゃんありがとー
16:40 (Melt) むむむ・・・
16:43 (Momizi_Xkaiseki) しかしまぁ
16:43 (Melt) あー、なるほど分かったー。
16:44 (Momizi_Xkaiseki) ぅな氏のbit演算私とやり方違うからわからぬ…w
16:45 (Melt) その方法での確保ならpalnoは下がらないのかな
16:46 (Momizi_Xkaiseki) 単にpalno 記憶に変数1つ消費したくないからbit演算変数に組み込もうかなぁと
16:46 (Melt) うん、変数の節約にもなるから便利だね~。なるほどなるほど・・・
16:47 (Momizi_Xkaiseki) 以前ヘブンズさんがnumhelperをbit演算で記憶してたの思い出したからn。
16:47 (Momizi_Xkaiseki) たからね。
16:51 (Melt) ほむ・・・

ビット演算

1/19
21:54 (rakurai) あ、みやびちゃんpalno1個ずれてる まあいいや 誤差の範囲だ
21:54 (ni-san) 21億が1ずれても関係ないんじゃw
21:54 (YANMAR) とりま大きければいいからのぅ
21:55 (rakurai) いや、この1ずれがなかったら (palno&8)&&(palno&4)が使えるよ
21:55 (YANMAR) あー
21:57 (macbeth) あぁ、そういう指定方法もあるか…
21:57 (macbeth) ふむ…
21:57 (macbeth) そっちの方が管理楽そうだな…後で変えよう
21:57 (rakurai) 自分が弄ってるのは遥か上の桁だからねぇ

ビット演算

1/11
16:51 (Melt) えーっと
16:52 (Melt) sysvar(1)=1|2|4|8で下位4bitをonにできるんだよね?
16:54 (Sance) sysvar(1)=(sysvar(1)|1|2|4|8)じゃない?
16:54 (macbeth) varsetでsysvar(4)=(sysvar(4)|1|2|4|8)で4ビット目までonかな
16:54 (Sance) 変数が変わった…!
16:54 (Melt) 囲う必要があるのですかー
16:55 (Sance) 自分は癖で囲んでる・・・w
16:55 (Melt) ありがとうです~
16:55 (Sance) そして使うときは基本囲んだ方がいいからねぇ・・・
16:56 (Melt) 今新しいキャラで新しいことの挑戦中なので、中々難しいです。
16:56 (macbeth) 性能をビット演算で細かく管理するとか?
16:56 (Melt) うんうん
16:57 (Sance) 例えば trigger1=sysvar(1)&127=1とtrigger1=(sysvar(1)&127)=1だと違う反応がおきるとか(
16:57 (Melt) ほむ・・・。
16:57 (macbeth) とりあえず優先順位の処理が怖いから括弧が増えまくるうちの子達の記述
16:58 (macbeth) ちなみに性能をビット演算で管理するなら
16:58 (macbeth) 最初から想定して作らないと死ねる
16:58 (macbeth) 後付は厳しいわぁ…

ビット演算

11/30
22:34 (ni-san) trigger2 =var(47):=(var(47)|1)||1
22:34 (ni-san) これの意味って 47になんも入ってなかったら1入れるよ!であってます?
22:35 (macbeth) 違う
22:35 (ni-san) 違うのかー
22:36 (ni-san) でも1入ったんだよなあ
22:36 (Awamizu) var(47)の1bitをONだからね
22:36 (macbeth) var(47)の1ビット目をon + トリガー成立
22:36 (Awamizu) 1bit ON = 1
22:36 (Awamizu) 2bit ON = 2
22:36 (Awamizu) 3bit ON = 4
22:36 (Awamizu) こんな感じで値が入っていく
22:37 (ni-san) trigger1=var(47):=!(GameTime % 5)
22:37 (ni-san) これだとどうなりんす?
22:37 (Melt) あー、var(47)no
22:37 (Awamizu) 1か0かな
22:37 (Melt) var(47)の1bit目が0なら1bit目をonするのだよー
22:37 (Awamizu) 成り立てば1で成り立たなければ0
22:38 (Awamizu) ただし成り立たない場合は次のトリガーいかないので注意
22:38 (Awamizu) なので||1
22:38 (Melt) なので||1をつけないと途中で止まっちゃうのです
22:38 (ni-san) trigger1=enemynear,name = "AAA"
22:38 (ni-san) trigger1=var(48):=50-(Enemy,Life<=800)*4-(Enemy,Life<=600)*4-(Enemy,Life<=400)*4-(Enemy,Life<=200)*1+(Enemy,Life<70)*500||1
22:38 (ni-san) trigger1=var(47):=!(GameTime % 5)
22:39 (ni-san) こんな感じで倒せたn
22:39 (Awamizu) var(47)代入の後にトリガーなければおkですにゃー
22:39 (ni-san) その下はトリガー2ですね
22:39 (Awamizu) ただしtrigger2とかあったらそれ読み込む気がするのでなるべく||1
22:40 (ni-san) trigger2= enemynear,authorname = "BBB"&&!(enemynear,name = "CCC")||1
22:40 (ni-san) trigger2 =var(47):=(var(47)|1)||1
22:40 (ni-san) trigger2 =var(48):=2+random / 5||1
22:40 (Awamizu) trigger=var(47):=がなりたたない->trigger2を見る
22:40 (ni-san) こう?
22:40 (Awamizu) trigger1=var(47):=!(GameTime%5)||1でいいですにゃー
22:41 (ni-san) いや名前にいらんか
22:41 (ni-san) trigger1=enemynear,name = "AAA"
22:41 (ni-san) trigger1=var(48):=50-(Enemy,Life<=800)*4-(Enemy,Life<=600)*4-(Enemy,Life<=400)*4-(Enemy,Life<=200)*1+(Enemy,Life<70)*500||1
22:41 (ni-san) trigger1=var(47):=!(GameTime % 5)||1
22:41 (ni-san) trigger2= enemynear,authorname = "BBB"&&!(enemynear,name = "CCC")
22:41 (ni-san) trigger2 =var(47):=(var(47)|1)||1
22:41 (ni-san) trigger2 =var(48):=2+random / 5||1
22:41 (Awamizu) ですねー
22:42 (ni-san) ビット使ってないけど
22:42 (Awamizu) ビット演算は慣れさえすればスイッチだけなら簡単ですにゃー
22:43 (ni-san) :=がまだよくわかってぬえ
22:43 (Awamizu) :=は代入
22:43 (Awamizu) VarSetステコンのvar(X)=XYZみたいなのをトリガーでやるだけ
22:43 (ni-san) trigger3 =var(47):=1
22:43 (ni-san) だと1を代入するん?
22:43 (Melt) うに
22:43 (Awamizu) です
22:44 (ni-san) trigger3 =var(48):=250||1
22:44 (Awamizu) VarAddをトリガーで再現したいときはvar(X):=var(X)+1とか
22:44 (ni-san) だとどうなるんだろ
22:44 (Awamizu) 250です
22:44 (Awamizu) 優先度的に(var(48):=250)||1なので
22:44 (ni-san) 250代入するのはわかるとして後ろのはその後を読み込む保険記述
22:44 (ni-san) ってことかな
22:44 (Awamizu) ||1は無条件にトリガー満たすためですね
22:45 (ni-san) DDDの条件が
22:45 (ni-san) trigger1 = (GameTime%65>32)*9
22:45 (ni-san) trigger1 = gametime % 2 = 0
22:45 (ni-san) なんだけどどう書けばいいかなぁ
22:45 (Awamizu) んっと
22:45 (Awamizu) 攻撃実行の為の変数は何ですん
22:46 (ni-san) 攻撃が48
22:46 (ni-san) 条件が47
22:46 (ni-san) 落下が49
22:47 (Awamizu) var(47)が0じゃなければ攻撃するんかな
22:47 (ni-san) ですな
22:47 (Awamizu) だとしたらそのまま書いていい気がする
22:47 (Awamizu) trigger1=((GameTime%65>32)*9&&!(GameTime%2))
22:47 (Awamizu) var(47):=ですにゃ
22:47 (ni-san) &&かー
22:48 (Awamizu) 満たせばvar(47)=1満たさなければvar(47)=0
22:48 (Awamizu) 満たさないときは攻撃しないなら||1あってもなくてもいいと思いますが
22:49 (Awamizu) というか、*9はいらん気もしますが
22:50 (ni-san) trigger7 = enemynear,name = "DDD"
22:50 (ni-san) trigger7 =var(47):=((GameTime%65>32)&&!(GameTime%2))||1
22:50 (ni-san) trigger7 =var(48):=300||1
22:50 (ni-san) こうかな
22:50 (macbeth) ん…?
22:51 (macbeth) var(48)はダメージだっけ…?
22:51 (ni-san) ダメージです
22:51 (macbeth) なら
22:52 (Awamizu) 私もvar(47)の存在意義がよく割らない
22:52 (Awamizu) わからない
22:52 (ni-san) いらないのかー
22:52 (macbeth) trigger7=(enemynear,name="DDD")&&(GameTime%65>32)&&!(GameTime%2)
22:52 (macbeth) trigger7=var(47):=1
22:52 (macbeth) trigger7=var(48):=300
22:52 (macbeth) でいいんじゃない?
22:53 (Awamizu) var(48):=((GameTime%65>32)&&!(GameTime%2))*300にすればvar(47)いらないにゃー
22:53 (ni-san) AAAもそれでいいかな
22:53 (Awamizu) まぁ攻撃自体はしちゃうけど。
22:53 (ni-san) まあ47オンにしないと射たないのでって条件48にすりゃいいのか
22:53 (macbeth) それだと無駄な攻撃するから私は攻撃フラグも入れるねぇ
22:54 (ni-san) じゃあやっぱ47はいるか…
22:54 (macbeth) 特にProjとか無駄に常駐させると害にしかならないし
22:54 (ni-san) ですぬ
22:54 (macbeth) ヘブンズさん相手で詰むしそんなことすると(
22:54 (ni-san) trigger1=enemynear,name = "AAA"&&!(GameTime % 5)
22:54 (ni-san) trigger1=var(48):=50-(Enemy,Life<=800)*4-(Enemy,Life<=600)*4-(Enemy,Life<=400)*4-(Enemy,Life<=200)*1+(Enemy,Life<70)*500||1
22:54 (ni-san) trigger1=var(47):=1
22:54 (Awamizu) 私は攻撃フラグはProjeと本体HitDefの属性ごとをbit演算で求めてるから-6262とかで攻撃しないようにしてるにゃー
22:54 (ni-san) これでいいかな?
22:55 (ni-san) hitdefとprojを分けて管理してるのまでは読めた
22:56 (Awamizu) trigger8=var(52):=ifelse(Enemy(0),sysvar(2)>7000,256*256*256*128-1,100)||1
22:56 (Awamizu) trigger8=(var(53):=256*256*256*128-1||1)&&(var(54):=1||1)&&(var(55):=(var(55)|16+1*(RoundState=2&&!Enemy(0),var(41)&&!Enemy(0),var(42)))||1)
22:56 (Awamizu) めがてんのはこんな感じだなぁ
22:57 (ni-san) 読めん(w;
22:57 (macbeth) 本体hitdef出すかどうかは禁止フラグだけ使って後は各自調整だなぁ
22:57 (Awamizu) var(52):Damage var(53):FallDamage var(54):垂れ流しの周期 var(55):攻撃属性
22:57 (ni-san) trigger7 = enemynear,name = "DDD"&&(GameTime%65>32)&&!(GameTime%2)
22:57 (ni-san) trigger7 =var(47):=1||1
22:57 (ni-san) trigger7 =var(48):=300||1
22:57 (ni-san) こう?
22:57 (macbeth) 流石にそこまでスイッチかする必要性感じられないし
22:57 (macbeth) とりあえず||1いらないと思うの
22:57 (Awamizu) 0になる可能性なければ基本いらんからね
22:58 (ni-san) あれさっきいるって話はどうなったんだろう(w;
22:58 (macbeth) トリガー成立しない可能性があって下を読み込みたいとかならともかく
22:58 (Awamizu) trigger1=!(GameTime%2)みたいに0になる可能性のときはいるけど。
22:58 (Awamizu) 私はほとんど付けてますけどにゃー
22:59 (ni-san) 取りあえず動くか見てみるか
22:59 (Rel) 0にならなきゃとりあえず下読み込むからね
23:00 (Rel) 0になるのを利用してリセットだけさせといて後を読み込ませなくすることもあるけど
23:00 (Awamizu) その時々によりけりだねー

ビット演算

11/1
19:24 (DRM) ビット演算でフラグoffにするにはVarSetで(Var(X) | 4) - 4みたいな感じで良いんでしたっけ?
19:24 (Awamizu) 私はvar(X):=(var(X)&(4^-1))
19:25 (Rel) Var(X)-(Var(X) & 4)でもいいよん
19:26 (DRM) なるほどー。っていってもまだちょっと理解作業中ですが(
19:26 (DRM) -1って確か全部1でしたっけ?
19:28 (Rel) ですね
19:29 (Rel) 一回それでAIのコンボルートフラグが複数同時成立して焦った
19:40 (Rick_) ビット演算はどれが一番文字数少ないですかね
19:41 (Rel) 1桁代入
19:42 (Rick_) var(x):=(var(x)|n)-n 12
19:42 (Rick_) var(x):=(var(x)&(n^-1)) 15
19:43 (Rick_) しかしnの値が大きくなると後者の方が少なくなるかな?
19:43 (Rel) 前者はn2回出ますからねぇ...
19:43 (Rick_) しかし使い分けると混乱するかぁ
19:44 (Rick_) 記述を参考にする人が
19:44 (Rick_) 書き方は統一した方が綺麗ですしねー

ビット演算

5/4-5
23:39 (DRM) あうち、ビット演算がよく分からなくなってきたぞ…
23:45 (simotsuki) ビット演算はよう分からないまま使ってますw
23:46 (DRM) 使ったらかっこいいなーなんて思って使っていました(((
23:46 (DRM) 実際、あんま理解できてないという
23:47 (Rel) まぁ四則演算で捉えるには少々特殊というか...
23:48 (simotsuki) 大学で一度やったので二進数の定義自体は分かるんですけど、MUGEN上の&処理と|処理がいまいち
23:50 (DRM) XORもよー分からんですw
23:50 (Rel) http://31kei.blog88.fc2.com/blog-entry-153.html
23:50 (vesperAFK) [script]境界の影  二進数とビット演算
23:51 (Rel) http://31kei.blog88.fc2.com/blog-entry-155.html
23:51 (vesperAFK) [script]境界の影  ビットを複数利用して二つ以上の判断
23:51 (simotsuki) というかMUGENで使うには深く理解しなくて良いと思いますw
23:51 (daken) あとはこことかも
23:51 (daken) http://homepage3.nifty.com/andil/mugen/bit.txt
23:51 (vesperAFK) [script]
23:51 (simotsuki) ただ一つの変数で30個オンオフのフラグが使えて
23:52 (simotsuki) var(○) := var(○) | △でオン
23:53 (simotsuki) var(○) := var(○) - (var(○) & △)でオフと考えれば
23:54 (Rel) var(○) := var(○) & (△ ^ -1) でオフもできるます!
23:54 (simotsuki) オフの方法は複数あるみたいですなぁ
23:54 (DRM) oh...('A`)
23:54 (simotsuki) Relさんのやり方の方が多いのかも
23:55 (Rel) var(x) := (var(x) & ((A | B) ^ -1) | B)ってやり方は上手くいかんとです
23:55 (simotsuki) 後は△の部分を倍々して行きながら2の30乗まで使うだけですねw
23:55 (simotsuki) 29乗?まぁそこら辺はどうでもいいかぁ
23:55 (Rel) (AとBオフって後から改めてBだけオンにしたい場合)
23:57 (simotsuki) ただビット演算は()でちゃんと括らないと優先度の問題?か何かでうまく機能しなかったような気もします
23:57 (DRM) それだけは理解してますぜ(
23:57 (Rel) 指数の計算がちゃんと機能してれば直数字指定とか乗算値指定とかしないで済んだのn
23:58 (Rel) mugenだと2の5乗 = 64でしたかな
23:59 (simotsuki) 計算半端なく狂ってますよね~
23:59 (simotsuki) 下がったり上がったりしてたような気もしますしw
00:00 (DRM) http://hc8.seikyou.ne.jp/home/doloop/lec-exp.html
00:00 (vesperAFK) [script]2500loops
00:00 (DRM) 随分とおかしなことになってるんですなぁ・・・
00:02 (DRM) そういやビット演算ってトリガーに使えますかね…?
00:02 (DRM) trigger1 = (var(1) & 2)
00:02 (Rel) 使えます
00:02 (DRM) おー
00:02 (Rel) てか使ってる(´・ω・`)
00:03 (DRM) 上記のやつだとvar(1) = 2と同じっていうことで良いんでしょうか
00:03 (Rel) ノン
00:03 (DRM) おやまぁ...
00:04 (Rel) var(1)の中に2しか入ってなければそういう答えでもいいんですけどそれだとそのトリガーってvar(1)=2で良いですよねって話に(
00:05 (simotsuki) trigger1 = 2 って捉えた方が良いのかな?
00:05 (simotsuki) ちとここら辺私も曖昧w
00:05 (Rel) トリガーの部分はtrigger○ = 0とtrigger○ = 0以外 って考えた方が
00:06 (Rel) 気にするのは0になるかどうかですから
00:06 (simotsuki) とりあえず、var(1) & 2 なら1、!(var(1) & 2) なら0と考えても問題無いはず…
00:07 (Rel) それでもおkです
00:07 (Rel) 計算の部分となると(var(1) & 2) = 2と考えざるを得ませんが
00:07 (DRM) もしかしてvar(1)に4とか入ってても成立するのかしら…
00:08 (Rel) var(1) := (var(1) | 2 | 4) → (var(1) & 2) = 2 , (var(1) & 4) = 4 , (var(1) & 6) = 6
00:08 (Rel) var(1) := (var(1) | 2) → (var(1) & 2) = 2 , (var(1) & 4) = 0 , (var(1) & 6) = 2
00:08 (simotsuki) var(1) = 4 の場合は !(var(1) & 2)になりますね
00:09 (Rel) ですね
00:09 (daken) 4では無理ですな。ええと…2,3,6,7…えーい、面倒くさいw ←がvar(1)に入ってる時も成立しますね>var(1)&2
00:10 (macbeth) えーっと
00:10 (simotsuki) 二進数表記の4は100 なので var(1) & 2 は2番目の0と考えて頂けると分かりやすいと思います
00:10 (macbeth) &2だから2桁目か
00:11 (macbeth) 2=10、3=11、6=111
00:11 (macbeth) 7は1000だから満たさないんじゃない?
00:11 (Rel) 6 = 110
00:11 (macbeth) 6は110か
00:11 (Rel) 1000は8です
00:11 (macbeth) あぁそうか
00:11 (DRM) もしかして&3ってやると3桁目、&4ってやると4桁目が1になっていればONってことでしょうか…?
00:12 (macbeth) そうですね
00:12 (daken) そういうことでござるね
00:12 (DRM) あー、ちょい理解出来たw
00:12 (daken) あ
00:12 (Rel) &4は3桁目です
00:12 (simotsuki) ま、&○の方は
00:12 (daken) すいませんちがった
00:12 (macbeth) あ
00:12 (simotsuki) 倍々じゃないと使えませんので
00:12 (macbeth) 倍々だった
00:12 (DRM) おわわ
00:12 (macbeth) えーっと
00:12 (daken) 2の乗数が、それぞれの桁ですね
00:12 (macbeth) &2が2桁目、&4が3桁目、&8が4桁目
00:12 (simotsuki) 1,2,4,8,16が1,2,3,4,5となりますね
00:13 (Rel) 2の累乗数でない場合は分解して考えないとねぇw
00:13 (macbeth) 2^n-1?
00:13 (DRM) あー、なるほど!2乗かぁ
00:14 (DRM) ×2乗 ○2の乗数orz
00:14 (simotsuki) 30までしか使えないのも、ここが30乗超えると数値が大きくなり過ぎるからですねw
00:14 (Rel) まぁ1024 * 1024 * 4とかでいいんですけどね
00:15 (macbeth) 29まではオバフロしないんだっけ?
00:15 (Rel) 2147483648までですね
00:15 (Rel) これに1足すとオバフロ
00:15 (Rel) だった希ガス
00:16 (daken) 確か…31桁目までが正数で、32桁目が負数(=オバフロ)かな?
00:16 (DRM) 忘れないうちにメモしておかんとな…
00:17 (Rel) 32桁目というか...
00:17 (Rel) 10000000000000000000000000000001になるとオバフロ?
00:17 (Rel) (二進数表記)
00:17 (macbeth) えーっと
00:18 (daken) -2147483648 = 10000000000000000000000000000000 が負の最大値かな?
00:18 (Rel) まぁ2147483649のことです
00:18 (macbeth) 確か8桁が4つだから…
00:18 (daken) で、-1 = 11111111111111111111111111111111 という感じらしいです
00:19 (DRM) ん?256で&9かな...
00:20 (Rel) 256は2の8乗です
00:20 (Rel) 9 = 1001
00:20 (Rel) 256 = 100000000
00:21 (Rel) &は累乗の記号ではないので混同するとあれですお
00:22 (daken) 9桁目を動かしたい = var(xxx) & 256
00:22 (daken) という感じですね
00:22 (Rel) (var(x) & 2の(動かしたい桁目)乗)
00:22 (Rel) みたいな?
00:23 (daken) あ、違うか。&じゃ動かないですねアホか自分。9桁目のON/OFFを判定したい、でした
00:23 (Rel) うん、全く同じ状態になってもうた
00:24 (Rel) (var(x) & 2の(ON/OFFを判定したい桁目)乗)
00:26 (DRM) ふむふむ…皆さん、ご親切にどうもありがとうございますorz 感謝の極みです…
00:26 (daken) まことに残念ながら、もうひとつ訂正が。1桁目が2の0乗なので、正確には「判定したい桁目-1乗」でござるね。重箱突付きになりますが
00:26 (Rel) そういやせやな
00:26 (macbeth) そういえば
00:26 (Rel) 駄犬△
00:27 (macbeth) ましろのAliveが途中からマイナスの極大値になるけど
00:27 (macbeth) あれってビット演算で考えればいいのか
00:27 (macbeth) 要するに超即死で10000000000000000000000000000000にしてやればいいのね
00:28 (macbeth) まぁそのためには128の壁を何とかする必要があるんだけど(
00:28 (Rel) おさらい:(var(x) & 2の(ON/OFFを判定したい桁目-1)乗)
00:29 (Rel) おさらいとか久しぶりに使うんですけど
00:31 (DRM) すいません、DRMって人、とっても頭が悪いんです;
00:31 (Rel) 後はあれやな、応用というか
00:31 (daken) http://hogehoge.tk/tool/number.html
00:31 (vesperAFK) [script]2進数、8進数、10進数、16進数相互変換
00:31 (daken) ここを使って色々眺めてみるとわかりやすいかも?>2進数
00:32 (Rel) (var(x) & 2の((ON/OFFを判定したい桁目その1-1)乗 | (ON/OFFを判定したい桁目その2-1)乗 | (ON/OFFを判定したい桁目その3-1)乗 | (ry))とかできるんやな
00:32 (Rel) やっべ、ズレた
00:33 (daken) やろうと思えばできますねw
00:33 (Rel) (var(x) & (2の(ON/OFFを判定したい桁目その1-1)乗 | 2の(ON/OFFを判定したい桁目その2-1)乗 | 2の(ON/OFFを判定したい桁目その3-1)乗 | (ry))
00:34 (Rel) つまりさっきの(var(x) & 6)みたいなの
00:34 (Rel) (var(x) & 6) = (var(x) & (2 | 4))
00:36 (Rel) 2つ同時にONになってるかどうかならtrigger1 = (var(x) & 6) = 6でおっけーね
01:48 (DRM) んー、var(X)=260だとすると確認方法は(var(X) & 260)=4か(var(X) & 260)=256ってことになるのかな?
01:49 (simotsuki) む?
01:49 (simotsuki) ビット演算の場合は10進数で考えると混乱しますぜぇ
01:50 (simotsuki) var(x)=260の場合は
01:51 (simotsuki) 100000100 と考えるのが良さそうですよ~
01:51 (simotsuki) この場合、var(x) & 4 と var(x) & 256 がオンです
01:51 (DRM) それって3bit目と9bit目が1だから4と256ですよね…?
01:52 (DRM) 4 | 256でしたorz
01:54 (simotsuki) とりあえず、私もなのですが慣れないうちは2の乗数以外は使わない方が良いですw
01:56 (DRM) うへぇOTL
01:57 (simotsuki) 2の乗数だけを使用しても特に劣る事は無いですし、記述が若干長くなるくらい?
01:57 (DRM) var(X)=(4|256)とすると確認方法はtrigger1=(var(X) & 4)=4か(var(X) & 256)=256ってことかしら…
02:00 (simotsuki) いやー深く突っ込まれると実は私もよう分からないのでなんともw
02:00 (simotsuki) トリガーとして使用する際は
02:00 (simotsuki) tigger1 = var(x) & 4 か trigger1 = !(var(x) & 4) の二通りで良いと思いますよ~
02:01 (DRM) ふむ…
02:01 (simotsuki) とにかくビット演算はオンオフしか基本的には扱えませんし
02:02 (DRM) いやぁ、実はステート数が少ないからprevstatenoの代わりに使おうかと思って
02:03 (simotsuki) それはちょっとキツイかもしれませんw
02:03 (DRM) あのステートならオン、このステートならオフみたいな感じでAIに使おうとしてるんですがねぇ…
02:03 (simotsuki) なるほど
02:03 (simotsuki) それならいけるかも
02:04 (simotsuki) stateno = 260ならオンって事ですか?
02:05 (DRM) いや、stateno=200ではvar(1)に8を、stateno=400では128をって感じです
02:06 (DRM) 260ってのは4 | 256 = 260だから出てきた数字ですw
02:07 (simotsuki) 特に数字が8で無ければいけないとか、400だと128じゃないといけないとかは無いですか?
02:07 (DRM) 無いです
02:07 (simotsuki) ならいけそうですなぁ
02:08 (DRM) とりあえずvar(1)には個別ステートで2の乗数を代入して、-1のchangestateのステコンのトリガーで確認しようかと思って
02:09 (simotsuki) [State]
02:09 (simotsuki) type = null
02:09 (simotsuki) trigger1 = var(○) := ifelse(stateno = 100,var(○) | 1,var(○) -(var(○) & 1)) && 0
02:09 (simotsuki) trigger2 = var(○) := ifelse(stateno = 400,var(○) | 2,var(○) -(var(○) & 2)) && 0
02:11 (DRM) あー、それを常時監視でやってもいいってことです?
02:11 (simotsuki) ですです
02:11 (simotsuki) これを入れたら
02:12 (simotsuki) 確認したい所で、trigger1 = var(○) & 1 と使うと
02:12 (simotsuki) stateno = 100なら 1、違うなら0を返す事になります
02:13 (simotsuki) 正確には1じゃないか、ONとOFFですね
02:13 (DRM) おー、なるほど
02:16 (simotsuki) ただ、この場合は1フレームしかprevstatenoとしては使えませんので
02:16 (simotsuki) ちとトリガーを分割して工夫しなきゃいけないかもしれません
02:17 (DRM) 了解です
02:34 (DRM) しかし記述していくのも大変じゃw
02:37 (simotsuki) ですねw
02:37 (simotsuki) 最初の頃は書き直しまくったなぁ
02:37 (DRM) AIは何度も修正してるけど、ここまで構造を根本的に変えるのは…w
02:45 (DRM) あー、ステート少なくて助かったw とりあえず-3に書く作業は終了…

ビット演算

5/25
23:27 (beta_) ビット演算なんてしりませーん
23:27 (BluishCat) ビット演算は雛子を参考に。あれ、いろいろと至高な気がする
23:27 (beta_) ビット演算ってあれか
23:28 (beta_) ある単位からある単位までを一つの認識として
23:29 (beta_) |~全体~|の中の|~全体~|単位~単位|~|
23:29 (beta_) で認識したりするのかしら
23:29 (beta_) 理論的には
23:29 (BluishCat) いや、あるビットが1か0かで判断
23:29 (beta_) あー
23:29 (beta_) なるほど
23:29 (beta_) 大体理論は把握
23:30 (BluishCat) 一応十進数で変数には入れるんだけど、入れる数値と判定する時は二進数に直して・・・とか
23:30 (beta_) 大まかにいえば一つのvarの一つ一つの位の数字にて認識?する感じなのかな
23:31 (beta_) varつかって足りなくなったらやろう

ビット演算の否定、&の解説

5/25
23:31 (Rel_) 本体Var(X)=256
23:32 (Rel_) ヘルパーステートにて: !(Parent,Var(X)&256)とやると
23:32 (Rel_) !(Parent,Var(X)&256) = 1になる・・・
23:33 (Rel_) おかげで変数変わっても別モードのシステムヘルパーが消せない不具合
23:34 (Rel_) むしろそのモード専用でのシステムヘルパーがdestroyselfされていく・・・
23:34 (beta_) す、すこしこんがらがったぉ
23:35 (Rel_) あー、んーと
23:36 (beta_) 本体で変わるはずの変数が
23:36 (beta_) ヘルパーで弄ったせいで1のままくぁわらない?
23:36 (Rel_) モード1→ 変数Var(A)=256 Helper(XXX)
23:37 (Rel_) 本体はVar(A)=512になることでモード2に切り替わる
23:37 (Rel_) Helper(XXX)は本体がモード2に切り替わると消える
23:37 (Rel_) 消える時の条件→ trigger1= !(Parent,Var(A) & 256)
23:38 (beta_) 256以外なら消えるのよね
23:38 (Rel_) そそ
23:38 (Rel_) しかし
23:38 (beta_) しかし
23:39 (beta_) なんでか消えない?
23:39 (Rel_) !(Parent,Var(A) & 256) = 1 と判断されて、「モード1のとき、常に消える」という条件に変わってしまう
23:40 (Rel_) Var(A)=256のときね
23:40 (beta_) あー
23:40 (beta_) 256の時に出ていてほしいのに
23:40 (Rel_) 「モード1以外のときに消える」というつもりの条件が「モード1のときに消える」という条件になっている
23:41 (beta_) 逆の判定になちゃうのか
23:41 (Rel_) そういうこと
23:41 (beta_) 記述って難しいわ(´д`;)
23:41 (BluishCat) それは否定つけた場合のみ?
23:42 (Rel_) 否定を付けた場合のみです
23:42 (BluishCat) なるほど
23:42 (beta_) 逆に起動する条件にすればいいのかしら
23:43 (BluishCat) ということは、否定が機能して無い?
23:44 (Rel_) そうなりますね
23:44 (Rel_) 逆に消える条件を Parent,Var(A) & 256とすると
23:45 (Rel_) モード1の時に消えず、モード2の時に消えます
23:45 (Rel_) ・・・なんでかややこしいのがビット演算
23:46 (BluishCat) 否定は機能してるが、元が逆ってことかな・・・?
23:46 (beta_) Parent,Var(A) & 256 本体のVar(A)の中が256であるとき
23:46 (beta_) !をつけると
23:47 (beta_) !(Parent,Var(A) & 256) 本体のVar(A)の中が256でないとき になる感じはするのにねぇ
23:47 (Rel_) 感じだけはするんですけどねぇ
23:47 (BluishCat) そういえば前、デバッグ用スイッチをXOR使ってON、OFFしようとしてどうにもうまくいかなかった経験があるけど
23:47 (BluishCat) そういうことだったんだろうか・・・

以下「&」の解説
23:47 (beta_) つまり
23:48 (beta_) !(Parent,Var(A) & 256) 本体のVar(A)の中が256であるとき否定する
23:49 (Rel_) あー、厳密に言うとVar(A)&256というのは
23:49 (beta_) (=ω=)あ、あたまから煙があがが
23:49 (Rel_) ・・・2進数で表さないといけない上にここだと説明しにくいから止しとこう
23:51 (Rel_) 簡単に言うと 100000000 & 256 = 1
23:51 (Rel_) 間違えた
23:51 (Rel_) 100000000 & 256 = 256
23:51 (Rel_) 100000001 & 256 = 256
23:51 (Rel_) 100000010 & 256 = 256
23:52 (Rel_) 9桁目が1になる2進数なら&256のビット演算は全部256になります
23:53 (Rel_) 桁の小さい数で表しますと
23:53 (Rel_) 1 & 1 = 1
23:53 (Rel_) 11 & 1 = 1
23:53 (Rel_) 101 & 1 = 1
23:53 (Rel_) 111 & 1 = 1
23:53 (Rel_) 1001 & 1 = 1
23:54 (Rel_) 1桁目が1なら全部1です
23:54 (Rel_) 1000000000000000000000000001 & 1 = 1
23:54 (BluishCat) 10001 & 00001 = 1 ってことだしね。両方2進にすればANDはわかりやすい
23:55 (Rel_) ORもそんなに難しくはないですけどね
23:55 (beta_) 論理関数は頭が痛くなる
23:55 (BluishCat) 法則さえ覚えてしまえばビット演算は難しくは無い
23:56 (BluishCat) ただ、十進と二進が表記上まざるからややこしい
23:56 (BluishCat) 表記上じゃないな、表記と判定上か・・・
23:56 (beta_) 論理式、素人が考えるとあたまがおかしくなってちぬ
23:58 (beta_) とりあえず後回しにしていいですかせんせー
23:58 (BluishCat) 変数がどうしても足りない!って時以外は別に必要ない気もするw

|、&

9/21
01:26(okihaito) 「 || 」と「 | 」の違いって何だろ?
01:27(okihaito) 前者は良く使うからわかるんだけど後者はよくわからん
01:27(xxxppp) || :「or」の意味。複数の条件のどちらかを有効にさせる場合
01:28(xxxppp) |  :「||」とほぼ同じだけど、ビット単位での処理をする。
01:28(xxxppp) だってさ
01:28(okihaito) ビット単位?
01:28(xxxppp) 俺にゃわからんぬ
01:28(xxxppp) http://ja.wikipedia.org/wiki/ビット演算
01:28(xxxppp) これを参照白だと
01:28(xxxppp) あぁ
01:28(okihaito) 「 && 」と「 & 」の差も同じなのかな
01:29(xxxppp) 後のビット演算もURLに入れといて
01:29(xxxppp) &&と&も同じような感じみたい
01:31(okihaito) ふむ・・・
01:31(okihaito) 知らない単語がいっぱいで全然わからんというねw
01:32(xxxppp) 逆に初めて読んで分かったらすげぇよww
01:36(okihaito) 雛子即死させようと思ったがビット演算がわからんから理解できんw
01:37(okihaito) 軽く見てみたところ狙えばいけそうだけどなぁ・・・
01:41(okihaito) ビット単位ORがわかりそうでわからん・・・
01:53(xxxppp) 超即死投げって判定出るまで時間かかったりする?
01:53(okihaito) roundstateの移行が遅いのなら両プレイヤーを5150で待機してみるといいよ
01:54(xxxppp) ほうほう
01:54(okihaito) あとヒットポーズが無いと超即死ステートは読み込めないから時間かかるのはある意味当然ではある
01:55(xxxppp) おぉ、早くなった
01:56(okihaito) どちらかのプレイヤーがKOされた時KOされたプレイヤーが5150以外にいたら800Fくらい待機しちゃうからね
01:56(okihaito) 即死技の最後に5150に移動させるようにするのはそのため
01:58(xxxppp) メモ完了
01:58(okihaito) やべぇ・・・ビット演算意味わからん・・・ 初歩的な使用方法でもいいから教えて欲しいのう
01:59(okihaito) ウィキペディアじゃ余計なものもまとめられてるから混乱する
01:59(S_mechSuika) mugenで使えるもので解説が不足してるものは結構あるよNE
02:00(okihaito) んで ウィキ見てたら思ったんだけど ビットシフトってのは超即死でのアドレス操作とかで使えないのかな?
02:02(okihaito) あー・・・<<とかってエラー出るんだっけ? じゃあ無理か
02:02(okihaito) とりあえずもっと解りやすい説明が欲しい・・・
02:09(lunatic) ビット演算は2進法に直して各項を比較するって考えると分かりやすい
02:11(okihaito) 各項?
02:12(lunatic) 2の0乗、2の1乗、2の2乗・・・
02:13(lunatic) 代入の段階で工夫するのが基本
02:15(okihaito) んー?
02:16(okihaito) 2のn乗じゃないとエラー?
02:16(lunatic) 使いにくいと思う
02:17(okihaito) 何かいい練習法があればいいんだが・・・
02:17(lunatic) ビット演算のいいところは一つの変数に一度に多くの情報を詰め込めるところ
02:17(lunatic) システマーやルナティックのコマンド管理がこれ
02:18(okihaito) ふむ・・・後で見てみよう
02:19(okihaito) 2進数か・・・何か表のようなものがあればなぁ
02:19(lunatic) 例えばvar(0):=(var(0)|(1+4))てやると最後の3つだけで考えるとvar(0)には1の情報001と4の情報100の合わさった101が入る
02:21(okihaito) うーん・・・?数字としてしか使えないのかな?
02:22(marukyu-) 2進数は基本的に数だけですね
02:22(marukyu-) 文字もあらわせますが相当な記述と根気が必要です
02:23(okihaito) &と|でちゃんと思い通りに操作できればビット演算でかなり記述を省略できそうなんだがなぁ・・・
02:24(okihaito) どう使えばいいのかわからんのう・・・ 試行錯誤しながらじゃないと無理かなー
02:27(marukyu-) mugenで2進数使えるのか…
02:27(marukyu-) となると16進数も使えるのかな
02:29(okihaito) 2進数での限界値も10進数でいう2147483647と同じなのかな?
02:29(marukyu-) ですね。検証したことがないからわかりませんが、おそらくそうです
02:31(okihaito) そうか・・・ということは2進数は30桁までか
02:31(okihaito) まさかアクセサリの電卓を使う日がくるとはなw
02:32(marukyu-) 基本的にint型のオーバーフロー値がそれなのでlong型で定義してない限り32bitのソフトはその値以上はオーバーフローとなってしまうはずです
02:33(marukyu-) つまり32bitの整数型変数(varとか)はその値を超えてしまうとおオーバーフローを起こします
02:34(okihaito) long型って何だろ? intはわかるけど
02:34(marukyu-) intは32bitで指定しますがlongは64bitで指定します
02:35(marukyu-) でもlong型は-2147483647~2147483647の間を取るはずですので
02:35(marukyu-) intの0~2147483647to
02:35(marukyu-) 上限が変わらないはずです
02:35(okihaito) へぇ~・・・
02:36(marukyu-) 基本的にはintを使います
02:37(marukyu-) longはintの下限を増やしたものなので負の値を取らなければintで十分ですしね
02:37(okihaito) 0~ってことはintはマイナス使えないってことか?
02:37(marukyu-) -2147483647~0か0~2147483647のどちらかを使うことができたはず
02:38(okihaito) なるほど・・・ 32bitと64bitの違いが少しだけわかった
02:38(marukyu-) これを利用したのがアンダーフローですね。longならたぶんアンダーフローは見つからなかったですし使っても効果がなかったはず
02:39(marukyu-) ん、間違ったな
02:39(okihaito) まぁ上限値がわかればあとは実験していくだけか・・・ これは相当根気がいるなぁ・・・
02:40(marukyu-) long=intかな?
02:40(marukyu-) たしか64bitだとint使えないからlongにしただけで中身
02:40(marukyu-) 変わってないのか
02:41(marukyu-) あーそうか、64bitはdoubleか
02:41(marukyu-) longもintも32bitで範囲は-2147483648~2147483647
02:42(marukyu-) unsigned int と unsigned longが32bitで 0~4294967295
02:42(okihaito) どちらにせよMUGENは32bitだから64bitは話がそれていくだけだわ・・・
02:43(marukyu-) unsigned shortが16bitで 0~65535
02:43(marukyu-) 65535ってどこかで見たことがあるような
02:43(okihaito) 65535はポケモンとかでの上限ステータスで遊んでたなw
02:43(marukyu-) あーそうか
02:44(okihaito) たしかFFFFだったか
02:44(marukyu-) 一昔のゲームはunsigned short使ってるのか、
02:45(marukyu-) 最近は携帯ゲームでも32bitが多いからな
02:45(marukyu-) aa
02:46(marukyu-) longlongが64bitでlongが32bitなのか
02:46(okihaito) ん~・・・2のn乗にする理由は何でだろ?
02:47(marukyu-) 0と1であらわせるから?
02:47(okihaito) 別に奇数も使えるよね・・・? orの判断がやりにくいからかな
02:47(marukyu-) 0と1を二つ組み合わせると
02:47(marukyu-) 00 01 10 11
02:48(marukyu-) 三つだと
02:48(marukyu-) 000 001 010 100 110 101 111
02:49(marukyu-) nのn乗で増えていくからn^nでも良いような
02:50(marukyu-) ああ、そういうことか
02:51(marukyu-) 2進数は、20(1)、21(2)、22(4)、23(8)…と位が繰り上がるから。(( )内は10進数での数)
02:51(marukyu-) http://www.asahi-net.or.jp/~AX2S-KMTN/ref/bdh.html
02:54(okihaito) ということはやはり2のn乗の方がやりやすいからだな
02:54(marukyu-) 位が上がる時に2のn乗以外だと大変なことになるみたいですね
02:55(okihaito) 大変というか・・・計算が狂いそうw
02:55(marukyu-) これで全部使うのは正直心が折れると思います
02:56(marukyu-) 16進はまだ電卓でどうにでもなるので救いようがありますが・・・
02:56(okihaito) 2進数も電卓で10進数と互換変換できるよw
02:57(okihaito) ただやはり使いこなすのは難しいねぇ・・・
02:57(okihaito) 表を作るかな
02:57(marukyu-) ほんとだ
02:58(marukyu-) これですべての数字を使うと…記述が大変カオスに
02:58(okihaito) 解読難易度はトップクラスになるだろうねぇ・・・w
02:58(marukyu-) 雛子は別格でしょうね。わけわかんない
02:59(okihaito) とりあえず表作るかな 上限値が決まってるのならあっという間だ
03:00(marukyu-) ただ記述量は増えますね…
03:01(okihaito) それでもMUGENで使えるのなら使ってみたいな
03:02(marukyu-) がんばってください!

関連リンク
ビット演算[熄の箱庭]
ビット演算 「 & 」[熄の箱庭]
ビット演算「 | 」[熄の箱庭]
ビット演算 [lunaの倉庫]
二進数とビット演算[境界の影]
ビットを複数利用して二つ以上の判断[境界の影]

^^

7/19
07:45 (Remi) 今608氏のミズチのCNS見てるんだけどね、
07:46 (Remi) trigger1=(var(7):=(var(7)|1024))^^1←の^^って何www? どういう効果なんだこれw
07:47 (pkrs) まあ!=と似たような物と思えば良いんですけど
07:47 (samsara) 記載ミスじゃなかったのか
07:48 (pkrs) 普通に
07:48 (pkrs) ^^ The logical XOR operator. x ^^ y evaluates to 1 (int) if exactly one of x and y is nonzero, and to 0 (int) otherwise.
07:48 (Remi) なるほろ
07:48 (pkrs) helpにもこう書かれてるありますよ
07:48 (samsara) なる
07:49 (Remi) 記載ミスかと思ったけど何箇所もあるんだよねこれw
07:49 (pkrs) 左右のどちらか一方が成り立つ、かと
07:49 (pkrs) ちなみにゴジータなんかにも使われてたり
07:50 (samsara) mjd
07:51 (Remi) なるほろ、pkrs氏の英文を翻訳してみたふむふむ
07:51 (pkrs) 海外キャラのヘルパー式AIに使われてることが結構
07:51 (Remi) ll←これに近い意味かぁ(´・ω・`)
07:52 (pkrs) ||とはちがうよな…
07:53 (Remi) (;´Д`)あぅ サーセンw

 |   | 

 検索フォーム


 全記事表示リンク

 全記事表示(500件ずつ)


 プロフィール

vesper

Author:vesper

IRCチャンネルの
#凶悪MUGEN
#凶悪MUGEN_雑談
のログからMUGENに関するものを編集・公開しています。
修正した方が良い箇所があった場合は知らせてもらえると助かります。
MUGEN界隈からはリンクフリーです。
その他からのリンクはご遠慮ください。
このブログをリンクに追加

IRCへの入り方などは
IRCに関する記事
をご覧ください。

簡易凶悪MUGEN IRC情報
・ホスト名
 [irc.friend-chat.jp]
・ポート番号
 [6664]
・チャンネル名
 [#凶悪MUGEN]
 [#凶悪MUGEN_雑談]
 (以下はお好みで)
 [#凶悪MUGEN_艦これ]
 [#凶悪MUGEN_スマブラ]
 [#凶悪MUGEN_麻雀]
 [#凶悪MUGEN_緋想天]
 [#凶悪MUGEN_アカツキ]
 [#凶悪MUGEN_小説]
 [#凶悪MUGEN_絵チャ]

・推奨IRCクライアント
 LimeChat2


 カテゴリ

記述の子カテゴリは目安程度に考えてください。

 最新コメント


 最新記事


 カウンター

累計の閲覧者数:

現在の閲覧者数:

 RSSリンクの表示


他ブログ更新情報(最新70件)

仕様上、下記のリンク一覧でサイトリンクにあるサイトはこの一覧に出ません。

Twitter


基礎リンク集


リンク

サイトに断り書きがない限りリンクさせてもらっています。
リンクしてほしくない場合はお気軽におっしゃってください。