ランダムアクセスメモリ

沖縄移住、マンガ、Web制作、ゲーム、将棋の話をランダムに。

ダビスタ96の話 その7 ~ダビスタ96仮想生産ライブラリ「ds96.js」の紹介

久々にダビスタ96の話を。
今回はいつもよりさらにマニアックなため、ダビスタ96を知らない、興味のない人はまったく意味不明だと思われる。

逆にコアなダビスタ96ファンには有益ではないだろうか?
前回のエントリでも紹介したダビスタ96 完全解析のページをベースに、JavaScriptで配合と生産をエミュレーションできるようできるライブラリを作成したのである。

元々は慣れているPHPで作成していたが、JavaScriptに書き換えた。理由としては、JavaScriptを勉強中なのでその素材として選んだということと、最低限の知識とブラウザ(Chrome推奨)があればだれでもすぐに利用できるからである。
ライブラリには種牡馬データ、繁殖牝馬データ、インブリードデータ、ニックスデータもすべて含まれている。本当は別ファイルにしたほうがよいのかもしれないが、扱いやすさを優先した。

なお、利用には最低限のJavaScriptの知識は必要になる。「JavaScriptなんてわからないよ~」という人は、末尾にある『「ds96.js」の利用例(JavaScriptがわからなくてもOK!)』を見てほしい。

f:id:onsen222:20200419012317p:plain

ds96.jsのダウンロード

以下からds96.jsをダウンロードする。直リンクは避け、必ずダウンロードして利用すること。

ds96.js Ver 0.1

ds96.jsの読み込み

<script type="text/javascript" src="ds96.js"></script>

配合インスタンスの生成

[インスタンス名] = new Ds96([種牡馬ID],[繁殖牝馬ID]);

例:Wild Again(種牡馬ID163)とミッドナイトアールティ(繁殖牝馬ID162)で配合インスタンスを作成

let ds96 = new Ds96(163,162);

最初に種牡馬と繁殖牝馬を指定して配合インスタンスを生成する。ここでは「ds96」と名前にしているが、名前は別でも問題ない。種牡馬IDと繁殖牝馬IDは以下のシートを参考にしてほしい。

https://docs.google.com/spreadsheets/d/1aOi-jb6oh6alhEhn9TvW-IGMOwaDSY_j3D_aNkSetSQ/edit?usp=sharing

オリジナルの繁殖牝馬を利用する場合は、繁殖牝馬IDを省略する(後述)。

配合情報の取得

配合情報を取得したい場合は、以下のプロパティを利用する。

種牡馬関連
種牡馬:[インスタンス名].stallion.name
系統:[インスタンス名].stallion.system
価格:[インスタンス名].stallion.price
距離適性MIN:[インスタンス名].stallion.min
距離適性MAX: [インスタンス名].stallion.max
ダート適正:[インスタンス名].stallion.dirt
成長型:[インスタンス名].stallion.growth
気性:[インスタンス名].stallion.kisyo
底力:[インスタンス名].stallion.konjo
健康:[インスタンス名].stallion.kenko
実績:[インスタンス名].stallion.jisseki
安定:[インスタンス名].stallion.antei
繁殖牝馬関連
繁殖牝馬:[インスタンス名].broodmare.name
系統:[インスタンス名].broodmare.system
価格:[インスタンス名].broodmare.price
スピード:[インスタンス名].broodmare.speed
スタミナ:[インスタンス名].broodmare.stamina
配合関連
面白:[インスタンス名].omoshiro
ニックス:[インスタンス名].nix
危険:[インスタンス名].kiken
超危険:[インスタンス名].tyokiken
インブリード:[インスタンス名].inbreed[n]

基礎値SP:[インスタンス名].base_speed
基礎値ST:[インスタンス名].base_stamina

面白、ニックス、危険、超危険は満たしていればtrue、そうでなければfalseが返される。
イブリードのみ配列で返される。nは0から順に、スピード、スタミナ、ダート、底力、気性難、晩成化、早熟化。数値はインブリードの本数が入りますが、スピードだけ例外的にスピードが×2、スピード◎が×3として計算される。つまり、スピードインブリードが本、スピード◎インブリードが2本なら、4×2+2×3=14となる。


例:コンソールログで配合情報を取得

console.log(ds96.stallion.name);
console.log(ds96.broodmare.name);
console.log(ds96.omoshiro);
console.log(ds96.inbreed[1]);

コンソールログに種牡馬の名前、繁殖牝馬の名前、面白配合の可否、スタミナインブリードの本数を返す。

自家生産牝馬の登録

初期牝馬ではなく、自家生産牝馬を利用したい場合は以下のフォーマットのオブジェクトを作成し、メソッドで代入する。価格は配合に影響はしないので「0」など任意の数値を入れればよい。

自家生産牝馬オブジェクトのフォーマット
newobj =  
{
    "name":" 自家生産牝馬の名前",
    "system":"系統",
    "price":価格,
    "speed":スピード,
    "stamina":スタミナ,
    "ancestor":["父","父父","母父","父父父","父母父","母父父","母母父","父父父父","父父母父","父母父父","父母母父","母父父父","母父母父","母母父父","母母母父"],
    "omoshiro":"面白系統",
    "dirt":母父のデート適正(0:A 1:B 2:C 4:初期牝馬で母父にパラーメタなし),
    "konjo":母父の底力(0:◎ 1:○ 2:× 4:初期牝馬で母父にパラーメタなし)
};
自家生産牝馬オブジェクト例
newobj =  
{
    "name":"ミッドナイトアールティ×Wild Again",
    "system":"ニアークティック",
    "price":0,
    "speed":120,
    "stamina":120,
    "ancestor":["Wild Again","Icecapade","Northern Dancer","Nearctic","Khaled","Nearctic","Tom Fool","Nearco","Native Dancer","Hyperion","Dante","Nearco","Native Dancer","Menow","Bold Ruler"],
    "omoshiro":"ebeh",
    "dirt":0,
    "konjo":0
};

