「プログラム関連」の編集履歴(バックアップ)一覧に戻る
プログラム関連 - (2011/05/01 (日) 01:52:01) のソース
&update(j)更新 //&aname(B,option=nolink){ここがB} //&link_anchor(B){Bへのリンク} &color(red){作成前に作るものと作業できそうな期間を宣言し、作成中も&strong(){1ヶ月程度に1回}は生存報告(スレに来るだけでおk)をしてください。} &color(#FF0000){長期間連絡のない場合は作成中断とみなす場合があります。作業が続けられなくなった場合もその旨を報告してください。} &color(#FF0000){ただしこの要請は2011/1/1から適用され、それ以前から作業をしていた人はここを見次第守るようにしてくれればおk } ずっと前にスタッフに参加していた人でも大歓迎!!特に過去にプログラム作ってくれた人は是非ともスレに来て欲しい **プログラム関連 -&link_anchor(03){概要} -&link_anchor(08){mob エディタ} -&link_anchor(04){ダンジョンエディタ} -&link_anchor(05){アイテムエディタ} -&link_anchor(06){補助ソフト等} #co{{{ -&link_anchor(07){recordable.hの使い方} }}} **&aname(03,option=nolink){}概要 ゲーム本体の使用言語はC++とruby 基本的に1名のプログラマーさんが本体開発 数人がツール作成等で手伝っています、が人手不足 手伝うぜ!って人は本スレか避難所で確認してください 可能ならソースコードごと欲しい **&aname(08,option=nolink){}mob エディタ 基本は下記のものを修正する感じ。出力もこれと同様 XML で。作者本人の開発再開も大歓迎 http://ux.getuploader.com/vipsiren/download/1070/MobEditor0.5.zip ***要修正点(優先順位順) -スクリプト項目。(技ごとでなく)敵ごとに1つのスクリプトが必要なので、そのパスを登録できるようにする。 --さらに外部エディタプログラムを呼び出すなどしてスクリプトを編集できるようにしてほしい -リストの敵を削除する機能 -敵毎に識別番号(データベースでのID)を設定する項目 -歩行・行動モーションのコマ数が4以上あると異常終了してしまう(?)バグ修正 -敵画像をプログラムからの相対アドレスで指定。プログラムの置いてあるフォルダのサブディレクトリにない画像も指定できるようにする -セーブせずに終了しようとした場合は警告があったほうがよい? -「特性」設定で選択された特性ごとに横にテキストボックスを設置して欲しい。 **&aname(04,option=nolink){}ダンジョンエディタ ***要項 +スクリプト(rubyベースの専用スクリプト)の項目。マップ共通のスクリプトと階ごとのスクリプトを記述できるようにする。編集機能は特に求めないが、スクリプトエディタには可変ダイアログを使い、入力字数は無制限にしてほしい。 +アイテムや敵は階ごとに設定したら大変な手間なので、出現階を範囲指定できる。同一のアイテムor敵の項目を複数用意することも出来る。 +データのセーブ・ロードはゲーム最新 ver に入った recordable.h を使って行うのが望ましいが、XMLとかでも可。&link_anchor(07){使い方} ***ダンジョンエディタ必要項目 まだ抜けがあると思うので言って欲しい -ダンジョン基本 --ダンジョン名 --階層数 --上りか下りか --仲間連れ込みの可否 --持ち込みの可否、個数 --初期所持アイテム --初期レベル、ステータス、所持金 --レベル、各ステータス、所持金の最大値 -階層毎 --マップ基本:ランダム、シャッフル、確定地形、イベント --マップ-ランダム:地形種類、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){}アイテムエディタ ***作成要項 各種項目を GUI で設定できるもの。出力は XML で。 内部的にはこのエディタのデータベースはスクリプト(Ruby1.9.1)から参照される。 各アイテムに1つのスクリプトが対応する。スクリプトは外部ファイルに置くこととし、 エディタの出力にはスクリプトファイルの相対パスのみを記載する。また外部プログラムを 起動とかでもいいのでスクリプトを参照・編集する機能も欲しい&color(red){(追記:出来れば外部エディタ)} 規定の候補から選ぶタイプの項目(武器の印名、飛び道具のタイプなど)は 項目一覧を外部のファイルで定義 エディタのUIはMOBエディタ(http://www44.atwiki.jp/huuraiboon/pages/18.html)を参考にするといいかもしれない。 ***必要項目 -全種共通項目 --名前 --アイテムの識別用の番号。この項目はそれほど重要ではない --説明 --アイテムの種類(草、武具、飛び道具、トリップetc) --買値 --売値 --グラフィックファイルの相対パス --スクリプト(最重要!!) -食物 --回復する満腹度 --満腹の時に食べた場合の上限満腹量増加 -草 --なし -巻物(テキスト) --なし -コピペ --なし -武器 --攻撃力 --限界修正値 --印の容量 --ベース印名(最大5個位) --装備時武器グラフィックファイルの相対パス -防具 --防御力 --限界修正値 --印の容量 --ベース印名(最大5個位) --装備時防具グラフィックファイルの相対パス -飛び道具 --攻撃力 --タイプ(矢、銀の矢、石、大砲 etc) -腕輪(トリップ) --耐久度 -壷(フォルダ) --アイテムの取り出しはできるか -その他 --タイプ(金、ンドゥバ系 etc) 過去の[[プログラム>http://www44.atwiki.jp/huuraiboon/pages/18.html]]を参考にしたりして 分からないことがあったら本スレで確認しましょう ---- **&aname(06,option=nolink){}補助ソフト ***作成内容 まず、[[プログラム>http://www44.atwiki.jp/huuraiboon/pages/18.html]]やスレなどの状況を見て、 役に立ちそうなものがある場合、スレにて確認し必要なものであるかどうか確認し、作りはじめる &treemenu2(title=役に立ちそうなもの,none){マップエディタ|マップチップ確認ソフト(既存)|ドット確認ソフト(Mobエディタと統合)|図鑑エディタ} ---- **外部プログラム起動方法メモ 外部プログラムの起動では基本的に「起動するバイナリのパス」と「コマンドライン引数」の2つの 情報のみが必要となる。 プログラムから「ユーザー定義の」外部プログラム(ペイントソフト、テキストエディタetc)を起動する機能を実装する場合はユーザーに上記の2つの情報を設定させればよい。コマンドライン引数についてはプログラムごとにフォーマットが違うのでprintf のような置換ルール("%f" を編集対象ファイルのアドレスに置き換えるなど)を用意すると便利 例) (%f は開くファイル名) K2editor /j1 %F #co{{{ **&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 データ達も再帰的にロードされる。 }}} #co{{{ **&aname(08,option=nolink){}UPXによるEXEファイルの圧縮 ***概要 UPXは実行形式(EXE,DLL,COMなど)のファイルを実行可能な形のまま圧縮できるツール。 &strong(){UPXで圧縮するメリット} -ファイルサイズが小さくなる(元のファイルの40~80%程度) -プログラム内に大量のリソースを読み込むプログラムは、起動が速くなる -アップローダーからダウンロードする場合の速度向上 &strong(){デメリット} -&strong(){&color(#FF0000){ウィルス認識の可能性がある}} -圧縮したソフトは動かなくなる可能性がある -プログラム実行時にすこしメモリ消費量が多くなる メリットデメリットは上でいくつか挙げたが、 デメリットのほうは、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 が圧縮を適用する前の内容。 どちらも圧縮するファイルのディレクトリに作成される。 (圧縮された後のファイルは上書き。そしてバックアップ自動作成。) 起動しなければオプションをいろいろ変えて試してみる }}}