#はじめに
この記事は個人開発Advent Calendar 2017 の20日目です。
#作ったもの
簡易ノベルゲームエンジン「LINKS」という、簡単なノベルゲームであれば直ぐにリリースできるエンジンを制作しました。
C言語とDXライブラリにて制作しました。
現在は、yumetodo さんからリファクタリングを受けつつ、C++ へと移行を進めています。
#開発に至った経緯
元々、このエンジンは私が代表を務めているゲームリンクスというサークル内で使用する目的で開発に着手しました。
ゲームリンクス内でプログラミングができる人間が私しかおらず、おまけにノベルゲームの肝ともいうべきシナリオを書ける人間が5人もいました(まあ、私も含めてですけどねー)
要するに、プログラミング担当に負担がかかりやすい環境になっていたということです。
おまけに、ティラノスクリプトや吉里吉里といったノベルゲームエンジンを使用することにも問題がありました。
サークルメンバーの所持しているPCのスペックがそこまで良いものではなかったため、それらのノベルゲームエンジンで制作したゲームのデバッグがそもそもできないことがあったんですよね……。
おまけにサークルメンバーはそれぞれ遠方にいることもあり、あまりに大きなゲームデータをやり取りするのは面倒臭かったことも理由の一つですね。
プログラミング担当の負担を軽減し、かつ低スペックなPCでも快適に動作できるノベルゲームエンジンを使う必要性があった。
これが、「LINKS」の開発に着手したきっかけですね。
#開発中のあれこれ
開発当時は、C言語の入門書(猫でもわかるC言語だったかな……?)を使ってプログラミングの勉強をはじめて三か月程度でした。つまり、プログラミング三か月で、ノベルゲームエンジンを制作するという無茶苦茶なことを考えたわけです。
そのため、開発当初は試行錯誤の連続でしたし、失敗続きで嫌になることばかりでしたねー。
でも、その時苦労したおかげで色々とわかるようになった事柄もありますので、結果オーライなのかもしれませんね。
「LINKS」開発にあたってはまず、最低限度必要と思われる機能を洗い出し、順次実装していくことを基本方針にしました。
最低限度必要と思われた機能としては以下のものがあがりました
・セーブ機能
・ロード機能
・選択肢機能
・スキップ機能
・オート機能
これらの中でも特に苦労したのがセーブ・ロード機能周辺の実装でした。
当時、C言語をちょっとかじった程度でしたのでセーブデータの構造体を書き込んだり、読み込んだりというのが中々うまくいきませんでした。
そのうえノベルゲームでのセーブデータのロードは、セーブしたその文章のところから再開できるようにしないといけません。
その時に表示されていたキャラクターの立ち絵や背景画像、再生されているBGMなどをセーブデータをロードした後に再現する必要もあり、当時の私はかなり手こずっていましたねー。
一番手間取ったのは、行の管理ですね。「LINKS」はテキストファイルに立ち絵などの各処理を行うタグを記述していく方式です。そのため、セーブデータ内に「どのスクリプトの何行目でセーブしたか」がロード時にわかるようにしなければなりません。
そこで、行を管理している変数とルート管理用の変数の値をセーブデータ内に取り込むように変更しました。まず、ルート管理変数にセーブ時点での値を読み込んでやり、さらに行数を読み込むことで各スクリプトの指定の行から再開できるようになりました。
こんな感じで、小さな機能を少しずつ実装していく方式で開発とリリースを進めていきました。
ver 1.00 をリリースしてからはどんどん機能を追加していき、最終的には今年の四月ごろには当初実装したいと考えていた機能もほぼ終了してましたね。
#リリース後の反響
2016年6月にリリースして、現在まででザックリ300ダウンロードくらい。
まあまあ、ダウンロードされつつ利用されている模様ですねー。
元々がサークル内で使用する目的のエンジンでしたから、そんなにダウンロードもされないだろうと考えていましたねー。
あと、嬉しかったのが同人ゲーム制作ツールとしてこちらの記事に取り上げられたことですかねー
あとは、OSSとしてリリースしてからはエンジン自体の簡素さから「教育用に使えないか?」というお話もいただけたりしていますねー。
#最後に
自分しか使わないだろうモノであっても、公開すると意外と需要があるという良い教訓を学べましたねー。
あとは開発中に、実際のノベルゲームの内部構造を挙動から推察して逆算する考え方とかコーディング関係のテクニックとかも身に付きましたし(OSSにするまでgitも知りませんでした……)
そういう意味ではOSS活動をするというのはエンジニアとしての成長に通じるいい機会なのかもしれませんねー。
まあ、今後もゆるーく開発を続けていこうかと思いますねー