Page tree
Skip to end of metadata
Go to start of metadata

Visual Effects using "programmed effects" can now be changed (outside of engine edits) using progfx.2da. This was added in patch 1.80.8193.14.

Note there is no "custom programming" this is a file of parameters for what the engine will understand when using a particular "type" of programmable FX (1 through 13).

You use the visualeffects.2da columns ProgFX_Impact, ProgFX_Duration and ProgFX_Cessation to reference lines in this 2da:

  • ProgFX_Impact - Run once when the VFX is applied
  • ProgFX_Duration - Run continuously while VFX is active
  • ProgFX_Cessation - Run once when VFX is removed

Previously, all the values for these columns were hardcoded. With 8193.14, a new 2DA, progfx.2da is added which contains the definitions for these values.

The progfx effects are grouped by Type. Each progfx Type has different handling within the engine, and the meaning of the parameters depends on the type. Note the Type ID by default is tied to a row number (eg; Type 3 starts at 300) but that no longer has to be the case.

Some Beamdog documentation available here: https://gist.github.com/mtijanic/97f309b8d9262f0cf4f7dfba6618ea6a mostly translated here.

progfx.2da Exceptions

progfx.2da only applies to visualeffects.2da. The problem with this is that vfx_persistent.2da cannot make use of it (this also defines models to use for visuals). There is one line that has a programmed effect - line 7 - blade barrier - applies environmental mapping as per id 2 below. No other lines can have this added, or any other progfx.2da changes.

2DA Contents

Column NameExampleValid ValuesDescription and Notes
LabelBeamLightning
This is just a name for the effect for readability. No effect.
Type11-13

Type ID. Generally the TypeID is tied to the hundreth position in the 2da file itself, eg; Type 3 starts at line 300.

Param1See belowVariesSee below
Param2See belowVariesSee below
Param3See belowVariesSee below
Param4See belowVariesSee below
Param5See belowVariesSee below
Param6See belowVariesSee below
Param7See belowVariesSee below
Param8See belowVariesNone seem to use this one for some reason.

Types Documentation

1: Skin Overlay (barkskin, stoneskin, etc)

This will set the texture of the creature to the given model texture, along with some altering of impact effects.

Column NameExampleValid ValuesDescription and Notes
Type11Set to 1 for this type.
Param1vdu_tex_stoneModel nameModel Name with overlay (vdu_*) 
Param2stone, wood

name of entry in appearancesndset.2da ArmorType column value

IE: stone, wood, scale, ethereal, leather, chitin, plate, chain, crystal

Tied to appearancesndset.2da ArmorType column (and possibly the counterpart weaponsounds.2da) which controls what noises weapons make when hitting it.

Needs testing to see what happens if left blank, or set to an odd value.

Param3354visualeffects.2da lineThe visualeffects.2da line played when the creature under this visual effect is damaged replacing usual "chunk" effects (and is "Medium" sized or larger). VFX_COM_CHUNK_STONE_MEDIUM for petrify.
Param4353visualeffects.2da lineThe visualeffects.2da line played when the creature under this visual effect is damaged replacing the usual "chunk" effects (and is "Small" sized or smaller). VFX_COM_CHUNK_STONE_SMALL for petrify.

Example progfx.2da lines:

 Click here to expand...


IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
1010Stoneskin1vdu_tex_stonestone************************
1020GreaterStoneskin1vdu_tex_grstonestone************************
1030Barkskin1vdu_tex_barkwood************************
1040ShadowSkin1vdu_tex_shadestone************************
1050Petrify1vdu_tex_stonestone354353****************
1060IceSkin1vdu_tex_icestone************************

2: Used for environment mapping

Sets an environment map file to be used by the VFX. The default lines do not actually seem to be used by the default game visual effects, and there doesn't actually appear to be any vdu_envmap_XXX files in the game files. Presumably the default lines are there just in case/show what the game would do by default.

