TOP > プログラミング関係解説&調査 > 原始編・中世編敵パーティ

原始編・中世編敵パーティ

当ページの内容は、ある程度のプログラミングの知識を必要とする。
まず、プログラミング関係解説&調査をひととおり読んでいただきたい。

本作の戦闘は、イベント戦闘以外だと、敵との遭遇方法がシンボルエンカウント・ランダムエンカウントと2通りある。
シンボルエンカウントの場合はシンボルにより敵パーティが固定の場合とランダムの場合の2通りがあり、ランダムエンカウントでは敵パーティがランダムで決まる。
ランダムで決まるといってももちろん、一定法則に従って確率で決まるが、これらの決定方法について記す。

敵パーティがランダムで決まるのは、原始編・中世編・最終編の3シナリオのみである。
他シナリオはシンボルにより決まるか、近未来編のワールドマップのようにアキラのレベルで決まる。

原始編は見えないシンボルがうろついているシンボルエンカウントのエリアが幾つかあり、エリアとシナリオ進行度によって、シンボルとの接触時に敵パーティが複数パターンから確率で決まる。
このため、同じシンボルでも、逃げてから再度同じシンボルとの戦闘に入った場合、異なる敵パーティに変わることもある。

中世編はランダムエンカウントで、エリアとシナリオ進行度によって、敵パーティが複数パターンから確率で決まる。
最終編もランダムエンカウントで、味方キャラの合計レベルとエリアにより敵パーティが4種類から各1/4で決まる。最終編敵パーティで解説している。

[$00:0041](エリア固有値)について

ランダムエンカウントのみならず、戦闘における各種の判定で重要になってくるのが、[$00:0040][$00:0041]の値である。
特に、[$00:0041]はランダムエンカウントに大きく関わる。
最終編敵パーティでも、[$00:0041]の算出方法を紹介した。
以下サブルーチンが[$00:0041]の算出に関わってくる。

$C0/185E LDA $2D    [$00:002D]   ;Aに[$00:002D]をロード
$C0/1860 ROL A                   ;Aをキャリーフラグを含めた9bitで左ローテート
$C0/1861 ROL A                   ;Aをキャリーフラグを含めた9bitで左ローテート
$C0/1862 ROL A                   ;Aをキャリーフラグを含めた9bitで左ローテート
$C0/1863 AND #$03                ;Aと$03で論理積
$C0/1865 STA $30    [$00:0030]   ;Aを[$00:0030]に書き込み
$C0/1867 LDA $011E  [$00:011E]   ;Aに[$00:011E]をロード
$C0/186A ASL A                   ;Aを算術左シフト *2
$C0/186B ASL A                   ;Aを算術左シフト *2
$C0/186C ORA $30    [$00:0030]   ;Aと[$00:0030]で論理和
$C0/186E TAX                     ;Aの値をXレジスタに転送
$C0/186F PHB                     ;DBレジスタをスタックにプッシュ
$C0/1870 LDA #$CD                ;Aに$CDをロード
$C0/1872 PHA                     ;Aをスタックにプッシュ
$C0/1873 PLB                     ;DBレジスタに値をプル
$C0/1874 LDA $0018,x[$CD:001F]   ;Aに[$0018,x]をロード
$C0/1877 ASL A                   ;Aを算術左シフト *2
$C0/1878 ASL A                   ;Aを算術左シフト *2
$C0/1879 STA $30    [$00:0030]   ;Aを[$00:0030]に書き込み
$C0/187B PLB                     ;DBレジスタに値をプル
$C0/187C LDA $0ACC  [$00:0ACC]   ;Aに[$00:0ACC]をロード
$C0/187F BEQ $07    [$1888]      ;ゼロフラグが立っているとき[$1888]分岐
;原始編・狩場2回目以降以外の処理
$C0/1881 LDA $30    [$00:0030]   ;Aに[$00:0030]をロード
$C0/1883 CLC                     ;キャリーフラグクリア
$C0/1884 ADC #$08                ;A + $08
$C0/1886 STA $30    [$00:0030]   ;Aを[$00:0030]に書き込み
;分岐合流
$C0/1888 LDA $12FD  [$00:12FD]   ;Aに[$00:12FD]をロード
$C0/188B CLC                     ;キャリーフラグクリア
$C0/188C ADC $12FE  [$00:12FE]   ;A + [$00:12FE]
$C0/188F CLC                     ;キャリーフラグクリア
$C0/1890 ADC $12FF  [$00:12FF]   ;A + [$00:12FF]
$C0/1893 ORA $30    [$00:0030]   ;Aと[$00:0030]で論理和
$C0/1895 BRA $02    [$1899]      ;フラグにかかわりなく常に分岐[$1899]
$C0/1899 STA $41    [$00:0041]   ;Aを[$00:0041]に書き込み

