ダビスタ96 完全解析

ダビスタ96の産駒能力決定について

生産の流れ

生産の流れ順にを追いながら、数値の決定を見ていく。

繁殖牝馬の能力

繁殖牝馬の能力は、血統を別にするとスピードとスタミナである。
初代牝馬の場合は牝馬ごとの固定値である。(例:パリティビット SP94 ST86)
自家生産の場合は、SPは現役時代の限界値、STはスタミナと気性の限界値のうち低い方に さらに父の距離適性による補正が掛かったものになる。
このあたりは周知のものかと思われるのでひとまず割愛する。

種付けから誕生まで

種付け時に、父母の情報が胎児用のアドレスに格納される。
1頭目の場合、代表的な数値は以下の位置に格納される。
内容 アドレス 備考
繁殖牝馬SP 0x7E1D8C
繁殖牝馬ST 0x7E1D8D
種牡馬距離適性 0x7E1DB3 距離適性ページで解説
種牡馬ダート適正 0x7E1DB4 0:◎ 1:〇 2:△
種牡馬成長 0x7E1DB5 0:早熟 1:普通 2:晩成 3:持続
種牡馬気性 0x7E1DB6 0:A 1:B 2:C
種牡馬底力 0x7E1DB7 0:A 1:B 2:C
種牡馬健康 0x7E1DB8 0:A 1:B 2:C
種牡馬実績 0x7E1DB9 0:A 1:B 2:C
種牡馬安定 0x7E1DBA 0:A 1:B 2:C
また、毎フレーム高速で変化している変数が種付けのタイミングで 繁殖牝馬用のアドレスに保存され、
誕生時に産駒用のアドレスにコピーされると共に能力決定時に乱数シードとして代入される。
そのため、種付けのタイミングをずらすと産駒の能力が変化する。
以下は1頭目の繁殖牝馬、1頭目の産駒の場合の例である。
内容 アドレス 備考
カウンタ下位 0x7E209A 毎フレーム+1
カウンタ上位 0x7E209B
乱数保存領域(繁殖)下位 0x7E3134 種付け→誕生
乱数保存領域(繁殖)上位 0x7E3135
乱数保存領域(産駒)下位 0x7E2AF4 誕生時以降
乱数保存領域(産駒)上位 0x7E2AF5

性別・毛色の決定

性別と毛色の決定には種付けのタイミングで保存された乱数シードは使われず、 出産時にメイン乱数アドレス0x7E1600(下位), 0x7E1601(上位) に元々入っていた値で 判定が行われる。
このため、種付けタイミングの変化では性別や毛色のコントロールは不可能であり、 別の手段(ビデオ再生やセリ市参加、入厩馬の調教など)で乱数を変化させないと 変更することができない。

基礎値の算出

次に、繁殖牝馬の能力(SP,ST)と種牡馬の距離適性・実績によって産駒の能力値の基本となる数値 = 基礎値が算出される。
距離適性による補正は少々複雑なので個別ページで解説するが、基本的に(産駒が牡馬の場合の)基礎SP,基礎STの合計は 繁殖牝馬のSP,STの合計に一致し、距離適性は配分バランスのみをコントロールする要素になっている。
距離適性の補正をかけられた後、牝馬のスタミナには約1/8のペナルティが課される。
若干複雑な式で、たまに牡のSTが1上がると牝のSTが1下がったり変な挙動をするが、おそらくこれは1/8 の計算を ビット演算にすることで効率化したが、そこに四捨五入を入れようとした際のプログラムミスである。(8で割った余りが4以上の時に1増やすはずが逆になっている)
ST(牝) = ST - ( ST/8 + 1 - (ST/4)%2 )
最後に実績による最大値制限をかけたものが基礎値となる。
基礎SP,ST共に実績による基礎値上限に達した状態が、従来からTSL と呼ばれていた状態である。
実績 基礎値上限
A 105
B 95
C 85

ベスト馬体重の計算