Column NameExampleValid ValuesDescription and Notes
Type22Set to 2 for this type.
Param1vdu_envmap_000Model nameEnvmap Name

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
100EnvMap002vdu_envmap_000****************************
101EnvMap012vdu_envmap_001****************************
102EnvMap022vdu_envmap_002****************************
103EnvMap032vdu_envmap_003****************************
104EnvMap042vdu_envmap_004****************************
105EnvMap052vdu_envmap_005****************************
106EnvMap062vdu_envmap_006****************************
107EnvMap072vdu_envmap_007****************************
108EnvMap082vdu_envmap_008****************************
109EnvMap092vdu_envmap_009****************************
110EnvMap102vdu_envmap_010****************************
111EnvMap112vdu_envmap_011****************************
112EnvMap122vdu_envmap_012****************************
113EnvMap132vdu_envmap_013****************************
114EnvMap142vdu_envmap_014****************************
115EnvMap152vdu_envmap_015****************************
116EnvMap162vdu_envmap_016****************************
117EnvMap172vdu_envmap_017****************************
118EnvMap182vdu_envmap_018****************************
119EnvMap192vdu_envmap_019****************************
120EnvMap202vdu_envmap_020****************************
121EnvMap212vdu_envmap_021****************************
122EnvMap222vdu_envmap_022****************************
123EnvMap232vdu_envmap_023****************************
124EnvMap242vdu_envmap_024****************************
125EnvMap252vdu_envmap_025****************************
126EnvMap262vdu_envmap_026****************************
127EnvMap272vdu_envmap_027****************************
128EnvMap282vdu_envmap_028****************************
129EnvMap292vdu_envmap_029****************************
130EnvMap302vdu_envmap_030****************************
131EnvMap312vdu_envmap_031****************************
132EnvMap322vdu_envmap_032****************************
133EnvMap332vdu_envmap_033****************************
134EnvMap342vdu_envmap_034****************************
135EnvMap352vdu_envmap_035****************************
136EnvMap362vdu_envmap_036****************************
137EnvMap372vdu_envmap_037****************************
138EnvMap382vdu_envmap_038****************************
139EnvMap392vdu_envmap_039****************************
140EnvMap402vdu_envmap_040****************************
141EnvMap412vdu_envmap_041****************************
142EnvMap422vdu_envmap_042****************************
143EnvMap432vdu_envmap_043****************************
144EnvMap442vdu_envmap_044****************************
145EnvMap452vdu_envmap_045****************************
146EnvMap462vdu_envmap_046****************************
147EnvMap472vdu_envmap_047****************************
148EnvMap482vdu_envmap_048****************************
149EnvMap492vdu_envmap_049****************************
150EnvMap502vdu_envmap_050****************************
151EnvMap512vdu_envmap_051****************************
152EnvMap522vdu_envmap_052****************************
153EnvMap532vdu_envmap_053****************************
154EnvMap542vdu_envmap_054****************************
155EnvMap552vdu_envmap_055****************************
156EnvMap562vdu_envmap_056****************************
157EnvMap572vdu_envmap_057****************************
158EnvMap582vdu_envmap_058****************************
159EnvMap592vdu_envmap_059****************************
160EnvMap602vdu_envmap_060****************************
161EnvMap612vdu_envmap_061****************************
162EnvMap622vdu_envmap_062****************************
163EnvMap632vdu_envmap_063****************************
164EnvMap642vdu_envmap_064****************************
165EnvMap652vdu_envmap_065****************************
166EnvMap662vdu_envmap_066****************************
167EnvMap672vdu_envmap_067****************************
168EnvMap682vdu_envmap_068****************************
169EnvMap692vdu_envmap_069****************************
170EnvMap702vdu_envmap_070****************************
171EnvMap712vdu_envmap_071****************************
172EnvMap722vdu_envmap_072****************************
173EnvMap732vdu_envmap_073****************************
174EnvMap742vdu_envmap_074****************************
175EnvMap752vdu_envmap_075****************************
176EnvMap762vdu_envmap_076****************************
177EnvMap772vdu_envmap_077****************************
178EnvMap782vdu_envmap_078****************************
179EnvMap792vdu_envmap_079****************************
180EnvMap802vdu_envmap_080****************************
181EnvMap812vdu_envmap_081****************************
182EnvMap822vdu_envmap_082****************************
183EnvMap832vdu_envmap_083****************************
184EnvMap842vdu_envmap_084****************************
185EnvMap852vdu_envmap_085****************************
186EnvMap862vdu_envmap_086****************************
187EnvMap872vdu_envmap_087****************************
188EnvMap882vdu_envmap_088****************************
189EnvMap892vdu_envmap_089****************************
190EnvMap902vdu_envmap_090****************************
191EnvMap912vdu_envmap_091****************************
192EnvMap922vdu_envmap_092****************************
193EnvMap932vdu_envmap_093****************************
194EnvMap942vdu_envmap_094****************************
195EnvMap952vdu_envmap_095****************************
196EnvMap962vdu_envmap_096****************************
197EnvMap972vdu_envmap_097****************************
198EnvMap982vdu_envmap_098****************************
199EnvMap992vdu_envmap_099****************************

3: Static Glow effects.

Sets a static glow effect to the model affected.

Commonly used for VFX_DUR_AURA_XXX visualeffect lines as ProgFX_Duration, although can be used in ProgFX_Impact as well.

Column NameExampleValid ValuesDescription and Notes
Type33Set to 3 for this type.
Param10.250.0 - 1.0

Amount of Red

Param20.350.0 - 1.0Amount of Green
Param30.50.0 - 1.0Amount of Blue

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
200SelfIllumRed3100********************
201SelfIllumGreen3010********************
202SelfIllumBlue3001********************
203SelfIllumMagenta3101********************
204SelfIllumYellow3110********************
205SelfIllumWhiteFL3111********************
206SelfIllumOrange310.50********************
207SelfIllumBrown30.550.350.17********************
208SelfIllumPurple30.2500.5********************
209SelfIllumCyan3011********************
210SelfIllumDarkGrn300.30********************
211SelfIllumLightGrn30.510.5********************
212SelfIllumDarkRed30.300********************
213SelfIllumLightRed310.50.5********************
214SelfIllumDarkBlu3000.3********************
215SelfIllumLightBlu30.50.51********************
216SelfIllumDarkYlw30.30.30********************
217SelfIllumLightYlw3110.6********************

