2009-04


戻る

2009-04-01T22:04:31 (Wed)

NEET 終了のお知らせ

本日オリエンテーションに行って新歓パーティを受けたらその後すぐ研究室に拉致されて,明日 13 時からミーティングやって明後日は研究室発表のための手伝いやってもらうから,とか言われて「ああ… 私の NEET 期間は終了してしまったんだなぁ…」などと悲観にくれています orz

入学式 (6 日にある) が終わるまでは春休み等と言うルールが適用されるのは大学の学部までなのですね…

ダラダラするのは諦めよう… (´;ω;`) 明日から普通の学生として頑張ろう… (´;ω;`)

comments

(2009-04-03T00:16:54)

大学や研究室によっても始まる時期や忙しさが違うと聞きます.また,実験系の研究室は忙しいらしいですね.
管理人様どうかお体にはお気を付け下さい.

か (2009-04-07T03:43:42)

しんどいですがもう入学金も払ってしまったので頑張ります orz

2009-04-04T01:38:37 (Sat)

Squirrel 動作実験 第 1 部完

ひとまず DX ライブラリを用いたプロジェクトとの Squirrel の併用に成功しました.

リンク時に警告が大量に出ているのが少々気になると言えば気になりますが,とりあえずは動くので良し.動かしながら,手が空いたときにライブラリのビルドのやり方を色々と変えてみたりしてみようと思います.

さて,今はもう Squirrel から C++ の関数を呼ぶことも,C++ から Squirrel の関数を呼ぶことも一応可能です.関数に関しては,これ以上やることはないはずです.

