設計思想
開発の経緯は?
オープンソースでスマートフォンで動くノベルのゲームエンジンを作ってくれる人がほかにいなかったことが開発のきっかけです。 スマートフォンアプリのプログラミングは非常に難しく、エンジニア人口も多くないという事情があります。 Webの方が簡単で儲かるからでしょうか。
コンピュータの性能は消費電力で比較できるのですが、PCのチップが100Wで動作する一方で、スマートフォンは数Wに留まります。 つまりスマートフォンでは、PCと比べてたった数%の性能を前提に、プログラムを作る必要があります。 PCと同じ感覚でゲームを作れば、そもそも動作しなかったり、動作してもバッテリーの減りが早いという壁にぶつかります。
OpenNovelにはそのあたりのノウハウやバランス感覚が詰め込まれています。 演出が派手なソフトではないので、どうしても一般受けはしづらいのですが、 スマートフォンのゲームを作りたい方には「これこれ」と言ってもらえるマニアックな代物に仕上がっています。
演出が少ないのでは?
前述の通り、消費電力の低いスマートフォンでゲームを動作させるには演出の割り切りが不可欠です。 そのためにレイヤー数に制限をかけています。 レイヤーをやりくりすれば基本的な演出(たとえば雨や雪など)は問題なくできますが、工夫が必要です。 もし演出にもの足りなさを感じているなら、レイヤーとアニメの使いこなしで解決できるかもしれません。
スクリプトが簡素すぎるのでは?
いいところに気がつきましたね! 他のゲームエンジンでは、何でもできるスクリプト言語、つまり「汎用プログラミング言語」を用いるのが一般的です。 これに対して、OpenNovelでは「ドメイン特化言語」というアプローチを用いているため、スクリプトが簡素に見えます。 汎用プログラミング言語では、例えば画面に文字を表示するとして、「どうやって表示を行うか」を記述します。 一方、ドメイン特化言語では、「どんな文字を表示するか」を記述します。 すると、前者では立派なプログラムができあがりますが、後者では一見するとただの文章ができあがります。 この違いが、スクリプトを簡素に見せています。 このような仕組みは、簡単な言葉だと「テンプレート」と呼ばれることがありますね。
では、OpenNovelではどうしてドメイン特化言語を採用しているのでしょうか。その理由は移植性です。 例えば、汎用プログラミング言語で画面表示の記述を行うことを考えます。 このとき、64枚のレイヤーを用いて演出を行ったとします。 このプログラムは性能の高いPCでは問題なく動作するでしょう。 一方、性能の低いスマートフォンではどうでしょうか。 実はメモリサイズや実行速度の違いで、PCと同じようには動作しない可能性が高いです。 このように、汎用プログラミング言語を用いて「どのように表示するか」ということにフォーカスしたプログラムを書くと、移植性が問題になります。
ドメイン特化言語では、「どのように」、つまり64枚のレイヤーを用いて、という部分を記述しません。 単に「どんな画面表示がほしいか」という情報だけを記述します。 その結果、PCでは64枚のレイヤーを使う一方で、スマートフォンでは16枚のレイヤーを使う、というような、エンジン側での実装の切り替えが可能になります。 これにより移植性を確保しているんですね。
別なアプローチのエンジンもあり、例えば吉里吉里では、汎用プログラミング言語TJSの上でドメイン特化言語KAGを実装するという2階層の構成を取っています。 ですが、吉里吉里で動くゲームの実際の運用としては、KAGの機能が足りないところはTJSで補い、それでも足りない機能はOSの上で動くDLLの呼び出しで補っています。 その結果、定番のDLLのような存在が生じていますが、OpenNovelではこのような定番の機能を完全にエンジン内に実装してしまっています。 ようするに、ゲームを実現するのにどんな機能が必要なのか、最初からわかっていれば、拡張性を用意しなくてもドメイン特化言語のみでの記述が可能である、というわけです。 逆の見方をすると、汎用プログラミング言語で記述しなければならないケースでは、エンジン開発者の「ドメイン分析」が足りていないということが言えます。
他のゲームエンジンとの比較
OpenNovelにはどんな特徴がありますか
OpenNovelはスマートフォンで動くゲームを作ることに特化しています。 2024年現在ですと、スマートフォンで動くゲームを作るにはUnityというゲームエンジンの使用が一般的ですが、OpenNovelのスマートフォン版ではUnityを使用していません。 つまりUnityのライセンス料が不要であり、小さなゲームスタジオにはうれしいと思います。 また、家庭用ゲーム機への移植は従来大きな費用がかかるものでしたが、これを移植作業不要でそのまま動作可能としていることから、インディーから商業へ移るコストを低く抑えられることも特徴です。 OpenNovelの家庭用ゲーム機版はUnityを使用しています。
他のエンジンとの比較表はありますか?
| エンジン | ライセンス | Windows対応 | Mac対応 | iOS対応 | Android対応 | Web対応 | Linux対応 | ゲーム機対応 |
|---|---|---|---|---|---|---|---|---|
| OpenNovel | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
| Unity 宴 | × | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
| 吉里吉里Z | ○ | ○ | × | × | △ | × | × | × |
| Artemis Engine | × | ○ | × | ○ | ○ | ○ | × | ○ |
| ティラノスクリプト | × | ○ | △ | △ | △ | ○ | △ | △ |
ライセンスの○はオープンソースライセンスで、×は非オープソースライセンスです。 また、対応状況の○は商用品質、△は一応動作するが商用品質と言いがたいもの、×は非対応です。 (ここを見ているということは、△の詳細もすでにおわかりかもしれませんね。)
マルチプラットフォームの対応状況では、OpenNovelとUnity 宴が同等の状況です。 Unity 宴はライセンス料がかかりますので、無償で利用できるエンジンの中では、OpenNovelが突出して多くのプラットフォームに対応しています。 なお、OpenNovelもUnityに対応していますが、それは家庭用ゲーム機版であり、それ以外でUnityが不要です。
他のエンジンからOpenNovelに移行したいです
すでに述べたように、汎用プログラミング言語とドメイン特化言語の違いがあるため、スクリプトを一対一で移植するような移行作業にはなりません。 OpenNovelの機能をサンプルゲームで把握していただき、設定ファイルを設計したり、画面に対応するGUIファイルを書き起こすことになります。
他のエンジンではできる○○という機能がないので実装してくれますか?
スマートフォンでも実装できる機能であるか吟味しますので、ご相談ください。
ゲーム制作関連
複数のキャラクタをまとめて表示できますか?
キャラクタ変更中にメッセージボックスを表示したままにするには?
project.txt ファイルの下記の箇所を書き換えて、=no を =yes に変更してください
msgbox.show.on.ch=yes
メッセージボックスの横にキャラクタの顔を表示したいです
@chコマンドを使って、キャラクタ画像としてfaceという位置に表示します- コマンドとしては
@ch face ファイル名.pngのような記述になります faceの位置に表示する画像は、フェードイン・フェードアウトの時間指定が無視され、必ず一瞬で表示されます
表情の差分を顔のパーツだけで実現したいです
- 読み込み時間、メモリ使用量、合成時間を考えると、スマートフォンには荷が重いと考え、この機能は現在のところ実装されていません
フォントが変更できません
- セーブデータにフォントファイル名が記録されることで、変更したフォントが反映されなかったり、指定していないはずのフォントファイルが開けないというエラーが出ます
- ツールを終了した状態で、セーブデータのフォルダ
savを削除し、ツールを再度起動することで解決します
タイトル画面の作り方がわかりません
メニュー画面 で解説しております。
主人公の名前を入力できますか?
- 名前変数を使って入力できます
- 名前変数は
%aから%zまでの26個が利用可能です
目パチ画像の作り方を教えてください
- 目パチ を参照ください
口パク画像の作り方を教えてください
- 口パク を参照ください
日付や好感度を表示したいです
- テキストレイヤと
@textをお使いください
画面全体にフィルターをかけたいです
- エフェクトレイヤーが使えます
- 一番廉価な水準のAndroid端末だと描画性能的にギリギリになるため、積極的にはおすすめしていません
- できるだけカラーフィルター適用済みの画像を作成していただけますようお願いします
- 色を変更した画像が増えることで素材サイズが気になる場合、WebP形式での圧縮である程度解決できます
マクロ機能はありますか?
CG鑑賞モードを作れますか?
@menuを使えば実現できます- ボタンの設定で、
type: gallery;を指定して、var: $1;のように変数を指定します - 変数の値が0であればボタンは表示されません
- 変数の値が0以外であればボタンが表示されます
分岐チャートを作れますか?
@menuを使えば実現できます
全画面スタイルのノベルゲームを作れますか?
- はい。また、ゲームの途中でメッセージボックスを変更すれば、ノベルスタイルとアドベンチャースタイルを切り替え可能です
ルビの中央寄せはできますか?
- 今のところできません。半角スペースを使って手動調整していただいております
多言語対応していますか?
- 対応しています。多言語化 をご覧ください
WMS言語(プラグインスクリプト)の使い方はどこに書いてありますか?
プラグインスクリプト をご覧ください。
音声ファイルのビットレートはどうすればいいですか?
- PC向けのゲーム
- BGM … ステレオ 128kbps
- SE … ステレオ 128kbps
- ボイス … モノラル 64kbps
- スマートフォン
- すべて モノラル 48kbps
- スピーカーが1つのことが多いのでモノラルです
- スマホ本体の小さなスピーカーであれば、高音がカットされてもプレイ感に影響が出にくいため、アプリサイズ削減を考えて低ビットレートにしています
- イヤホンでプレイされるようであれば、プレイ感に影響が出ないよう、PC向けと同じ設定をおすすめします
フラグ管理が大変です
- コンフィグファイルでフラグに名前をつけ、何のフラグなのかコメントを書き残してください
- 作品を長期にわたって保守して行く上で、よい設計資料になると考えています
- 1年後のあなたにも読めばすぐわかるようにコメントを書くのが望ましいと考えます
ゲーム配布
Windowsでの正式な動作環境を教えてください
- 公開先に申請する場合は、Windows XP以降対応、DirectX 9以降必須、Pentium 4以降必須と書けばよいです
- 細かく言えば、Windows 11/10ではDirectX 12を利用、Windows 8/7/VistaではDirectX 11を利用、Windows XPではDirectX 9を利用です
公開場所はどうすればいいですか?
- Windows / Webブラウザ
- 収益を上げる場合、WindowsゲームはSteamやDLsite、Webブラウザゲームはitch.ioでの公開が目標になることと思います
- 収益を上げない場合、まずは「ふりーむ!」様での公開を目標とされることをおすすめします
- iPhone / iPad / Vision Pro
- ストア以外のアプリ配布は今のところ許可されていません
- App Storeでの公開にはアプリの内容を元にAppleによる総合的な審査を受ける必要があります
- Android
- Google DriveなどにAPKファイルをアップロードすれば、Androidでダウンロードしてインストールできます
- DLsiteでは有償で販売できます
- Google Playストアで販売すればいろいろなユーザに興味を持ってもらえます
- 家庭用ゲーム機
- 各ゲーム機メーカーのWebサイトで開発者登録を行います
- 作品の申請を行います
- 申請にあたっては「ミドルウェア」や「ゲームエンジン」の欄に「Unity」と記述してください