ここまでは配合で決まる確定的な計算であったが、ここから乱数を用いた能力決定が始まる。
産駒乱数シードの代入後に、最初の乱数呼び出しが行われるのがベスト馬体重の計算である。
まず DS96rand(100) で0-99 の乱数を取得し、以下の換算表に基づいて馬体重index を計算する。
馬体重index 乱数値(0-99) 出現率[%]
0 0-0 1
1 1-1 1
2 2-3 2
3 4-6 3
4 7-11 5
5 12-19 8
6 20-30 11
7 31-44 14
8 45-59 15
9 60-73 14
10 74-83 10
11 84-90 7
12 91-94 4
13 95-97 3
14 98-98 1
15 99-99 1
これは平均8付近で、幅3程度の正規分布(ガウス分布)を疑似的に再現するような形になっている。
次に5倍して0-4の乱数を加える。
馬体重(計算途中) = 馬体重index * 5 + DS96rand(5)
牝の場合のみ、この時点で1/8減らす(ここでも四捨五入バグあり)。 0の場合は例外的に-1になる。
馬体重(計算途中,牝) = 馬体重 - (馬体重/8 - (馬体重/4)%2)
最後に67を加えて馬体重の内部数値になる。実際の表示値はこれを2倍して256を足したもの。
馬体重(内部値) = 馬体重 + 67
最終的なベスト馬体重の最小値は 牡馬 390kg(67), 牝馬 388kg(66)
最大値は牡馬 548kg(146), 牝馬 532kg(138) になる。

成長型の決定

成長のタイプに関しては、1バイトの情報の中にスピード・気性の初期値を決める成長型と
スピードの成長制限や衰え始める時期(X月)を決めるパラメータの2種類が同居している。
具体的には8で割った整数値が成長型であり、8で割った余りがX月の情報を表す。
まず、成長型から計算が行われる。
種牡馬の成長タイプから成長index の初期値が次のように決まる。
種牡馬(父) 早熟・持続 普通 晩成
成長index 0 3 6
後の計算で分かるが、持続型というのは「比較的X月の遅い早熟型」に他ならない。
ここに以下の各種補正がかかる。
  • ベスト馬体重内部数値97(450kg)以上で +1
  • ベスト馬体重内部数値122(500kg)以上でさらに +1
  • 牝の場合 -1
  • 晩成化インブリードがある場合 +1
  • 早熟化インブリードがある場合 -1
「大きな馬なので仕上げるのに時間がかかる」概念が計算にもしっかり反映されている。
牝はindex が1小さくなる上に馬体重もやや軽いため、牡より早熟傾向になる。
晩成化と早熟化は複数本あっても1つだけ有効、晩成・早熟双方ある場合は相殺する。
早熟化2本、晩成化1本なら本数の多い早熟化が有効になる。
ここまでで、成長index が0未満なら0、8より大きいなら8へと制限される。
最後にDS96rand(100) で0-99 の乱数を取得し、以下の表に基づいて成長型を決定する。
成長index 超早熟(0) 早熟(1) 普通(2) 遅普通(3) 晩成(4) 超晩成(5) バグ(10)
0 0-49(50%) 50-85(36%) 86-95(10%) 96-99(4%) - - -
1 0-47(48%) 48-79(32%) 80-91(12%) 92-97(6%) 98-99(2%) - -
2 0-39(40%) 40-67(28%) 68-85(18%) 86-95(10%) 96-99(4%) - -
3 0-9(10%) 10-23(14%) 24-59(36%) 60-91(32%) 92-99(8%) - -
4 0-5(6%) 6-15(10%) 16-49(34%) 50-83(34%) 84-93(10%) 94-99(6%) -
5 0-1(2%) 2-9(8%) 10-39(30%) 40-69(30%) 70-89(20%) 90-99(10%) -
6 - 0-5(6%) 6-17(12%) 18-33(16%) 34-69(36%) 70-99(30%) -
7 - 0-1(2%) 2-11(10%) 12-25(14%) 26-63(38%) 64-97(34%) 98-99(2%)
8 - - 0-7(8%) 8-21(14%) 22-61(40%) 62-99(38%) -
X月の計算のために、再度DS96rand(100) で0-99 の乱数を取得し、既に上で決定した成長型から
以下の表に基づいてX月を決定する。
ただし、種牡馬(父)の成長型が持続の場合は実際の産駒の成長型より1つ下の段を判定に用いる。
(例:持続種牡馬から生まれた超早熟馬のX月分布は、通常の早熟馬のX月分布と一致する)
成長型 4歳3月(0) 4歳5月(1) 5歳5月(2) 6歳3月(3) 7歳1月(4) 7歳7月(5)
超早熟 0-39(40%) 40-71(32%) 72-87(16%) 88-95(8%) 96-99(4%) -
早熟 - 0-15(16%) 16-57(42%) 58-91(34%) 92-99(8%) -
普通 - - 0-29(30%) 30-69(40%) 70-89(20%) 90-99(10%)
遅普通 - - - 0-49(50%) 50-79(30%) 80-99(20%)
晩成 - - - 0-4(5%) 5-74(70%) 75-99(25%)
超晩成 - - - - 0-49(50%) 50-99(50%)
バグ 0-44(45%) 45-79(35%) 80-99(20%) - - -

