セミオート勇者
これまではユニットのデータを下記のようにObject型で管理していました。
var unitData={
slime:{
maxHp:20,
str:8,
vit:3,
speed:3,
weight:3,
area:[0,8],
rarity:1,
exp:1,
money:2
},
…中略…
};
これならスライムのデータを参照したいときはunitData.slimeと書けばよく、名指しでの参照に関しては非常に都合がよかったんです。
しかしほとんどの戦闘がランダムエンカウントになる実際の環境においては名指しで呼ぶケースなど滅多になく、さらに名前がキーになってしまっているせいでrandom関数で取得した数値からユニットを選び出すことができないという重大な欠陥が…。
なので下記のようなArray型に変更。関連する部分のコードも直さないと^^;
var unitData=[
{
name:"slime",
maxHp:20,
str:8,
vit:3,
speed:3,
weight:3,
area:[0,8],
rarity:1,
exp:1,
money:2
},
…中略…
];
ここのところ、こういった手直しの作業に追われていてなかなか新しい部分に着手できないでいます^^;
でもこの辺はゲームの根幹の部分だからじっくりと時間を掛けるべきなんすよね。
セミオート勇者
ランダムエンカウントの実装で悩み中。
とりあえずモンスターごとに出現エリアを設定してみましたけど…。
全モンスターからランダムに選んで現在エリアがそのモンスターの出現エリア圏内だったら投入、という方法を考えてますが…。
それだとモンスターの種類が増えれば増えるほど抽出に時間が掛かってしまいますよね…。
仮に全部で100種類とか居てそのうち現在エリアに生息してるのが3種類だとしたらそのいずれかに当たるまでループを繰り返さないといけないわけで…orz
よし、こうするか!
マスターデータからそのエリアに生息しているモンスターだけ一度すべて抽出してそこから改めて無作為抽出する。これで解決できるかな。
あとは何匹出現させるかをどうやって決めるか…。
セミオート勇者
味方陣営も多人数対応。
そしてplayerUnitっちゅう変数に対象Movieclipを放り込むだけで簡単に主人公を指定できるようにしました。それによって今回の画像のようにモンスターを主人公にして勇者を倒すなんてこともできるようになったぞぃ!
playerUnitの中身を入れ替えるだけなので戦闘中にリアルタイムに主人公を変更することももちろん可能。これによって、メインが死んだらサブが操作対象に、なんてことも簡単にできちゃうぞー!陣営の入れ替えも完備。混乱や裏切りなんかも再現できちゃう。(ただし敵味方が入れ子になると処理的に不都合なので先頭のキャラのみ)
吹き飛び時の移動距離を毎フレームごとに減らすよう変更(慣性の法則対応)。キャラの動きもより自然に。
そして手ごわそうなバグを発見。
CPU使用率が100%なときなどにプログラムを実行するとキャラ衝突後の吹き飛び処理が間に合わないらしく同位置で延々と衝突処理が行われてしまう様子…。
書いたコードが正常に実行されない処理遅延の時の対策なんてどうやってやればいいんだ^^;
以下やること。
- フェードアウト/フェードイン
- 画面スクロール
- 飛び道具の作成
- 遠距離攻撃キャラの思考ルーチン作成
- ステータス異常の導入(毒・混乱など)
- 処理遅延時の対策
- 瀕死時の警告
- オートガードの概念(検討)
勇者30 コンプリートガイド
- 作者: エンタテインメント書籍編集部
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2009/07/25
- メディア: 単行本
- クリック: 5回
- この商品を含むブログ (6件) を見る
立ち読みしに近所の本屋行ったら置いてなくてもう面倒くさくなったんでポチっちゃいました。
たとえモンスターのステータス載ってなくても何かしら得るものはあるだろうということで。
日曜日中に届いてくれれば大幅に助かるんだが…。