searchプロップデータプロップデータシステムの目的は、1つのゲーム・MODの全てのマップを通じて、プロップモデルのインタラクティブな振る舞いの一貫性を保証することです。3つの中心となるプロップエンティティ(prop_static、prop_dynamic、prop_physics)全ては、モデルに埋め込まれたゲーム関連データをプロップデータシステムを使って読み込みます。この記事はモデルのプロップデータに埋め込まれたデータを説明し、その編集方法を示します。参照コアデータファイルプロップデータシステムはデータを階層的に保存します。基本となるプロップデータクラスはmod\scripts\propdata.txtの中に記述されています。可能な限り、モデルは自身の特有のクラスを定義するのではなく、これらに用意されたクラスを使用すべきです。することで、プロップモデル全体に適用される変更をコンテントの再ビルドをまったく行わずに実行することができます。(例えば、HL2のプレイテストのフィードバックを受けて、全てのゲーム中木製オブジェクトに対する強度調整を何回か行いました。propdata.txtファイルで定義された他のプロップデータクラスの名前である必要があります。指定した場合、このプロップデータクラスはベースとなったクラスからの全てのデータを引き継ぎます。このクラスで更にキー指定を行うとベースクラスのキーを上書きします。このプロップがNPCの視線(Line-Of-Sight)をブロックするかどうかの設定を上書きします。指定がない場合、プロップはNPCの視線を遮るかどうかを自身の大きさによって決定します。"0"や"1"に指定することでブロックするかどうか望みどおりに決めることができます。AIがこのプロップの上を歩くことができるか判断するのに使われます。"0"か"1"に設定できます。どれだけダメージを受けたらプロップが壊れるかを指定します。指定がない場合、及び"0"に設定された場合は、プロップはダメージを受けず、壊れることがありません。このプロップで使用するカスタム物理ダメージテーブルを指定します。MODは自身のコードの中でダメージテーブルを定義する必要があります。HL2のカスタムダメージテーブルは1つだけで"glass"(ガラス)です。これは落としただけで壊れるような非常に壊れやすいオブジェクトに使用できます。このプロップの弾丸ダメージを調整します。初期値は"1.0"です。このプロップへの殴りダメージを調整します。初期値は"1.0"です。このプロップへの爆発ダメージを調整します。初期値は"1.0"です。これらのダメージ調整パラメータはオブジェクトが様々なダメージタイプからのダメージ量の違いを表現するために使ってください。全体としてのダメージへの強度を表現するためには使わないでください。石は全てに対して強いものです。これを表現するには、石オブジェクトのhealth(強度)をあげてください。ここで全てのダメージ調整パラメータを下げることはしないでください。このプロップが壊れたときの爆発半径これら2つの項目が指定されていると、そのプロップは壊れたときに指定した大きさ、ダメージで爆発するようになります。gib(一般的な破片)セットを指定します。これはプロップにカスタム破片の設定がないときだけ必要です。breakableセクションで定義されたものです。詳しくは下の壊れるモデル(Breakables)セクションを見てください。プロップを上書きして、物理シミュレーションモデルとしてだけではなくstaticモデル(prop_static)としても使えるようにします。一般的に、これは使用しないでください。このプロップが使用する物理モードを指定します。マルチプレイヤープロップが壊れる時の方法を選択します。クライアントだけで破片を生成。これがデフォルトです。プロップモデルの設定プロップとして使うモデルを作り上げたら、プロップデータの設定をする必要があります。プロップデータはモデルの.QCファイルの$keyvaluesセクションに埋め込まれます。プロップがどのようにシミュレーションされるべきか決定しましょう。HL2では以下の一般則に従うようにしました:何かに接続したり、動かないもののサポートとなるのなら、static(静的)であるべきだ。光を出すのなら、staticであるべきだ。大きく、プレイヤーがまったく動かせないのなら、staticであるべきだ。それ以外のものは、物理的にシミュレーションされるべきだ。プロップをstaticにしたいのなら、もうここで作業は終わりです。$keyvaluesセクションにプロップデータセクションがないモデルは強制的にstaticになります。したモデルをprop_physicsエンティティを使ってマップに配置すると、ゲーム内では取り除かれ、警告が表示されます。プロップを物理的にシミュレーションしたいのなら、モデルの.QCファイルに$keyvaluesセクションを追加する必要があります。自分の.qcに$keyvaluesセクションがないのなら、このコードのかたまりをそのまま追加してください。すてに$keyvaluesがあるのなら、その最後に"prop_data"セクションを追加してください。}}この例となるプロップデータでは、まずpropdata.txtの"Wooden.Small"から属性を引き継ぐことを指定しています。それからいくつかの変数を上書きして、弾丸ダメージへ無敵にし、壊れたときに爆発するようにしています。プロップで使用できる基本プロップクラスを見つけるには、mod/scripts/propdata.txtファイルを開き、自分のプロップに一番あったものを探してください。"<材質名>.<サイズ>"のものを選び、材質にあったダメージ調整パラメータだけを設定している"<材質名>.Base"を使わないように気をつけてください。プロップを作成する場合、以下のTipに従うことでゲーム/MOD中での一貫性を保つことができます:プロップで強度(health)を上書きしないようにします。その代わりに、プロップクラスを選び、そのクラスの強度を使うようにします。することで、他の椅子の2倍強度がある椅子というのがまぎれこまなくなります。可能な限り、1つのプロップの中で材質種類を混ぜないようにします。プロップを作らないでください。変える十分な理由がなければHL2のルールに従ってください:金属とプラスティックは壊れません。複数のオブジェクトをまとめて1つにするのは避けてください。他の場所で同じようなオブジェクトを個別にシミュレーションする場合です。シミュレーションを行わない動く部分やマテリアルは避けてください。つかり、コートラックにコートをかけないでください。gibはカスタムの破片(gib)をもたない壊れるオブジェクトにおいて使用されます。gibよりはるかに優れたものですが、どのくらいの数のカスタム破片をメモリにつめこめるかには限度があります。Gibsを見てください。ない場合は読みすすめてください。gibモデルを指定し、"breakable_count"がその数を指定します。ほとんどの壊れるプロップデータベースクラスは破片に使用するモデルを指定し、そこから派生し<材質名>.<サイズ>クラスがその量を指定しています。"breakable_skin"で破片モデルのスキンを指定して、壊れる前のモデルのマテリアルに近づけることもできます。model"は使用するモデル(例えば"models\Gibs\wood_gib01e.mdl")を指定します。最小から最大の順に並べられています。gibモデルを出そうとします。物理インタラクションプロップデータシステムはプロップの一貫性を保証するだけではなく、プロップの様々な物理インタラクションをオンにするためにも使われます。これらはプロップデータセクションにキーバリューセクションを埋め込むことで行います。HL2では重力銃とのインタラクションと火とのインタラクションを使うことができます。"stick"このプロップは重力銃から打ち出されるとworld(世界、マップ)に刺さって埋め込まれます。重力銃から打ち出されて何かに最初にぶつかったときの振る舞い。以下のどれかを指定できます:"break"このプロップは発射されて最初に何かにぶつかったところで必ず壊れます。"paintsplat"このプロップは発射されて最初に当たったものにデカルをペイントします。"impale"このプロップは発射されて最初に当たったものを貫通します。HL2では未使用なので現状ではサポートされていません。重力銃で最初に発射された時のプロップの振る舞い。以下のどれかを指定できます:"spin_none"このプロップは重力銃から発射された時に回転しません。デフォルトでは、重力銃は発射するオブジェクトにランダムな回転速度を適用します。それを防ぐにはこのオプションを使ってください。"spin_zaxis"このプロップは重力銃から発射された時にZ軸で回転します。"explode_fire"このプロップが壊れて爆発するときに近くの敵を発火させます。"none"このプロップはダメージに反応して動くことがありません。他のプロップデータの内容によってはダメージを受けることもありますが、ダメージの衝撃で動くことはありません。"halfhealth"このプロップはhealth(強度、体力)が最初の半分になったときに自己発火します。"yes"これによって爆破ダメージを減少させる特別な振る舞いを設定します。このプロップが死ぬ(壊れる)ほどの爆発ダメージを受けそうなときに、ダメージを死なない程度に減少させ、その代わりに自身を発火させます。"yes"このプロップは発火ダメージ(近くの火、"explode_fire"の重力銃インタラクションがマークされたプロップなど)を受けると発火します。HL2では未使用なので現状ではサポートされていません。プロトタイピングプロトタイプの作業をする場合や、モデラーが近くにいない場合、プロップデータシステムの強制を回避する方法が役に立ちます。このためには、prop_physicsやprop_dynamicの代わりにprop_physics_overrideやprop_dynamic_overrideエンティティを使用してください。prop_physics_overrideはStaticのモデル(つまり.QCファイルの$keyvaluesに"prop_data"のデータが無いモデル)を割り当てても自身を取り除きません。このエンティティを使うことでマップデザイナーがプロップの"health"(強度、体力)を設定することができます。overrideエンティティを使うことでプロトタイプ作業中や、モデラーが指定した属性を持った新しいモデルを完成させるまで、一時的に正しく設定されていないモデルを使うことができます。Reportの機能を使ってマップを公開するときにはoverrideエンティティが残っていないことを確かめることを強く推奨します。ないと、物理の一貫性がないものをリリースすることになり、プレイヤーはとても早く気づくことになります(あのオレンジバケツはこのマップで撃ったときには動かなかったのに、別の前のマップでは動いた)。