スポンサーサイト

--.--.--.--:--

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

バグが起きない爆ラン記述方法(3/4)

2014.08.30.23:57

今回は未投稿記事をそのまま上げて終わりです。
この記事は2014年4月17日の未投稿記事となります。(作り始めの日か、完成させた日かは忘れました)

一応、この投稿を止めた理由(2つ)を。
 ・バグが完全に取れたわけではなく、全ての問題が解決しなかったため
 ・そもそもブラスラさんがブログの存在を知らないと思ったため

なにかの参考になると思うので投稿します。


それでは今回はこれにて

次回
「バグが起きない爆ラン記述方法(4/4)」に続く。


----------------------(以下は当時の記事そのままです)-----------------------
大変申し上げにくいのですが「爆ランⅢ1.6」をいじっていたらバグを発見しましたので、ブラスラさんに向けてご報告します。デバックの処理をしていたわけではないのですが、調べ物をしていたら偶然見つけてしまったので、もしよろしければ参考にしてください。


1.発見したバグがどういうものか
もしかしたらこのようなことに心当たりありませんか?
『海がもっと広くなるはずなのに、あんま大きさかわらんなぁ』(開発時の心境)

私も爆ランⅢ1.6をプレイしていて『マップの作りは非常にきれいなんだけど、爆ランⅡ改みたいに海らしい海がでないなぁ』と正直思っていました。ですがこれは『きっとブラスラさんが陸っぽい方が好きなんだろう』という解釈で完結していました。

ふとしたことがきっかけで内部データを見る機会ができたのですが、中身を見てみると
「(ランダム選択の)最大時でMAP全体の44%を"WATER"に変える」というスクリプトを見かけました。MAP全体の44%ですから、ざっくり言えば半分が水の領域になります。
ですが何度新しくゲームを始めても、MAPの半分を埋めるほどの水の領域がでてくる感じはしませんでした。(たまに少し多めの時はありました。)

最大時は低確率とはいえ、このでない感じはどうもそれとは違う感じがしました。
また、このスクリプトと異なる結果を見る限り、ブラスラさんが予期してない現象が起きていると言えます。
つまり、今回発見したバグとは
「(なにかしらが原因で)WATERの領域がうまく生成されていない」です。


2.バグの該当箇所と検証
では実際どこがバグっていたのか、該当箇所と検証について順にお話しします。

これからお見せする2つのスクリプトの記述場所は「<PLAYER_SETUP>」の少し下の部分です。

まずはこちらをご覧ください。(画像1)
20140417_01.png

(この画像の文字の色づけは、以前の記事で紹介したサクラエディタにて行っています。)

画像にも書いてありますが、この部分のスクリプトで「町の規模」を(ランダムで)決めています。


次にこちらをご覧ください。(画像2)
20140417_02.png


先に決めた「町の規模」のうち、「NOMAD」だったら処理Aを。「それ以外」だったら処理Bを。それぞれ行っています。
実はここがバグっている原因の箇所です。(私自身、この記述方法で間違っていないと思います。が、なぜかバグが起きてしまっているのです。)


以下は私が検証した結果です。
①先にランダムで選んだ「町の規模」が「NOMAD」だった場合、「処理A」が実行される。(問題なし)
②先にランダムで選んだ「町の規模」が「NOMAD」以外だった場合、「処理B」が実行されない。(バグ発生)

(ここで画像2つめの処理Aの前の「NOMAD」を「VILLAGE」に変更した場合)
③先にランダムで選んだ「町の規模」が「VILLAGE」だった場合、「処理A」が実行される。(問題なし)
④先にランダムで選んだ「町の規模」が「VILLAGE」以外だった場合、「処理B」が実行されない。(バグ発生)

つまり、なぜかわかりませんが、処理Bが実行されなくなっていることがわかります。
少し気になることがあるので、このまま検証を続けます。

(もし、処理Bの前の「else」をなくし「elseif ○○○」で、それぞれのケースをきちんと指定したあげた場合)
⑤水の量が増えることもあるが、増え方が不安定(バグ発生)

