WW2空戦レギュにおいての重武装機の非現実的な弾幕射撃を防ぐため、 一度の空戦での使用弾薬数に制限を設ける。
制限の方法は以下のとおり
(機体重量 -1300) /100 *20 +350で計算し出てきた値を小数点以下四捨五入し弾薬ポイントとすること、機体重量に_SPLIT _BYE できるものの重量は含まない。(エンジンは含む)
以下のコードで弾薬ポイントをカウントできます
if _E(ARMのチップ番号) = 0 { 弾薬ポイント - 弾薬コスト }
あらかじめ、機体に合わせた弾薬ポイントの変数(350、500、1200のいずれか)を用意しておき、ARM一枚ごとにこのコードを書いていってください。
以下の関数により弾薬ポイントをカウントできます。
この切り取り線内をLuaにコピペすると、どんなモデルでも自動的カウントします。
残ポイントの表示とか弾切れ時の発射ロックとかは各自実装してください。
LimitAmmo = 0 --自機の持つ残り弾薬ポイント。残弾表示やフラグに使ってください。
LimitAmmoMax = 0;
isJetPlaneLimitAmmo = false--ジェット機ならtrueに汁
isLimitAmmoInitialized = false;--内部的な初期化フラグ。いじったらだめーよw
Cost100k = 12 --100k(Option=100000)以上のARMの弾薬コスト
Cost50k = 2 --50k以上100k未満の弾薬コスト
ListChipType = {} --ARMのチップ番号を格納
ArmCostList = {} --発見されたArmのコストを順に収納
function LimitAmmoRegulation()
--初期設定
if not isLimitAmmoInitialized then
--重量に応じて弾薬ポイントを決定
if isJetPlaneLimitAmmo then
LimitAmmo = 1200
else
if _WEIGHT() >= 1100 and _WEIGHT() < 2200 then
LimitAmmo = (_WEIGHT() -1300) /100 *20 +350
elseif _WEIGHT() >= 2200 then
LimitAmmo = 500
end
end
LimitAmmoMax= LimitAmmo
local chipNum = _CHIPS() - 1
for i = 1, chipNum do
--ARMチェック
if _TYPE(i) == 10 then
--50kの場合、100kの場合でそれぞれ弾薬コストを格納
if _OPTION(i) == 50000 then
table.insert(ListChipType, i)
table.insert(ArmCostList, Cost50k)
elseif _OPTION(i) >= 100000 then
table.insert(ListChipType, i)
table.insert(ArmCostList, Cost100k)
end
end
end
isLimitAmmoInitialized = true
elseif _TICKS() > 150 then
--発射カウント
local n = table.getn(ListChipType)
for i = 1, n do
--発射判定
if _E(ListChipType[i]) == 0 and _TOP(ListChipType[i]) == 0 then
LimitAmmo = LimitAmmo - ArmCostList[i] --弾薬ポイントから弾薬コストを減算
end
end
local h = _H(0);
local speed = _VZ(0);
if (0 < h and h < 2) and math.abs(speed) < 1.5 then
if isJetPlaneLimitAmmo then
LimitAmmo = LimitAmmo + 1;
else
LimitAmmo = LimitAmmo + 0.5;
end
if LimitAmmo > LimitAmmoMax then LimitAmmo = LimitAmmoMax; end
end
end
end