スプライトバグへの対応

時にmugen落ちにつながることもあるスプライトバグ
これの対処として「ヘルパーをなるべくownpal=1で出す」という対策をたまに聞きますが、個人的には逆にownpal=0で出した方がいいんじゃないか?という話です

スプライトバグの発生機序は
①ownpal=1のヘルパーからownpal=0のヘルパー or explodを出す
②元となったownpal=1のヘルパーをdestroyselfで消す
③消した跡に他人のownpal=1のヘルパーが入ってくる
④するとownpal=0のヘルパーやexplodは、新しく入ってきた他人のヘルパーのスプライトのデータをもとに自身のスプライトの表示を行おうとする→齟齬が生じて落ちる
という形で起こります。この時実際にmugenを落とす処理を発生させたのはたしかにownpal=0のヘルパーなのですが、その遠因になったのはというと「自分の『ownpal=1のヘルパー』を消した跡に、他人の『ownpal=1のヘルパー』が入ってきたこと」です。対戦している両者がownpal=1のヘルパーを出し消しすることで、スプライトバグの発生準備が整うわけですね

もし「自分がownpal=1のヘルパーのみを用いる」ことによって対策を取ろうとすると、自分のヘルパーがバグを起こすことはなくなりますが、相手がバグを意識していなかった場合に相手側でバグを起こしてしまう危険があります。その点ownpal=0のヘルパーを用いればバグが発生する余地はどちら側でもなくなります
ownpal=1のヘルパーは出す瞬間mugenに余計な負荷がかかって重くなるので、快適さの観点からもownpal=0を優先させるとよさそうです

当然見栄えの観点から本体が色変えをくらった影響を受けないように独立したパレットのヘルパーを使いたい場合は多いでしょうが、出し消しさえしなければownpal=1でも問題ないので、初めから透明な状態で常駐させておき必要に応じてアニメを変更させて画面に出す、という方法があります。あるいは、ヘルパーは完全に透明にしておきownpal=1のexplodを貼りつけて表示を行うことも可能でしょう
スポンサーサイト

ガーステ生成

前記事コメにて

> 記事と全く関係ない質問なんですが、ガーステ生成しててもmovetype = iだとタゲライフ貫通しちゃうんですか?何か毒でライフが0になるんですよね…

白虎の性能とは関係なさそうだし、純粋に製作系の質問かな?せっかくなので自分で改めて確認した上で記事にしてみました

死の宣告とKO表示



広告消しがてら、この試合で起こったダブルKOについて解説
追記からどうぞ

凍結維持

凍結しながら普段と同じようにモーションを表示させる場合にChangeAnimで強制的にAnimを進める時、HitPauseTimeがある時、ではなく「1つ前のフレームでHitPauseTimeがあった時」にAnimを1枚進めるようにすると、HitPauseTimeの有無が切り替わった瞬間もモーションが止まったり飛んだりせずに正常に表示されるようです。

…これで凍結中にアニメの1枚目を表示しようとすると透明になる内部処理が無ければな~
すっとばして2枚目を表示するようにすればとりあえずキャラが透明になったりすることはなくなりますが、すっとばしているということはモーションが変わってしまっているわけで、なんか美しくないんですよねえ…なんでこんな要らない処理入れたんだか…

Type mismatch detected

このエラー、ちゃんと法則性があるみたいですねー。

Debug Library Error message エラー表示 記述の間違い

上の記事内のType mismatch detectedの所で説明されています。

補足説明を追記に書いてみました。

XOR

普通の記述ではあまり目にすることはないであろう " ^ " " ^^ "の記号ですが、私はビット演算のスイッチで多用していたりします。

[State ]
Type = VarSet
Trigger1 = (スイッチをオンにしたい時の条件A) ^^ Var(0) & 1
Var(0) = (Var(0) ^ 1)
IgnoreHitPause = 1

