この節では職業構造体を中心に説明する。 いつものように、オブジェクトを CSV 形式でダンプしたテキストファイルを 付録 B データ に収録した。
職業構造体とは、サイズが #$77
バイトであり、オブジェクトのメモリーレイアウトが次の表で示されるような構造体だ。
この型のオブジェクトがアドレス $C41C3E
から 21 個直列している。
表 4.38 構造体 $C41C3E
オフセット | 桁 | 属性 |
---|---|---|
#$00
|
#$FFFF
|
名前 |
#$02
|
#$FFFF
|
職業経験値構造体オフセット |
#$04
|
#$FFFF
|
職業経験値構造体マスク |
#$06
|
#$00FF
|
|
#$07
|
#$FFFF
|
職業経験値構造体シフトビット |
#$09
|
#$FFFF
|
経験値上限 |
#$0B
|
#$FFFF
|
経験値 0 |
#$0D
|
#$FFFF
|
経験値 1 |
#$0F
|
#$FFFF
|
経験値 2 |
#$11
|
#$FFFF
|
経験値 3 |
#$13
|
#$FFFF
|
経験値 4 |
#$15
|
#$FFFF
|
経験値 5 |
#$17
|
#$FFFF
|
経験値 6 |
#$19
|
#$FFFF
|
等級名 0 |
#$1B
|
#$FFFF
|
等級名 1 |
#$1D
|
#$FFFF
|
等級名 2 |
#$1F
|
#$FFFF
|
等級名 3 |
#$21
|
#$FFFF
|
等級名 4 |
#$23
|
#$FFFF
|
等級名 5 |
#$25
|
#$FFFF
|
等級名 6 |
#$27
|
#$FFFF
|
等級名 7 |
#$29
|
#$FFFF
|
コマンド習得経験値 00 |
#$2B
|
#$00FF
|
習得コマンド 00 |
#$2C
|
#$FFFF
|
コマンド習得経験値 01 |
#$2E
|
#$00FF
|
習得コマンド 01 |
#$2F
|
#$FFFF
|
コマンド習得経験値 02 |
#$31
|
#$00FF
|
習得コマンド 02 |
#$32
|
#$FFFF
|
コマンド習得経験値 03 |
#$34
|
#$00FF
|
習得コマンド 03 |
#$35
|
#$FFFF
|
コマンド習得経験値 04 |
#$37
|
#$00FF
|
習得コマンド 04 |
#$38
|
#$FFFF
|
コマンド習得経験値 05 |
#$3A
|
#$00FF
|
習得コマンド 05 |
#$3B
|
#$FFFF
|
コマンド習得経験値 06 |
#$3D
|
#$00FF
|
習得コマンド 06 |
#$3E
|
#$FFFF
|
コマンド習得経験値 07 |
#$40
|
#$00FF
|
習得コマンド 07 |
#$41
|
#$FFFF
|
コマンド習得経験値 08 |
#$43
|
#$00FF
|
習得コマンド 08 |
#$44
|
#$FFFF
|
コマンド習得経験値 09 |
#$46
|
#$00FF
|
習得コマンド 09 |
#$47
|
#$FFFF
|
コマンド習得経験値 0A |
#$49
|
#$00FF
|
習得コマンド 0A |
#$4A
|
#$FFFF
|
コマンド習得経験値 0B |
#$4C
|
#$00FF
|
習得コマンド 0B |
#$4D
|
#$FFFF
|
コマンド習得経験値 0C |
#$4F
|
#$00FF
|
習得コマンド 0C |
#$50
|
#$FFFF
|
コマンド習得経験値 0D |
#$52
|
#$00FF
|
習得コマンド 0D |
#$53
|
#$FFFF
|
コマンド習得経験値 0E |
#$55
|
#$00FF
|
習得コマンド 0E |
#$56
|
#$FFFF
|
コマンド習得経験値 0F |
#$58
|
#$00FF
|
習得コマンド 0F |
#$59
|
#$FFFF
|
さいだい HP ボーナス |
#$5B
|
#$FFFF
|
さいだい MP ボーナス |
#$5D
|
#$FFFF
|
ちからボーナス |
#$5F
|
#$FFFF
|
すばやさボーナス |
#$61
|
#$FFFF
|
かしこさボーナス |
#$63
|
#$FFFF
|
みのまもりボーナス |
#$65
|
#$FFFF
|
かっこよさボーナス |
#$67
|
#$00FF
|
ちからに対する係数 |
#$68
|
#$00FF
|
(未使用) |
#$69
|
#$00FF
|
すばやさに対する係数 |
#$6A
|
#$00FF
|
(未使用) |
#$6B
|
#$00FF
|
みのまもりに対する係数 |
#$6C
|
#$00FF
|
(未使用) |
#$6D
|
#$00FF
|
かしこさに対する係数 |
#$6E
|
#$00FF
|
(未使用) |
#$6F
|
#$00FF
|
かっこよさに対する係数 |
#$70
|
#$00FF
|
(未使用) |
#$71
|
#$00FF
|
さいだい HP に対する係数 |
#$72
|
#$00FF
|
(未使用) |
#$73
|
#$00FF
|
さいだい MP に対する係数 |
#$74
|
#$00FF
|
(未使用) |
#$75
|
#$FFFF
|
説明 |
上の表で(未使用)等の括弧付きの属性はプログラムからの参照がない。 付録の CSV ファイルではこのような項目について記載を省略する。 以下に各属性の概要を記す。
名前とは、この職業の名前を表す文字列の ID を値とする属性だ。 職業名は各キャラクターの「つよさ」ウィンドウや転職時の職業選択ウィンドウ等に表示されるものだ。
ROM に定義されているデータを確認すると、ヌル職業と無職のときとで値が異なっている。 前者と後者の職業名はそれぞれ「なし」と空文字列だ。
文字列については 4.2 文字列 で述べる。
職業経験値構造体オフセットとは、職業経験値オブジェクトにおいて、 この職業に関する職業経験値がそのオブジェクトのベースアドレスから数えて何バイト目から開始するのかを意味する値の属性だ。
職業経験値構造体マスクとは、さらに職業経験値構造体オフセット属性値で示されるバイト中の何ビット目から 当該職業データが格納されているのかを意味する値の属性だ。
職業経験値構造体シフトビットとは、さらにそのマスクされたビット列を値として解釈するために必要な右シフト回数を意味する値の属性だ。 ただし、この属性はプログラムから利用されていない可能性がある(マスクだけで適当なシフト数が判明するため)。
例えば「とうぞく」のこれらの属性値は (#$0004, #$007F80, #$0007)
と読める。
これが意味するのは、「とうぞく」の職業経験値が職業経験値オブジェクトの 4 バイト目の最上位ビットから 5 バイト目の最上位ビットの一つ手前までに亘ることだ。
経験値上限とは、この職業を極めた時点での職業経験値を示す属性だ。
経験値 k とは、この職業の等級(仲間キャラクターの「つよさ」ウィンドウで確認できる星の数)が k + 2 になるのに必要な職業経験値を示す属性だ。 最後の経験値 6 属性値と経験値上限属性値は等しい。
言い忘れたが、本節で言う職業経験値とは戦闘勝利回数に対応するほうの概念だ。
等級名 k とは、この職業の等級 k + 1 の呼び名を指定する文字列 ID を値とする属性だ。
#$00
..#$0F
)
コマンド習得経験値 k とは、習得コマンド k を習得するのに必要な職業経験値を取る属性だ。 最小値が 2 となっていることに注意を要する。
#$00
..#$0F
)
習得コマンド k とは、職業に就いている者が規定の職業経験値を得ると習得するコマンドを意味する属性だ。
ただし、型はコマンド ID ではなく、コマンドウィンドウ内の項目位置を指示するオブジェクト配列の添字という、馴染みのないものになっている。
このオブジェクトはアドレス $FFC96D
にある配列の要素であり、
構造としてはコマンド ID の値、移動コマンドウィンドウでの項目位置、戦闘コマンドウィンドウでの項目位置の三つ組の配列とみなせる。
詳しくは付録のデータを参照して欲しい。
この属性値が #$9A
であれば、それも含むそこから先の習得コマンド属性値は全て無効値であることを示している。
各キャラクター属性ボーナスとは、職業レベルが最大のときに、 この職業に就いている者の対応属性値がこの属性値分だけ加算されるというものだ。
各キャラクター属性に対する係数とは、この職業に就いている者のキャラクター属性値を乗算によって変化する処理におけるそれを示す属性だ。 係数属性値を 128 で除算した値が実質的な係数と考えたほうがよい。 ただし値 255 は厳密に言えばマジックナンバーであり、このときには正確に 2 倍を意味する。
良い機会なので、仲間キャラクターの各属性値の補正手順をここで簡単にまとめておく:
仲間キャラクターの素(無職かつ装備品なしの状態)の属性値を取得する
就いている職業が指定する各キャラクター属性に対する係数(から一意に決まる定数)を乗算する
職業レベルが最大であれば、各キャラクター属性ボーナス属性値を加算する
仲間キャラクターの装備品から決まる属性値変動を適用する
以上の結果、キャラクター属性値がゼロと評価されれば最終的な値を 1 に、 属性固有の上限値を超えていたら、その上限値を値とする
説明とはメッセージ ID を取る属性であり、ダーマの神殿にいる職業説明係の台詞を指定するものだ。
仲間キャラクターが何かの職業に就いていると、どのような良いことが起こるのかを以下に説明する。 これらの特典は基本的には戦闘モードにおいて有利に働くことが多いようだ。
以下の各表で列が ID とあるのは、つよさウィンドウで表示さえる星の数から 1 を引いた値と等しい。
職業がぶとうかである仲間キャラクターは、戦闘中に会心痛恨属性が 1 の戦闘コマンドを実行すると、 次の表の確率で会心の一撃が発生する:
抽選が外れると、通常の職業キャラクターと同様の抽選を行う。
職業がおどりこであるである仲間キャラクターは、戦闘中にみかわし考慮属性が 1 の戦闘コマンドを受け、 通常のみかわし判定処理が失敗すると次の表の確率で身をかわす:
職業がとうぞくである仲間キャラクターが戦闘後に馬車外にいると、 倒した敵陣戦闘員から宝箱を盗んでいたことになることがある。 モンスターのアイテム確率属性から決まる乱数と職業レベル(ここでは星の数)を比較して、大きければ盗み確定となる。
とうぞくが複数いる場合は、その人数分だけこのような判定が実行される。
職業がまものつかいである仲間キャラクターが戦闘後に馬車外にいると、 倒した敵陣戦闘員が起き上がって仲間になりたそうにすることがある。 これには、その敵陣戦闘員のモンスターレベルよりも職業レベル(ここでは星の数) * 8 + 1 のほうが大きい(等しいのはダメ)必要がある。
まものつかいが複数いる場合は、そのうちのもっとも高い職業レベルが採用される。
職業がしょうにんである仲間キャラクターが戦闘後に馬車外にいると、 戦闘後に敵から得られるゴールドが増える。 追加分は本来の額面に対する割合で次の表のように与えられている:
しょうにんが複数いる場合は、その人数分だけこのような判定が実行される。
職業があそびにんである仲間キャラクターは、命令に関わらず 1/5 の確率で「あそび」コマンドを実行する。
このとき、実行コマンドの抽選は職業レベルに依存する。
選択肢はどのキャラクターも最大 8 個あり、ちょうど職業レベルの取り得る範囲と一致するので乱数は自然に取る。
「あそび」の選択肢は $C22D54
に定義されている。
このデータは 付録 B データ に収録した。
職業がバトルマスターである仲間キャラクターは、みかわし考慮属性が 1 の戦闘コマンドを受け、 通常のみかわし判定処理が失敗すると次の表の確率で相手の攻撃を打ち払う:
職業がパラディンである仲間キャラクターは、パラディン考慮属性が 1 の戦闘コマンドを実行するときに次の表の確率でコマンド対象を即死させる:
職業がけんじゃである仲間キャラクターは、移動モード戦闘モードを問わず、コマンド実行時の必要 MP 消費量が緩和される。 コマンドが規定する消費量がゼロ以外の定数であるようなものについては、次の表で示す量か 1 のどちらかになる:
表 4.44 けんじゃの MP 消費
ID | 消費量 |
---|---|
0 | 規定量と同じ |
1 | 規定量と同じ |
2 | 規定量の 7/8 |
3 | 規定量の 7/8 |
4 | 規定量の 3/4 |
5 | 規定量の 3/4 |
6 | 規定量の 5/8 |
7 | 規定量の 1/2 |
職業がレンジャーである仲間キャラクターがいると、戦闘コマンド「にげる」の成功率が次の表のようになる:
レンジャーが複数いる場合は、そのうちのもっとも高い職業レベルが採用される。
職業がスーパースターである仲間キャラクターがいると、 戦闘中に敵陣戦闘員が次の確率で見とれて休み状態になることがある:
職業がゆうしゃである仲間キャラクターは、戦闘中の各ターン終了時に HP が次の表に示す値だけ自動回復する:
職業がドラゴンである仲間キャラクターがいると、戦闘開始時に先制を取りやすくなる。 ドラゴンでないときの確率の何倍だけ先制を取りやすいかを次の表で示す:
ドラゴンが複数いる場合は、そのうちのもっとも高い職業レベルが採用される。