『愛とはあなたを破壊する魔法』制作記録二

2023年2月18日

目次
  1. 進捗状況
  2. 制作ツールについて
  3. UIについて
  4. 後書き

進捗状況

サブキャラの立ち絵を描いたりUIを作ったりしています。
平行してプロットの見直しやシナリオ仕様定義もしてます。

シナリオ仕様定義とは何かざっくり説明すると、物語を記述するための所定書式を規定することです。

画像左側が、シナリオ仕様定義に従って記述したテキストファイルです。

シナリオを書く段階でスクリプトと同等の命令文などを使用すると、タイプ数が増えて作業時間が増加します。タイプ数が増えるとタイプミスも誘発され、あまりいいことがありません。

そのため、後でスクリプトに変換することを想定した書式で記述することで、シナリオ制作のコストを下げます。
画像右側がその変換後のスクリプトファイルです。

とな天の仕様をある程度流用しますが、とな天に無かった機能や制作ツールの違いなどで、再定義が必要な箇所もありました。
今作のシナリオ仕様定義については、仕様が定まってから改めて解説したいと思います。

制作ツールについて

今作はひとまず、Ren’pyで制作します。

Ren'Py
トップページ

一作目の人魚姫の呼び声はティラノビルダー、二作目のとな天はティラノスクリプトで制作しました。今回も新しい制作ツールに挑戦してみたかったので、前から触ってみたかったRen’pyで制作しています。

なぜひとまずなのかというと、ティラノスクリプト版制作も検討しているからです。Ren’py版が完成し、余裕があればティラノスクリプト版を作ってティラノフェス2023に参加したいと考えています。

ティラノフェス2022までの募集要項によれば、移植作品の参加は禁止されていないと考えています。実際今年、LiveMaker制ゲームの移植(リメイク)作品が参加されていたと記憶しています。

もちろん2023から募集要項が変更されれば従いますし、フェスに参加できなくてもティラノスクリプト版は作ってみたいですし、まずRen’py版を完成させないと話にならないんですけどね。

UIについて

テストプレイ動画を録画してみました。

現在メニュー周りで完成しているのはセーブ・ロード動作です。
地味なこだわりポイントは「セーブスロットに現在表示中のセリフが表示されるところ」です。

実はRen’pyには、現在のセリフを取得する方法がありません。
私の探し方が悪いだけであるのかもしれませんが、逆に言えば初心者がすぐに見つけられるような手法はありませんでした。

後日追記:_last_say_whatについて

_last_say_whatという変数で現在のセリフを取得できるという記事を見かけました。

私の環境で試したところ、想定通りの挙動になりませんでした。
Ren’py ver8.1.3で確認したところ、チュートリアルゲームでは「現在表示しているセリフの一つ前のセリフ」が取得され、愛とはあなたを破壊する魔法では「None」が取得されました。
見かけた記事では「現在表示しているセリフ」が取得されていると見受けられました。

もしかしたら環境によるのかもしれません。特に愛とはあなたを破壊する魔法は特殊な状況が多い(最新環境で作り始めたわけでは無い、通常のセリフ記法でセリフを記入していない)ため、それらが原因であることも考えられます。

なお_last_say_whatという変数は公式ドキュメントで見つけることが(私には)できませんでした。

なので、公式リファレンスのCDSページやRen’pyユーザーの解説ページを参考にして、「表示したセリフをセーブデータに保存する仕組み」「セーブデータからセリフを参照して画面に表示する仕組み」を作りました。

Ren'Py documentation
ユーザー定義ステートメント
akakyouryuu
Ren’Py改造メモ(14)

つまづいたのはグローバル変数を使用する部分です。
私はゲーム制作のために独学でプログラミングを学び始めたので、基礎知識が抜け落ちていたり身についていなかったりすることがあります。
それが原因で「Pythonの関数内でグローバル変数を使用したい場合は一度宣言してから使用する」という考え方が抜け落ちていました。これに気づかず、数十分くらい「セリフが保存されない……」と頭を抱えていました。

頭を抱えている間は苦しいのですが、解決して自分の作ったプログラムが動いているところを見るとやっぱり感動しますね。だからゲーム制作止められないなあって思います。

後書き

なるべく週一で進捗を投稿したいのですが、投稿できる進捗が足りない場合は二週に一投稿にしようと思っています。細かい進捗はくるっぷ等に上げることも検討しています。


navigation