人生にゲームをプラスするメディア

ゲーム組み込みスクリプトは急速に進化中 −IGDA日本SIG-GT12レポート

1月17日、IGDA日本ゲームテクノロジーSIGによる組み込みスクリプト言語のセミナーが、コクーンタワー(専門学校HAL東京)にておこなわれました。

任天堂 その他
1月17日、IGDA日本ゲームテクノロジーSIGによる組み込みスクリプト言語のセミナーが、コクーンタワー(専門学校HAL東京)にておこなわれました。



組み込みスクリプト言語は、ゲームエンジン上で動作するインタプリタ的に使える言語処理系で、LuaやPython、LISPなど公開された言語から独自の文法を持つものまでさまざまな言語が実装されてゲームに組み込まれています。文法が多様なだけでなく、用途(シナリオ分岐や演出、AI、ゲームロジック等々)や利用者(プログラマ、スクリプター、プランナー等々)にあわせていろいろな機能・記述性も求められます。

今回は組み込みスクリプト言語セミナーの第1回ということで、公開されている言語処理系を中心に取り上げられました。

セミナーは、クロムシックスの浜中誠氏によるLua解説、CRIミドルウェアの松田白朗(Hak)氏によるCRI Script解説ののち、ゲーム開発で実際に組み込みスクリプト言語に携わる方々によるパネルディスカッションが設けられました。



クロムシックスの浜中氏は、Luaのゲームへの組み込みを解説した書籍「スクリプト言語による効率的ゲーム開発 C/C++へのLua組込み実践」を執筆されています。今回の講演では、Luaをゲームに組み込む際の手順や、Lua 5.1で改善されたガベージコレクション、コルーチンなどの特徴的な機能を紹介しました。

浜中氏は、ゲーム開発において組み込みスクリプト言語を採用する理由として、ゲームの調整段階での修正がより行いやすくなる点をあげています。CやC++ですべてを記述する場合、修正と確認を繰り返すと「コード修正、ビルド、ゲーム再起動、場面の再現、結果の確認」という流れとなってしまい時間がかかりすぎると指摘。組み込みスクリプト言語によってリビルドせずにゲームを実行したまま動作を変更できるようになり、ゲームの改善に集中できるようになるとそのメリットを強調しました。

ガベージコレクション(GC)は、Lua 5.0までマーク&スウィープ方式だったのが、Lua 5.1からインクリメンタルGCが導入されたことでフレーム落ちしにくくなったものの、GCの問題はプロジェクト後半に起きやすい(データやスクリプトが大量に作り込まれるため、GC対象となるオブジェクトが増える)ことから、やはり注意は必要だともしています。

その上で浜中氏は、「スクリプト言語は有効に使えば強力なツールだが、使いどころや言語・実装の選択によってはうまくいかないこともあるため、判断情報を共有して使いやすくしましょう」と呼びかけました。



CRI・ミドルウェアの松田氏は、現在開発中の組み込み用スクリプトエンジン「CRI Script」の開発における苦労や今後のプランについて講演をしました。

CRI ScriptはECMAScript(標準化されたJavascript)の処理系ですが、「今後5年でゲームコードのほとんどはスクリプト言語で記述されるだろう」との見通しのもと、高速・安定・生産性の高いスクリプトエンジンを今から用意しておくべきとの考えからCRI Scriptの開発に着手したとのことです。現在のプラットフォームはWindows、Xbox360、MacOSX、iPhone(移植中)。また、標準化されているさまざまな言語仕様からECMAScriptを選んだのは、プログラマ人口がもっとも多い言語であることと、C++やJavaに近い文法の手続き型言語であることが理由だと述べました。

CRI Scriptはゲーム機で使いやすくするためライセンスにも注意が払われており、BSDよりも緩い「改変、再配布自由」「商利用制限なし」「その他表示義務等なし」とのことです。

松田氏は、CRI Scriptで独自の文法ではなく標準を採用したことのメリットとして、言語仕様がある程度こなれていること、既存のテストスイーツやライブラリコードが使えることに加え、標準仕様であること自体意味があるとも述べています。一方、デメリットとしては仕様規模が大きい(日付処理のようにゲーム機では要らないようなところも実装しなければならない、また、組み込みに向いていない仕様もある)、標準を離れた独自の大規模拡張が難しいといった点をあげています。

