[過去ログ]
親父PGがゲームを作り始めるスレッド (668レス)
親父PGがゲームを作り始めるスレッド http://mevius.5ch.net/test/read.cgi/gamedev/1080582036/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
194: 名前は開発中のものです。 [sage] 04/04/09 02:52 ID:d03K47Nx >>184 > 3DについてはZ座標を別途持つことでは対応できないのかなぁorz > 誤差範囲とかも必用だけど基本はBOX判定だろうし........ ナナメ http://mevius.5ch.net/test/read.cgi/gamedev/1080582036/194
195: 144 [sage] 04/04/09 04:52 ID:d03K47Nx >>183 > 私が提起しているデータ−形式は、そのまま「メモリの上に展開して動かせる最終形態」の話です。 (略) > ただし、その前工程でどのような形でデータ−を扱ってもかまいません。 もちろん。 ただ、現在の形が、固定長のCISCのような命令セットであり、柔軟性に乏しい。 以下のような例を考えよう。 台座に青い宝石があり、ソーサリアン的には台座の下で<<上>>を入力すると調べるのような反応になる。 最初に調べると、「台座に青い宝石が置かれている」とメッセージウィンドウに表示される。 次に調べると、「青い宝石からは高い音が発せられている」とメッセージウィンドウに表示される。 さらに調べると、「青い宝石を手に入れた。どこかで音がした」メッセージウィンドウに表示され、 (このシナリオ限りの)アイテムがアイテム欄に追加される。 という場合、青い宝石のある座標にトリガ番号 777 が設定されているとしよう [トリガファイル] 777 FG BlueJewelCounter eq imm 0 Scene 1 * 778 FG BlueJewelCounter eq imm 1 Scene 2 * 779 FG BlueJewelCounter eq imm 2 Scene 3 780 always StoreFG BlueJewelCounter 1 781 always StoreFG BlueJewelCounter 2 782 always StoreFG BlueJewelCounter 3 * 783 always GetItem BlueJewel [シーンファイル] scene 1 「台座に青い宝石が置かれている」 goto 780 scene 2 「青い宝石からは高い音が発せられている」 goto 781 scene 3 「青い宝石を手に入れた。どこかで音がした」 goto 782 つづく http://mevius.5ch.net/test/read.cgi/gamedev/1080582036/195
196: 144 [sage] 04/04/09 04:54 ID:d03K47Nx って感じ? ソーサリアンでは、反応する場所では、とりあえず反応がなくなるまで上連打が基本だったと思うけど。 これより簡単にしようとすると、 ・条件が一致したら、自動的にフラグをインクリメントする比較命令を作る ・複合命令を(例:CountupAndGetItem)どんどん増やす ・フラグのインクリメントやアイテムの取得はシーンファイルに記述する って感じじゃないの? いーの? 充分素人の手に負えないと思うけど。always とか * とか。 上記トリガは最適化版。最適化前は、シーンファイルに goto が無く、トリガファイルは9行だった。 777 FG BlueJewelCounter ne imm 0 goto 780 * 778 always StoreFG BlueJewelCounter 1 * 779 always scene 1 780 FG BlueJewelCounter ne imm 1 goto 783 * 781 always StoreFG BlueJewelCounter 2 * 782 always scene 2 783 FG BlueJewelCounter eq imm 2 goto 784 784 always StoreFG BlueJewelCounter 3 785 always scene 3 ちなみに、* なしで複数の処理を一度に行うことは俺にはできなかったよ。 上記トリガを記述するのに、親父PGタン の発言に無かった仕様は * だけ。 マップの ToDo を書き換えることも考慮したが、余計わかりにくくなった (セーブするのに、シナリオで使う前マップも保存しなきゃならなくなるし)。 http://mevius.5ch.net/test/read.cgi/gamedev/1080582036/196
197: 144 [sage] 04/04/09 04:56 ID:d03K47Nx トランスレータを書く前提で、スクリプトで上記を書き直してみよう。 青い宝石のある位置に、イベント名 BlueJewl の文字列が定義されている(もちろん識別番号でも良い)としよう。 [シーンファイル] <event BlueJewel> [CounterCheck BlueJewelCounter] 0 「台座に青い宝石が置かれている」 1 「青い宝石からは高い音が発せられている」 2 「青い宝石を手に入れた。どこかで音がした」 *get BlueJewel ただし、[ ] 内の CounterCheck は、スイッチのようなものだが、カウンタを参照して、一致したらイベントを起動して、 カウンターをカウントアップする。Cの switch でいう default は別に考える。 * は、システムコマンドを呼び出す。 もちろん、シーンファイルは事前に仮想マシン用のバイトコードにコンバートしておいて構わない。 例に最適化した文法を作ったわけで、かなりズルしてるけど、トランスレータを前提にすれば、こういうズルも必要なときにできる。 親父PGタン のトリガファイルの文法へのトランスレータも問題なく書ける。 しかし、これに多少の工夫をしても、まだ分かりにくいし、人為的ミスの混入も減らないかもしれない。 すると、結局シナリオ編集サポートツールを作ることになるわけで、ならば最初からスクリプトに任せてしまえ、ということですよ。 で、スクリプトをアセンブラライクなバイトコードに変換すると(逐次解釈でもいいけど)。 だから、スクリプトライクなトリガテーブルには疑問を抱くのですよ。 > std::map< std::string, TriggerAndProcess >を使用する場合、 > プログラム内で「このデータ−をMAP(STL)にPUSHしてくれ」という、コードを入れなければなりません。 > そういったレベルでスクリプトを組めるのはPGレベルの人だと思いますorz... 違う違う。 シリアルナンバを使用するのは、配列のアドレッシングのためでしょ? 文字列で連想配列をアドレッシングすることを勧めてるの。 編集時や使い回しの柔軟性のために。 ID みればわかるけど、>>194 も俺。 http://mevius.5ch.net/test/read.cgi/gamedev/1080582036/197
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.022s