最終的に$C0/1899[$00:0041]が算出されているが、その前を辿ってみるとだいたい以下のようになる。

x = [$00:011E]*4 | ([$00:002D] << $03 & $03)

[$00:0030] = [$0018,x]*4
[$00:0ACC]の値が$00以外だと、
[$00:0030] = [$0018,x]*4 + $08

[$00:0041] = ([$00:12FD] + [$00:12FE] + [$00:12FF]) | [$00:0030]

<<は左ローテート、|は論理和の論理演算記号

[$00:0041]を求めるために必要なのは、

  • [$00:011E]
  • [$00:002D]
  • [$00:12FD]
  • [$00:12FE]
  • [$00:12FF]
  • [$00:0ACC]

の6種類の変数だということがわかる。
[$00:12FD][$00:12FE][$00:12FF]の3バイト分は戦闘に関する進行フラグになる。
今回は原始編と中世編に絞って紹介する。

原始編
エリア$00:12FD$00:12FE$00:12FF$00:0030
狩場(初回)$00$00$00$04
狩場(2回目以降)$01$00$00$04
荒野$01$01$00$0C
荒野の洞窟下$01$01$00$08
荒野の北側の細道$01$01$01$0C
中世編
状態$00:12FD$00:12FE$00:12FF
偽魔王撃破前$00$00$00
偽魔王撃破後$01$00$00

エリアまたは進行度合いで値が変わる。

[$00:011E][$00:002D]はランダムエンカウント時における、エリア毎に設定された値になる。
原始編だと、敵シンボルとの戦闘が発生するエリアでは、[$00:011E] = $02で固定になっているようである。
[$00:0ACC]は狩場2回目以降のみ$00
[$00:002D]は、荒野の洞窟だと$00、他は$40

一方、中世編だと、[$00:011E][$00:002D]はエリア毎に分けて設定されている。
世界の合言葉は森部様の、ランダムエンカウントに関するテキストに、ランダムエンカウントに関する詳細な説明があるが、[$00:011E]はエリア危険度、[$00:002D]下4ビットが増加値になる。
ただし、今回は、
x = [$00:011E]*4 | ([$00:002D] << $03 & $03)
を計算しており、([$00:002D] << $03 & $03)というのは実質、[$00:002D]の上2ビットの値なので、異なる値が算出される。

中世編は、エリアは同じでも魔王戦前後で出現する敵パーティが変動するが、
[$00:0041] = ([$00:12FD] + [$00:12FE] + [$00:12FF]) | [$00:0030]
の、[$00:0030]部分はエリアで決まり、[$00:12FD] + [$00:12FE] + [$00:12FF]がシナリオ進行で+1されることで敵パーティを変動させている。

敵パーティロード用サブルーチン

どの戦闘でも、敵パーティのデータを呼び出すため、戦闘開始直後に必ず$C1/F55D~の処理を行う。
$C1/F55D~で、[$00:0040][$00:0041]の値が必要となってくる。

$C1/F55D LDA $0040  [$00:0040]   ;Aに[$00:0040]をロード
$C1/F560 AND #$C0                ;Aと$C0で論理積
$C1/F562 LSR A                   ;Aを論理右シフト (/2)
$C1/F563 STA $59    [$00:0359]   ;Aを[$00:0359]に書き込み
(中略)
$C1/F588 LDA $0040  [$00:0040]   ;Aに[$00:0040]をロード
$C1/F58B CMP #$04                ;Aと$04を減算比較(ステータスレジスタ変更のみ)
$C1/F58D BEQ $6C    [$F5FB]      ;ゼロフラグが立っているとき[$F5FB]分岐
$C1/F58F BIT #$C0                ;Aと$C0で論理積(ステータスフラグ変更のみ)
$C1/F591 BNE $5D    [$F5F0]      ;ゼロフラグが立っていないとき[$F5F0]分岐
;ゼロフラグOFFは固定シンボル/イベント戦闘用分岐 $C1/F5F0へ
$C1/F593 LDA $0A00  [$00:0A00]   ;Aに[$00:0A00](シナリオID)をロード
$C1/F596 CMP #$06                ;Aと$06を減算比較(ステータスレジスタ変更のみ)
$C1/F598 BNE $15    [$F5AF]      ;ゼロフラグが立っていないとき[$F5AF]分岐
;ゼロフラグON 近未来編処理
$C1/F59A LDA $0041  [$00:0041]   ;Aに[$00:0041]をロード
$C1/F59D BIT #$03                ;Aと$03で論理積(ステータスフラグ変更のみ)
$C1/F59F BNE $0E    [$F5AF]      ;ゼロフラグが立っていないとき[$F5AF]分岐
$C1/F5A1 LDA $0E86  [$00:0E86]   ;Aに[$00:0E86](アキラのレベル)をロード
$C1/F5A4 CLC                     ;キャリーフラグクリア
$C1/F5A5 ADC #$74                ;A + $74
$C1/F5A7 CMP #$82                ;Aと$82を減算比較(ステータスレジスタ変更のみ)
$C1/F5A9 BCC $45    [$F5F0]      ;キャリーフラグが立っていないとき[$F5F0]分岐
$C1/F5AB LDA #$81                ;Aに$81をロード
$C1/F5AD BRA $41    [$F5F0]      ;フラグにかかわりなく常に分岐[$F5F0]
;近未来編処理 ここまで
$C1/F5AF LDA $0A00  [$00:0A00]   ;Aに[$00:0A00](シナリオID)をロード
$C1/F5B2 CMP #$08                ;Aと$08を減算比較(ステータスレジスタ変更のみ)
;ゼロフラグON 最終編処理
$C1/F5B4 BNE $05    [$F5BB]      ;ゼロフラグが立っていないとき[$F5BB]分岐
$C1/F5B6 JSR $F4FA  [$C1:F4FA]   ;[$C1:F4FA]へジャンプ
$C1/F5B9 BRA $35    [$F5F0]      ;フラグにかかわりなく常に分岐[$F5F0]
;最終編処理 ここまで
$C1/F5BB LDA $047E  [$00:047E]   ;Aに[$00:047E]をロード
$C1/F5BE CMP #$AA                ;Aと$AAを減算比較(ステータスレジスタ変更のみ)
$C1/F5C0 BNE $09    [$F5CB]      ;ゼロフラグが立っていないとき[$F5CB]分岐
;ここでゼロフラグOFFだと乱数計算、敵パーティを乱数で決める
$C1/F5C2 LDA $047F  [$00:047F]   ;Aに[$00:047F]をロード
$C1/F5C5 INC A                   ;Aをインクリメント +1
$C1/F5C6 STA $047F  [$00:047F]   ;Aを[$00:047F]に書き込み
$C1/F5C9 BRA $03    [$F5CE]      ;フラグにかかわりなく常に分岐[$F5CE]

;$C1/F5C0でゼロフラグOFF 乱数計算$C1/6150~$C1/61A4へ
$C1/F5CB JSR $6150  [$C1:6150]   ;[$C1:6150]へジャンプ

細かい説明は後回しにするとして、$C1/F5C0でゼロフラグが立たない場合、$C1/F5CBに進むが、そこから更に$C1:6150にジャンプしている。
$C1:6150~は、戦闘乱数計算用サブルーチンであり、戦闘乱数($00$FF)をA[$00:033B]に入れた状態でサブルーチンが戻ってくることになる。
乱数計算に飛ぶ戦闘のみ、敵パーティが乱数でランダムに決まることになる。
それが中世編のランダムエンカウントと、原始編の見えないシンボルとのエンカウントである。
最終編については、$C1/F5AF~でシナリオIDが$08(最終編)かどうかの分岐があるので、$C1/F5B4$C1/F5B9の処理を経て$C1/F5F0にジャンプし、別処理で敵パーティが決まる。

改めて$C1/F55Dから処理を見てみると、[$00:0040]$04ではない、[$00:0040]$C0で論理積を取ってゼロフラグが立つかどうかでまず大きな分岐がある。
つまり、[$00:0040]$C0より大きいか(上2ビットに値が入っているか)で分岐なのだが、[$00:0040]$C0以上はシンボルで固定の戦闘(幕末編・功夫編など)やイベント戦闘が該当するようである。
敵パーティを乱数で判定する必要がないため、ここで分岐して$C1/F5F0にジャンプする。
これ以降はシナリオ分岐で、$C1/F593$C1/F598はシナリオIDが$06か、つまり近未来編かの判定である。
$C1/F59A$C1/F5ADが近未来編用の前処理で、ワールドマップでの戦闘かどうかなど各種分岐と処理があるが、ここでは詳細を省く。
$C1/F5B4~で最終編判定、$C1/F5BB~で[$00:047E]$AAではない場合、戦闘乱数で敵パーティ判定、となる。
$00:047Eだが、少し前で「STZ $047E [$00:047E]」という処理があるので、おそらく特殊な状況でない限り$00が入っている(と思われる)。

ここでは中世編のランダムエンカウントと、原始編の見えないシンボルとのエンカウントの場合、$C1/F5CBのジャンプ先、$C1/6150$C1/61A4で乱数計算をして、$C1/F5CEで戻ってきた後の処理を見てみよう。

$C1/F5CE AND #$0F                ;Aと$0Fで論理積
$C1/F5D0 STA $10    [$00:0310]   ;Aを[$00:0310]に書き込み
$C1/F5D2 STZ $11    [$00:0311]   ;[$00:0311]に$00を書き込み

Aに戦闘乱数($00$FF)を読み込んだ状態で$C1/F5CEに戻ってくるが、上の処理によると、乱数$00$FF$0Fで論理積をとって[$00:0310]に書き込んでいる。
$0Fと論理積をとると、乱数の下1桁だけ残る。
つまり、乱数$00$FF$0~$Fのいずれかになり、[$00:0310]に書き込まれるのは$00$0Fである。
また、$00$0Fは当確率で出現することになる。
$0Fと論理積をとって、例えば$00になるのは、$00, $10, $20, $30,……$F0の16通りである。どの数値でも同様。
[$00:0310]の数値が、後々で呼び出し先アドレスの違いに繋がる。

$C1/F5D4 REP #$21                ;Aを16bit幅に変更、キャリーフラグクリア
$C1/F5D6 LDA $0041  [$00:0041]   ;Aに[$00:0042][$00:0041]をロード
$C1/F5D9 AND #$00FF              ;Aと$00FFで論理積
$C1/F5DC ASL A                   ;Aを算術左シフト *2
$C1/F5DD ADC $D60050[$D6:0050]   ;A + [$D6:0051][$D6:0050]($526B)
$C1/F5E1 TAX                     ;Aの値をXレジスタに転送
$C1/F5E2 LDA $D60000,x           ;Aに[$D60000,x+1][$D60000,x]をロード
$C1/F5E6 CLC                     ;キャリーフラグクリア
$C1/F5E7 ADC $10    [$00:0310]   ;A + [$00:0311][$00:0310]
$C1/F5E9 TAX                     ;Aの値をXレジスタに転送
$C1/F5EA SEP #$20                ;MフラグON Aレジスタは8bit幅
$C1/F5EC LDA $D60000,x           ;Aに[$D60000,x]をロード
$C1/F5F0 STA $50    [$00:0350]   ;Aを[$00:0350]に書き込み
$C1/F5F2 STZ $51    [$00:0351]   ;[$00:0351]に$00を書き込み

$C1/F5D4で16bitモードに切り替えたので、$C1/F5D6では[$00:0042][$00:0041]の2バイト分呼び出すが、$C1/F5D9で$00FFと論理積を取るから、結局、上に00を付けた[$00:0041](1バイト)がAに残る。
$C1/F5DC[$00:0041]*2し、[$D6:0051][$D6:0050]($526B)と加算した値が、Xレジスタに転送され、$C1/F5E2[$D60000,x+1][$D60000,x]をロードしている。
つまり、$C1/F5E2で呼び出すアドレスは、

[$D60000,x+1][$D60000,x]
x = [$00:0041]*2 + $526B

である。
上で述べた通り、[$00:0041]はシナリオ・エリアによって変動するので、ここで呼び出すアドレスが変動することになる。
更にその先では、[$D60000,x+1][$D60000,x] + [$00:0311][$00:0310]Xレジスタに転送し、$C1/F5EC[$D60000,x]をロードする。
よって$C1/F5ECで呼び出すアドレスは、

[$D60000,n]
n = [$D60000,x+1][$D60000,x] + [$00:0311][$00:0310]
x = [$00:0041]*2 + $526B

と、なかなか入り組んだ値である。
[$00:0311][$00:0310]は先程の計算どおり、乱数により$0000~$000Fと変動する。
[$00:0041]はエリアによる固定値であるから、同じエリア内なら、[$00:0311][$00:0310]の乱数分だけ、$C1/F5ECで呼び出すアドレスが変動するはずだ。

原始編

ここで例として、原始編での処理を見てみよう。
原始編の最初の戦闘、つまり狩場で、「ホネ肉」を得て長老に渡すまでについてサブルーチンを追いかけてみる。

[$00:0041] = ([$00:12FD] + [$00:12FE] + [$00:12FF]) | [$00:0030]

は、

[$00:0041] = ($00 + $00 + $00) | $04
= $04

よって、

x = [$00:0041]*2 + $526B
= $04*2 + $526B
= $5273

[$D60000,x+1][$D60000,x]
= [$D6:5274][$D6:5273]

[$D6:5274][$D6:5273]の値を見ると$53DBである。

[$D60000,n]
n = [$D60000,x+1][$D60000,x] + [$00:0311][$00:0310]
= [$D6:5274][$D6:5273] + [$00:0311][$00:0310]
= $53DB + (乱数$0000~$000F)

よって、$C1/F5ECで呼び出される[$D60000,n]は、

[$D6:53DB][$D6:53EA]

以上のアドレスのいずれかである。
呼び出された値は$C1/F5F0[$00:0350]に書き込まれる。
[$D6:53DB][$D6:53EA]の値については横に置いて、続きを見てみる。

$C1/F5F4 CMP #$D3                ;Aと$D3を減算比較(ステータスレジスタ変更のみ)
$C1/F5F6 BNE $03    [$F5FB]      ;ゼロフラグが立っていないとき[$F5FB]分岐
;ゼロフラグON
$C1/F5F8 JSR $714F  [$C1:714F]   ;[$C1:714F]へジャンプ
;ゼロフラグOFF
$C1/F5FB REP #$20                ;Aを16bit幅に変更、Mフラグをクリア
$C1/F5FD LDA $50    [$00:0350]   ;Aに[$00:0351][$00:0350]をロード
$C1/F5FF ASL A                   ;Aを算術左シフト *2
$C1/F600 ADC $D60020[$D6:0020]   ;A + [$D6:0021][$D6:0020]($4080)
$C1/F604 TAX                     ;Aの値をXレジスタに転送
$C1/F605 LDA $D60000,x           ;Aに[$D60000,x+1][$D60000,x]をロード
$C1/F609 TAX                     ;Aの値をXレジスタに転送
$C1/F60A STA $52    [$00:0352]   ;Aを[$00:0353][$00:0352]に書き込み
$C1/F60C SEP #$20                ;MフラグON Aレジスタは8bit幅
$C1/F60E LDA $D60000,x           ;Aに[$D60000,x](敵パーティレベル)をロード
$C1/F612 STA $55    [$00:0355]   ;Aを[$00:0355]に書き込み

$C1/F5F4$C1/F5F6のゼロフラグ判定だが、おそらく原始編と中世編でゼロフラグが立つことはない。
$C1/F5FBからは、[$00:0351][$00:0350]*2 + $4080Xレジスタに転送してから[$D60000,x+1][$D60000,x]をロードするのだが、後の処理でわかる通りに、$C1/F60Eで呼び出される[$D60000,x]が、この戦闘における敵パーティレベルに当たる。
敵パーティデータは最初のアドレスに敵パーティレベルが入るので、ここで敵パーティが呼び出せたことになる。
つまり、敵パーティデータの最初のアドレス(敵パーティレベルのアドレス)は、

敵パーティレベルのアドレス =
$D60000 + [$D60000,x+1][$D60000,x]
 x = [$00:0351][$00:0350]*2 + $4080

である。

$C1/F5FB REP #$20                ;Aを16bit幅に変更、Mフラグをクリア
$C1/F5FD LDA $50    [$00:0350]   ;Aに[$00:0351][$00:0350]をロード
$C1/F5FF ASL A                   ;Aを算術左シフト *2
$C1/F600 ADC $D60020[$D6:0020]   ;A + [$D6:0021][$D6:0020]
$C1/F604 TAX                     ;Aの値をXレジスタに転送
$C1/F605 LDA $D60000,x           ;Aに[$D60000,x]をロード
$C1/F609 TAX                     ;Aの値をXレジスタに転送
$C1/F60A STA $52    [$00:0352]   ;Aを[$00:0352]に書き込み
$C1/F60C SEP #$20                ;MフラグON Aレジスタは8bit幅
$C1/F60E LDA $D60000,x           ;Aに[$D60000,x](敵パーティレベル)をロード
$C1/F612 STA $55    [$00:0355]   ;Aを[$00:0355]に書き込み
$C1/F614 LDA $D60001,x           ;Aに[$D60001,x]をロード
$C1/F618 STA $56    [$00:0356]   ;Aを[$00:0356]に書き込み
$C1/F61A LDA $D60006,x           ;Aに[$D60006,x]をロード
$C1/F61E STA $58    [$00:0358]   ;Aを[$00:0358]に書き込み
$C1/F620 PHX                     ;Xをスタックにプッシュ
$C1/F621 STZ $60    [$00:0360]   ;[$00:0360]に$00を書き込み
$C1/F623 JSR $FB2B  [$C1:FB2B]   ;[$C1:FB2B]へジャンプ

[$00:0351][$00:0350]は、[$00:0351]に00が入っているから、さきほどの原始編の例で言えば、[$00:0350]の上に00を付けた2バイトの値である。
[$00:0350]は、乱数により[$D6:53DB][$D6:53EA]のどれかになる。

アドレス
$D6:53DB$40
$D6:53DC$40
$D6:53DD$40
$D6:53DE$37
$D6:53DF$40
$D6:53E0$40
$D6:53E1$40
$D6:53E2$40
$D6:53E3$40
$D6:53E4$37
$D6:53E5$37
$D6:53E6$37
$D6:53E7$40
$D6:53E8$40
$D6:53E9$40
$D6:53EA$40

実は$37$40のどちらかしか入っていないのである。
では、[$D6:53DB][$D6:53EA])*2 + $4080を計算すると、

$37*2 + $4080 = $40EE
$40*2 + $4080 = $4100

であるから、呼び出すアドレスと値は、

$37 : [$D6:40EF][$D6:40EE] = $45D3
$40 : [$D6:4101][$D6:4100] = $4668

これらの値のバンク$D6のアドレスこそが、該当の敵パーティレベルになる。

敵パーティレベルアドレス敵パーティID敵パーティ
$D6:45D3$37シンテトラケス♀
$D6:4668$40ころワン×4

実のところ、[$00:0350]に入った値は敵パーティIDだったのである。
よって、$D6:53DB$D6:53EAとは、狩場(初回時)における敵パーティ表に他ならない。
表を見ると、$37が4パターン、$40が12パターンの合計16パターンである。
乱数により、敵パーティID$374/16、敵パーティID$4012/16の確率で選ばれる、ということがわかる。
狩場(初回時)では、「シンテトラケス♀」か「ころワン×4」のどちらかの敵パーティしか出現しないが、「シンテトラケス♀」は1/4、「ころワン×4」は3/4で出現する、ということがわかった。
実際にプレイしても、初回は「ころワン×4」の方が出現しやすいことは体感でもわかるのだが、実際に確率としても「ころワン×4」の出現率が高めに設定されていたのである。

ということで、$D6:53DB$D6:53EA付近に、原始編における他エリアの敵パーティ表がありそうだ。
諸々の計算は横に置いて結論だけ述べると、$D6:53CB~以降、16バイト毎に$D6:541Aまでが原始編の敵パーティ表なのである。
入っている数値が敵パーティIDである。

洞窟下 $D6:53CB$D6:53DA
$38$3D$3D$3C$3C$3D$42$3E$53$53$53$53$49$49$3C$49
狩場(初回) $D6:53DB$D6:53EA
$40$40$40$37$40$40$40$40$40$37$37$37$40$40$40$40
狩場(2回目以降) $D6:53EB$D6:53FA
$40$37$38$38$38$36$36$44$44$36$45$45$45$40$36$3A
荒野 $D6:53FB$D6:540A
$3A$3B$38$21$43$44$43$48$21$3A$3A$45$47$4B$45$4C
荒野の北側の細道 $D6:540B$D6:541A
$42$48$4A$39$54$54$4D$54$52$54$4E$54$3B$46$46$55

というように並んでいる。
ひとつのエリアにつき、敵パーティ表の枠は16枠ということになり、狩場(初回)のように$37が4パターン、$40が12パターンとセットすることで、敵パーティにより出現確率を変えることができるようになっていることがわかる。
整理してみると、以下のようになる。

洞窟下 $D6:53CB$D6:53DA
ID回数敵パーティ
$381ちびマンモス×3
$3C3ケケモグラ×12(配置1)
$3D3ケケモグラ×12(配置2)
$3E1アルコサウラ×1
$421ケケモグラ×1
$493アルコサウラ×1,アルコサウラ♀×1
$534アルコサウラ×1,アルコサウラ♀×3
狩場(初回) $D6:53DB$D6:53EA
ID回数敵パーティ
$374シンテトラケス♀×1
$4012ころワン×4
狩場(2回目以降) $D6:53EB$D6:53FA
ID回数敵パーティ
$364シンテトラケス×1,シンテトラケス♀×1
$371シンテトラケス♀×1
$383ちびマンモス×3
$3A1原始バイソン×1,原始バイソン♀×1
$402ころワン×4
$442原始バイソン×1
$453アーケオテリウム×1,アーケオ♀×1
荒野 $D6:53FB$D6:540A
ID回数敵パーティ
$212サーベルタイガー×3,サーベルタイガ♀×3
$381ちびマンモス×3
$3A3原始バイソン×1,原始バイソン♀×1
$3B1原始バイソン♀×1,モア♀×2
$432サーベルタイガー×1,サーベルタイガ♀×1
$441原始バイソン×1
$452アーケオテリウム×1,アーケオ♀×1
$471サーベルタイガー×2,サーベルタイガ♀×2
$482モア×1,モア♀×1
$4C1ナウマンゾウ♀×1
荒野の北側の細道 $D6:540B$D6:541A
ID回数敵パーティ
$391サーベルタイガー×3,ブロントテリウム×1,ブロント♀×1
$3B2原始バイソン♀×1,モア♀×2
$421ケケモグラ×1
$462アーケオテリウム×1,アーケオ♀×7
$481モア×1,モア♀×1
$4A1ブロントテリウム×1,ブロント♀×1
$4D1マンモス×1,ちびマンモス×1
$4E1マンモス♀×1,ブロント♀×2
$521マンモス×1,サーベルタイガ♀×2
$545ファルラルコス♀×1,ファルラルコス×1
$551マンモス♀×2,ちびマンモス×1

回数を16で割ると各パーティの出現確率になる。
出現率に偏りをもたせていることがわかる。

これで敵パーティの決定方法が判明した。
後は敵パーティデータから各種データを取り出してセットしていくことになる。

中世編

以上が原始編の仕組みだが、中世編も仕組みはだいたい似たようなものである。
ただ、[$00:0350]に入る値は、敵パーティIDに一定値を加えたものがある。
具体的には、$60~$80の値が入っていた場合、$60を引いた値が敵パーティID。
$C0~の値が入っていた場合、$ACを引いた値が敵パーティIDになる。

中世編は、

  • ルクレチアの森
  • 勇者の山
  • 魔王山・洞窟エリア
  • 魔王山・廃墟エリア

と、エリアが4ヶ所に分かれていて、更に魔王戦前後で敵パーティ編成が変動するので、合計8パターンになる。
敵パーティ表は$D6:541B$D6:549Aになる。
$60以上の値が入っている場合、下段に敵パーティIDも併記した。

ルクレチアの森 / 魔王戦前 $D6:541B$D6:542A
$60$60$60$60$61$61$61$62$62$63$63$64$64$65$66$67
$00$00$00$00$01$01$01$02$02$03$03$04$04$05$06$07
ルクレチアの森 / 魔王戦後 $D6:542B$D6:543A
$60$61$62$63$64$65$66$67$20$20$22$23$24$25$26$27
$00$01$02$03$04$05$06$07$20$20$22$23$24$25$26$27
魔王山・洞窟エリア / 魔王戦前 $D6:543B$D6:544A
$68$C5$C6$6B$C8$C9$CA$6F$C4$C4$C5$C5$C6$C6$C7$C7
$08$19$1A$0B$1C$1D$1E$0F$18$18$19$19$1A$1A$1B$1B
魔王山・洞窟エリア / 魔王戦後 $D6:544B$D6:545A
$28$29$28$C5$2B$2B$28$28$29$29$2A$2B$2C$2D$2E$2F
$28$29$28$19$2B$2B$28$28$29$29$2A$2B$2C$2D$2E$2F
勇者の山 / 魔王戦前 $D6:545B$D6:546A
$70$70$71$71$72$72$73$73$72$74$75$75$71$75$74$73
$10$10$11$11$12$12$13$13$12$14$15$15$11$15$14$13
勇者の山 / 魔王戦後 $D6:546B$D6:547A
$70$77$71$72$73$74$75$76$20$20$22$23$24$25$26$27
$10$17$11$12$13$14$15$16$20$20$22$23$24$25$26$27
魔王山・廃墟エリア / 魔王戦前 $D6:547B$D6:548A
$70$C4$C4$C5$C5$C6$C6$C7$C7$C8$C8$C9$CA$CA$6F$CA
$10$18$18$19$19$1A$1A$1B$1B$1C$1C$1D$1E$1E$0F$1E
魔王山・廃墟エリア / 魔王戦後 $D6:548B$D6:549A
$34$28$35$2D$2F$29$2A$2B$2C$2D$2E$2F$30$31$32$33

回数と敵パーティを整理すると以下の通り。

