authority-destination tired
tired
tired
tired

投稿者 スレッド: Physicsエディターを作ろう  (参照数 6059 回)

0 メンバーさんと、1 ゲストさんが、このスレッドを見ています。

オフライン HogePiyo

  • モデレーター
  • 常連メンバー
  • ***
  • 投稿: 113
  • hogehoge
    • Durandal-Another
Physicsエディターを作ろう
« 投稿日:: 2005年06月27日 13時20分08秒 »
Physicsエディターは個人的にマップエディタ並に欲しいツールです。
AlephOneのソースを見るところから初めて、JavaかSDLなどのGUIツールキットで簡単なアプリケーションを作ることが目標です。
HogePiyoの開発ログ的な面がありますが、技術的にわかる方がいれば突っ込んでもらえるとうれしいです。

オフライン HogePiyo

  • モデレーター
  • 常連メンバー
  • ***
  • 投稿: 113
  • hogehoge
    • Durandal-Another
Re:Physicsエディターを作ろう
« Reply #1 投稿日:: 2005年06月27日 15時08分24秒 »
昼休みを利用して書き込んでます ;D

今までの記録。
・AlephOneのソースコードをWinCVSを利用してダウンロード。
・コンパイルに必要なライブラリ(SDL,STLport,boost)をセットアップ。
・VC7(.NET)でコンパイルに挑戦。
・Physicsモデルの読み込みモジュール観察。

状況。
・コンパイルが通らん。
-aleph\Source_Files\CSeries\snprintf.cpp(39): error C2668: 'vsnprintf' : オーバーロード関数の呼び出しを解決することができません。
-aleph\Source_Files\Misc\Logging.cpp(179): error C2668: 'vsnprintf' : オーバーロード関数の呼び出しを解決することができません。
-aleph\Source_Files\Misc\Logging.cpp(127): error C2668: 'vsnprintf' : オーバーロード関数の呼び出しを解決することができません。
-aleph\Source_Files\RenderOther\screen_shared.h(630): error C2668: 'vsnprintf' : オーバーロード関数の呼び出しを解決することができません。
-aleph\Source_Files\Network\Metaserver\network_metaserver.cpp(239): error C3861: 'for_each': 識別子は、引数依存の照合を使用しても見つかりません。
(警告は省略。)
 よく考えたらぶっちゃけアプリケーションをコンパイルする必要があるのか疑問に思えてきた。
 vnsprintf()をvsprintf()にしたところコンパイルは通ったが、今度は大量のリンクエラーが。どうしたらいいのかわからなくなったので

・以下のファイルが関連してそうだ。
Source_File/Files/import_definitions.h & import_definitions.cpp

また、その中でも次の関数が怪しい。
struct wad_data* get_physics_wad_data(bool)
void import_physics_wad_data( struct wad_data*)

今後の目標。
・wad_data構造体や、ヘッダなどの読み取りの部分の処理を解析。OpenFileやFileSpecifierなどのなぞの構造体があるが、関数を追っていけば何とかなるかも?
・pfhorumなどで質問する(気が向いたら)。
・SDL+GUIの調査。クロスプラットフォームで軽いのはQtかこれくらいではないでしょうか?

昼休み中に書ききれなかったorz

オフライン @Soldier

  • モデレーター
  • 新参メンバー
  • ***
  • 投稿: 95
  • 性別: 男性
  • …Don't shoot me!
Re:Physicsエディターを作ろう
« Reply #2 投稿日:: 2005年06月28日 22時03分21秒 »
Physicsエディターは個人的にマップエディタ並に欲しいツールです。
Σ
ここに新たなる神降臨の予感…

…確かに、AlephOne/SDLが登場して以降、新しいエディターといえば、マップか
ターミナルテキスト用の奴しかないし、そのどちらもがMacOSX用… :-[

元々Mac用のFPSゲームなのだから、Win用のツールがほぼ無いのはしょうがないとはいえ、
オープンソース化でPlay環境がほぼクロスプラットフォーム対応した今、優れたアイデアを持
ったWinプレーヤーも使えるエディターが、そろそろ出てきてもいい頃かもしれない…

AlephOneのソースを見るところから初めて、JavaかSDLなどのGUIツールキットで簡単なアプリケーションを作ることが目標です。

1番手っ取り早いのは、Anvilをリバース…ゲフォンゲフォン :P

…とりあえずツールの名前は、『金床』の元になったM2用エディターが
錬金術師』だったから、コレは「香具師」とでも名付けますか 8)



