テキストアドベンチャーで連続した行動を受け取ったら、どこまで実行して止まったかをどう伝えるか
一度の入力に含まれる複数の行動が途中で阻まれたら、何がすでに反映され、どの手順が失敗し、何がまだ始まっていないかを伝える必要があります。複合コマンドの実行報告を使い、接続表現のルール、行動の依存関係、再入力時に続きから進める際の条件と範囲を明確にします。

はじめに
連続した行動を受け取ったら、まず指示を分解し、あらかじめ定めたルールに従って一つずつ処理します。途中で行き詰まった場合は、「完了」「現在実行を阻まれている」「未着手」を明示し、すでに反映された結果は維持します。「扉が閉まっているため、続行できません」とだけ返し、ランプはもう手に取ったのか、カーテンには触れたのかをプレイヤーの推測に任せてはいけません。
この記事では、「ランプを手に取り、暗い部屋に入り、カーテンを開ける」という入力を、結果を照合できる実行報告に書き換えます。以下の場面、ルール、応答はすべて架空の教材として設計したものです。実際のユーザー体験、実測結果、筆者自身によるテストの記録ではなく、DramaForkの製品機能を示すものでもありません。
接続表現が実行順序をどう決めるか、先に定める
一つの文に動詞が三つあっても、三つの行動を同時に実行できるとは限りません。この例では、読点でつないだ連続行動は書かれた順に処理し、「それから」は前の手順が完了してから次を始めるという明示的な指定として扱います。どこかの手順が阻まれたら、その入力に含まれる後続の行動はすべて停止します。このルールは、こうした入力を受け付ける前に説明しておく必要があります。
したがって、「ランプを手に取り、それから暗い部屋に入り、それからカーテンを開ける」は、三つの手順からなる実行待ちの列になります。三つ目の行動が別の場面では単独で実行できるとしても、失敗した二つ目を飛ばして勝手に実行することはできません。プレイヤーが順序を指定しているからです。
「同時に」には別のルールが必要です。作者はまず、それぞれの行動を並行して実行できるか確認し、そのうえで入力全体を受け付けるかを決めます。この例の三つの行動は、同時処理には向いていません。人物はまだ扉の外にいて、室内のカーテンに直接手が届かないためです。同時実行を求められた場合は、「この組み合わせの行動は同時には実行できません。今回はまだどの行動も開始していません。順番に実行する形で入力し直してください」と返せます。「同時に」を黙って「それから」に置き換えてはいけません。
実際に並行実行を認める場面では、一つの行動の失敗がほかに影響するか、それぞれの結果がいつ反映されるかも別途説明する必要があります。この記事の報告が扱うのは順次実行だけであり、並行する行動を無理に一列に並べるものではありません。
行動の依存関係と停止ルールを分けて記録する
初期状態を設定します。オイルランプは扉の外のテーブルにあり、人物は何も持たずに、暗い部屋の閉まった扉の前に立っています。カーテンは室内にあります。ここで定めるのは、扉が閉まっているとそのままでは入れない、ということだけです。鍵がかかっているとは推測せず、プレイヤーの代わりに扉を開ける行動を追加することもしません。
まず、行動と完了条件を分けて整理します。
| 手順 | 行動 | 開始前の確認 | 完了後に照合できる状態 |
|---|---|---|---|
| 一 | オイルランプを手に取る | ランプに手が届き、持ち上げられる | ランプがテーブルの上から手に移る |
| 二 | 暗い部屋に入る | 手順一が完了し、入口を通れる | 人物が暗い部屋の中にいる |
| 三 | カーテンを開ける | 手順二が完了し、カーテンに手が届く | 垂れ下がっていたカーテンが開く |
ここには二種類の関係があります。「ランプを取ってから部屋に入る」は入力の順序によるもので、この例では入室にランプの所持を必須としていません。一方、「入室しなければカーテンに手が届かない」は、場面の空間的な条件によるものです。両者を分けることで、コマンドを書き換えた後にも残る制約がわかります。
停止ルールも、「依存条件を満たせなければ停止する」と書くだけでは不十分です。この例では、阻まれた行動が出た時点で、残りの列全体を停止します。「それから」でどこまで実行されるかを予測できるようにするためです。その代わり、後ろに単独で実行できる行動があっても、プレイヤーによる別の入力を待つことになります。失敗した行動を飛ばして続行できる作品にするなら、そのルールを事前に示し、各行動の結果を個別に報告する必要があります。その場でルールを切り替えてはいけません。
報告を埋めてから、プレイヤーに伝わる文章にする
再利用できる報告項目は、元の入力|接続表現のルール|行動の分解|依存関係|停止箇所|反映済みの結果|残りの指示|続行条件です。先にこれらを埋めてから描写を書くと、文章の流れを優先するあまり、どこまで完了したかを書き落とすのを防げます。
この例をすべて埋めると、次のようになります。
- 元の入力:ランプを手に取り、暗い部屋に入り、カーテンを開ける。
- 接続表現のルール:順番に実行し、阻まれたら後続の行動を停止する。
- 行動の分解:一、ランプを取る。二、入室する。三、カーテンを開ける。
- 依存関係:二は一の後。三は二の後であり、さらに対象に手が届くよう室内に入る必要がある。
- 停止箇所:手順二。扉が閉まっているため、入室できなかった。
- 反映済みの結果:オイルランプは手に持っており、人物はまだ扉の外にいる。この例では、今回の失敗によるほかの状態変化はない。
- 残りの指示:暗い部屋に入る、カーテンを開ける。入室は試みたが未完了で、カーテンを開ける行動は未着手。
- 続行条件:まず入口を通れる状態にし、その後プレイヤーが残りの行動を入力する。このコマンドは、自動再開を待つ待機状態にはならない。
プレイヤー向けには、次の一段落にまとめられます。「あなたはテーブルからオイルランプを手に取りました。暗い部屋の扉は閉まっていて入れず、今もランプを持って扉の外に立っています。このコマンドは入室の手順で停止しました。カーテンを開ける行動はまだ始まっておらず、カーテンには触れていません。入口を通れるようになったら、『暗い部屋に入り、それからカーテンを開ける』と改めて入力してください。」
この応答は、すでに起きたことを述べ、次に障害を説明し、最後に残りの行動の範囲を示しています。途中で阻まれたからといってコマンド全体を無効にしたり、ついでにプレイヤーの代わりに扉を開けたりしていません。
三つの結果で完了範囲を確認する
原稿を確認する際は、同じ初期状態から三つのケースをそれぞれたどり、各ケースに必要な条件だけを変更します。前のケースの結果を、次のケースにひそかに持ち越してはいけません。
最初の手順で失敗する場合:オイルランプが固定されていて持ち上げられないと仮定します。報告は、「オイルランプを手に取ることはできませんでした。ランプはテーブルの上にあり、このコマンドは最初の手順で停止しました。暗い部屋に入る行動と、カーテンを開ける行動は、どちらもまだ始まっていません」とします。完了した手順は一つもないため、「あなたはランプを持って扉の前まで歩いた」とは書けません。
途中で失敗する場合:先ほどの、部屋の扉が閉まっている設定を使います。手順一は完了、手順二は阻まれ、手順三は未着手です。人物の位置、ランプの位置、カーテンの状態を確認すると、それぞれ扉の外、手の中、垂れ下がった状態でなければなりません。
すべて完了する場合:扉は開いていて通路を通ることができ、カーテンにも手が届いて開けられると仮定します。応答は、「あなたはオイルランプを手に取り、暗い部屋に入ってカーテンを開けました。三つの手順はすべて完了しています。ランプは手に持っており、あなたは室内にいて、カーテンは開いています。残りの指示はありません」と書けます。
これらは文章上のシミュレーションであり、成功率を検証したものではありません。また、「未完了」は「何の影響もなかった」と同じではない点にも注意が必要です。失敗した行動でアイテムを消費したり、位置が変わったりしたなら、その実際の結果も報告に加えます。この例ではそうした変化がないと明示していますが、すべての失敗行動に一般化はできません。
再入力されたら、現在の状態から続行方法を決める
最も曖昧さの少ない続行方法は、阻まれた行動と、それに続く行動だけを入力することです。途中で止まった後、プレイヤーはまず入口の問題を解決し、「暗い部屋に入り、それからカーテンを開ける」と入力します。ランプを取り直す必要はありません。停止時の報告に記した残りの指示を、そのままコピーして続行に使えます。
プレイヤーが元の三手順をそのまま再入力する場合に備え、作者は重複する行動の扱いを明確にする必要があります。この例なら、同じランプをまだ手に持っているときは、「ランプを手に取る」を「目標状態をすでに満たしているため、今回は繰り返し実行していない」と記録し、その後で入室条件を再確認するルールにできます。扉がまだ閉まっていれば、再び手順二で停止します。ランプをすでに置いていたなら、前回の完了記録をそのまま使うことはできません。
この扱いが適するのは、現在の状態から目的が満たされているか確認できる行動に限られます。「扉をノックする」「水を一口飲む」は、もう一度行えば新たな結果が生じる可能性があるため、同じ文言というだけで省略できません。プレイヤーが失敗した行動をやり直したいのか、同じ行動をもう一度行いたいのか判断できなければ、まず確認し、今回はまだ実行していないと伝えます。
原稿を提出する前に、すべての動詞を「完了」「実行を阻まれている」「未着手」のいずれかに分類し、最終状態と続行用の入力文が一致するか確認します。この報告が適用できるのは、行動と対象がどちらも明確な順次実行コマンドです。対象の曖昧さを解消するものではなく、失敗のたびに手がかりや物語上のご褒美を付けることを求めるものでもありません。






