収穫

新版記事

728→729で収穫量の仕様が変わったようである。731でも変わった。

準拠: industrialcraft-2-2.2.517-experimental

概要

成長した作物を持つ支柱を右クリックすると、各種パラメータに応じたアイテムをその場にドロップする。このようなIC2Cropからのアイテムの享受広義の収穫という(TileEntityCrops#harvest)。

収穫はIC2Cropのシステムから恩恵を受けるための最も基本的な手段であり、植えた作物種に応じて食材や加工素材をはじめとする実に様々なアイテムを得ることができる。

狭義の収穫(収穫イベント)TileEntityCrops#harvestが呼び出されることをいい、本記事群では特に断りの無い限り、収穫といったらこちらを指す。つまり、何も収穫物が得られなくても収穫行為は行われている。

収穫イベントには手動と自動の区別があるが、特に処理に違いは無い。

因みに、狭義の収穫を起こさなくとも収穫物を地面にドロップする方法も存在する。逆に狭義の収穫が行われても必ず収穫物がドロップするとは限らない。

 

手動収穫が行われる条件

支柱を右クリックすると作物種の右クリックイベント(CropCard#rightclick)が呼び出されるが、そのイベント処理では規定の動作で手動収穫が行われる。

2.2.517現在、IC2Exp本体では植物が存在する支柱を右クリックすると必ず手動収穫が行われ、手動収穫を行うには支柱を右クリックする以外に方法は無い。

自動収穫が行われる条件

植物が存在する支柱を左クリックで破壊しようとしたとき、作物の種と同時に収穫物をドロップする。このとき、収穫は自動収穫として扱われる。

GregTechのハーベスターが自動収穫を行う。

収穫の試み(TileEntityCrop#harvest)

収穫イベントの発生時、支柱は次の処理を行う。この処理により真を返した場合、収穫の試みは成功したという。収穫物の有無にかかわらず、収穫の試みが成功した場合は作物の成長レベルが低下する。

まず、支柱に植物が無いか、収穫可能でない場合、何も行わずに偽を返す。
次に、作物種ごとに異なる基本収穫量の値を計算する。
Gain値によって、基本収穫量を1.03^Gain倍にする。
基本収穫量から、その時のドロップ数の計算をする。
ドロップ数の分だけ作物種から収穫物の取得を行い、取得ごとに(Gain+1)%の確率で数量を1増やす。
作物の成長レベルを減衰させる。
全てのドロップすべき収穫物をワールドにドロップする。
真を返す。

収穫可能CropCard#canBeHarvested

専ら作物が収穫可能な成長段階かを判断している。

雑草を除くIC2Expに存在するすべての作物種は作物列挙で示されるような収穫可能サイズ以上であるかどうかのみによって収穫可能かどうかを決めている。

雑草は常に収穫不可である。

基本収穫量(CropCard#dropGainChance

作物列挙にあるような計算式で値を返す。多くはTier依存であり、いくつかの作物は固有の値を持つ。

Gain値による基本収穫量への倍率表

Gain 収穫倍率 種倍率
0 1.0000 1.00000
1 1.0300 1.00000
2 1.0609 1.00000
3 1.0927 1.00000
4 1.1255 1.00000
5 1.1593 1.00000
6 1.1941 1.00000
7 1.2299 1.00000
8 1.2668 1.00000
9 1.3048 1.00000
10 1.3439 1.00000
11 1.3842 1.00000
12 1.4258 1.00000
13 1.4685 1.00000
14 1.5126 1.00000
15 1.5580 1.00000
16 1.6047 1.00000
17 1.6528 1.00000
18 1.7024 1.00000
19 1.7535 1.00000
20 1.8061 1.00000
21 1.8603 1.00000
22 1.9161 1.00000
23 1.9736 1.00000
24 2.0328 0.95000
25 2.0938 0.90250
26 2.1566 0.85738
27 2.2213 0.81451
28 2.2879 0.77378
29 2.3566 0.73509
30 2.4273 0.69834
31 2.5001 0.66342

ドロップ数の計算

結論から言うと、基本収穫量に対するドロップ数の期待値は以下のようになる。

基本収穫量が1以下の場合
(C:基本収穫量)

基本収穫量が1以上の場合
(C:基本収穫量)

具体的には、次のような処理を行っている。

float chance = 基本収穫量
chance -= 0以上1未満の一様乱数
int drop = 0
while (chance > 0) {
  drop++
  chance -= 0以上1未満の一様乱数
}
ドロップ数 = drop

ドロップ数は基本収穫量から、0以上1未満の一様乱数を引くことができた回数である。それ故、基本収穫量が0に近くとも乱数が0付近をとれば収穫物を得ることができる。

基本収穫量が1以下の場合のドロップ数の分布は正確に以下の式で表される。

C^n(n+1-C)/(n+1)! (C:基本収穫量 n:ドロップ数)

また、基本収穫量が1以下の場合のドロップ数の期待値は正確に次のようになる。

Σ[n=1,n=∞] (n*C^n(n+1-C)/(n+1)!)=e^C-1 (C:基本収穫量)

基本収穫量が1を超える場合の式は計算するのが面倒臭いので掲載しないが、シミュレーションによる基本収穫量に対するドロップ数分布のグラフと期待値のグラフを掲載する。

ドロップ率分布グラフ(シミュレーション)

期待値グラフ(シミュレーション)

基本収穫量が1を超える場合のドロップ数の期待値はおおよそ以下のように近似できる。

2C-1/3 (C:基本収穫量)

より正確には以下のようになる。

(C:基本収穫量)

収穫物の取得(CropCard#getGain)

作物種ごとに固有の収穫物をもつ。作物列挙ページの基本収穫物の欄がそうである。

トリビア

  • Gainが31である場合、Gainが0である場合に比べて約2.5倍の収穫物を得られる。種袋の生産量に悪影響のない限界値である23では約2.0倍となる。
  • ドロップ数とは別にドロップアイテムの個数増加処理がある。このため、Gain値は2重に収穫物の量を上昇させる
  • アシ・カカオ豆・スイカのようにスタックされた状態の収穫物を有する作物種は、ドロップアイテムの個数増加処理の恩恵が比較的少ない
  • 基本収穫量が2.0であるネザーワートをGain31まで育てると、基本収穫量は5.00まで上昇する。この時のドロップ数の期待値は約9.66個となる。更にドロップアイテムの個数増加処理により32%収穫物が増えるので、平均12.76個のアイテムがその場にドロップする。
最終更新:2015年06月07日 06:38