特殊ルールの追加・伝播・廃止
Tweet Follow @Squall_marisa
・現在PC版・Remastered版のデータのみの確認となっていますが、主なデータはPS1版に対応しています。
特殊ルールの追加(QoC)
カードクイーン(以下QoC)に30,000ギルを支払うと、新しい特殊ルールを現在のエリアに追加します。
追加順は以下の通りとなります。既に存在する特殊ルールの場合、スキップされます。
オープン |
---|
↓ |
セイム |
↓ |
プラス |
↓ |
ランダムハンド |
↓ |
サドンデス |
↓ |
ウォールセイム |
↓ |
エレメンタル |
特殊ルールの伝播・廃止
特殊ルールの伝播・廃止はとても複雑となっております。ここでは分かり易い様解説しますが、不明な点や改善点がありましたらX(旧Twitter)までよろしくお願いいたします。
解説するにあたり、複数の変数や用語(管理者命名)を使用するた為、一覧をまとめておきます。
各項目でも紹介します。
変数・用語一覧
・QoC:カードクイーン
・特殊ルール:各エリアに設定されている特殊ルール。オープン、セイム、プラス、ランダムハンド、サドンデス、ウォールセイム、エレメンタルの7種類がある。詳細はこちらで。
・トレードルール:カードゲーム勝敗時のカード取得枚数のルール。ワン、ディフ、ダイレクト、フルの4種類がある。詳細はこちらで。
・変数272:バラムの特殊ルール
・変数273:ガルバディアの特殊ルール
・変数274:トラビアの特殊ルール
・変数275:セントラの特殊ルール
・変数276:ドールの特殊ルール
・変数277:F.H.の特殊ルール
・変数278:宇宙の特殊ルール
・変数279:エスタの特殊ルール
・変数280:バラムのトレードルール
・変数281:ガルバディアのトレードルール
・変数282:トラビアのトレードルール
・変数283:セントラのトレードルール
・変数284:ドールのトレードルール
・変数285:F.H.のトレードルール
・変数286:宇宙のトレードルール
・変数287:エスタのトレードルール
・変数288:最期にカードゲームを行ったエリアの特殊ルール
・変数289:最期から2つ目にカードゲームを行ったエリアの特殊ルール
・変数290:最期にカードゲームを行ったエリア
・変数291:最期から2つ目にカードゲームを行ったエリア
・変数292:今回のカードゲームで使用する特殊ルール
・変数292:今回のカードゲームで使用する特殊ルール
・変数293:今回のカードゲームで使用するトレードルール
変数に格納されている値について
特殊ルール
特殊ルールが格納されている変数には、1つの値しか格納されていませんが、各特殊ルールを8ビットに割り当て管理しています。
オープン | 1 |
---|---|
セイム | 2 |
プラス | 4 |
ランダムハンド | 8 |
サドンデス | 16 |
オープン | 32 |
ウォールセイム | 64 |
エレメンタル | 128 |
例えばガルバディアの特殊ルールが、[オープン・セイム・エレメンタル]だとします。
この場合、変数273(ガルバディアの特殊ルール)に、[ 1 + 2 + 128 ]の131の値が格納されていることになります。
トレードルール
トレードルールは複数のルールが存在する事はありませんので、以下の表の値が格納されています。
ワン | 1 |
---|---|
ディフ | 2 |
ダイレクト | 3 |
フル | 4 |
フィールド乱数について
特殊ルールの伝播・廃止について語るのであればこちらも知る必要があります。
乱数については、ほぼ全てゲームに含まれているかと思いますのでご存じかと思いますが、FF8では0~255の256通りが使用されます。
FF8では、エンカウント判定等に使用される「乱数テーブル」、主にカードゲームの内容に使用される「カード乱数」、フィールド中のNPCの動き等を決定する「フィールド乱数」があります。
今回使用する乱数は「フィールド乱数(以下乱数)」になります。
乱数はゲーム開始時 or セーブデータロード時に0から始まりますが、ゲームのハードにより異なります(下記参照)。
乱数の値は疑似乱数と呼ばれ、ほぼ全てのゲーム・ソフトウェアは疑似乱数です。
FF8のフィールド乱数は線形合同法が用いられている。
詳しい計算内容については資料を紛失した為、先駆者の内容を引用します。
フィールド乱数の元になる「乱数の状態」は、乱数の状態をXとおいてその初期値を1とする漸化式「Xn+1 = (Xn * 0x41c64e6d + 0x3039) mod 0x100000000」で計算される。
そしてこの乱数の状態Xから「((X / 0x10000) mod 0x8000) mod 0x100」として計算された0~255の値がフィールド乱数として用いられる。これは乱数の状態Xの上位9~16bitにあたる。
出典:pingval氏
乱数表(Remastered版)
乱数は上記計算式で決まっています。
PS版・PC版におけるフィールド乱数の扱い
PS版はハードの電源を切るハードリセット、PC版はゲームの再起動で乱数がリセットされ、ソフトリセットの場合は乱数がリセットされません。
ソフトリセット時に乱数がリセットされない事がかなり重要になります。
Remastered版におけるフィールド乱数の扱い
Remastered版にソフトリセットはありません。
メニューの「しゅうりょう」は、ソフトリセットに見えても実際はハードリセットと同じ効果を持ちます。
ソフトリセットの手段が無い事が、既存の方法で特殊ルールを廃れさせる事は出来ません。
特殊ルールの廃れさせる条件
特殊ルールの廃れさせる方法には2種類の条件があります。
その条件とは、廃れさせたいエリアの特殊ルールが
全てあるか、一部ある場合です。
全てある状態はほとんど無いと思いますが、廃れさせるのはとても簡単です。
殆どの方は一部の特殊ルールから一部の特殊ルールを廃れさせたい方かと思いますが、伝播以上に複雑となります。
カードゲーム時に行われている処理
特殊ルールの廃れ方(フローチャート)
簡潔に作成したつもりですが、特殊ルールの伝播・廃れる処理のフローチャートになります。