ルクレチアの森 / 魔王戦前 $D6:541B$D6:542A
ID回数敵パーティ
$004アイアンビートル×3
$013ライトライダー×3
$022シャープストロー×1,シングイーター×2
$032シャープストロー×2
$042シングイーター×4
$051ライトライダー×1
$061ライトライダー×9
$071アイアンビートル×6
ルクレチアの森 / 魔王戦後 $D6:542B$D6:543A
ID回数敵パーティ
$001アイアンビートル×3
$011ライトライダー×3
$021シャープストロー×1,シングイーター×2
$031シャープストロー×2
$041シングイーター×4
$051ライトライダー×1
$061ライトライダー×9
$071アイアンビートル×6
$202王国兵×2(配置1)
$221王国兵×3(配置1)
$231グリーンナイト×1,王国兵×2
$241王国兵×4
$251王国兵×2(配置2)
$261王国兵×2,グリーンナイト×1
$271グリーンナイト×3
魔王山・洞窟エリア / 魔王戦前 $D6:543B$D6:544A
ID回数敵パーティ
$081マンダイン×7
$0B1シングイーター×1,アイアンビートル×3,シャープストロー×1
$0F1シングイーター×1,シャープストロー×7
$182レッサードラゴン×1
$193ホットビートル×1,レッサードラゴン×1,ドラグノン×1
$1A3バーンバルブ×2,レッサードラゴン×1
$1B2リキッドストロー×4,レッサードラゴン
$1C1レッサードラゴン×1,バーンバルブ×2,ホットビートル×2
$1D1リキッドストロー×7
$1E1アームストロング×1,バーンバルブ×7
魔王山・洞窟エリア / 魔王戦後 $D6:544B$D6:545A
ID回数敵パーティ
$191ホットビートル×1,レッサードラゴン×1,ドラグノン×1
$284アヌビノフォビア
$291アラクノフォビア×1,バーンバルブ×2
$2A1アラクノフォビア×1,バーンバルブ×4
$2B3アヌビノフォビア×1,レッサードラゴン×1
$2C1エントモフォビア×1,リキッドストロー×1
$2D1ドラグノフォビア×1,レッサードラゴン×2
$2E1アラクノフォビア×1,レッサードラゴン×1
$2F1エントモフォビア×3
勇者の山 / 魔王戦前 $D6:545B$D6:546A
ID回数敵パーティ
$102フリーザイン×2,ファングイーター×2
$113ファングイーター×4
$123ファングイーター×2,クールバルブ×1
$133クールバルブ×1,アームストロング×1,フリーザイン×2
$142ナギーベア×1
$153クールバルブ×2,ファングイーター×1
勇者の山 / 魔王戦後 $D6:546B$D6:547A
ID回数敵パーティ
$101フリーザイン×2,ファングイーター×2
$111ファングイーター×4
$121ファングイーター×2,クールバルブ×1
$131クールバルブ×1,アームストロング×1,フリーザイン×2
$141ナギーベア×1
$151クールバルブ×2,ファングイーター×1
$161ナギーベア×2
$171ナギーベア×1,クールバルブ×3,ファングイーター×2
$202王国兵×2(配置1)
$221王国兵×3(配置1)
$231グリーンナイト×1,王国兵×2
$241王国兵×4
$251王国兵×2(配置2)
$261王国兵×2,グリーンナイト×1
$271グリーンナイト×3
魔王山・廃墟エリア / 魔王戦前 $D6:547B$D6:548A
ID回数敵パーティ
$0F1シングイーター×1,シャープストロー×7
$101フリーザイン×2,ファングイーター×2
$182レッサードラゴン×1
$192ホットビートル×1,レッサードラゴン×1,ドラグノン×1
$1A2バーンバルブ×2,レッサードラゴン×1
$1B2リキッドストロー×4,レッサードラゴン
$1C2レッサードラゴン×1,バーンバルブ×2,ホットビートル×2
$1D1リキッドストロー×7
$1E3アームストロング×1,バーンバルブ×7
魔王山・廃墟エリア / 魔王戦後 $D6:548B$D6:549A
ID回数敵パーティ
$281アヌビノフォビア×1
$291アラクノフォビア×1,バーンバルブ×2
$2A1アラクノフォビア×1,バーンバルブ×4
$2B1アヌビノフォビア×1,レッサードラゴン×1
$2C1エントモフォビア×1,リキッドストロー×1
$2D2ドラグノフォビア×1,レッサードラゴン×2
$2E1アラクノフォビア×1,レッサードラゴン×1
$2F2エントモフォビア×3
$301ドラグノフォビア×1,エントモフォビア×1
$311アヌビノフォビア×1,ドラグノフォビア×1
$321リキッドストロー×2,ドラグノン×2,エントモフォビア×1
$331アヌビノフォビア×2,レッサードラゴン×1
$341ドラグノフォビア×1,アラクノフォビア×2
$351ドラグノフォビア×2


このページをシェアする

上へ