スタミナ限界値の計算

次に行われるのはスピードではなくスタミナの計算が先である。
計算は、冒頭で述べた基礎ST(繁殖能力・距離適性・種牡馬実績より算出、牝は1/8ペナルティ)
を初期値にしてスタートする。

三代同系配合の場合、以下のアップ判定が一切行われずに基礎STから1を引いた値で
後述の安定ペナルティのところまで計算がスキップされる(乱数呼び出しも行われない)。
実績 底上げ制限値
A 95
B 85
C 75
種牡馬の実績による底上げ制限値(基礎値上限-10)より基礎STが十分低い場合、
ランダム上昇幅が広がり、底上げ制限値までは比較的容易に上昇するチャンスがある。
これによって繁殖牝馬の能力が低めな時にも種牡馬実績の影響が生まれている。
乱数幅は最低でも8は保証される。
乱数幅 = 底上げ制限値 - 基礎ST
乱数幅 = MAX(乱数幅, 8)
そして、高い値が出にくい2重の乱数を生成してスタミナに加算する。
(例: 乱数幅10の時、最大の+9が出る確率は1/10*1/10 = 1/100)
ST = 基礎ST + DS96rand( DS96rand(乱数幅) + 1 )

スタミナ爆発

種牡馬の安定度は、爆発力とでも言うべき数値に反映される。
安定 爆発力
A 20
B 25
C 30
さらに下記の補正が加わる
  • ニックス配合の場合 +4
  • スタミナUPインブリード1本につき +4
DSrand96(50)によって0-49の乱数を取得し、これが爆発力未満である限り以下の処理が繰り返される。
面白配合 非面白配合
爆発制限値125 117
[確定で1加算]
 ST = ST +1
[ランダム値加算]
 乱数幅 = 底上げ制限値 - ST
 乱数幅 = MAX(乱数幅, 8)
 ST = ST + DS96rand( DS96rand(乱数幅) + 1 )
[STが爆発制限値を超えた場合、次の継続判定を行わず終了]
[DS96rand(50)と爆発力を比べて継続判定]
つまり非ニックス、アウトブリード、安定A (爆発力20)なら40%の確率で
ニックス、STクロス2本、安定C (爆発力42)なら84%の確率で何度でもランダム上昇が繰り返される。
この時点での最大値は爆発制限値+8 (ギリギリで継続して最後に+8上昇を引く)。
ST = ST - 4
ST = MAX(ST, 15)
ここで固定で4が引かれ、15未満なら15に補正される。
安定 ペナルティ
A 10
B 20
C 30
安定度が低いと爆発力が増すが、その代償のペナルティを最後に支払う。
STが極端に低い場合を除き、安定Aなら0-9, 安定Cなら0-29 がランダムに引かれる形になる。
乱数幅 = MIN(ST, ペナルティ)
ST = ST - DS96rand(乱数幅)
これで産駒のST限界値が確定する。
最大値は、爆発制限ギリギリ→継続して+8→安定ペナルティが0 の場合で
非面白で121, 面白で129 となる。

スピード限界値の計算

計算は、スタミナと同様に冒頭で述べた基礎SP(繁殖能力・距離適性・種牡馬実績より算出)
を初期値にしてスタートする。
以下には全計算過程を記述するが、基本的に爆発力の計算以外はスタミナの場合と同様である。
三代同系配合の場合、以下のアップ判定が一切行われずに基礎SPから1を引いた値で
後述の安定ペナルティのところまで計算がスキップされる(乱数呼び出しも行われない)。
実績 底上げ制限値
A 95
B 85
C 75
最低8は保証される乱数幅を計算。
乱数幅 = 底上げ制限値 - 基礎SP
乱数幅 = MAX(乱数幅, 8)
2重の乱数でスピード加算。
SP = 基礎SP + DS96rand( DS96rand(乱数幅) + 1 )

スピード爆発

種牡馬の安定度は、爆発力とでも言うべき数値に反映される。
安定 爆発力
A 20
B 25
C 30
さらに下記の補正が加わる。
慣例的にダブルアップと言われているスピード◎のクロスは実は1.5本分。ニックスよりもやや効果が小さい。
ニックスは、健康度を別にするとSPクロス2本 + STクロス1本 の効果と全く同等である。
  • ニックス配合の場合 +4
  • スピードダブルUP(スピード◎)インブリード1本につき +3
  • スピードUPインブリード1本につき +2
DSrand96(50)によって0-49の乱数を取得し、これが爆発力未満である限り以下の処理が繰り返される。
面白配合 非面白配合
爆発制限値125 117
[確定で1加算]
 SP = SP +1
[ランダム値加算]
 乱数幅 = 底上げ制限値 - SP
 乱数幅 = MAX(乱数幅, 8)
 SP = SP + DS96rand( DS96rand(乱数幅) + 1 )
[SPが爆発制限値を超えた場合、次の継続判定を行わず終了]
[DS96rand(50)と爆発力を比べて継続判定]
スピードクロスは1本当たりの効果はスタミナクロスより小さいが、本数を稼ぎやすい。
有名なオオシマナギサ×マチカネイワシミズ配合の場合
SPWx5, SPx2, 安定Cで爆発力49となり98%で判定継続するため高確率で爆発制限値(117)まで到達する。
(安定ペナルティ適用後 84~121に収まる)
SP = SP - 4
SP = MAX(SP, 15)
ここで固定で4が引かれ、15未満なら15に補正される。
安定 ペナルティ
A 10
B 20
C 30
安定度が低いと爆発力が増すが、その代償のペナルティを最後に支払う。
SPが極端に低い場合を除き、安定Aなら0-9, 安定Cなら0-29 がランダムに引かれる形になる。
乱数幅 = MIN(SP, ペナルティ)
SP = SP - DS96rand(乱数幅)
これで産駒のSP限界値が確定する。
最大値は、爆発制限ギリギリ→継続して+8→安定ペナルティが0 の場合で
非面白で121, 面白で129 となる。

勝負根性限界値の計算

次に勝負根性の計算を行う。
まず種牡馬(父)の底力パラメータによって基準値(KJ_B)が決定される。
母父が種牡馬として存在しない馬であったり、パスワードでのみ出現する種牡馬なら、
父のパラメータだけによって40~60の範囲で決定される。
母父が基本の種牡馬や持ち込み海外種牡馬の場合は、母父の底力パラメータも参照して
30や70になることがある。
これは初代繁殖牝馬でも例外ではなく、例えばサブリナシューズ(ノーザンテースト[底A]の仔)や
サヨナラ(ヌレイエフ[底A]の仔)に底力Aの種牡馬を配合すれば基準値70になる。
底力 根性基準値(KJ_B)
A かつ 母父A 70
A 60
B 50
C 40
C かつ 母父C 30
面白配合の場合は基準値以上が確定する。
非面白配合の場合、DS96rand(2) で0か1かの乱数を取得し、0なら基準値以下の処理に
1なら面白配合と同じ基準値以上の処理に移る。
面白配合の場合、この乱数処理を無視するのではなく乱数取得自体が行われないので乱数の呼出回数もずれる。

底力インブリードの数え方

底力UPインブリードを+1本, 底力DOWNインブリードを-1本 として合計した本数を使う。
なお、効果があるのは+2本まで(+6本まで試したが+2本と同じ効果)、マイナスは-1本まで。
超危険配合の場合、強制的に-1本に固定される。

基準値以下の処理 (非面白かつ乱数=0)

まず、一時的なランダム値を取得する。
ランダム値(KJ_R) = DS96rand(根性基準値)
次に、3通りの計算モードを切り替えるための乱数(0-2)を取得する。
根性モード = DS96rand(3)
根性基準値(KJ_B)、ランダム値(KJ_R)、底力インブリード本数によって
以下の表の通りに根性限界値が決定される。
底力インブリード モード=0モード=1モード=2
+2本以上 KJ_B/2 + (KJ_R+2)/2 KJ_B/2 + (KJ_R+1)/2 KJ_B/2 + (KJ_R+1)/2
+1本 1 + KJ_R KJ_B/2 + (KJ_R+2)/2 KJ_B/2 + (KJ_R+2)/2
0本 1 + KJ_R 1 + KJ_R KJ_B/2 + (KJ_R+2)/2
-1本以下 1 + KJ_R 1 + KJ_R 1 + KJ_R
モード値やインブ本数が大きいと、基準値の半分~基準値の間に分布するように、
そうでない場合は1~基準値で一様に分布するようになっている。
ほぼ同じ計算なのにインブリード本数によって四捨五入部分が異なるのは複雑だが、何故かはわからない。

基準値以上の処理 (面白または非面白かつ乱数=1)

一時的なランダム値を取得する。ここで根性最大値は牡馬の場合100, 牝馬の場合80
ランダム値(KJ_R) = DS96rand(根性最大値 - 根性基準値)
次に、3通りの計算モードを切り替えるための乱数(0-2)を取得する。
根性モード = DS96rand(3)
根性基準値(KJ_B)、ランダム値(KJ_R)、底力インブリード本数によって
以下の表の通りに根性限界値が決定される。
底力インブリード モード=0モード=1モード=2
+2本以上 KJ_B + KJ_R KJ_B + KJ_R KJ_B + KJ_R
+1本 KJ_B + KJ_R KJ_B + KJ_R KJ_B + (KJ_R+1)/2
0本 KJ_B + KJ_R KJ_B + (KJ_R+1)/2 KJ_B + (KJ_R+1)/2
-1本以下 KJ_B + (KJ_R+1)/2 KJ_B + KJ_R/2 KJ_B + KJ_R/2
モード値が小さい、インブ本数が大きい場合、基準値~最大値(牡99,牝79)の間に一様分布するように、
そうでない場合は基準値からの上げ幅が半分程度になっている。
ほぼ同じ計算なのにインブリード本数によって四捨五入部分が異なるのは複雑だが、何故かはわからない。

気性限界値の計算

次の計算は気性について。
種牡馬(父)の気性パラメータによって以下の最大値が設定される。
気性 気性最大値
A 100
B 80
C 60
さらに、ランダム幅(マイナスの幅)が次のように決まる。
気性難(牡・牝)
ランダム幅 50 最大値の70% 最大値
気性難のインブリードが1つでもあると、気性難用の分布になり牡牝の差異もなくなる。
気性難のインブリードは1本でも複数本でも同じ効果である。

