~自己満足なデータをネットに放出する~
Welcome!
カテゴリ:「スーパーファミコン」 / Comments(1)
2013年12月16日

SFC版「三国志3」 登用の成功確率算出式

 スーパーファミコンの三国志3を解析して、人事コマンドの「登用」を実行した際に、それが成功する確率の算出方法を導きました。
 この記事では、その結果をご紹介して、ついでに私が解析の際に作った資料もアップします。

 当然ですが、SFC版以外では違った計算式の可能性がありますし、SFC版に関してもROMのバージョンが色々あるらしいので完全に適応できないかもしれませんし、そもそも何か間違ったり見逃したりしているかもしれません。
 それから、ここで紹介するのはプレイヤーが登用をする場合で、コンピュータ側が行う場合には、必ずしも同じ処理ではないかもしれません。奴らはよくチートをしますからね。

 あまり一般受けしないような小難しい話も出ますが、分からないところはスルーしてもらって問題ないです。

384 x 336 くらいで。SFCの、三国志3の画像です。軍師が大活躍!?


登用の成功確率と成否



 登用確率の計算は、コマンド実行画面で「人事」、「登用」を選択した後、対象武将や方法などを選択し、実行武将を選択した後(方法が「赴く」の場合はそれを選択した後)から、「使者を送りますか?」という確認が表示されるまでの間に行われます。
 なお、その際に計算された確率に基づいて、本当に成功するか否かを決めるのは乱数です。これは実行武将の選択か、「赴く」を選択するタイミングによって変化させられます。
 ちなみに、登用できるか否かが決まった後に、軍師が本当の事を言うか嘘を言うかの計算もなされるのですが、その処理までは解析してません。もう疲れました。


 なんにせよ、登用を実行するとき、「使者を送りますか?」という確認が(軍師のアドバイスと共に)表示されているときにはすでに、登用の成否が決まっているというわけです。
 ということは、メモリの内容を見れば、使者を送る前に成功するかどうかは分かる。そのアドレスが、「0008C0」あるいは「7E08C0」です。この内容が16進数表記で「01」なら成功、「00」なら失敗です。

 ただしこのアドレス、スタック領域として使われている部分なんですよ。簡単に言えば、いろいろな処理で使われる、しょっちゅう書き換えられる場所。
 ですから、「使者を送りますか?」という画面の間は登用成否が格納されていますが、それ以外の時には全く関係ない値が格納されています。例えば実際に登用をしてみると、コマンド待ち状態になるまでに、ここの値は激しく何回も書き換わっています。

 チートを良く使う人なんかは、「じゃあこの値を書き換えれば登用は絶対成功するんだろ?」なんて思うかもしれませんが、確かにそれは正しいです。ですが、値を固定してしまうと登用以外の部分で致命的な問題が起きます。間違いなく。
 ということで、一般的なエミュレータについている、メモリの値を固定してしまうようなチートは使えず、まあ言ってしまえば、「登用が必ず成功するようなチートコードは存在しない」ということが分かります。

 一応この登用成否は、軍師がいなくても、あるいはへっぽこ軍師でも、そのメモリの値を確認すれば、プレイヤー自身が完全軍師になったような気分が味わえる、ということのために使えます。


 一方で成功確率の方は、結局これもスタック領域に一時的に格納される値に過ぎない(チートに利用できない)ですし、本当に登用が成功するかを表すわけでもないため、ゲーム中の実用度としてはかなり薄いでしょう。
 このアドレスは「0008BC」や「7E08BC」です。ここには、16進数で「00」から「64」すなわち、10進数で0から100までの値が格納されます。それがそのまま、登用成功確率(%)となります。

 実際にこの成功確率だけで得られる情報というのは無いに等しいですが、その計算式が分かることで、登用しやすい条件は何か、どんな能力値が成功確率に関わって来るのか、といったことが分かるようになります。

 それでは、国内の武将を登用する場合と他国の武将を登用する場合に分けて、算出方法を述べます。


国内の武将を登用する場合



 武将の登用の際、例外的に考えないといけないのが埋伏の存在です。自国の領土に他国の埋伏武将がいて、それを登用しようとする場合には、100%の確率で成功します。
 ただし、自国に自国の埋伏武将がいる場合(?)は通常の確率が適用されます。そんなことになる状況はないと思いますが、処理上はそうなってるということで。

 国内の場合には、例外は他国の埋伏を登用しようとする場合だけです。それ以外は、次の式で確率を計算できます:

(β - α/2)*(110 - α) / (110 + γ*10)


 α,β,γについて説明します。

 まずαは、自国の君主と、登用対象の武将との、相性差です。
 相性値は10進数でいうと0から150までの数値です。0と150が等しい値になっている、ちょうど円の形をしたようなパラメータです。
 例えば相性値が51と32の武将の相性差は19、相性値が0と149の武将の相性差は1です。2武将の相性差が最も大きいのは、円の正反対の位置関係にある、75のときになります。

参考:三国志3 攻略Tips(「各能力値の意味」、「各武将の相性」などを参照のこと)
実際の値:三国志3 武将一覧


 次にβは、各方法ごとによって算出される値です。算出式は以下の表の通り。

コマンド名計算式
β = 100 - (相手武将の義理) + (相手武将の野望)*10
説得β = (使用武将の魅力) + (相手武将の魅力)/2
赴くβ = (相手武将の魅力) + 50
アイテムβ = (アイテムによる上昇忠誠度) * 15


 アイテムによる上昇忠誠度は以下のページをご覧ください。
三国志3 攻略Tips
 忠誠度について表記の無い青嚢書と玉璽に関しては、値は0です。

 最後にγですが、これは難易度に応じた値が入ります。初級が1、上級が2です。

 計算する際の注意点としては、割り算を行う際、小数点以下は毎回切り捨てます。
 また、(β - α/2)が負になる可能性がありますが、そうなった場合には値は0となります。負の確率にはなりません。
 最終的な計算結果が100を超えたとしても、確率は100%以上になりませんのでご注意ください。


 実際に例を挙げて計算してみましょう。
 凌操(魅力51、相性120、義理61、野望7)を対象として、孫堅(魅力87、相性125)陣営で実際に登用出来る確率を計算してみましょう。難易度は初級。この時点でα = 5と、γ = 1が決まりますね。

 例えば程普(魅力85)で「説得」を実行する場合。β = 85 + 51/2 = 85 + 25 = 110(イコールでつないでしまっていますが、途中で切り捨てが入っています)。α/2 = 2ですから、β - α/2 = 108。よって分子は、(β - α/2)(110 - α) = 108*105 = 11340。
 次に分母は、γ = 1なので120となり、求める確率は 11340 / 120 = 94(16進数に直すと「5E」)です。
 つまり孫堅陣営で、自領に在野として居る凌操を登用するのに、程普に説得させた場合は94%の確率で登用できます。

 黄蓋(魅力81)で「金」を行った場合はどうでしょう。
 βの値が変わります。凌操(相手武将)の義理が61、野望が7ですから、β = 100 - 61 + 7 * 10 = 39 + 70 = 109。
 あとは同様に、(β - α/2)*(110 - α) / (110 + γ*10) = (109 - 2)*(110 - 5) / (110 + 1*10) = 107*105/120 = 11235/120 = 93(16進数で5D)。

 同様に、「赴く」の場合はβ = 101となって確率は99*105/120 = 86(16進数で56)などと、計算できます。


他国の武将を登用する場合



 国内は比較的単純でしたが、他国の武将を登用する際には、様々な例外や条件があります。

 まず驚きの例外が、貂蝉。貂蝉は、他国の武将を登用できません。成功確率が0%です。
 というのは正確ではなく、実際には貂蝉の「顔グラ」にそういう効果があるという処理です。ほかに顔グラに特殊効果があると言えば呂布の武力上昇が知られていますが、貂蝉顔グラは登用できない、と。


 次に相手が埋伏の場合。
 これはまあわかりやすく、自国が送り込んだ埋伏武将を登用するのは100%成功、他国が送り込んだ埋伏武将を対象として登用しようとするのは、絶対に失敗。
 埋伏が寝返る条件は不明ですが、そうでなければ確実にいつでも送り込んだ武将を回収できる、というのは安心です。

 それから、これも良く知られた例外で、登用対象の武将が仕えている君主が血縁武将だった場合には、登用の成功確率は0%です。
 あるプレイヤーから「忠誠度0にしたったのに登用できない!」という悲鳴が出ていたことからも分かる、酷い仕様です。血縁は絶対に裏切らない、と。


 そして次に、大切な忠誠度の概念が出てきます。
 もしも登用対象の武将の忠誠度が95以上であるなら、その登用は諦めてください。絶対に、成功しません。同様に、対象武将の忠誠度が90以上で、かつ仕えている君主との相性差が2以下の時、登用の成功確率は0%です。
 逆に言えば、忠誠度94以下なら君主との相性が抜群に良くない限りは(相性差3以上ならば)、登用できる可能性がある。忠誠度が89以下なら、相性に関係なく登用できる可能性がある。

 ここまでの例外的な条件に該当しないで、登用できる可能性がある場合には、以下の式で成功確率を計算します:

(β - α/2)*(100 - δ) / (110 + γ*10)

 ここでα、β、γはそれぞれ、国内での登用のときと同じです。δは、登用対象の武将の忠誠度です。

 計算手順なども、ほとんど国内での登用のときと変わらないので、そちらを参照してください。


 そして最後に、もしも登用を実行する武将が君主なら(「赴く」実行時を含む)、計算した成功確率が1.1倍されます。正確には、以下の計算が行われます:
(君主で実行時の成功確率) = (成功確率)*110/100


 こうして、他国の武将を登用するときの成功確率が求まりました。


考察



 この計算式を見てみると、いろいろと面白い事実が分かるかと思います。

 例えば、国内での登用と他国での登用では、110-α と、100-δ という部分の違いがあります。
 単純に言えば、国内での登用では君主と武将の相性に重きが置かれています。一方で他国では、相性の影響もありますが、忠誠度が低い程登用しやすいということが言えます。

 さらに、実際の値を比較してみると、相性差は最大で75ですから、110-α は最低で35になり、忠誠度は(登用できる)最大が94なので、100-δ は最低6。ちなみに最高は、当然110と100。
 一般に、相性は武将の組み合わせによって様々な値を取り得ますが、忠誠度が極端に低い事はそこまで多くは無くて、せいぜい80程度でしょう。つまり、相性差よりも忠誠度の方が高い場合が圧倒的に多い。
 以上のことから、基本的には、国外での登用よりも国内での登用の方が、成功しやすい状況が多いかと予想されます。

 実際に成功確率をいろいろと見てみると分かりますが、国外の武将を登用する場合、確率はせいぜい数%といったところ。
 そうなると、君主を使って登用すると1.1倍とか言ったって、その効果は結局切り捨てられて意味が無い。10%を超えてこないと、意味が無いわけですから。



 また、武将間の相性が影響するとは言っても、実際に登用に行く武将の相性は全く考慮されず、君主と相手の相性だけが問題となっていることもポイントでしょう。

 そういった「武将の能力」について着目すると、βがいろいろと関わってくる。

 「説得」や「赴く」では相手武将の魅力が影響しますが、なんと相手武将の魅力が高い程、登用が成功しやすい。ただ漠然と、何か影響するのかな、と思っていた相手の魅力が、高いほど良いというのは、大きな発見でしょう。
 また「説得」では使用する武将の魅力が大きく関わるのに対し、「赴く」では君主の魅力は影響しません。「説得」は君主でも実行できることを考えると、これをうまく使いこなすことができます。

(君主の魅力) + (相手の魅力)/2 > 50 + (相手の魅力)

となるときに、説得の方が成功確率が高いわけで、これを君主の魅力について整理すると、

(君主の魅力) > 50 + (相手の魅力)/2

であれば、「説得」の方が効果が高いことが分かります。


 「金」を実行したときには相手武将の義理や野望が影響し、「アイテム」に至っては武将の能力が(βの値に関しては)影響しない。
 ということは、実は実行武将の魅力が影響するのは、「説得」を実行したときだけなんですね。魅力が低い武将ならば、相手次第では「金」を実行した方が良いのかもしれない。

 「金」に関しては計算式のとおりですが、ここで注意するべきは、かける金額に影響されない、という点。
 とは言っても、コマンドを実行すると自動で100の金が消費されますが。ただし、都市にある金が100未満1以上の時には、そこにある分の金しか消費されません。面倒ですが、支配都市が複数あるのであれば、金を節約して登用することができるでしょう。

 「アイテム」で特筆すべきは、その効果の高さです。もっとも効果の低いのは玉璽、青嚢書を除くと太平要術の書で、忠誠度の増加は11。しかしこれでも、15倍すれば165ですから、「説得」や「赴く」よりも必ず高い確率となります。
 ただし、義理が低くて野望が高い武将には、「金」の方が効果が高い場合があります。例えば呂布は義理が2、野望が15ですから、β = 98 + 150 = 248 となります。
 それでも、赤兎馬(呂布が所持)の次に忠誠度増加が高い、青釭の剣(忠誠度+19)を使えば、β=285となり、「金」よりも効果が高いです。
 ただ、アイテムの中でも玉璽と青嚢書は、そもそも選択できるのか知りませんが、使っても忠誠度増加が0ですから、β = 0になり、必然的に登用の成功確率は0%となります。


