成長
準拠: industrialcraft-2-2.2.517-experimental
概要
支柱に存在する植物の成長サイズが上昇すること、また成長経験値が上昇することを成長という。
支柱には成長サイズ(又は単にサイズ)(TileEntityCrop#size:byte)と成長経験値(成長ポイント、成長期間)(TileEntityCrop#growthPoints:int)という2つのサイズにかかわる変数が存在する。成長経験値は経験値(experience)ではないが、ソース上での呼称の不統一さやRPGのレベルにおける経験値と似通った立場であるため、このように称することとする。
これら2つの変数は、それぞれ変数と同名のキー名と型でワールドデータのNBTに保存される。
成長サイズが変動した場合、必ずdirtyをtrueにして描画などを同期する処理を予約する。
成長サイズは1以上の値を取る。
成長サイズが変動する要因
既に植物が置かれている場合に、サイズが書き換えられる(植え付けではなく、作物種がかわらない)要因は次の通りである。
- 収穫を行った際に収穫後サイズまで後退する
- ヴェノミリアに接触した際にサイズが4に減少する
- 成長経験値の増加処理により、成長経験値が必要成長経験値(CropCard#growthDuration)までたまり成長によるサイズ上昇が起こる
成長経験値が変動する要因
既に植物が置かれている場合に、成長経験値が書き換えられる要因は次の通りである。
次の処理を行う。
作物種がこの支柱で成長可能であった場合(CropCard#canGrow){
獲得成長経験値の計算(TileEntityCrop#calcGrowthRate)を行い、獲得分を成長経験値に加算する。
また、もし
支柱に植物が存在して、必要成長経験値以上の成長経験値を有している場合{
成長経験値を0に初期化し、
成長サイズに1を加算、
dirtyをtrueにする。
}
}
獲得成長経験値の計算(TileEntityCrop#calcGrowthRate)
まず、need値(必要環境値)を計算する。
need =
max( (
Tier - 1) * 4 +
Growth + Gain + Resistance , 0)
雑草(Tier0)の場合、前半部分は負になる。
have値(受領環境値)を計算する。
have
=
比重適用済み環境値 * 5
比重適用済み環境値(CropCard#weightInfluences) = 保水比重値*保水環境値+ 肥沃比重値*肥沃環境値 +
通気比重値*通気環境値
base値(獲得成長経験値)を計算する。
base' =
3 + (0~6の整数乱数) + Growth値
〔haveがneed以上〕
base = floor(base' * (100 + (have - need)) /
100)
〔haveがneedに足りない〕
neg = (need - have) * 4
negが100を超えている場合に(31-Resistance)/32の確率で作物消滅が発生する
〔作物消滅が発生した場合〕
base = 0
〔作物消滅が発生しなかった場合〕
base = max( floor(base' * (100 - neg) / 100) , 0)
このとき、作物消滅が発生した場合、支柱は空になる。(バグの存在)
獲得成長経験値はbase値である。
トリビア
- 成長経験値が上昇して必要成長経験値を超えた場合、超えた分の成長経験値は次の成長サイズに引き継がれずに廃棄される。
need値(必要環境値)に関するトリビア
- 必要環境値はTierとGGR値に一次関数的に依存している。
- 必要環境値は関連する値が全て最小(Tier=1、GGR=(0,0,0))の場合、0となる。
- GGR値はそれぞれ1の上昇につき1の必要環境値を上昇させ、Tierは1の上昇につき4の必要環境値を上昇させる。
- IC2Expの作物の中で最大となる必要環境値は、GGR=(31,31,31)でTier8のオーレリアであり、その必要環境値は121である。
- GregTech-AddonにはTier12の作物が存在する。この作物の取り得る必要環境値は、44から137の範囲である。
- GGR値の記事で推奨されているGrowth23・Gain31・Resistance0はそれだけで54の必要環境値となる。これは13.5のTier上昇分に相当する。
have値(受領環境値)に関するトリビア
- 受領環境値は3つの環境値を引数にとる関数で表される(CropCard#weightInfluences:int)。
この関数は、一般的には3つの値に係数をかけたものの和で表される。3つの係数の和は、3であることが多い。
- 受領環境値は、一般的な作物では3つの環境値を加算して5をかけたものに等しい。
これは、カボチャ・スイカ・アシ・カカオ・樹液アシ・コーヒー以外の作物の多くが該当する。
- 耕土は常に湿っているため、2の保水環境値を得ている。これはおよそ10の受領環境値に相当する。
- 沼地バイオームで土を3つ増長させると2+3の肥沃環境値、高度124以上に支柱を設置すると2+4の通気環境値となるが、
これだけでおよそ(2+3+2+4)*5=55の受領環境値が得られる。
- 肥沃農薬値・保水農薬値は最大でそれぞれ10の環境値となる。両方与えた場合、およそ100の受領環境値となる。
- 考えられる中で最大の受領環境値は、肥沃15・保水14・通気10にそれぞれ係数をかけたものであり、
小麦の場合、floor(15*1.0+14*1.0+10*1.0)*5=39*5=195となる。
カカオの場合、floor(15*1.3+14*0.8+10*0.9)*5=floor(39.7)*5=195となる。変わらないじゃん
必要環境値と受領環境値の比較に関するトリビア
- 受領環境値が必要環境値に届かなくても、成長が少し遅くなるだけで致命的な問題は無い。
- 本記事群では、この受領環境値が必要環境値に届かなくなってからの急激な成長速度の低下を成長障害と呼ぶ。
ただし、1の不足ごとに獲得成長経験値が4%減少し、不足分が25に達すると全く成長しなくなり、更に26以上では確率で作物消滅が発生する。
- 受領環境値が必要環境値を超えた分は、1の超過ごとに獲得成長経験値が1%増加する。
- 1の環境値の上昇は、維持可能なTierを約1.2上昇させることができる。
- 農薬による10の環境値の増加は、50の受領環境値を生み出し、それは維持可能なTierを約12上昇させることとなる。
- 沼地バイオームで土を3つ増長させて高度124以上に支柱を設置すると、湿った耕土ボーナスを含めて65以上の受領環境値となるが、
これはGGR=0のTier17の作物、GGR=23,31,0のTier3の作物を維持可能である。
- 作物消滅はResistanceが31であれば起こらなくなる。
base値(獲得成長経験値)に関するトリビア
- 獲得成長経験値の基本値はGrowth0の場合で3~9、Growth31の場合で34~40の範囲の乱数となる。
受領環境値が必要環境値に不足し次第、4%の減衰、超過し次第1%のボーナスが補正される。
- 受領環境値が195で必要環境値が0の状況では、295%の補正を受けて8~26の獲得成長経験値となる。
その状態でGrowthを23まで上昇させた場合は70~87、31まで上昇させた場合は89~105となる。
1段階成長するのにどのくらいかかるか?
以下の式では、受領環境値と必要環境値が等しい場合における、1段階成長するために必要な期間λ[tick]を見積もる。
D
=
必要成長経験値h =
受領環境値ボーナス =
1+((超過分*0.01)又は(不足分*(-0.04))) = 1
R = 平均獲得成長経験値 = (6 + Growth) * h
λ = D / R * 256tick
例
必要成長経験値が常に600であるホップをGrowth23の状態で1段階成長するために必要な期間λ[tick]
D =
600
h = 1
R = (6 + 23) * h = 29
λ = D / R * 256tick = 600 / 29 * 256tick ≒
5296tick
およそ 20.68CropTick ≒ 5296tick ≒ 4.41分で1段階成長する。
このホップの必要環境値は (5 - 1)*4+23 = 16+23 = 39である。
ネザーワート・テラワートの成長ブーストによりバグが発生する条件
成長ブーストは耕土下ブロックがソウルサンド・雪ブロックの場合に起こるため、これは必要条件である。
成長が起こらなければ作物消滅は起こらないため、canGrowである(最大サイズではない)ことは必要条件である。
ブーストを行った結果作物消滅が起こらなければバグは発生しない。そのため、Resistance=0で1/32の確率で、Resistance=31で確実にブロックされる。
作物消滅が起きるには受領環境値が26以上不足していることが必要である。
これらの作物種はTierが5であるため、最低でも16の必要環境値がある。26に届くにはGGR値が合計最低10は必要である。
その状態から、現在の受領環境値の分だけGGR値を上昇させればバグが発生してしまう。
最終更新:2014年07月30日 14:07