Ja/Prop data: Difference between revisions

From Valve Developer Community
< Ja
Jump to navigation Jump to search
mNo edit summary
m (fix)
Line 5: Line 5:




プロップデータシステム�?�目的�?��?1�?��?�ゲーム・MOD�?�全�?��?�マップを通�?��?��?プロップモデル�?�インタラクティブ�?�振る舞�?��?�一貫性を�?証�?�る�?��?��?��?�。 3�?��?�中心�?��?�るプロップエンティティ([[prop_static]]�?[[prop_dynamic]]�?[[prop_physics]])全�?��?��?モデル�?�埋�?込�?�れ�?�ゲーム関連データをプロップデータシステムを使�?��?�読�?�込�?��?��?�。�?��?�記事�?�モデル�?�プロップデータ�?�埋�?込�?�れ�?�データを説明�?��?�??�?�編集方法を示�?��?��?�。
プロップデータシステムの目的は、1つのゲーム・MODの全てのマップを通じて、プロップモデルのインタラクティブな振る舞いの一貫性を保証することです。 3つの中心となるプロップエンティティ([[prop_static]][[prop_dynamic]][[prop_physics]])全ては、モデルに埋め込まれたゲーム関連データをプロップデータシステムを使って読み込みます。この記事はモデルのプロップデータに埋め込まれたデータを説明し、その編集方法を示します。
 


==コアデータファイル==
==コアデータファイル==
プロップデータシステム�?�データを階層的�?��?存�?��?��?�。基本�?��?�るプロップデータクラス�?�<code>mod\scripts\propdata.txt</code>�?�中�?�記述�?�れ�?��?��?��?�。�?�能�?��?り�?モデル�?�自身�?�特有�?�クラスを定義�?�る�?��?��?��?��??�?�?�れら�?�用�?�?�れ�?�クラスを使用�?��?��??�?��?�。 �?��?��?�る�?��?��?��?プロップモデル全体�?��?�用�?�れる変更をコンテント�?��?ビルドを�?��?��?��??行�?�?��?�実行�?�る�?��?��?��?��??�?��?�。(例�?��?��?HL2�?�プレイテスト�?�フィード�?ックを�?��?��?��?全�?��?�ゲーム中木製オブジェクト�?�対�?�る強度調整を何回�?�行�?��?��?��?�。)
プロップデータシステムはデータを階層的に保存します。基本となるプロップデータクラスは<code >mod\scripts\propdata.txt</code >の中に記述されています。可能な限り、モデルは自身の特有のクラスを定義するのではなく、これらに用意されたクラスを使用すべきです。 こうすることで、プロップモデル全体に適用される変更をコンテントの再ビルドをまったく行わずに実行することができます。(例えば、HL2のプレイテストのフィードバックを受けて、全てのゲーム中木製オブジェクトに対する強度調整を何回か行いました。)
<code >propdata.txt</code >の記述形式はKeyValue形式で、それぞれのエントリーは以下のようになっています:


<code>propdata.txt</code>�?�記述形�?�?�KeyValue形�?�?��?�??れ�?�れ�?�エントリー�?�以下�?�よ�?��?��?��?��?��?��?��?�:
<pre>"プロップデータクラス名"
"プロップデータクラス�??"
{
{
    "key"              "value"
    "key"              "value"
    ...
    ...
}
}
</pre>
キーとその適正な値(value)を以下に説明します:


キー?????正?値(value)を以下?説明???:
* '''"base"'''
* '''"base"'''
: <string>(文字列) <code>propdata.txt</code>ファイル�?�定義�?�れ�?�他�?�プロップデータクラス�?��??�?�?��?�る必�?�?��?�り�?��?�。指定�?��?�場�?��?�?��?�プロップデータクラス�?�ベース�?��?��?��?�クラス�?�ら�?�全�?��?�データを引�??継�?��?��?�。�?��?�クラス�?�更�?�キー指定を行�?��?�ベースクラス�?�キーを上書�??�?��?��?�。
 
: <string>(文字列) <code >propdata.txt</code >ファイルで定義された他のプロップデータクラスの名前である必要があります。指定した場合、このプロップデータクラスはベースとなったクラスからの全てのデータを引き継ぎます。このクラスで更にキー指定を行うとベースクラスのキーを上書きします。
 
* '''"blockLOS"'''
* '''"blockLOS"'''
: <integer>(整数) �?��?�プロップ�?�NPC�?�視線(Line-Of-Sight)をブロック�?�る�?��?��?��?��?�設定を上書�??�?��?��?�。指定�?��?��?�場�?��?プロップ�?�NPC�?�視線を�?�る�?��?��?��?�を自身�?�大�??�?��?�よ�?��?�決定�?��?��?�。"0"や"1"�?�指定�?�る�?��?��?�ブロック�?�る�?��?��?��?�望�?��?��?�り�?�決�?る�?��?��?��?��??�?��?�。
 
: <integer>(整数) このプロップがNPCの視線(Line-Of-Sight)をブロックするかどうかの設定を上書きします。指定がない場合、プロップはNPCの視線を遮るかどうかを自身の大きさによって決定します。"0"や"1"に指定することでブロックするかどうか望みどおりに決めることができます。
 
* '''"AIWalkable"'''
* '''"AIWalkable"'''
: <integer>(整数) AI�?��?��?�プロップ�?�上を歩�??�?��?��?��?��??る�?�判断�?�る�?��?�使�?れ�?��?�。"0"�?�"1"�?�設定�?��??�?��?�。
 
: <integer>(整数) AIがこのプロップの上を歩くことができるか判断するのに使われます。"0""1"に設定できます。
 
* '''"health"'''
* '''"health"'''
: <integer>(整数) �?�れ�?��?�ダメージを�?��?��?�らプロップ�?�壊れる�?�を指定�?��?��?�。指定�?��?��?�場�?��?�?��?�"0"�?�設定�?�れ�?�場�?��?��?プロップ�?�ダメージを�?��?��?��?壊れる�?��?��?��?�り�?��?�ん。
 
: <integer>(整数) どれだけダメージを受けたらプロップが壊れるかを指定します。指定がない場合、及び"0"に設定された場合は、プロップはダメージを受けず、壊れることがありません。
 
* '''"damage_table"'''
* '''"damage_table"'''
: <string>(文字列) �?��?�プロップ�?�使用�?�るカスタム物�?�ダメージテーブルを指定�?��?��?�。MOD�?�自身�?�コード�?�中�?�ダメージテーブルを定義�?�る必�?�?��?�り�?��?�。HL2�?�カスタムダメージテーブル�?�1�?��?��?��?�"glass"(ガラス)�?��?�。�?�れ�?��?��?��?��?��?��?��?�壊れるよ�?��?��?�常�?�壊れや�?��?�オブジェクト�?�使用�?��??�?��?�。
 
: <string>(文字列) このプロップで使用するカスタム物理ダメージテーブルを指定します。MODは自身のコードの中でダメージテーブルを定義する必要があります。HL2のカスタムダメージテーブルは1つだけで"glass"(ガラス)です。これは落としただけで壊れるような非常に壊れやすいオブジェクトに使用できます。
 
* '''"dmg.bullets"'''
* '''"dmg.bullets"'''
: <float>(�?数) �?��?�プロップ�?�弾丸ダメージを調整�?��?��?�。�?期値�?�"1.0"�?��?�。
 
: <float>(小数) このプロップの弾丸ダメージを調整します。初期値は"1.0"です。
 
* '''"dmg.club"'''
* '''"dmg.club"'''
: <float>(�?数) �?��?�プロップ�?��?�殴りダメージを調整�?��?��?�。�?期値�?�"1.0"�?��?�。
 
: <float>(小数) このプロップへの殴りダメージを調整します。初期値は"1.0"です。
 
* '''"dmg.explosive"'''
* '''"dmg.explosive"'''
: <float>(�?数) �?��?�プロップ�?��?�爆発ダメージを調整�?��?��?�。�?期値�?�"1.0"�?��?�。
 
: �?�れら�?�ダメージ調整パラメータ�?�オブジェクト�?�様々�?�ダメージタイプ�?�ら�?�ダメージ�?�?��?��?�を表�?��?�る�?��?�?�使�?��?��??�?��?��?�。全体�?��?��?��?�ダメージ�?��?�強度を表�?��?�る�?��?�?��?�使�?�?��?��?��??�?��?��?�。例: 石�?�全�?��?�対�?��?�強�?�も�?��?��?�。�?�れを表�?��?�る�?��?��?石オブジェクト�?�health(強度)を�?��?��?��??�?��?��?�。�?��?��?�全�?��?�ダメージ調整パラメータを下�?�る�?��?��?��?��?��?��?��??�?��?��?�。
: <float>(小数) このプロップへの爆発ダメージを調整します。初期値は"1.0"です。
: これらのダメージ調整パラメータはオブジェクトが様々なダメージタイプからのダメージ量の違いを表現するために使ってください。全体としてのダメージへの強度を表現するためには使わないでください。例: 石は全てに対して強いものです。これを表現するには、石オブジェクトのhealth(強度)をあげてください。ここで全てのダメージ調整パラメータを下げることはしないでください。
 
* '''"explosive_damage"'''
* '''"explosive_damage"'''
: <float>(�?数) �?��?�プロップ�?�壊れ�?��?��??�?�爆発ダメージ�?
 
: <float>(小数) このプロップが壊れたときの爆発ダメージ量
 
* '''"explosive_radius"'''
* '''"explosive_radius"'''
: <float>(�?数) �?��?�プロップ�?�壊れ�?��?��??�?�爆発�?�径
 
: �?�れら2�?��?�項目�?�指定�?�れ�?��?�る�?��?�??�?�プロップ�?�壊れ�?��?��??�?�指定�?��?�大�??�?��?ダメージ�?�爆発�?�るよ�?��?��?�り�?��?�。
: <float>(小数) このプロップが壊れたときの爆発半径
: これら2つの項目が指定されていると、そのプロップは壊れたときに指定した大きさ、ダメージで爆発するようになります。
 
* '''"breakable_model"'''
* '''"breakable_model"'''
: <string>(文字列) �?�れ�?�プロップ�?�壊れ�?��?��??�?�generic breakable gib(一般的�?�破片)セットを指定�?��?��?�。�?�れ�?�プロップ�?�カスタム破片�?�設定�?��?��?��?��??�?��?�必�?�?��?�。�?��?��?�指定�?��??る�??�?�?�<code>propdata.txt</code>�?�generic breakableセクション�?�定義�?�れ�?�も�?��?��?�。詳�?��??�?�下�?�'''壊れるモデル(Breakables)'''セクションを見�?��??�?��?��?�。
 
: <string>(文字列) これはプロップが壊れたときのgeneric breakable gib(一般的な破片)セットを指定します。これはプロップにカスタム破片の設定がないときだけ必要です。ここで指定できる名前は<code >propdata.txt</code >のgeneric breakableセクションで定義されたものです。詳しくは下の'''壊れるモデル(Breakables)'''セクションを見てください。
 
* '''breakable_skin'''
* '''breakable_skin'''
: <integer>(整数) generic breakable gibモデル�?�使�?�スキン�?�指定
 
: <integer>(整数) generic breakable gibモデルで使うスキンの指定
 
* '''"breakable_count"'''
* '''"breakable_count"'''
: <integer>(整数) 何個�?�generic breakable gib�?�分�?�れる�?��?�設定
 
: <integer>(整数) 何個のgeneric breakable gibに分かれるかの設定
 
* '''"allowstatic"'''
* '''"allowstatic"'''
: <integer>(整数) プロップを上書?????物?シミュレーションモデル??????????staticモデル(prop_static)???も使?るよ?????。一般的???れ?使用?????????。


:  <integer>(整数) プロップを上書きして、物理シミュレーションモデルとしてだけではなくstaticモデル(prop_static)としても使えるようにします。一般的に、これは使用しないでください。
追加して、以下のキーがマルチプレイヤー向けプロップにおいて使用されます:


追加???以下?キー?マル?プレイヤー??プロップ????使用?れ??:
* '''"physicsmode"'''
* '''"physicsmode"'''
: <integer>(整数) �?��?�プロップ�?�使用�?�る物�?�モードを指定�?��?��?�。以下�?��?�れ�?��?�設定�?��?��??�?��?��?�:
 
:: "1" : ソリッド(剛体)�?�プレイヤーを押�?��?��?�る
: <integer>(整数) このプロップが使用する物理モードを指定します。以下のどれかに設定してください:
:: "2" : �?�ソリッド�?��?��?プレイヤー�?�よ�?��?�押�?��?��?�られる
:: "1" : ソリッド(剛体)でプレイヤーを押しのける
:: "3" : �?�ソリッド�?��?クライアント�?�シミュレーション�?��?�
:: "2" : 非ソリッドだが、プレイヤーによって押しのけられる
:: "3" : 非ソリッドで、クライアント側シミュレーションのみ
 
 
* '''"multiplayer_break"'''
* '''"multiplayer_break"'''
: <string>(文字列) マル?プレイヤープロップ?壊れる時?方法を?択???。以下??れ??設定???????:
:: "both" : サー?ー?クライアント両方?破片(gib)を生?
:: "server" : サー????破片を生?
:: "client" : クライアント???破片を生?。?れ?デフォルト??。


==プロップモデル�?�設定==
:  <string>(文字列) マルチプレイヤープロップが壊れる時の方法を選択します。以下のどれかに設定してください:
プロップ�?��?��?�使�?�モデルを作り上�?��?�ら�?プロップデータ�?�設定を�?�る必�?�?��?�り�?��?�。プロップデータ�?�モデル�?�[[.QC_Commands:jp|.QC]]ファイル�?�$keyvaluesセクション�?�埋�?込�?�れ�?��?�。�?��?��?プロップ�?��?��?�よ�?��?�シミュレーション�?�れる�?��??�?�決定�?��?��?�ょ�?�。HL2�?��?�以下�?�一般則�?�従�?�よ�?��?��?��?��?��?�:
:: "both" : サーバーとクライアント両方に破片(gib)を生成
* 何�?��?�接続�?��?�り�?動�?��?��?�も�?��?�サ�?ート�?��?�る�?��?�ら�?static(�?�的)�?��?�る�?��??�?�。
:: "server" : サーバだけで破片を生成
* 光を出�?��?��?�ら�?static�?��?�る�?��??�?�。
:: "client" : クライアントだけで破片を生成。これがデフォルトです。
* �?��?�も大�??�??�?プレイヤー�?��?��?��?��??動�?��?��?��?��?��?�ら�?static�?��?�る�?��??�?�。
* �??れ以外�?�も�?��?��?物�?�的�?�シミュレーション�?�れる�?��??�?�。
'''も�?�プロップをstatic�?��?��?��?��?��?�ら'''�?も�?��?��?��?�作業�?�終�?り�?��?�。$keyvaluesセクション�?�プロップデータセクション�?��?��?�モデル�?�強制的�?�static�?��?�り�?��?�。�??�?��?��?�モデルをprop_physicsエンティティを使�?��?�マップ�?��?置�?�る�?��?ゲーム内�?��?��?�り除�?�れ�?警告�?�表示�?�れ�?��?�。


'''も?プロップを物?的?シミュレーション?????ら'''?モデル?[[.QC_Commands:jp|.QC]]ファイル?$keyvaluesセクションを追加?る必???り??。も?自分?.qc?$keyvaluesセクション?????ら???コード????りを?????追加???????。も????$keyvalues??る??ら????最後?"prop_data"セクションを追加???????。$keyvalues?例?以下?よ???り??:
$keyvalues
{
    "prop_data"
    {
        "base"              "Wooden.Small"
        "dmg.bullets"      "0"
        "explosive_damage"  "100"
        "explosive_radius"  "100"
    }
}
??例??るプロップデータ?????<code>propdata.txt</code>?"Wooden.Small"?ら属性を引??継????を指定?????。??れ?ら??????変数を上書?????弾丸ダメージ?無敵???壊れ?????爆発?るよ???????。プロップ?使用???る基本プロップクラスを見??る???<code>mod/scripts/propdata.txt</code>ファイルを開???自分?プロップ?一番???も?を探???????。"<??質??>.<サイズ>"?も?を?????質????ダメージ調整パラメータ??を設定???る"<??質??>.Base"を使???よ??気を????????。


'''プロップを作�?�?�る場�?�'''�?以下�?�Tip�?�従�?��?��?��?�ゲーム/MOD中�?��?�一貫性を�?�?��?��?��?��?��??�?��?�:
==プロップモデルの設定==
* プロップ�?�強度(health)を上書�??�?��?��?�よ�?��?��?��?��?�。�??�?�代�?り�?��?プロップクラスを�?��?��?�??�?�クラス�?�強度を使�?�よ�?��?��?��?��?�。�?��?��?�る�?��?��?��?他�?�椅�?�?�2�?強度�?��?�る椅�?�?��?��?��?��?��?��?�れ�?��?��?��??�?�り�?��?�。
プロップとして使うモデルを作り上げたら、プロップデータの設定をする必要があります。プロップデータはモデルの[[.QC Commands:jp|.QC]]ファイルの$keyvaluesセクションに埋め込まれます。まず、プロップがどのようにシミュレーションされるべきか決定しましょう。HL2では以下の一般則に従うようにしました:
* �?�能�?��?り�?1�?��?�プロップ�?�中�?��??質種類を混�?��?��?�よ�?��?��?��?��?�。�?��?�り�?�?�分金属�?�?�分木製�?�プロップを作ら�?��?��?��??�?��?��?�。
 
* 変�?�る�??分�?��?�由�?��?��?�れ�?�HL2�?�ルール�?�従�?��?��??�?��?��?�:金属�?�プラスティック�?�壊れ�?��?�ん。他�?�も�?��?�壊れ�?��?�。
* 何かに接続したり、動かないもののサポートとなるのなら、static(静的)であるべきだ。
* 複数�?�オブジェクトを�?��?��?�?�1�?��?��?�る�?��?��?��?��?��??�?��?��?�。�?��??�?�他�?�場所�?��?��?�よ�?��?�オブジェクトを個別�?�シミュレーション�?�る場�?��?��?�。
* 光を出すのなら、staticであるべきだ。
* シミュレーションを行�?�?��?�動�??部分やマテリアル�?��?��?��?��??�?��?��?�。 �?��?�り�?コートラック�?�コートを�?��?��?��?��?��??�?��?��?�。
* とても大きく、プレイヤーがまったく動かせないのなら、staticであるべきだ。
* それ以外のものは、物理的にシミュレーションされるべきだ。
 
'''もしプロップをstaticにしたいのなら'''、もうここで作業は終わりです。$keyvaluesセクションにプロップデータセクションがないモデルは強制的にstaticになります。そうしたモデルをprop_physicsエンティティを使ってマップに配置すると、ゲーム内では取り除かれ、警告が表示されます。
 
'''もしプロップを物理的にシミュレーションしたいのなら'''、モデルの[[.QC Commands:jp|.QC]]ファイルに$keyvaluesセクションを追加する必要があります。もし自分の.qcに$keyvaluesセクションがないのなら、このコードのかたまりをそのまま追加してください。もしすてに$keyvaluesがあるのなら、その最後に"prop_data"セクションを追加してください。$keyvaluesの例は以下のようになります:
 
<pre>$keyvalues
{
  "prop_data"
  {
      "base"              "Wooden.Small"
      "dmg.bullets"      "0"
      "explosive_damage"  "100"
      "explosive_radius"  "100"
  }
}
</pre>
この例となるプロップデータでは、まず<code >propdata.txt</code >の"Wooden.Small"から属性を引き継ぐことを指定しています。それからいくつかの変数を上書きして、弾丸ダメージへ無敵にし、壊れたときに爆発するようにしています。プロップで使用できる基本プロップクラスを見つけるには、<code >mod/scripts/propdata.txt</code >ファイルを開き、自分のプロップに一番あったものを探してください。"<材質名>.<サイズ>"のものを選び、材質にあったダメージ調整パラメータだけを設定している"<材質名>.Base"を使わないように気をつけてください。


==壊れるモデル(Breakables)==
'''プロップを作成する場合'''、以下のTipに従うことでゲーム/MOD中での一貫性を保つことができます:
プロップデータシステム�?��?��?�generic breakable gibも扱�?��?��?�。�?��?�generic breakable gib�?�カスタム�?�破片(gib)をも�?��?��?�壊れるオブジェクト�?��?��?��?�使用�?�れ�?��?�。一般的�?��?��?カスタム�?�破片�?�generic breakable gibより�?�る�?��?�優れ�?�も�?��?��?��?��?�?��?��??ら�?��?�数�?�カスタム破片をメモリ�?��?��?�?��?る�?��?��?��?度�?��?�り�?��?�。プロップ�?�カスタム破片を作る�?��?�[[Creating Custom Breakable Gibs]]を見�?��??�?��?��?�。�??�?��?��?��?�場�?��?��?��?��?�読�?��?��?��?�?��??�?��?��?�。


オブジェクト�?�プロップデータ�?�'''"breakable_model"'''�?�モデル�?�使用�?�るgeneric gibモデルを指定�?��?'''"breakable_count"'''�?��??�?�数を指定�?��?��?�。�?��?�ん�?��?�壊れるプロップデータベースクラス�?�破片�?�使用�?�るモデルを指定�?��?�??�?��?�ら派生�?�<�??質�??>.<サイズ>クラス�?��??�?��?を指定�?��?��?��?��?�。�?�ら�?�'''"breakable_skin"'''�?�破片モデル�?�スキンを指定�?��?��?壊れる�?�?�モデル�?�マテリアル�?�近�?��?�る�?��?�も�?��??�?��?�。
* プロップで強度(health)を上書きしないようにします。その代わりに、プロップクラスを選び、そのクラスの強度を使うようにします。こうすることで、他の椅子の2倍強度がある椅子というのがまぎれこまなくなります。
* 可能な限り、1つのプロップの中で材質種類を混ぜないようにします。つまり、半分金属、半分木製のプロップを作らないでください。
* 変える十分な理由がなければHL2のルールに従ってください:金属とプラスティックは壊れません。他のものは壊れます。
* 複数のオブジェクトをまとめて1つにするのは避けてください。とくに他の場所で同じようなオブジェクトを個別にシミュレーションする場合です。
* シミュレーションを行わない動く部分やマテリアルは避けてください。 つかり、コートラックにコートをかけないでください。


Generic gib�?�種類�?�<code>mod/scripts/propdata.txt</code>ファイル�?�最後�?�以下�?�形�?�?�定義�?�れ�?��?��?��?�:
==壊れるモデル(Breakables)==
"BreakableModels"
プロップデータシステムはまたgeneric breakable gibも扱います。このgeneric breakable gibはカスタムの破片(gib)をもたない壊れるオブジェクトにおいて使用されます。一般的には、カスタムの破片はgeneric breakable gibよりはるかに優れたものですが、どのくらいの数のカスタム破片をメモリにつめこめるかには限度があります。プロップのカスタム破片を作るには[[Creating Custom Breakable Gibs]]を見てください。そうでない場合は読みすすめてください。
{
    "gib set name"
    {
        "gib model"              "1"
        "gib model"              "1"
        "gib model"              "1"
        ...
    }
    "gib set name"
    ...
}
"gib model"�?�使用�?�るモデル(例�?��?�"models\Gibs\wood_gib01e.mdl")を指定�?��?��?�。最�?�?�ら最大�?�順�?�並�?�られ�?��?��?��?�。プロップデータシステム�?�出�?�る�?り�?壊れるモデル�?�サイズ範囲�?�中�?�generic gibモデルを出�??�?��?��?��?��?�。


==物�?�インタラクション==
オブジェクトのプロップデータの'''"breakable_model"'''はモデルが使用するgeneric gibモデルを指定し、'''"breakable_count"'''がその数を指定します。ほとんどの壊れるプロップデータベースクラスは破片に使用するモデルを指定し、そこから派生し<材質名>.<サイズ>クラスがその量を指定しています。さらに'''"breakable_skin"'''で破片モデルのスキンを指定して、壊れる前のモデルのマテリアルに近づけることもできます。
プロップデータシステム�?�プロップ�?�一貫性を�?証�?�る�?��?��?��?��?��??�?プロップ�?�様々�?�物�?�インタラクションをオン�?��?�る�?��?�?�も使�?れ�?��?�。�?�れら�?�プロップデータセクション�?�キー�?リューセクションを埋�?込む�?��?��?�行�?��?��?�。HL2�?��?�[[weapon_physcannon|�?力銃]]�?��?�インタラクション�?��?��?��?�インタラクションを使�?��?��?��?��?��??�?��?�。
Generic gibの種類は<code >mod/scripts/propdata.txt</code >ファイルの最後に以下の形式で定義されています:


'''[[weapon_physcannon|�?力銃]]�?��?�インタラクション設定'''�?�以下�?�形�?�?�プロップデータセクション内�?�定義�?�れ�?��?�:
<pre>"BreakableModels"
     "prop_data"
{
     "gib set name"
     {
     {
        "gib model"              "1"
        "gib model"              "1"
        "gib model"              "1"
         ...
         ...
        "physgun_interactions"
        {
            "key"          "value"
            ...
        }
     }
     }
キー�?��??�?��?�正�?�値(value)を以下�?�説明�?��?��?�:
 
    "gib set name"
    ...
}
</pre>
"gib model"は使用するモデル(例えば"models\Gibs\wood_gib01e.mdl")を指定します。最小から最大の順に並べられています。プロップデータシステムは出来る限り、壊れるモデルのサイズ範囲の中にgeneric gibモデルを出そうとします。
 
==物理インタラクション==
プロップデータシステムはプロップの一貫性を保証するだけではなく、プロップの様々な物理インタラクションをオンにするためにも使われます。これらはプロップデータセクションにキーバリューセクションを埋め込むことで行います。HL2では[[Weapon physcannon|重力銃]]とのインタラクションと火とのインタラクションを使うことができます。
'''[[Weapon physcannon|重力銃]]とのインタラクション設定'''は以下の形式でプロップデータセクション内に定義されます:
 
<pre>  "prop_data"
  {
      ...
 
      "physgun_interactions"
      {
          "key"          "value"
          ...
      }
  }
</pre>
キーとその適正な値(value)を以下に説明します:
 
* '''"onworldimpact"''' "stick"
* '''"onworldimpact"''' "stick"
:�?��?�プロップ�?��?力銃�?�ら打�?�出�?�れる�?�[[world]](世界�?マップ)�?�刺�?��?��?�埋�?込�?�れ�?��?�。
 
: このプロップは重力銃から打ち出されると[[World" title="World|world]](世界、マップ)に刺さって埋め込まれます。
 
* '''onfirstimpact"'''
* '''onfirstimpact"'''
: <string>(文字列) �?力銃�?�ら打�?�出�?�れ�?�何�?��?�最�?�?��?��?��?��?��?��?��??�?�振る舞�?�。以下�?��?�れ�?�を指定�?��??�?��?�:
 
::"break"
: <string>(文字列) 重力銃から打ち出されて何かに最初にぶつかったときの振る舞い。以下のどれかを指定できます:
:::�?��?�プロップ�?�発射�?�れ�?�最�?�?�何�?��?��?��?��?��?��?��?��?��?�?�必�?�壊れ�?��?�。
:: "break"
::: このプロップは発射されて最初に何かにぶつかったところで必ず壊れます。
 
::"paintsplat"
::"paintsplat"
:::�?��?�プロップ�?�発射�?�れ�?�最�?�?�当�?��?��?�も�?��?�デカルをペイント�?��?��?�。
::: このプロップは発射されて最初に当たったものにデカルをペイントします。
 
::"impale"
::"impale"
:::�?��?�プロップ�?�発射�?�れ�?�最�?�?�当�?��?��?�も�?�を貫通�?��?��?�。HL2�?��?�未使用�?��?��?��?�状�?��?�サ�?ート�?�れ�?��?��?��?�ん。
::: このプロップは発射されて最初に当たったものを貫通します。HL2では未使用なので現状ではサポートされていません。
 
 
 
*'''"onlaunch"'''
*'''"onlaunch"'''
: <string>(文字列) �?力銃�?�最�?�?�発射�?�れ�?�時�?�プロップ�?�振る舞�?�。以下�?��?�れ�?�を指定�?��??�?��?�:
 
::"spin_none"
: <string>(文字列) 重力銃で最初に発射された時のプロップの振る舞い。以下のどれかを指定できます:
:::�?��?�プロップ�?��?力銃�?�ら発射�?�れ�?�時�?�回転�?��?��?�ん。デフォルト�?��?��?�?力銃�?�発射�?�るオブジェクト�?�ランダム�?�回転速度を�?�用�?��?��?�。�??れを防�??�?��?��?��?�オプションを使�?��?��??�?��?��?�。
:: "spin_none"
::: このプロップは重力銃から発射された時に回転しません。デフォルトでは、重力銃は発射するオブジェクトにランダムな回転速度を適用します。それを防ぐにはこのオプションを使ってください。
 
::"spin_zaxis"
::"spin_zaxis"
:::�?��?�プロップ�?��?力銃�?�ら発射�?�れ�?�時�?�Z軸�?�回転�?��?��?�。
::: このプロップは重力銃から発射された時にZ軸で回転します。
 
 
 
*'''"onbreak"''' "explode_fire"
*'''"onbreak"''' "explode_fire"
:�?��?�プロップ�?�壊れ�?�爆発�?�る�?��??�?�近�??�?�敵を発�?��?��?��?��?�。
 
: このプロップが壊れて爆発するときに近くの敵を発火させます。
 
*'''"damage"''' "none"
*'''"damage"''' "none"
:??プロップ?ダメージ???応??動??????り??ん。他?プロップデータ?内容?よ???ダメージを??る??も?り????ダメージ??撃?動??????り??ん。


: このプロップはダメージに反応して動くことがありません。他のプロップデータの内容によってはダメージを受けることもありますが、ダメージの衝撃で動くことはありません。
'''火のインタラクションの設定'''は以下の形式でプロップデータセクション内に定義されます:
<pre>  "prop_data"
  {
      ...
      "fire_interactions"
      {
          "key"          "value"
          ...
      }
  }
</pre>
キーとその適正な値(value)を以下に説明します:


'''??インタラクション?設定'''?以下?形??プロップデータセクション内?定義?れ??:
    "prop_data"
    {
        ...
        "fire_interactions"
        {
            "key"          "value"
            ...
        }
    }
キー?????正?値(value)を以下?説明???:
*'''"ignite"''' "halfhealth"
*'''"ignite"''' "halfhealth"
:�?��?�プロップ�?�health(強度�?体力)�?�最�?�?��?�分�?��?��?��?��?��??�?�自己発�?��?��?��?�。
 
: このプロップはhealth(強度、体力)が最初の半分になったときに自己発火します。
 
*'''"explosive_resist"''' "yes"
*'''"explosive_resist"''' "yes"
:�?�れ�?�よ�?��?�爆破ダメージを減少�?��?�る特別�?�振る舞�?�を設定�?��?��?�。�?��?�プロップ�?�死�?�(壊れる)�?��?��?�爆発ダメージを�?��?��??�?��?��?��??�?��?ダメージを死�?��?��?�程度�?�減少�?��?��?�??�?�代�?り�?�自身を発�?��?��?��?��?�。
 
: これによって爆破ダメージを減少させる特別な振る舞いを設定します。このプロップが死ぬ(壊れる)ほどの爆発ダメージを受けそうなときに、ダメージを死なない程度に減少させ、その代わりに自身を発火させます。
 
*'''"flammable"''' "yes"
*'''"flammable"''' "yes"
:??プロップ?発?ダメージ(近?????"explode_fire"??力銃インタラクション?マーク?れ?プロップ??)を??る?発????。HL2??未使用????状??サ?ート?れ????ん。


: このプロップは発火ダメージ(近くの火、"explode_fire"の重力銃インタラクションがマークされたプロップなど)を受けると発火します。HL2では未使用なので現状ではサポートされていません。


==プロトタイピング==
プロトタイプ?作業を?る場?や?モデラー?近??????場??プロップデータシステム?強制を回??る方法?役?立???。???????[[prop_physics]]や[[prop_dynamic]]?代?り?[[prop_physics_override]]や[[prop_dynamic_override]]エンティティを使用???????。[[prop_physics_override]]?Static?モデル(??り.QCファイル?$keyvalues?"prop_data"?データ?無?モデル)を割り当??も自身を?り除????ん。????エンティティを使????マップデザイナー?プロップ?"health"(強度?体力)を設定?る????????。




overrideエンティティを使�?��?��?��?�プロトタイプ作業中や�?モデラー�?�指定�?��?�属性を�?�?��?�新�?��?�モデルを完�?�?��?�る�?��?��?一時的�?�正�?��??設定�?�れ�?��?��?��?�モデルを使�?��?��?��?��?��??�?��?�。�?ンマー�?�[[Hammer Entity Report Dialog|Entity Report]]�?�機能を使�?��?�マップを公開�?�る�?��??�?��?�overrideエンティティ�?�残�?��?��?��?��?��?��?�を確�?��?る�?��?�を'''強�??推奨�?��?��?�'''。�?�も�?��?��?��?物�?��?�一貫性�?��?��?�も�?�をリリース�?�る�?��?��?��?�り�?プレイヤー�?��?��?�も早�??気�?��??�?��?��?��?�り�?��?�(�?��?�オレンジ�?ケツ�?��?��?�マップ�?�撃�?��?��?��??�?��?�動�?��?��?��?��?��?��?��?別�?��?�?�マップ�?��?�動�?��?�)
==プロトタイピング==
プロトタイプの作業をする場合や、モデラーが近くにいない場合、プロップデータシステムの強制を回避する方法が役に立ちます。このためには、[[prop_physics]]や[[prop_dynamic]]の代わりに[[prop_physics_override]]や[[prop_dynamic_override]]エンティティを使用してください。[[prop_physics_override]]はStaticのモデル(つまり.QCファイルの$keyvaluesに"prop_data"のデータが無いモデル)を割り当てても自身を取り除きません。またこのエンティティを使うことでマップデザイナーがプロップの"health"(強度、体力)を設定することができます。


==�?�照==
overrideエンティティを使うことでプロトタイプ作業中や、モデラーが指定した属性を持った新しいモデルを完成させるまで、一時的に正しく設定されていないモデルを使うことができます。ハンマーの[[Hammer Entity Report Dialog|Entity Report]]の機能を使ってマップを公開するときにはoverrideエンティティが残っていないことを確かめることを'''強く推奨します'''。さもないと、物理の一貫性がないものをリリースすることになり、プレイヤーはとても早く気づくことになります(あのオレンジバケツはこのマップで撃ったときには動かなかったのに、別の前のマップでは動いた)。


==参照==
* [[prop_static]], [[prop_dynamic]], [[prop_physics]]
* [[prop_static]], [[prop_dynamic]], [[prop_physics]]
* [http://www.c-sec.net/phpBB/kb.php?mode=article&k=84 プロップタイプ�?�概�?]
* [http://www.c-sec.net/phpBB/kb.php?mode=article&amp;k=84 プロップタイプの概要]

Revision as of 04:32, 29 November 2005

プロップデータ

Original English version: Prop Data


プロップデータシステムの目的は、1つのゲーム・MODの全てのマップを通じて、プロップモデルのインタラクティブな振る舞いの一貫性を保証することです。 3つの中心となるプロップエンティティ(prop_staticprop_dynamicprop_physics)全ては、モデルに埋め込まれたゲーム関連データをプロップデータシステムを使って読み込みます。この記事はモデルのプロップデータに埋め込まれたデータを説明し、その編集方法を示します。


コアデータファイル

プロップデータシステムはデータを階層的に保存します。基本となるプロップデータクラスはmod\scripts\propdata.txtの中に記述されています。可能な限り、モデルは自身の特有のクラスを定義するのではなく、これらに用意されたクラスを使用すべきです。 こうすることで、プロップモデル全体に適用される変更をコンテントの再ビルドをまったく行わずに実行することができます。(例えば、HL2のプレイテストのフィードバックを受けて、全てのゲーム中木製オブジェクトに対する強度調整を何回か行いました。) propdata.txtの記述形式はKeyValue形式で、それぞれのエントリーは以下のようになっています:

"プロップデータクラス名"
{
    "key"              "value"
    ...
}

キーとその適正な値(value)を以下に説明します:

  • "base"
<string>(文字列) propdata.txtファイルで定義された他のプロップデータクラスの名前である必要があります。指定した場合、このプロップデータクラスはベースとなったクラスからの全てのデータを引き継ぎます。このクラスで更にキー指定を行うとベースクラスのキーを上書きします。
  • "blockLOS"
<integer>(整数) このプロップがNPCの視線(Line-Of-Sight)をブロックするかどうかの設定を上書きします。指定がない場合、プロップはNPCの視線を遮るかどうかを自身の大きさによって決定します。"0"や"1"に指定することでブロックするかどうか望みどおりに決めることができます。
  • "AIWalkable"
<integer>(整数) AIがこのプロップの上を歩くことができるか判断するのに使われます。"0"か"1"に設定できます。
  • "health"
<integer>(整数) どれだけダメージを受けたらプロップが壊れるかを指定します。指定がない場合、及び"0"に設定された場合は、プロップはダメージを受けず、壊れることがありません。
  • "damage_table"
<string>(文字列) このプロップで使用するカスタム物理ダメージテーブルを指定します。MODは自身のコードの中でダメージテーブルを定義する必要があります。HL2のカスタムダメージテーブルは1つだけで"glass"(ガラス)です。これは落としただけで壊れるような非常に壊れやすいオブジェクトに使用できます。
  • "dmg.bullets"
<float>(小数) このプロップの弾丸ダメージを調整します。初期値は"1.0"です。
  • "dmg.club"
<float>(小数) このプロップへの殴りダメージを調整します。初期値は"1.0"です。
  • "dmg.explosive"
<float>(小数) このプロップへの爆発ダメージを調整します。初期値は"1.0"です。
これらのダメージ調整パラメータはオブジェクトが様々なダメージタイプからのダメージ量の違いを表現するために使ってください。全体としてのダメージへの強度を表現するためには使わないでください。例: 石は全てに対して強いものです。これを表現するには、石オブジェクトのhealth(強度)をあげてください。ここで全てのダメージ調整パラメータを下げることはしないでください。
  • "explosive_damage"
<float>(小数) このプロップが壊れたときの爆発ダメージ量
  • "explosive_radius"
<float>(小数) このプロップが壊れたときの爆発半径
これら2つの項目が指定されていると、そのプロップは壊れたときに指定した大きさ、ダメージで爆発するようになります。
  • "breakable_model"
<string>(文字列) これはプロップが壊れたときのgeneric breakable gib(一般的な破片)セットを指定します。これはプロップにカスタム破片の設定がないときだけ必要です。ここで指定できる名前はpropdata.txtのgeneric breakableセクションで定義されたものです。詳しくは下の壊れるモデル(Breakables)セクションを見てください。
  • breakable_skin
<integer>(整数) generic breakable gibモデルで使うスキンの指定
  • "breakable_count"
<integer>(整数) 何個のgeneric breakable gibに分かれるかの設定
  • "allowstatic"
<integer>(整数) プロップを上書きして、物理シミュレーションモデルとしてだけではなくstaticモデル(prop_static)としても使えるようにします。一般的に、これは使用しないでください。


追加して、以下のキーがマルチプレイヤー向けプロップにおいて使用されます:

  • "physicsmode"
<integer>(整数) このプロップが使用する物理モードを指定します。以下のどれかに設定してください:
"1" : ソリッド(剛体)でプレイヤーを押しのける
"2" : 非ソリッドだが、プレイヤーによって押しのけられる
"3" : 非ソリッドで、クライアント側シミュレーションのみ


  • "multiplayer_break"
<string>(文字列) マルチプレイヤープロップが壊れる時の方法を選択します。以下のどれかに設定してください:
"both" : サーバーとクライアント両方に破片(gib)を生成
"server" : サーバだけで破片を生成
"client" : クライアントだけで破片を生成。これがデフォルトです。


プロップモデルの設定

プロップとして使うモデルを作り上げたら、プロップデータの設定をする必要があります。プロップデータはモデルの.QCファイルの$keyvaluesセクションに埋め込まれます。まず、プロップがどのようにシミュレーションされるべきか決定しましょう。HL2では以下の一般則に従うようにしました:

  • 何かに接続したり、動かないもののサポートとなるのなら、static(静的)であるべきだ。
  • 光を出すのなら、staticであるべきだ。
  • とても大きく、プレイヤーがまったく動かせないのなら、staticであるべきだ。
  • それ以外のものは、物理的にシミュレーションされるべきだ。

もしプロップをstaticにしたいのなら、もうここで作業は終わりです。$keyvaluesセクションにプロップデータセクションがないモデルは強制的にstaticになります。そうしたモデルをprop_physicsエンティティを使ってマップに配置すると、ゲーム内では取り除かれ、警告が表示されます。

もしプロップを物理的にシミュレーションしたいのなら、モデルの.QCファイルに$keyvaluesセクションを追加する必要があります。もし自分の.qcに$keyvaluesセクションがないのなら、このコードのかたまりをそのまま追加してください。もしすてに$keyvaluesがあるのなら、その最後に"prop_data"セクションを追加してください。$keyvaluesの例は以下のようになります:

$keyvalues
{
   "prop_data"
   {
       "base"              "Wooden.Small"
       "dmg.bullets"       "0"
       "explosive_damage"  "100"
       "explosive_radius"  "100"
   }
}

この例となるプロップデータでは、まずpropdata.txtの"Wooden.Small"から属性を引き継ぐことを指定しています。それからいくつかの変数を上書きして、弾丸ダメージへ無敵にし、壊れたときに爆発するようにしています。プロップで使用できる基本プロップクラスを見つけるには、mod/scripts/propdata.txtファイルを開き、自分のプロップに一番あったものを探してください。"<材質名>.<サイズ>"のものを選び、材質にあったダメージ調整パラメータだけを設定している"<材質名>.Base"を使わないように気をつけてください。

プロップを作成する場合、以下のTipに従うことでゲーム/MOD中での一貫性を保つことができます:

  • プロップで強度(health)を上書きしないようにします。その代わりに、プロップクラスを選び、そのクラスの強度を使うようにします。こうすることで、他の椅子の2倍強度がある椅子というのがまぎれこまなくなります。
  • 可能な限り、1つのプロップの中で材質種類を混ぜないようにします。つまり、半分金属、半分木製のプロップを作らないでください。
  • 変える十分な理由がなければHL2のルールに従ってください:金属とプラスティックは壊れません。他のものは壊れます。
  • 複数のオブジェクトをまとめて1つにするのは避けてください。とくに他の場所で同じようなオブジェクトを個別にシミュレーションする場合です。
  • シミュレーションを行わない動く部分やマテリアルは避けてください。 つかり、コートラックにコートをかけないでください。

壊れるモデル(Breakables)

プロップデータシステムはまたgeneric breakable gibも扱います。このgeneric breakable gibはカスタムの破片(gib)をもたない壊れるオブジェクトにおいて使用されます。一般的には、カスタムの破片はgeneric breakable gibよりはるかに優れたものですが、どのくらいの数のカスタム破片をメモリにつめこめるかには限度があります。プロップのカスタム破片を作るにはCreating Custom Breakable Gibsを見てください。そうでない場合は読みすすめてください。

オブジェクトのプロップデータの"breakable_model"はモデルが使用するgeneric gibモデルを指定し、"breakable_count"がその数を指定します。ほとんどの壊れるプロップデータベースクラスは破片に使用するモデルを指定し、そこから派生し<材質名>.<サイズ>クラスがその量を指定しています。さらに"breakable_skin"で破片モデルのスキンを指定して、壊れる前のモデルのマテリアルに近づけることもできます。 Generic gibの種類はmod/scripts/propdata.txtファイルの最後に以下の形式で定義されています:

"BreakableModels"
{
    "gib set name"
    {
        "gib model"              "1"
        "gib model"              "1"
        "gib model"              "1"
        ...
    }

    "gib set name"
    ...
}

"gib model"は使用するモデル(例えば"models\Gibs\wood_gib01e.mdl")を指定します。最小から最大の順に並べられています。プロップデータシステムは出来る限り、壊れるモデルのサイズ範囲の中にgeneric gibモデルを出そうとします。

物理インタラクション

プロップデータシステムはプロップの一貫性を保証するだけではなく、プロップの様々な物理インタラクションをオンにするためにも使われます。これらはプロップデータセクションにキーバリューセクションを埋め込むことで行います。HL2では重力銃とのインタラクションと火とのインタラクションを使うことができます。 重力銃とのインタラクション設定は以下の形式でプロップデータセクション内に定義されます:

   "prop_data"
   {
       ...

       "physgun_interactions"
       {
           "key"           "value"
           ...
       }
   }

キーとその適正な値(value)を以下に説明します:

  • "onworldimpact" "stick"
このプロップは重力銃から打ち出されるとworld(世界、マップ)に刺さって埋め込まれます。
  • onfirstimpact"
<string>(文字列) 重力銃から打ち出されて何かに最初にぶつかったときの振る舞い。以下のどれかを指定できます:
"break"
このプロップは発射されて最初に何かにぶつかったところで必ず壊れます。
"paintsplat"
このプロップは発射されて最初に当たったものにデカルをペイントします。
"impale"
このプロップは発射されて最初に当たったものを貫通します。HL2では未使用なので現状ではサポートされていません。


  • "onlaunch"
<string>(文字列) 重力銃で最初に発射された時のプロップの振る舞い。以下のどれかを指定できます:
"spin_none"
このプロップは重力銃から発射された時に回転しません。デフォルトでは、重力銃は発射するオブジェクトにランダムな回転速度を適用します。それを防ぐにはこのオプションを使ってください。
"spin_zaxis"
このプロップは重力銃から発射された時にZ軸で回転します。


  • "onbreak" "explode_fire"
このプロップが壊れて爆発するときに近くの敵を発火させます。
  • "damage" "none"
このプロップはダメージに反応して動くことがありません。他のプロップデータの内容によってはダメージを受けることもありますが、ダメージの衝撃で動くことはありません。


火のインタラクションの設定は以下の形式でプロップデータセクション内に定義されます:

   "prop_data"
   {
       ...

       "fire_interactions"
       {
           "key"           "value"
           ...
       }
   }

キーとその適正な値(value)を以下に説明します:

  • "ignite" "halfhealth"
このプロップはhealth(強度、体力)が最初の半分になったときに自己発火します。
  • "explosive_resist" "yes"
これによって爆破ダメージを減少させる特別な振る舞いを設定します。このプロップが死ぬ(壊れる)ほどの爆発ダメージを受けそうなときに、ダメージを死なない程度に減少させ、その代わりに自身を発火させます。
  • "flammable" "yes"
このプロップは発火ダメージ(近くの火、"explode_fire"の重力銃インタラクションがマークされたプロップなど)を受けると発火します。HL2では未使用なので現状ではサポートされていません。


プロトタイピング

プロトタイプの作業をする場合や、モデラーが近くにいない場合、プロップデータシステムの強制を回避する方法が役に立ちます。このためには、prop_physicsprop_dynamicの代わりにprop_physics_overrideprop_dynamic_overrideエンティティを使用してください。prop_physics_overrideはStaticのモデル(つまり.QCファイルの$keyvaluesに"prop_data"のデータが無いモデル)を割り当てても自身を取り除きません。またこのエンティティを使うことでマップデザイナーがプロップの"health"(強度、体力)を設定することができます。

overrideエンティティを使うことでプロトタイプ作業中や、モデラーが指定した属性を持った新しいモデルを完成させるまで、一時的に正しく設定されていないモデルを使うことができます。ハンマーのEntity Reportの機能を使ってマップを公開するときにはoverrideエンティティが残っていないことを確かめることを強く推奨します。さもないと、物理の一貫性がないものをリリースすることになり、プレイヤーはとても早く気づくことになります(あのオレンジバケツはこのマップで撃ったときには動かなかったのに、別の前のマップでは動いた)。

参照