父Wild Again、母ミッドナイトアールティでスピード120、スタミナ120の 自家生産牝馬のデータ例。スタミナはダビスタ96の仕様上、スタミナと気性のうち低い方を指定する。TSL産駒にしたい場合は、120と120など大きめな数値を指定しておけばOK。

自家生産牝馬オブジェクトの挿入
[インスタンス名].set_broodmare([自家生産牝馬オブジェクト]);

set_broodmareメソッドを使って自家生産牝馬オブジェクトを登録すれば母として利用される。

例:自家生産牝馬オブジェクトを挿入する

ds96.set_broodmare(newobj);

産駒を生成する

産駒の生成はseedingメソッドにシード値を与えます。シード値は0から65535の範囲で入力しよう。シード値を0~65535までループさせることで、その配合の全パターン65536通りを取得することが可能だ。

[インスタンス名].seeding([シード値],[省略すると牡馬、1が牝馬]);

例:シード0の牡馬の産駒を取得する

ds96.seeding(0);

例:シード5000の牝馬の産駒を取得する

ds96.seeding(5000,1);


seedingメソッドにシード値(0~65535)を与えることで産駒を生成する。
生成した産駒は以下のプロパティで取得できる。

スピード:[インスタンス名].speed
スタミナ:[インスタンス名].stamina
根性:[インスタンス名].konjo
気性:[インスタンス名].kisyo
ダート適性:[インスタンス名].dirt
成長型:[インスタンス名].growth
理想馬体重:[インスタンス名].weight

サンプル1 初代配合の655536パターンをCSVファイルで出力する

サンデーサイレンス(ID0)とサヨナラ(ID184)の配合で、牡馬が生まれたときの全パターンをシード値、スピード、スタミナ、根性、気性、ダート適性、成長型、理想馬体重のCSVファイルで出力するHTMLの例を紹介する。以下のソースをHTMLファイルとして保存し、同じフォルダ内に「ds96.js」を置いてHTMLファイルを開けば、CSVファイルがダウンロードされる。

<html>
<body>
<script type="text/javascript" src="ds96.js"></script>

<script>
let horse_data = "";

//種牡馬ID0,繁殖牝馬ID184でインスタンス生成
ds96 = new Ds96(0,184);

for (let i=0;i<65536;i++){
    //シード値を与えて産駒データを取得する
    ds96.seeding(i);
    horse_data += i+","+ds96.speed+","+ds96.stamina+","+ds96.konjo+","+ds96.kisyo+","+ds96.dirt+","+ds96.growth+","+ds96.weight+"\n";
} 

//CSVファイル出力処理
const name = "ds96data.csv";
const anchor = document.createElement('a');
if (window.URL && anchor.download !== undefined) {
    // utf8
    const bom = '\uFEFF';
    const blob = new Blob([bom, horse_data], { type: 'text/csv' });
    anchor.download = name;
    anchor.href = window.URL.createObjectURL(blob);
    document.body.appendChild(anchor);
    anchor.click();
    anchor.parentNode.removeChild(anchor);
}

</script>
</body>
</html>

サンプル2 自家生産牝馬から生まれる655536パターンをCSVファイルで出力する

自家生産馬のパターンを調べたい場合は、種牡馬だけでインスタンス生成を作成し、broodmareメソッドで自家生産牝馬を放り込んでから生産をすれば良い。

サンプル1の

//種牡馬ID0,繁殖牝馬ID184でインスタンス生成
ds96 = new Ds96(0,184);

の部分を以下のように変えればよい。

//種牡馬ID94でインスタンス生成
ds96 = new Ds96(94);

//自家生産牝馬のオブジェクトをセット
newobj =  
    {
        "name":"ミッドナイトアールティ×Wild Again",
        "system":"ニアークティック",
        "price":0,
        "speed":120,
        "stamina":120,
        "ancestor":["Wild Again","Icecapade","Northern Dancer","Nearctic","Khaled","Nearctic","Tom Fool","Nearco","Native Dancer","Hyperion","Dante","Nearco","Native Dancer","Menow","Bold Ruler"],
        "omoshiro":"ebeh",
        "dirt":0,
        "konjo":0
    };
ds96.set_broodmare(newobj);

そのほかいろいろな応用が可能

工夫をすれば、初代配合すべての組み合わせの産駒生成(約21億通りあるのでスピード120以上などのフィルタをしないと大変なことになるが……)、特定繁殖牝馬に全種牡馬をかけ合わせる、と言ったことも可能だ。

「ds96.js」の利用条件

「ds96.js」は自分のWebサイトで自由に利用できる。その場合、可能であればこのページにリンクを張ってほしい。

「ds96.js」の利用例(JavaScriptがわからなくてもOK!)

「ds96.js」を利用した仮想生産ツールとして、「ダビスタ96 - 配合&仮想生産ツール」という簡単なサイトを作成したので試してみてほしい。
ds96.yublog.com

使い方はまた次回。直感的に利用できるとは思うけど。

不具合の報告について

「ds96.js」の不具合や現実と異なる数値が出たことを発見した場合は、コメントで報告してもらえると助かります。なお、同系3代配合には対応してません。それは現時点では仕様にさせてください。