プログラム関連 - (2011/02/19 (土) 00:19:09) の編集履歴(バックアップ)
2011年05月01日 (日) 01時52分01秒更新
作成前に作るものと作業できそうな期間を宣言し、作成中も1ヶ月程度に1回は生存報告(スレに来るだけでおk)をしてください。長期間連絡のない場合は作成中断とみなす場合があります。作業が続けられなくなった場合もその旨を報告してください。ただしこの要請は2011/1/1から適用され、それ以前から作業をしていた人はここを見次第守るようにしてくれればおk
ずっと前にスタッフに参加していた人でも大歓迎!!特に過去にプログラム作ってくれた人は是非ともスレに来て欲しい
ずっと前にスタッフに参加していた人でも大歓迎!!特に過去にプログラム作ってくれた人は是非ともスレに来て欲しい
プログラム関連
- 概要
- ダンジョンエディタ
- アイテムエディタ
- 補助ソフト等
- recordable.hの使い方
概要
ゲーム本体の使用言語はC++とruby
基本的に1名のプログラマーさんが本体開発
数人がツール作成等で手伝っています、が人手不足
手伝うぜ!って人は本スレか避難所で確認してください
基本的に1名のプログラマーさんが本体開発
数人がツール作成等で手伝っています、が人手不足
手伝うぜ!って人は本スレか避難所で確認してください
mob エディタ
基本は下記のものを修正する感じ。出力もこれと同様 XML で。作者本人の開発再開も大歓迎
http://ux.getuploader.com/vipsiren/download/1070/MobEditor0.5.zip
http://ux.getuploader.com/vipsiren/download/1070/MobEditor0.5.zip
要修正点(優先順位順)
- スクリプト項目。(技ごとでなく)敵ごとに1つのスクリプトが必要なので、そのパスを登録できるようにする。
- さらに外部エディタプログラムを呼び出すなどしてスクリプトを編集できるようにしてほしい
- リストの敵を削除する機能
- 敵毎に識別番号(データベースでのID)を設定する項目
- 歩行・行動モーションのコマ数が4以上あると異常終了してしまう(?)バグ修正
- 敵画像をプログラムからの相対アドレスで指定。プログラムの置いてあるフォルダのサブディレクトリにない画像も指定できるようにする
- セーブせずに終了しようとした場合は警告があったほうがよい?
- 「特性」設定で選択された特性ごとに横にテキストボックスを設置して欲しい。
ダンジョンエディタ
要項
- スクリプト(rubyベースの専用スクリプト)の項目。マップ共通のスクリプトと階ごとのスクリプトを記述できるようにする。編集機能は特に求めないが、スクリプトエディタには可変ダイアログを使い、入力字数は無制限にしてほしい。
- アイテムや敵は階ごとに設定したら大変な手間なので、出現階を範囲指定できる。同一のアイテムor敵の項目を複数用意することも出来る。
- データのセーブ・ロードはゲーム最新 ver に入った recordable.h を使って行うのが望ましいが、XMLとかでも可。使い方
ダンジョンエディタ必要項目
まだ抜けがあると思うので言って欲しい
- ダンジョン基本
- ダンジョン名
- 階層数
- 上りか下りか
- 仲間連れ込みの可否
- 持ち込みの可否、個数
- 初期所持アイテム
- 初期レベル、ステータス、所持金
- レベル、各ステータス、所持金の最大値
- 階層毎
- マップ基本:ランダム、シャッフル、確定地形、イベント
- マップ-ランダム:地形種類、BGM、登場特殊地形種(穴とか水たまり等)
- マップ-シャッフル:使用マップ範囲、BGM
- イベント:?
- mob
- 出現、出現率、初期配置数(X~Y)、pop速度、各個の初期配置数とRepopの有無
- アイテム
- 床アイテム:出現、出現率、初期配置数(X~Y)、各個の初期配置数
- 変換・隠し用アイテム:出現率
- 店、専門店アイテム:出現率
- MH
- 通常MH出現率、特殊MH出現率
- 登場特殊MH種
- 特殊MHの出現mob、出現レベル
- 罠と店
- 罠:出現、出現率、初期配置数(X~Y)、各個の初期配置数とRepopの有無
- 店:出現率、店が専門店になる確率、店主のレベル
進行さんが考えた暫定案(今は少し事情が変わっているかも)
205 名前:進行 ◆sINKoUpAwk[] 投稿日:2010/06/13(日) 17:59:41.58 ID:n7r19m6P [4/6]
~略~
ちょっとまだしっかりとした項目を書き出せてないんだが以前作ったイメージが↓
項目の確認ってだけでUIとかは気にしないでおk
基本:未作成
特殊MH:http://dl6.getuploader.com/g/vipsiren/868/MH.png
階層1:http://dl3.getuploader.com/g/vipsiren/867/k1.png
階層2http://dl3.getuploader.com/g/vipsiren/870/k2.png
モンスター:http://dl6.getuploader.com/g/vipsiren/860/m.png
アイテム:http://dl6.getuploader.com/g/vipsiren/861/i.png
罠:http://dl6.getuploader.com/g/vipsiren/862/w.png
アイテムエディタ
作成要項
作成してくれている人がいます
必要項目
過去のプログラムを参考にしたりして
分からないことがあったら本スレで確認しましょう
分からないことがあったら本スレで確認しましょう
補助ソフト
作成内容
まず、プログラムやスレなどの状況を見て、
役に立ちそうなものがある場合、スレにて確認し必要なものであるかどうか確認し、作りはじめる
役に立ちそうなものがある場合、スレにて確認し必要なものであるかどうか確認し、作りはじめる
recordable.hの使い方
必要なもの
- hファイルとサンプル(旧wikiのもの(hとcppは更新済み)。最新版に入っているのでサンプルを見たいときなどに)
使い方(旧wiki)
データの出力ライブラリとして、次のファイルをダウンロード・展開し、
recordable.cpp, recordable.h, app_common.h, app_common.cpp
をインクルードして使うこと。使い方は後述。
main.cpp, main.h はサンプルプログラム。
recordable.cpp, recordable.h, app_common.h, app_common.cpp
をインクルードして使うこと。使い方は後述。
main.cpp, main.h はサンプルプログラム。
うp時はできるだけソースコードも添付してくれると有難いぉ。
recordable.** の使い方
① 保存したい構造体(クラス)を Recordable の派生クラスとする。
引数を持たないコンストラクタを用意する。データのロードは new で確保されたインスタンスに対し load_data を呼び出すことで行われるため、 その際のコンストラクタとして使われる。
② クラスに必要な幾つかの設定
DEF_RECORDABLE_METHODS(クラス名) マクロをクラス定義内に記述。このマクロは Recordable::save_data, load_data, record_size のオーバーライド等を行う。 DEF_RECORDABLE_CLASS(クラス名, 識別番号) マクロを cpp ファイル内に記述。 この識別番号は異なるクラス間で重複してはならない。
③ Recordable::save_data(GameFileWriter& fp) の実装
this をファイルにセーブする。 ここでは this の各メンバ変数 var について以下のいずれかを行う。 ・単純に値を丸コピしたいとき → fp.write(var) 配列の場合は fp.write(*var, size)。ただし size は配列のサイズ。 ・var がポインタであるとき(したがって値丸コピはまずい!!) → fp.save(var) save メソッドは Recordable* 型しか受け付けないので、 予め var の参照しているデータを Recordable の派生クラスにする(よってもちろんそのクラスについても ここに書かれていることを実行する)必要がある save メソッドでは var がまだセーブされていなければ自動的に var->save_data を呼び出す。 ・(セーブしなくても値を復元できる等の理由で)セーブする必要がないとき → なにもしない 実は、セーブするデータが this のメンバ変数である必要はない。
④ Recordable::load_data の実装
this をファイルから読み込む。 基本的には save_data で write(x) を read(&x) に、save(x) を load(&x) に置換すれば ok ただしロードする順序は save_data でセーブした順と完全に一致させること。 save_data でセーブしなかったデータについてはここで初期化する必要がある。
⑤ Recordable::record_size の実装
this をセーブするときのセーブデータのサイズを返す。 基本的には save_data での write(x), save(x) で書き出すサイズはそれぞれ sizeof(x), sizeof(int)
⑥実際に使う
セーブ時 ① GameFileWriter インスタンスを用意 ② init(n) で作業用ヒープ領域を確保。 n は確保するヒープサイズ(大きくとりすぎても良い。必要なヒープサイズは、 セーブ対象となる各 Recordable インスタンス達について record_size() + 8) ③ save(r) で r をセーブ。r は Recordable 派生クラスのインスタンスへのポインタ。 r から参照されている他の Recordable データ達も再帰的にセーブされる。 ④ 結果のバイナリデータは pop_heap_() で取得できる。このデータは GameFileWriter のデストラクタで自動的に破棄される。 ロード時 ① GameFileReader インスタンスを用意 ② init(buff) でセーブデータを渡す。buff にはセーブ時の出力データを指定。 ③ load(&r) でデータをロード。生成されたインスタンスは r に格納される。 r から参照されている他の Recordable データ達も再帰的にロードされる。