条件Aが真の時はスイッチがオンに、偽の時はオフになります。
値が違う時だけ代入を行うので、毎フレームリセットして代入するのに比べて処理が軽いです。並列混線ヘルパーなんかで変数代入をしようとするとこの違いが大きいんですよね~。
" != "を使っても同じ意味のトリガーを書けますが(というか0,1以上の数を扱う時は!=でないと無理)、まあこっちの方がかっこいいので(*´ω`*)

凍結解除

もしかすると545~548番目で凍結解除を行った場合、凍結の数値はそのプレイヤーの行動直前に減るのだろうか?
利用型探査ヘルパーの罠探査の制御がし辛い…めんどくさす。

追記:以前はてっきり、フレーム終了時点で処理されるものと思ってたのよね〜
ステートを読んだ次のフレームに手前の混線ヘルパーからリダイレクトした時点ではまだ凍結解除されていないことを確認したのです。

2P側で開幕混線が動かないキャラ

こういうキャラって、結構いるじゃない?

ヘルパーの枠をいたずらに全部埋めてしまってお互いに演出や時止め解除に支障が出たり、大量のヘルパーを毎フレームごとに出し消ししまくるせいで重すぎて試合観戦がなりたたなくなったり…

こういう症状が出ることを製作者さんが把握していても、「原因がわからん…まあ2P側だしいいかー1P側の殺傷力が大事だしー」、みたいな人も結構いるようです。

しかし、これらは神キャラとしての実力を発揮できないという点のみならず、試合を観戦する側にまで負担をかけるなかなかに重い不具合です。
可能であれば積極的に直すべきと思うので、自分で調べてみて原因と思われることを書いてみます。
この界隈ではどちらかというと素人に分類される私があまり偉そうなことを言えるものでもないのですが…参考にしていただければ幸いです。必要であれば訂正は随時行います。

8/8 追記

内容は続きからどうぞ↓

試合終了処理

mugen131227_2013122717444683b.png


画像はキャラ本体を一定時間で自殺するようにして、ヘルパーで var(0) : loseKO, var(1) : !root,alive, var(2) : roundstate >= 3 の時間を代入させて、計測したものです。なんかつぶれてしまってますが・・・var(0)=301,var(1)=300,var(2)=301になってます。

どうやら処理の流れとしては

本体死ぬ → ヘルパーで!root,alive感知 → フレームの最後でlosekoの判定を行う → 一周まわってヘルパーで感知

てな具合かな。

汎用mugen落とし防ぎが全然うまいこといかぬ・・・

蘇生

KO判定のタイミングがいまいち不可思議ですな。
こっちが自殺して試合終わらせているはずなのに、判定がでるまでに蘇生して回復しておくとLoseフラグが消えているというね。強制死の宣告はこれを利用しているという話だけども。
プロフィール

skeleton

Author:skeleton
いらっしゃいませ
当ブログはリンクフリーとなっております。報告して頂ければ、こちらからも相互リンクさせていただきます。

連絡:
toramarusho"~(=^・ω・^)"yahoo.co.jp
"~"をいつもの文字に

"http://"が禁止ワードに設定されています。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
アクセスカウンター
オンラインカウンター
現在の閲覧者数:
公開しているもの

白虎(ver0.0067β)

メイン公開キャラ
寅丸星改変
最大目標は神最上位レベルでの殺傷力最強だがまだまだ未完成…
そのうち格ゲーもできるようにしたい


神みずか改変パッチ(ver1.063)

神みずかが上位神化するパッチ
見た目はエフェクトなだけ、攻撃は全て裏でシステム管理の凶悪ガチパッチ

当身kfm
撃破挑戦キャラ
撃破挑戦キャラのくせにmugenを落としにかかるアホキャラ
とあるキャラを防御面でリスペクトしているがどうやらうまくいっていない模様

2P側対応親変更テンプレ
2P側でもバグらずに最終ヘルパー&開幕混線&親変更が使えるテンプレ
混線以上のキャラを製作する際は参考にどうぞ
最終ヘルパー設置のための解説テキストが入っていないので別に上げておきました

テトリス演出保護パッチ
裏ルートが使えなくなりました
Let's play tetris !
ブログ内リンク
リンク
検索フォーム
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
RSSリンクの表示