「プログラム関連」の編集履歴(バックアップ)一覧に戻る
プログラム関連 - (2011/01/09 (日) 23:30:24) のソース
&update(j)更新 //&aname(B,option=nolink){ここがB} //&link_anchor(B){Bへのリンク} &color(red){作成前に作るものと作業できそうな期間を宣言し、作成中も1ヶ月程度に1回は生存報告(スレに来るだけでおk)をしてください。長期間連絡のない場合は作成中断とみなす場合があります。作業が続けられなくなった場合もその旨を報告してください。ただしこの要請は2011/1/1から適用され、それ以前から作業をしていた人はここを見次第守るようにしてくれればおk } **プログラム関連 -&link_anchor(03){概要} -&strong(){&link_anchor(04){ダンジョンエディタ}} -&strong(){&link_anchor(05){アイテムエディタ}} -&strong(){&link_anchor(06){補助ソフト}} -&link_anchor(07){recordable.hの使い方} -&link_anchor(08){UPXによるEXE,DLLファイルの圧縮} **&aname(03,option=nolink){}概要 ゲーム本体の使用言語はC++とruby 基本的に1名のプログラマーさんが本体開発 数人がツール作成等で手伝っています、が人手不足 手伝うぜ!って人は本スレか避難所で確認してください ---- **&aname(04,option=nolink){}ダンジョンエディタ ***要項 +スクリプト(rubyベースの専用スクリプト)の項目。マップ共通のスクリプトと階ごとのスクリプトを記述できるようにする。編集機能は特に求めないが、スクリプトエディタには可変ダイアログを使い、入力字数は無制限にしてほしい。 +アイテムや敵は階ごとに設定したら大変な手間なので、出現階を範囲指定できる。同一のアイテムor敵の項目を複数用意することも出来る。 +データのセーブ・ロードはゲーム最新 ver に入った recordable.h を使って行うのが望ましいが、XMLとかでも可。[[使い方(旧wikiページ)>http://www29.atwiki.jp/huurainoboon/pages/19.html]] ***ダンジョンエディタ必要項目 まだ抜けがあると思うので言って欲しい -ダンジョン基本 --ダンジョン名 --階層数 --上りか下りか --仲間連れ込みの可否 --持ち込みの可否、個数 --初期所持アイテム --初期レベル、ステータス、所持金 --レベル、各ステータス、所持金の最大値 -階層毎 --マップ基本:ランダム、シャッフル、確定地形、イベント --マップ-ランダム:地形種類、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 ---- **&aname(05,option=nolink){}アイテムエディタ ***作成要項 作成してくれている人がいます ***必要項目 過去の[[プログラム>http://www44.atwiki.jp/huuraiboon/pages/18.html]]を参考にしたりして 分からないことがあったら本スレで確認しましょう ---- **&aname(06,option=nolink){}補助ソフト ***作成内容 まず、[[プログラム>http://www44.atwiki.jp/huuraiboon/pages/18.html]]やスレなどの状況を見て、 役に立ちそうなものがある場合、スレにて確認し、作るかどうか決めるといいかも &strong(){役に立ちそうなもの} マップチップ確認ソフト(既存) ドット確認ソフト(Mobエディタと統合) ---- **&aname(07,option=nolink){}recordable.hの使い方 ***必要なもの -[[hファイルとサンプル>http://loda.jp/utilsp01/?id=2.zip]](旧wikiのもの(hとcppは最新版)) ***使い方(旧wiki) データの出力ライブラリとして、次のファイルをダウンロード・展開し、 recordable.cpp, recordable.h, app_common.h, app_common.cpp&br() をインクルードして使うこと。使い方は後述。 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 データ達も再帰的にロードされる。 **&aname(08,option=nolink){}UPXによるEXEファイルの圧縮 ***概要 UPXは実行形式(EXE,DLL,COMなど)のファイルを実行可能な形のまま圧縮できるツール。 &strong(){UPXで圧縮するメリット} -ファイルサイズが小さくなる(元のファイルの40~80%程度) -プログラム内に大量のリソースを読み込むプログラムは、起動が速くなる -アップローダーからダウンロードする場合の速度向上 &strong(){デメリット} -&strong(){圧縮しなくてもいい気がする} -圧縮したソフトは動かなくなる可能性がある -プログラム実行時にすこしメモリ消費量が多くなる メリットデメリットは上でいくつか挙げたが、 デメリットのほうは、UPXの他に起動設定ツールなどを使い改善することが出来る &strong(){必要なもの} -[[UPX本体>>http://upx.sourceforge.net/]] -[[UPX起動設定ツール>>http://www.vector.co.jp/soft/win95/util/se139612.html]] ***使用方法 -普通に圧縮 UPXの実行ファイルのアイコン(Explorerに表示されるアイコンのこと)に、圧縮したい実行ファイルをD&D。 この方法では、バックアップされない。 -UPX起動設定ツールを使用 設定を済ませてから、ウィンドウ上に圧縮したいファイルをD&Dしてから開始ボタンを押す。 この方法では、 ファイル名.拡張子 が圧縮された内容で ファイル名.拡張子.bak が圧縮を適用する前の内容。 どちらも圧縮するファイルのディレクトリに作成される。 (圧縮された後のファイルは上書き。そしてバックアップ自動作成。) 起動しなければオプションをいろいろ変えて試してみる