根詰めずにマターリと頑張ってね!
"Thank God it's you! Don't shoot! I'm out of ammo! I love you, man! Frog blast the vent core! AAAHAHAHAHAHAHA!"

*boom*

written by @Soldier ◆UESC.8nVxs

オフライン @Soldier

  • モデレーター
  • 新参メンバー
  • ***
  • 投稿: 95
  • 性別: 男性
  • …Don't shoot me!
Re:Physicsエディターを作ろう
« Reply #3 投稿日:: 2005年07月05日 07時57分04秒 »
トリロジー公開ページにあるチュートリアルPDFは何かの役に立たないかしら?
"Thank God it's you! Don't shoot! I'm out of ammo! I love you, man! Frog blast the vent core! AAAHAHAHAHAHAHA!"

*boom*

written by @Soldier ◆UESC.8nVxs

オフライン HogePiyo

  • モデレーター
  • 常連メンバー
  • ***
  • 投稿: 113
  • hogehoge
    • Durandal-Another
Re:Physicsエディターを作ろう
« Reply #4 投稿日:: 2005年07月13日 12時53分50秒 »
ヘッダーさえ作れれば入出力完成なんですけどね。
さて、問題のヘッダーですがという構造体を用意して既存の関数で書き込めばいいらしいのですが、このうちここら辺の変数の意味と入れるべき値、またどのように値を取得するかということがさっぱりわかりません。
 その後preferenceの書き込み関数(w_write_preference())を発見して流用したところ、チェックサム以外についてヘッダーの設定に成功、さらに、「チェックサム0で書き出し(デフォルトが0なのでOK)」→「いったん閉じて、読み込んでCRCによるチェックサム数値計算(calculate_wad_header_checksum())」→「さらに閉じてチェックサムをヘッダに設定して全体をもう一度書き出し」という手順を踏むことによってチェックサムの算出と書き出しにも成功!
 AlephOneもきちんと認識してくれました、万歳!

 さあ、後はGUI部分を作るだけ…(それぞれの設定番号と内容の対応表を見る)って面倒くさっ。
 とりあえず読み込んだファイルの内容表示だけでもやってみますか。

 オープンソースってホント助かりますね~。

オフライン HogePiyo

  • モデレーター
  • 常連メンバー
  • ***
  • 投稿: 113
  • hogehoge
    • Durandal-Another
Re:Physicsエディターを作ろう
« Reply #5 投稿日:: 2005年07月15日 13時37分09秒 »
  さて、GUI部品を並べて行くのは面倒ですが楽しい作業です。
  しかし別の問題が。ファイルへ出力する際に変更が有効になっていなかったのです。
  これはデータの扱い方に原因があるようです。
AlephOne,MarathonのデータはWADと呼ばれるデータ構造体をタグ毎に分けて管理しているのですが、ファイルから読み込むときには

「ファイルのストリーム」ー(import)ー>「WADデータ」ー(unpack)ー>「プログラムで扱える形」

というように変換する必要があり、読み込みについてはすでに確立しています。
  プログラム内で扱うデータを変えたところでWADデータは変化していないので、出力してもおなじものしか出ないという寸法。
  きちんと上の手順の逆を踏まなければいけませんが、単純にpack->exportとはいかないようです。まず、WADの一部のデータを改編する方法が良く分かりません。ので、新規に空のWADデータを用意し、それに次々にpackしていきます。データが揃ったらexportで出力。というのを考えています。
  さてさて、うまくできるかな?
  Unixでは激しくデバッグしにくいので学校のWin機を使えるまでは保留。又の機会にUI部分のスクリーンショットでも掲載します。

オフライン @Soldier

  • モデレーター
  • 新参メンバー
  • ***
  • 投稿: 95
  • 性別: 男性
  • …Don't shoot me!
Re:Physicsエディターを作ろう
« Reply #6 投稿日:: 2005年07月17日 07時12分19秒 »
おお、プロジェクトは進んでますなぁ… :D
  プログラム内で扱うデータを変えたところでWADデータは変化していないので、出力してもおなじものしか出ないという寸法。
  きちんと上の手順の逆を踏まなければいけませんが、単純にpack->exportとはいかないようです。まず、WADの一部の