4: Lighting addition or removal

Lighting models to provide lighting (or remove it - like if blinded!). There are likely a lot of hardcoded relations to these lines used by the game feats like Darkvision or certain effects like Ultra Vision.

The normal ones appear to be used for ProgFX_Duration

The Fade ones appear to be used for ProgFX_Cessation

Note there are references to the default visions like Dark Vision here, therefore if you alter the progfx.2da or visualeffects.2da line references these effects can apparently be altered when loaded by the engine. May be worth testing.

Column NameExampleValid ValuesDescription and Notes
Type44Set to 4 for this type.
Param1White_5mModel animation name

Animation name of the Param7 model we are using. EG: "White_5M" is that animation node. Doesn't seem to be case sensitive (the model for fx_light_clr has it down as "white_5m")

Param2

1 used for usual duration

-0.31 used for the "cessation" (ie when a light source is removed)

Float

Animation speed. Fading is negative -0.31.

Param30/1BooleanCast shadows or not (5M ones do not by default cast shadows).
Param4

13 (Area Blackout / Blind Vision) - When blinded with EffectBlindness or EffectDarkness (which detects Trueseeing or Ultravision, which can skip the blindness), applied using VFX_DUR_BLACKOUT (5)

20 (Lights) - Usual lights (eg; Torches, magical light rings) - various VFX lines, VFX_DUR_LIGHT_*

49 (Ultra Vision) - For countering Darkness (thus is higher), using EffectUltravision, applied using VFX_DUR_ULTRAVISION (244)

50 (Darkness) - applied using VFX_DUR_DARKNESS (1) but we don't think this is used by EFfectDarkness itself.

51 (Darkvision) - The racial feat FEAT_DARKVISION or item property "Darkvision", applied using VFX_DUR_DARKVISION (182)

52 (Low Light Vision) - The racial feat FEAT_LOW_LIGHT_VISION, applied using VFX_DUR_LOWLIGHTVISION (243)

53 (Blind Vision) - Blind Vision appears to be for those without any of the above effects applied. So default "humans" in otherwise dark areas get this. By default actually lights up the area a bit.

TODO: Write a proper "Vision" page to explain the above, with pictures, and how to make alterations to each type.

Integer

20 for the normal lights. It is the Priority of the light. No idea how it relates to other in-game lights (what priority are they by default - eg; a placeable?)

The priority is for what one will get applied if more than one exists on a player. EG: Equipping a torch turns off Darkvision, but a torch does not override Blindness.

The special VFX for different "visions" probably are all used by hardcoded engine calls.

Param51 for Darkness, Darkvision, Blindvision, Low Light Vision else 0BooleanPresumably since these are, well, the things done in "the dark" it toggles if the area is dark == apply this. How "dark" is calculated by the game is a mystery!
Param61 for LightAreaBlackout and FadeLAreaBlackoutBoolean

Presumably if it's "Area" blackout if 1 affect the area too? If so how? No idea! Beamdog documentation: "Attach to scene".

Possibly does additional light removal to really make things super dark.

Param7fx_light_clrFX Model nameModel to load that relates to some of the above parameters, specifically Param1 and Param2.

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
300LightWhite5m4White_5m102000fx_light_clr****
301LightWhite10m4White_10m112000fx_light_clr****
302LightWhite15m4White_15m112000fx_light_clr****
303LightWhite20m4White_20m112000fx_light_clr****
304LightBlue5m4Blue_5m102000fx_light_clr****
305LightBlue10m4Blue_10m112000fx_light_clr****
306LightBlue15m4Blue_15m112000fx_light_clr****
307LightBlue20m4Blue_20m112000fx_light_clr****
308LightYellow5m4Yello_5m102000fx_light_clr****
309LightYellow10m4Yello_10m112000fx_light_clr****
310LightYellow15m4Yello_15m112000fx_light_clr****
311LightYellow20m4Yello_20m112000fx_light_clr****
312LightRed5m4Red_5m102000fx_light_clr****
313LightRed10m4Red_10m112000fx_light_clr****
314LightRed15m4Red_15m112000fx_light_clr****
315LightRed20m4Red_20m112000fx_light_clr****
316LightOrange5m4Orng_5m102000fx_light_clr****
317LightOrange10m4Orng_10m112000fx_light_clr****
318LightOrange15m4Orng_15m112000fx_light_clr****
319LightOrange20m4Orng_20m112000fx_light_clr****
320LightPurple5m4Purp_5m102000fx_light_clr****
321LightPurple10m4Purp_10m112000fx_light_clr****
322LightPurple15m4Purp_15m112000fx_light_clr****
323LightPurple20m4Purp_20m112000fx_light_clr****
324LightGreen5m4Gren_5m102000fx_light_clr****
325LightGreen10m4Gren_10m112000fx_light_clr****
326LightGreen15m4Gren_15m112000fx_light_clr****
327LightGreen20m4Gren_20m112000fx_light_clr****
328LightDarkvision4Dark_Vision105110fx_light_clr****
329LightBlindvision4Blind_Vision105310fx_light_clr****
330LightLowLightVisn4Low_Light_Vision105210fx_light_clr****
331LightUltravision4Ultra_Vision104900fx_light_clr****
332LightDarkness4darkness105010fx_light_clr****
333LightAreaBlackout4Blind_Vision101301fx_light_clr****
350FadeLWhite5m4White_5m-0.3102000fx_light_clr****
351FadeLWhite10m4White_10m-0.3112000fx_light_clr****
352FadeLWhite15m4White_15m-0.3112000fx_light_clr****
353FadeLWhite20m4White_20m-0.3112000fx_light_clr****
354FadeLBlue5m4Blue_5m-0.3102000fx_light_clr****
355FadeLBlue10m4Blue_10m-0.3112000fx_light_clr****
356FadeLBlue15m4Blue_15m-0.3112000fx_light_clr****
357FadeLBlue20m4Blue_20m-0.3112000fx_light_clr****
358FadeLYellow5m4Yello_5m-0.3102000fx_light_clr****
359FadeLYellow10m4Yello_10m-0.3112000fx_light_clr****
360FadeLYellow15m4Yello_15m-0.3112000fx_light_clr****
361FadeLYellow20m4Yello_20m-0.3112000fx_light_clr****
362FadeLRed5m4Red_5m-0.3102000fx_light_clr****
363FadeLRed10m4Red_10m-0.3112000fx_light_clr****
364FadeLRed15m4Red_15m-0.3112000fx_light_clr****
365FadeLRed20m4Red_20m-0.3112000fx_light_clr****
366FadeLOrange5m4Orng_5m-0.3102000fx_light_clr****
367FadeLOrange10m4Orng_10m-0.3112000fx_light_clr****
368FadeLOrange15m4Orng_15m-0.3112000fx_light_clr****
369FadeLOrange20m4Orng_20m-0.3112000fx_light_clr****
370FadeLPurple5m4Purp_5m-0.3102000fx_light_clr****
371FadeLPurple10m4Purp_10m-0.3112000fx_light_clr****
372FadeLPurple15m4Purp_15m-0.3112000fx_light_clr****
373FadeLPurple20m4Purp_20m-0.3112000fx_light_clr****
374FadeLGreen5m4Gren_5m-0.3102000fx_light_clr****
375FadeLGreen10m4Gren_10m-0.3112000fx_light_clr****
376FadeLGreen15m4Gren_15m-0.3112000fx_light_clr****
377FadeLGreen20m4Gren_20m-0.3112000fx_light_clr****
378FadeLDarkvision4Dark_Vision-0.3105110fx_light_clr****
379FadeLBlindvision4Blind_Vision-0.3105310fx_light_clr****
380FadeLLowLightVisn4Low_Light_Vision-0.3105210fx_light_clr****
381FadeLUltravision4Ultra_Vision-0.3104900fx_light_clr****
382FadeLDarkness4darkness-0.3105010fx_light_clr****
383FadeLAreaBlackout4Blind_Vision-0.3101301fx_light_clr****


5: Alpha transparency modifiers.

These are used to apply VFX_DUR_INVISIBILITY, VFX_DUR_GHOSTLY_VISAGE, VFX_DUR_GLOW_ and a few others as ProgFX_Duration.

Since there is no model mentioned it's just a alpha and colour change.

Column NameExampleValid ValuesDescription and Notes
Type55Set to 5 for this type.
Param10, 0.5, 0.001Float 0.0 - 1.0Amount of transparency (lower bound). Can be 0 as per cutscene invisibility or low values like 0.001 it seems
Param2-1, 0.25, 0.5, 0, 1 etc.Float -1 or 0.0 - 1.0Red value (if -1 then ignore colours and keep original?)
Param30, 0.25, 0.4, 0.96 etc.Float 0.0 - 1.0Green value
Param41, 0.25, 0.5 etc.Float 0.0 - 1.0Blue value
Param50, 1000, 6000MillisecondsTime between fades presumably
Param60, 1, 0.80Float 0.0 - 1.0Amount of transparency (upper bound). If we're fading (Param5) we go towards this value, then presumably back to Param1 value. EG: VFX_DUR_GHOSTLY_PULSE does 0.001 transparency (nearly not there) to 1 (entirely there) over 6 seconds then would do 6 seconds back again.

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8VFX example
400Alpha50.5-10000********VFX_DUR_INVISIBILITY
401AlphaPulse50.001-10060001********VFX_DUR_GHOSTLY_PULSE
402AlphaLightBlue50.50.250.25100********VFX_DUR_GHOSTLY_VISAGE, VFX_DUR_GLOW_LIGHT_BLUE / VFX_DUR_GHOSTLY_VISAGE_NO_SOUND (no sounds)
403AlphaPurple50.50.50100********VFX_DUR_ETHEREAL_VISAGE, VFX_DUR_GLOW_PURPLE (no sounds)
404AlphaQuickPulse50.3-10010000.8********VFX_DUR_GHOSTLY_PULSE_QUICK
405AlphaCutsceneInv50-10000********VFX_DUR_CUTSCENE_INVISIBILITY
406AlphaBlue50.5000.7500********VFX_DUR_GLOW_BLUE
407AlphaRed50.510000********VFX_DUR_GLOW_RED
408AlphaLightRed50.510.40.400********VFX_DUR_GLOW_LIGHT_RED
409AlphaYellow50.510.96000********VFX_DUR_GLOW_YELLOW
410AlphaLightYellow50.510.960.300********VFX_DUR_GLOW_LIGHT_YELLOW
411AlphaGreen50.500.75000********VFX_DUR_GLOW_GREEN
412AlphaLightGreen50.50.510.500********VFX_DUR_GLOW_LIGHT_GREEN
413AlphaOrange50.510.35000********VFX_DUR_GLOW_ORANGE
414AlphaLightOrange50.510.550.2500********VFX_DUR_GLOW_LIGHT_ORANGE
415AlphaBrown50.50.250.12000********VFX_DUR_GLOW_BROWN
416AlphaLightBrown50.50.370.240.1200********VFX_DUR_GLOW_LIGHT_BROWN
417AlphaGrey50.50.50.50.500********VFX_DUR_GLOW_GREY
418AlphaWhite50.511100********VFX_DUR_GLOW_WHITE
419AlphaLightPurple50.50.750.35100********VFX_DUR_GLOW_LIGHT_PURPLE
420AlphaGhost50.4-10000********VFX_DUR_GHOST_TRANSPARENT

6: Pulsing Aura glows - fades between 2 colors

Pulses two colours on the given model. This is used for VFX_DUR_BLUR and VFX_DUR_AURA_PULSE_XXX_YYY visualeffects.2da lines.

Column NameExampleValid ValuesDescription and Notes
Type66Set to 6 for this type.
Param11, 0.25, 0Float 0.0 - 1.0First colour; Amount of Red
Param21, 0.5, 0Float 0.0 - 1.0First colour; Amount of Green
Param31, 0.17, 0Float 0.0 - 1.0First colour; Amount of Blue
Param41, 0.82, 0Float 0.0 - 1.0Second colour; Amount of Red
Param51, 0.1, 0Float 0.0 - 1.0Second colour; Amount of Green
Param61, 0.83, 0Float 0.0 - 1.0Second colour; Amount of Blue
Param71000Milliseconds amountPresumably the amount of seconds to go from the first colour to the second colour. Once reached the second colour it takes the same amount of time to fade back to the first.

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8VFX example
500SIP_RedWhite61001111000****VFX_DUR_AURA_PULSE_RED_WHITE
501SIP_BlueWhite60011111000****VFX_DUR_BLUR, VFX_DUR_AURA_PULSE_BLUE_WHITE (no sound)
502SIP_GreenWhite60101111000****VFX_DUR_AURA_PULSE_GREEN_WHITE
503SIP_YellowWhite61101111000****VFX_DUR_AURA_PULSE_YELLOW_WHITE
504SIP_MagentaWhite61011111000****VFX_DUR_AURA_PULSE_MAGENTA_WHITE
505SIP_CyanWhite60111111000****VFX_DUR_AURA_PULSE_CYAN_WHITE
506SIP_OrangeWhite610.501111000****VFX_DUR_AURA_PULSE_ORANGE_WHITE
507SIP_BrownWhite60.550.350.170.820.710.551000****VFX_DUR_AURA_PULSE_BROWN_WHITE
508SIP_PurpleWhite60.2500.50.730.330.831000****VFX_DUR_AURA_PULSE_PURPLE_WHITE
509SIP_GreyWhite60.50.50.51111000****VFX_DUR_AURA_PULSE_GREY_WHITE
510SIP_GreyBlack60000.10.10.11000****VFX_DUR_AURA_PULSE_GREY_BLACK
511SIP_BlueGreen60010101000****VFX_DUR_AURA_PULSE_BLUE_GREEN
512SIP_RedBlue61000011000****VFX_DUR_AURA_PULSE_RED_BLUE
513SIP_RedYellow61001101000****VFX_DUR_AURA_PULSE_RED_YELLOW
514SIP_GreenYellow60101101000****VFX_DUR_AURA_PULSE_GREEN_YELLOW
515SIP_RedGreen61000101000****VFX_DUR_AURA_PULSE_RED_GREEN
516SIP_BlueYellow60011101000****VFX_DUR_AURA_PULSE_BLUE_YELLOW
517SIP_BlueBlack60010001000****VFX_DUR_AURA_PULSE_BLUE_BLACK
518SIP_RedBlack61000001000****VFX_DUR_AURA_PULSE_RED_BLACK
519SIP_GreenBlack60100001000****VFX_DUR_AURA_PULSE_GREEN_BLACK
520SIP_YellowBlack61100001000****VFX_DUR_AURA_PULSE_YELLOW_BLACK
521SIP_MagentaBlack61010001000****VFX_DUR_AURA_PULSE_MAGENTA_BLACK
522SIP_CyanBlack60110001000****VFX_DUR_AURA_PULSE_CYAN_BLACK
523SIP_OrangeBlack610.500001000****VFX_DUR_AURA_PULSE_ORANGE_BLACK
524SIP_BrownBlack60.550.350.170001000****VFX_DUR_AURA_PULSE_BROWN_BLACK
525SIP_PurpleBlack60.2510.50001000****VFX_DUR_AURA_PULSE_PURPLE_BLACK
526SIP_CyanGreen60110101000****VFX_DUR_AURA_PULSE_CYAN_GREEN
527SIP_CyanBlue60110011000****VFX_DUR_AURA_PULSE_CYAN_BLUE
528SIP_CyanRed60111001000****VFX_DUR_AURA_PULSE_CYAN_RED
529SIP_CyanYellow60111101000****VFX_DUR_AURA_PULSE_CYAN_YELLOW
530SIP_MagentaBlue61010011000****VFX_DUR_AURA_PULSE_MAGENTA_BLUE
531SIP_MagentaRed61011001000****VFX_DUR_AURA_PULSE_MAGENTA_RED
532SIP_MagentaGreen61010101000****VFX_DUR_AURA_PULSE_MAGENTA_GREEN
533SIP_MagentaYellow61011101000****VFX_DUR_AURA_PULSE_MAGENTA_YELLOW
534SIP_RedOrange610110.501000****VFX_DUR_AURA_PULSE_RED_ORANGE
535SIP_YellowOrange611010.501000****VFX_DUR_AURA_PULSE_YELLOW_ORANGE

7: Beams

Within original content, beams are used solely for EffectBeam which adds nwscript parameters for the "source" and "target" (so you can do a penagram on the ground if you wanted).

What this actually does is more useful than it sounds. One type of emitter is a point-to-point emitter (P2P) which moves a visual effect along a track from source to target point. There are three types of P2P emitter available within NWN.

1) Bezier

2) Gravity

3) Lightning

Beams within original content use the lighting emitter type in which a series of lightning decal graphics is placed along a line from source to target. The number of decals placed is dependent upon the builder, but the number must be a binary number (2, 4, 8. 16, 32, 64, etc.). Each decal is overlapped slightly, and options within the lighting type allow you to kink the lightning by skewing each decal in the line. No kink produces a straight beam appearance.

The other two P2P effects toss out emitted decals or chunks at the source, and they migrate toward the target point. Normally, the target point is defined by an AuroraRef dummy within the MDL file (the position of the  dummy is often backward from where the emitted particles will go). However, with the Beam progFx, what you're doing is having the engine detach the beam target from that AuroraRef and place it on the location of the target object. This allows you to now use both Bezier and Gravity "beams" in P2P ways with the target object being the actual target. You're no longer confined to lightning type emitters.

Note: the AuroraRef node is NOT being moved to the target object. If you parent parts of the mesh to the AuroraRef dummy, they will remain where they were in the original MDL layout. What is actually happening is the target point is being removed from the dummy and placed on the target object.

The main thing here is the model is now unhardcoded - go mad adding your own (by editing the existing even).

Column NameExampleValid ValuesDescription and Notes
Type77Set to 7 for this type.
Param1

vdu_beam000

vim_rayfire

Model resref nameVisual effect model resref name
Param2cast01Animation name

This may be a animation name to play (if the source is a creature) - still needs testing, does it function - and if so how long does the animation play (and does it play if other things are going on).

Likely it does default to cast01 if nothing is specified/something invalid is used

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8VFX exampleSilent VFX
600BeamLightning7vdu_beam000cast01************************VFX_BEAM_LIGHTNINGVFX_BEAM_SILENT_LIGHTNING
601BeamRayFire7vim_rayfirecast01************************VFX_BEAM_FIREVFX_BEAM_SILENT_FIRE
602BeamRayCold7vim_raycoldcast01************************VFX_BEAM_COLDVFX_BEAM_SILENT_COLD
603BeamRayHoly7vim_rayholycast01************************VFX_BEAM_HOLYVFX_BEAM_SILENT_HOLY
604BeamRayMind7vim_raymindcast01************************VFX_BEAM_MINDVFX_BEAM_SILENT_MIND
605BeamRayEvil7vim_rayevilcast01************************VFX_BEAM_EVILVFX_BEAM_SILENT_EVIL
606BeamRayOdd7vim_rayoddcast01************************VFX_BEAM_ODDVFX_BEAM_SILENT_ODD
607BeamFireLash7vim_lashfirecast01************************VFX_BEAM_FIRE_LASH
608BeamFlame7vim_rayflamecast01************************VFX_BEAM_FLAME
609BeamDisintegrate7vim_raydisintacast01************************VFX_BEAM_DISINTEGRATE
610BeamBlack7vim_rayblackcast01************************VFX_BEAM_BLACK
611BeamChain7vim_raychaincast01************************VFX_BEAM_CHAIN
612BeamRayFireW7vim_rayfire_wcast01************************VFX_BEAM_FIRE_WVFX_BEAM_FIRE_W_SILENT


8: Stops models rendering

This would obviously remove the model from view, there appears to be no parameters so there is likely no reason to create duplicates of this line, but reference ID 700 to use it.

Used on visualeffects.2da line 120 - VFX_COM_UNLOAD_MODEL with the entry being tied to ProgFX_Impact. It's unknown if the game uses this VFX line or the 700 progfx.2da line at all (VFX_COM_ are instantly applied "combat" effects...but what would make a model disappear?).

Presumably a good one to use if you want another VFX to apply such as "blowing up a target" where if the model was still there it'd look weird.

The lexicon suggests this does nothing however. Possibly it only works in certain circumstances? Also how would you remove the fact the model is now gone? (possibly some SetAppearance calls may work but better be sure if using this!).

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
700DeleteModel8********************************

9: Chunk Model

VFX_COM_GIB uses this for it's ProgFX_Impact. This is likely the engines hardcoded high violence chunking - when like EffectDeath is used with bSpecacularDeath or similar (see notes here).

Since there are no parameters presumably we cannot force a particular chunk to be used. Using VFX_COM_GIB in EffectVisualEffect may also be buggy and it might be just only usable by theg game.

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
800ChunkModel9********************************

10: MIRV (projectiles like Magic Missile)

Magic Missiles and Acid Arrows! The models can now be changed/new ones be added and the speed and projectile type can be changed. The MIRVs are randomised in direction if using certain projectile types.

This allows you to have fireballs throw from the ImpactScript for instance instead of being part of the spells.2da line definition or using wonky ActionCastSpellAtObject parameters (which miss a lot of projectile types).

Note: After testing even the slowest speeds here (log) tends to be much too fast - especially for "Spiral" (used for Hellball) where it messes up entirely. Needs more speeds to be effective for longer duration projectile types.

log nwscript code (magic missile, the slowest):

    float fDist = GetDistanceBetween(OBJECT_SELF, oTarget);
    float fDelay = fDist/(3.0 * log(fDist) + 2.0);
eg: fDist = 20.0f: 3.38 seconds

llnear nwscript code (will do a linear distance calculation. This is modified from acid arrow twice but is twice as fast):

    float fDist = GetDistanceToObject(oTarget);
    float fDelay = (fDist/50.0);

linear2 nwscript code (acid arrow, linear half speed):

    float fDist = GetDistanceToObject(oTarget);
    float fDelay = (fDist/25.0);

Note these are used in the ProgFX_Impact (eg; VFX_IMP_MIRV) it is an "instant" effect but with a visual that goes on. So you have to delay each hit by a certain amount to get the right "impact time" to, say, do damage.

Column NameExampleValid ValuesDescription and Notes
Type1010Set to 10 for this type.
Param1

vpr_magmisl

Model resref nameVisual effect model resref name
Param2340spells.2da line...for some reason

340? It's line SHADES_Cone_of_Cold in spells.2da which is random. But confirmed by Beamdog it's the spells.2da line - which presumably is used to load spells.2da info of the projectile (although if EffectVisualEffect creates the projectile it probably already has that info loaded?)

It is likely best to leave this as 340 to not have any issues, or set it to a line with no Projectile information (which 340 doesn't have).

After testing setting it to a line with any projectile info doesn't do anything either. Probably unused by the game.

Param30, 2
const int PROJECTILE_ORIENTATION_TYPE_NONE    = 0;
const int PROJECTILE_ORIENTATION_TYPE_TARGET  = 1;
const int PROJECTILE_ORIENTATION_TYPE_PATH    = 2;

Orientation - if needed. 0 if Magic Missile or Electric Magic Missile, 2 otherwise (arrows and darts).

Param44, 1
const int PROJECTILE_PATH_TYPE_DEFAULT                = 0;
const int PROJECTILE_PATH_TYPE_HOMING                 = 1;
const int PROJECTILE_PATH_TYPE_BALLISTIC              = 2;
const int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC         = 3;
const int PROJECTILE_PATH_TYPE_BURST_UP               = 4;
const int PROJECTILE_PATH_TYPE_ACCELERATING           = 5;
const int PROJECTILE_PATH_TYPE_SPIRAL                 = 6;
const int PROJECTILE_PATH_TYPE_LINKED                 = 7;
const int PROJECTILE_PATH_TYPE_BOUNCE                 = 8;
const int PROJECTILE_PATH_TYPE_BURST                  = 9;
const int PROJECTILE_PATH_TYPE_LINKED_BURST_UP        = 10;
const int PROJECTILE_PATH_TYPE_TRIPLE_BALLISTIC_HIT   = 11;
const int PROJECTILE_PATH_TYPE_TRIPLE_BALLISTIC_MISS  = 12;
const int PROJECTILE_PATH_TYPE_DOUBLE_BALLISTIC       = 13;

Seems to be PROJECTILE_PATH_HOMING (1) for Acid Arrow and PROJECTILE_PATH_ACCELERATING (4) for Magic Missiles.

The values to the left are what the different options are. The travel time is controlled by Param5.

Param5log, linear2

log

linear

linear2

The distance caluclation that you can then use in spell scripts to time impacts and damage. See above for nwscript info.

"log" time to target scales logarithmically; "linear" scales linearly; "linear2" scales linearly, half speed;

If left blank appears to use "log" as a default.

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8ProgFX_Impact VFX
900MirvMagicMissile10vpr_magmisl34004log************VFX_IMP_MIRV
901MirvFlameArrow10vpr_arofire34024log************VFX_IMP_MIRV_FLAME
902MirvAcidArrow10vpr_aroacid34021linear2************VFX_IMP_MIRV_ACID_ARROW
903MirvNormalArrow10wamar_00134024log************NORMAL_ARROW
904MirvNormalDart10wthdt_00134024log************NORMAL_DART
905MirvElectro10vpr_ectoelectric34004log************VFX_IMP_MIRV_ELECTRIC

11: Variant MIRV with sound and impact sound (Only used for moo cows / cheat)

Not sure how useful this is since it's used by the engine for the cheat command, and it doesn't have the same parameters as the MIRV options.

The most useful thing may be Param2 which is a one-off "source" sound (from when the projectile starts) so could be a crossbow going off or something for a bolt to appear.

I'm not sure what the distance / time calculations if using this is. Cows move in weird ways...!

Column NameExampleValid ValuesDescription and Notes
Type1111Set to 11 for this type.
Param1

vpr_kngpow

Model resref nameVisual effect model resref name
Param2c_cow_atk1Sound resref nameOne off sound when used, as an "Initial Sound". Sound itself doesn't repeat only fires once from source of VFX.
Param3c_cow_deadSound resref nameLikely the same as "SoundImpact" column in visualeffects.2da entry.
Param44

Projectile Type:

const int PROJECTILE_PATH_TYPE_DEFAULT                = 0;
const int PROJECTILE_PATH_TYPE_HOMING                 = 1;
const int PROJECTILE_PATH_TYPE_BALLISTIC              = 2;
const int PROJECTILE_PATH_TYPE_HIGH_BALLISTIC         = 3;
const int PROJECTILE_PATH_TYPE_BURST_UP               = 4;
const int PROJECTILE_PATH_TYPE_ACCELERATING           = 5;
const int PROJECTILE_PATH_TYPE_SPIRAL                 = 6;
const int PROJECTILE_PATH_TYPE_LINKED                 = 7;
const int PROJECTILE_PATH_TYPE_BOUNCE                 = 8;
const int PROJECTILE_PATH_TYPE_BURST                  = 9;
const int PROJECTILE_PATH_TYPE_LINKED_BURST_UP        = 10;
const int PROJECTILE_PATH_TYPE_TRIPLE_BALLISTIC_HIT   = 11;
const int PROJECTILE_PATH_TYPE_TRIPLE_BALLISTIC_MISS  = 12;
const int PROJECTILE_PATH_TYPE_DOUBLE_BALLISTIC       = 13;

Since you can't specify a travel time this must be set, presumably to "log" but might be something slightly different - needs testing (cows are weird).

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
1100CheatCow11vpr_kngpowc_cow_atk1c_cow_dead4****************

12: Spell Casting Failures - model node attached VFX

Not sure where we can even make use of these. They are used in the VFX lines VFX_FNF_SPELL_FAIL_HEAD and VFX_FNF_SPELL_FAIL_HAND.

However the engine probably just calls these VFX lines and loads the approprite bits (so leave the default alone).

Possibly it allows some stuff with custom lines where a vfx model is tied, say, to a creatures head or arm or something similar, although it may not orientate it properly.

Column NameExampleValid ValuesDescription and Notes
Type1212Set to 12 for this type.
Param1

headconjure

handconjure

Model target node nameA model node since these are listed in .mdl files for creatures so the source of where the VFX will go
Param2vimspellfailFX Model resrefThe vfx file to play

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
1200VisualHeadFail12headconjurevim_spellfail************************
1201VisualHandFail12handconjurevim_spellfail************************

13: Freeze Animations

This would obviously just freeze animations. There are no parameters so there is likely no reason to create duplicates of this line, but reference ID 1300 to use it. The VFX line used by default is VFX_DUR_FREEZE_ANIMATIONS.

Example progfx.2da lines:

 Click here to expand...
IDLabelTypeParam1Param2Param3Param4Param5Param6Param7Param8
1300FreezeAnimations13********************************
  • No labels