せいかはっぴょー。
1:CSVデータを基に敵の出現パターンを設定できるようになった
12番=鳥型、13番=人型、14番=ロボ型です。

なので、arrayに「12/13/13/12」と書くとこうなります。

「14」とだけ書くと、ロボがワンオペで出ます。

「14/14/14/14/14」なんて書いた日には、ロボがいっぱい来ます。大変ですね。
とにかく、敵の図鑑データさえあれば、いくらでも好きな組み合わせで敵が呼べるようになったわけです。
2:隊列の長さによって各々の敵の位置が変わるようにした

上述の画像の通り、敵の数次第で各々の立ち位置が変わります。
あと、地味ですが前列後列があります。見た目だけのものなので、システム上は特に区別はありません。限りあるスペースに、最大5体の敵をなるべくギチギチに見えないように並べるためのちょっとした工夫です。

敵の描画処理を関数化し、敵の数ごとにswitch文で描画位置を分け、1体ずつ描画するようにしました。上の画像は5体いる場合の描画処理です。
forループは細かい位置設定やスプライトの前後関係の設定には向かなかったため、このような方法を採りました。どーーーせ最大5体までしか出ないって決まってるしね。(なぜキレ気味?)
3:エンカ時のマップの座標に基づいて、敵の出現パターンを変えられるようになった
function getEnablePattern()
{
var enablePattern=[];
for (var t = 0; t < LENG(global.enemyPattern); ++t)
{
var arr=csvStringToArray(global.enemyPattern[t].habitat,true);
DEB(string(global.habitat));
for (var h = 0; h < LENG(arr); ++h)
{
if(string(arr[h]) == string(global.habitat))
{
PUSH(enablePattern,global.enemyPattern[t]);
}
}
}
//敵隊列パターンのランダム番号
var ran=irandom_range(0,LENG(enablePattern)-1);
var selectedPattern=enablePattern[ran];
//arrayの/を,に置き換える
var patternArray=csvStringToArray(selectedPattern.array,true);
var realEnemies=[];
for (var k = 0; k < LENG(patternArray); ++k)
{
for (var e = 0; e < LENG(global.enemyData); ++e)
{
if(global.enemyData[e].index == string(patternArray[k]))
{
PUSH(realEnemies,global.enemyData[e]);
}
}
}
//敵隊列の初期人数(oBattleの敵描画に使用)
global.enemyPartyScale = selectedPattern.scale;
//敵隊列の内容を代入
global.enemyParty=realEnemies;
}
マップでプレイヤーキャラが歩く度に、上記の処理が走ります。
- 今いる座標のhabitatを参照し、敵の隊列パターンと照らし合わせ、habitatが一致するパターンだけをenablePattern(出現する可能性があるパターン)として読み込む。
- enablePatternが複数ある場合、その中からランダムに一つのパターン(selectedPattern)を選ぶ。
- selectedPatternのarrayが規定している敵indexを読み込み、図鑑データ(global.enemyData)を基に、実際に出現する敵のデータを作り、グローバル変数global.enemyPartyに格納する。
左側のhabitatでは人型が1体、右側のhabitatでは鳥型が3体出るように設定しました。
ちゃんと作用しているのが分かります。
このゲームに本格的に取り組み始めてから、ちょうど1年ほどになりました。
更地を耕しているような地味な作業がずっと続いておりましたが、ようやくシステムの土台ができてきて…逆にもう何したらいいのかわからなくなってきた。
シナリオとかグラフィックに着手するには、まだ全然その辺の設定ができあがってないんだよなあ。
つ、つぎ…何作ろ?