親父PGがゲームを作り始めるスレッド
■ このスレッドは過去ログ倉庫に格納されています
0001親父PG
04/03/30 02:40ID:phIrC7nNC++やC、アセンブラは昔こなしたし、プログラムの事なら自信はあるけど
ゲームは作った事が無い方。現場からも引退したし(w。
ここは一つ趣味でDirectXでも勉強して、ゲームでも作ってみようかなぁと思った、
オジサンPGのスレッドです。
一緒にマターリライブラリから作りませんか?
0065名前は開発中のものです。
04/04/02 12:12ID:hbuLfTYlフォントサイズを計算 -> テクスチャの生成 -> GetGlyphOutlineのイメージをテクスチャ -> レンダリング
出力先の大きさを固定するのならサイズの計算はいらないけど。
BMP作成というのが意味不明。
0066名前は開発中のものです。
04/04/02 12:27ID:2mBUdLBh素人は引っ込んでろよ。
>>64
文字主体のゲームだとしても漢字全部を入れる必要はないかと。
使用している文字吐き出して必要な分だけ抽出する仕組みを用意すれば効率いいよ。
0067名前は開発中のものです。
04/04/02 12:48ID:hbuLfTYlGetGlyphOutlineで得られるα成分はどうするの?
なんちゃって玄人の>>66よ、素人にも分かるように説明してくれ。
0068名前は開発中のものです。
04/04/02 12:55ID:CnIYY+bY0069名前は開発中のものです。
04/04/02 12:58ID:WZRWRsbYお前ゲーム機用の開発した事ないだろ?
0070名前は開発中のものです。
04/04/02 13:03ID:hbuLfTYlGetGlyphOutlineのイメージをテクスチャ に転送する際に、
BMPがDIBや自分で確保したヒープであっても、
余計なものを経由して、わざわざ動作を遅くする理由は?
>>69
DirectX経由の話であって、コンシューマーの話ではないはずだが、
何を言っているのかますます意味不明。
0071名前は開発中のものです。
04/04/02 13:05ID:sbRQNnGs作業がしやすいなら(使いたい機能を感覚的に探せる)どんなタイプでもかまわない。
最低限の改行/改ページ指定の入った文章をスクリプト書式に変換(もしくはデータ化)
でき、可能ならその逆(スクリプトからほとんど文章のみの形にする)もできるようにして欲しい。
校正しやすい形でシナリオを書きたいからね。
0072名前は開発中のものです。
04/04/02 13:08ID:hbuLfTYlその時点で私のよけいなお節介だったというだけの話なんだが。
話が別のところへ行きそうな予感。
0073名前は開発中のものです。
04/04/02 13:53ID:2mBUdLBh思ってる池沼にはうんざり。
0074名前は開発中のものです。
04/04/02 14:09ID:2oL9ZmmW何故BMPなんて余計なものを経由するのか、明確な説明があれば即消えるけど。
なんで理由を書かずに、高圧的な書き込みだけ残していくの?
理由があればそれでよし、無駄な部分なら省けばいいだけの話題なんだが。
0075名前は開発中のものです。
04/04/02 14:12ID:MlWn9c9H抱きしめてやるよ俺が
0076名前は開発中のものです。
04/04/02 14:20ID:J12mvrUf例えば、
TextOut>DIB>テクスチャ
なんかの場合は、透明色をテクスチャに設定し直さなければならないので、
GetGlyphOutlineからダイレクトの方が効率がいいのでは?
0077名前は開発中のものです。
04/04/02 15:04ID:UR9wlBoPしかし、このスレはいろんな意味でマズーだなぁ・・。
いいのかこんなんで、みたいな。
0078名前は開発中のものです。
04/04/02 15:16ID:WZRWRsbYお前プロじゃないだろ?
0079名前は開発中のものです。
04/04/02 15:24ID:2oL9ZmmWそれがプロの仕事なのか?
文句があるのなら技術的に突っ込みを入れればいいだけなのに。
0080親父PG
04/04/02 15:26ID:5nHc263hダイレクトというのはこういう形ですよね
文字データ−GetGlyphOutline
V
DIB(背景)> OR加合 > テクスチャ>ポリゴン貼り付け
(DIB(背景)はなくてもOK)
○TextOutを使う場合
透明色については単にORで演算すると抜けてくれますので大丈夫です。
DIB(BMP)そこに背景の画像も同時に保持する為です。
textoutの為に(内部に)BMPが必用なので作成しております。
ループ開始前にハンドルで保持できるという、運用上のメリットもあります。
○GetGlyphOutline
ループの中で文字データ−を作成するのは、文字列が変更した時意外は極力避けるべきなので
事前に何処かに置いておく必用があります。
TextOutの時にはBMPがありましたので、そこに保持しています。
(メモリと同じ扱いですね)
同じロジック上で動くならその上に置いておけばいいや!という考えなのですけどね...
ところでこの関数は1文字ずつしか機能しないのですが、そのへんの速度って大丈夫なのでしょうか?
まとめ
当初 TextOut命令でFONTデータ−を作成する仕様だったので、当然(内部)BMPを作って
ハンドルを保持する形が生まれた。
しかしそれではアウトラインが汚いので、ユーザーが切り替えられる仕様を追加した。
既にBMP経由のロジックが出来ているので、単にGetGlyphOutlineデータ−を置いておくメモリとしてBMPを使用した。
ざっとこういう理由でBMPがこの中に残っています。
保持するBMPは1ピクセル8ビット深度フォーマットで作成。これなら両方のデータ−を収めることが可能
こんな感じかな... 俺はなにか間違えているのだろうか orz.....
0081名前は開発中のものです。
04/04/02 15:28ID:koF3jQIY0082名前は開発中のものです。
04/04/02 15:40ID:2oL9ZmmWなぜレンダリング時にハードウェア側で背景とフォントを合成しないの?
>文字列が変更した時意外
背景と分離しておけば、背景が動的に更新される場合も、
文字列に変更がなければ、文字列用のテクスチャを書き換える必要が無い。
背景は更新されないことが前提?
0083親父PG
04/04/02 15:58ID:5nHc263h>>71
校正の容易さについては重要な指針とさせてもらいます。
==============================================================
言語仕様のプラン
1)Cライク
if (fg[24]==25){
PUTMES(1,1,'メッセージ出力');
}
2)単純化したもの
[24]==25,PUTMES,メッセージ出力;
3)EXCELを前提
PUTMES,'メッセージ出力'(24,=,25);
こういう形よりWEBのツリー型の掲示板のような形のほうがいいのかなぁ...
Parlで組むか!(orz スミマセン ジョウダンデス
0084親父PG
04/04/02 16:00ID:5nHc263hごめんなさいorz
データは背景用と文字用と2つ持っています。
レンダリング直前に加算してます。
0085名前は開発中のものです。
04/04/02 16:05ID:2oL9ZmmWテクスチャを使っているのなら、なぜレンダリング時に、
ハードウェア側で合成をかけずに、その前過程で合成するのかが疑問。
0086名前は開発中のものです。
04/04/02 16:18ID:MlWn9c9H0087親父PG
04/04/02 16:20ID:5nHc263hポリゴンに張り込むテクスチャ1枚目に、データ−を放り込んだらうまくいったからというのが理由です。深い意味はありませぬorz
加合用の2枚目のテクスチャをさらに別途用意して、データ−を他所からもってくるなら(他にいろんな可能性があるとはいえ)
テクスチャは1枚でいいような気もするのですが...
0088名前は開発中のものです。
04/04/02 16:34ID:2oL9ZmmWそれにゲームの内容にもよるけど、サウンドノベルでもなければ、
普通は背景が一枚絵である場合は少ない。
複数のパーツを結合して背景やキャラクターを合成して、
一つのフレームを生成するわけなんだけど。
もしかして3Dデバイス経由でノベルのシステムを作るという話だったの?
だったらすまなかった、この話は忘れて。
0089名前は開発中のものです。
04/04/02 16:55ID:d2sSL+xqとりあえず目標はRPGらしいぞ
だからフォントなんかで速度がネックになるところはないと思われ
最適化に目がいくのはいいが、さっさとゲーム作り始める方がいいような
ネックになる場所とかもそれではじめてでてくるとかあるかもしれんし
#そういや親父のわりに真っ昼間から時間あるんだな
009077
04/04/02 17:01ID:UR9wlBoPマルチテクスチャブレンディングで加工・表示するもんだと思っていたが。
確かに俺は素人だが、、、まあいいけどさ。
0091親父PG
04/04/02 17:05ID:5nHc263h今日は非番で休みです。
明日は仕事ですorz...
0092名前は開発中のものです。
04/04/02 17:34ID:d2sSL+xqスマン
非番という言葉使っていることからタイムシフト系か
つらそうだな
0093名前は開発中のものです。
04/04/03 22:06ID:od+9QL8M密かに応援しているぞ。
0094親父PG
04/04/03 23:27ID:0WOw9AyHどうもありがとう。その言葉を励みに頑張ります。
今仕事から戻ってきました。土曜日は電車が空いてるので、ひざの上でPG組んでました(w
電車には携帯電話禁止と書いてあるが、携帯パソコン禁止とは書いてないからな。
GetGlyphOutline って結構面倒ですね。まだ動きがおかしいorz
文字列からひとつひとつコードを取り出さないといけないし、
UINTに対応して上位バイトと下位バイトを入れ替えなど...
ほんとにこんな処理をループ中にして大丈夫なのかな。
毎フレームやることじゃないな。この処理
0095名前は開発中のものです。
04/04/04 01:15ID:jA6y2hbuSDLとか使うのもいいのではないかと。
0096親父PG
04/04/04 09:51ID:6UsE36R6BITMAPINFOHEDERのbiHeight メンバを−にしてDIBを作成すると
左上原点のボトムダウンDIBになる。
既に概出かもしれませんが.....orz
0097名前は開発中のものです。
04/04/04 11:59ID:KpeQdK+fそのまま書き出しても一部対応してないビューアとかあるけど
内部で使うだけなら問題ない
0098新人PG
04/04/04 12:24ID:yroz7+Kx当方C,C++,C#,VB,Java,Perl,ASM何でもOK。DirectX触った事なしです。
親父PG様の進行を妨げない、便利屋PGとして徹しますので。
0099親父PG
04/04/04 13:51ID:6UsE36R61994年から?
win3.1の頃からそうだっけ?
orzオレハ10ネントテツモナクムダナコトヲシテタノカ....
>>98
おお!参加表明有難う。
もし、やってもらえるなら、前にも書きましたが
シナリオエディタとデータ−規格の設計をお願いしたいです。
フラグ管理も「履歴」機能を追加して「過去4回きてれば」というようなものも欲しいですね。
データの規格が煮詰まれば、こちらでもツールを作ります。
ここでデータの設計を進めましょう。
現在動いている下位レイヤーでは、引数として
「対象ビューポート」、「対象オブジェクト」、「呼出タグ」などが設定できます。
※ピューポート画面分割だと思ってください。
現在、プログラム起動時にビューポート数とその大きさ、「ボタン128個(反応レクト領域数)」、テクスチャファイル名
が入ったファイルを読み込んで画面が変化するようにしています。
またこのプロファイルは何度でも読み直しができます。(画面デザイン切替可能)
(※以上は稼働中)
作成する(予定)の物は
昔、(今もか)ソーサリアンというゲームがありましたが、そのシステムを拡大.拡張する予定です。
(シナリオはヨコスクロールに限定しない)
あと、DirectX SDK落としてきてサンプル覗いてみてください。
経験のある方なら動かすぐらいは簡単にできると思います。^^)|~
アイテムデータの作成は本体PGに持たずに、外部にDLLとして実装して、
他のアプリケーションからも使用可能にします。
うーむ勢いで...公言してしまった。orz ダイジョウブカナ...
0100名前は開発中のものです。
04/04/04 14:08ID:ppxkrtRXそれは楽しみ。
絵とか音楽とか必要な段階になったら、
状況が許せばお手伝いします。
0101新人PG
04/04/04 14:53ID:yroz7+Kx快い回答ありがとうございます。
いきなりそんな重要な部分の設計を任せてもらって感謝とガクブルが半々ぐらですw
勝手ながら、まとめページを作ってしまいました・・・いらなかったら消します(^^;
http://www.geocities.jp/oyajipg/index.html
うpローダとか考えたのですが、ちょっと様子見ということで個人サイト形式です。
シナリオエディタとデータ規格ですね?
先にデータ規格の方の設計を考えておきます。でわ。
0102名前は開発中のものです。
04/04/04 15:15ID:KpeQdK+f流れ分かりやすくてよかったかも
ソーサリアンシステムの概要はしっとるかな?
まぁ、今なら参考にすることはあんまり無いと思うけどね
winはwinでもNT3.1、3.5あたりのお話
win32apiは「new」とかついてたような
新人PGさんのほうがシステムの設計か
なんか逆のような気がしないでもないがw
こういうのはシステムとプラグイン部分の分離が最重要だから
そのへんどうにでもなるようにUTF8でXMLで書き出せておけばいいようなツール類を
量産すべし・・・かな
知っている言語にjava、C#があるのでそのへんは楽っしょ
0103新人PG
04/04/04 15:32ID:yroz7+Kx実はソーサリアンって知りません・・・w
とりあえず、親父PGの意向のままに〜と思っています。
最初同じくXMLでの規格設計を考えていたんだけど、結局はパーサ介してC++で
実装すると思うと、ちょっと躊躇してしまうんすけどね。
いや、C#やJavaでXML処理なんて全然大した事じゃないんですけど、C++だとちょっと
敷居が高いじゃないですか。データ処理をするのにパーサー理解などの学習コストが
あるんですが、そこん所どうなんでしょ?
こちらは一応、Xerces-C++使った経験多少あり。日本語処理とかって今どうなっているんだろう・・・?
ICUとか使うのかな?規格よりも実装に目が行ってしまう、典型的プログラマですなw
0104名前は開発中のものです。
04/04/04 15:41ID:PaXg2AQi0105親父PG
04/04/04 16:27ID:6UsE36R6こちらこそよろしくお願いします。 というか教わることが多いかも^^;
HP有難う立派なもの作って頂いて! 感動ですよつ∇;)
>>102
データ−をUTF8ですか...メリットとデメリットを考えていきましょう。
ツール類に関してですが、私はdelphi使おうかと思ってます。
なにかと文字操作するのは「言語的に得意」なので...
でもCビルダーもいいかもしれませんね。
ちなみに私はVC++(2002)NETとThinkPad(セレ2G)Windows2000で開発してます。
よってこのマシンで動くように作ります(W
GPUはintel82855です。この石でサポートしない機能は使わない。
自分中心でハード仕様決定です。
ノートで動くならサポートする環境も増えると思うので
0106親父PG
04/04/04 16:45ID:6UsE36R6○文字は2バイトと1バイトコードが混じる可能性あり
UINT string_code;
char c1;
unsigned short int c2;
char Moji[48];
for ( int iC=0; iC < lstrlen(Moji);++iC ){
c1= Moji[iC];//1バイトコード取得
c2= ( (Moji[iC]<<8 ) + unsigned char (Moji[iC+1]) ) ;
if ( 0<c1 && c1<128 ){//-の価をチェックルーチンに回すとランタイムエラー
if ( __iscsym(int(c1))!=0 ){
string_code=c1;
}
}else {1byteではないなら2バイトコード
int cc0=_ismbcl0(c2),cc1=_ismbcl1(c2),cc2=_ismbcl2(c2),cn=_ismbchira(c2),ck=_ismbckata(c2);
if ( (( cc0 =! 0)||( cc1 =! 0)||( cc2 =! 0)||( cn != 0)||( ck != 0)) ){
//2バイトコード if ( _ismbcl0(c2)!=0 )こういう書き方できない為
iC++;
string_code=c2;
}else{
string_code=c1;//BPt置いて監視 上から漏れてくるコードあるかな?
}
}
fsize=::GetGlyphOutline( hDC, string_code, GGO_GRAY4_BITMAP, &stGlyphmtrics, 0, NULL, &mat );
...
}//end of for
もっといい方法ありますかね? orz....コンナショリ ビョウガループにイレラレルノカ????
0107新人PG
04/04/04 16:58ID:yroz7+Kxとりあえず、データ規格の概要の構想を提案します。
1)基本的に、データと実装部の分離は出来る限り行う。
2)スクリプトは簡易インタプリタ言語
3)実装部とスクリプトはイベントドリブンの関係
1)はゲーム進行そのものをスクリプトに持たせようってな設計構想です。
しかし、汎用的なものを考えてはいません。あくまで現ゲームに必要最小限の規格を考えています。
2)は企画者やシナリオライターにプログラムを覚えてもらうものです・・・てのは嘘で、
ツールによる作成が出来る程度の簡易インタプリタを考えています。
変数をハッシュ化させて管理する機能などで、フラグ管理などを考えています。
3)は、まだ頭の中でモワモワしています。そのうち図などで詳しく書きますw
データ形式ですけど、XMLでも独自形式でもいいような気がします。(ダメ?)
ここは、自分の裁量で決めかねるので親父PGさんが決めちゃってください。
ツール作りはDephiでつか・・・。
C#.NETとかだと、ツール作りに参加できそうなのですけど・・・。
0108新人PG
04/04/04 17:21ID:yroz7+Kxぜんっぜん試してないので、嘘こいているかもしれないですけど・・・。
一度、GetGlyphOutlineをコールしてバッファサイズを取得してから、実際のバッファを
いれてやれば良いような話がありました。
ttp://www.twin-tail.jp/contents/pg_tips/tips000.htm
こういうのではないでしょうか・・・?
0109名前は開発中のものです。
04/04/04 17:34ID:D8QJdaIr0110親父PG
04/04/04 17:50ID:6UsE36R6どもどもお気ずかいありがとう。
それはバッファサイズの話ですね。
先ほどのコードはその前の「文字コード」を切り取る部分です。
あの関数(GetGlyphOutline)は1文字ずつしか処理できませんので、
LOOP
文字列>1文字切り取り>バッファサイズ取得(GetGlyphOutline)>バッファ作成>
アウトライン取得(GetGlyphOutline)>バッファから目標へコピー
バッファ開放
文字列ポインタインクリメント
目標のポインタを文字幅分加算
LOOPEND
このような流れになりますです。orzナンカクロウノワリニ....
データ形式についてはもう少し、デメリットとメリットを合わせて決めましょう
でツールですが、データ−の形式さえ決まっていれば、データ−互換で各自つくればいいかなぁと。
あんまり色々ケチって悩むより、作ったほうが早いというのが持論なのでorz..ソレデイタイメニアッテルケド
シナリオ作成については実績のある「ツクール」等を参考にしたほうがいいのかもしれませんが
実は見たこと無いので今度買ってきますかね^^;orz見てイヤニナルカモシレナイケド
私が大昔にゲームのシナリオ作成方法を聞いた時には、担当のPGの方は
TASM(ターボアセンブラ)のマクロで作成していました。
ライターの方は制御文を含めてシナリオを書いていたようです。
ライターにはBASIC作成能力ぐらいは求めていたようです。
昨今どうなのでしょうかね? 私もこのあたりが知りたいです。
0111親父PG
04/04/04 17:56ID:6UsE36R6よく見ていただけでは解りますが、ます1バイトでチェック
次に2バイトでチェック チェックの結果がTRUEの場合のみ実際に2バイトコードとして扱っています
(is関数)
第一水準第2水準 基本 かな かたかなの全てチェックしておりますです。
うにこーどとマルチバイト文字はサポートしてません。
チェックを入れることは可能ですが、それは別のところで一括変換されるべきでしょう。
0112名前は開発中のものです。
04/04/04 18:17ID:KpeQdK+f本システムはVCでもツール類はちょこちょこつくって軽くテスト、
軽く改良って感じなので作りやすいのがいいと思うよ
そうなるとGUIが容易でとなるのでBCB、Delphi、java、c#くらいが
まず選択肢になると思う
あ、Delphiで気軽に使えるXMLパーサってあったかな
UTF8って選択はXML扱うならどの環境でも必須条件なので扱いやすい
たとえばmacユーザーにマップツール使ってもらうとか考えるとjavaも悪くない
複数の人に使ってもらうという前提が必要ならね
ソーサリアン知らないとなるとどう説明していいのやら
こんなあたりが参考になるのかな
ttp://www.ipc-tokai.or.jp/~ytanaka/pc88/sorc_pi.shtml
0113新人PG
04/04/04 18:45ID:yroz7+Kx全然違う話だったのね・・・鬱だ(ry
とりあえず、規格設計だけは作っておきます。
それからXMLか独自で組むかは、決めたほうが良いかなと思いますんで。
>>112
日本語処理が多いとUTF16という選択もあるんだけど、ゲームの概要が見えてないのでダメポ。
とりあえず、今はWindowsで動くものをw
機会あればやってみますわ<ソーサリアン
デモもありましたし。
0114親父PG
04/04/04 19:14ID:6UsE36R6あらためて偉大さを感じますね。紹介のHPをしみじみと読ませて頂きました。
メモリが足らなくなったら、メモリの内容をそのままDISKに保存。
プログラムをスワップするとかやってましたなぁ。
>>113
全然違う話ではないのですけどね^^
そうそう実際にコード切り取る時どうします?
あの関数についてぐぐって見たけどコードを切り取る部分は、書いてないのが多いので....
XMLについては「XMLのフォーマットがゲームデータ−の表すのに適しているか?」
の一点で評価しましょう。
現状ではXML形式に保存(できる)というスタンスで良いと思います。
そもそも「何をどのように保存するか?」が煮詰まらないと、決められないと思いますので。
これから夜勤です。orz
0115名前は開発中のものです。
04/04/04 19:24ID:KpeQdK+fdomツリーそのままというよりはElementを多用するというか
MapとListを自由に組み合わせれるコレクション型と考えればいいかな
CPUが1GHz超えているのなら
メインループでDOMツリーガリガリ操作していても余裕で60fpsくらいでますぜ
0116名前は開発中のものです。
04/04/04 22:15ID:PaXg2AQi今は猫も杓子もXML使っとけという流れだけど。
0117親父PG
04/04/04 22:17ID:3txQVYNu●トリガーテーブル
トリガーテーブルには(selfNO)トリガー条件とトリガー番号が固定長で収納する
編集時はエクセルでの編集を可能にする。
最終的に数値セルをバイナリに落す(要コンバーター)
NO INT
比較先場所FG BYTE
比較先FGNO INT (直接値の場合もあり)
比較先場所FG BYTE
比較先FGNO INT (直接値の場合もあり)
比較条件 BYTE == != > < >= <= !
トリガー種類FG BYTE (MOVE FG値操作 次処理 シーン呼び出し)
トリガ用パラメーター1(処理先NO)INT
トリガ用パラメーター2(処理先NO)INT
トリガ用パラメーター3(処理先NO)INT
リザーブ(24か32Byte境界)
●シーンデータ-
シーンデータ-にはメッセージやウインドの処理などが書かれる。
またシーン終了時にどのトリガー条件に戻すかが書かれている。
※トリガーテーブルデータ-は、純粋に条件の表現だけに特化しゲーム特有の処理を含ませない。
シーンデータ-は実際に行いたい具体的な処理を書くようにする。
------------------------------------------------------
一定周期、ないしはアクションが会った後、トリガーテーブルを参照する。
●その他のデーター
・キャラクターデーター 本企画はキャラクターデータ-を中心に考えている(ソーサリアン的)
・アイテムデータ- DLLで供給 ・魔法?のデータ-
・プレイヤーのデータ-
TRPGのD&Dは有り余る金で城建てたり、ダンジョン掘ったり、タワー建てたり、いろいろできるんだよね。テキストレベルでいいからそういうのもエミュレーションしたいねぇ。
0118親父PG
04/04/04 22:28ID:3txQVYNuああ すみません読み飛ばしていましたorz
画像班もいてくれると大助かりです。宜しくお願いします
0119ミVミlPG
04/04/04 22:36ID:yroz7+Kxhttp://www.geocities.jp/oyajipg/up/data.xml
以上適当に雛型っぽいのを作ってみました・・・。
が・・・草案を見る限り、XMLではないのでしょうか・・・。
0121親父PG
04/04/04 23:07ID:3txQVYNuご苦労おかけします。orz
0123名前は開発中のものです。
04/04/04 23:48ID:D8QJdaIrプロパティ多用なんかキモイ
0124新人PG
04/04/04 23:58ID:yroz7+Kx平日の書き込みペース&進捗はかなり落ちますので、そこんとこよろしくお願いします。
>>123
もうちょっと踏み込んで設計していたらもっとキモイフォーマットが出来ていたかと思います。
XmlSchemeなんてこんな物では?
0125名前は開発中のものです。
04/04/05 00:15ID:C13/cZA50126名前は開発中のものです。
04/04/05 00:16ID:C13/cZA50127名前は開発中のものです。
04/04/05 02:34ID:aEWGS1EG0128親父PG
04/04/05 03:55ID:OF5lxvl4●トリガーテーブル
トリガーテーブルには(selfNO)トリガー条件とトリガー番号が固定長で収納する
固定長にするメリットは内部で高速に動作させる事と、EXCELで簡単に編集できるなどを
考慮してです。
struct {
int SelfID; //シリアル番号
byte CmpSeed1; //int CmpTarget1が何を示すかの種類 FGテーブル デバイス 関数戻り値 値
int CmpTarget1; //値
byte CmpSeed2; //int2 CmpTarget1が何を示すかの種類 FGテーブル デバイス 関数戻り値 値
int CmpTarget2; //値
byte CmpOP; //上の値の比較方法
byte CmpOP; //真/偽どちらを使うか? (追加
short int ActCommand ; //何をするか? MOVE FG値操作 次処理 シーン呼び出し
int ActValue1; //値 ActCommandによって扱いが異なる
int ActValue2;
int ActValue3;
//リザーブ(24か32Byte境界)
};
値を比較するときに、「何処の値」を示すのが CmpSeed1
このように値の前に「何処の」というフラグをつけて対応します。
255種類もあれば大丈夫でしょう
何かご意見があればドシドシ募集中です。まだこれは草案なので
こんなものも追加したほうがよい! などまだあるはずです。
トイレで考えたのを書いただけだから^^;..
こんな説明でよろしいでしょうか?orzワカリニククテスマン...
0129親父PG
04/04/05 04:03ID:OF5lxvl4画像のほうのリンクで「モビットの広告画像」が出てきて、ツボニはまりました
>>127
興味深いお話ですね。フラグチェックループのことを考えると、XMLの生データーを
本体では直接は持たないと思います。(翻訳エンジンで先ほどの形に落とし込みます)
0130親父PG
04/04/05 06:49ID:OF5lxvl4セレ2.0G 1024*768 WINDWモード の平均fps105に置いて
高精度アウトライン文字使用 マウス座標を表示 文字数1-4 フォントサイズ40程度
において
3-4fps消費しました。 少し重いねorz
0131名前は開発中のものです。
04/04/05 10:35ID:tRuvkc6W0132名前は開発中のものです。
04/04/05 11:46ID:C13/cZA50133親父PG
04/04/05 11:49ID:6z0RwfU5現在のLVではそれは使用できません。orz嘘ですゴメンナサイ
取り合えず、妻子持ちという事で^^
あと2〜3週間を目処にいったんあぷします。
0134名前は開発中のものです。
04/04/05 12:26ID:tRuvkc6W身長、体重、血液型など。
0135名前は開発中のものです。
04/04/05 14:01ID:405E+F+Vどこが重いの?
同じ大きさのビットマップを同じ数
AlphaBlendとかTransparentBltしてみると
それに近い数値で減ると思うけど。
0136新人PG
04/04/05 21:20ID:1nSnHjPt>>126
勉強も兼ねてXmlSchemeで・・・(^^;
>>128
Excel編集可能な規格はちょっと考えつかないっす。
CSV形式(独自フォーマット)でよければ作れますが・・・。
(XMLデータ)⇔ツール編集 → コンバータ → バイナリ
上記みたいな構成でいいのでしょうか?
バイナリを直接Excelで編集する事を考えています?
#DirectXの本を買っちゃいました。(DirectX9実践プログラム 工学社)
#あんまりMSのサンプルやリファレンスと変わらないのでちょっと損した感じ・・・。
0137親父PG
04/04/06 01:40ID:40Qsawbyむむ、個人スペックですかい。
身長178.8 体重85ぐらい 血はAです。肝機能障害ありですorz....
>>135
表示している内容に対して重いと思います。orz...
>>136
お疲れさま。資料本買ったのですね^^; 有難う。
データ-の形式については、作り込んで貰う前にいろいろと検討しましょう。
そうでないと作ってもらってから仕様変更になりかねません。orzシノビナイ...
これは私の考えなのですが、ひとつ議題のたたき台につかってください。
●シナリオデータ-は本体のプログラムが読み込む前に、一旦最適化されたバイナリ形式に落とし込む。
(本体にXML関連のLIBは持たない)
●各ツールの互換性はこのバイナリデータ-互換でおこなう
EXCELでの編集は一旦バイナリ<>CSVツールを作ってトリガーテーブル部分のみを編集できる。というスタイルになります
●必要なデータ-群
トリガーテーブル (トリガーが書かれている 固定長)
シーンデータ- (処理が書かれている 可変長)
ストリングテーブル (名前などストリング系のテーブル)
ファイルネームテーブル (ファイルネームを収めます)
マップデータ- (地形を表すデータ-)
アイテムデータ- (魔法とかキャラデータ-など....)
ゲーム管理用データ-(画面分割数 ボタン大きさや処理等)<こちらで作りました
ざっとこんな感じです。まとめたほうが良いデータ-もありますね
また単独であったほうが良いファイルもあります。
コレ全部の仕様決めるのは大変ですが、一つ一つ詰めていきましょう。
0138名前は開発中のものです。
04/04/06 11:23ID:7yXcmumhゲームを完成させるのが最終目的ならば富豪的プログラミングでいいとおもうけどなぁ
空中分解するスレ何度も見てきているので完成後の最適化とかバランス調整とか
そっちに時間かけて欲しいと思ったり
0139親父PG
04/04/06 14:03ID:QeLHJL6Cお気つかい有難う。
過程を楽しんでいるのはもちろんですが。
今はゲームを作る為の環境を整えているところです。
まったくの0からなので、時間はかかってしまいますが^^;
文字周りが一息ついたところで、WINDOWSシステムを作ります。
リソースデータ(構築データ−)より作成されるシステムとなり
データ−>翻訳>内部ルーチン呼出 という流れを
本格的にサポートする為の、雛型になると考えています。
0140名前は開発中のものです。
04/04/06 14:57ID:ZvDa+4W9背は高いね。きっとダンディーなんだろうな。
オヤジPGタン(´Д`)ハァハァハァ
0141名前は開発中のものです。
04/04/06 18:32ID:LJa+6Bu1RPGツクール出来たら
凄い需要があると思う
この板の神になるかも
0142名前は開発中のものです。
04/04/06 19:36ID:oZfK2l07まあ期待しないでROMってるよ。がんばってね。
0143新人PG
04/04/06 21:52ID:4g++6UBPちょっとまとめです。
1)トリガーデータ(フラグ管理やシーン遷移を定義)
2)シーンデータ(シーン管理。シナリオ、トリガーデータや画面管理用データと関連する?)
3)シナリオデータ(シーンデータと同義?)
4)ストリングテーブル(プレイヤーに表示するシステムメッセージ等?)
5)ファイルネームテーブル(ファイルを管理)
6)マップデータ(マップフィールド定義)
7)アイテムデータ(魔法やら道具やら敵やら・・・?)
8)画面管理用データ(システムデータ)
・・・等の定義ファイルがあるって事ですね。
僕からは1,2,3の草案より規格案を出していきます。(ひょっとしてもう頭の中では纏ってます?)
しかし、このファイルの感じですとシーンデータの負荷は大きいですね。
もうちょっとヒントをお願いします・・・w
他4,5は最初はMAP形式のファイルで良いような気がします。
6はどうするんでしょう。俯瞰型かフロントビューの視点のRPGを想像していたのですが親父PG様はどう考えられてます?
7はまだまだ判りませんね・・・wヒントお願いします。
8は完成されていると言う事なので期待プラス参考させていただきマス。(8に1,2,3のデータとの絡みは無いですか?)
0144名前は開発中のものです。
04/04/07 03:22ID:BZdMbvQi編集はエディタのみで、単にファイルが分離しているだけならいいけど。
データ間の依存関係は、データ修正の手間が軽いかどうかを重視するのが
よいと思うがどうか。
3Dなら特定のオブジェクトをトリガとして扱う(ダミーノードやボーンがあるモデラなら
それを使う)
2Dなら、どーせマップエディタ作るんだから、編集はエディタのみの1箇所なので
無問題
って感じ?
あと、>>128
> 255種類もあれば大丈夫でしょう
ケチらなくてもw
こんな構造体作るよりは、スクリプトをキックしてスクリプトにフラグ判断させて、
スクリプトからイベント(ここではただの会話もイベントとしよう)をキックさせた方が、
作成も変更も管理もらくだと思うけど。
0145親父PG
04/04/07 05:27ID:4mfJMcZS>>141 ツクールとは視点が違うのですが、データ−互換ゲーム環境を考えています。
その上でデータフォーマットを公開しますので、いろんなシナリオやサブセットプラグイン等を
募集いたしますorz アイテニサレナイカモ....
>>142 半年前からコツコツやってました。これからも生暖かく見守ってお守りくださいまし...
>>143
どうもお疲れ様
>てか、親父PGタン書き込み夜遅すぎ。一日ループしてしまいますね
それは夜勤の時、コッソリ(Ry まぁまったりいきましょう。1日考えるぐらいがちょうどいいやも
草案で出した案は最終的なバイナリのイメージです。トリガテーブルはそれれ自体が
フラグを拡張したものだと考えることができます。
144氏の発言>スクリプトをキックしてスクリプトにフラグ判断
トリガーテーブル自体が他のトリガーやシーンを呼び出して、その結果を判断できます。
おっしゃることは実現可能かと思います。
シーンデータ−には、5W1H(のようなもの)が定義されます
ビューポート1番に定義されたウィンドをこの場所に開き、メッセージを表示しろ
以下「メッセージデータ」:戻り値
このようなデータになると思われます。
本体側インターフェースを提示しないと作りにくいとは思いますが、暫定で進めてください
ある程度はこちらも合わせます。
※私の申してる話は、データ−の最終形態なので、実際のツール類はそれぞれ最適化されたデータ−で
ソースを持つのがよろしいかと。しかし、最後はコンパイルされて、一定のバイナリに落とし込みます。
0146親父PG
04/04/07 05:29ID:4mfJMcZSst1 "ぴたごらすいっち"と定義
メッセージデータ #1はNHKのTV番組 >ぴたごらすいっちはNHKのTV番組
6 struct MAPBASE{byte Maptype,MoveCost,ToDo,Maptype2}:
こんなのを配列で持つのはどうですか?
7 この部分はを考えるのは一番楽しい部分かなぁ(w
属性追加タイプを考えています。熱く寒く丈夫で黒光りする腐った剣 とかorz結局ツカエルノカ?コノケン...
8 バイナリデータ−で固定長データ−です。
それとは別にテクスチャテーブルもあり、セットで運用しています。
ちょっとずつ変わっていますが、この後出しますね。
0147親父PG
04/04/07 06:09ID:4mfJMcZSunsigned int ClientSizeX,ClientSizeY,ViewPortSize;
dRECT RECTS[MAXPANEL];
dOption OPTIONS[MAXPANEL];
};
struct dOption{
short int TextureNum ;//テクスチャー論理番号
short int TextureNum2;//テクスチャー論理番号2枚目
short int D3D ;//基本座標系 1 混在 2 2D 3 3D
unsigned char Z1; //1枚目Zの価
unsigned char Z2; //2枚目Zの価
unsigned int hTexture2;
unsigned int hTexture;//上に貼り付けるテクスチャのハンドル システム側でセット
unsigned int hTextureBox;//ポリゴンのハンドルシステム側でセットされる
};
2枚目のテクスチャは上に重ね合わせるためにあります。(抜き処理か半透明使用)
ボタンの設定一部略
struct dBOption{
short int Parent;//親のView番号
unsigned int SelfID;//自分自身の番号
short int BaseTexture;//テクスチャのBASE番号
short int CoTexture;//テクスチャ内の子INDEX番号
short int BTOption;//動作 0なし 1以上の価でボタンアクションの種類を指定
unsigned int ON_LDownMouse;// アクション番号 0はなし
unsigned int ON_RDownMouse;/ ここで呼び出す関数番号を指定する
略
※シナリオからみるべきはボタンの処理番号になるのかな?
場面切替の場合はビューポート周りも見る必要があるかもね
0148親父PG
04/04/07 06:10ID:4mfJMcZS戦闘システムですが、場にキャラクタが使うアイテム(魔法エッセンス)を宣言(スロット配置)して
その置かれたアイテムによって、使用できるコマンドが追加されていくというものを考えています。
またアイテムには持続ターンの設定がされていて、持続ターンを消化するとスロットから除外されます。
剣を主に使う場合(サンプル
剣を使用宣言>「切りかかる」が使用可能
盾を宣言>防御力UP 「受ける」が使用可能
魔法の場合
マナと秘薬宣言>魔法○○使用可能
剣を中心とするユーザー
利点・持続ターンが長い
欠点・単体攻撃
魔法ユーザーの
利点・幅広いコマンド
欠点・アイテムの持続ターン
アイテムの使用と宣言は同時にはできないので「使用タイミング」を考慮しなければならない。
まぁこのへんはアイデア段階ですのでいろいろ変わると思います。
0149名前は開発中のものです。
04/04/07 07:13ID:MvpBLMAM0150親父PG
04/04/07 08:38ID:4mfJMcZSひとつひとつ検証しますかのうorz...
「テクスチャ(4444)前面
頂点色付ポリゴン」
+
「テクスチャ565」(背景)
頂点色付ポリゴン」
+
「サーフェースカラー」
前面のポリゴンの頂点のアルファ値のコントロールでいければ良いのだけど
今、なんとなくやった設定では背景のサーフェーイスカラーに対してブレンドしてるね。
それはそれで必用な設定なんだけどね。
後ろの背景が消えて(無視)されて合成されているorz
設定できる(可能性)の幅が広すぎてトホホホです。
pD3DApp->m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );
pD3DApp->m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
pD3DApp->m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
// アルファ合成の設定
pD3DApp->m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
pD3DApp->m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pD3DApp->m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
これから息子と嫁さん連れてバス旅行(隣の駅まで)行ってきます。
0151144
04/04/07 08:57ID:BZdMbvQiもう1度読んでください。
前半部は、データ作成段階に入ってからの絵描き・プログラマ・スクリプタ・プランナ
それぞれの間のワークフローに関わる問題の指摘です。
様々なファイル間に依存関係があります。特に座標値を即値で持った場合には、
マップ変更で様々な影響があります。
不整合を起こさない仕組みをお考えであればまったく問題はありません。
相互に依存関係があるファイルを個別に修正すると(特に別々の人が)、様々な
エンバグが発生することでしょう。
マップエディタの例は、とりあえずトリガデータとマップデータの不整合を防ぐ仕組みの
具体例の1つとして出しただけです。
決して最終バイナリの数を問題にしたのではありません。編集時です。
後半部は・・・特に色々問題をはらんでいるのですが・・・。
まず、2つの意味で、 seed を 8ビットとする必要はありません。
・どーせパッキング単位が4バイトなのでメモリの節約にならない
・余ったビットはフラグにでも使えば良い
むしろ seed に名前をつけて文字列を格納し、実行時にアドレス(またはID)変換するくらい
富豪的でも問題ないと思います(つーか、パディングするって書いてあるけどw)。
データキャッシュが荒れるのを気にするならば、宣言を直してメモリを節約するのも良いと思います。
つづく
0152144
04/04/07 08:58ID:BZdMbvQiところで、>>117 の場所FGって、単にフラグ番号?
場所っていうからマップの座標かと思ってた。
マップデータもただの配列だし、もしかしてまだ、マップアトリビュートテーブル自体が
話題に上ってなかった?
マップの特定の場所に行ったら起動するようなイベントはシステム側からフラグを立てて
それをトリガで拾うという仕組みをお考えですか?
なぜ、トリガデータがこんなにもスクリプト的な機能を持っているのか不思議だったのですが、
もしそうなら納得できます。
トリガデータはイベントハンドルテーブルのように扱ったほうがシンプルになると思います。
どちらにせよ、トリガデータの1レコードは豪華すぎるように思います。
んー、なんか、データ構成見てると、ソーサリアンを作れそうに見えない・・・。
アトリビュートテーブルがないせいだとは思うんだけど、マップ -> イベントキック -> シーン
の流れが見えないと・・・。
もしかして、MAPBASE::ToDo がイベント起動?
そんなことしたら、同じマップで違うイベント配置の時に管理が破綻しない?
まさかねぇ・・・。
まあ、それこそ編集時はイベント名の文字列で管理すればいいのか、な・・・?
0153親父PG
04/04/07 09:11ID:4mfJMcZSいろいろな考察ありがとうございます。きちんと整理してご返答したのですが、
あいにくバスの時間がw戻ってきてきちんと返答します。
MAP>イベントキック>シーン この方法には2つ方法があると思います。
MAPにイベント番号を入れる方法と
MAPにはイベントがあったことのみのデータ−で 管理側でXY座標を引数にイベントトリガー内を検索します。
とちらにも利点欠点 あ時間だ 帰ってきて書き込みます
0154(´Д`)ハァハァ
04/04/07 12:02ID:yREiaToq0155名前は開発中のものです。
04/04/07 12:26ID:TuGWnynl0156名前は開発中のものです。
04/04/07 12:56ID:CnFCUIgg0157名前は開発中のものです。
04/04/07 14:22ID:waAm3+2+玄米食え、玄米。
0158親父PG
04/04/07 14:26ID:4mfJMcZSorz.....
>>155
川口にいって桜を見物してきました。今日はいい天気で子供達ものびのびと羽を伸ばしてきたようです。
トリガーテーブルはそれ自身に起動条件を備えています。
またトリガー自身がトリガーを呼ぶことが出来ますし、他のトリガーからも呼ばれます。
さて地形MAPについてですが、これにはシステムに対してトリガーをチャックしろというトリガーを引きます。
プログラムに流れは以下のようになります。
キャラ移動>該当MAPの配列調査、トリガテーブル起動命令がある。
トリガーテーブル検索、トリガーテーブルの演算>シーン起動
さて編集時の問題についてここで解決策を述べておきます。
MAP編集ツールはトリガーテーブルに追記することができます。
MAPツールで編集するのはX座標aY座標bでトリガーがあるということだけです。
あとでシーンデーターで、その追記された部分を補完すればよいのです。
トリガーテーブルは固定長なので扱い易く、いろんなツールで追記することができます
複数人数での作業もトリガーテーブルを、マージしながら作業を進めることになります。
○トリガーの設定
とある座標にトリガーを埋め込む。MAPの配列該当部に任意の価を入れる。
同時にトリガーテーブルに座標を引数とするトリガーテーブルを追記する
(何をするかはここで編集しない ※できるようにしても良いとは思いますが)
○座標の書き換え
とある座標でトリガーを設定していたが、座標移動することになった。この場合MAPデータ−は
自身のトリガーテーブルの該当座標が記録された部分を書き換えます。
(※この作業の為にシリアル管理しても良いかもしれないね。)
○複数人数の作業
トリガーテーブルをマージします。「違うMAPの場合どうするのだ?」というご指摘がありました
その場合トリガーテーブルごとに入れ替えるか、もしくはMAP番号も引数に加えれることで解決します。
○トリガーテーブルはCSV化してEXCELで簡単に一覧化できる。簡易マクロでエラーチェックもおこなう
トリガーテーブルは計算式 IF文を処理する機構なのです。 FG(フラグ)は変数置き場です。
0159名前は開発中のものです。
04/04/07 19:19ID:kfqaFPaa0160名前は開発中のものです。
04/04/07 20:11ID:OoCqvErc0161名前は開発中のものです。
04/04/07 21:05ID:mi1SbU81どうぞプログラムに専念していただきたい!!!!!!
なんの心配も要りません!!!!!!!!!!!!!!
0162名前は開発中のものです。
04/04/07 21:29ID:Acbfz39E↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
0163名前は開発中のものです。
04/04/07 21:46ID:du+oinrPでは娘さんをお迎えに
行かせていただきます!!!!!!
0164名前は開発中のものです。
04/04/07 21:50ID:WornAub7■ このスレッドは過去ログ倉庫に格納されています