制作日記

こういうの作った方が、逃げにくいじゃない

まだまだ

バグが残ってるもんなんだな
今回のも結構酷い
キャラ制作してるつもりが、クラッキングしてた
凶悪キャラって時点で、クラッキングしてるけど

MUGNEキャラ制作とはいったい……


再現可能な強制終了は一通り調べたほうが良いかもな
試合の勝敗に繋がるとは限らないけどね、特に試合開始前に落ちるような場合は

これは酷い

http://yonreimukaityo.blog95.fc2.com/blog-entry-718.html
-リンク張られたので説明を追記
落ちる原因はスタック上でのバッファーバーフローによるリターンアドレスの改竄
cnsから読み込んだ文字列をスタック上にコピーしてるんだけど、このコピーで文字数を制限してない
よって、確保していたバッファを超えて書き込んでリターンアドレスまで到達
変なところに飛んでアクセス違反に引っかかるなり、変な命令実行するなりして強制終了
予防策として、キャラの記述と直接的に関係のない文章をコメントアウトせずに書かないこと
コメントアウトしないってことは、MUGENはそれを読み込んで何かしらの解析をしてるってこと
読み込み時間の増加につながるし、良いことは何もない
特に日本語(シフトJIS)は2byte文字だから、データ上では見た目以上に大きいので注意
追記ここまで-

詳細は省略、キャラセレで選択されるとメッセージボックスを出す
見た目でわかりやすいからメッセージボックスにしてるだけで、実際には……
MessageBoxW.png

どこまでのことができるかはわからん
これ使ってどうこうするような知識はないし、調べてまでやるつもりもない
ただstatedefが無駄に長いキャラは起動しないようにっていう注意喚起目的

ちなみにリンク先には64bitって書かれてるけど、64byteの間違いと思われる
64bitって半角英数7文字っす……

引数とかの評価順について

ちょっとマイナー?なお話

引数の評価順ってのは、MUGENがどういう順序で引数を解釈するのかってこと
例えば引数が複数あるトリガー、ifelse
ifelse(1,2,0)
このとき引数2と引数0がどういう順序で評価されるかは保証されていない
これは意外と気を付けなければならないこと

単純に数字をそのまま指定するだけなら何の問題もないけど、
ifelse(1, var(0) := 1,var(0) := (var(0) + 1))
とかは、必ずしもvar(0) := 1の後にvar(0) := (var(0) + 1)が実行されるとは限らない

winmugenを使い続けるなら問題ない
けども1.1だっけ?とか今後の新バージョンに対応するつもりなら、上記みたいな書き方は止めたほうが良い
保証されていない以上、ある日突然評価順が変わって計算が狂う可能性もある

ステコンなんかも同じことが言える
各オプションがどういう順序で評価されるのか
これも保証されていない以上、ある日突然変わる可能性がある
winmugenはバージョンアップされないから調べる価値はあるけど、1.1は調べても無駄
完全に無駄ではないだろうけど、その調査結果に依存した記述をするのは止めた方が良い

プログラムっぽく

というか、手続き型っぽくcnc記述

常時監視とメインルーチン用のステート用意して、
そっから他のサブルーチンステートに飛ぶように

問題点はコールスタックとローカル変数辺り?
サブルーチンから他のサブルーチンを呼ばない(再起処理のみ認める)なら
コールスタックは繰り返し回数だけ保存すればいいので、問題ない
階乗求めるみたいに
f(x) {
if (1 == x) return 1;
else return x * f(x - 1)
}
みたいに1回呼び出されるだけならかなり簡単
複数回呼び出される場合でも、ルーチンを分割してやって、なおかつ再帰用のステートを作れば行けるかな?

メインに戻る分には、どこから飛んだかを記憶しておいて、そこまでの処理を飛ばせば済む
もしくはselfstate前後でメインルーチンのステートを分割してしまうか

ここらへんまではテストキャラで大体実装したことある

ローカル変数の実現は厳しい、explod使うぐらいかな?
ステート番号+繰り返しの回数とかをIDにして

手続き型でも、それっぽくが限界
オブジェクト指向で組んでみようとか思ったけど、無理
ポリモフィズムとかどうやって実現したら良いんでしょう

TypeScript

そんなのも出来たんだねー
これを機にjavascriptも覚えてみようかしら

というか、javascriptってクラスとかないのな
大変だねー
プロフィール

Author:drab
霊夢改変キャラ
「12 3 ! {V} [_]」
公開中
L霊夢でもl_reimuでも好きなように読んでください

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク