旧ロボットのウディタぼやき

WOLF RPGエディター(通称ウディタ)に関して気づいたこととか、ぼやきとか、開発状況とかを書いています

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

アイテム投げ

2010-02-25 18:19:30 | 開発
ウディタでローグライク開発第14弾。
今回はアイテムを投げる処理を実装しました。

竜の迷宮ver1において「矢を撃つ」処理は、障害物の有無を考慮せず、壁を貫通していました。
それに対して、今回実装したアイテムを投げる処理は、壁をちゃんと考慮し、壁に当たった場合は、地面に投げたアイテムが落ちるようにしています。
矢を撃つ処理も、このアイテム投げの処理を利用して実装し直しました。
そして、アイテムが地面に落ちる位置に、すでに別のアイテムがあった場合、それを避けて地面に落ちるようにもしています。
1マスに複数のアイテムを置くことができるようにしてもいいのですが、そのためにはアイテム管理の仕様をいじらないといけないので、やめました。

具体的に、アイテム投げの処理は、「アイテムを投げる処理」→「アイテムを指定した位置に落とす処理」に分けて実装しています。
2つの処理に分けたのは、「アイテムを指定した位置に落とす処理」を、そのままモンスターのアイテムドロップ処理に使うためです。

「アイテムを投げる処理」では、アイテムが飛んでいく飛距離を設定しておき、投げるキャラの正面方向に壁や他のキャラの有無を検索していきます。
最初に見つけた障害物の位置で検索をやめ、障害物が壁だった場合はその手前の位置にアイテムを落とし、他のキャラの場合は投げたアイテムを消去してダメージを与えます。
障害物がなにも見つからなかった場合は、投げた位置から飛距離分だけ飛んでいった位置にアイテムを落とします。

ここまでの処理の実装は簡単だったのですが、「アイテムを指定した位置に落とす処理」において、アイテムを避ける処理を考えるのに苦労しました。
とりあえず、あるアルゴリズムを参考に、図の処理で実装しています。


ここで、「キュー」という言葉ができきますが、これは簡単に言うと、「中に入っているデータを、入れた順番に取り出すことができる、データの入れ物」という感じです。
詳しく知りたい人は、調べてみると勉強になるかもです。
このような処理をすることで、アイテムを落とす予定位置を中心にして、放射状に落とす位置を検索し、適切な位置にアイテムを落としてくれます。
ただ、問題がいくつかあります。
以下の動画を見てください。アイテムを連続して投げている様子です。


動画で確認できる通り、壁をまたいでアイテムが落ちてしまう場合があります。
また、すでに調べ終わった位置を再び調べてしまう場合があり、けっこう無駄があります。
現状でも十分なんですが、まだまだ不安なところがあるので、いずれ処理を調整してみようと思います。

最後に、アイテムを避ける処理は、以上の説明でもわかりづらいと思いますので、サンプルのゲームをアップしておきます。
暗号化してないので、エディターを突っ込めば中身を見られます。
アイテムを避ける処理のサンプルゲーム
コメント (4)
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ダンジョン内キャラの管理

2010-02-21 16:33:39 | 開発

ウディタでローグライク開発第13弾。
今回でやっと、ダンジョン内のキャラ管理処理の仕様変更が終了しました。
ここまでたどり着くのに1ヶ月以上・・・ ぜぇぜぇ


ウディコンに提出した竜の迷宮ver1の、キャラ管理処理を大幅に変更・拡張し、さらに拡張性・汎用性を持たせました。
プレイヤーもモンスターも、ダンジョン内にいるキャラを全て、可変DBで同じように管理。
図のようなキャラ情報を、データごとに専用の管理DBに登録します。
そして、それぞれのDBを操作する専用のコモンイベントをつくり、キャラのデータをいじりたい時は、その専用コモンを使うようにします。

だいたいは見ての通りですが、簡単な図の説明を・・・
・パラメータ管理
その名の通りですが、HPや攻撃力などだけでなく、所持金や経験値のような、キャラが持つ数値情報全てを管理します。

・パラメータ補正管理
上記のパラメータに対する補正値を管理します。
「1つのパラメータに対して1つ」ではなく、「1つのパラメータに対して複数の補正値」のように、いくつもの補正値を自在に管理できます。

・状態管理
「毒」や「麻痺」など、キャラの状態を管理します。
パラメータ補正管理と連携しているので、「攻撃力を上げる」状態も実現可能です。

・行動制限
キャラの行動制限を扱います。
キャラの行動ごとにフラグを用意しておき、そのフラグがON(=1)のときは、対応する行動を行えなくすることができます。
主に状態管理と連携して、「キャラが麻痺状態のときは移動できない」といった使い方をします。

・装備管理
これもその名の通りです。
パラメータ補正管理と連携して、「剣を装備したら攻撃力上昇」「盾を装備したら防御力上昇」といった具合に利用します。

・所持アイテムの利用位置
キャラが持っているアイテムの位置データを記録します。
ダンジョン内のキャラが持っているアイテムも全て、1つの可変DBに記録するので、キャラが持っているアイテムに何かしたいときは、このデータを利用します。

このようにキャラの情報を分けて管理し、操作専用のコモンをつくることで、キャラ情報の汎用性を増すことができました。

そして、それぞれの管理DBの定義をユーザーDBで行うことで、拡張性も増しています。
例えば、キャラのパラメータに新しくMPを加えたい場合、パラメータを定義しているユーザーDBにMPの項目を増やすだけで、簡単にMPを実装する事ができます。
ユーザーDBを、「キャラ情報エディタ」として扱う感じにしました。


これらの処理を実装するまで、けっこう急ぎ足できましたので、一旦ここで処理全体を見直し、微調整していこうと考えています。
(仕様変更の過程で、モンスターのAI処理がほぼ死滅しましたので・・・)
微調整が完了したら、次は固定マップの調整に入っていきます。
そして、この固定マップ調整が終了したら、
いよいよ、モンスターハウスやダンジョン内の店+店主の実装をしていく予定です。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

主人公の動作を止める

2010-02-08 14:05:53 | 開発

ローグライク開発第12弾。
今回、ダンジョン内における1ターンの経過処理を調整しました。
ゲーム中の目に見える変化はないので、スクリーンショットはありません。


竜の迷宮ver1では、ターンの経過処理を並行実行のコモン内で、

入力のチェック
  ↓
入力に対する処理
  ↓
主人公が移動したかどうかのチェック
  ↓
主人公の足元確認
  ↓
ターンが経過しなければ並行実行コモン終了
それ以外の場合
  ↓
1ターン経過処理

という流れで処理を行っていました。
*「主人公の足元確認」は主人公の足元を確認し、アイテムを拾ったり、階段を下りたりするイベントです。
*「1ターン経過処理」は主人公の行動でターンが進んだ場合に呼ばれる自動実行イベントです。主にモンスターの行動処理を扱います。

ただ、この並行実行イベントを使う方法では、いたるところでイベントコマンドの動作指定を使い、主人公を止めておかなければなりませんでした。
*参考 WOLF RPGエディターWiki 小ネタ集「主人公の動作を止める」

ですが、主人公を止める方法はもう一つあります。
自動実行のイベントです。
自動実行のイベント中は主人公も含め、全てのマップイベントの動作が止まります。
ウディタに同梱されているサンプルゲームで、メニューを開いたときに主人公が動かなくなるのはこのためです。

そこで、並行実行イベントで行っていた竜の迷宮のターン経過処理を全て、自動実行のイベントへ移し変えました。
おおまかな処理の流れはこんな感じです。

まあ、内容的には並行実行イベントの場合とあまり変わらないのですが、こうすることにより動作指定で主人公の動作をいちいち止めなくても済むようになりました。
ただし、注意しなければいけないことがいくつかあります。

まず、ループの最初にウェイトを入れてますが、これがないとイベントの組み方によってはゲームがフリーズしてしまいます。
(ウェイトの位置はループの最初と最後のどちらでもいいと思いますが、それはお好みで^^)

