新時代のソーサリアンを提案する

30周年を越えたソーサリアンの夢と妄想を語り続ける

【シナリオ開発】ストーリー執筆に集中できる「シナリオ指向開発」

■Point■
ストーリーボードからシナリオの全体像を把握しながら、小説を書く要領でシナリオ開発に集中できる環境を!デバッグモードで全体シナリオ/マップの確認も容易に。

■Note■ メイクリアン
Nextチームでは、ソーサリアンのシナリオ開発環境を通称<メイクリアン>(Makerian)と呼んでいることから、本稿でもそのように呼ぶものとする(http://www.web-deli.com/sorcerian/next/product.aspx)。
メイクリアンを構成する主要なツールと、その関係は、以下の通り(マップ関連は「マップ編」を参照)。

http://www.web-deli.com/sorcerian/next/images_blog/makerian.png

<シーン>と<フラグ>でストーリー全体を設計する「ストーリーボード」

全体ストーリーから個々のシーン単位のシナリオ(会話データ)を紐づけていく「シナリオ指向開発」の基点。物語の全体像を概観するチャート図を作成するためのツール

http://www.web-deli.com/sorcerian/next/images2/mk1_board.png

ストーリーボードの基本構造

ストーリーボードは<シーン>と<フラグ>から構成される

シーン シナリオの特定時点での状態を表す。フラグが特定条件を満たすことで、シーンを遷移
フラグ シーンの遷移を制御する情報(true/falseのみ)

ツールボックスから<シーン>を配置し、シーン同士を<フラグ>で連結していくことで、シーンがどのように遷移していくかを組み立てる

要素 設定可能な情報
シーン 名前、あらすじ*1、関連するオブジェクト(主に人物)
フラグ 名前
シーンとオブジェクト
  • 個々のシーンにオブジェクト*2を登録することで、会話/動作スクリプトを追加できるように
  • シーンに紐づける時点で、オブジェクトをマップに配置していなくても構わない。
    • マップレスで、シナリオを軸とした開発が可能に!
  • オブジェクトの位置は明示的に破棄(非表示化)しない限り、後続のシーンに引き継がれる
フラグ
  • フラグは真偽値のみの管理。数値/文字列情報が必要な場合にはシナリオ変数(いわゆるグローバル変数)で管理
  • イベント単位でのみ利用するローカル変数は持たない
    • 例えば、「宝箱を何回調べた」「何回話しかけた」などの情報は、個々のオブジェクトで持つべき
  • 異なるオブジェクトで同一のフラグを立てることも可能(その場合は、いずれか片方を実施した場合にシーンは先に進む)

会話埋め込み型スクリプトでシナリオを見渡しやすく「シナリオエディター」

シーン/オブジェクト単位に、特定のトリガーで発生する会話/動作情報を編集するためのツール。

http://www.web-deli.com/sorcerian/next/images2/mk2_scenario.png

トリガー

トリガーとは、会話/動作スクリプトが実行されるキッカケとなる動作(以下例)。

接触した時(相対距離も指定可)
接触した時(回数指定も可)、開錠した時、扉をくぐる時
障害物 接触した時(回数指定も可)、壊した時
敵領域 接触した時(回数指定も可)、敵の体力を半減させた時、倒した時
会話/動作スクリプト
  • セリフデータを中心に、スクリプトによる命令を埋め込み
    • キャラの動作、フラグ立て、音楽変更などの動作を制御
    • セリフを中心としたのは、シナリオの可読性を高めるため
  • ストーリーボードと異なり、基本的に文字列ベースでの編集を前提に*3
  • 入力支援はインテリセンス機能(=利用可能な命令、登録済みのフラグや画像/音声ファイルをリスト表示)や、よく利用する機能はツールボックスから選択できるようにすることで、十分に賄えるはず
シナリオスクリプトの例

剣と魔法の都ペンタウァ」より)

### 「###」で始まる行はコメント

### ->>〜<<-で、そのシーンのあらすじを表す(あらすじ機能に反映されるテキスト)
  • >>
