RPG01

MAGI JAVA -Make a game in Java-
JAVA Game作成講座 031回
敵にやられた場合の処理 デスルーラを作る


kouza031 jarファイル



[敵にやられた場合の処理]
思うように時間が作れず、あと少しがなかなか進まない。
一作完成させて公開したいのだが、ゴールが遠い…。
愚痴っていても仕方ないので出来る範囲で進めて行くしかない。

今回はまた少しの改変だが、ゲーム的に重要な処理になる。
戦闘に負けてマップに戻るとまた戦闘に入ってしまう。
HP0で再開するのですぐ全滅→また戦闘→全滅という地獄ループに入る。
それを防止するための処理。
即タイトル画面に飛ばす形でもいいのだが、それでは厳しい。
特定の場所に逆戻りさせられる形…つまりドラクエ方式にしてみた。
そもそもタイトル画面作ってないし…。

今回いじったのは主にGamedataクラス。
それとEvent実行クラス。


[GameDataクラス]
mapEnemySet1(18,14,0,11,6,1,0,0,2);

呼び出し処理。要素を一個増やして3要素セットするようにした。
6=evnum,1=movetype,から先が、
enemytype,enemylv,そして死亡時に飛ばすマップナンバーが入る。
フロア指定がないが、町、城などの階層の無い場所に飛ばすのでマップナンバーだけでいい。
入力変数は極力数を減らした方が後々使いやすい。


//マップ敵専用のセット。
public void mapEnemySet1(int x,int y,int shift,int granum,int evnum,int moveType,int dt1,int dt2,int dt3) {

ObjectBase obj=new ObjectBase();
Boolean objDelete=false;
obj=odtSet.dataSetEasy(objCount,x*32,y*32,shift,granum,evnum,moveType,dt1,dt2,dt3); //granumは0で入れると自動的にイベントナンバーに適した絵を当てはめる。
obj.setMapSize(mapSize[0]*32, mapSize[1]*32);
obj.blockPassing=false;
objs.add(obj);
objCount++;


}

追加した物を込みでodtSetにデータ渡しする。
dtが1,2しか使わない従来型でも0をパスするように作り替えている。
丸ごとコピーしないとエラー連発する。


[EventExecutionクラス]
public void dataSet(GameData gdt) {

//--中略--
if (evnum==5) { //場所移動イベント
datablock[0][0]=9;
datablock[0][1]=0;
datablock[1][0]=10;
datablock[1][1]=someData[0];//固定移動先1-x / 否0
datablock[1][2]=someData[1];//mapnum
datablock[1][3]=someData[2];//floornum
datablock[1][4]=someData[3];//x
datablock[1][5]=someData[4];//y
datablock[1][6]=someData[5];//shift
datablock[2][0]=9;
datablock[2][1]=1;
datablock[3][0]=999;
}
if (evnum==6) { //戦闘イベント
datablock[0][0]=11;
datablock[0][1]=0;
datablock[1][0]=12;
datablock[1][1]=someData[0];
datablock[1][2]=someData[1];
datablock[2][0]=17;
datablock[3][0]=999;
datablock[4][0]=9;
datablock[4][1]=0;
datablock[5][0]=10;
datablock[5][1]=someData[2]; //移動先固定のマップ移動
datablock[6][0]=9;
datablock[6][1]=1;
datablock[7][0]=999;
}


//以下略

手を加えたのは戦闘イベント部分だけだが、比較用に場所移動イベントも写しておいた。
戦闘に勝利するとphase++して17を通過し、イベント終了する。
17というのはオブジェの削除。場所移動、ロードなどをするまでオブジェを無効化する。

場所移動前にフェードアウトし、移動後にフェードインするのは上記のイベントと同じ。
ここでのポイントは、10の場所移動イベントに対し、1要素目のみを使用している事。
上の通常の場所移動イベントでは、ここは0で入ってくる。
1以上をセットすると、この要素のみを使って移動先を強制で固定する。

public void battleStart() {

bPart.eventStart(gData);
if (bPart.battleEnd) {
if (bPart.bResult<=1) {
phasePlus++;
}
if (bPart.bResult==2) {
phasePlus=3;
}
}


}

バトル終了後にbResultに戦闘の結果が入る。
勝ったら1、負けたら2。
負けた場合は勝利の処理をスキップしてフェーズ3つ進めた場所から処理を再開。
つまり、場所移動して拠点に逆戻りさせる。

//---------------------------------------------------------------------------
// (010) 場所移動イベント。最も多用するので、正確に作る。
//---------------------------------------------------------------------------
public void mapChangeSet(int[] dt) {

int[] goalPlace=new int[10];
int [] gp=new int[10];
//オブジェのsomeDataから行先を取り出すケース
if (dt[1]==0) {
gData.mapNumberSet(dt[2],dt[3]);
mapMoveDataSet(dt);
}
if (dt[1]>=1) {
if (dt[1]==1) {
gData.mapNumberSet(1,0);
int[] kdt= {0,0,0,0,11,10,8};
mapMoveDataSet(kdt);
}
if (dt[1]==2) {
gData.mapNumberSet(2,0);
int[] kdt= {0,0,2,0,11,10,8};
mapMoveDataSet(kdt);
}
}
phasePlus++;


}

これが場所移動イベントの固定移動追加版。
dt[1]が0の場合は従来通りオブジェから移動データを取り出すが、
1以上が入っているとオブジェから取り出さずに固定値を強制入力する。
いわゆるルーラの場所移動、リレミトの場所移動に近い。
タイトル画面からゲームのスタート地点へ動かす場合もこの処理を使う。
オブジェ無しでも読み込めるため、非常に便利だが行先が固定なので使いどころに注意がいる。

次はボスの配置をする。
今までの応用なので大した処理ではないが、
まだ敵のデータを二体分しか作ってないので新作する必要がある。
これが出来たら次はいよいよタイトル画面を作る。
ボス作成、タイトル作成の順に作る。

諸事情で更新が遅れる。来週は何も作れないかもしれない。


・トップページへ戻る
inserted by FC2 system