CRI Scriptの実装まわりについても、コンパイラ、リンカ、VMの開発上の注意点をあげつつ解説がおこなわれました。コンパイラ部分については、GNUライセンスの特例によってBisonが採用できたのでプロジェクトの立ち上げが楽だったというエピソードや、VMの最適化によって普通に組んだ状態から3倍以上の高速化をおこなったことなどが紹介されました。メモリフットプリントについては現在コンパイラが411KB(うち、Bison生成コードが92KB)、VMが216KB(うち正規表現ライブラリが49KB)+ユーザー使用分となっていて、今後、不要なコンポーネントやライブラリを切り離せるようにする計画とのことです。

CRI Scriptは現在、criscript.comでベータ版が公開されています。

■パネルディスカッション

パネルディスカッションでは、講演した浜中氏と松田氏のほか、スクリプト言語「Xtal」開発者の石橋氏(バンダイナムコゲームス)、「小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル」開発者の神尾氏(スクウェア・エニックス)、ノベルゲームエンジン「NScripter」開発者の高橋氏、「サクラ大戦3」〜「サクラ大戦V」開発者の秋葉氏(セガ)、「ロマンシング サ・ガ」「クロノトリガー」および「ファイナルファンタジーVII」開発者の小久保氏(現在はHAL)とそうそうたるメンバーが登壇しました。



スクリプト言語「Xtal」は、石橋氏が開発したC++に組み込んでゲーム製作に用いるのに適したスクリプト言語です。オープンソースで、石橋氏が多忙で1年ほど停止していたものの、開発が再開されています。

「小さな王様と約束の国 ファイナルファンタジー・クリスタルクロニクル」は、組み込みスクリプト言語Squirrelを採用したWiiWare用タイトルで、神尾氏は昨年のCEDECでも講演をおこなっています。

ノベルゲームエンジンNScripterは、「月姫」「ひぐらしのなく頃に」などで採用されているゲームエンジンで、シナリオライターが演出まで作り込めるような平易な文法が特徴となっています。

サクラ大戦のスクリプトは、アドベンチャーパートだけでなく移動やSLGでも利用されていた。ADVパートでは、シナリオライター向けの平易な「マクロ形式」と、スクリプター向けの、プログラミング言語らしい「スクリプト形式」の2層構造となっていて、マクロ形式はコンバータでスクリプト形式に変換できるようになっています。

小久保氏のスクリプト言語は、アクターモデルを採用したもので、画面上のオブジェクト(PC、NPC、宝箱などなど)が一つ一つアクターとして管理され、メッセージを送りあって動作するようになっています。

パネルディスカッションは、司会からのお題にマルかバツかで答えるという形式で進行しました。ここではいくつかのQ&Aをご紹介しましょう。

■Q:「スクリプトをメインでさわるのは非プログラマか?」

松田氏:「×。欧米の話になるが、プランナーもプログラム教育を受けてる。狭い意味では皆がプログラムを書ける。プランナー向けとは限定してない」

石橋氏:「×。Xtalはプログラマ向けだが、プランナーに渡すときはDSL(Domain Specific Language/特定の用途のための言語)をつくるだろうなということで×にした」

神尾氏:「×。プログラマもメインで使うことを想定。簡易化してプランナに渡すことも想定」

浜中氏:「×。ゲームのコアロジックを実装するのに使うのも良いし、プランナーにいじってもらう場合には言語のここを使って、と言って渡すのもよい」

高橋氏:「○。NScripterを使うところはプログラマのいない会社も多いので、シナリオライターでも使えるようにしてある」

秋葉氏:「○。演出を作るツールだと思っている」

小久保氏:「○。あのとき言語を作る基準が『坂口さんが書けるか』だった。実際、坂口さんは三日で書けるようになった」


■Q:「スクリプト言語を採用するのは、熟練したスクリプト利用者に一段階上の生産性を発揮してもらうためですか?」

松田氏:「○。それ以外あり得ない。生産性をあげること。唯一最大のメリットだ」

石橋氏:「○。効率的な開発を目指してる。趣味でrubyを使ってるが、C++とrubyでは生産性がだいぶ違うと感じており、それと同じこと」

神尾氏「○。ただし、効率的に書けるというのも重要だが、熟練してからというより、誰でも触れてすぐ書けるようにしたい」

浜中氏「×。というのも、スクリプト利用者、というのが引っかかったから。プログラマに普通にスクリプトで組んで欲しいと思ってる。プランナーにというところが主眼だとすると違う」

高橋氏「×。NScripterは高度な処理はできない。シナリオライターが演出をつける言語だ」

秋葉氏「○。サクラ大戦は年1本のペースでリリースしていたため生産性は重要だった。さらに、凝ったことにも対応できるように作っていた」

小久保氏「○。ただし、並列性がある言語のため、熟練した人が書けば書くほどデッドロックの危険がでてきてしまい、生産性が上がったかどうかは疑問」


■Q:「スクリプトで一度書いてしまったものでも、あとで一部をネイティブ実装に置き換えることが前提ですか?」

石橋氏「○。まずは全部スクリプトで書いて、重いところだけネイティブにしてまともに動くようにしたことがある。このアプローチは使えると思う」

神尾氏「○。わたしも石橋さんに同意。スクリプトで書くメリットは、想定されているインターフェースに収まるならスクリプトだけで作る方が早く作れる。(プロトタイピングで)最初のトライまですぐに進める。一度そういうツールを手に入れると、上(素材やスクリプト)を差し替えると別のゲームが作れたりする。MODに近いものを想定してもらうとわかりやすいかも。道具を手に入れるという意味で一回使ってみては?」

浜中氏「○。スクリプトだと変更が簡単なので、まずはスクリプトで作る。プロトタイプから製品版への移行もスムーズにいけるのではないか」

小久保「×としたのは、当時(SFC〜初代PSの頃)は、最初からきちんと書かないとCPUが非力で動かせなかったから。企画向けに簡単な言語にするという要求と、プログラマがtweaking(細かい調整)をやる2層に分かれてもいいのかなとも思う」


■Q:「公開されているスクリプト言語実装を利用しますか?」

石橋:「○。5年前は社内で抵抗があったが、今はLuaを組み込んでいる製品がある。法務のOKももらってる」

神尾:「○。オープンソースだからということはなく、ものを見定めて評価という感じ。ただ、開発者が『使いたい』と積極的にプッシュしないとOKは出ない」

浜中:「○。ライセンス周りの状況を調べて採用した。私の判断で採用できる環境なので根回しは特に……(笑)」

秋葉:「×。とはいえ、オープンソースだから使わないわけではなく、セガにはオープンソース委員会というのもあり、そこで使える使えないの判断をしている。ただ、自分はDSなど低スペックマシンでの仕事なのでオープンソース実装などは使いにくい」


IGDA日本ゲームテクノロジーSIGでは、組み込みスクリプトをテーマに引き続きセミナーを開催する予定とのことです。
《伊藤雅俊》
【注目の記事】[PR]

編集部おすすめの記事

任天堂 アクセスランキング

  1. 【特集】『スーパーマリオ オデッセイ』小ネタ12選!知ればマリオの旅がもっと楽しくなる!?

    【特集】『スーパーマリオ オデッセイ』小ネタ12選!知ればマリオの旅がもっと楽しくなる!?

  2. 『星のカービィ スターアライズ』いくつ知ってる?小ネタ10選【ネタバレ注意】

    『星のカービィ スターアライズ』いくつ知ってる?小ネタ10選【ネタバレ注意】

  3. 『スプラトゥーン2』負けた時のストレスを軽減する8つの方法

    『スプラトゥーン2』負けた時のストレスを軽減する8つの方法

  4. 『ポケモン ソード・シールド』ポケモン図鑑完成を目指すときのコツ!400種類コンプを目指そう

  5. 『スマブラSP』勇者の「パルプンテ」は何が起こる!? 100回検証して効果をまとめてみた

  6. 『スマブラSP』照れ顔(?)から絶体絶命の姿まで!大乱闘で見られる様々な「ベレト/ベレス」を紹介―時には“伝説のマシン”も乗りこなす?

  7. 『あつまれ どうぶつの森』島の名前アイデア50選!命名に迷っている人は要チェック

  8. 『モンハンライズ』で手強いモンスターは?読者が選んだ投票結果ー苦しめられたハンターの生の声をお届け

  9. 『ポケモンレジェンズ アルセウス』激ムズな「マナフィ」捕獲、そのヒントは『ダイパリメイク』にあった!時代を超えた伏線がアツい

  10. スイッチでプレイできる育成ゲーム5選!長く育てる楽しみと達成感がやみつきになる名作から話題の新作まで

アクセスランキングをもっと見る