2つの作物種(CropCard)の近縁度(Ratio)を計算する際に、stat値の比較による増減がおかしな量となっているバグである。これにより、交配時にTier値が近い作物ならほとんど何でも出現させることが可能という恩恵を受けている。
685から690の更新の際に、遂にこのバグが解消した。新版「交配レート」記事はこちら。
顕在であることを確認
このバグが顕在であることを確認
近縁度を計算する処理(TileEntityCrop#calculateRatioFor)の中で、変数valueを作物種が持つstat値にしたがって増減させる処理ががあるが、ここに存在するswitch文の各節にbreakの処理がないため、増減が重複して適応されている。
問題の処理は次のようなものである。
作物種A・B、0から4までの値を取るインデックスi、変数valueにおいて、
switch ( abs(A.stat(i) - B.stat(i)) ) {
default: value--;
case 0: value += 2;
case 1: value++;
case 2:
}
この処理は、両作物種間のstat値の距離が0なら2、1なら1、2なら0、3以上なら-1をvalueに加算するということを期待していると思われるが、各節にbreak文がないため、両作物種間のstat値の距離が0なら3、1なら1、2なら0、3以上なら2をvalueに加算してしまっている。
筆者はこのbreak文の欠落は当初デコンパイル時に消滅していたためと考えていたが、stat値がすべて100でattributesが空のTier6の作物種(通常の作物からの出現率は0のはずである)を作成し導入したところ、これが交配により発生したため、このbreak文の欠落がバイナリ中にも存在することが実証された。
殆どすべての交配時において。
Tire値が近い作物種は、5つのstat値がすべて2の距離であり、attributesに同じ項目が無い場合を除き、すべて発生する可能性がある。
以下に交配レート表を載せる。上段の2つの表はアルゴリズムの違いによる交配レートを表し、下段の2つの表は上段の表の比較をしている。
上段の表は、上に並んでいる作物種が左に並んでいる作物種を生成させるレートを表す。
IC2の「バグった」交配レート | PluginCropsによる「正常な」交配レート |
バグによる差分 | バグによってレートがおよそ何倍に上昇したかを表す図 |
PluginCropを使うと本来の難易度の交配を行うことができる。
本記事群で交配レートを扱う場合は、基本的にこのプラグインによる修正版交配レートをパッチ版として併記する。理由は、バニラIC2の交配レートでは樹液アシや赤石小麦などで殆ど全ての作物が容易に出るなどゲーム性に欠けるため、考察を深めていく意義が薄いからである。