人生

やっていきましょう

1133日目

先日触れた2つの問題【画像を本に描写する方法】そして【特定の変数を満たした場合にのみ画像を出力する方法】の2つの解決法を見出した。

まず【画像を本に描写する方法】だが、わざわざピクチャとして本の上に表示されるように設定する必要はなく、ただ単に文字として呼び出せば良いということが分かった。

例えばウディタのpictureファイル内にあるbook_img01.pngという画像を文章中に呼び出すためには \img[Picture/book_img01.png]という文字を文章内に書きこむだけで良い。それで文章内にbook_img01.pngが表示されるようになる。本システムは所定のユーザーデータベースに予め書き込まれた文字を呼び出す仕様なので、そこに\img[Picture/book_img01.png]と書き込むだけで本に画像が表示されるようになる。

厄介だったのは【特定の変数を満たした場合にのみ画像を出力する方法】だった。変数を満たさない場合には空白で、変数を満たした場合にのみ画像を出力しなければならない。だが自分はこれに似た問題を以前解決している。特定の変数を満たした場合にのみ増える選択肢を、自分は変数に従って【文字列】を操作することによって実装していた。これと同じことが今回もできるかもしれないと考えた。

しかし問題があった。ユーザーデータベース内の設定はあとから変更することができない。予め設定されたものを引き出すほかにないのだ。そのため直接ゲームの側からユーザーデータベースを変更するのではなく、ユーザーデータベース内の値を変更することなく、変数によってその値が変化するような仕組みを考えなければならなかった。

そこで自分は、特定の変数を満たした場合にのみ、特定の文字列に\img[Picture/book_img01.png]という文字を書き込む条件を設定するということを考えた。これにより画像は変数によって出力されるようになった。

しかし問題がある。これでは1つの画像に対して1つの文字列しか使うことができない。そのため膨大な数の文字列を使うことになり、管理が後々面倒なことになる。

そこで自分は文字列を文字列変数で管理するのではなく特定のデータベース内で一括して管理することで、呼び出す際は常にそのデータベースを参照するという方法を考えた。プレイする側にとっては原理は同じなのであまり大差はないが、管理する側としてはこのデータベースがあることによって文字列変数S[1]~S[100]までを頭から個別に入力していくよりは、本Aの画像a~c、本Bの画像d~f、本Cの画像g~iと使う本ごとに管理をすることでどの文字列がどこに使われているのかが分かりやすくなる。

データベースは3つある。ユーザーデータベース(UDB)と可変データベース(CDB)、そしてシステムデータベース(SDB)だ。どれを選ぶのが妥当だろうか。システムデータベースについてはシステム関連を管理するものなので除外する。選ぶとしたらUDBかCDBだ。

正直どちらでもいい。だが自分はCDBの方が後々便利なのではないかと考えた。例えばある変数が0の時には何もなく、ある変数が1のときに画像が出力できるという設定だったが、変数が2のときこの画像を更に変化させるといった設定を実装するためには、可変データベースを使ったほうがいい。なぜならユーザーデータベースの内容は変更できないからだ。もちろんその変化を個別の文字列で再現することもできなくはないだろうが、管理のしやすさでいったら可変データベースの方がやりやすいだろう。懸念があるとすれば可変データベース内の情報はゲーム中に変化できるという点だが、正直そこまでやる人はいないだろうと思う(やったところで壊れるだけである)。

CDBから文字列を文章に表示させるためには、文章中に\cdb[A:B:C] を入力するだけである。この特殊文字についてはこのように書かれている。

\cdb[A:B:C] (※A~Cは数値):
 可変DBの「タイプA番・データB番・項目C番」の内容に置き換えます。

予め可変データベース内の文字列に\img[Picture/book_img01.png]という文字を書き込んでおき、本システム(UDB)の方で\cdb[A:B:C] と書き込んでおく。これにより画像は可変データベースの値によって画像を出力できるようになった。

とりあえずこれでこの問題は解決した。あとはこのデータベースを構築していくだけだ。やりながらふと思ったが、新しい本システムをウディタのコモンイベント共有サイトから新たにダウンロードしたほうが良いと考えた。というのも既存の本イベントに使用した羊皮紙の画像の著作権元がよく分からなくなり、引用元がはっきりしている方の画像を使った方が良いと考えたからだ。

新しい本システムは画像の解像度が自分が使っている解像度とは別のものが使われており、はじめは使えないと諦めていた。しかし本システム内の画像の大きさや座標出力の値をすべて1/2にし、少しの微調整を行うだけでうまく実装することができた。これからはこの本システムを積極的に採用し、ゲーム内の本を手掛けていきたい。