スクリプトコンパイラについて ( yac と lex も可 )
> 格ゲーのモーションをCで書いたら相手のモーションと同時実行するために
マルチスレッドが必要だったり、
んなあほなww
も前は、キャラクターごとにスレッドを作るのかw
普通は、ゲームでは非プリエンプティブなマルチスレッドを使う。
つまり、コストの低い、擬似タスクな。
あと、モーションは、デザイナにまかせたりするので、スクリプトで制御することも多いよ。
148 :
146:2006/04/16(日) 09:51:53 ID:NIJWxfjn
まあ自分はスクリプト制御です。上のは反語表現というか、
酔ってたせいで何に煽ってるのか分からない煽り口調になってるしw
>非プリエンティブなマルチスレッド
は一般的なOS+Cでは不可能ですよね。機械語で書く場合でしょうか。
それともsetjmpで無理矢理実装とか?
>>148 コンソールの話だと思われ。
時代遅れの発想なんであまりやって欲しくないけどね。
150 :
名前は開発中のものです。:2006/04/16(日) 16:14:41 ID:F+evVwwX
>>146の疑問はもっともだと思うよ。
今はまだそれ以前の部分で躓いていて
問題を先送りにしているが、いずれ考えなきゃいけない部分だと
俺も思っている。
インタプリタは難しいんで、MIDLコンパイラみたいに
スクリプトからC++ソース生成じゃ駄目かなあ?
151 :
146:2006/04/17(月) 01:06:45 ID:M8YTTZ7z
>C++ソース生成
用途によりますよね。
ギャルゲーやRPGなら大丈夫だけど、アクション系のゲームだと前述のような問題が。
自分はRPGを製作中ですが、複数キャラを同時に歩かせたりメッセージ表示しながらアニメしたりと
「スクリプトのシンクロ実行」を実装する予定なので、頑張ってインタプリタを書いてます。
基本的にCとかは1スレッドにつき1つしかプログラムの「筋」を持てない。
で、ゲームのメインスレッドというのは大抵メッセージループを回す構造になってるわけで、
ループ回しつつ逐次実行のコードを同時に走らせようと思ったら別スレッドにするか
スクリプトとして(もしくはスクリプト風に)実行順序をデータとして持っておいて
ループで実行するしかない、というのが前提条件かと。
最近「生成的プログラミング」とやらが流行ってるお陰で
大抵の言語に出来のよいパーサが開発されたり、
継続やらモナドやらExpressionTemplateやら「言語内言語」に関する技術がたくさん出てきたりしているので、
その辺をゲーム開発に取り込んでいったら面白いんじゃないか、と思う次第であります。
俺も同じようなことやってます。
某ステフでアクションRPGのスクリプトを作ってますが、シンクロでは悩まされます。
試行錯誤であーでもないこーでもないと何とかやってますが、地味に面白いですよねw
153 :
名前は開発中のものです。:2006/05/10(水) 15:25:54 ID:BR/3osvo
保守age
詳細もなにも一言で要約できるぞ。
boost::spirit使ってみろ、と。
いや、パーザじゃなくてシンクロ実行のほうじゃないの?
157 :
151:2006/05/14(日) 21:20:12 ID:VGwK5BXt
模式的にコードを書くと、
pTaskをタスクオブジェクト(clock()でアニメ等を一コマ進める)
へのポインタとして、
case WM_TIMER:
if (pTask == NULL)
pTask = ScriptEngine.EvalNext(); //スクリプトを1ステップ実行
}
if (!pTask->clock()) {
delete pTask; pTask = NULL;
}
シンクロ処理は
class Sync : Task {
Task*[] _tasks;
public:
bool clock() { for (...) { _tasks[i]->clock(); }
};
みたいな感じで行けます。
158 :
151:2006/05/14(日) 21:21:52 ID:VGwK5BXt
スクリプトは以下のような感じで、
えっと…(sleep 10)どうしようか。wait
これを
・全角文字を""で囲む
・全体を'()で囲む
と処理すると
'("えっと…" (sleep 10) "どうしようか。" wait)
というschemeコードになります。リストの要素要素がEvalNextで返されるTaskです。
現在エンジンにはvismというschemeライブラリを使っていますが、
公開停止しているのと微妙に仕様が合わないのとで、現在手書きを検討しています。
なるほど
そのやり方覚えておこう
ほぼスクリプト部完成しますた。
と、チラシの裏
161 :
名前は開発中のものです。:2006/09/01(金) 23:48:53 ID:/m07WVDn
良スレあげ
162 :
名前は開発中のものです。:2006/09/02(土) 13:11:40 ID:VymI6uhU
残念ながら・・・
そうでげしたか…
ギコベなくなったのかー!
使わせて貰ったことあるからちと悲しい
166 :
名前は開発中のものです。:2006/10/02(月) 17:06:00 ID:yaGw0AJA
wikiが落ちて
そして誰も作らないだけだぜ
今になって思えば、スクリプト部の文法は
中途半端にHSP互換じゃなくて、完全互換の方がよかったのかなと
チラシの裏
インタプリタ作成は難しいですね。
最近、言語自体に興味を持って作り始めましたが
数字と演算子の数を出力するぐらいしか出来ません。
169 :
名前は開発中のものです。:2007/07/12(木) 20:51:47 ID:JmSceXMO
シナリオ用スクリプトを構造化することってできるだろうか。
グローバルスコープなフラグとラベルジャンプでできたスクリプトでは、
フラグの一貫性やループに陥っていないか等の解析が手動でも自動でも
著しく困難になる。
凝り性のシナリオライターが作ったスパゲッティフローチャートを
if, for, while & 関数・サブルーチンだけで書き下せると思う?
思う
>>169 色んな問題をスクリプトだけで解決しようとしすぎじゃね?
>>169 俺がxmlの研究目的で作ってるxmlベースの言語が
narrative documentをプログラマブルに扱えるものでPLの制御構造と組み込みライブラリと例外処理と文章に対するメタデータ記述能力を持ってるが
こいつはメモリ上に中間コード吐いてインタープリタで直に実行するかほかの言語のソースコード吐くようになってて要するにEiffelなんだが
>シナリオ用スクリプトを構造化 は出来てるぞ。
ただし、ライブラリは組み込みのみでそのライブラリを作るのはプログラマって割り切ってる。
あと要素の評価結果が文字列なら標準出力へ出力するんだけどその標準出力を定義するのもプログラマ。
つまり組み込みライブラリと出力先をADVエンジン用に実装すればADVエンジンへの応用が利く。
こういうもんを作れば
>シナリオ用スクリプトを構造化すること
スパゲッティフローチャートをif, for, while & 関数・サブルーチンだけで書き下す
は実際に出来てる。
あと言語そのものがxmlなんでXSLTやXSL-FOでhtmlやPDFへ"スパゲッティフローチャート"を変換できる。
そのためにメタデータ記述能力を持たせた。
あとxmlそのものが機械的に管理されることを前提に
設計されてるのでIDEなんかが作りやすいメリットもある。
欠点は専門的すぎてちょっとしたhypertext systemを実装できるくらいの学術知識が必要かな。情報系の卒論向きだな。
ラベルによるgotoは全部xlinkだったりするし。
結局、出来たとしても
>>171の言うように問題の切り分けとそれを解決する人間を別々に用意する必要があるよ。
そういう前提で作ってるし。
>ラベルによるgoto
結局スパゲティかよ('A`)
175 :
名前は開発中のものです。:2009/01/02(金) 22:08:59 ID:qteump49
スクリプトエンジン制作中
目的に合わせた複数の言語を作り、共通の中間コードにコンパイルして、共通のVMで動作させる予定なのだが、VMの仕様で悩み中
最初はCOMET互換のものを作ってたんだが、スタックマシンの方がシンプルになりそうな気がする
フラグレジスタとか考えなくていいし、そもそもソフトウェアで動作させるんだからレジスタとかいらなくね?みたいな
他のスクリプトのVMの実装を知らないんだが参考までに、おまいらの意見をいただけないでしょうか
俺のスクリプトにVMなど存在しない
ただ内部データ(登場時刻、位置、画像、移動パターン)に変換するのみ
JVMとか.NETのCLR(つかmono)参考にしたらどうだろうか
前にゲーム製作技術板でゲーム用DSLにJVMのサブセット実装してた人がいたよ。
(しかもコンパイラはJavaを使うらしいw)
まあ、再発明になると面白みがないだろうがポータブルな実装つくるのもいいんでないのかな?
ごめん、ム板と勘違いしてたわ
速度の面でどう頑張ってもYpsilonに勝てないので自作やる気がなくなった
あ
183 :
名前は開発中のものです。:2010/07/27(火) 16:50:26 ID:Wuh12NAU
ゲーム屋就職用にGauche忍びこませたexe作ろうと思ったけど、どうあがいても相手のマシンにGaucheが入ってないとダメみたいだからあきらめた
ニートで何が悪い
Scheme処理系作ったら本気出す
p
186 :
名前は開発中のものです。:2011/07/07(木) 04:18:10.46 ID:zE+DGvJm
188 :
186:2011/07/07(木) 13:21:45.30 ID:zE+DGvJm
誘導ありがとう。
ゲーム用途を考えてたからここに書き込んだんだけど、あんまり関係ないのかな?
このスレの最初の方の人達に見てもらいたくって。
向こうにも書き込んでみようかな。
保守
落葉
書き込みテスト
両方使ったことない
保守
hoshu
保守