サイトロゴ

フリーのRTSRPG「Millennium Legend」をメインとしたブログ、その他すぴブレの改造講座など。
 
重要事項
・途中にすぴブレとは全く関係のない謎の話があります。
・結論からいうと講座というよりはすぴブレの仕様上のバグの紹介です。
・途中の全く関係のない謎の話はあくまでも私の仮説です、もう少し検証データが必要です。
・若干無意識な茶番的なものが含まれています。
・所々つい意味の分からないテンションになっています。

はじまりはじまり~・・・

\   ジャン   /
false2.jpg

・・・・大半(とはいっても50%ぐらい?)の方は見たことがあると思います。
そして、この画像を見て 「あぁ・・これか・・」と思った方もいると思います。

本来ならば以下のような画像として表示されるはずです。
true2.jpg
(少し異なる場合があります)

本来こう表示させたいと思っていました・・・が、
何故か上のような謎の生物として表示されてしまいました。

しかし、一部の人は 「え?普通に正しく表示されているけど?」と思うはずです。(そういう方を探しています)

はい!ここから重要事項に書いてあった
私の根拠無し、検証無しの仮説を述べたいと思います。
思いっきり飛ばしてもかまいません。
下の方に分かりやすくここまでと書かれているので、
数行読んでから 何が書いてあるのか分からないと思ったら飛ばしてください。

すぴブレ 画像バグの真相に迫る!!(仮説)
私は最近C#やC++などの勉強を始めました。
とあるネット上の動画型講座でとあることを知りました。
メモリの配置方式(?)として主にリトルエンディアン、ビッグエンディアンというものがありました。
あるプログラムでメモリ上に 0b 00 00 00 という列を書き込む処理を書きました。
あれですよ、C++をやってる方なら分かると思いますがポインタについて学んでるところですよ。

ここで一つ、0b 00 00 00 という並び方をリトルエンディアンといいます。
ビッグエンディアンという並び方だと00 00 00 0b と並びます。

この時点である程度、察しがついた方も・・

そう、ここでちょっと話題をすぴブレに戻してみましょう

すぴブレのTexフォルダの底にあるwolf.xmlというファイルを開いてみました。
その中の一部に注目すると・・・

     <Action name="stop">
          <Direction min="1" max="1.6">
               <Time min="0" max="1000">
                    <Plane name="bd"/>
                    <Plane name="hd"/>
               </Time>
          </Direction>
          <Direction min="0.4" max="1.0" rev="1.25"/>

          <Direction min="1.6" max="2">
               <Time min="0" max="1000">
                    <Plane name="bu"/>
                    <Plane name="hu"/>
               </Time>
          </Direction>
          <Direction min="0" max="0.4" rev="1.75"/>
     </Action>

すぴブレの画像のシステムは上から順に読み込まれます。
WorldMAPに居る時は何があっても正しく表示されるはずです。
しかし、バトルになると・・一部の環境で逆転します。

そこで、もし、画像が変な風に表示されていたら
上にあるこの二つの箇所を少しだけ入れ替えてみましょう(一部切り抜き)
変更する前にバックアップをお勧めします。
あと、普通に表示できている方はスルーしてください。
変更前:
    <Plane name="bd"/>
    <Plane name="hd"/>

    <Plane name="bu"/>
    <Plane name="hu"/>

変更後:
    <Plane name="hd"/>
    <Plane name="bd"/>

    <Plane name="hu"/>
    <Plane name="bu"/>

としました。

そうしたら・・WolrdMAPで・・・変になります。
ただし、バトルでは正しく表示されるようになるはずです。

このようにバトルとWorldMAP(他、ウィンドウなど)では表示の処理が違うことが分かりました。

さて、話を少し戻します。

例として 00 00 00 00 という8bitのメモリがあったとします
<Plane name="bd"/> これをbd とします。
<Plane name="hd"/> これをhd とします。