おわりに



 そもそも、なぜこのような事をやろうと思ったかというところですが、正直に言うと、ただの好奇心です。

 普通にゲームをプレイしていたのですが、軍師があまりにも不甲斐なく、ふざけるな!と怒って、なんとか私自らが完全軍師になる方法はないものか、と思いつつチートコードのサーチ機能で「7E08C0」を見つけ。
 ついでにいろいろ見てみると、乱数があり、乱数に16進数で3039を足した値があり、「なんだこれは! どうやって成否を決めてるんだ!」と、いろいろなメモリを見てその処理を解明してやろう、と思った挙句に挫折し。
 と言っても諦めるに諦めきれずにいろいろ調べると、アセンブリ言語を読めばよい(なんと簡単な!)ということが分かり、チマチマと読んでここまでたどり着いた、というわけです。

 最終的には、私の好奇心が満たされたので満足です。知りたかったのは、どんなステータスが、どういうふうに影響しているのか、ということでしたからね。

 かといって、ただ好奇心を満たすだけで封印するのも惜しい情報なので(ネットを探してもこんな計算式はどこにも書いていない)、せっかくブログをやっているんだから、とここで公開したわけです。


 ただ、当然ですが私が壮大な嘘をぶちまけているだけかもしれませんのでご注意を。
 まあ疑う人は、色々と検証してみると良いかと思います。ただ、本気でやろうとすると、アセンブリを読むか、もしくは気の遠くなるような回数の実験を行わないといけなくなります。



 ここで、私が今回の解析のために作った資料を、公開しておきます。xslxファイルです。
 主に、サブルーチンのフローチャートです。面倒なのでかなり矢印を省略してますが、基本的には上から下に流れてます。分岐は大抵右下へ。
 数も多いのでぐちゃぐちゃですし、省略していたり、不正確な表記をしているところが数々ありますが、勘弁してください。何か指摘をされても、多分私は直しませんので。

 もし本気で使いたい人がいたとしても、参考程度に考えてください。ちゃんとアセンブリ読んでね。
 それから本気で使いたいわけでは無い人、特に「日本語でおk」状態の人は、ファイルを見ない方が良いかもしれません。まあ、見たら見たで楽しいと思いますけどね。

 ファイルはこちらから。
http://raitarou.web.fc2.com/touyou_flowchart.xlsx (直リンク注意)


 一応、ここで紹介した計算式の根拠は、このファイルということでよろしくお願いします。



 最後にもう一つ。
 プレイの時、そして今回の解析の際に参考にしている、していた、攻略サイトへの感謝を込めて。

KOEI 三国志まとめサイト

三国志3 SFC 徹底解析 - 三国志3のこと

三国志III

三國志III攻略





今日の動画



 三国志3ってスピードランが無いですよね。まあ、やろうとしたら曹操勢でコンピュータ任せ、が操作終了最速なんだろうけど。




こんなもん、クリックしないでいいですよ。
人気ブログランキングへ

FC2 Blog Ranking

関連記事

─ ページ先頭に戻る ─


コメント
ありがとうございました。
いまさらながら三国志IIIやっていて、このブログにたどり着きました。とても参考になります。
2016/04/25(月) 09:19 | URL | ぼう #8rQLDxkE[ 編集]
コメントの投稿
管理者にだけ表示を許可する
シンプルアーカイブ


 今年以前のアーカイブは年単位で表示され、クリックすると開きます。

ブログパーツ

クリックすると同ウィンドウでページが開いてしまうのでご注意ください。

enquete.mrkx.biz

特に意味の無いアンケート。
文字が小さいのは勘弁してださい。
内容は時々更新するかもね!

訪問者数
!--nextpage-- l