探検
親父PGがゲームを作り始めるスレッド
■ このスレッドは過去ログ倉庫に格納されています
1親父PG
04/03/30 02:40ID:phIrC7nNC++やC、アセンブラは昔こなしたし、プログラムの事なら自信はあるけど
ゲームは作った事が無い方。現場からも引退したし(w。
ここは一つ趣味でDirectXでも勉強して、ゲームでも作ってみようかなぁと思った、
オジサンPGのスレッドです。
一緒にマターリライブラリから作りませんか?
194名前は開発中のものです。
04/04/09 02:52ID:d03K47Nx195144
04/04/09 04:52ID: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
つづく
> 私が提起しているデータ−形式は、そのまま「メモリの上に展開して動かせる最終形態」の話です。
(略)
> ただし、その前工程でどのような形でデータ−を扱ってもかまいません。
もちろん。
ただ、現在の形が、固定長の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
つづく
196144
04/04/09 04:54ID: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 を書き換えることも考慮したが、余計わかりにくくなった
(セーブするのに、シナリオで使う前マップも保存しなきゃならなくなるし)。
ソーサリアンでは、反応する場所では、とりあえず反応がなくなるまで上連打が基本だったと思うけど。
これより簡単にしようとすると、
・条件が一致したら、自動的にフラグをインクリメントする比較命令を作る
・複合命令を(例: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 を書き換えることも考慮したが、余計わかりにくくなった
(セーブするのに、シナリオで使う前マップも保存しなきゃならなくなるし)。
197144
04/04/09 04:56ID: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 も俺。
青い宝石のある位置に、イベント名 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 も俺。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 真冬に“エアコン”がなく孤独な死…生活保護受給者40代シングルマザーの悲劇が行政に問いかける“教訓” [ぐれ★]
- 高市首相「無責任な減税しない」、国債発行抑える 単独インタビュー - 日経 [少考さん★]
- 渡邊渚「スカートが短いから痴漢してOKなんておかしい」「数えきれないほど痴漢に遭った」加害者が守られがちな痴漢事件について思うこと [Ailuropoda melanoleuca★]
- 【東京】西東京市の住宅で親子4人死亡 母親名義のマンションで知人男性も死亡 いきさつや関連を捜査 警視庁 ★4 [ぐれ★]
- 【芸能】グラドル・阿波みなみ 握手会が急きょ中止… 客が一人も来ず 「並びが0人で中止」呆然写真に驚愕感想や辛辣意見も [冬月記者★]
- 日テレの男性記者と女性記者がカラオケBOXで行為に及び、NHK記者が動画撮影 動画が拡散するも女性記者は「泥酔していて記憶がない」★5 [Ailuropoda melanoleuca★]
- 【実況】博衣こよりのえちえちしゃどばすチャンネルビヨンド クリスマススペシャル!🧪★2
- 【高市悲報】日本人、ガチでクリスマスに飽きる [126042664]
- 【実況】博衣こよりのえちえちしゃどばすチャンネルビヨンド クリスマススペシャル!🧪
- フェラって難しくね?
- 百田尚樹さん 敗訴wwwwwwwwwwwwwwwwwwwwwwww [977790669]
- 【悲報】国民・玉木「連立したい」 [115996789]