あるプログラムでメモリ上に 00 bd 00 hd という列を書き込む処理を書きました。
ビッグエンディアンで並べられた場合 そのまま 00 bd 00 hd と出力されました
ゲームのバトルでは正常に表示されました。
リトルエンディアンで並べられた場合 hd 00 bd 00 と出力されました。
ゲームのバトルでは順番が逆転して表示されました。

すぴブレのシステムでは ウィンドウなどでは普通の画像から表示していますが、
イベントやバトル時には 3Dのポリゴンテクスチャとして変換されてから表示されるそうです。

3Dに変換されるときに一つ、事件が起こります。
その原因はビッグエンディアンとリトルエンディアンという二つの方法があったからです。
元々GeraHa氏はビッグエンディアンをメインとしてシステムの開発を進めていたと思います。

では、何を基準にエンディアンがビッグだったり、リトルだったりするのか・・・

答えはCPUです。 CPUの処理によりエンディアンが変わります。

とある動画型講座では次のように解説してました(正しいかどうかはわかりませんが・・・)
・AMD系列がビッグエンディアン
・intel系列がリトルエンディアン

という答えにたどり着きました。(正しいかどうかはわかりませんが・・・)

私は複数(三つ)の環境ですぴブレのシステムで開発していました。
偶然、私はAMDとintelの両方の環境で作業をしていたのです。
1代目 Vista AMD Sempron (ディスプレイがお亡くなりになりました)
2代目 Win7 64bit AMD A8-3500M (USB端子が粉砕しましたが、時々使ってます)
3代目 Win8 Intel Core i7-3630QM (今使っています)

1代目、2代目のノートパソコンではすぴブレは正常に動き、正常に表示されていました。
3代目、お前はダメだ。

実際にAMDとIntelで違うのかは検証できていません。
すぴブレを入れられるパソコンが少ないです。
GeraHa氏は恐らくAMDなCPUのパソコンだったはずです。

あ、私はAMDですが正常に表示されません。という一言で上の仮説は粉砕します。
もしよろしければ掲示板の方にゲームのスクリーンショット付きでCPUを教えていただければ幸甚です。

ここまで!

以上、かなり隙がある仮説でした めでたしめでたし~・・・

さて、ではどうやったら綺麗に表示できるのか!
知りたいことはここからです。

私はとても簡単な方法で解決しました。
解決方法は複数ありますが、これが一番簡単だと思います。

次のような画像定義があったとします
    <Plane name="bd"/>
    <Plane name="hd"/>
このままだと 正しく表示されない場合があります。
なぜなら環境によって下から読み込まれる場合があるからです。

    <Plane name="hd"/>
    <Plane name="bd"/>
じゃあ、こうしてみようか!
しかし残念ながらバトルとイベント以外の部分が逆になってしまいました・・
しかも一部の環境の人は表示が全滅してしまいました・・・

    <Plane name="bd"/>
    <Plane name="hd"/>
    <Plane name="bd"/>
これでどうだ!
はい、これです・・・

終わり

答えは上から読んでも下から読んでも同じになればいい です。
回文だよ・・

私の二つの環境でテストした結果、
どちらも正常に表示されることが確認できました。
次のアップデートに反映されます。

欠点としては・・ほぼ全ての画像定義ファイル書き換える必要があるのです。
あと 武器の画像が一番前に表示されるのは回避できませんでした。


追記:
既にある方が動画にしてニコニコ動画の方に上げていたのです・・・(さらに2年以上も前に
この記事の存在理由は長ったらしい謎の仮説(しかも崩壊寸前)しかないかもしれません・・

ということで一つ検証してみました。

ある画像定義のファイルの中のさらに一つのコマの3行を20倍にしてみました。
そのキャラを36体表示させ動かしたあたりから 少し重くなってきました
単純計算で 60*36/3=720
一瞬のうちに720体のキャラが動くと処理がやばくなってくるようです。

もちろん、この結果は使用しているパソコンに依存しますので正確な値ではありません。


すぴブレでベンチマークイベントでもつく・・・らない・・かな・・?


















コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://stnsllethouse.blog.fc2.com/tb.php/112-715da5f8
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック