アットウィキロゴ

コード解析

目次

コード解析

陸戦兵器

ここではKingTigerを例とする
「~かどうか」は0/1のフラグを指す

BF1942エンジンでは座標軸は兵器中央から進行方向へ見て
(左右/高さ/前後座標)(Yaw/Pitch/Roll)の
順で表記される
左右のプラスは右、マイナスで左

Yaw(ヨー)車の左右旋回のイメージ
Pitch(ピッチ)飛行機の機首上げ下げのイメージ
Roll(ロール)銃弾が旋転するイメージ

ObjectTemplate.create PlayerControlObject Kingtiger
 -PCOをこの名前で作ることを宣言している

ObjectTemplate.setNetworkableInfo KTBodyInfo
 -ネットワーク同期を行うための記述
  これがないと位置座標や移動、発砲などの変化がマルチ環境で他者と共有されないため
  武器や回転砲塔、ステアリング、翼などが機能しなくなる
  ただし1つの席で使用できる操作系統数(いわゆる軸数)には制限があるので、
  むやみに使用するとエラーを吐く
  武器に限り、FHSW限定でsetNetworkableInfoに「TankFireArmInfo_ForceID」を
  指定することで軸数を節約できるが弾の再補給が正しく行われなくなるため、
  一回使い切り又は弾数無限の武器以外には勧められない

ObjectTemplate.saveInSeparateFile 1
 -開発段階でのデバッグ用のコードのようだ
  無用のトラブルを防ぐ意味で下手に触らず1にしておく

objectTemplate.cullRadiusScale 4
 -遠距離からの表示されやすさの優先順位(1~6)
  重要でないものを1、遠距離からでも表示させたいものを6と区別することで
  パフォーマンス改善に効果がある?
  Staticの場合、LODが適切に設定されていても遠距離で表示されない場合、
  この値を高くすると改善する

ObjectTemplate.hasMobilePhysics 1
 -物理演算を行うかどうか

ObjectTemplate.hasDynamicShadow 1
 -物体の影を動的に描画するかどうか

ObjectTemplate.explosionRadius 8
ObjectTemplate.explosionDamage 3
 -被撃破時に発生する爆風半径と威力(0~20)

ObjectTemplate.drag 2
 -物体の空気抵抗 陸上兵器に関しては影響はなさそう?
  ただし記述しないと大暴れする原因になるので単純引用すべし

ObjectTemplate.mass 68000
 -物体の質量 kg単位
  衝突時の双方の挙動に影響する

ObjectTemplate.hasCollisionPhysics 1
ObjectTemplate.hasResponsePhysics 1
 -他の物体と衝突演算を行うかどうか

ObjectTemplate.hasArmor 1
 -破壊可能であるかどうか

ObjectTemplate.speedMod 0.75
 -衝突時の被ダメージ係数 大きいほど受けるダメージが大きい
  戦車で1前後、航空機で2

ObjectTemplate.exitTimer 1
 -降りた際、再度乗り込めるようになるまでの待機時間

ObjectTemplate.hitpoints 166
ObjectTemplate.maxhitpoints 166
 -スポン時の耐久値と最大耐久値
  兵器左下の耐久ゲージはこの値からcriticalDamage分を引いた値の150を表示している
  FHSWでは車両ごとに乗員数や車体サイズ等を計算式にあてはめ算出している

ObjectTemplate.material 51
 -兵器本来のマテリアル 爆風ダメージ耐性が決まる
  各部の装甲厚はモデル側で設定する→マテリアル一覧

ObjectTemplate.criticalDamage 16
 -残り耐久値がこの値以下の場合、瀕死状態(エンジン停止、砲塔旋回速度低下)になる
  この値がmaxhitpointsの値より大きいとHPバーが消えるので注意

if v_is_coop == True
 ObjectTemplate.hpLostWhileCriticalDamage 1
else
 ObjectTemplate.hpLostWhileCriticalDamage 0
endIf
 -COOP向けif文 瀕死状態で毎秒受けるダメージ量
  COOPモードの場合、瀕死状態になった戦車は毎秒1ダメージを受け自爆する

ObjectTemplate.explosionForceMod 6
 -爆風を受けた際の吹き飛ばされやすさ(0~150)
  爆風ダメージ耐性には影響しない
  戦車で10前後、ジープ、トラックで20

ObjectTemplate.hpLostWhileUpSideDown 7
 -物体がひっくり返った際に毎秒受けるダメージ(0~25)
  空中の場合は関係なし

ObjectTemplate.hpLostWhileDamageFromWater 7
 -物体が水没した際に毎秒受けるダメージ(0~200)
  damageFromWaterが1の場合に適用される?KTでは死に値

ObjectTemplate.addArmorEffect 60 e_PanzDamage 0/0.8/-2.4
ObjectTemplate.addArmorEffect 16 e_PanzFire 0/0.8/-2.4
ObjectTemplate.addArmorEffect 0 e_ExplGas 0/0/0
ObjectTemplate.addArmorEffect 0 e_scrapmetal 0/0/0
ObjectTemplate.addArmorEffect -1 WaterWaterExplosion 0/0/0
 -耐久値ごとに発生するエフェクトと座標(左右/高さ/前後座標)を指定している
  エフェクトは他のエフェクトの発動条件が満たされるまで継続して発生する
  この場合は残耐久値60以下で発煙、16以下で炎上、0で爆発し破片を放出する
  -1は水中の場合のみ発生させる指定

ObjectTemplate.timetoliveafterdeath 45
 -撃破後のWreckモデル(残骸)が消えきるまでの秒数(0~9999)

ObjectTemplate.fadeAtTimeToLiveAfterDeath 0
 -撃破後の残骸がフェードアウトして消えるかどうか

ObjectTemplate.damageFromWater 0
 -水没時にダメージを受けるかどうか(少しでも水に触れたら)
  KTではこちらではなくsubmarineDataの方で水没ダメージを管理している

ObjectTemplate.aiTemplate KT
 -COOPでAIが操作する際の設定を指定している
  それぞれの座席ごとに指定が必要だが、
  デサント席と車長席用は各車両共通設定が用意してあるので引用すべし

ObjectTemplate.addTemplate lodKT
 -この名前の部品を付加することを宣言している
  別途でこの名前の部品がCreateされていないと落ちる

ObjectTemplate.setSoldierExitLocation -2.3/0.5/0 0/0/0
 -この席から降りた時、兵器中央から見て
  (左右/高さ/前後座標)(同、3軸回転角度)に降りろ、と指定している

ObjectTemplate.GUIIndex 75
 -不明

ObjectTemplate.submarineData 1 0.03 10.0 1.5 2.4 1.4 5
 -本来は潜水艦の潜水時間や潜航深度を設定している
  ここでは渡河時に水没した際のダメージを設定している
  酸素タンク容量は1で固定
  1 毎秒酸素使用量(1秒で消費しきる)
  0.03 毎秒酸素回復量(満タンまで33秒必要)
  10.0 酸素欠乏時の毎秒ダメージ量
  1.5 潜望鏡深度?(死にコード)
  2.4 酸素が回復し潜望鏡が使用できる最大深度
  1.4 ダメージを受けない最大深度
  5 最大深度以深での毎秒ダメージ量
  この場合だと水深1.4m以深で毎秒5ダメージを受け、
  2.4m以深では1秒経過後さらに加算で毎秒10ダメージを受ける

ObjectTemplate.setVehicleIcon "Vehicle/Icon_KingTiger.dds"
 -兵器アイコン(搭乗時左下に出る、兵器名の記載されるもの)を指定している

ObjectTemplate.setVehicleIconPos 45/58
 -上で指定した兵器アイコンへ、乗っている席の位置を示す青丸アイコンを表示する座標を指定している
  座標原点は左上

ObjectTemplate.setNumberOfWeaponIcons 2
 -その席で使用できる武器のアイコン数を指定している

ObjectTemplate.setPrimaryAmmoIcon "Ammo/icon_88mmKwK43.tga"
 -左クリックで使用する主武器のアイコンを指定している

ObjectTemplate.setPrimaryAmmoBar ABAmmoBarReloadBar
 -左クリックで使用する主武器のリロードバーの種類を指定している
  この場合は残弾ゲージとリロードゲージを表示させている

ObjectTemplate.setSecondaryAmmoIcon "Ammo/icon_7,92mmMG34.tga"
 -右クリックで使用する副武器のアイコンを指定している

ObjectTemplate.setSecondaryAmmoBar ABAmmoBarHeatBar
 -右クリックで使用する副武器のリロードバーの種類を指定している
  この場合は残弾ゲージとヒートゲージを表示させている

ObjectTemplate.setHasTurretIcon 1
 -砲塔の現在の方向を示すインジケータを表示するかどうか
  FHSWでは戦車、艦艇とも基本的に表示させていく方針

ObjectTemplate.setCrossHairType CHTNone
 -表示させるクロスヘアの種類を指定している
  この場合は何も表示しない

ObjectTemplate.setVehicleCategory VCLand
 -キーコンフィグの対応を指定している
  この場合は陸の車両

ObjectTemplate.setVehicleType VTHeavyTank
 -不明(乗り物のタイプを指定している?)

ObjectTemplate.setToolTipType TTHeavyTank
 -Tキーでヘルプを表示させた際の内容を指定している

ObjectTemplate.setMinimapIcon "Minimap/minimap_icon_heavytank_16x16.tga"
 -ミニマップアイコンを指定している

ObjectTemplate.hasRestrictedExit 1
 -setSoldierExitLocationで指定した座標に、
  他の乗り物や障害物のない場合でしか降りられないようにするかどうか

ここから下はKTの1番席では使われていない

ObjectTemplate.PcoId 0
 -兵器の席番号はAddした順によって自動的に決まるが、
  このコードを使うことでその座席が何番席かを指定できる
  0で1番、6を指定すると7番席が作れる

ここからはWeapons.conの記述


ObjectTemplate.create FireArms KTGunBarrel
 -この名前の武器を作れ、と宣言している

ObjectTemplate.geometry KT_Cannon_M1
 -この武器の外見モデルを指定している
  基本的に戦車なら砲身、特に発砲時に後座する部分が指定される

ObjectTemplate.setMinDev 0.36
 -武器の最小精度 このコードのみ書かれている場合、連射や移動などどの状態でも0.36から変化しない
  0で完全に照準通りに飛ぶ

ObjectTemplate.projectileTemplate 88mmL71_Projectile
ObjectTemplate.projectilePosition 0/0/1
 -発砲時にこの弾種を発射せよ、と指定している
  座標は単砲身の場合の武器発射位置 自爆や壁抜き防止で微調整することもあり

ObjectTemplate.setTracerTemplate 88mmL71APCR_Projectile CRD_UNIFORM/1/6/0
 -本来は曳光弾を確率で発生させるコードだが、
  FHSWでは戦車砲にAPCRをランダムで混ぜるためにも使っている
  CRD_UNIFORMは1と6の間のランダムなので、1/6/0なら最大1発おき、最低7発に1発はAPCRが発射される
  CRD_NONEは書かれた数字おきに確定で発生させるので、4/0/0であれば5発に1発がAPCRとなる

ObjectTemplate.magSize 84
 -マガジン内の装弾数

ObjectTemplate.numOfMag 1
 -マガジンの所持数
  ここを-1にすると無限だが、残弾数へ-1と表示されてしまうので9999とするほうが格好いい

ObjectTemplate.velocity 509
 -砲弾の初速 FHSWではMAPの広さとゲーム性のためすべての火砲を史実の50%で設定している
  AAのみ別途史実の初速と砲身長、口径による計算式で算出している

ObjectTemplate.autoReload 1
 -自動でマガジンを交換するかどうか
  歩兵火器でなければ基本1で

ObjectTemplate.reloadtime 0.3
 -マガジン交換にかかる秒数(KTの場合は死にコード)

ObjectTemplate.roundOfFire 0.22
 -1秒間に発射される弾数、つまり1/0.22=4.54なので装填時間は4.54秒となる
  FHSWでは車両ごとに専属装填手の有無や弾薬、砲塔サイズ等を計算式にあてはめ算出している
  ただし次発まで10秒以上かかる場合、発射間隔の設定ではうまく動作しないので、
  roundOfFireは0.1(10秒)で固定とし、残りをreloadtimeで18などと分割することで
  1発入りマガジンを合計28秒でリロードする…というやり方で実装している

ObjectTemplate.fireingForce 20
 -発砲時の反動
  FHSWでは間接射撃メインの自走砲や対空車両では、照準ずれを防ぐ使い勝手の意味で0としている

ObjectTemplate.recoilSpeed 10
ObjectTemplate.recoilSize 25
 -発砲時の砲身の後座速度と後座距離
  砲身モデルの見かけのみで実際の反動は上のfireingForceで設定している

ObjectTemplate.setFireCameraShakeAnimationState FireTank100CanonShake
 -発砲時の画面の振動
  Weapons.conを埋め込んだ場合はこの部分が適用されないので、
  Activeタグを使ってObjectsSpawnTemplatesへ追記する必要がある

ここからはKTでは使われていない

ObjectTemplate.setFireDev 0.9 0.16 0.05
 -発砲に応じて精度を拡散させる程度を設定している
  0.9 1発目に精度拡散する値
  0.16 2発目以降加算される精度拡散分の値
  0.05 1フレームあたり収束する精度の値
  BF1942では1秒あたり30フレームなので、0.05*30=1.5ぶん収束する
  秒間10発発射する機関銃だとすると、
  初回0.9+(0.16*9)=2.34/秒だけ悪化し、1.5/秒だけ収束するので
  結果として連射し続けると0.84/秒ずつ拡散していく

ObjectTemplate.setAsynchronyFire 1
ObjectTemplate.addFireArmsPosition -0.4/-0.05/1.9 0/0/0
ObjectTemplate.addFireArmsPosition 0.4/-0.05/1.9 0/0/0
 -複数の発射位置を指定した場合、同時に発射せずずらすかどうか
  ズレはroundOfFire分なので、この場合では1発ごとに左右に発射位置が変わっていく設定となる

ObjectTemplate.setInputFire c_PIAltFire
 -右クリックで発砲せよ、という指定
  記載しない場合左クリックで発砲する

ObjectTemplate.AmmoType 2
 -Ammoboxで補給する場合の分類を指定している
  記載を省略もできるが、その場合4番になる?
  歩兵用のAmmoType番号とは別なので注意

海戦兵器

追記中

タグ:

+ タグ編集
  • タグ:
最終更新:2026年05月10日 23:50
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。