データを改編する方法が良く分かりません。ので、新規に空のWADデータを用意し、それに次々にpackしていきます。
データが揃ったらexportで出力。というのを考えています。
プログラミングの領域の話となると、全く想像で話すしかない俺だが(よく分らないんです orz)、
「一度読み込んだデーターを保持しとく領域」が在って、何か変更を加える「作業用スペース」に
バッファーからデーターをコピーし、その後「コピーされたデーターに変更」を加え、変更後データー
と変更前データーを比較して「変更済みデーター」を生成し、ファイルに書き出すと言う行程でイイのかな?

行程をツリーに書き出して、プログラムと睨み合いしてると、或る日幸せになれるかも… 8)

又の機会にUI部分のスクリーンショットでも掲載します。
GUIはAnvil準拠でいいような気もするけど… ???


ともかくある程度形が見えてきたところで、The Pfhorums
とかの海外フォーラムなどで助言を頼むと良いかもしれない…

協力者を募るとか…



マターリ頑張れ ;)
"Thank God it's you! Don't shoot! I'm out of ammo! I love you, man! Frog blast the vent core! AAAHAHAHAHAHAHA!"

*boom*

written by @Soldier ◆UESC.8nVxs

オフライン HogePiyo

  • モデレーター
  • 常連メンバー
  • ***
  • 投稿: 113
  • hogehoge
    • Durandal-Another
Re:Physicsエディターを作ろう
« Reply #7 投稿日:: 2005年07月21日 10時41分51秒 »
テストが終わったらマターリ再開します

とりあえず起動画面を掲載してお茶を濁します。

空の状態でセーブすると元ファイルが壊れるバグが。あとはセーブ時のパック処理ができてないくらいです。
背景は真っ黒だとテキストフィールドが見えないのでどっかから拾ってきました。

オフライン HogePiyo

  • モデレーター
  • 常連メンバー
  • ***
  • 投稿: 113
  • hogehoge
    • Durandal-Another
Re:Physicsエディターを作ろう
« Reply #8 投稿日:: 2005年07月21日 13時48分35秒 »
おお、プロジェクトは進んでますなぁ… :Dプログラミングの領域の話となると、全く想像で話すしかない俺だが(よく分らないんです orz)、
「一度読み込んだデーターを保持しとく領域」が在って、何か変更を加える「作業用スペース」に
バッファーからデーターをコピーし、その後「コピーされたデーターに変更」を加え、変更後データー
と変更前データーを比較して「変更済みデーター」を生成し、ファイルに書き出すと言う行程でイイのかな?
 ゲーム内のデータはすでに構造化されたバッファに入っている上、簡単に取り出しやコピーができるのでいいのですが、WADは一種のストリーミング(1本の細長い流れ)状態のデータなので、どこに何があるかを今の僕の理解状況では特定できないと思います。
 その方法のやり方がわかれば別ですが、WADを空にしてから追加して再構成の方向で行きます。

pfhorumに入り込むのは正直面倒です。以前fileballのforumに入り込んだら消防レベル扱いされましたよ、何言ってんのおまえ的なのりなら厨房あつかいかな?自分も本気で書いてたわけではないのでいいのですが、異文化コミュニケーションは難しいです。

オフライン HogePiyo

  • モデレーター
  • 常連メンバー
  • ***
  • 投稿: 113
  • hogehoge
    • Durandal-Another
Re:Physicsエディターを作ろう
« Reply #9 投稿日:: 2005年07月25日 14時48分36秒 »
unpackの逆をたどってみました。

・create_empty_wad()で空のWADを作る
・extract_type_from_wad()でデフォルトのWADの各タグのタイプとその種類の数をゲット
・pack_monster_definition()でプログラムの変数(構造体のインスタンス)に収められているデータ(このエディタで変更したもの)をストリーム(Uint8=unsigned charの配列)に入れ込む
・append_data_to_wad()でWADにストリーム化したWADデータアイテムを入れていく

と、ここで問題発生。append_data_to_wad()内でmalloc()に失敗している模様。といってもサイズは16なのでメモリが足りないわけがない。ためしにnew でやってみたところ、どうもロックが解除できないようだ。別にconstにしてるわけではないんだが。
 ここらへんがよくわからないので現在停滞中です。