超危険配合の場合、上記は無視されて気性最大値およびランダム幅は20で固定となる。
気性 = 気性最大値 - DS96rand(ランダム幅)
最大値からランダム値を引いて値が確定となる。
計算手順は上記ですべてだが、より分かりやすく出現範囲を表にしたものが以下である。
種牡馬気性 気性難(牡・牝) 超危険(牡・牝)
A 51-100 31-100 1-100 1-20
B 31-80 25-80 1-80 1-20
C 11-60 19-60 1-60 1-20

ダート適正値の計算

次に、DS96rand(100) で0-99 の乱数を取得して、種牡馬のダート適正から産駒のダート適正を算出する。
母父が基本種牡馬か持込種牡馬の場合は母父のダート適正も参照する。
種牡馬ダ適 産駒ダ適=0 産駒ダ適=1 産駒ダ適=2 産駒ダ適=3 産駒ダ適=4 産駒ダ適=5
母父◎かつ◎ - 0-1(2%) 2-11(10%) 12-47(36%) 48-95(48%) 96-99(4%)
- 0-7(8%) 8-27(20%) 28-59(32%) 60-99(40%) -
0-9(10%) 10-34(25%) 35-64(30%) 65-89(25%) 90-99(10%) -
0-39(40%) 40-71(32%) 72-91(20%) 92-99(8%) - -
上で求めたダート適正が4以外で、ダート適正UPのインブリードがある場合、適正 +1 。
4以上ではなく4以外なので、元が5の場合はバグ数値の6になってしまう。
なお、ダート適正UPインブリードは複数あっても意味がない。

丈夫さの計算

危険配合(インブリード8本以上)、または超危険配合の場合は判定自体を行わずに0で確定。(乱数呼出回数に注意)
それ以外の場合、DS96rand(100) で0-99 の乱数を取得し、以下の健康index に基づいて値を決定。
種牡馬健康 健康index(通常) 健康index(マイナス)
A 0 1
B 2 3
C 4 5
健康index 丈夫=1 丈夫=2 丈夫=3 丈夫=4 丈夫=5 丈夫=6 丈夫=7
0 0-3(4%) 4-9(6%) 10-17(8%) 18-29(12%) 30-49(20%) 50-75(26%) 76-99(24%)
1 0-7(8%) 8-16(9%) 17-26(10%) 27-41(15%) 42-59(18%) 60-81(22%) 82-99(18%)
2 0-9(10%) 10-21(12%) 22-39(18%) 40-59(20%) 60-77(18%) 78-89(12%) 90-99(10%)
3 0-11(12%) 12-28(17%) 29-48(20%) 49-67(19%) 68-83(16%) 84-93(10%) 94-99(6%)
4 0-23(24%) 24-49(26%) 50-69(20%) 70-81(12%) 82-89(8%) 90-95(6%) 96-99(4%)
5 0-29(30%) 30-57(28%) 58-79(22%) 80-91(12%) 92-97(6%) 98-99(2%) -
インブリードの種類や血量によって、マイナスになったりならなかったりしてこの部分は調査しきれていない。
インブリードが増えるとマイナスが消えたりするので、もしかしたら処理順で最後のインブリードが無害だと
全部無害になってしまうような挙動(バグ?)があるのかもしれない。
いずれにせよ、危険配合でない限りインブリードによる健康面の悪化は微々たるものである。

回復力の計算

最後に計算されるのが回復力で、DS96rand(100) で0-99 の乱数を取得して、
馬体重と似た仕組みで決定される。
回復力 乱数値(0-99) 出現率[%]
16 0-1 2
17 2-3 2
18 4-9 6
19 10-19 10
20 20-31 12
21 32-45 14
22 46-59 14
23 60-71 12
24 72-81 10
25 82-87 6
26 88-91 4
27 92-94 3
28 95-96 2
29 97-98 2
30 99-99 1
回復力UPのインブリード1本につき +2 が足されて最終的な回復力になる。

おわり

すべての能力計算が以上で終了した。
inserted by FC2 system