処理内容
main_pre_process
まず、□ボタンにて話しかけた時、内部ではmain_pre_processと言う処理が行われます。
ここでは、最期・最後から2つ目にカードゲームを行ったエリアの特殊ルールの中に、現在のエリアの特殊ルールに含まれていない特殊ルールがあるか確認します。
確認し、現在のエリアの特殊ルールに含まれていない特殊ルールがあれば、特殊ルールを混ぜるよう提案してきます。
プログラム的には以下の通りになると思います。
(現在のエリアの特殊ルール | 最後・最後から2つ目にプレイしたエリアの特殊ルール) != 現在のエリアの特殊ルール
最期・最後から2つ目にカードゲームを行ったエリアの特殊ルールと言っていますが、本当は最後のエリアか最後から2つ目のエリアのどちらかになります。
この部分は乱数を1つ消費し、乱数の値が64未満かどうかで判断される為、ここでは最後・最後から2つ目と記載し、実際に特殊ルールを廃れさせる場合には、どちらも同エリアになるよう調整します。
ここをクリアしなければ、特殊ルールの伝播・廃れは発生しません。
また、プログラムの処理には、"乱数 < 255"の場合特殊ルールの伝播・廃れを発生させるとなっており、1/256(約0.39%)の確率で実行されない場合がありますが、今回は影響ありませんでした。
main_pre_processでは、乱数が最低1つ消費され、廃れさせたいエリアの特殊ルールが一部の場合、乱数が2つ消費されます。
XXX_maesyori
まだカードゲームは行われません。
次はトレードルールの処理を行いますが、こちらは特殊ルールの廃れるさせる方法に影響しない為、無視します。
一応トレンド値の処理時に他のエリアに現在のエリアのトレードルールを伝播させるのに影響します。
今回は、現在のエリアにQoCがいる場合、乱数を1つ消費します。QoCがいない場合は影響しません。
QoC
カードゲームまでもう少しです。
次はQoCとカードゲームを行う時にのみ発生します。
それはトレードルールの変更です。
乱数を1つ消費し、現在のトレードルールを元に、別のトレードルールへ変化させたりさせなかったりします。
QoCとカードゲームを行う場合、乱数を1つ消費します。QoC以外とカードゲームを行う場合、QoCが現在のエリアにいても影響しません。
カードゲームの選択肢
ここでついにカードゲームを行うかの選択肢が発生します。
ここで拒否すれば特殊ルールの変動は行われません。
main_rule_process
カードゲーム後には特殊ルールの変動があります。
main_rule_processと言う処理で実行されます。
まず最初に、現在のエリアの特殊ルールが全て存在するか確認し、全て存在する場合、特殊ルールを廃れさせる処理を行います。
乱数を1つ消費し、どの特殊ルールが廃れるかを決定します。
乱数を32で割った商を利用し特殊ルールを以下の表のとおり決定します。
オープン | 0 |
---|---|
セイム | 1 |
プラス | 2 |
ランダムハンド | 3 |
サドンデス | 4 |
オープン | 5 |
ウォールセイム | 6 |
エレメンタル | 7 |
確率は均等に25.00%となっております。
ちなみに、プログラム上MOD関数と記載されていた為、余りを使用すると思っていましたが、実際は商を使用していました。
現在のエリアの特殊ルールに全ての特殊ルールではなく、一部の特殊ルールのみの場合、次の処理となります。

カードゲーム挑戦前に、main_pre_processで特殊ルールを混ぜると言われている。
"乱数 < 255"の場合特殊ルールの伝播・廃れを発生させる処理の部分ですね。
次に乱数を1つ消費し、余りから特殊ルールを決定します。上記の表を参照してください。
ここから分岐処理となりますが、決定された特殊ルールが、最期・最後から2つ目にカードゲームを行ったエリアの特殊ルールに含まれており、現在のエリアの特殊ルールに含まれていなければ、現在のエリアの特殊ルールに追加されます。
なので、ここでは最期・最後から2つ目にカードゲームを行ったエリアの特殊ルールに含まれていない特殊ルールか、現在のエリアの特殊ルールに含まれている特殊ルールを選択する必要があります。

