この記事は半年前の記憶を元に書かれており、実際の仕様と異なることがあります。
細かな仕様についてはまだ触れられていません。
無駄にダラダラと書いてますが、既存のエフェクトを元に色々改変を加えていけばすぐに仕様が分かる筈です。
”間に説明文等を挟んでいる場合”、空白の改行が1行入るべきところに<空行>と書いています。
説明文を取払うと、改行が2行かと思いがちですが、絶対に1行だけにして下さい。
fxp内で2行以上の連続した空白行があると落ちます。
印の位置に間違いがある可能性があるので、既存のエフェクトと見比べながら編集することをお勧めします。
FX_PROJECT_DATA:
<空行>
*Effects.ifpの先頭に書きます。
<空行>
FX_SYSTEM_DATA:109
FILENAME: X:\SA\FxTools\Data\effects\gta_pc\particles/prt_blood.fxs
NAME: prt_blood
LENGTH: 1.000
LOOPINTERVALMIN: 0.000
LENGTH: 0.000
PLAYMODE: 2
CULLDIST: 50.000
BOUNDINGSPHERE: 0.0 0.0 0.0 0.0
NUM_PRIMS: 1
FX_PRIM_EMITTER_DATA:
<空行>
*FX_SYSTEM_DATA:常に109。詳細不明。
*FILENAME:無視される
*NAME:エフェクトの名前。外部から呼び出すのに使う。
*LENGTH:エフェクトの継続時間? 詳細不明。
LOOPINTERVALMINと2つめのLENGHはどのエフェクトも0.0。詳細不明。
*PLAYMODE:ループするなら0、しないなら2にする。
*CULLDIST―詳細不明。高い数値にすると、より遠くからでもエフェクトを見ることが出来る。
*BOUNDINGSPHERE―詳細不明。恐らく3つ目までの数はオフセット、4つ目は半径
*NUM_PRIMS:”FX_PRIM_BASE_DATA”の数。
<空行>
FX_PRIM_BASE_DATA:
NAME: debris3
MATRIX: 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000
TEXTURE: cardebris_02
TEXTURE2: NULL
TEXTURE3: NULL
TEXTURE4: NULL
ALPHAON: 1
SRCBLENDID: 4
DSTBLENDID: 5
NUM_INFOS: 2
FX_INFO_EM***_DATA:
〜
FX_INFO_*****_DATA:
〜
<空行>
*NAME:パーティクルエミッターの名称。
一つのエフェクトで複数のエミッターを使う際は、ここの名前は同じであってはいけない。
*MATRIX―詳細不明。回転行列? 特に設定する必要は無いように思われる。
*TEXTURE:使用するテクスチャを定義する。テクスチャはmodelフォルダのeffectsPC.txdに入れておく。
複数設定した場合、FX_INFO_ANIMTEX_DATAでアニメーション設定ができる。
*ALPHAON:アルファチャンネルを使うかどうか。1で使う。
*SRC(DST)BLENDID:D3DBLENDの設定。4:5か、4:1しか使っていない。
*NUM_INFOS:FX_INFO_〜と続くセクションの数。実際の数と矛盾しているとクラッシュする。
FX_INFO_〜の役割は説明が長くなるので後述。名前にEM***とつくものを初めに設定すること。
〜パーティクルエミッターの設定を終え、次のエミッターの設定をする場合
<空行>
LODSTART: 30.000
LODEND: 50.000
FX_PRIM_EMITTER_DATA:
<空行>
先述のFX_PRIM_BASE_DATA: の項へ戻る。
〜パーティクルエミッターの設定を終え、エフェクトの設定を終える場合
<空行>
LODSTART: 30.000
LODEND: 50.000
OMITTEXTURES: 0
TXDNAME: NOTXDSET
<空行>
*LODSTART:簡易表示を始める距離?
*LODEND:表示をしない距離?
次のエフェクトを作る場合、先述のFX_SYSTEM_DATA: の項へと戻る。
<空行>
FX_PROJECT_DATA_END:
<空行>
*Effects.ifpの最後に置きます。最後にも空白行があるみたいです。
クラッシュする、正しく動作しない場合は
*2行以上の連続した空行が無い? 余計な空行が無い? 逆に空行が足りてない?
*数値や書式に問題が無い?
*テクスチャが存在している?(TXDWorkshopがバグを起こしてることもあるので注意。)
*FX_PRIM_BASE_DATA:の項で、NAME:が重複してない?
*各項で、NUM_***S: が正しく設定されてる?
────────────────────────────────────────────────────────────────────────────
以下では<空行>の印を省略してます。
改行の仕方は先述のFX_PRIM_BASE_DATA:の項を参考にしてください。
FX_INFO_EMLIFE_DATA:
LIFE:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 2.500
BIAS:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
*エフェクトの継続時間。1.000=1000ms.
BIASとは差のようなもの。上の例でBIASが1.0だった場合、LIFEの値の範囲は1.50~3.50となる。
NUM_KEYSで言う"KEY"とは 「FX_KEYFLOAT_DATA: TIME:x.xx VAL:x.xx」 の3行のセットのこと。
TIME: 1.0=エフェクトの終了時間。 VALがその項の値です。
KEYを増やした例
NUM_KEYS: 2 //KEYの数
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 10.000
FX_KEYFLOAT_DATA: //
TIME: 1.000 //NUM_KEYSで設定した数だけ、この3行を増やしていきます。
VAL: 40.000 //同じ項内では、NUM_KEYSの値を揃えて下さい。
FX_INFO_EMRATE_DATA:
RATE:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 5.000
*表示するテクスチャの上限。(1.0=1こ。)
FX_INFO_EMSPEED_DATA:
SPEED:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 3.000
BIAS:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
*移動速度。どうやら空気抵抗が大きくなるみたいです。
FX_INFO_EMSIZE_DATA:
RADIUS:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
SIZEMINX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
SIZEMAXX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
SIZEMINY:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
SIZEMAXY:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
SIZEMINZ:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
SIZEMAXZ:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
*エフェクトが発生する範囲
1.0=1m?
FX_INFO_EMANGLE_DATA:
MIN:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
MAX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 180.000
*フォースの向き。(0.0=+Z軸 90.0=XY面に平行? 180.0=-Z軸
FX_INFO_EMROTATION_DATA:
ANGLEMIN:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
ANGLEMAX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 360.000
*フォースの向き。FX_INFO_EMANGLE_DATAと併用し、そこで設定した向きにZ軸回転を加える役割。
FX_INFO_EMPOS_DATA:
X:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
Y:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
Z:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: -1.000
*エフェクトの位置。この場合はすこし下から発生します。
FX_INFO_EMDIR_DATA:
DIRX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
DIRY:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
DIRZ:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 1.000
*どう説明したら良いのか分からないので使用例を書いときます。
エフェクトを人やオブジェクトにくっつけても、エフェクトの向きを変えることは出来ません。
そこで、DIRZ=1.0に設定すると アタッチしたオブジェクトの上に向けられます。
同様にDIRYを1.0に設定すれば オブジェクトの正面に向きます。
これを使った際は、原則 Forceの値はZだけ割り振ってやるといいみたいです。
cleoでオブジェクトなどにくっつける際は、Rotationの値は 0.0 0.00000001 0.0 にするといいみたいです。
(この値、回転に変わりはないと思いますが、通常のモノとは違うのかも。)
FX_INFO_ANIMTEX_DATA:
TIMEMODEPRT: 1
TEXID:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 4
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 1.000
FX_KEYFLOAT_DATA:
TIME: 0.500
VAL: 2.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 3.000
FX_KEYFLOAT_DATA:
TIME: 1.500
VAL: 4.000
*テクスチャのアニメーション。あらかじめFX_PRIM_BASE_DATAでテクスチャを複数設定する必要がある。
よく分からない。色々研究してみてください。。
FX_INFO_SIZE_DATA:
TIMEMODEPRT: 1
SIZEX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 2.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 2.000
SIZEY:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 2.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 2.000
SIZEXBIAS:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 0.000
SIZEYBIAS:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 0.000
*テクスチャの大きさ。
拡大縮小したテクスチャがそのまま回転する。細長いテクスチャを扱うときには注意。
FX_INFO_SPRITERECT_DATA:
TIMEMODEPRT: 1
TOP:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 1.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 0.500
BOTTOM:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: -1.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: -0.500
LEFT:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.300
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 0.300
RIGHT:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: -0.300
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: -0.300
*テクスチャの左上隅と右下隅の座標。
Top=左上y座標 Bottom=右下y座標 Left=左上x座標 Right=右下x座標
FX_INFO_SIZE_DATAと併用し、ここの値は乗数の役割を果たす。(1.0がデフォ)
FX_INFO_FORCE_DATA:
TIMEMODEPRT: 1
FORCEX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FORCEY:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FORCEZ:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 3.000
*テクスチャの移動の設定。Z軸にきつめの上限がある。
FX_INFO_FRICTION_DATA:
TIMEMODEPRT: 1
FRICTION:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 1.000
*テクスチャに空気抵抗。数値が低いほど抵抗が大きい。
FX_INFO_WIND_DATA:
TIMEMODEPRT: 1
WINDFACTOR:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 3.000
*風?恐らくテクスチャの動きに影響する。詳細不明。
FX_INFO_FLOAT_DATA:
TIMEMODEPRT: 1
*浮く?詳細不明。
FX_INFO_JITTER_DATA:
TIMEMODEPRT: 1
JITTERFACTOR:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 0.000
*テクスチャが揺れる(震える?)
FX_INFO_NOISE_DATA:
TIMEMODEPRT: 1
NOISE:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 2.000
*FX_INFO_JITTER_DATAと似ている?
FX_INFO_COLOUR_DATA:
TIMEMODEPRT: 1
RED:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 128.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 0.000
GREEN:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 255.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 0.000
BLUE:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 255.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 255.000
ALPHA:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 128.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 0.000
*テクスチャの色をRGBAで設定。発光はせず、暗くてはっきりしない色になる。
FX_INFO_COLOURBRIGHT_DATA:
TIMEMODEPRT: 1
RED:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 255.000
GREEN:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 255.000
BLUE:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 255.000
ALPHA:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 255.000
BIAS:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 2
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 88.000
FX_KEYFLOAT_DATA:
TIME: 1.000
VAL: 88.000
*テクスチャの色をRGBAで設定。僅かに発光し、FX_INFO_COLOUR_DATAより少し明るい色になる。
FX_INFO_SELFLIT_DATA:
TIMEMODEPRT: 1
*発光してテクスチャの色がより明るくなる。
FX_INFO_ROTSPEED_DATA:
TIMEMODEPRT: 1
MINCW:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
MAXCW:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 90.000
MINCCW:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
MAXCCW:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 90.000
*テクスチャの回転。
FX_INFO_FLAT_DATA:
TIMEMODEPRT: 1
RX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: -1.000
RY:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
RZ:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
UX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
UY:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 1.000
UZ:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
AX:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
AY:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
AZ:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 1.000
*テクスチャの回転(回転行列)。AngleやEmDir等の影響を受けません。
RX RY RZ 0
UX UY UZ 0
AX AY AZ 0
0 0 0 1
テクスチャが反転する場合、あらかじめ反転したテクスチャを使うか、RとAの正負をひっくり返してやる。
FX_INFO_DIR_DATA:
TIMEMODEPRT: 1
X:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
Y:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
Z:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
*詳細不明。
FX_INFO_HEATHAZE_DATA:
TIMEMODEPRT: 1
*陽炎の設定。テクスチャはマスクとして使用される。
FX_INFO_UNDERWATER_DATA:
TIMEMODEPRT: 1
*水の中だけで表示する。
FX_INFO_GROUNDCOLLIDE_DATA:
TIMEMODEPRT: 1
BOUNCE:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.810
SPEEDMULT:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.800
BOUNCEERROR:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 15.000
*衝突判定を行う?詳細不明。
FX_INFO_TRAIL_DATA:
TIMEMODEPRT: 1
TRAILTIME:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 4.000
SCREENSPACE:
FX_INTERP_DATA:
LOOPED: 0
NUM_KEYS: 1
FX_KEYFLOAT_DATA:
TIME: 0.000
VAL: 0.000
*テクスチャを連結する。詳細不明。
BACK