今後の課題としては以下のような感じ.
・コンパイルエラーの捕捉とエラー通知の手法実装
・クラスに関しての C++ と Squirrel でのやりとりの手法の調査
・Squirrel そのものの使いこなし (コルーチン,ジェネレータなど)
・弱参照,強参照などの意味不明用語の調査
・新作ネタ出し (←何気に最重要

学校が本格的に始まる前にスタートをきれてほんと良かったです.とは言え本当の戦いはこれからだ!な臭いはプンプンしますが (^^;

2009-04-07T01:42:09 (Tue)

Squirrel ライブラリ生成ソリューション

ライブラリの生成方法とちょっと便利な設定変更を紹介します.

Squirrel 本家

まずはここからライブラリ本体をダウンロードします.現時点での Squirrel の最新バージョンは 2.2.2 stable と 3.0 alpha 1 です.

そして開発環境である Visual Studio は 2008 が最新バージョンです.

この環境で構築することを前提にします.Visual Studio 2008 の設定は DX ライブラリのページにかなり丁寧に書かれているのでそちらを参考にして下さい.

Squirrel のページから Download をクリックし,Sorce Forge のページに行き squirrel_2.2.2_stable.tar.gz をダウンロードします.

解凍すると SQUIRREL2 というディレクトリが出来ます.この中の squirrel.dsw というファイルをダブルクリックします.Visual Studio がインストールされているならば,これで Visual Studio が立ち上がるでしょう.

ちなみに 2.2.2 stable は公式発表では Visual Studio 2005 までしか対応していないことになっています.なので初めて開いたときは「2008 対応に変換しますか?」と聞かれます.ここは気にせず「すべてはい」で行きましょう.そして一度 Visual Studio を終了します.するとプロジェクトに加えた変更 (恐らく 2008 に対応させるために何かを変えたのでしょう) を保存しますか?と聞いてくるので,「はい」を選択します.そして今度は squirrel.sln をダブルクリックして開きましょう.

で,それでプロジェクトが開ければ後はビルド > ソリューションのビルドで SQUIRREL2 ディレクトリにある lib ディレクトリの中に squirrel.lib と sqstdlib.lib という静的ライブラリファイルが生成されます.これと include ディレクトリ内にある .h ファイル群が,Squirrel のライブラリのセットとなります.

しかしこのままでは Debug バージョンのライブラリと Release バージョンのライブラリが同じ lib ディレクトリに同じ名前で生成されてしまう (すなわち後から生成した方で先に生成した方が上書きされてしまう) という事態が発生します.

これでは不便なので,これを変更します.方法は,

ソリューションエクスプローラにて squirrel プロジェクトの所で右クリック > squirrel のプロパティ
ダイアログボックス上部の「構成」を Debug に変更 > 左側ウィンドウの構成プロパティ > ライブラリアン > 全般 > 右側ウィンドウの「出力ファイル」の項目に着目
ここがデフォルトで「..\lib\squirrel.lib」になっているはずなので,これを「..\lib\Debug\squirrel.lib」に変更する.
ダイアログボックス上部の「構成」を Release に変更 ここの時点で「プロパティへの変更を保存しますか?」と聞かれるので「はい」を選択 (※「いいえ」を選ぶと先ほどの操作が取り消されます)
先ほどと同様に,右側ウィンドウの出力ファイルの部分を「..\lib\squirrel.lib」から「..\lib\Release\squirrel.lib」に変更
OK を押してダイアログを閉じる.

今度は,ソリューションエクスプローラにて sqstdlib の所で右クリック > sqstdlib のプロパティ
そして,squirrel のプロパティで行ったのと同様の操作を行う.

最後に,ソリューションエクスプローラにて sq の所で右クリック > sq のプロパティ
ダイアログボックス上部の「構成」を Debug に変更 > 左側ウィンドウの構成プロパティ > リンカ > 全般 > 右側ウィンドウの「追加のライブラリディレクトリ」の項目に着目
ここがデフォルトで「../lib」になっているはずなので,これを「../lib/Debug」に変更
ダイアログボックス上部の「構成」を Release に変更 ここでの「変更しますか?」の問いももちろん「はい」
同じく「追加のライブラリディレクトリ」の「../lib」を「../lib/Release」に変更
OK を押してダイアログを閉じる

これで完了です.

後は Debug と Release の両方でビルドを行ってやりましょう.警告は沢山でますが,一応エラーは 0 で squirrel.lib と sqstdlib.lib が Debug 版と Release 版の 2 つずつ計 4 つが生成されます.

次回はこのライブラリを実際に使う際,リンク時に大量の警告が出ることを解消する記事を書きたいと思います.

今回は文字ばっかりで見辛いなぁ…

2009-04-07T02:21:46 (Tue)

Squirrel リンク時警告の解消

リンク時の警告を消す方法が分かったのと,Debug 版と Release 版での生成される .lib ファイルのディレクトリの分け方を書いておきます.

今まで私は squirrel.lib と sqstdlib.lib というファイルを生成して,コピーして使っていました.

そして,リンク時の警告はデバッグ情報の入ったファイル (.pdb ファイル) が見つかりませんという内容のものです.

というわけで,警告を消すアプローチとしては以下の 3 つになります.

1. リンク時にデバッグ情報を使わないように指定する
2. ちゃんと .pbd ファイルを持ってきてやる
3. ライブラリ生成時に .pbd ファイルを作らないようにする

それぞれの方法を説明します.

1.
(まだ不明)

2.

3.
ソリューションエクスプローラで,プロジェクト sqstdlib の所で右クリック > sqstdlib のプロパティ
ダイアログボックス上部の「構成」を Debug に変更
左側ウィンドウの構成プロパティ > C/C++ > 全般 > 右側ウィンドウのデバッグ情報の形式の部分に着目
ここがデフォルトでは「エディット コンティニュ用プログラム データベース (/ZI)」になっているはずなので,これを「無効」に変更.
OK を押して閉じる.
ソリューションエクスプローラで,プロジェクト squirrel の所で右クリック
後は sqstdlib で行った操作と同じ.
これでビルドするとデバッグ情報を使わない squirrel.lib と sqstdlib.lib が出来上がります.

2009-04-07T02:22:07 (Tue)

手順は冗長過ぎるくらいにメモする

必ずそのとき行った手順が再現出来るように,作業メモは冗長過ぎるくらいに書いておくのがベストだと信じています.

そして冗長に書いておけば,短縮するよりも客観性もアップします.パリティディジットじゃないですが,いくらか誤り訂正が出来る (誤解を防止出来る) ので.

客観性と再現性こそが科学にとっての錦の御旗 by 水前寺邦博

これが私の技術メモに対する信念です.

2009-04-08T19:22:14 (Wed)

GDGD 第1回トークショー

GDGD 第1回トークショー

同人ゲーム開発者によるトークショーです.興味のある方は是非.

定員が 100 人先着順なので行きたい方は参加登録をお早めにした方がいいと思いますよ (・ω・)

comments

hagi (2009-04-09T09:24:25)

面白そうだけど、東の京遠いしバイトがある私

か (2009-04-09T10:22:35)

あちゃー 残念 orz

2009-04-09T10:20:29 (Thu)

vi でバックアップファイルを作らないようにする設定

.vimrc (vi エディタの設定ファイル) に
set nobk
の 1 行を追加する.

2009-04-10T13:31:07 (Fri)

技術メモのカテゴリについて

ちょっと思ったのだけど,単なるメモ代わりにブログを使うのって後々の検索効率が悪い気がします.というか編集効率がそもそも悪い気がします.

Wiki を作った方がいいような気がしてきました (´ω`)

果てさて…

2009-04-10T23:14:06 (Fri)

E=mc^2 ~アインシュタインと世界一美しい方程式~









概ね面白かったです.科学と言うのはその実人間の歴史の話だというのが知識の無い人でも分かるかと思います.科学史大好き.社会の時間にやる歴史は文字通り人間の「社会」がどう変遷してきたのかしか教えません.が,実は科学も非常に人間味のある「歴史」です.

しかし個人的に残念なのがマイケルソンとモーレイとローレンツとポアンカレの名前が出てこなかったこと.この人たちの研究成果もあって特殊相対性理論は出来たものだと私は考えてますので.あんまり大量に出してもしょうがないから,という理由からだとは思いますが (^^;

相対性理論 Wiki なんてものを見つけてしまいましたw もうちょっと詳しく科学史を知りたい人は見てみるといいかも.

2009-04-12T00:54:16 (Sun)

二郎初体験

関東圏にはラーメン二郎なるラーメンチェーンが存在し,熱狂的なファンというか信者に近いものが存在する.

で本日ほっしー先生が上京してくるということで,関東新参が二郎を体験してみようオフみたいなノリのオフが勃発し,まぁそれに参加してきましたとさ.

もやしだとか二郎はラーメンじゃないとかマシマシだとか色々ろくでもない噂を前々から聞いていたので恐々として店内に.ちなみに行ったのは池袋駅近くの店舗です.

初めてだけどその大盛りっぷりを体験してみっかー,ということで「大W野菜マシ」に挑戦.

感想としては,野菜マシのレベルではもやしの量は大したことが無かった.この程度のもやしなら自分の家ででも食べまする.麺が酷く太く,食べ切るのに苦労しました.6 人の参加者の中で一番食べるの遅くなっちゃったょぅ orz

一応完食しました.すると割と驚かれたり.個人的にはそれにビックリ.全然大食いではないのですが…

スープは美味しかったですが,麺が個人的には好きじゃないです.ラーメンの麺は細い方が好きです.なので次からは普通サイズで野菜をマシマシにしようかと思います.

2009-04-16T23:33:46 (Thu)

ヴァイスシュヴァルツ

ヴァイスシュヴァルツを始めることにしました.

らき☆すたの参戦に心動かされました (^^;

らき☆すたの対戦トレカと言えばヴァイス以前にもプロジェクトレヴォリューションがありました.しかしあちらは種類が少ない上にブースターは他の作品とごちゃ混ぜになっています.基本的にらき☆すただけ集まればいいやと考えているので,らき☆すた単独ブースターを出してくれたヴァイスは買いたくなったというわけです.あとカードの種類が多いのもいいっスねぇ.

とは言え,今はまだカードを買っただけですが…



なんというかまぁいきなりブースター BOX 買い \(^o^)/

今回買ったのはデッキ 1 つ \1,160 とブースター BOX 1 つ (ブースター 1 パック \290 * 20) \5,800 です.メーカー希望小売価格ではデッキは \1,300 でブースターは \330 ですが,ヨドバシカメラではこの値段で買えるようです.

いやいやw どうせ買う羽目になるんスからw 今買った方が人生有効活用出来るってもんスよww

半分はコレクションとして楽しみますが,一応対戦も出来るので相手を見つけて対戦してみたいところ.カードゲームは 2006 年にやってた Lycee 以来 (というか人生でトレカに余り手は出していない) なので,じっくり楽しもうと思います.

ちなみに今までの人生で手を出したトレカを列挙すると,

1. ポケモンカード
 小学生のときだったこともありデッキ 1 つしか買ってなかったので当然サッパリ強くなかった
2. ガンガンヴァーサス
 中学生のときにそれなりに買ったけどそれでも小学生に毛の生えた程度のお小遣いの中からだったので大したことなかった
3. Lycee
 大学生になって財力を手に入れてしばらくやってたはいいが気が付けば飽きてた (^ω^)

モンコレやギャザは買ったことありませんが少し知っている程度.

2009-04-17T01:55:07 (Fri)

ヴァイスシュヴァルツ BOX のオマケ話

ちなみに BOX には特製スリーブが付いてきます.



…何ですと,かがみさんや…? orz

らき☆すたという作品は恐ろしいっスよね…

何せ作中のキャラが「沢山買ってこそ愛だよ」みたいに言ってきますから ^q^

2009-04-18T02:07:51 (Sat)

Squirrel 実験レポート

Squirrel から C/C++ で実装した関数を呼び出すことに関する話です.

C/C++ 言語側で plus(x, y) という関数を実装することを想定します.この関数の定義は x と y の和を計算して戻り値として返すとします (シンプルに).

するとグルー関数は以下のようなコードになるはずです.(※グルー関数という用語は書籍スクリプト言語による効率的ゲーム開発 C/C++へのLuaの組込み実践を参照.少々高いですがいい本です.)

SQInteger plus(HSQUIRRELVM v)
{
 int x, y;
 ::sq_getinteger(v, -1, &y); //スタックの一番上から第二引数を取得
 ::sq_getinteger(v, -2, &x); //スタックの上から二番目から第一引数を取得
 ::sq_pushinteger(v, x + y); //スタックに戻り値を積む
 return 1; //戻り値があるので 1 を返す
}

このとき,スタックに引数が積まれたままになっていますが,メモリリーク…というかスタックの無駄遣いはされずに,Squirrel 側できちんとスタックの一番上の位置が管理されるようです.

この plus 関数を Squirrel のスクリプトから何百万回呼んでも,メモリ使用量は増えませんでした.

ただし,逆 (C/C++ 側から Squirrel で書いた関数を呼ぶ) はだめです.きちんとスタックの一番上の位置を呼び出しの前後で保たなければいけません.

スタックの一番上の位置が上にズレていけばメモリ使用量はどんどん増えていき,下にズレればエラーが発生します.

2009-04-18T20:55:44 (Sat)

IGDA セミナーに参加してきました レポート 0

IGDA日本ゲームテクノロジー研究会第13回研究会「続・ゲームにおけるスクリプト言語の現状」に本日出席してきました.

会場ではほっしー先生とへっぽこ先生に遭遇.終了後に食事に行きました.学生補正ご馳走様です m(_ _)m

セミナーの方ですが,5 人の方からゲーム製作におけるスクリプト言語の面白いお話が聞けました.

1 人目 : ごく簡単な並列処理スクリプトシステムの設計と実装 (小久保啓三氏)
2 人目 : 「サクラ大戦 5」でのスクリプト運用事例 (秋葉晴樹氏)
3 人目 : 汎用スクリプト言語 Xtal 設計と実装 (石橋立宣氏)
4, 5 人目 : Squirrel スクリプトを使った実装と活用 (神尾隆司氏,北出智氏)
(※レポート記事をアップし次第追加していきます…きっと)

それぞれのレポート記事の最後に,他の方々の書かれたレポートへのリンクも張っております.

2009-04-18T23:30:11 (Sat)

IGDA セミナーに参加してきました レポート 1

1 人目 : ごく簡単な並列処理スクリプトシステムの設計と実装 (小久保啓三氏)

ウィザードリィが一番プレイしたゲームらしく,相当の変態プレイもしたそうです.

元々言語学を専攻していたらしく,人工言語であるプログラミング言語も変化し続けるものであり,それこそが言語の本質であるという見解を持っていました.

プログラミング言語はコンピュータを動かすために書かれるものですが,そもそもは他のプログラマに読んでもらうために書くものだとも言っていました.それゆえに小久保さんのソースコードにはコメントが割とギッシリ書かれているそうです.

旧スクウェアに長らく勤めていて,関わった主なタイトルにはロマサガ 1,FF5,クロノトリガー,FF7,シャドウハーツなどがあるそうです.ツール提供ということではロマサガ 2,FF6,聖剣伝説 2,ライブアライブなどにも関わったそうです.

FF5 とクロノトリガーでスクリプトの設計と実装を担当し,ATEL (エーテルと読む) というスクリプトをスクウェア内でリリース.色々な人が書き易いように配慮して作られたようです.

並列処理を記述するために,従来までのスクリプトでは MMOVE (Multi MOVE) などというそれ専用に命令を作っていたことから脱却したかった,と.そのために何かしらいい並列処理記述は無いかと探していました.OCCAM 言語や並列○○ (Fork とか Join とか) という言語が候補に挙がったこともありましたが,マイナーであったり,そもそも非プログラマである企画の人に使いこなせるわけが無い,ということで不採用.そして,ACTOR モデルという結論に辿り着きました.

ACTOR モデルとはフィールドのそれぞれのオブジェクトがミニプログラムで自立して動く仕組みで,ACTOR 間ではリクエストを送り合うことで通信します.

キャラクターの細かい動作を記述する必要があったのは,クロノトリガーでのデザインの大きなコンセプトとして「フィールドと戦闘のシームレスな推移」があったからです.単にランダムに敵・味方を配置するだけではダンゴ状態になることが多かったらしく,モンスターやキャラクターの配置をこれで綿密に指定していたそうです.

VM を作るのは簡単だそうで,工夫をしたのはレキシカルコンパイラ.コンパイラに辞書を付随させ,予約語を任意に後から増やせるようにしたものです.同義語,シンタクスシュガーも入れ放題.そこは開発当初から見越していたようです.ちなみにその辞書は FORTH ライクな記述を使ったようです.

各 ACTOR のリクエスト受付のための窓口をどう持つかで,メッセージキューを使うアイディアもありましたが SFC という (今となっては) メモリが貧弱なマシンでは現実的ではなく,8 つの Priority を持つスタックで実現した?? (この辺少し理解が曖昧.分かる方居ましたら補足していただければ orz)

この ACTOR モデルだと従来のようにイベントストーリーを書きにくいという意見も出ましたが,ディレクターというアクターを作ることにより解決したそうです.そのお陰で皆が調子に乗ってどんどん色々なアクターを作って,照明さんなどというアクターもあったとかw

しかしそれでストーリーが長くなり過ぎないように,きちんと気は配ったそうです.イベントシーンが長い長いと言われる FF7 ですが,きちんと計ると実はそれほど長くないらしいです.

コンパイラで気をつけた点は,出来るだけ早い段階でエラーや警告を出し,なおかつエラーメッセージは丁寧に,対処法を書くようにしたこと.今の某社の何とか Studio のエラーメッセージなんかはわけ分からないですよねw とのこと (^^;

並列処理である以上どうしてもデッドロックバグは起こるので,それに対処するために強力な内蔵デバッガを実装したそうです.また最終手段として,長時間リクエスト待ち状態で固まってしまった場合,自動解除するようにもしていたそうで.それにより,万が一プレイヤから「キャラが固まっちゃったんですが…」という内容で報告が来たとき,「あれ?そうですか?うーん少し待ってみて下さいねえ…」で少し待つと自動解除が起こって「あ,動きだしました!」「おお!それは良かった!」となるんだそうですよw

プログラマの人には,他人に優しいエラーメッセージを努力して欲しいと.スクリプターの方と仲良くするためにも「マニュアルに書いてあるからそこを参照して直してくれ」なんてならないように,とw

また,エフェクトのパラメタはスクリプトでもなく,GUI で調整する方が高効率でいいはずだと思っているようです.これは私も激しく同感です.

プログラミング言語は,言語であるゆえに生き物である,と.変化するのは当然で,微妙な字句のゆらぎには意味はなく,細部よりは言語の思想が伝わっていくことが重要であると考えているそうです.ATEL もその後亜種が色々誕生しましたが,ACTOR で並列処理という基本思想だけはずっと残っているのだそうです.

ここでセッションが終了し,質問タイムに入りました.

問 : SFC で,データ量の多いシナリオの圧縮などは何かやったのか?
答 : VM にビットシフト等があったので圧縮は出来た.メッセージの漢字は一度全て漢字で書いて,その後頻度を調べて重要な物は残して頻度の低いものを削っていたそうです.その後 PS にあってメッセージが沢山入るようになり,A ボタン連打ゲーになっていったとか…

他にも質問はありましたがメモが不完全… orz まぁ他の方のレポートを参照して下さい (^^;

-- 他の方のレポート --
IGDA「続・ゲームにおけるスクリプト言語の現状」レポート (へっぽこさんメモ)
続・ゲームにおけるスクリプト言語の現状」レポートと感想 その1 (hossy online - といぼっくす)
「続・ゲームにおけるスクリプト言語の現状」行ってきた (好き勝手に・げーあにん?)
[レポート]IGDA第13回研究会 (Garbage Collection)
ごく簡単な並列処理スクリプトシステムの設計と実装CommentsAdd Star (d’Arcのはてなダイアリー)
国際ゲーム開発者協会日本(IGDA日本)「続・ゲームにおけるスクリプト言語の現状」に参加したよ (■ - memo)

-- 関連ニュース記事 --
ゲームで使うためのスクリプト言語開発とは~ IGDA日本SIG-GTレポート
スクリプト言語をメインに開発された『小さな王様と約束の国』舞台裏~ IGDA日本SIG-GTレポート (2 件 : Yahoo!ニュース)

comments

tama (2009-04-19T02:24:47)

厳密なアクターモデルの実装は難しいから,ゲーム用に簡素化されたアクターモデルな言語を作ったんだ.

>ちなみにその辞書は FORTH ライクな記述
てっきりミニFORTHを実装したのかと思いきや,あくまで記述だけ?

>各 ACTOR のリクエスト受付のための窓口をどう持つかで
メッセージキューだと読み出しに時間が掛かりすぎるかもしれないし,ずらすのにコストが掛かるからかなぁ.だから優先度別の軽量スタックを用意してバラバラに送信する?
でもこれだとキューの実装によってはやりようがあるような…

それにしても,このイベントも面白そうだったなぁ.

か (2009-04-19T02:55:22)

・FORTH に関すること

手元の資料によりますと,
 #12. A. N.
などと書いて,これが
 Push 12, write to current address++
 pop Actor stack, write to current address++
 Pop Number stack, write to current address++
というように解釈されるとか.

VM がミニ FORTH ということですかね.

・リクエスト受付のこと
誰かが更に詳しいレポートを書いてくれることを祈りましょう ^q^

2009-04-19T00:03:56 (Sun)

IGDA セミナーに参加してきました レポート 2

2 人目 : 「サクラ大戦 5」でのスクリプト運用事例 (秋葉晴樹氏)

プログラムに疎い人たちにでも使えるようにスクリプトを

2009-04-19T02:20:10 (Sun)

IGDA セミナーに参加してきました レポート 3

3 人目 : 汎用スクリプト言語 Xtal 設計と実装 (石橋立宣氏)

趣味で Xtal (クリスタルと読む…がエックスタルと読まれることが多い) という新しいスクリプト言語を製作中.Ruby のように宝石の名前にしたかったということと,FF のファンなのでクリスタルにどうしてもしたかったという素晴らしい理由からこの名前だそうですw eXTreme Agile Language という名前の方が後付けだとかw

まだ 1.0 がリリースされていないので実績は 0.なので Xtal の宣伝という形のようなセッションでした.

ゲーム製作において C/C++ でテキストを弄るのは辛い,という経験から何かしらのスクリプト言語に手を出そうと考えた.ここでスクリプト言語は遅い,というよくある疑問を考えたのだが,20%80% の法則があるのだからソースの 80% の部分をスクリプトで書くなら OK だろう,ということでスクリプトを採用したそうです.

ツール作成のために Ruby と出会い,そのあまりにサクサク書ける感ゆえに Ruby を最初はスクリプトとして採用しようとしたようですが,Ruby はゲーム用途の組み込みには向かないと判断したそうです.Windows ゲームには組み込みしたらしいのですが,コンシューマでは無理だと感じたそうです (2002 年時点での話).

次に Lua に出会い,これを採用するも,C/C++ との微妙な違いやグローバル変数の扱いに,恐らく多くの Lua ユーザと同様,苦しめられたそうです.C++ コードを弄っていてから Lua に向き直ったときについ // でコメントを書いてしまい,涙でモニタがにじんだこともw

整数と浮動小数点が分かれていないこと,未定義変数の扱いが要注意であること,C/C++ との親和性が悪いこと,その他 Ruby や Python に比べて言語的に機能が少ないことなどから,Lua も採用を見送ったそうです.

するとネットに同じような意見,すなわち「Lua のように軽くて速くて組み込みやすい + Ruby, Python のようなスクリプト言語の機能を保持している + C/C++ ライクな構文」の言語を欲するものを多く見つけたそうで.

そこで,これをもし自分が作れば需要があるのではないか?という思いと,登山家の「そこに山があるから山に登る」という答えと似た,「そこにプログラミング言語があるから,自分がプログラミング言語を作るんだ!!」というとても素敵な名言 (何かおかしい?知らんがな) のもとで,新しいスクリプト言語 XTal の製作に取り掛かったそうです.

Xtal は Squirrel にもあるように未定義の変数は宣言無しでは使えない,Lua のようにいきなり使えないようにしてあります.書き方は
変数定義
 foo: 0;
変数代入
 foo = 123;
変数使用
 println(foo + foo); //=> 246
うっかり変数名を間違えて参照したら?
 foe;
//=> foe は定義されていません.'foo' と間違えている可能性があります
という感じです.

ここで少し興味深い考察が出ました.変数の定義・宣言・初期化と代入がまったく同じ記号 (例えば = など) で出来てしまう言語 (Lua など) はどうしてそういう仕様になっているのでしょうか.この問いに対して,恐らくはそれらを区別するため定義の際につける var や local を使いたくないから,というのがあるのではないか,という見解を示されました.そこで,初期化は : で,代入は = で,という,タイプ数的な意味での手間を変えない方式を取り入れたのだと言っていました.

後は,C/C++ や Java 等である基本的な制御構造 (if, switch, for, while, try catch finally),クラス,ファイバー (コルーチンと同義),そして Ruby のようなブロック
array:[10, 20, 30];
array.each { |x|
 println(x)
}
//=> 10
//=> 20
//=> 30
を実装しています.

コンパイラの字句解析は完全に手書きだそうです.現在,字句解析と構文解析は拡張性を考慮し分離しているそうですが,将来的には統合するかもしれないそうです.構文解析は Yacc などのツールも使ってないらしく,こちらも手書きだそうです.一時期 Boost.Spirit による構文解析も実装されたようですが,コンパイル時間のあまりの増加に中止したようです.

ByteCode は Java のものを参考に作ったそうです.

また,Ruby の思想である「全てはオブジェクト」も Xtal では実現されています.

ガベージコレクションに関しては,参照カウンタ + Mark & Sweep 方式が採用されているそうです.他の GC も検討はされたようですが,これが一番マシ?という感じになったということでしょうか.しかし GC には何かと問題が多いようで.ちなみに私は GC 関連は余り詳しくないので分かりかねます orz

せっかく日本人が開発しているのだから,文字コードへの対応はしっかりしたいと言う考えもあり,そのような環境依存部分は容易にカスタマイズ可能になっているそうです.

また,C++ との連携を行う際のバインダも,Xtal が標準で装備するそうです.バインダには C++ のテンプレートメタプログラミング技術が盛んに利用されており,またそれらが本当に有効に働いているようです.この辺りの技術は Modern C++ という書籍が参考になるとのことでした.

開発期間が既に 7 年目に突入しているそうですが,理想の言語を追い求め過ぎて既に 5 回くらい 1 から書き直しているそうです.また,その「理想の言語」というやつは体調で変わるらしく,途中で Lisp にハマり,危うく Xtal が Lisp になりかけたこともあったとかw 最近は Scala がお気に入りらしいです.

字句解析,構文解析も手書きでまったく問題ないらしく,本人としては高度なことは全然行ってない,とのことです.私に言わせれば字句解析も構文解析もテンプレートメタプログラミングも十二分に高度っスけどね… orz

Xtal はあくまでもプログラマ向け言語として設計されていますが,企画など非プログラマの人でも使えるようにしたい,という要求にも対応出来るように,Xtal 自身で Xtal の言語拡張が出来る仕組みも実装されているそうです.

本当は IGDA のこのイベントに合わせてバージョン 1.0 をリリースしたかったそうですが,間に合わなかったようです.あとマニュアルやデバッガの整備がサッパリ進んでいないのでその辺りの協力者は随時募集中らしいです.

※以下の話はどの地点で話されたのか覚えていない※
Xtal は実行時のメモリ消費量を抑えるために,関数が実行されるまではその関数のデータをメモリ内に配置しないそうです.初めて実行されるときにメモリ内に配置されるとか.あえてこういう遅延をさせていると言っていました.

現在開発中で,日本語でやりとりが出来るので皆積極的に使ってみて下さい,というところでセッションが終了し,質問タイムに入りました.

問 : 関数が呼ばれるまでメモリに登録されないということに関する何か (※メモがとれてない orz)
答 : この遅延を行わないと,標準ライブラリが全てメモリに配置される.これが割とバカにならない.

(※要するに,こういうことです.標準ライブラリの中の沢山ある関数の中で,最後まで使われないものはメモリに配置するのもやめちゃおう,と.)

問 : 字句解析,構文解析は難しくなかったと仰られたが,では一番難しかったのはどこか?
答 : 構文木からバイトコードに変換する処理が難しかった.

問 : (※恐らく Xtal への乗り換えに関する話だったと思う… またメモがとれてない orz)
答 : 地雷原ですので頑張って下さいw

問 : 未踏プロジェクトにしたりはしないのか?
答 : じゃあします ^^ (会場拍手)

こんな感じでした.この文字だけでは伝わりにくいかもしれませんが,一番会場内に笑い声があったセッションでした.

是非,他の方のエントリも参考にして下さい ^q^ (なんという

-- 他の方のレポート --
IGDA「続・ゲームにおけるスクリプト言語の現状」レポート (へっぽこさんメモ)
「続・ゲームにおけるスクリプト言語の現状」行ってきた (好き勝手に・げーあにん?)
続・ゲームにおけるスクリプト言語の現状」レポートと感想 その2 (hossy online - といぼっくす)
[レポート]IGDA第13回研究会 (Garbage Collection)
汎用スクリプト言語Xtal設計と実装 (d’Arcのはてなダイアリー)
国際ゲーム開発者協会日本(IGDA日本)「続・ゲームにおけるスクリプト言語の現状」に参加したよ (■ - memo)

-- 関連ニュース記事 --
ゲームで使うためのスクリプト言語開発とは~ IGDA日本SIG-GTレポート
スクリプト言語をメインに開発された『小さな王様と約束の国』舞台裏~ IGDA日本SIG-GTレポート (2 件 : Yahoo!ニュース)

2009-04-21T21:58:52 (Tue)

IGDA セミナーに参加してきました レポート 4

4, 5 人目 : Squirrel スクリプトを使った実装と活用 (神尾隆司氏,北出智氏)

スクウェアエニックスの中の人です.「小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル」と言えば,そのソースが Squirrel で書かれていることで一部では有名ですが,その開発に携わった方々です.

Squirrel は恐らくほとんどの人が読めないと思います.で,そのため読み方が現在バラバラらしいです.私は「スクィレル」と読んでいますが,他にも「スクワレル」「スコーレル」「スカーラル」「スクワール」などが実際にあるようです.とりあえずセッションでは「スクワール」で統一されることに (…とは言いましたが割と他の読み方もされてました).

最初は Squirrel の言語の仕様解説でした.

作者は Alberto Demichelis さん.ライセンスは zlib/libpng license.公式サイトの URL は http://www.squirrel-lang.org

Squirrel は Lua の不満点を解決するために作られた言語です.オブジェクト指向で,Lua のように組み込みは容易.Squirrel から C/C++,C/C++ から Squirrel の関数を呼び出すことも当然可能.そして文法が C/C++ ライクであり,コメントは /* ... */ と // が使え,Integer と Float の区別があり,ビット演算もサポート.クラスも Table を使って実現されます.Unicode にも対応し,64bit 対応もなされています.

型は動的型で,GC に関しては参照カウンタ方式も併用して使われているそうです.

クロスコンパイルも可能ですが Wii では何やら工夫が必要だったそうです.

細かい注意点としては,clone が 1 層だけのコピー (要するに shallow copy?) なので複製生成には注意が必要.

ここからしばらく Squirrel の,本当に言語の各種用語の解説が続きました (^^; 知ってる人以外はかなり置いてけぼり食らったんだろうなぁw と今になって思いますw (幸い自分はここ 1 ヶ月ほど Squirrel 漬けだったので付いていけました.僥倖ww)

さて,実装に関して Squirrel をどこで使うかということを考えます.ここで用途を限定する (例えば AI 作成やイベントスクリプトだけに使う,などのように) 方法もありますが,当然ゲームを全般的に Squirrel で記述してしまうこともあります.

組み込みに際して,まずは色々な C/C++ 側の関数なりクラスなりをバインドしなくてはなりません.そこで SqPlus というライブラリを使用します.ここからしばらくは SqPlus によるバインドの仕方が説明されました.(不幸なことに自分は Squirrel へのバインドを Squirrel の API をそのまま使っていたため,この話にサッパリ付いていけなかった orz)

印象に残ったのが import という仕組み.これは比較的簡単に実装可能ですが,ソースを完全に分けて管理出来るようです.imoprt したファイルをプログラムで管理し,タイムスタンプをチェックしながら再読み込み出来るようにしておくとエラーの回復がしやすくなる…だそうです.

組み込む上で注意することは,C++ で生成したポインタをそのまま Squirrel に見せる場合,try ~ cacth を使って,Squirrel のスタックダンプ (スタックの状態を吐き出すもの) を呼び出せるようにしておくと良いそうですが,VM の中でアドレス例外などが起きると出来ない場合もあるそうで.

SqPlus 側のデフォルトの仕様で関数の引数が多過ぎるとエラーになるそうですが,sqplus.h を書き換えることで対処可能だとか.

製作に際して,SqPlus というツールをもってしてもなお,後からどんどん追加要求が出てくるので,その都度バインド作業を行うのはやはり大変で面倒だとか.そこでバインドのためのコードを自動生成するものをも作ってしまったそうです.それが SqReg.

またプランナーにデータを作ってもらうためのツールとして,XML などの形式から Squirrel のデータに変換するコンバータも作っておくと便利だそうです.(ということは実際に作ったのでしょう.)

デバッグに関しては,変数が未定義であったり typo であったり文法エラーをしていたり型が違ったりなどなどの諸原因により,ランタイムエラーが頻発するそうです.そこでネーミングルールを統一したり,タイプしにくい名前を避けたり,補完機能を活用したりしてそれらを極力減らしていったそうです.

eclipse/SQDev という Eclipse で使うデバッガもあるそうなのですが,重くてとても常用出来ないらしいです.そんなところで Squirrel の作者自身が Vivusal C++ 用のデバッガを作ったみたいです.それをその日の朝にインストールしてきたらしく,会場にてデモを見せてくれようとしたですが,きちんと動きませんでした.残念.

基本的にメモリ使用量は実行しているとどんどん増えていきますが,GC で回収されて減ります.しかしそれでも戻らない場合はメモリリークの可能性があるそうなので,メモリは常に監視しておく方がいいそうです.

Squirrel と C++ との頻繁な往復,文字列の加工,コピーの発生する引数や戻り値の受け渡しはいずれも注意するべき重い処理だそうです.また GC も毎フレーム実行するには重いようで.それぞれを運用で回避するしかないようです.

さて,実際の FFCC ですが,先ほど述べた通りゲームの全般的な処理を Squirrel で書かれています.メインループのレベルから Squirrel で書かれているそうです.あくまでもシステム部分が C++ で,ゲームに関する部分は Squirrel だと言っていました.それでもスクリプトによる純粋なメモリオーバーヘッドは CPU の 10% 程度だそうです.

そこで,次のゲームが出てきます.My Life as a Darklord という ,小さな王様と約束の国とはストーリー…というかゲームの内容的に対極にあたるようなゲームです.これが,ほとんどソースの使い回しで実装されたらしく,C++ ソースは 94%,Squirrel スクリプトソースは 30% という再利用率だったそうです.

My Life as a Darklord で工夫した点は,try, catch で実行時エラーを捕らえ,ゲームへ復帰可能にしたこと.具体的には,全インスタンスを管理者が常に参照し,再コンパイル時に確実にエラーがあるクラスのインスタンスへの参照を全て切り破棄,そして作り直したクラスによりインスタンスを再生成し,再び管理する,という感じのようです.それでも難しい部分はどうしても再起動せざるを得なかったようですが…

デバッグに関しては先ほど述べた通り eclipse/SQDev が実用的な速さで動かなかったため,いわゆる printf デバッグを行ったそうです.その辺りが苦労した点だと言っていました.

Squirrel を使うことによる利点は,素早いリトライが可能になり短い時間で形に出来ること,柔軟なデータフォーマットとスクリプトで細かな変更にも柔軟に対応出来ること,強力なコールスタックにより問題の把握が容易なこと,IDE が無くても制作やデバッグが可能であること,難解なメモリー破壊のようなバグが起き難いことだと言っていました.

注意点は,メモリーは常に気を配ること,デバッグのコストが増えてしまうことのないように特にランタイムエラーを減らす工夫をすること,変数に型が無いのでコメントは書こうということでした.

My Life as a Darklord はゲームコードの部分を取り替えたという事例ですが,同様にハードとシステムの部分を取り替えることも可能との見通しもあり,色々な活用方法が考えられそうとのことでした.

そして質問タイム.

(※以下,質問内容がきちんとメモされてないものが多くあります.何かの問いに対する答えだけ,という部分が増えますがご了承下さい orz)

問 : ライセンスは採用決定の理由になったか?
答 : それもあるが実際はライセンスは大して気にしない.

問 : Squirrel にしたことの勝利は?
答 : トライ&エラーがおそろしく楽になった.C++ でデータフォーマットを変えてコンバータを通してコンパイルしてリンクして…は大変.開発に携わった 3 人の PG で「C++ では今の見た目にはならなかっただろう」という見解に.

問 : 参照を確実に切る手法の紹介がされたがそれは限定したクラスだけか?
答 : YES.限定したクラスのインスタンスの参照切りしか出来なかった.

問 : スクリプトのプログラマとプランナーの担当割合は?
答 : イベントスクリプトがプランナーで,それ以外ほぼ全てがプログラマ

当たり判定等は Squirrel で書いて処理の重さを認識し,C/C++ で書き直した.アクションだと Squirrel はもっと限定された使い方しか出来ないだろう.

メインループを Squirrel で書いてしまうのは Wii が限界.DS では無理.イベントだけで Squirrel を利用,などと言うように限定された使い方しか出来ないであろう.

XBOX360 での製作など,大規模なゲームになると (FFCC のように) スピード感だけで作ると大変.

ブラックアウト中に描画処理を消す,等の処理も簡単に実現出来た.

問 : Squirrel,SqPlus にバグがあると聞いたが,踏んだことはあるか?
答 : 両方ある(笑) しかし 6000 行の C++ コードなので,いざとなったら最悪自分でライブラリを修正すればいい,という考えもあった.

Squirrel は基本的な使い方しかしていない.

…と言ったところで,終了しました.

感想としては,他の人 (Xtal 除く) が割と古いゲームでの話しか出さなかったことに対し,明らかにスクエニの内部のほぼ最新情報であろうものが晒し出されたというのが凄いです.

開発現場の事情に基づく話の多さが印象に残ってます.

兎にも角にも,Squirrel の今後に激しく期待ですね.というか今後自分が多くの初心者に対して導入を手引きしてあげられればいいなぁw (^^;

例によって他の方のレポートへのリンクです.併せてお読み頂ければ.というか一人で全てを書き切るのはほぼ不可能ですよ…
IGDA「続・ゲームにおけるスクリプト言語の現状」レポート (へっぽこさんメモ)
続・ゲームにおけるスクリプト言語の現状」レポートと感想 その2 (hossy online - といぼっくす)
「続・ゲームにおけるスクリプト言語の現状」行ってきた (好き勝手に・げーあにん?)
[レポート]IGDA第13回研究会 (Garbage Collection)
Squirrelスクリプトを使った実装と活用 (d’Arcのはてなダイアリー)
国際ゲーム開発者協会日本(IGDA日本)「続・ゲームにおけるスクリプト言語の現状」に参加したよ (■ - memo)

ついにニュース記事も上がったようです.
ゲームで使うためのスクリプト言語開発とは~ IGDA日本SIG-GTレポート
スクリプト言語をメインに開発された『小さな王様と約束の国』舞台裏~ IGDA日本SIG-GTレポート (2 件 : Yahoo!ニュース)

2009-04-25T19:54:46 (Sat)

GDGD トークショー第 1 回実況ログとレポート

GDGD の第 1 回トークショーに本日参加してきました.

前日までの予定では私は Ustream 要員だったのですが会場が急遽「写真撮影・音声録音・動画撮影・生放送すべて禁止」となったため Twitter での文字実況を行いました.

以下,そのログです.他人からの Reply は含めず,私の発言のみを抽出しました.

12:06:01 Ustream 中止のお知らせ (´・ω・`)
12:07:15 写真撮影・動画撮影・“生放送”が禁止になりました \(^o^)/
12:07:48 横の .@hossie 先生から生文字中継やればいいじゃないとのお言葉ががが
12:08:11 @AP_P お預けです (´・ω・`) 残念です
12:08:38 そうか .@heppoko 先生の裸を考慮して禁止なんだ^^
12:09:40 とりあえず文字実況頑張ってみるべ
12:10:25 @AP_P へっぽこ先生は心の中は常に脱いでます
12:10:56 @araigeta 残念です orz
12:11:50 今確実に「生放送」禁止と言われたー
12:12:39 注意点が挙げられた どんどんお酒注文してくださいとのこと
12:13:22 話をする人が壇上に
12:14:23 ちなみにステージ左手のカウンター 右から二番目の席に私は居ます
12:15:36 壇上 左から神主,DNA,なりたのぶや,へっぽこ,紫雨 敬称略
12:16:29 紫雨先生が一晩で作ってくれましたのゲーム画面wwww
12:17:14 かんぱーい
12:18:48 へっぽこ先生今日から NEETwwwwwwww
12:19:29 紹介が終わった
12:19:51 次 パネルトーク 「同人ゲームの製作」について
12:20:52 ゲームの企画
12:21:09 D.N.A. Softwares にまず振られる
12:23:26 企画の話なう
12:24:22 あんまり企画はマジメにやらないという方向かなw
12:25:19 絵と音楽とアルゴリズムがあればゲームは作れる by 紫雨
12:28:03 企画において必要なものを作らず必要ないものを作って,後から企画をそれに合わせて変えるw by 神主
12:29:09 フランスパンでは絵というか見た目が先でプログラムをそれに合わせるように作る
12:30:33 神主は PC 3 台で製作してる
12:32:37 D.N.A. の開発風景 ゲーム機やら PC やら何やらがやたらと多いw
12:33:03 それぞれの人の開発風景写真なうです
12:33:51 なりたの開発風景 相対的に綺麗な部屋に見えるw メイン PC とノート PC で作業
12:34:23 へっぽこ先生の開発部屋 CG 疑惑!! (・ω・)
12:35:27 紫雨の開発風景 引っ越したばかりなのでたまたま綺麗 湯沸しポットが重要 お茶がないと開発できない!
12:36:06 神主部屋に戻る さりげなくビールジョッキが
12:36:39 ルーさんの開発風景 in DNA の部屋 一人だけノート PC けどトラックボール使ってる
12:37:06 ノート PC で何でも出来るっていいよね らしい
12:37:36 CPU の話に 皆デュアルコアだよね という話
12:37:48 紫雨先生wwww 昔
12:37:59 昔はデュアル CPU とかwwww
12:38:38 デュアル CPU を使ったことある人挙手 結構上がってるwwww
12:38:50 (当然私は挙げられません orz
12:39:26 ビール追加注文きましたー
12:39:50 デュアルコアも買えるし開発環境も安く買えるし いい時代だねーと
12:40:02 学生だとアカデミックパックいいよねー と
12:40:20 学生さん挙手
12:40:34 (手あげました
12:40:49 おっさんばっかりじゃなくて良かったー と
12:41:14 若い人にももっと同人ゲーム作って欲しいよねー
12:41:30 次の話題 「イベントに申し込む」
12:42:10 イベント申し込みの方法の話
12:42:40 イベント申し込み時に大事なことが決まる 「ゲームのタイトル」だ by 紫雨
12:43:04 @Omegamega 壇上左のカウンター席 右から二番目
12:43:35 タイトル決まるのはいいことだよねー テンションあがるよねー
12:44:25 テンション上がってきたらキャラの顔が飛ぶwwww紫雨先生ナニ作ってはりますかwwww
12:45:14 DNA 過去に東方で申し込みして出したのがアイドルマスター!
12:46:06 サークルカットと同じ絵のゲーム作れるように
12:46:23 努力したいよね という話
12:46:41 でもそういう何が出るのか分からないのも同人ゲームの良さだよね
12:47:34 落としました は参加できなかったサークルもいるので極力しないように キモに命じましょう
12:48:15 次 「製作中に注意していること」 風邪を引かないように by 神主
12:49:17 昼間の仕事をいかに断るかが大事 でもそういうことしてると本当にクビになるからね♪ by へっぽこ
12:49:41 学生は留年出来るからいいよね いやいやwwww
12:49:59 風邪で全滅とか怖い
12:50:30 製作時の徹夜はどう思うか
12:51:26 夜型人間 夜は居酒屋に 朝明るくなってきたら帰ってタモさんが出たら寝る by 神主
12:51:50 徹夜するとどうせ次の日潰れちゃうのでプラマイ 0 むしろマイナス by 神主
12:52:11 プログラムを書く手が一番よく動くのは 0 時過ぎてから by DNA
12:53:48 マスターアップ 1 週間前は会社休んで徹夜 by へっぽこ
12:55:17 会社 1 週間休むけどヘロヘロになって出社 言い訳は「女の子と色々やってた」 by へっぽこ
12:55:17 猛烈なハリセン突っ込みの嵐が
12:55:38 皆あんまり徹夜はしない 歳ですからw
12:56:03 徹夜は学生まで 学生のうちは無理がきくので ガンガン無理した方がいいよ
12:56:18 で無理をして「無理をするとよくない」と体に覚えこませる
12:56:49 1 日の睡眠時間を 2 分割するというテクも
12:57:20 目覚まし時計をセットして,寝る時間を調整する by 神主
12:58:03 クソゲーを準備しておいてテンションを下げてから寝る
12:58:59 20 分小休憩
13:01:09 @Omegamega 氏とリアマチ
13:03:39 へっぽこ先生早く脱げばいいのにー (・ω・)
13:20:09 Squirrel トークをしてた
13:21:58 再開
13:22:10 主食は麦wwww
13:24:08 参加者を無差別に選んで話させるアイディアだと 恐ろしい
13:24:46 ゲームサークル持ってる人挙手ー 7 割くらい挙手
13:25:19 嫌な話題 手焼きとプレスの話題
13:25:33 手焼きの枚数挙手
13:26:07 4 桁手焼きした猛者が居る 凄過ぎる
13:26:57 手焼き 多過ぎるとかえって高い
13:27:14 手焼きは前日まで出来るというメリット
13:27:39 手焼きを凄く楽にする方法がある 容量を減らすことだ by 紫雨
13:28:40 昔の手焼きは酷かった
13:29:47 フロッピーの話題
13:30:28 そろそろ CD でも容量厳しくなってきた
13:30:44 紫雨ゲームは 100MB 行った事無いとか 凄い
13:31:17 容量小さくすると読み込み早くなっていい
13:31:39 ドット絵は需要があるが供給が無い…
13:32:15 ドット絵描けると就職には困らない
13:32:30 でも目が悪くなるので注意だ
13:33:43 ショップ委託は手続き面倒
13:34:47 熊本はイベントがないのでショップ委託は生命線 それが分かってるので出来るだけうちでは委託はきっちりやる by DNA
13:35:21 ショップ委託しなかったらしなかったで「手に入らなかった」というクレームも来るので面倒臭い by 紫雨
13:35:41 個人通販は大変
13:36:18 ダウンロード販売という方向性も最近ではあるよね
13:36:55 再販は声はあるが実は需要はない 再販してもあまりショップが取ってくれない
13:37:32 ダウンロード販売したらしたでパッケージ欲しいという意見もどうしても出てくる
13:38:06 再販も考えたが黒歴史なので出せない by へっぽこ
13:38:24 へっぽこ宅のいいんちょ STG 在庫写真ががが
13:39:09 5 …
13:39:24 在庫リスクを皆に知ってもらおう
13:40:03 トールケースは場所食うし積むと滑る…
13:40:37 トールケースはパッケージ面積が広がるので作り手としては楽 by へっぽこ
13:42:04 DNA はデモプログラムと製品が同じ ゆえに会場で空パッケージを売ってしまったことも
13:42:29 最近は PSP でデモ動画流すところ多い
13:42:52 デモプログラムは特製にして 音は抜いてバッテリー持たせることを考えたり
13:43:35 ここで打ち合わせにて出た話は出終わった
13:44:02 ここからは黒いハナシ…!?
13:44:36 ちゃんとゲーム作る話をもう一回した方がいいよ by DNA
13:45:44 1 作目を製作中の人挙手ー
13:45:59 一応挙げた
13:46:24 一作目は締め切り決めてとにかく作っちゃって出した方がいい
13:46:37 by 神主
13:47:20 一作目は早く作った方がいい そうすると「遣り残したこと」が出来て次回ににつながる by 紫雨
13:49:08 紫雨先生のゲーム製作デビューはワンダースワンのあれ
13:49:20 それから Windows に移ったそう
13:50:16 なんで作り始めたかは意外と皆どうでもいい?
13:51:21 並ぶの面倒だから作ったという動機は間違いではないよねー というかそもそもイベントは作り手が持ち寄るのが原点だから by 紫雨
13:51:49 神主は音楽が作りたいからゲームを作った
13:52:34 音楽のゲームへの影響力は実は非常に大きい フリーの素材使うとどうしてもそれがゲームの顔になっちゃう by 紫雨
13:52:59 ゲームでは音楽はきちんと考えた方がいいよー by 紫雨
13:53:33 BGM に合わせてステージ構成を行う by へっぽこ
13:55:38 音楽が入るとゲーム製作のテンションがあがるw
13:55:55 1 面の曲は飽きるwwww
13:56:24 音楽があると面白く感じちゃうのであえて最終面は切って調整する by へっぽこ
13:57:06 質疑応答に入る前に一人ずつ大きなミスを晒してもらいましょうw
13:58:18 連絡し忘れました・連絡したけどフォロー忘れました・連絡届きませんでしたという失敗は多かった by DNA
13:58:43 GDGD そのものも連絡が遅れたw
13:59:36 ミスの話は穏やかな話にならない… by なりた
14:00:06 大ポカは在庫の山 by へっぽこ
14:00:32 バルクプレスは値段が通常の 4 倍 いいんちょ STG はまだ採算取れてない
14:01:23 コミケ前 プレスの締め切りは伸ばすほどどんどんお金が倍倍に…
14:01:41 締め切りは金で買う
14:02:02 マスターアップした後は触っちゃダメ
14:02:08 バグが出ますw
14:02:55 バグなのに動いているのが一番怖い
14:03:30 3 年前に作った部分にバグがあってずっと潜んでたw 動けばおk by 紫雨
14:04:26 昔の開発データは自分で大抵消してる by 神主
14:04:39 昔のデータなんてあまり使わないしね
14:05:05 いつの間にか黒い話で
14:05:14 なくなってた
14:05:27 で 質疑応答に突入
14:05:43 問 : 憧れている・いたクリエイタは居ますか?
14:06:37 ナムコのゲームには憧れてた by DNA
14:07:18 トライエースの五反田さん 時代の一歩先を進めるプログラマで憧れてた by へっぽこ
14:08:16 横井グンペイさん ワンダーウィッチが無ければ今の自分はなかったし by 紫雨
14:08:55 問 : 公式ホームページはどれくらいの時間をかけて作っているのか
14:09:33 割と適当 テンション下がってきたときに作る テンション上がってくるし by 紫雨
14:11:13 頒布出来る目処がたったら公開 by DNA
14:11:43 酔った勢いで公開 あんまり深く考えてない by 神主
14:12:19 問いは「いつ作り始めるか?」だったっけ…?
14:12:38 公開すると後に退けなくなる それが重要
14:12:57 コミケのカット書くと下がれない 背水の陣 これ重要
14:13:20 問 : ハードコーディングかエンジン + スクリプトか
14:14:24 システムは全部プログラムで書いておいて乗っけるものはスクリプトで エンジンは自作 スクリプトだとバグは出ないハズだw by 神主
14:15:30 最近は面倒臭がり メインループすらスクリプトに押し付けたくなる どうしてもはみ出たことをしたければプログラム書くけど by DNA
14:16:44 完全スクリプト XML ベースのエンジンで タイトルからステージまでスクリプト by へっぽこ
14:18:03 スクリプトにはそんなに依存していない 大抵ハードコーディング ジャンルバラバラだし 今は 2 種類のスクリプトが動くというわけ分からない状況に by 紫雨
14:18:31 うちはシューティングしか作ってないので大丈夫 by 神主
14:19:19 アクションは例外的な処理が多いのでハードコーディングの方がむしろ効率良かったり by 紫雨
14:19:36 問 : ゲームを何歳くらいまで作りますか
14:20:07 同人というかそもそもゲームが不安定なので同人で食うなんて考えない方がいい by 紫雨
14:20:29 本業の IT のお仕事が好きなのでそちらで食っていければ by へっぽこ
14:21:01 問いには「同人を本業に?」というのも含まれてました
14:21:33 生活かかると変なゲーム作れなくなるし
14:21:56 居酒屋やりたい by 神主
14:22:21 同人で生活なんて全てほっぽりだしても無理では
14:22:34 地ビール作りたい by 神主
14:23:27 若い人に引き継ぎたいよね 若い人に情報を出したいというコンセプトが GDGD にはある 若い人どんどん作ってね
14:23:42 いい締めでしたね 締めるの意味が違う気がしますがwwww
14:24:10 トークは以上で終了です
14:24:46 IDGA の宣伝が
14:27:50 一応終了 こっちも中断します

個人的に紫雨先生の話が一番聞きたかったのでどうもそこを重点的に実況してしまった感が.他の方のお話がもっと聞きたかったという人は,誰か他の方の実況ログを探して下さい orz

で,この後懇親会がありそれにも参加してきました.色々な同人ゲー開発者とお話出来て楽しかったです.やっぱりお互いに現状を話すといい刺激になりますね.

自分としても夏のコミトレ 14 あわせで,ひだまりからき☆すたの何かネタになるキャラゲーを Squirrel 使って作ろうと思います.去年 1 年間結果として何もしなかったので,今年は流石にやるっスよw

懇親会終了後は個人的に行われる三次会の流れもあったのですが,帰って実況ログをまとめたかったりレポートを書きたかったり明日 (COMIC1) のための準備をしたかったこともあったため離脱しました (^^;

そんなわけで GDGD レポートでした.

同人ゲーム製作を志す学生がもっと増えてくれればいいなぁ.

[追記 2009-04-25T20:33]

一応 Tween によって保存した生のログを web に置いておきます.私に対する Reply まで含めて見たければ,DL して追いかけてもらえれば良いかと (-- http://kaosf.kirara.st/txt/TweenPosts090425-181215.tsv (628kB というテキストファイルにしては大きいサイズなので少し注意)

[追記 2009-04-26T13:27]

他の方のレポートが上がってました.見つけたらここに随時追加していきます.

第1回GDGDレポ (サークルMunc)

2009-04-29T03:50:17 (Wed)

Squirrel (エラーハンドラ,sqstdio,dofile)

とても私的メモ.眠いので今は解説する気になれません orz

エラーハンドラ

・sq_seterrorhandler(v)
スタックの一番上にあるクロージャをエラーハンドラとして登録.ランタイムエラー発生時に呼ばれる.エラー発生時,スタックの -1 番目にエラーに関する情報 (文字列) がある.

・sq_setcompileerrorhandler(/* 色々 */)
desc : コンパイルエラーの種類
source : エラーのあったソース名
line : 行
coulmn : 列
::MessageBox(NULL, "Message", "Title", MB_OK); が割と使える.

・sqstd_dofile
あらかじめ roottable をスタックに積んでおかなければならない.何故なら dofile の本質は compile -> call だけであるからである.先に roottable を積んでおいても sqstdio.cpp の 328 行目にある通り sq_push(v, -2) でクロージャの下にある roottable をコピーして来て一番上に積む仕組みになっている.

compile をするとクロージャがスタックの一番上に積まれる.よって戻り値なし,引数なしの関数を実行するなら
compile -> pushroottable -> call
という手順を踏む.sqstd_dofile であれば
pushroottable -> sqstd_dofile
という処理がそれと等価になるわけである.前者の方が処理は楽そう,かつ sqstdio.h に依存しなくてよくなるので,うちでは前者を積極的に使っていく.

戻る