この分岐処理を計3回行います。
ですので乱数を3つ消費し、3回の伝播の判定を行います。
3回の伝播を乗り越えた上で、3回目の特殊ルールが廃れさせたい特殊ルールでなければいけません。
なおかつ次の乱数が128未満で廃れさせることが出来ます。
まとめ(全ての特殊ルールがある場合)
main_pre_process | 乱数 < 64で最期にプレイしたエリアと特殊ルールを最後から2つ目にプレイしたエリアと特殊ルールにする 乱数:消費1 |
---|---|
XXX_maesyori | 現在のエリアにQoCがいる場合、<90でトレードルールの処理 乱数:消費1 |
QoC | QoCとカードゲームを行う時に発生。トレードルールの処理 乱数:消費1 |
カードゲーム | |
main_rule_process | 乱数 < 64で特殊ルールを廃れさせる処理へ |
sub_get_bit_decide | 乱数÷32で廃れさせる特殊ルールを決定する |
まとめ(一部の特殊ルールがある場合)
main_pre_process | 乱数 < 64で最期にプレイしたエリアと特殊ルールを最後から2つ目にプレイしたエリアと特殊ルールにする 乱数:消費1 |
---|---|
main_pre_process | 乱数 < 255で特殊ルールを混ぜるフラグを立て、特殊ルールを混ぜる発言をする。今回の乱数調整では問題なし 乱数:消費1 |
XXX_maesyori | 現在のエリアにQoCがいる場合、<90でトレードルールの処理 乱数:消費1 |
QoC | QoCとカードゲームを行う時に発生。トレードルールの処理 乱数:消費1 |
カードゲーム | |
sub_get_bit_decide | 乱数÷32で廃れさせる特殊ルールを決定、伝播の確認を行う |
sub_get_bit_decide | 乱数÷32で廃れさせる特殊ルールを決定、伝播の確認を行う |
sub_get_bit_decide | 乱数÷32で廃れさせる特殊ルールを決定、伝播の確認を行う |
main_rule_process | 最期に決定された特殊ルールを廃れさせる条件を満たしていれば、乱数 < 128で特殊ルールを廃れさせる |
特殊ルールを廃れさせる
(Remastered版)
かなり長くなりますので、以下のリストより目的のページに飛んでください。
各エリアにおける条件について
全てのエリアにて、全ての期間内に特殊ルールを狙って廃れさせる方法は調査していません。
バラム | バラムガーデンが移動してから、イデア(3回目)戦まで |
---|---|
ガルバディア | ティンバーに行けるようになってから、アデル戦まで |
トラビア | トラビアガーデンに出発するイベント後から、アデル戦まで |
セントラ | ウィンヒルに行けるようになってから、アデル戦まで |
ドール | ドールに行けるようになってから、アデル戦まで |
F.H. | F.H.に行けるようになってから、アデル戦まで |
宇宙 | QoCいる場合:エスタ到着後、宇宙に行く事になるまで。宇宙帰還後、アデル戦まで QoCいない場合:宇宙帰還後、アデル戦まで |
エスタ(月の涙前) | エスタ到着後、月の涙発生まで |
エスタ(月の涙後) | 月の涙発生後、アデル戦まで |
セーブポイントの場所
セーブポイントは各エリアによって異なります。
特殊ルールに関係なく統一の場所ですのでここで一覧を記載します。
バラム | ワールドマップ(移動済バラムガーデンの近く) |
---|---|
ガルバディア | ティンバー・市街⑨(隠しポイント発見必要) |
トラビア | トラビアガーデン・教室①(トラビアガーデンイベント発生以降) |
セントラ | ウィンヒル・エルオーネの家2F |
ドール | ドール・パブ2F(隠しポイント発見必要) マスターにカードゲームで勝利し、ドール・プライベートルームに行く事ができる |
F.H. | F.H.② |
宇宙 | ワールドマップ(ティアーズポイントの近く) |
エスタ(月の涙前) | エスタ・市街③ |
エスタ(月の涙後) | ワールドマップ(ティアーズポイントの近く・ラグナロク必要) |
最期・最後から2つ目にカードゲームを行ったエリアを特定のエリアにする方法
特殊ルールを廃れさせる為には、最期・最後から2つ目にカードゲームを行ったエリアを目的の特殊ルールがあるエリアにしなければなりませんが、迂闊にカードゲームを行うと、特殊ルールの伝播・廃止が発生してしまうかもしれません。
こちらの特殊ルールを変更せずにカードゲームを行うのページでは、乱数調整により特殊ルールを変更せずカードゲームを行う方法を記載しています。