ソーサリアンは、古城の中で旧知の魔導士オーサーと出会う。 オーサーもまた、ヴァンパイアの出没を危惧し、その正体を探っているのだという。 <<- ### 「@sor」はソーサリアン(先頭)のキャラクター名で置換 @sor オーサー老師! ### 「@...」のないブロックはナレーション 『暗黒の魔導士』事件で、 共に魔導士ゲディスを屠った王宮魔導士だ。 以前よりも痩せさらばえ、老境の翳りも目立ってきているようだ。 @sor 老師ほどの魔導士が、なぜこのようなところに……? ### 「@chara」は現在の会話相手(ここでは「オーサー」で置換) ### 「@老人」で任意の名前を指定することも可能。 @chara ……このご時世、若い魔導士も減っていく一方でな。 老骨がこうして出張ってきているというわけじゃ。 まあ、この身でも役立つならば、それも良い。 ### speedは、台詞の表示スピード(-1で標準よりもやや遅いことを意味) @sor:speed=-1 ……… @chara それにしてもこの一件、どうにも妙だとは思わんか。 ### 「@sor」の後方には「~性格」「~性別」「~年齢帯」でキャラの状態 ### によって、セリフを区分け可能。「~xxxx~xxxx」で複数属性の指定も可 ### 複数条件に合致する場合には、記述順に優先。 ### 「~」はすべての条件に合致しなかった場合のデフォルトの台詞。 @sor ~乱暴者 妙、だって!? ~老人 妙、じゃと? ~女 妙、ですって? ~堅苦しい~男 妙、とは如何に? ~ 妙、とは? ### 「%R%〜%R%」で該当箇所を赤文字(その他、%B%:大きい、%S%:小さいなど) @chara ヴァンパイアは、 その生態からすれば、%R%人里近くに拠点を構えるはず%R%。 さもなくば<食料>を調達できぬからな。 にも拘らず、このような辺境でわざわざ騒ぎを起こしておる。 わざわざ冒険者を誘い出そうとでも言うかのようにな。 @sor ペンタウァも妖が入り込む余地が少なくなっていますし、 王都の力が及ぶ範囲には立地しにくかったのでは? @chara かもしれぬし、そうでないかもしれぬ。 ……だが、そのわりに城内に漂う瘴気が強力なのが、 気になってならん。 ### 「%%%〜%%%」は繰り返し調べた/話しかけた時に再表示される台詞 ### 「%%%〜%%%」がない場合には、再度話しかけても反応しない %%% いずれにせよ、儂ももう少し城内を調べてみるつもりじゃ。 主らも気を付けてゆくのだぞ。 %%% ### #〜で動作コードを埋め込み可能。 ### フラグを設定(オーサーとの出会い) #set_frag(1) ### 画面の切り替えでいなくなる。thisは現在の対象(ここではオーサー) #this->delay_hide

スペリングチェックからマニュアル自動生成までを支える「シナリオデータベース」

人物(NPC)/アイテム/モンスター/地名等々、シナリオ中の重要キーワードを管理するデータベース群

  • 本データベースをもとに、専用マニュアルが自動生成される
    • 特定の人物/キーワードなどの単位に、公開タイミングを設定可能(ダウンロード前、シナリオクリア前/後、非公開)
  • 会話/解説文にキーワードが含まれる場合、該当箇所にリンク
    • タップで、該当する人物/モンスター/地名に関する解説をポップ表示
  • スペルミスではリンクが張られないため、デバッグ時の表記ゆれ確認にも有効か
人物データベース
  • 人物の名前/説明/見た目/ステータス(パーティ加入キャラのみ)を管理
  • 人物同士の関係、人物の所属なども定義可能
    • その場合はマニュアルにも、人物関係図を生成
    • 人物の関係がカギとなる、または登場人物が多いシナリオで活用できるのでは!?
  • シナリオ上に登場しない人物も、見た目を持たない形で登録可能
  • 人物を軸にして、紐づいたシナリオ(会話データ)を縦一線に参照も可
地名データベース
  • 方眼紙マップ(マップ編を参照)から特定エリアに対して地名と説明を割り当て可能
    • ●○村、●○の洞窟、●○ダンジョン最奥部など
    • 地名が割り当てられた場合には、プレイ画面側でも現在地(地名)を表示
  • マップ上に現存しない地名も、マップに関連付けない形で登録可能
モンスターデータベース
  • モンスターの名前/見た目/説明などを管理
    • それ以外の情報は、一般ユーザーでは変更できない! [id:sorcerian:20160801]
  • 方眼紙マップから、モンスターごとに出没場所をカラーリング表示可
  • 同じく、「モンスターの強さ×出没数」で方眼紙マップに危険度合いをカラーリング表示
    • 大雑把なモンスター配置、安全地帯のバランス確認のために!
アイテム/そのほかの用語データベース
  • アイテムの名前/説明/付与された星魔法(装備品の場合)などを管理
  • シナリオ固有のキーワードについて、解説文を管理可能
  • ■要検討■その他に必要となるデータベース?
ライセンスマネージャー*4
  • モンスター/人物はじめ、オブジェクトに割り当てる自作のグラフィック/音楽を登録
    • シナリオ単位ではなく、アカウント単位でひとつのデータベース
  • データベース登録時に、ファイル本体に透かし情報(メタ情報?)としてライセンス情報を自動付与
  • 公開範囲の設定も可能
    1. すべてのシナリオ開発者
    2. グラフィック/音楽を利用したシナリオをクリアしたアカウントのみ
    3. 不可(自分のシナリオでのみ利用可能)
  • 公開設定はいつでも変更できるが、あくまでメイクリアン上での表示/非表示を制御するのみ(=他のシナに一旦組み込まれてしまったリソースを削除することはできない)

2.の場合、グラ/音楽に紐づいたライセンスアカウントと、シナリオ自体に紐づいたライセンスアカウントが等しい場合にだけ、そのシナリオをクリアすることで、リソースを利用可能になる*5

シナリオの全体バランスを確認する「デバッグ機能」

シナリオの全体像を概観しつつ、複数の視点でシナリオをチェックするための機能を提供。

自動ストーリー表示[PC]

ストーリーボードに従って、実プレイ画面で会話&イベントを再生

  • 全体ストーリーの確認用途で
  • その時どきのシナリオ変数は、デバッグウィンドウで確認可能
  • ストーリー進行に際して、マップ途上に移動不能箇所がある場合は警告*6
  • フラグに関係するものだけでの絞り込みも可
    • モブとの会話などはスキップ可
方眼紙マップによる情報表示[PC]

シーン単位に行き来可能な領域をハイライト表示

  • ストーリーボードで選択シーンを変更することで、ハイライト部分も変化
  • ダンジョン踏破型シナリオでのシカケの矛盾を確認する用途で
  • 特定のポイントからの距離をカラー別表示
    • 重要箇所への思わぬ近道の発生を防ぐ
デバッグモード[PSVita

クラウド上にデバッグモードで公開可

  • シナリオ検索では表示されず、シナリオコードでのみ検索が可
  • つまり、コードさえ知っていれば、仲間内でテストプレイ可ということ
  • デバッグモードでアップロードできるのは、最大5シナリオまで

デバッグモードでは、以下の特殊ルールも。

  • 最初からマップ全体はコンプリート状態で開始
  • 全体マップのタップで、現在、移動可能な位置に瞬時に移動可能
  • フラグリストから特定フラグのオンオフが可能
  • 実際にマップ移動するリアル再生モードも
    • その場合は、モンスターなどは一切なしで、サンプルパーティが自動で移動していく
    • 移動アクションは無視して、そのまま幽霊のように空中を移動するイメージ
  • (当然)実績等は記録されないし、アイテム/Goldも持ち帰れない
デバッグモード(イベントレスモード)[PSVita

イベントレスモードでは、任意の位置からプレイを開始可(イベントは発生しない)

  • 移動アクションの確認用途
  • モンスターの配置/難易度の確認用途
デバッグプレイ(デバッグパーティの準備)[PSVita

デバッグプレイ、バランスチェックなどで利用できるパーティを自由に設定可

  • 手持ちの種族であれば、種族/性別/ステータス等はすべて自由に設定可
  • シナリオレベル/制限に応じて、適切なデバッグパーティの自動編成も
  • もちろん、既に編成済みの実プレイパーティを利用しても構わない

*1:ゲームの進行状況に応じて、あらすじとして表示するテキスト

*2:人物、モノ、モンスター…マップ上でプレイヤーが触れるものはすべてオブジェクト!

*3:視覚的なフローチャート図を編集させるよりも、文字列編集の方がシナリオ作成に集中しやすいだろう

*4:非シナリオ開発者のために、ブラウザー上からアクセスできるしくみも設けるべきだろう。

*5:つまり、他人のリソースを組み込んだシナリオをクリアしても、そのリソースは利用可能にはならない

*6:ただし、移動アクションで通行不能な箇所の検出は困難か