EigaLangという言語を作りました!
ただのノベルゲームならいざ知らず、RPGなどのゲームでは会話中にミニキャラを跳ねさせたり歩かせたりしたい時があると思います。そういった機能を作ろうとすると意外と面倒くさいです。
EigaLangはそういった動きのある会話シーンを作るのをサポートする独自の言語です! 名前はもちろん映画から取りました。最近日本語をそのままプロダクトの名前にするのにハマってます。
今回はGodotのプラグインという形で実装しました。
サンプル
詳しい手順はEXAMPLE.mdを見て欲しいのですが、簡単に言うと以下に示すような動きのある会話を作ることができます。
どんな言語か
例えばついさっきgifで示したような動きは以下のコードで書かれています。
@CharacterA
テスト1
@-
テスト2
[&call("rotation_rect", 5.5)]
[call("CharacterA.move_x", 900)]
テスト3
@CharacterB
テスト4
[&call("CharacterB.move_y", -300, "Moved!")]
[&call("CharacterA.move_x", -1000)]
テスト5
-> uid://xxxxxxxxx
特徴1. タイミングを記述する言語
例えば「この会話のこのタイミングでミニキャラを走らせたい……」みたいなニーズに答えるのがEigaLangです。実際にどんな動きをするのかはGDScriptなりで書き、EigaLangでいつ呼び出すかのタイミングを指定 します。
特徴2. 見やすい
EigaLang形式のファイルは一目見るだけで「ここのセリフは〇〇が喋って、このタイミングで〇〇をやるんだな」ということが一目瞭然です。文字なのに見てるだけで動きが脳内に再生されるんじゃないでしょうか!? あ、されない、そうですか……。
特徴3. 好きなエディターで作業出来る
EigaLang自体はただのテキストなので、好きなテキストエディターで作業することができます。VScode用のプラグインも作ったし。
似たようなプラグイン、例えばDialogic等は手軽ではありますが、ほとんどGodot上でしか作業できないうえ、GUIでの操作が主体のため複雑になってくると画面が煩雑になるというデメリットがあります。
特徴4. AIとの親和性
実際の動きを書く(GDScript)、タイミングを書く(EigaLang)、いずれもテキストのみで完結するので、AIが頑張ってくれます。ただ、当たり前ですがEigaLangに関する知見はないと思うので、一回GitHubのドキュメントなりを読み込ませるといいと思います。
短所: 手軽さはない
先ほども述べたようにDialogicなどと比べると手軽さはなく、自分でやらなければならないことは多いです。しかし、面白い会話シーンを作ることは出来ると思います。
おわりに
作ったばかりで僕も実際には活用してはいないんですが、ちょうど今作ってるゲームに活用できればと思っています。
それはそうと自作言語作るのは楽しいですね。内部でやってることは地味過ぎるけど。
−−−−−−−以下余談です。−−−−−−−−−
なぜGodotのプラグインにしたのか
Godotのプラグインとした理由は
- 汎用ゲームエンジンの方がカスタマイズ性がある
- 僕はUnityが使えない
- 僕はUEが使えない
です。あまりにも消極的な理由ですね。
一応言っておきますと、GDScriptはそんなに悪くない言語だと思います。ガワがPythonに似ているからといってアレの悪い所までは似てません。例えばforは遅くないですし静的型付けを強制できますし、メソッドの第一引数にselfをひたすら書くようなこともしません。Pythonアレルギーの方も安心して欲しい。
みんなも自作言語作ろう
(実用性はともあれ)自作言語作るのは楽しいのでみんなも作りましょう。
実際動いてると興奮しますよ。
