親父PGがゲームを作り始めるスレッド
■ このスレッドは過去ログ倉庫に格納されています
0001親父PG
04/03/30 02:40ID:phIrC7nNC++やC、アセンブラは昔こなしたし、プログラムの事なら自信はあるけど
ゲームは作った事が無い方。現場からも引退したし(w。
ここは一つ趣味でDirectXでも勉強して、ゲームでも作ってみようかなぁと思った、
オジサンPGのスレッドです。
一緒にマターリライブラリから作りませんか?
0166新人PG
04/04/07 22:10ID:7aasUls1呼称「地形」で良いスか?w (ごめんなさい、ほんとに判らないんです)
0167名前は開発中のものです。
04/04/07 22:16ID:NGXP1J9S会話になると混乱するかもしれん
つーか、普段の会話でmapってでてこないしなー
hashmapとか実装込みで離すだろうし
0168新人PG
04/04/07 22:35ID:7aasUls1マップが地形の方でmapがデータ構造の方?w
うちの会社ではiniファイルもpropertiesファイルも全て「マップファイル」と呼びます。(ガクブル
しかし、データ構造やシステム面から詰めていってゲームって作れるんでしょうか。
本当に行き着く先がRPGツクールな気がしてきましたw
ラフ絵等が出てくると雰囲気出て良いかも。
0169名前は開発中のものです。
04/04/07 22:44ID:iAt21LPE絵とか音楽とかシステムまわりがこのプロジェクトにはまったく無い
技術ありきだとプログラマ本人以外ついていけんしな
0170名前は開発中のものです。
04/04/07 23:16ID:SEG+EKoN0171新人PG
04/04/07 23:55ID:7aasUls1親父PGタン夜勤ご苦労様です。
絵柄は洋ゲーっぽく、渋くクドイのが良いなぁ・・・。
硬派さを出したいw
0172名前は開発中のものです。
04/04/08 04:23ID:rdLQdFbl激渋グラフィック大好きなので。必要になったら声かけてくだちい。
ひっそりのぞいてます。
0173親父PG
04/04/08 05:31ID:msAPqSAiお疲れ様!
Gif画像がモビットになってるorz HPに上げてくれると助かるです
まとめ画像を見てない状態ですが、いくつか私の意見も書いておきます。
>・トリガーのCmpOP(比較方法)は要らないんじゃないかと思っています。
>プログラムの実装でカバーできるんじゃないでしょうか
トリガーテーブルは仮想CPUに対する命令です。この部分にゲームの「分岐」に対する情報が書き込まれます。
これらの情報は「シナリオ作成者」が担当するものなのですが、シナリオ作成者に「Cを書け」と言っても無理な注文です。
そこで、それを解決する方法として考えたのが分離方式です。
煩わしい制御コードに悩むことなく、文章部分に集中してもらいます。
トリガーテーブルは以下のようなインターフェイスで、編集を考えています。
▼はプルダウン []は価入力
条件NO0023「▼FGの価」[34]と「▼トリガーの結果」が「▼等しいなら」「▼シーンの」[234]を処理
可変長にしないのはデータ−作成者のレベルを配慮(IF文より難しいことを避ける)
メインPGが使用するときの検索の高速化
いろんなツールが読み込んで作業する為のデータの単純化 など
トリガーテーブル部分だけ準PGがやることによって、ゲームスクリプトの矛盾発生を押さえ込む。
いくつかの理由があります。
0174親父PG
04/04/08 06:14ID:msAPqSAi・トリガーのActCommandはデータは大きく確保しておいた方が良いのではないでしょうか。
そうですね。引数もふくめるとおっしゃるとうりです。この部分は拡張しましょう。
>別のデータ(アイテムデータ等)が持つデータだと思います。
>アイテムデータがトリガ情報を所持していて、それが地形データの上にあるとすると、
>アイテムデータトリガ呼び出し > 地形データの座標等チェック(トリガへの付加情報) > トリガ処理
>という流れが出来るので良いと思っています。
アイテムデータ−にはトリガー情報は含みません。例えば、ある地点でアイテムを拾うというイベントがあったとしましょう。
キャラデータ−が移動、地図配列をチェック、トリガーがある。>トリガーテーブルから該当するトリガーを探し出す。
トリガの1番目のコマンドを調べる (シーン1と書いてある)
シーン1 メッセージの表示「アイテムを拾いますか?」
選択メニュ表示 戻り値をリターン
トリガの1の価取得終了 トリガの2の価取得開始 (ダイレクトの価1)
比較命令に従って2つの価の比較 条件によりアイテム取得トリガー呼出(引数 任意のアイテム番号)
このような流れになります
シーン1の情報が変わってもトリガー情報に影響がありません、逆もしかりです。
>>実は個人的には地形データにトリガシリアルを記述する事に賛成ではありません
これは144氏の指摘にある「地形データが入れ替わった時どうするのですか?」に対する
解決案のひとつ。同座標にトリガー埋め込んだ場合どうする? という問題ですね。
>●シーン := トリガ := アイテムデータ | 地形データ | シナリオ
>このようなイメージを持っているのですがどうでしょう?
私のイメージは
地形データ>>>>トリガー<<<<シナリオ
独立 アイテムデータ−
このようなイメージを考えています。 トリガーテーブルを中心に他は従属関係にあります。
>うちの会社ではiniファイルもpropertiesファイルも全て「マップファイル」と呼びます。
prz.... このスレでは地図データ−は地図データ−もしくは地形データと呼ぶようにしましょう。
0175親父PG
04/04/08 06:38ID:msAPqSAi>しかし、データ構造やシステム面から詰めていってゲームって作れるんでしょうか。
>本当に行き着く先がRPGツクールな気がしてきましたw
>ラフ絵等が出てくると雰囲気出て良いかも。
メインPGの最初のステップは、ステージを作ることですので最初は仕方の無いことでしょう。
画面イメージなどは今ちょこちょこ作ってます。お友達にキャラ絵も数点お願いしました。
(決定原稿ではないですけどね)元少女漫画家(出産の為引退)された方です。
ゲームの雰囲気ですが、私の隣には数年前に上野の博物館であった「ケルト神話」の展覧会の本が置いてあります(W
そこから察してください。^^;
>>172 >>169
最初はライブラリの構築からマッタリという考えだったので、イメージとかの資料を提示できずにいます。
申し訳ない。劇渋3D大歓迎です。そうだ!1点お願いしてもいいでしょうか。
128*128で武器(種類問わず)を1点お願いしてもいいでしょうか?
デザイン背景はケルト神話で基調カラーは青に緑が加わった色。
アクリル絵の具でいうところの「Compose Blue」でお願いします。
と勝手にお願いしていいのか俺orz
劇渋路線が人気あるようですね。私もラリーエルモア大好きです。
背景テクスチャポリゴンと前面テクスチャポリゴンがうまく半透明にならないと
いろいろ苦慮していましたが、原因は「背景データ−を先に描画していないから」
という結論でしたorz.....アホスギル
各テクスチャ事にレンダリングステート登録する機能作ったのに...全然別の理由だった(鬱だ
この機能は現時点ではいらないことが発覚(ショボーン orzナニカニツカエルカナ....
閑話休題
子供はまだ3歳と5歳だよw
0176名前は開発中のものです。
04/04/08 08:54ID:qS569gdt0177名前は開発中のものです。
04/04/08 15:10ID:EIdbWV3jせめて参考になりそうなURL用意するとかして欲しいぞ。
コンポーズブルー
ttp://www.fairy-land.to/shop/moji/c-sample.html
エルモア
ttp://www.larryelmore.com/
0178名前は開発中のものです。
04/04/08 15:26ID:Hg7sDvxpD&Dのパッケ描いた人か…。
0179親父PG
04/04/08 15:40ID:msAPqSAi>>177
調べてくれて有難う。こんなHPあったんだねorz
僕が中学生の頃、D&Dのイラストを見て、激しく感動したイラストレータです
RPGの話をするならこの人は避けて通れません。
Windowのパーツを作り始めました。仕様もこれから固めていきます。
イメージのたたき台になりますかね?
0180名前は開発中のものです。
04/04/08 16:06ID:PQfhS+Yw| シマリがいいな〜!! /
. ____
| |・∀・| /⌒⌒ヽ
| |\ |`イ ノハぃ) カク
. (( |_|_ィ⌒`」 ‖' 、 ソ|
ノ と、_入`_,つ λ う
カク
0181144
04/04/08 16:49ID:kikONY5Oで、番号じゃなくて名前の文字列にしよう。
で、std::map< std::string, TriggerAndProcess > みたいなのに突っ込もう。
ハッシュでもいいけど。
マップの方では、トリガ番号をセルに埋め込むのはよろしくないと思う。
3Dにしたときにどうしようもなくなる。
その代わりに、アトリビュートファイルを作ろう。
アトリビュート範囲とトリガの名前が書いてある。
(もちろん、マップファイルの固定長地形データ配列の次にくっ付けても
構わないが、実行の問題じゃなくて構造の問題ね)
トリガの条件判断は、やはりスクリプトに譲ったほうがよいと思う。
寄り道できない一本道のシナリオなら今のトリガテーブルの条件記述
で構わないと思うが、ちょっと複雑になったら、結局素人の手には
終えなくなると思う。
当面は今のトリガ記述方法で良いと思うけど、早いうちからスクリプト
への変換をしておくと、トランスレータだけいじればよくなるので、
トリガデータ構造はもっと柔軟なもの(できればスクリプト)にしておいた
ほうが良いだろう。
0182名前は開発中のものです。
04/04/08 17:15ID:Hg7sDvxp俺と同世代っぽいなー。
0183親父PG
04/04/08 17:53ID:msAPqSAiご意見ありがとう。いろいろとご意見を私なりに整理しました、話をすすめていく上で確認すべき点があると思います。
私が提起しているデータ−形式は、そのまま「メモリの上に展開して動かせる最終形態」の話です。
プログラムの中でSTLを使うにしても、バイナリデータ−の並びを解釈してCPUを動かさなければなりません。
前にも述べましたが、スクリプト(テキスト)を動的に解釈するメリットはないので、
中間言語およびスクリプトで書かれたコードは全てコンパイルが済んだ形(バイナリ)にします。
そのバイナリ形式が提案している形になります。
ただし、その前工程でどのような形でデータ−を扱ってもかまいません。
例えばコンパイラはテキストで書かれた命令文を最終的にCPU命令に置き換えます。(MOV AX、CX)
といった単純な命令群に置き換わります。今回のゲームデータ−についてはここまで単純化してはいない(必要が無い)ですが、
その一歩手前にある(構造を単純化して高速化)といえます。
std::map< std::string, TriggerAndProcess >を使用する場合、
プログラム内で「このデータ−をMAP(STL)にPUSHしてくれ」という、コードを入れなければなりません。
そういったレベルでスクリプトを組めるのはPGレベルの人だと思いますorz...
0184親父PG
04/04/08 17:53ID:msAPqSAi>std::map< std::string, TriggerAndProcess > みたいなのに突っ込もう
実際問題としてトリガーがトリガーを呼ぶ構造なので、スタックという形で動的配列は使用します。
それはデータ−を解釈するPG側の話なので、そのあたりについてはお任せください。
>>トリガテーブルは固定長じゃないほうがいいと思うよ。
可変長が必用な場合、トリガーテーブルを2個(以上)使って表現すればよいのです。
トリガーがトリガーの結果を呼び出せるという構造で、柔軟な動きに対応できるはずです。
>当面は今のトリガ記述方法で良いと思うけど、早いうちからスクリプト
>への変換をしておくと、トランスレータだけいじればよくなるので、
逆にいえば、RPGのデータ−ツールに複雑な構造を単純化しうる機能が必要になるのです。
最終データ−を扱う段階で、英文翻訳ソフトのようなプロセスを行うことは致しませんよ。
3DについてはZ座標を別途持つことでは対応できないのかなぁorz
誤差範囲とかも必用だけど基本はBOX判定だろうし........
※どのアイテム、動作、動きにていて基底データ−のようなものを定義するのは有用かもね。C++でいう基底クラス
0185名前は開発中のものです。
04/04/08 18:02ID:TfluK8Bw解釈しやすいバイナリにするのなら当たり前だけど
移植性や可読性を考えると命令セットに依存する部分って必要ないような
CPUやモードが替わったりすると確保するバッファサイズが様々になるので
メリットないと思うんだが
ついでにいうとテキストレベルのスクリプトを動的解釈しても500MHz
超えているマシンなら問題になりにくい
デバッグの課程を考えるといわゆるインタプリタレベルのデバッグモード
という位置づけも必要になるんじゃないの?
3Dについてどうのこうのってのは再ショアから作るものが決まってないからそういったことになる
ソーサリアンを目指すというのならたとえばサイドビューとか
作るものが決まってないのならそのへんの最適な解は見つからんよ
0186親父PG
04/04/08 18:05ID:msAPqSAi思い出しましたか?^^;
>>180 orz....
>>182 ニヤリ -)
WINDOWの構造体造ったはいいがツール作るのが面倒で鬱ぬ。
0187親父PG
04/04/08 18:18ID:msAPqSAiCPUはたとえでありまして、実際にCPUバイナリにはしません。
動的スクリプト解釈についてはメリットがないと思うのです。
同じ処理を事前に済ましてしまえばいいのですから。
「物理できなデータ−の塊を解釈して動作させる」という動きの比喩でCPUを上げました。
さて今回必用な話に戻すと、データ−の塊を逐次解釈して動作させます。
その基本形が提唱している固定データ−(トリガーテーブル)(中間コード)になります。
動的スクリプト解釈をするにしても起動時に一旦コンパイルして中間コードに、並べてから動作させます。
1ラインごとに解釈するはずはありません。特に今回のケースではメリットがありません。
0188親父PG
04/04/08 18:36ID:msAPqSAiせめてベテランPGさんとかにしてほしいなぁqrz
閑話休題
まとめていただいた図 造って頂いて有難う
http://www.geocities.jp/oyajipg/up/relational_01.gif
ずばりです。各トリガーの必用な引数などは追加する可能性がありますが、
おおよそこのようなつくりです。
トリガーテーブルと呼んでいますが、これって(中間コード)ですよね。
MAPからの引数はZ値も入れましょう。
ゲームの種類のよっては使わないかもしれませんが...
0189名前は開発中のものです。
04/04/08 18:54ID:TfluK8Bwスクリプトを書く人は意識しないでいいんですよね?
たとえばjava風だとadd〜listenerみたいな感じでイベントリスナ追加で
一度発生したイベントが次に発生しなくなるならremove〜Listenerとか
あくまでもトリガテーブルに処理は書いちゃいかんと思うのですよ
0190親父PG
04/04/08 19:33ID:msAPqSAiたくさんのご意見ありがとう。
トリガーテーブルはそれ自身がスクリプトともいえます。
自身を管理する処理は最低限行えます。
もちろん、メッセージを出すといった「処理」はかかれません
そういう場合は処理が書かれた「シーン」を呼び出す事になります。
トリガー自体を有効無効については、そういうFGが入ってもいいかもしれませんね。
Enable
Enableの価によってリムーブをコントロールしましょう。
ADDについては、フラグテーブルの後ろに物理的に加算することで表現できます。
>トリガーからトリガー呼ぶのはいいがそのへんはシステムがインテリジェント
内部的にはそうなります。
命令の組み合わせを作り出すのはツール側になります。
例えばCのswitch-case文などをif文の羅列に並び替えるような処理は、ツール側の仕事になります。
0191新人PG
04/04/08 23:33ID:nyCaSSwW>>親父PGタン
ようやくデータ構造が見えてきました。順にまとめていきたいと思います。
↑日曜日以降になりそうです。週末予定が入ってしまいました・・・orz
今年入社なんで「新人PG」ですw 社会人歴1週間です。
モビットってなんだろーとか思っていたら、2chから直リンするとモビットが出ますねw URL直接指定してください(汗
あと元少女漫画家の友人に注文しても良いですかね?
男だろうが女だろうが 筋 肉 モ リ モ リ で
よろしくお願いしますw
0192172
04/04/08 23:47ID:rdLQdFblいまんとこ2Dゲーになるのか3Dゲーになるのかわかんないので、
もし今後このシステムで3Dゲーを作ろう!となって
3Dモデルとかモーションとか作る肉体労働者がたりねー
みたいな事態になったら声かけてくだちい。
(イラスト描いたりデザインしたりはデキネ。)
プログラムにも興味あるのでずっとタシロってると思いますので。。。
0193親父PG
04/04/08 23:59ID:msAPqSAiお帰りなさい。
>ようやくデータ構造が見えてきました。順にまとめていきたいと思います。
それは良かった。スクリプト作成側にも最適化等の処理を求めますので、データ構造の意味が理解していただけないと
なかなか説明が難しいと思っていたところだったので、安心しました。
>モビットってなんだろーとか思っていたら、2chから直リンするとモビットが出ますねw URL直接指定してください(汗
あれ、かなりつぼにはまって笑いましたよw
>あと元少女漫画家の友人に注文しても良いですかね?
>男だろうが女だろうが 筋 肉 モ リ モ リ で
なるほろ、間に合えば連絡しておきます。
>>192
そうですか、では3Dになったら即お願いします。^^;
0194名前は開発中のものです。
04/04/09 02:52ID:d03K47Nx> 3DについてはZ座標を別途持つことでは対応できないのかなぁorz
> 誤差範囲とかも必用だけど基本はBOX判定だろうし........
ナナメ
0195144
04/04/09 04:52ID:d03K47Nx> 私が提起しているデータ−形式は、そのまま「メモリの上に展開して動かせる最終形態」の話です。
(略)
> ただし、その前工程でどのような形でデータ−を扱ってもかまいません。
もちろん。
ただ、現在の形が、固定長の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
つづく
0196144
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 を書き換えることも考慮したが、余計わかりにくくなった
(セーブするのに、シナリオで使う前マップも保存しなきゃならなくなるし)。
0197144
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 も俺。
0198親父PG
04/04/09 07:10ID:Ihr7T82R144氏さん 考察ありがとうございます。今回のケースはswitch文の構文が適していますね。
switch (fg){
case 0:{seen1;++fg;break;}
case 1:{seen2;++fg;break;}
case 2:{seen3;++fg;break;}
default:{NonOp}
}
Cで書くとこうなります。これを置き換えます。
777 (MAPposition) X,Y EQ (価)a ,b start switch 4
778 (fg)A eq 0 CALL シーン1(fg A)
779 (fg)A eq 1 CALL シーン2(fg A)
780 (fg)A eq 2 CALL シーン3(fg A)
781 CALL シーン4(fgA)
782 return(0)
シーン0
deviceWait()
KEYUP:メッセージ出力1、++FG
KETLEFT:メッセージ出力2、FG=0
return (next)
0199親父PG
04/04/09 07:10ID:Ihr7T82R(Keydevice) a start switch 2
a EQ KEYUP goto localindex 1
a EQ KEYLEFT goto localindex 4
PUTMES 1(文字列INDEX)
FGOP +1
return
PUTMES 2(文字列INDEX)
FGOP 0
return
データ−のお尻に追加
文字列
array index of string
max ...
0,24
"宝石が..."
"宝石を拾った..."
あとで説明文書きます
0200親父PG
04/04/09 08:07ID:Ihr7T82Rシーンデータについて考察してみました。シーンデータ−は以下の要求を満たす為に定義されます。
○ゲーム内の処理命令を表す ○可変長をサポート ○ストリングが入る ○また、ここに1つだけ判断文を定義する事ができます。
定義できる判断文
DeviceWait系 ButtonPush系 設定なし FGに対する操作 他のトリガーの呼出
DeviceWait系、ButtonPush系
この2つは内部的にはトリガーテーブルを呼んでいるのと同じなのですが、シナリオの文法上煩雑になるので1文で定義できるようにします。
戻り値に対して処理のスタート部分を分岐できます。
・スクリプト上の文法
deviceWait()
KEYUP:メッセージ出力1、++FG
KETLEFT:メッセージ出力2、FG=0
・展開された形
(Keydevice) a start switch 2
a EQ KEYUP goto localindex 1
a EQ KEYLEFT goto localindex 4
・実際の処理はこのあと1行ずつ定義されます
PUTMES 1(文字列INDEX)
FGOP +1
return
これらの1行1行もあのトリガーテーブルと同じフォーマットで表すことができます。
文字列は別の場所に一括してまとめられて、内部ではインデックス扱い char*[a] に置き換わります。
シナリオを書く時の文法とコンパイル後の文法やデータ−の配置は異なります。
シナリオを各段階では「可変長」で表記できます。
>シリアルナンバを使用するのは、配列のアドレッシングのためでしょ?
これは少し違います。地形MAPを切り替えた時に、同時座標のトリガーを判断するためにあります。
0201親父PG
04/04/09 09:26ID:Ihr7T82Rstruct {
int SelfID; //シリアル番号
int CommandID;//基本命令系
byte CmpSeed1; //int CmpTarget1が何を示すかの種類 FGテーブル デバイス 関数戻り値 値
int CmpTarget1; //値
int CmpTarget1_2; //値(予備)
byte CmpSeed2; //int2 CmpTarget1が何を示すかの種類 FGテーブル デバイス 関数戻り値 値
int CmpTarget2; //値
int CmpTarget2_2;//予備
byte CmpOP; //上の値の比較方法
byte CmpOP; //真/偽どちらを使うか? (追加
short int ActCommand ; //何をするか? MOVE FG値操作 次処理 シーン呼び出し
int ActValue1; //値 ActCommandによって扱いが異なる
int ActValue2;
int ActValue3;
int ActValue4;
//リザーブ
};
0202名前は開発中のものです。
04/04/09 16:26ID:HmpNauZs0203名前は開発中のものです。
04/04/09 16:48ID:Ws2ssbno0204名前は開発中のものです。
04/04/09 19:40ID:9dUWl+klけっこう可愛そうな奴らがいるみたいだなぁ この板には
0205名前は開発中のものです。
04/04/10 03:46ID:yG5v3On80206名前は開発中のものです。
04/04/10 06:51ID:ZruuXOcF0207親父PG
04/04/10 09:25ID:Sr13ZjT1PG以外はなんだがわけわからないですね。反省orz...
前の書き込みに「戦闘システム」の計画を書いたので何かご意見をいただければ幸いです
>>203
何処へ帰ればorz
>>204
まぁマッタリいきましょう
>>205
OK!
>>206
了解。 今日も仕事ですorz こっそり書き込みです。
現在ツール側を作成しておりまして、本体側の進行はSTOPしています。
そのツールが完成して、本体のPGに反映された頃に一回公開します。
といってもボタンとウインドとテキストのコントロール部分だけですけどねorz
0208144
04/04/10 13:01ID:1EUDp4baトリガから別のトリガを呼び出せるというのは書いてあったけど、return まで逐次実行ってのはどこにも書いてなかったよ。
後出しだしズルいよw。
ま、それはいいとして、オヤジタン の記述例では、トリガもシーンも、オヤジタン のいうPG以外が対応できるレベルにみえないけど。
それと、トリガテーブルって、同時にいくつも存在するの?
同時ってのは、実行時の話なんだけど、仮に1つだとすると、エクセルとどのように整合性を保つのかな、と思って。
シーンファイルに、トリガサブルーチンがあるのはいいと思うけどね。
なんかもう、普通のスクリプトのバイトコードと話が変わらないように見えるよ。
単にバイトコードのフォーマットが見たことないほどリッチなだけで。
そして、エクセルで入力すると言い張ってるのは、アセンブリ言語での記述を要求しているのと等価にしか思えない。
> >シリアルナンバを使用するのは、配列のアドレッシングのためでしょ?
> これは少し違います。地形MAPを切り替えた時に、同時座標のトリガーを判断するためにあります。
地形マップを切り替えるというのは、
・どこかのマップでスイッチを入れる
・別のマップで跳ね橋が下りる
のようなときに、マップチップテーブルだけの入れ替えをするような話だよね?
それをシリアルナンバで判定するということは結局 std::map< int/*シリアル*/, int/*トリガ配列の添え字*/ >
のような形で判定するんでしょ?
俺は、エクセル上でもシリアルナンバの入力を強要してるのかと思ったんだけど、トリガコンパイラが文字列で
解決してくれるならそれでいいと思うよ。
ところで、>>189 で MAPposition で比較してるけど、本当は MAPBASE::ToDO に 777 が入ってるんだよね?
そうじゃなければ、エクセルで入力するときはコンマ付で入力? マップの大きさは最大256x256?
自信あるみたいだから、思うとおりにやってみるといいでしょう。
使い物になりそうなことは分かったし。
0209名前は開発中のものです。
04/04/10 16:08ID:ZruuXOcF0210親父PG
04/04/10 20:09ID:Sr13ZjT1いろいろと検証ありがとう。いろんな角度から見てもらえてるので、実に助かってます。
対策として具体的な仕様も決まっていくしw
まず書き方の例ですが、ここでの話を判りやすくするためであって実際の文法はもっと判りやすくなるはずです
このへんは「新人ニューウェーブPG」氏に期待します^^。
メイン担当としては、「最終バイナリはこういうイメージにしてね」と伝えなければなりません。
データの意味(解釈方法)を伝えるためにCで書いてみたわけです。
144氏の指摘の多くは私の作業より、一つ上のレイヤーの話と思える部分があります。
トリガーテーブルは(エクセル「でも」編集できる)ここが味噌でエクセルの機能を使って
レコードの操作をいたします。(エクセルと同じ機能のツール作るのは大変だw)
多重ソートとかマクロ機能とかね...別途作ってもいいけど。
エクセルコンポーネント使うなら一緒だ(orz...コレダケデモエツキルヨ
利用理由は主にチェックです。デバックですね。これってありがたいんですよ。ええ(独り言モード
トリガーテーブルは基本は一つですが、動的に後ろに追加しても仕様上動きます。
地形MAP配列にはトリガーを引くことしか指示しません。引数は座標XYZ(65535)+MAPシリアル(65535)になります。何をするかはMAP側ではなくトリガー側が判断します。
作業予想
地形MAPツールは地形データ-とトリガーテーブルを読み込む。
イベントを行いたい場所へマウスでマークしていく。
このときトリガーテーブルにもトリガー情報のみのデータ-が追記される。
保存...
再度開いた時はトリガーテーブルのMAPシリアルを見て以前のマーク場所を再配置する
STEP2
イベントツールはMAP作成ツールによって作られたトリガーテーブルに、必要な情報を追加していく。
このような感じになる予定です。
>>209
勝負はしてないけどね^^ いろいろ言ってくれると助かるよ。
0211親父PG
04/04/10 20:23ID:Sr13ZjT1>地形マップを切り替えるというのは、
これは「地形MAP配列にはトリガーを引くことしか指示しません。」
この設定が前提にあります。地形データ-を入れ替えた時に同じ座標にイベントがあった場合
受け取った側が判断できません。そのためのMAPシリアルになります。
>・どこかのマップでスイッチを入れる
>・別のマップで跳ね橋が下りる
これはトリガーテーブルのイネーブルをONにすれば良しでしょう。
CAll MAP(B 3,3)//橋
トリガー親父 そのMAPのその座標のトリガーは「なし」だ。交信終了
Call (MAP A 1,1)//スイッチON
トリガー親父 ウィ〜ス トリガ3番(橋のトリガ)イネーブルON
再び
CAll MAP(B 3,3)//橋
トリガー親父 ウィ〜ス 橋をおろせセニョール ついでに MAP A 1、1のフラグもイネーブルにするべ
こんな流れかな
0212親父PG
04/04/10 20:39ID:Sr13ZjT1生 トリガー親父 ウィ〜ス 橋をおろせセニョール ついでに MAP A 1、1のフラグもディスネーブルにするべ
間違えた(汗
間違えたついでに
このシステムの目指すところを書いてもいいのではないかと。勝手に思ったので妄想を書き込みます
このシステムでは「キャラクターデータ-」が中心となり世界を広げていきます。
大昔、D&DというTRPGがありました。あのシステムも最初は赤本から始まりました。
ダンジョンにもぐり宝物を集め、経験値を上げていく。
たくさんのエキスパンション(シナリオ)が生まれてキャラクターは成長していきました。
本システムもこのような流れで大きくしていきたいと思っています。
エキスパンションを通じてのキャラクター成長。
そして、シナリオの作成についてはツールを公開して、誰でもDMになれるようなものを考えています。
シナリオをそれぞれ交換などする事もできるようにしたいと思っています。
またキャラクターに関わる事柄。お店だとか交換所なども一種のシナリオによって構築されます。
全ての完成にはまだまだかかりますが、そこは(追加型 という仕様がなんとかしてくれるはずです(W
0213名前は開発中のものです。
04/04/11 00:46ID:tw9ZgcmPでもあんまりシナリオとか簡単に作れるようにすると
あんまり知識の無い人でも簡単にズルができるようになるような。
まぁ、その人がつまらなくなるだけですけど。
0214名前は開発中のものです。
04/04/11 01:02ID:osyo1R4qその話は次元が違うものと思われ
本気で解読にかかられたらいくらプロテクトかけてもだめなのと一緒
0215親父PG
04/04/11 10:09ID:uZkaW7mzバイナリエディタ程度では改変できない仕組みは考えていますが、
214氏のご指摘どうり本気で解析されればプロテクトは無理でしょう。
ローカルで作られたシナリオの経験はキャラシートに反映されないとか、対策はありますけどね。
あとはシナリオに適正レベルを設ける。
システム側でおかしなシナリオを最初から「エラーにより排除」するなど
いろいろと対策はありますけどね。
複合的なエラーチェックでめんどくさくするぐらいしかないのかなorz...
0216新人PG
04/04/13 23:45ID:w0VogWFUだんだんまとめ辛くなってきましたが、ばんがります。
トリガーデータ案:草案を元にしたもの
[シリアルID]:数値5桁
[基本命令系]:わからん
[値種類1]:英数字5桁以内
[比較対象値1]:数値5桁
[値種類2]:英数字5桁以内
[比較対象値2]:数値5桁
[比較方法]:英数字?
[真処理]:英字?桁
[偽処理]:英字?桁
[パラメータ]:???
記述例)
00001,?????,Int,0,Scene,00020,Equal,ACTSCENE,00030,00002,MOVETRIGGER,00003
IDは00001、比較値1は数値型定数0、比較値2はシーン00020の戻値、比較方法は値等価判断
真の場合シーン00030を読み込みトリガ00002を起動、偽の場合トリガ00003に移動。
とりあえず、Excelで編集と言う事でXML云々は考えない方向で行きます。
このようなCSVを作成していく感じでいいんでしょうか?
0217新人PG
04/04/13 23:49ID:w0VogWFU俺、要るのかな・・・?
0218名前は開発中のものです。
04/04/14 01:26ID:fCb1f0Lh最近のマシンオフィス標準搭載かなり減ったし
その辺の自動化もツール担当の仕事かと
0219親父PG
04/04/14 05:14ID:EE4mRz9Nお疲れさまー、ご無沙汰しています。
>このようなCSVを作成していく感じでいいんでしょうか?
違いますorz...SUMAN
エクセルの話ですが、あくまで「エクセルでも」データ−が見れるというものでありまして、
それはコンパイルされたデータ−を、バイナリ<>CSVツールで編集(デバック)できるように
するというものです。 よってスクリプト記章ツールは別に必要です。
>>217
ここ数日の書き込みでそう思われたのですねorz...
でも、決まったのはメインPGが受け取るバイナリの形でありまして、スクリプト記章ツールがいらなくなったわけではありません。
メインPG側の受け取りバイナリの形と解釈方法を提示しましたので、スクリプト側のツールはスクリプトの文法を(設計)設定して
予定のバイナリを出力するものを、設計してくれることを期待しています。
スクリプトの文法はXMLでも、オリジナルでもOKです。
ここで必用なことはシナリオライターが必要とする機能の調査と設計、機能の単純化などです。
バイナリからの逆復元(バイナリからのソース復元機能)は必用ありません。(ソースコード保存)
メインPG<バイナリ<スクリプトツール
↑↓
CSV
エクセル
スクリプトの文法、設計はまったくの白紙状態です。新人PGさん、大変期待しています。
0220親父PG
04/04/14 05:35ID:EE4mRz9Nおつかれさま EXCELは補助ツールなのでスクリプトツールは別途作成予定です。
メインPG側のバイナリの形さえ決まっていれば、スクリプトツールは自由に選べます。Excelもそのうちのひとつだと考えてください。
(もっともExcelの場合,スクリプトではなくバイナリエディタっぽい使い方だけどね。)
私の作業の報告
WINDOWの設定ツールがひとまず完成しました。12種類のスタイルを定義できます。
メイン側は使用するときにこれらのスタイル定義にしたがって、先につくったボタン定義用のデータ−構造体より必要なデータ−をコピーして、
画面に作成します。現在、メイン画面にWINDOW本体と上部バーとクローズボタンを表示するところまでです。(WINDOWSの上にWINDOWS作ってるよorz...)
今日は久しぶりの休みです。ぼちぼち作業を始めます。
0221名前は開発中のものです。
04/04/14 10:42ID:fCb1f0Lh全角数値が半角になったりしてくれるんであんまり便利な物ではないですよ
ダブルクォーテーションでくくった項目は強制的に文字列として読み込んでくれるとよかったのですがね
0222親父PG
04/04/14 10:50ID:EE4mRz9Nそれは拡張子をtxtで読みこめば回避できます。読み込み時にセルの属性指定可能。
このシステムに関してなら、トリガーテーブルに文字列はありませんので大丈夫です。
0223名前は開発中のものです。
04/04/14 17:33ID:bV4eSf3V0224親父PG
04/04/14 17:50ID:EE4mRz9Nこんなプロジェクトがあったんですね。知りませんでした。orz...
OSを作る気はありまえん(W そんな能力はありませぬorz...
新人PGさんへ 既にご存知かもしれませんがこういうサイトがあります
http://www.ultrasync.net/dee/kr2helps/tjs2doc/contents/
私が仮想マシン側の設計ですね。
この板見てるとツクール派と、それ以外を使ってみたいという方がけっこういらっしゃるようですね。
自作であればスクリプトエンジンが必用ですが、そのへんはみなさんどうしているのかな?
0225名前は開発中のものです。
04/04/14 23:06ID:FAI9201/何コイツ?
0226名前は開発中のものです。
04/04/14 23:26ID:7S1uDrPs・・・もっと親父になるとマジではかどらなくなるから
今のうちにやりたい事やっときなされ。
0227WinMEMEME!fuckme!
04/04/15 00:25ID:WvzZ497j0228新人PG
04/04/15 01:04ID:XWJTPtW1>>親父PGタン
なんとなくわかりました。スクリプト言語(みたいなもの)を設計するって事ですね。
それならいっそのこと、トリガーだけではなくてシーン等も記述するできるようにしたいですよね?
あまり汎用的なものは考えていないのですが、現ゲームの作成に特化したものを目指すようにします。
#余談ですが、卒論のテーマと似ていますw
#流用しながら作る予定なので、早く作れるかも?
0229親父PG
04/04/15 07:18ID:lFmywgB/^^;ガンバリマス
>>227
orz...
>>228
おつかれさま。お仕事大変ですね。
>スクリプト言語(みたいなもの)を設計するって事ですね。
そうです。よろしくお願いします。
>トリガーだけではなくてシーン等も記述するできるようにしたいですよね?
そうです。そして出力ファイルは分離して行われます。
トリガーとシーンは分離します。
>あまり汎用的なものは考えていないのですが、現ゲームの作成に特化したものを目指すようにします
スクリプト言語内で一旦中間コードにして、そこから出力フォーマット用に変換するように設計すると良いですよ。
出力フォーマットを切り替えると、別の用途用に使えるように切り替える事も出来ます^^;(仕様変更にも強くなりますorz...)
#余談ですが、卒論のテーマと似ていますw
#流用しながら作る予定なので、早く作れるかも?
おお! 期待してますよ♪
0230親父PG
04/04/18 17:10ID:2197QA5A日々少しずつ進んでいますが、なかなか進展しません。今調整いている部分が大掛かりな部分なので仕方ないのですがorz...
親父プロジェクトの構造
LIFE=trueであればACTトリガーvietualFunction
「基底クラススケジュール」→インプリメント部
↑ ↓各オブジェクト(ポリゴンなどをオブジェクト配列のデータより作成)
↑一定周期 描画ループ
Windowloop →→→ 描画
↑
↑
WindowMessage(OSトリガー)→範囲チェック→オブジェクトデータ−の操作
各オブジェクトデータ−配列(STL)
○WINDOWSクラス<−現在作成中 登録済みのWINDOWのスタイルから複製を作って、ポリゴンーテクスチャーボタンなどを画面に配置する。
○ボタンクラス テクスチャとボタンの振る舞い(トリガー)や描画をコントロール
○テクスチャクラス テクスチャのファイルの読み込み部分切り出しなどをコントロール
○ポリゴンクラス 主に四角形を作りテクスチャが張り込まれる。線や点にも対応
○ポリゴンクラス3D 上の機能に3D用に派生したクラス
○ライトクラス ライトを定義するポリゴンと同じように移動させることができる
○フォントクラス フォント表示
○範囲クラス 範囲を定義する(3D対応)
○オブジェクトIDマネージャー オブジェクトを作成した時にユニークなID番号を発行する。各オブジェクトの配列のINDEX値も格納してハンドルからアクセスしたいオブジェクトを識別できる
○プロファイルクラス 定義ファイルの読み込み
○コマンドクラス 下位コマンド全般を定義コントロールする為の関数群
さて、作業にもどりますorz.... パコに入っていたCDが出てきたので押し込んだらCIV3の画面が...激しく誘惑に駆られるw
0231名前は開発中のものです。
04/04/19 18:50ID:zoW1zDwj全くわからん。
HPでも立ててみたら?
0232親父PG
04/04/19 20:15ID:HvqP5Z0mどうも^^;
HPですが「新人PG」さんのご好意で以下のものがあります。
http://www.geocities.jp/oyajipg/index.html
さてWINDOWですが、複数面サポート。
クリックにより背面と前面入れ替わる動き。
タイトルバーの表示
キャプションの表示
クローズボタンの表示、MOUSEOVERで反応、クリックでウインド閉じる
タイトルバーをクリックして動かす
Windowのレクト領域の頂点に色を設定できる機能
Windowの半透明表示
こんな所までできました。
改めてWINDOWSのコントールオブジェクトを1から造るの面倒だなぁとorz...
しかも、スクロール機能、拡大縮小機能がありませんね。マンドクサイorz.....
まぁWINDOWSを造っているわけではないので、ボタンとメニューとテキストを載せて、
動かせるようになったら、一旦収束してスクリプトに移ります。
バイナリを解読して仮想スクリプト用エンジンを造る事になります。
バイナリコードと命令表を作らないといけません。
ほんとコツコツだなぁ(笑
0233231
04/04/19 21:14ID:AzIQfmczVisualC買うべきですかね。一応高校生なんでアカデミックで買えるから買ったほうがいいんですかね。
いや、Cのかけらもわかってないんですけど。
金がないからDev-Cという安易な考えは捨てちまったほうがいいですね。
紹介していただいたページにも書いてあるし。
んじゃ、がんばってください
0234親父PG
04/04/19 21:46ID:HvqP5Z0mアカデミックですとC++.net10000円しないんですよね。
フルで買っても2万5千円ぐらいかな?
ちなみにC++.net単体でCの学習は辛いかもしれない。
言語の解説は入っておらず、クラス構成が書かれたポスターのような表が何枚か入ってるだけ。
最初の事初めでしたらC#のほうがマネージドコードやコンポ−ネントなどが使い易くてよいかもしれませんね。
(C++.netでも使えるけど、ディホルトの設定では使えなかったりするしorz...)
フリーのCビルダーも良いかもしれません。なにより結果に最短なものがベストです。
それでしばらく学習した後に、DirectXが良いと思われます。
C++.netはここの板的にはDirectX以外の用途には使えません(w 怒られるかな@rz
0235名前は開発中のものです。
04/04/19 22:33ID:4HaR2ypQいまだと無料でつかえる言語たくさんあるので言語自体が不慣れならそちらからはいるといい
そしてゲーム作るのにC++じゃないということはない
0236新人PG
04/04/19 23:10ID:rjSD3Om1ぶっちゃけ仕事忙しすぎて、あんまり手がかけれない状態に陥ってますが、勘弁してください・・・(汗
>>親父PGタン
今言語設計に取り掛かっていて、前に出して頂いた目的コードを参考にしながら中間コードの出力を想像している所です。
似非Java言語仕様となっています。
構造化フローOnlyで、型チェックは今のところ省いています。
連休までには動くものができると思いますが、それまではソース&仕様書の断片を小出しにしていきます。
ただ、今の目的コードの草案だけではちょっとムリポです。ある程度作ると、いろんな面が見えてくるので
そこで突っ込みをいれてみます。(こんな感じの進行で行くんですよね?w)
環境Win2K + VC++7.0 + STL + Boostてな環境です。
ソース公開するつもりなので穴があったら突っ込んでください・・・。>コンパイラ職人
0237親父PG
04/04/19 23:31ID:HvqP5Z0mお疲れ様、お久しぶりです。
進行についてはそれでOKです。というか付き合って頂いて有難うです。
こちらの仮想エンジンは固定長トークンを随時実行していくというタイプになります。
あまり賢いとはいえません(orz...
CPUコードのようなイメージで、命令にはいろいろな「バリエーション」を選択できます。
とりあえず基本的な制御構造の部分を決めていきましょう。
「命令」トークンの価決めが必要ですね。取り合えずNOPは90Hで(謎
Windowの部分が完成したら一旦UPして見てもらおうと思います。
プラットフォームしかできていないので、大掛かりな割にはしょぼいのですがorz...
0238とおりすがりの親父PG
04/04/20 17:51ID:UA9bY4lnTYPE 1 48byte DataString
struct stScriptTcodeA {
unsigned short ;//S/N シナリオシリアル
unsigned short ;//ID 番号
unsigned char MainCodeToken;//このテーブルの主な役割を示す
char Enable;//この値が-1の場合シナリオエディタを使ってコンパイルされていない 0:disenable 1:enable
unsigned char PAtype;//パラメーターAの指している場所、使われ方等をコードで示す
unsigned char PBtype;//パラメーターBの指している場所、使われ方等をコードで示す
int ParameterA;//パラメータA
int ParameterB;//パラメーターB
short SubParameterA;//パラメータA sub
short SubParameterB;//パラメータB sub
unsigned char CalcToken;// 計算式
char BoolToken;// トリガー条件 真の時 偽の時 =0 !=0 - + -1 +1 2の倍数
unsigned char ActToken;//アクション番号
unsigned char ParameterType;0: int*3 / 1: short*6 (HIWORD)(LOWORD)..
int Callparametar1;//パラメーター
int Callparametar2;//
int Callparametar3;//
int Resaved; //(this Area Used System Work) 使用者がワークエリアとして使う
int Resaved; //(this Area Used System Work)
short Resave01;
unsigned char CountToken トリガーをまとめて使う場合、いくつあるか?
unsigned char EndofToken 命令の終わりコード 終わり・次がある
};
0239231
04/04/20 19:09ID:558xdrhWなるほど。Cの勉強をしようと思ったとき、「よくVisualCでしか動かないコードを載せているサイトや本が多い」
と学校の先輩に言われたのでVisualCを買おうかと思ったのです。
で、GCC(Dev-C)を使っているのは、これはなんとなく……。
いろいろありがとうこざいます。
>>235さま
今までDelphiを使っておりました。ただ、学校(工業高校です)の勉強でCを使うらしいし、Cは実行速度が速い
と聞いていたのでこの際Cもやってみるか、と思った次第です。
0240名前は開発中のものです。
04/04/20 19:18ID:svF6Tlnf***すれ立てるまでもない質問はここで 第53刷***
http://pc5.2ch.net/test/read.cgi/tech/1081170910/l50
0241親父PG
04/04/20 20:05ID:EEGw5GpvDelphiをお使いですか、私も愛用しております。私はツール類はDelphiを使って作成しています。楽ですからね^^;。。。
最近は、「造りたいもの」に合わせて言語を使う(選ぶ)傾向があると思いますので。特にVCが必用ということはないと思います。
VCにこだわらなくても慣れて来ると、Cファミリーに属する言語は殆ど理解できるようになりますから(W
また実行速度は学習段階では考えなくても良いと思いますよ。
サイトのサンプルはコピペではなく、意味を理解して使う事が望ましい。ですからVC用に書かれていようが関係ありません。
例をあげるとDelphi用のコードを書いている時に、サンプルはCのソースコードを読むことは沢山あります。
むしろVCという開発環境を使いこなすのは大変かもしれません。それはプログラム言語の学習とはちょっとニュアンスが違います。
MFCやらマネージドクラスやらブーストやらDirectXやらSTLやら(ムニャムニャ
ライブラリの導入一つではまる事はざらにあります(ここがCの柔軟性の負の遺産と思いますがorz...
結論を言えば、慌ててVCにすることはないと思います。VCでしか造れない(造り易い)という目標があれば別ですが。
>>240
お気遣い有難うございます(^^*/
今日は久しぶりの早い帰りです。明日も昼からなのでじっくり取り組もうと思います。
今作っているWINDOWですが、マウスに合わせてウインドがグリグリ動いて、ちょっと嬉しい。
マウスを激しく動かしたり、ビューポート外でマウスを放したときの処理など、エラー処理と
(その危険な)コードを探すのに苦労しました(死
危険なメモリアクセスが(滝汗
しかしポインターって便利ですね。
蛇足ですが構造体にSTLのポインターって定義できるんですよね。
実行時にNEWでSTLを実体化してドカドカデータ−をぶち込んで使っています。
さて、呆れられるまえに親父日記は終了します。
0242新人PG
04/04/21 01:25ID:eYcWXse+>>親父PG
まずは、Windowの基盤完成おめでたうございます。
DirectXの穴(デバイス消失など)も考えられて作られているようで、素晴らしいと思います。
これはゲーム完成が楽しみですね。
トリガデータ設計ありがとうございます。やはり目的コードが決まるとモヤモヤが消えます。
現在構文解析ツリーの設計と言語設計の矛盾を小一時間(いや、もっとか)問い詰めています。
大学の教科書見て復習しながらの実装です・・・(汗
あと、まとめページの方を明日ぐらいに更新しておきます。更新ペース遅くてスマソです。
#余談1
主観ですけどVCよりも使いやすいC/C++環境って無かったです。
MFCの使い方から教える入門書が悪い気がしますw
個人的には
コンソール(C++の文法と標準関数覚える) → 猫でも → MFC入門(斜陽ですけど)
で十分な気がするんですけどw つーか.NET覚えてWindows.Form覚え(ry
#余談2
Windowsでゲームを作る上で、C#.NET + DirectXも選択肢に入る時代になったんですね・・・。
思った以上に高速に動作します。MSがパフォーマンスを最も重視して設計したと
豪語していますが、流石に言うだけのことはありますね。
0243名前は開発中のものです。
04/04/21 01:50ID:cLgAiJmmその辺はDirectX使ってるのなら問題になることはないでしょう
インタプリタの旧VBでもネックになることもよほどのレベルじゃない限りまずありません
むしろ中間言語系は同一バイナリでも最適化できるのもポイントです
たとえばjavaの1.4.2は従来バージョンのアプリも大幅に高速化しています
これはSSEを使っているためです
静的コンパイラの最適化はたしかにいいのですが動的に環境に適応する
コンパイラ(hotspot技術)というのも使うかどうかはともかく遊び倒す
テーマとして面白い物です
ちとふるいですが
http://www.geocities.jp/toshio16369/column/021108a.html
もちろん、今の最適化はこのころからくらべてかなりよくなっています
0244親父PG
04/04/21 04:38ID:OH77B7oHおつかれさま。 >現在構文解析ツリーの設計と言語設計の矛盾を小一時間(いや、もっとか)問い詰めています。
^^;復習してまでやってもらえて感謝です。
配列は会社で暇な時に紙に書いて構築しておりました。32Byteに収めたかったんですが、48byteになってしまいました。
あれだけではわけ解らないと思いますので補足説明しますね。
unsigned char MainCodeToken;//このテーブルの主な役割を示す
これはズバリそのままで、「計算」とか「IF文」「Swith文」「価のセット」など仮想VMに命令を伝えます。
char Enable;//この値が-1の場合シナリオエディタを使ってコンパイルされていない 0:disenable 1:enable
このー1というのはマップコンパイラ以外のツール(MAP(地形)にトリガーを埋め込むツール)などで
書き込まれたデータ−という意味です。 これを見つけたコンパイラは処理を追加義務が発生します。
命令コードは「地形MAPツールによって追加されたトリガ」になります。
unsigned char PAtype;//パラメーターAの指している場所、使われ方等をコードで示す
次のパラメータがFGのINDEX番号なのかMAPの座標なのか価なのかを表します
またINTをつかうかShortを使うか両方つかうかを識別します。
INT ,Short , (Short+INT), Short:INT , Short,(HIWORD)Short,LOWORD(Short)
unsigned char CalcToken;// 計算式
2つの価を同計算計算するか示します + - and or not > < >= <= ,INTかShortか両方か
パラメーターが複数ある場合(PAtypeで指示)、もここのコードで判断します。
同じ[+]を表すコードでも両方を加算するトークン用、片方だけのトークン用があります
パラメーターが複数ある場合、処理に引き渡す引数としても使えます。
char BoolToken;// トリガー条件 真の時 偽の時 =0 !=0 - + -1 +1 2の倍数
-64〜+64までは価として(6ビット)最上位ビットが 真の時 偽の時を表します
7ビット目がONの場合ユニークな条件を設定します65〜127 -65〜-127
00000000 は計算結果が0の時 真なら
10000000 は計算結果が0の時 偽なら
00000001 は計算結果が1の時 真なら
01000000 ユニークな条件(いまは考えていないorz)
0245親父PG
04/04/21 10:08ID:OH77B7oHコンピューターの高速化がもたらした波ですなぁ。
Parlで最初にスカラー型を知った時は驚きでした。インタプリタできる芸当ですね。
ところで...
じっくり取り組もうとか宣言しているにも関わらず、パコの前で気絶してしまいましたorz...
0246名前は開発中のものです。
04/04/21 11:34ID:5LzXW3vc○disable
0247名前は開発中のものです。
04/04/21 14:14ID:y1g5Kw7w○Perl
0249親父PG
04/04/21 19:09ID:iaRnmK/dスクリプトを組むに当たって構造設計のお話を致します。
定義 スクリプト言語の本システムにおける位置付け
本システムVMにおいて動作命令を出す事が可能である。
条件文は主にトリガーテーブルに置かれ、実行命令文をわけて管理される(トリガーTBLと実行データ-)
アイドルは何処に書かれる?
アイドル状態を想定する必要は無い。スクリプトは処理が終わると自動的にアイドルモードに切り替わる。
必要がある場合にVM側よりトリガーが引かれ実行される
MAP座標
ユーザーの入力 -トリガ>トリガーTBLを検索 >実行>VMに実行部(が書かれたシナリオ上の番号を渡す)
ボタンを押した時の処理
現在考えているのはこのようなタイプの静的なスクリプト処理です。(一部引数を動的に処理)
ここからが相談ですが、動的に処理をしたほうが好ましい内容があると思われるのですが、何か希望がありますでしょうか?
変数、配列 などがまず考えられます。
具体的な実装方法は考えていませんが、「外部プログラムの起動」やゲーム特有の処理が必要な場合、DLLの読み込みなども考えられます。
------------------------------------------------------------------------------------------------
余談ですがツクールXPの紹介HPを見ました。あまり細かいところまでは判らないですが、
MAP(地形)が3階層 画面サイズが640*400 MAPツール(チップ編集による地形作成)
スクリプト機能 暗号化機能などがあるようです。 暗号化機能というのは注目すべきアイデアかもしれませんね。
MAPツール(チップ編集による地形作成)については考察が必要かもしれません。
0250親父PG
04/04/21 19:57ID:iaRnmK/d新人PGさんはご存知かもしれませんが、MAPツールについて確認の為に書いておきます。
ゲームの画像の伝統的なやり方として、チップデータ-によるMAP作成という手法があります。
これは決められたサイズ8*8 16*16単位で書かれたチップデーター(画像)を並べて画像にしていくというのがあります。
これはコンシュマーのマシンが1キャラをハードウェア的にそのように扱っていた為に、行われてきた伝統的なやり方です。
同じパターンの使いまわしができるという点で、手動でデータの圧縮しているという側面がありました。
PCエンジン開発用のPC98用ツールが広く出回って、色々なゲームの開発用に使われた事は結構有名(orz...
さてツクールでは、そのような方法とおぼしき方法が使われているようです(違っていたらごめんなさい)
DirectXでは画像を細かく分割して扱うメリットはないので、親父システムではこのような方法はサポートしません。
地形画像データ-はJPGで(笑
最近の(とはいってもかなり昔からだけど)地形ツールは論理的な地形データをツールによって並べると、
境目には自動的に埋められていくようです。平平山山<こういうデータ-の場合平^山の間に自動的に間を補完する画像データ-が置かれるようになっています。
こういうツールも1から組み立てると大変ですねぇ。とりあえず最初は1枚画でいいかなorz....
0251名前は開発中のものです。
04/04/21 20:06ID:cLgAiJmmJpegだとカラーキーやアルファ扱うとき困りませんか?
重ね合わせとか普通しますし
それにハイドライドやFFの森のようなものをやる場合どうします?
0252231
04/04/21 20:44ID:uRL7H9Xs長い解説ありがとうございます。
>>サイトのサンプルはコピペではなく、意味を理解して使う事が望ましい。
肝に銘じておきます。
取り敢えずDev-Cで頑張ってみようと思います。いつかそれなりにプログラムが書けるようになったらここに戻ってこようと思います。
>>新人PGさま
わざわざありがとうございます。
0253親父PG
04/04/21 23:39ID:OH77B7oHいろいろと方法があります。アンチエイリアスなどが必用な場合を「除いて」単純なクロマキーであれば
|アンド演算で抜けます。また全体を半透明にする場合はα値を偽造します。
うまくいかなかったらPNGでorz..
>>231
いつでもどうぞ^^ 前向きな書き込みであれば、歓迎しますよ。
0254新人PG
04/04/22 00:09ID:GFAvdjZl色々意見ありがとうございます。
あまり大それた物を期待してもらうと逆に恐縮なんですけど、自分の出来る範囲で頑張っていこうかと思います。
>>親父PGタン
一応まとめの方に、トリガデータを載せました。
僕のアタマが悪いのか、完全理解が出来てません。また聞きます(汗
>>スクリプトの構造設計
・アイドル処理は要らない
同意&同感です。こちらはトリガ処理・シーン処理記述のみを書かせます。
しかし未だにMAP座標にトリガーを持たせるのにはちと抵抗があります・・・。
・静的か動的か
変数、配列はサポートします。
DLL読み込みやその他プラグイン読み込み等は、今は考えてないです・・・。
とりあえず、第1段階完成後に考えます。
・チップデータの地形
実はあんまり好きくないです。
本当は3Dで臨場感のあるタイプのが好きなのですけど、難しい=親父PGタンが大変 なので
今回はアリかななんて思っています。
まあ、チップも一枚絵も対応すると言う事ならば、チップで組んだほうが両対応で良いと思いますけどね。
0255親父PG
04/04/22 00:10ID:cy5y1emuいくつか修正点がありますので書いておきますね。
ParameterA パラメータ左辺値? 2
ParameterB パラメータ右辺値? 2
意味のコメントはそれであってますよ^^
サイズは4です。
CalcToken 計算式?? あまり良く分っていない・・・
unsigned char CalcToken;// 計算式
2つの価(ParameterA ParameterB)
をどのように計算するか示します + - and or not > < >= <= ,INTかShortか両方か
パラメーターが複数ある場合(PAtypeで指示)、もここのコードで判断します。
同じ[+]を表すコードでも両方を加算するトークン用、片方だけのトークン用があります
パラメーターが複数ある場合、処理に引き渡す引数としても使えます。
例 10は足し算 A+B
11は足し算 A'A+B'B 二つの価を上位ビット下位ビットで解釈
12は足し算 A'+B' サブパラメーターで演算
例 21は比較 A?B
22は比較 A?B A'?B'
23は比較 HIWORD(A)HIWORD(B) LOWORD(A)LOWORD(B)
こんな感じです。
ParameterType ?
以下の3つのintの分割方法を示します。Short *6とか
解らない点がありましたらどしどしご質問ください。
0256名前は開発中のものです。
04/04/22 00:10ID:hQ7KmIOVいや、jpegってことはピクセルが綺麗に抜けないってところが問題なわけで
ブロックノイズ単位で色が抜けるのはなんかいやだ
ま、pngでいいんじゃない?
αももてるし、パレットもあるし
ところでハイドライドとかの森って実現できるの?
キャラのY座標によって手前に行ったり奥に言ったりするようなオブジェクトなんだけど
0257親父PG
04/04/22 00:19ID:cy5y1emuキャラがある座標にいどうする。
MAP上にはトリガーがあるという情報しかありません
そこで初めてMAPからトリガーテーブルに対して座標引数をもったトリガーが呼ばれます。
と、いっても実際にシステム側からすれば、一致する座標のトリガーテーブルを検索して探すだけなんですけども。
(これが理由で命令コードにMAPから呼ばれた命令)というのがあるわけです。
検索速度を上げるためです。
スクリプト側から見れば、座標データ−さえセットしておけば、システム側から勝手にトリガーを
引いてくれる事になります。
チップデータ−を内部でサポートするというとは、実際にチップINDEXを持って使用時に組み立てる作業を
PG内部でおこなう事をいいます。今回このようなことはおこないません。
0258親父PG
04/04/22 00:30ID:cy5y1emuおお256を踏みましたね。このスレも無事に1バイトを超えました(W
ご心配のJPGデータですが、内部に読み込むとARGB各8ビットというデータ−に変わります。
この時点でαは全ピクセルにFFが割り当てられています。
このFFの価を変化させてあげると半透明になります。
実はこのようなことを心配しなくても、2つのテクスチャはちゃんと抜くことができます。
αが意味を持つのはエッジ処理です。全体に薄くしたり特定色(黒)を透明にする事は特に
PNGを使う必用は無いのです。
綺麗にエッジを抜く場合はαデータ−を持ったPNGが有利ですが。それほど必用でないものや
最初からスクリーン<−フォトショップのレイヤー属性のあれ(or演算)
であればαデータ−なしでもそれほど問題になりません。
要するに使う場所と目的によって決定されます。
0259親父PG
04/04/22 23:37ID:cy5y1emu>しかし未だにMAP座標にトリガーを持たせるのにはちと抵抗があります・・・。
もしかして、地形MAPにあの48バイトのトリガーデータを持つと、お考えですか?
もしそうなら違いますよ。地形データには「トリガーを引いて」という意味の1バイトデータしか使いません。
眠い、眠いです。ツールにバグがあった...ナオサナケレバorz...
とある会社のデータ−ベースに製品シリアルに「ハイフンと全角ハイフン」が混じって登録されているのを発見。
直すのは不可能との事....(メインフレーム上にあり、直すのにんんんん万かかるらしい)激しく鬱ですorz...
0260名前は開発中のものです。
04/04/22 23:42ID:q2BwaruN0261新人PG
04/04/23 00:03ID:zEfEFbHLお疲れ様です。
メインフレームは触った事ないんで良く分らないですが、コンバータ組むぐらいじゃダメなんでしょうね・・・きっと。
>もしかして、地形MAPにあの48バイトのトリガーデータを持つと、お考えですか?
>もしそうなら違いますよ。地形データには「トリガーを引いて」という意味の1バイトデータしか使いません。
いえ。トリガーを変更した場合、直接は関係なさそうな地形MAPもデータを作りなおさなきゃいけないのでそう思いました。
ツールが補完するとしても、地形MAP編集ツール等がトリガーの事を気にしなくてはいけないデータ構造はちょっと・・・。
地形MAPは地図情報のみを扱う事にすると良いのでは?、と思ったのです。
言語設計なのですけど、一連のシーンを1関数として定義していきます。
吉里吉里のスクリプトを大いに参考にさせて頂いています、が、そこまでの汎用性は無いです。
言語上に機能として持たせたい物で、レイヤー・ウィンドウ管理、外部ファイル読み込み、がありますがどうでしょうか?
(特に外部ファイル読み込みは静的か動的かの話題なんですけど・・・)
0262親父PG
04/04/23 00:05ID:nZvvFTd4まだデザインなど適当ですがこんな感じです。
http://www02.so-net.ne.jp/~wizzhen/flash/test.jpg
今 標準的なメッセージ表示用のものを造っているところです。
OKボタンは左上のものが入ります
ツールのバグでいま表示できていませんorz...
0263親父PG
04/04/23 00:11ID:nZvvFTd4おつかれさまー
メインフレームの件は私もそう思ったんですけどね。そういう簡単なものではないらしい
未知の世界(デッカイTAPE装置が動いている世界...
MAPの話
例えばMAPにトリガーが無いと仮定すると、
キャラが移動する毎にトリガーテーブル−のサーチが必要になります。
これは効率が悪いので、MAP側に「探せ!」というコードを埋め込むわけです。
外部ファイル読み込みは 動的に処理しないとあまり意味はありません。
固定長のトリガーテーブルは後ろに付け足しできるなど、扱い易い点はあると思いますけどね。
0264親父PG
04/04/23 19:05ID:nZvvFTd4豆乳システムの命令リファレンスです
ttp://tonyu.kake.info.waseda.ac.jp/api/wiki.cgi?page=%cc%bf%ce%e1%a5%ea%a5%d5%a5%a1%a5%ec%a5%f3%a5%b9
これを参考に実行部のほうも定義していきますね。
0265親父PG
04/04/25 16:09ID:F+nBnVBhhttp://www02.so-net.ne.jp/~wizzhen/flash/test.jpg
文字出力が出来ました。
このウインドは全角で24文字程度の出力用です。
文字量が増えた時は何もしませんorz...
スクロール機能を備えたウインドはこの次に作成します。
ところで皆さんは文字列用のライブラリは何をお使いですか?
(特に可変文字列など)
私はSTLのbasic_string を使っておりますが^^
■ このスレッドは過去ログ倉庫に格納されています