また、ループをまわし続けることで、自動実行のコモンが終了しないようにしているため、他の自動実行イベントが使用できなくなります。
代わりに、他の自動実行イベントは全て、ループの中から呼び出すようにしました。
図で言えば、「キー入力に対する処理」の後に呼び出しています。

そして、このままでは方向キーを押しても主人公は止まったままですので、キー入力に対して、動作指定で主人公を動かすようにします。
動作がカクカクになるんじゃないか?と心配でしたが、思っていたよりもスムーズに動いてくれました。


このように、自動実行のイベントを利用することで、主人公の移動をコモン上で完全に制御できるようになりました。

最後に、動作指定で主人公を動かすためのテスト用に作ったゲームをアップしておきます。
暗号化してないので、エディターを突っ込めば中身も見られます。
動作指定での主人公移動サンプルゲーム

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

タスクシステム

2010-01-30 16:18:44 | 開発

ウディタでローグライク開発第11弾。

今回はタスクシステムを実装しました。
タスクシステムに関してはこちらを参考にしています。
とはいっても、私の勝手な解釈で作成しましたので、厳密には違うかもしれません。

タスクシステムを導入した結果、この様になりました。


攻撃をするタスク、HPを増減させるタスクをつくり、
攻撃タスク→HPタスクの順にタスクを実行させてます。
(動画中では自分に攻撃してますが、戦闘システムをまだ整備してないので攻撃対象を自分自身に固定してます)

では、システムの簡単な解説をします。

タスクシステムの概要図


・図で言うタスクとは、画面には表示されない内部の処理(データベースのデータ操作など)としています。
・アクションログとは、タスクから生成される、アニメーションやログを表示するためのコマンドみたいなものです。
*ここでいうタスクとアクションログという言葉は、私が勝手に定義したものです。

・処理の流れ
実行するタスクを専用のリストに追加しておきます。
    ↓
リスト内にあるタスクを実行し、対応するアクションログを専用のリストに追加します。
そして、実行し終えたタスクはリストから削除していきます。
場合によっては新しくタスクを生成し、タスク用のリストに追加します。
これらの処理を、リスト内のタスクがなくなるまで繰り返します。
    ↓
リスト内のアクションログに従ってアニメーションやログの表示等を行います。

ポイントは、内部の処理とアニメーションの表示を完全に分離しているところです。
こうすることで処理の流れが把握しやすくなりました。
また、タスクシステムを導入する事で、新たな処理を追加するとき(例えば、「攻撃だけでなく魔法を追加したい」ときなど)は対応するタスクを新しく実装するだけでよくなり、ゲームの拡張性が大幅に向上した・・・はずです。

まあでも、このシステムはまだまだ試作段階ですし、もっと効率の良い方法があるとは思いますが・・・。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

斜め移動

2009-12-27 20:34:28 | 開発
ウディタでローグライク開発第10弾。
ウディコンも終了したので通常の開発モードに戻ります。

斜め移動を実装、ダンジョン生成アルゴリズムを修正しました。
Dキーを押し続けている場合に、イベントコマンド「キー入力」で方向キーの入力を受け付け、上下左右方向だったら動作指定で主人公を止めるようにする事で簡単に斜め移動を実装できました。
サブキーで方向転換するときもDキーを押すことで斜め方向のみに向くことができるようにしています。
ダンジョン生成アルゴリズムの方は、部屋同士をつなげる際に道がくっついて太くなってしまう場合があるのを修正。道は1マスの太さになるように調整しました。

さて、しばらくの間は竜の迷宮に追加実装する形で開発を進めていきますが、ある程度機能を追加したらver2.00としてバージョンアップする予定です。
でも、私はこれから1月末までリアルが忙しくなるので、バージョンアップはかなり先になると思います。
はじめは公式サイトにもアップしようかなと考えていましたが、ウディコンビリ2のゲームなんて誰も見向きもしないよなあ・・・
ver2.00は非公式ウディコンアップローダーと私のブログでの公開にとどめることにします。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする