一鉄工房のブログにおこしいただき、ありがとうございます。
管理人のOIGUMO(老雲)です。

さて、「謎解き」をテーマに茶飲み話を続けてまいりましたが、
随分長くなってしまいましたね。しかも内容が「淫魔戦記マリカ」に
偏っていますね。まあ、ゲームのボリュームを考えれば、仕方のないことですが。

というわけで、「魔法剣士アリサ」や「被虐闘姫シスカ」の謎解きに
ついても、少し振り返ってみたいと思います。
とりあえず、今日は「魔法剣士アリサ」です。
製品版のネタバレが含まれますのでご注意ください。

関心のある方は、以下の「続きを読む」をクリックされてください。
(続き)
続きを開いてくださり、ありがとうございます。

「魔法剣士アリサ」は、初めてのゲーム制作ということもあり、
初歩的なことを、手探りで確認しながらの作業となりました。
ゲームバランスの作り方もわからなかったので、謎解きができれば
1発でバトルに勝利できる、というシステムになりました。

171112d
「特定の状況下で、特定のスキルを
 使用すると、一撃で勝利」という
形になりましたが、今日は、その仕組みを
組み立てた際のお話です。



謎解きに必要な情報は、城の中にある「モンスター酒場」で集める、という
スタイルにしたわけですが・・・、「なんでここに酒場があるんだよ」と
自己ツッコミが入り、ストーリーとの整合性で悩んだ記憶があります。
観戦とかお師匠様との絡みとか、全部後付け設定でした(笑)。

あと、プレイヤーが必要な情報を全部集めた時、謎解きの解答が理解できたか、
言い換えれば自分の文章で、正しい意味を伝えることができたかどうか、
それも不安に感じた点でした。まあ、わかりにくいという苦情はなかったので、
きちんと表現できたのでしょう。多分。

あとは、それをゲーム上のデータで、どう表現するのかが課題でした。
ここから少し、技術的なお話になります。といっても、あまり難しい
お話ではなく、ごく初歩的な処理ですが。

ゲームを組み立てていく際には、スイッチ(フラグ)の処理、変数の処理、
そしてこれらを根拠に物語が分岐する「条件分岐」などをよく使います。
今では少し慣れてきましたが、当時はこの処理にすら四苦八苦。
ひとつ例を出してみますね。

「アリサ」では、モンスター酒場で特定の3つの情報を集めると、ラスボスとの
決戦で勝利が可能になるフラグが立ちます。まず、この処理に悩みました。
と言いますのも、必要な情報が1つであれば、その情報を聞いたというフラグを
根拠に条件分岐が可能です。ところが、複数の情報が全部そろう、つまりは
フラグが3つ全て立っていることを、コンピューターでどう判定させればよいのか。

171112c
制作画面の例です。特定の1つのスイッチ
(フラグ)のON・OFFでその後の展開を
分岐させることができますが、3つの
スイッチが全部ONになっているかどうか、
そんな判定はしてくれません。


今から思えば、処理の方法は複数ありますが、とりあえず「アリサ」では
こんな処理方法を思いつきました。

まず、3つの情報を聞いたかどうか、個別にスイッチ(フラグ)で管理します。
具体的には、
・1つめの情報を聞いた(フラグAをONにする)
・2つめの情報を聞いた(フラグBをONにする)
・3つめの情報を聞いた(フラグCをONにする)

そして、アリサが酒場を出ようとするときに必ず通る場所、言い換えれば
酒場の出口付近の特定の床を通過した時に、全ての情報が集まっているのか
どうかを判定する以下の処理を、強制的に発生させます。
(1)変数Aを「0(ゼロ)」にする
(2)条件分岐「フラグAがONの場合、変数Aに+1」(OFFの場合は何もしない)
(3)条件分岐「フラグBがONの場合、変数Aに+1」(OFFの場合は何もしない)
(4)条件分岐「フラグCがONの場合、変数Aに+1」(OFFの場合は何もしない)
(5)条件分岐「変数Aは3と同値か?」
    同値の場合・・・アリサが謎解きが終わったというセリフをしゃべる
            (フラグDをONにする)
    異なる場合・・・アリサが情報をもっと集めた方がいいとしゃべる

お気づきかと思いますが、(1)は変数の初期化です。この処理を忘れると、
例えばフラグAだけがONで、それ以外がOFFの状態の時、酒場に3回出入りするだけで
変数Aは3になり、謎解きが終わっていないのに、アリサが謎解きが終わった
ようなセリフをしゃべるイベントが発生してしまいます。ちなみに、「シスカ」で
発生した休憩室のバグの原因の1つはこいつでした(ご迷惑をおかけしました)。

あと、(2)~(4)の処理で、ONになっているフラグの数をカウントし、
全部ONであれば変数Aは3になっているので、(5)で物語を分岐します。
こんな処理で、「フラグA,B,Cの全てがONかどうか?」の判定を行うわけです。
聞くとごく簡単な処理ですが、こうした処理方法を考えるのも結構悩みます。
ちなみにこの処理、この後のゲーム作りでは定番の処理方法になりました。

171112a
例えば、「シスカ」のこの場面。
一体何をチェックしているの?と
思われた人もいるかもしれません。
実は、敵が発動する技の種類を
カウントしています。


フリーバトルでは、敵が発動する技のON・OFF設定ができましたよね。
この設定も、スイッチ(フラグ)で管理されています。このスイッチが
プレイヤー設定で全てOFFになっていると、バトル中、敵は行動しなくなるので、
ON設定の数をカウントし、その合計がゼロ(言い換えればすべてOFF設定)の場合、

171112b

こんな注意喚起文を
表示したわけです。




それからもうひとつ、処理で悩んだのはスキルでした。
「特定の状況下で、特定のスキルを使うと勝利できる」というルールは、
言い換えれば「それ以外の場面で、そのスキルを使っても効果がない」と
いうことです。つまり、スキルを使用した際の処理を分岐する必要があります。

ここでは、「スキルを入れ替える」という処理を行いました。
この処理の根拠は、(5)でフラグDが成立しているかどうかとなりますが、
ラスボスとのバトル中に「特定の状況」が発生した場合、このフラグDがONの
場合、これまで使用しても効果がなかった「スキルX(一応、名前は伏せます)」を
「忘れる(使用できるスキル一覧から削除される)」処理を行います。

それと同時に、スキルXと名前が同じで、ラスボスを斃す効果がある「スキルY」を
「覚える(一覧に追加する)」処理も行います。スキルXとYは、データ上、
効果は異なるスキルですが、名前や一覧で表示される並び順などは全く同じ
なので、一見して、プレイヤーからは違いがわからないようになっています。

こうして、その場面でスキルYが使用されるとバトル勝利→エンディングとなる
わけですが、遊び方によっては、その場面でスキルが使用されない可能性もあります。
その時は、そのターンで発生する例の会話イベントの中で、逆の処理、つまり
スキルYを忘れて、スキルXを覚えるという処理を同時に行うわけです。
これによって、バトルはヒロインの敗北確定ルートへと進んでいきます。

さて、今日も長くなりましたが、文系の管理人が、変数だの条件分岐だのと、
アレルギー反応が出そうな単語と格闘しました、というお話でした。
それでは、今日はここで失礼します。