一見こちらは問題ないように見えますが、なぜバグと言い切れるかと言うと、実は検証する際、
・該当箇所のスクリプトをいじっただけのもの(パターン1)
と、
・前提条件として「VILLAGE」と「HIGH_WATER」を強制的に選ぶ注1ようにした(パターン2)
にて行っていました。
注1・・・ランダムの確率をいじってそれぞれが100%出現する状態になっている。)

ちなみにHIGH_WATERが選ばれることでWATERの割合は36%~44%になります。(%をより詳細に決めるスクリプトは他の箇所にて行われます。)
あまりに水の量が少なかったり、なかったりしたこともあったので、⑤もバグが発生していると言い切れました。


では、どうすればバグか解消されるのか。次は対処法のお話しです。


3.対処法
いきなりですが、こちらの画像をご覧ください。(画像3)
20140417_03.png

これは(画像1の)最初の「町の規模を決める」タイミングで、(画像2の)それぞれのケースでどう処理をするかを追加してあげたものです。(ちなみにこれが対処後の記述方法です。なお、こちらの記述をするにあたり、画像1と画像2の記述は削除、新たに画像3のものとして記述しています。)
いわゆる重複した記述になっていたので、最初に「NOMAD」などを定義してあげるタイミングで「(処理Aもしくは処理Bの)WATERレベル」も決めてあげましょう(まとめられるものはまとめましょう)。という風に直したものです。

スクリプトが長くなりますが、とりあえずこの記述方法で本来表現しようとしていた、それぞれの水の割合が反映されるようになります。


4.その他の『なぜ?』を知る
これまでの検証結果により、水の領域の生成がバグっていたことをお話ししました。
実はこれまでお話しした中に2つ、まだ疑問が残るところがあります。

この2つの疑問も解消していきましょう。

1つめ
「1.発見したバグがどういうものか」で話していた「ですが何度新しくゲームを始めても、MAPの半分を埋めるほどの水の領域がでてくる感じはしませんでした。(たまに少し多めの時はありました。)」の「(たまに少し多めの時はありました。)」です。

これはなんだったのかと言うと、検証の結果①②から推測できると思いますが
これは「NOMADが選択された時」です。
NOMADが選択された時は「処理A」が機能していましたから、その時はWATERの割合がうまく機能し、増えることがあったわけです。

2つめ
「町の規模でNOMAD以外が選択されていて、処理Bが機能していないのになぜ水の領域が作られたか」
これはおそらくになってしまいますが、バグっていたため正常には機能していなかったが、一応処理Bで行われた定義などはされていたんだと考えられます。

もし処理Bが完全に無視されていたのなら「HIGH_WATER」などが定義されず、
その後、実際<TERRAIN_GENERATION>で水の地形を作る段階になった時に「if HIGH_WATER」などが無視され、水がまったく作られない現象が起きるためです。水の生成がまったく無視されていたわけではなかったため、バグったまま生成されていたんだと思います。(「割合」とかおかしいところが多いのはこのためです。)

おかしい状態でも生成できた理由として、一例あげておきます。
「町の中心」や「羊」を設置する場合、スクリプトの中に
「number_of_objects *」(*は数量)という一文を記述します。
「1」と数量を指定すれば1個生成され、「10」と数量を指定すれば10個生成されます。

ですが、この「number_of_objects *」を記述しなかった場合どうなるのか。
記述しなかった場合は生成されないのかと言うと、実はそうではなく「最低限1個作る」という機能が裏で働きます。(たぶん)
その為、これと同じ現象が「処理B(水の割合)」がきちんと機能していないのにも起き、水の領域が作られたと考えられます。


なんだかすっきりしない感じでしたが、今回のバグについての検証を終わります。

最後に「3.対処法」によりバグが解消されたとしても、それにそって作った地形やオブジェクト配置ではなかったため、今度は違うところで不具合がでてしまうかもしれません。(バランス調整が必要かも?)
(また、今回ので全てのバグが取れたわけではないようです。ためしにWATER100%で置き換えをやってみましたが、プレイヤーランド以外にもWATER以外の地形がけっこうあったので。でもこれについては忘れてください。)



もしかしたら開発時にブラスラさんも気になっていたことかもしれないので記事にまとめました。その点ご了承ください。



スポンサーサイト

comment

Secret

プロフィール

スキタイ人の青年

管理人:スキタイ人の青年

最新記事
最新コメント
カテゴリ
月別アーカイブ
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。