新計算手順の続き

新計算手順(詳細イベント命令)は、全体として最初に提供できるものは地味ですが、可視領域が広がってさまざまな場所に応用できるので、将来的には面白い仕組みだと思っています。

例えば、迷路一歩ごとにパーティの状態を判定してイベントを起こしたり、コマンドを撃つごとに、成功率に応じて自分の成長値を変化させるといった使い方を想定しています。

他の計算手順の呼び出し

計算手順から他の計算手順を呼び出す機能を作りました。

  1. パーティからファイター全員を抽出
  2. 抽出した人をニンジャに転向

まだ文字列処理ができないので、転向した人の名前を表示できないという問題があるのですが、複雑な条件でキャラクタを選んで、別個の処理ができると気持ちが良いですね。

キャラクタ・アイテムの抽出

シナリオ作者は、計算手順の中では仮想的に、一時パーティ(キャラクタ配列)を作って管理します。

  1. パーティ本体 → 【レベル5未満】 → ★一時パーティαを作る
  2. 一時パーティα → 【戦士のみ】 → ★一時パーティβを作る
  3. 【HP回復処理】を呼び出すとき★一時パーティβを渡す

二つの抽出命令を経て、【β】に二つの条件をクリアしたキャラクタを確保し、最後に別の計算手順に【β】を引き渡す。

このようにして、最後に残った「一時パーティβ」だけHPを回復させるといったように、複雑な条件を考慮しながら加工や表示の処理をします。

Desigeonのゲームにはキャラクタが何百人いるか分からないので、能力値や所属の条件によって切り取ったり、合わせたりといった加工の仕組みが必要なんですね。

アイテムについてはまだ作っていませんが、同様の方針で管理命令を作ります。

トリガイベントについて

トリガイベントの窓口をたくさん作るつもりです。例えば以下です。

  • ゲームを開始するときに呼び出すイベント
  • 迷路一歩ごとに呼び出すイベント
  • アイテムを選んだときに呼び出すイベント
  • コマンドを選んだときに呼び出すイベント
  • ドアを潜る前に呼び出すイベント
  • 宝箱を開けるときに呼び出すイベント
  • ○○画面を開いたときに呼び出すイベント
  • 街を出るときに呼び出すイベント
  • 街に戻るときに呼び出すイベント
  • フロアを変更したときに呼び出すイベント
  • 施設○○に入ったときに呼び出すイベント
  • 施設○○を出るときに呼び出すイベント
  • アイテムを購入するときに呼び出すイベント
  • 戦闘ターン前の処理
  • 戦闘ターン後の処理
  • 戦闘終了前の処理
  • 戦闘終了後の処理
  • 戦闘勝利後の報酬を計算する処理
  • レベルアップ時に呼び出すイベント

これらのイベントは、標準では何もしないか、デフォルトの処理が入っているだけです。

トリガイベントの結果により標準の動作を変更

トリガイベントを変更することで、プラスαのイベントを起こせるほか、既存の動作もある程度変更できるようになります。

例えば、「店を出るとき」に実行するイベントで、計算結果をゼロ以外で終えると「店を出られない」という判定になり、操作がキャンセルされるといった具合です。これを店ごとに定義できれば、店員とジャンケンをして勝てないと出られない店を作れるわけです。

店に入るイベントの計算結果に応じた動作
計算結果 動作
0 何も起きない
0以外 強制的に店を出る
店を出るイベントの計算結果に応じた動作
計算結果 動作
0 何も起きない
0以外 店を出ることをキャンセル
レベルアップ時等、既存処理の追加動作

レベルアップ時等、固定で動いている処理に、追加でイベントを走らせることで、その動作をシナリオ作者が弄れるはずです。まだメニュー定義の問題がありますが、キャラクタごとに成長ロジックを判定して動ければ、オリジナリティを出せるかもしれません。

この辺の利用価値は、私がどれだけたくさんのトリガイベントを用意できるかで決まってきます。

生成ロジックの補正

エネミーやアイテムには、現状まだ称号がありませんがそこは実装するとして、能力値とステートとアイテムレベルが存在します。名前もデータの一部です。エネミーパーティの構成や、宝箱の中身自体もランダム生成ですね。

ゲームがこれらの物件を生成した際、イベントを呼び出して生成物件を補正することができれば、物件の性能や名前を変更することができます。

これは理屈の上でできるというだけで、具体案が決まっているわけではありませんが、生成のロジックを柔軟に変更するにはプログラミング相当の機能に頼るほかないので、イベントシステムを流用することが案として浮上するわけです。

特殊能力値の置き換え

以前の記事で述べましたが、特殊能力値の大部分は新計算手順に置き換えようと思っています。

例えば、迷路の視界を表す能力値の指定方法を、そのまま計算手順の指定に置き換えれば、能力値を増やさずに済むかもしれません。

従来の特殊能力値は、通常の能力値枠に戻すことになります。

イベント内からゲーム中の多くの情報を管理

すべて同じインターフェースで、イベント内からはゲーム中の多くの情報を収集・加工できるようにします。

例えば、現状、計算手順からはパーティの能力値を得るのが精一杯ですが、登録済みの全キャラクタ・全アイテムから条件を付けて抽出し、何らかの処理を施すといったことです。

迷路の各ブロック(マス)についても処理対象にしたいです。編集時にマーキングしておき、ゲーム中のイベントでマーキングしたブロックを抽出して毒の沼地に変えるといった処理をできるようにしたいです。

フレームワークも書き替えたいが

理想を言えばトリガイベントだけでなく、迷路一歩のフレームワークと戦闘一ターンのフレームワークをカスタマイズできるといいんですが、それだけの命令を用意する余力がないので(数百命令は作らないと……)、難しそうです。

これができればトリガイベント云々はどうでも良くなるんですけどね。

前述したトリガイベント形式なら、既存のプログラムに計算手順呼び出しを挟むだけなので、作業量とリスクが小さいです。

文字列の処理

文字列については、まとめてイベント命令を整備しようと思っています。

また、グローバル文字列変数を追加したいです。

これらについて、一般的なプログラミング言語における基本動作はできるようにしたいです。文字列長取得・比較・連結・検索・置換・切り取り。

現状はキャラクタの名前も表示できませんが、これは文字列に関する命令がないためです。

編集の難

細かいことができるようになると利用者側の編集と学習が大変です。

これはある程度しょうがないので、妥協するつもりです。

既存の機能は大部分を維持するので、よく分からなければ詳細イベント命令は使わないことになります。