5.7. コマンド

5.7.1. 構造に関する構成要素
5.7.1.1. 構造体 $C21860: コマンド
5.7.1.2. 構造体の属性へのアクセス
5.7.2. 振る舞いに関する構成要素

この節では戦闘モードにおける戦闘員および、移動モードにおける仲間キャラクターの何らかの実行単位を表現する概念、すなわちコマンドについて述べる。 本章では、コマンドとは、仲間キャラクターに対しては、戦闘モードならば「こうげき」「じゅもん」「ぼうぎょ」「どうぐ/つかう」を、 移動モードならば「じゅもん」「どうぐ/つかう」に共通する概念をカプセル化したオブジェクト型であると定義している。

5.7.1. 構造に関する構成要素

5.7.1.1. 構造体 $C21860: コマンド

冒頭で述べたコマンドをカプセル化したオブジェクト型とは、次の表が示すようなものだ。 この型のオブジェクトがアドレス $C21860 で配列をなしていて、 プログラムのコマンドを必要とする処理は、この中から必要に応じて対応オブジェクトの所望の属性を参照するという設計になっている。

表 5.18 構造体 $C21860

オフセット 属性
#$00 #$FFFF 名前
#$02 #$00FF 対象決定判断 0
#$03 #$00FF 対象決定判断 1
#$04 #$00FF 対象決定判断 2
#$05 #$00FF 効果音
#$06 #$FFFF 処理アドレス(戦闘)
#$08 #$00FF
#$09 #$FFFF メッセージ
#$0B #$00FF 記述
#$0C #$FFFF 演出処理アドレス 0
#$0E #$FFFF 演出処理アドレス 1
#$10 #$FFFF 演出処理アドレス 2
#$12 #$00FF ダメージ
#$13 #$00FF 打撃ダメージ算出
#$14 #$00FF 処理アドレス(移動)
#$15 #$0003 対象範囲
#$15 #$00FC MP
#$16 #$0007 対象陣営
#$16 #$00F8 系統分類
#$17 #$000F (調査中)
#$17 #$00F0 成功率係数 0
#$18 #$000F 成功率係数 1
#$18 #$0030 戦闘終了時述語
#$18 #$0040 マホトーン状態を考慮
#$18 #$0080 マホカンタ状態を考慮
#$19 #$0001 フバーハ状態を考慮
#$19 #$0002 マヌーサ状態を考慮
#$19 #$0004 覚醒考慮
#$19 #$0008 ダメージ転嫁装備考慮
#$19 #$0010 みかわし考慮
#$19 #$0020 バイキルト考慮
#$19 #$0040 会心の一撃考慮
#$19 #$0080 集中攻撃考慮
#$1A #$0001 空振り時対象再抽選考慮
#$1A #$0002 コマンド選択判断考慮
#$1A #$0004 アストロン考慮
#$1A #$0008 攻撃ミス装備考慮
#$1A #$0010 キラー装備考慮
#$1A #$0020 どくばりダメージ固定化
#$1A #$0040 即死装備考慮
#$1A #$0080 はやぶさのけん考慮
#$1B #$0001 経験値取得
#$1B #$0002 メッセージ抑制
#$1B #$0004 演出タイミング
#$1B #$0008 演出を敵陣全体に作用させる
#$1B #$0010 うんのよさ考慮
#$1B #$0020 コマンド対象確定考慮(自陣側)
#$1B #$00C0 対象生存条件
#$1C #$0001 コマンド対象確定考慮(敵陣側)
#$1C #$0002 格闘場使用許可
#$1C #$0004 ゴールド取得
#$1C #$0008 倒した標的を記憶する
#$1C #$0010 混乱時通常攻撃化
#$1C #$00E0 (未使用)

各属性の意味を以下に記す:

名前

このコマンドの名前を意味する文字列(5.3 文字列)の ID を値とする属性だ。 名前はコマンド入力ウィンドウやメッセージ出力ウィンドウ上のテキスト内に表示される。

対象決定判断 k (k = 0..2)

対象決定判断とは、戦闘員がこのコマンドを自分のレパートリーの中から選択するかどうかを決定するサブルーチンを要素とするジャンプテーブルの行番号を値とする属性だ。 ここで k の値は戦闘員のコマンド選択判断属性から決まるものなのだが、 単純化して説明すると k の値が高いほど選択判断の質が高くなる。 詳しくは 5.6 モンスター で述べる。

例えばラリホーのコマンドは決定判断ロジックは 3 通りある。 最も愚直なものは、相手陣の生存キャラクターの有無しか確認しない。 中間のものは、それに加えてラリホー状態の者の有無を考慮に入れる。 最も高級な判断は、さらに自身のマホトーン状態まで考慮に入れて、実行可否を決定する。

効果音

コマンド実行時に再生する効果音の ID を値を取る属性だ。 配列 $C23CA2 の添字になる。

データを見ればわかるように、属性値として取りうる値は 0..3 しかない。 無効値、攻撃時の効果音、呪文効果音、逃走時の効果音をそれぞれ意味する。 なお、配列要素は自陣側と敵陣側とで値が異なる。

処理アドレス(戦闘)

戦闘モードにおけるこのコマンドの挙動を表現するコードの完全アドレスを意味する属性だ。 ただし、各コマンド処理に共通する部分は戦闘処理パイプラインの一部で実現されているので、 単純な呪文コマンドなどについてはこのアドレスを見るだけでは詳細はわからないことが普通だ。

メッセージ

このコマンドが戦闘モードで実行されるとメッセージ出力ウィンドウに最初に表示されるメッセージ(5.2.1 戦闘モード)の ID を表す属性だ。 例えば呪文コマンド全般は[BC][B7]は [B2]を となえた![B1]を指定する #$0051 を属性値とする。

記述

このコマンドが呪文コマンドであるとき、選択ウィンドウに隣接するミニウィンドウに表示される記述データの ID を値とする属性だ。 アドレス $C2398E にメッセージ ID 三つの組からなる配列があり、この属性値とはその配列添字だ。

記述オブジェクトについては 5.8 コマンドに関する記述 で述べる。

演出処理アドレス k (k = 0..2)

バンクが $C4 のアドレス型属性で、コマンド実行時の視聴覚的演出処理コードを表す。

添字 k = 0 のものは、実行時直後の効果を表す。
添字 k = 1 のものは、理由は不明だが値 #$8D71 でなければならない。
添字 k = 2 のものは、このコマンドで敵陣戦闘員が無力化されたときの効果を表す。
ダメージ

このコマンドに関連するダメージオブジェクト(5.9 ダメージ)を特定する値を取る属性だ。 ダメージオブジェクトとは、このコマンド実行によるダメージ量(または回復量)の計算の基本情報と考えてよい。

打撃ダメージ算出

このコマンドによって相手にダメージを与えようとしたが、実行直前に対象戦闘員が既に無力化してしまったとする。 そのとき、自動的に別の生きている戦闘員に攻撃を振り返る処理が実施されると仮定する。 この属性は、このときの新しい打撃ダメージを計算する手法を指示する値を表す。 コードの観点からは、ジャンプテーブル $C2BE5E の行番号だ。

表 5.19 打撃ダメージ算出

ID 計算方法
0 無条件に 0 とする。
1 (攻撃力 - 守備力 / 2) が 2 未満ならばそのまま、あるいはこの値の 1/2 とする。

処理アドレス(移動)

移動モードにおけるこのコマンドの挙動を表現するコードのアドレスを意味する属性だ。 値は配列 $C30B31 の添字を意味する。

対象範囲

このコマンドの標的が次のいずれに分類されるのかを意味する値を取る属性だ。

表 5.20 対象範囲分類

対象範囲
0 なし
1 単体
2 グループ
3 全体

MP

このコマンドを実行するキャラクターが必要とする MP の量を意味する数値型の属性だ。 実行する際にこの数だけの MP がなければならないし、実行するとこの数だけ戦闘員の MP が減少する。

対象陣営

このコマンドの対象をどの陣営から選択され得るかを示す数を値として取る属性だ。 厳密に言えば、対象者ウィンドウの(最初の)表示を決めるのに用いる値だ。

表 5.21 対象陣営分類

対象陣営
0 なし
1 コマンド実行者自身
2 コマンド実行者所属グループ
3 コマンド実行者の反対側の陣営
4 その場にいる全員

この値と対象範囲属性を組み合わせることで、コマンドの用途が大づかみでわかる。

系統分類

系統分類とは、このコマンドの系統的性質を表現する数を値に取る属性だ。 モンスター(5.6 モンスター)の耐性属性や装備品の規定する耐性と関係がある。 値と系統には次のような対応関係があるようだ。

表 5.22 系統分類

系統
#$00 それ以外
#$01 メラ・ギラ・イオ
#$02 ヒャド
#$03 バギ
#$04 デイン
#$05 ザキ
#$06 メガンテ
#$07 ニフラム
#$08 マホトラ
#$09 ボミオス・バシルーラ
#$0A ラリホー
#$0B マホトーン
#$0C マヌーサ
#$0D ルカニ
#$0E メダパニ
#$0F
#$10 吹雪
#$11 ザラキ
#$12 ザオラル
#$13 ドラゴラム
#$14 せいすい
#$15 眠り攻撃
#$16 毒攻撃
#$17 マヒ攻撃

(調査中)

何に参照されているかが不明。

成功率係数 k (k = 0..1)

コマンドの成功する確率を制御する値を表す属性だ。 最も単純な場合には、いずれも単純に属性値 / 8 がそのまま成功確率を表すと考えてよろしい。 実際にはコマンド対象者の装備品が確率決定のパラメーターに含まれ、抽選計算は複雑になる。

添字 k = 0 のものは、戦闘モードで自陣戦闘員同士の実行ではないもの、および、 移動モードにおける実行において参照される。 この場合、さらにコマンドのうんのよさ考慮属性値(後述する)が 1 ならば、 対象者のうんのよさ属性値も確率決定のためのパラメーターになる。

添字 k = 1 のものは、戦闘モードで自陣戦闘員同士の実行において参照される。 データを見ると、ニフラム、バシルーラ、せいすいが絶対に効かないことがわかる。 ザオラルと「ふっかつのつえ」が 1/2 で成功し、 他のほとんど全てのコマンドは確実に成功するようだ。

戦闘終了時述語

このコマンドで敵陣戦闘員を無力化すると、その戦闘終了時のメッセージが何になるのかを表す属性だ。 一般には戦闘時には相異なる複数のコマンドを実行するが、それらの最も大きい属性値が採用される。

属性値と戦闘終了メッセージとの対応は次のとおりだ。

表 5.23 戦闘終了時述語

ID メッセージ
0 [BC]モンスターは いなかった![C2][AC]
1 [BC][B7]は にげだした![AC]
2 [BC][B7]は さっていった。[AC]
3 [BC][B7]を やっつけた![AC]

マホトーン状態を考慮

ブーリアン型属性値で、この値が 1 ならばマホトーン状態の戦闘員がこのコマンドを実行すると、 しかし じゅもんは ふうじこめられている!のようなメッセージが表示されて、 実行は失敗することを意味する。

マホカンタ状態を考慮

ブーリアン型属性値で、この値が 1 ならばマホカンタ状態の戦闘員に対してこのコマンドを実行すると、 光の壁が実行者にそれを跳ね返すことを意味する。

プログラム側で「メガンテ」を特別扱いしている。実行時の度にランダムで 0 または 1 として処理する。

フバーハ状態を考慮

ブーリアン型属性値で、この値が 1 ならばフバーハ状態の戦闘員に対してこのコマンドを実行すると、 基本ダメージ量を規定の 2/3 に減少させることを意味する。

マヌーサ状態を考慮

ブーリアン型属性値で、この値が 1 ならばマヌーサ状態の戦闘員がこのコマンドを実行すると、 半分の確率で攻撃を失敗することを意味する。

覚醒考慮

ブーリアン型属性値で、この値が 1 であるコマンドを自陣側戦闘員がラリホー状態またはメダパニ状態の自陣側戦闘に対して実行すると、 それらの状態異常を回復させることがあることを意味する。

ちなみに回復する確率はどちらも 7/8 となっている。

ダメージ転嫁装備考慮

ブーリアン型属性値で、この値が 1 であるコマンドをある種のアイテムを装備している自陣側戦闘員が実行すると、 その装備品から定まる特殊なダメージ処理が発生することを意味する。

該当する装備品は「もろはのつるぎ」「やいばのよろい」「なげきのたて」となっている。

みかわし考慮

ブーリアン型属性値で、この値が 1 であるコマンドは標的戦闘員によってかわされる可能性があることを意味する。

基本的には自陣側戦闘員は 1/64 の確率で身をかわす。 敵陣の場合は 5.6.1 構造体 $C20000: モンスター のみかわし属性の項目で説明する。

バイキルト考慮

ブーリアン型属性値で、この値が 1 であるコマンドはダメージ計算処理中に基本ダメージ値を倍になることを意味する。

会心の一撃考慮

ブーリアン型属性値で、この値が 1 であるコマンドは会心または痛恨の一撃に変化する可能性があることを意味する。

集中攻撃考慮

ブーリアン型属性値で、集中攻撃タイプの敵側戦闘員がこのコマンドを利用することが可能であるかどうかを意味する。

空振り時対象再抽選考慮

ブーリアン型属性値で、このコマンドの標的が実行直前までに無力化されていた場合に、 改めて別の標的を決定するかどうかを意味する。

コマンド選択判断考慮

ブーリアン型属性値で、この値が 1 であるコマンドを敵陣戦闘員が実行しようとするときに、 (その戦闘員の選択判断属性値が 0 でなければ)コマンドの対象を確定しようとする傾向を意味する。

アストロン考慮

ブーリアン型属性値で、アストロン状態の戦闘員はこの値が 1 であるコマンドを受け付けないことを意味する。

攻撃ミス装備考慮

ブーリアン型属性値で、この値が 1 であるコマンドをある種のアイテムを装備している戦闘員が実行すると、 攻撃を失敗する可能性があることを意味する。 ここで、ある種のアイテムとは「はかいのつるぎ」「じごくのよろい」「まじんのオノ」を指す。

キラー装備考慮

ブーリアン型属性値で、この値が 1 であるコマンドをある種のアイテムを装備している戦闘員が、 ある種の属性値がある戦闘員に実行すると、与えるダメージがランダムに増量することを意味する。 ここで、ある種のアイテムとは「ドラゴンキラー」「ゾンビキラー」を指す。

どくばりダメージ固定化

ブーリアン型属性値で、この値が 1 であるコマンドを「どくばり」を装備している戦闘員が実行すると、 会心の一撃が発生しないことを意味する。

即死装備考慮

ブーリアン型属性値で、この値が 1 であるコマンドを「どくばり」または「アサシンダガー」を装備している戦闘員が実行すると、 実行相手の急所を直撃して即死する可能性があることを意味する。

通常は 1/16 の確率で即死する。

はやぶさのけん考慮

ブーリアン型属性値で、この値が 1 であるコマンドを「はやぶさのけん」を装備している戦闘員が実行すると、 一回のコマンド実行で 2 度のダメージが発生することを意味する。

経験値取得

ブーリアン型属性値で、この値が 1 であるコマンドを実行することで敵陣戦闘員を無力化すると、 戦闘終了後にその戦闘員から経験値が得られることを意味する。

メッセージ抑制

ブーリアン型属性値で、この値が 1 であるコマンドを実行するとメッセージ属性値の定めるメッセージが適切なタイミングで表示されなくなることを意味する。 この属性値はすべてのオブジェクトで 0 が設定されているので、実質使用されていない。

演出タイミング

ブーリアン型属性値で、この値によって視聴覚的演出の発生タイミングが変化するものと思われる。 この属性値はすべてのオブジェクトで 0 が設定されているので、実質使用されていない。

演出を敵陣全体に作用させる

ブーリアン型属性値で、この値が 1 であるコマンドの視覚的演出が対象を無視して敵陣全体に発生することを意味する。

うんのよさ考慮

ブーリアン型属性値で、この値が 1 であるコマンドの効力は対象者のうんのよさ属性値が影響することを意味する。 ただし、戦闘中において自陣側から自陣側へのコマンド実行の際にはこの属性値は関係しない。

成功率係数属性についても併せて参照して欲しい。

コマンド対象確定考慮(自陣側), コマンド対象確定考慮(敵陣側)

ブーリアン型属性値で、あるコマンドを戦闘員が実行しようとしたが、 そのコマンドがコマンド選択判断考慮が不要であったり、空振りのときの対象の再選択が不要であったりする場合に、 確定考慮属性値が 1 ならば、それでもなおコマンド対象の確定をする。

データを見ると一グループ直接攻撃コマンドにのみ 1 が設定されている。

対象生存条件

このコマンドが成立する対象の条件を意味する属性だ。値と意味の対応は次のようになっている:

表 5.24

条件
0 生きている必要がある
1 死んでいる必要がある
2 生死を問わない

格闘場使用許可

ブーリアン型属性値で、この値が 1 であれば格闘場においても通常の戦闘と同様に戦闘員は実行することが許される。 この値が 0 のものは、普通の攻撃に置き換わるものとする。

ゴールド取得

ブーリアン型属性値で、この値が 1 であるコマンドを実行することで敵陣戦闘員を無力化すると、 戦闘終了後にその戦闘員からゴールドが得られることを意味する。

倒した標的を記憶する

ブーリアン型属性値で、この値が 1 であるコマンドを実行することで敵陣戦闘員を無力化すると、 最近倒したモンスターを保持するための変数 $7E23A9 に戦闘員のモンスター ID を更新することを意味する。 戦闘終了後に宝箱を落としたモンスターがいた場合には、この変数がそれを表している。

混乱時通常攻撃化

ブーリアン型属性値で、この値が 1 であるコマンドを戦闘員が実行すると普通の攻撃に置き換わることを意味する。

5.7.1.2. 構造体の属性へのアクセス

主に戦闘コードからコマンドオブジェクトの各属性を参照するために、次に列挙するサブルーチンが実装されている。 これを先に把握してからコードの逆アセンブルや解読作業に着手できれば理想的であった。

表 5.25 コマンド構造体の属性にアクセスするサブルーチン

サブルーチン 固定引数長 入力 機能
$C2CC03 2 x 2 バイト長の属性値を取得する
$C2CC0A 2 y 2 バイト長の属性値を取得する
$C2CC25 4 x ビットフィールド属性値を取得する
$C2CC2C 4 y ビットフィールド属性値を取得する
$C2CC47 4 x ビットフィールド属性値をテストする
$C2CC4E 4 y ビットフィールド属性値をテストする

各レジスターがコマンド ID を指示し、サブルーチン呼び出し命令直後の何バイトかが実引数のようなものだ。 1860 などはコマンドオブジェクトのバイトオフセット(この場合は 0 に相当する)などを意味し、 ビットフィールドアクセス呼び出しの場合にある続く 2 バイトは属性値が厳密に位置するビット列を抽出するためのマスクを意味する。

5.7.2. 振る舞いに関する構成要素

TBW