View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0006309 | The Dark Mod | Def / Setup | public | 30.07.2023 19:30 | 15.01.2026 00:32 |
| Reporter | wellingtoncrab | Assigned To | stgatilov | ||
| Priority | normal | Severity | normal | Reproducibility | always |
| Status | feedback | Resolution | open | ||
| Platform | PC | OS | Windows | OS Version | 11 |
| Product Version | TDM 2.11 | ||||
| Target Version | TDM 2.14 | Fixed in Version | TDM 2.14 | ||
| Summary | 0006309: Func_Smoke does not correctly loop particles with multiple stages with differing lifespans | ||||
| Description | Func_smoke does not work with multi stage particles unless they all have the same value as their “time” parameter. It will wait for the last quad to be drawn on the longest particle stage before it starts the other stages. You can see this in this video below. To the left is a func_smoke and to the right is the same multi stage particle on an emitter. https://cdn.discordapp.com/attachments/834415653166907402/1135286393996849325/Darkmod_2023.07.30_-_11.58.50.03.mp4 | ||||
| Steps To Reproduce | Simply run any multistage particle on a func_smoke such as the one attached to this bug report | ||||
| Tags | No tags attached. | ||||
| Attached Files | welli_torch_move_smoke.prt (3,123 bytes)
welli_torch_move_smoke
{
{
count 14
material textures/particles/barrelpoof
time 1.500
cycles 0.000
bunching 1.000
distribution rect 2.000 2.000 2.000
direction cone "0.000"
orientation view
speed "0.000"
size "3.000" to "13.000"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 1.500
fadeOut 0.700
fadeIndex 0.000
color 0.500 0.500 0.500 0.400
fadeColor 0.270 0.270 0.270 0.000
offset 0.000 0.000 1.000
gravity world -15.000
}
{
count 10
material textures/darkmod/sfx/overcast2
time 10
cycles 0.000
timeOffset 0.000
bunching 0.950
distribution rect 12.000 12.000 0.000
direction cone 90.000
orientation view
speed "0.000"
size "10.000" to "40.000"
aspect "1.000"
rotation "1.000" to "0.500"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.430
fadeOut 0.430
fadeIndex 0.000
color 1.000 1.000 1.000 0.400
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 6.000
gravity world -2.000
}
{
count 10
material textures/darkmod/sfx/overcast
time 4.000
cycles 0.000
timeOffset 0.000
bunching 0.950
distribution rect 12.000 12.000 0.000
direction cone 90.000
orientation view
customPath helix 0.000 0.000 0.000 0.000 0.000
speed "0.000"
size "5.000" to "25.000"
aspect "1.000"
rotation "0.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.500
fadeOut 0.390
fadeIndex 0.000
color 0.961 0.639 0.278 0.900
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 6.000
gravity world -2.000
}
{
count 3
material textures/sfx/flamesparks
time 2.000
cycles 0.000
timeOffset 0.000
bunching 1.000
distribution cylinder 100.000 32.000 0.000 0.000
direction outward 0.500
orientation view
customPath helix 8.000 8.000 8.000 6.000 3.000
speed "0.000"
size "0.800" to "0.300"
aspect "1.000"
rotation "0.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.200
fadeOut 0.400
fadeIndex 0.000
color 0.847 0.467 0.047 0.000
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 12.000
gravity -14.000
}
{
count 5
material textures/sfx/flamesparks
time 2.500
cycles 0.000
timeOffset 0.000
bunching 1.000
distribution cylinder 100.000 32.000 0.000 0.000
direction outward 0.500
orientation view
customPath helix 9.000 9.000 8.000 6.000 3.000
speed "0.000"
size "0.800" to "0.300"
aspect "1.000"
rotation "0.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.200
fadeOut 0.400
fadeIndex 0.000
color 0.847 0.467 0.047 0.000
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 12.000
gravity -12.000
}
} | ||||
|
Uploaded test map "UPINSMOKE.MAP" UPINSMOKE.map (4,890 bytes)
Version 2
// entity 0
{
"classname" "worldspawn"
// primitive 0
{
brushDef3
{
( 0 0 1 -448 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 1 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 1 0 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 -1 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( -1 0 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 0 -1 384 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
}
}
// primitive 1
{
brushDef3
{
( 0 0 1 -384 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 1 0 -256 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 1 0 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( -1 0 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 -1 0 192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
}
}
// primitive 2
{
brushDef3
{
( 0 0 1 -384 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 1 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 1 0 0 -256 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 -1 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( -1 0 0 192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
}
}
// primitive 3
{
brushDef3
{
( 0 1 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 1 0 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 0 -1 -64 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 -1 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( -1 0 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 0 1 0 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
}
}
// primitive 4
{
brushDef3
{
( 0 0 1 -384 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 1 0 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 -1 0 -256 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( -1 0 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 1 0 192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
}
}
// primitive 5
{
brushDef3
{
( 0 0 1 -384 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 1 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 0 -1 0 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 0 -1 0 -192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( -1 0 0 -256 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
( 1 0 0 192 ) ( ( 0.015625 0 0 ) ( 0 0.00390625 0 ) ) "textures/darkmod/stone/brick/even_greyish01_trim" 0 0 0
}
}
}
// entity 1
{
"classname" "info_player_start"
"name" "info_player_start_1"
"angle" "90.000000"
"origin" "0 -128 0"
}
// entity 2
{
"classname" "light"
"name" "light_1"
"origin" "0 0 256"
"light_center" "0 0 0"
"light_radius" "320 320 320"
}
// entity 3
{
"classname" "func_smoke"
"name" "func_smoke_1"
"origin" "-64 64 64"
"smoke" "welli_torch_move_smoke.prt"
}
// entity 4
{
"classname" "func_emitter"
"name" "func_emitter_1"
"origin" "64 64 64"
"cycleTrigger" "0"
"model" "welli_torch_move_smoke.prt"
}
|
|
|
Recall that there are three types of particles: particle model/entity, particle deform, and smoke. As far as I see, smoke has completely different looping logic. It ignores completely the looping code of the particle declarations. Each particle stage runs only one period. When all the particles are generated, the smoke particle gen reports to the calling code that it is done. However, idFuncSmoke has some repeat logic. When it receives the "the whole particle effect is over", it simply resets the timer and starts everything from scratch. I think it does it unconditionally if it was initially enabled, and it does not repeat if it was initially disabled (when "start_off" = "1"). I suppose ID used it primarily for one-time particle effects, but then added idFuncSmoke on top of it with some repeat logic. If I somehow unblock it to behave like particle models, the major question is: How can one decide when it is over? It would be too easy to trigger infinitely looping particle effect, which would stay in place forever... |
|
|
By the way, aside from idFuncSmoke, there are many other places which use the same smoke spawning code: spawning particles from animation bleeding effect on hit smoke_gib on a moveable dropping item into liquid model smoking traces from projectiles Particle declarations suppors making a particle stage non-repeating by setting "cycles" to "1". However, I suppose all the particle decls which are used in the context of smoke now don't do that, they are declared as looping and rely on the idea of "only play once" logic inherent in smoke generation. So I doubt I can just fix the default behavior... |
|
|
Okay, here are some more inconsistencies in smoke implementation. Let's suppose decl has values: particleLife = 4000, deadTime = 5000, bunching = 0.5. For a normal particle system it means: [0 .. 2000 ms] --- particles spawn [4000 ms .. 6000 ms] --- particles die [9000 ms] --- new cycle starts For a smoke particle it means: [0 .. 4500 ms] --- particles spawn (...I'll just skip dying time here...) [9000 ms] --- new cycle starts The normal particle system spawns particles in (bunching * particleLife), but the smoke system spawns in (bunching * fullCycleDuration) Aside from that, the smoke particle system does not work properly with uncapped FPS. This piece of code counts how many particles we need to spawn since the last frame: nowCount = static_cast<int>(floor( ( (float)deltaMsec / finalParticleTime ) * stage->totalParticles )); if ( nowCount >= stage->totalParticles ) nowCount = stage->totalParticles-1; prevCount = static_cast<int>(floor( ((float)( deltaMsec - USERCMD_MSEC ) / finalParticleTime) * stage->totalParticles )); if ( prevCount < -1 ) prevCount = -1; .... // add all the required particles for ( prevCount++ ; prevCount <= nowCount ; prevCount++ ) { It assumes that the last frame happened exactly USERCMD_MSEC ms earlier, which is only true to the old-style fixed game tic mode. |
|
|
Here are the changes: r11081 Added natvis rule for a linked list inside activeSmokeStage_t. r11082 A little bit of refactoring of particles/smokes. r11083 Added new implementation of smoke particle gen, which can properly support "cycles" from particle decl. There are two consequences: 1) There is new implementation of smoke particle generation (under cvar g_newSmokeParticles = 1). It fixes the uncapped FPS issue described above, and also changes spawn time from (bunching * fullCycleDuration) to (bunching * particleLife). In other words, the new implementation system works like the particles spawned by the other ways, EXCEPT for cycling! These are in fact visually breaking changes, which are enabled by default. 2) There is new spawnarg "use_cycles", which you can set to "1" on idFuncSmoke. If you do this, then the looping settings of the particle stages are respected. If "cycles" = 0 in .prt, then the smoke repeats forever. If "cycles" = 1, then it plays just once (that's what you should use for single-time effects). Of course, this spawnarg only helps for the new implementation. |
|
|
Hmm, I can't get this to work with AI carrying func_smoke torches. Maybe I'm missing something or am doing something incorrectly. Or maybe there is even something incorrect in my map file or custom defs. I'm assuming "use_cycles" defaults to "0"? If I load up Eye on the Prize and set g_newSmokeParticles = 1 and then fly over to the torch-carrying guard at 458.76 -167.08 347.36 5.3 -166.9 0.0 and kill him, the torch that falls on the ground doesn't extinguish properly. I did build a new exe on rev 11083. If I set "use_cycles" to "1" then that does indeed work correctly in that it doesn't loop forever (not ideal for torches though, lol) |
|
|
Yes, "use_cycles" is "0" by default, and it should work more or less as the old system. I tried to kill that guard without modifying any assets, and the dropped torch goes off after a bit of time, regardless of g_newSmokeParticles value. So the good new is that the new and the old code work the same way, right? Now if you modify the assets and set "use_cycles" to "1", then the new system should respect the looping settings from .prt file. I looked into the .prt file, and I see "cycles" "0" there, which means "loop infinitely". Of course, it you kill the idFuncSmoke entity, it should stop emitting more particles. But if I'm understand correctly, the entity is not killed. What is the trigger for it to stop emitting then? |
|
|
"What is the trigger for it to stop emitting then? " well, torches do have the "extinguish_on_drop" "1" spawnarg, and this is what is supposed to kill the flame after a brief delay (like 2-3 seconds, I believe). But yeah, I'm just not sure how to get these flames to properly extinguish. |
|
|
I looked more closely. As far as I see, the only difference in the idFuncSmoke between "on" and "off" is whether it is hidden or not. The method idFuncSmoke::Think checks for fl.hidden, and emitting particles is skipped if entity is hidden. I did not change this, it is the same with both systems, regardless of use_cycles spawnarg. I also booted the test map with one idFuncSmoke that has use_cycles = 1 and cycles = 0 (i.e. infinitely looping particle effect, which now looks exactly the same as idFuncEmitter). Then I tried to kill the idFuncSmoke using console command. The fire ended shortly afterwards. This confirms that if idFuncSmoke gets inactive, the particle effect ends soon since no new particles are emitted (even when .prt says the effect should be infinite). As far as I see in the code, hiding should function similarly to killing, make the smoke entity inactive. So could you please explain what exactly you modified in the mission? If I'm not mistaken, the smoke entity is somehow dynamically generated, not sure how to configure its spawnargs. |
|
|
hmm, it's not exactly heavily modified. But each AI in the map has varying "diff_1_nospawn "1" "diff_2_nospawn" "1", etc. spawnargs. Since these func_smokes are def_attached to two of the ais in the map, could this be what's "hiding" them? For reference, the names of the ai carrying the func_smoke torches are "Jurgen" and "Jurgen2" I've attached the def file and particle files for the func_smoke torches. To my knowledge, this is all that I have modified torch_smoke.def (2,092 bytes)
// This is a series of func_smokes and alterations to torches and fireplace fires
torch_smoke_1
{
"inherit" "func_smoke"
"editor_displayFolder" "Smokes"
"editor_model smoke" "func_smoke particle"
"smoke" "torch_with_sparks_smoke.prt"
}
torch_smoke_2
{
"inherit" "func_smoke"
"editor_displayFolder" "Smokes"
"editor_model smoke" "func_smoke particle"
"smoke" "smoke_for_torch.prt"
}
torch_smoke_3
{
"inherit" "func_smoke"
"editor_displayFolder" "Smokes"
"editor_model smoke" "func_smoke particle"
"smoke" "sparks_for_torch.prt"
}
light_torchflame_small_sparks
{
"inherit" "light_extinguishable"
"mins" "-6 -6 -6"
"maxs" "6 6 24"
"editor_displayFolder" "Lights/Light Sources/Torch Flames"
"editor_usage" "A small, dimmer torch flame. Light pulses but is static. For moving light, add 'inherit' 'light_extinguishable_moving' to entity. "
"model_lit" "torchflame_sparks_1.prt"
"model_extinguished" "volta_smoke_torchout.prt"
"snd_lit" "element_fire_torch"
"snd_extinguished" "machine_steam01"
"falloff" "0"
"texture" "lights/biground_torchflicker"
"_color" "0.9 0.6 0.40"
"light_radius" "210 210 210" //larger than other similar flames to be consistent with older maps
}
light_fireflames_2
{
"inherit" "light_extinguishable_moving"
"mins" "-9 -18 0"
"maxs" "9 18 32"
"editor_usage" "Extinguishable fire flames for use in a large fireplace. Rectangular shape to fit fireplace logs."
"editor_displayFolder" "Lights/Light Sources/Fireplace Flames"
"model_lit" "furnace_flame_1.prt"
"model_extinguished" "volta_smoke_torchout.prt"
"snd_lit" "element_fire_bonfire"
"snd_extinguished" "machine_steam01"
"falloff" "0"
"texture" "lights/fire_fireplace"
"_color" "0.90 0.56 0.27"
"light_center" "0 0 4" //to keep light from being buried in the logs
"light_radius" "260 260 220"
} torch_with_sparks_smoke.prt (7,869 bytes)
particle torch_nosmoke
{
{
count 5
material arcturus_fire
animationFrames 4
time 1.000
cycles 0.000
bunching 0.900
distribution cylinder 1.000 1.000 0.000 0.000
direction cone "0.000"
orientation view
speed "0.000"
size "2.000" to "4.500"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.650
fadeOut 0.650
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 1.000
offset 0.000 0.000 -2.000
gravity world -10.000
}
{
count 28
material textures/particles/pfirebig2_sort10
time 0.350
cycles 0.000
bunching 1.000
distribution cylinder 2.000 2.000 0.000 0.000
direction cone "0.000"
orientation view
speed "0.000"
size "0.000" to "2.500"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.000
fadeOut 1.000
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 -4.000
gravity world -17.000
}
}
particle sparks_for_torch
{
{
count 5
material textures/sfx/flamesparks2
animationFrames 1
time 1.500
cycles 0.000
timeOffset 0.100
bunching 0.800
distribution sphere 10.000 10.000 10.000 0.000
direction cone 37.900
orientation view
speed "45.000" to "10.000"
size "1.000" to "0.100"
aspect "1.000"
rotation "50.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.200
fadeOut 0.200
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 -5.000
gravity world -17.200
}
}
particle smoke_for_torch
{
{
count 14
material textures/particles/barrelpoof
time 1.500
cycles 0.000
bunching 1.000
distribution rect 2.000 2.000 2.000
direction cone "0.000"
orientation view
speed "0.000"
size "3.000" to "13.000"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 1.500
fadeOut 0.700
fadeIndex 0.000
color 0.500 0.500 0.500 0.400
fadeColor 0.270 0.270 0.270 0.000
offset 0.000 0.000 1.000
gravity world -15.000
}
}
particle torchflame_sparks_1
{
{
count 12
material textures/particles/barrelpoof
time 1.000
cycles 0.000
bunching 1.000
distribution rect 2.000 2.000 5.000
direction cone "0.000"
orientation view
speed "17.000" to "4.000"
size "5.500" to "13.500"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 1.500
fadeOut 0.850
fadeIndex 0.000
color 0.500 0.500 0.500 0.400
fadeColor 0.270 0.270 0.270 0.000
offset 0.000 0.000 6.000
gravity world -3.000
}
{
count 5
material arcturus_fire
animationFrames 4
time 1.000
cycles 0.000
bunching 0.900
distribution cylinder 1.000 1.000 0.000 0.000
direction cone "0.000"
orientation view
speed "0.000"
size "2.000" to "4.500"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.650
fadeOut 0.650
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 1.000
offset 0.000 0.000 -2.000
gravity world -10.000
}
{
count 4
material textures/sfx/vp3
time 2.150
cycles 0.000
bunching 0.950
distribution rect 1.000 1.000 0.000
direction cone "90.000"
orientation view
customPath helix 0.000 0.000 0.000 0.000 0.000
speed "0.000"
size "2.500" to "13.500"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 1.000
fadeOut 0.000
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 4.000
gravity world -6.000
}
{
count 28
material textures/particles/pfirebig2_sort10
time 0.350
cycles 0.000
bunching 1.000
distribution cylinder 2.000 2.000 0.000 0.000
direction cone "0.000"
orientation view
speed "0.000"
size "0.000" to "2.500"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.000
fadeOut 1.000
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 -4.000
gravity world -17.000
}
{
count 8
material textures/darkmod/volta/sfx/fire_part2
animationFrames 1
time 1.500
cycles 0.000
timeOffset 0.100
bunching 0.800
distribution sphere 10.000 10.000 10.000 0.000
direction cone 37.900
orientation view
speed "45.000" to "10.000"
size "1.000" to "0.100"
aspect "1.000"
rotation "50.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.200
fadeOut 0.200
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 -5.000
gravity world -17.200
}
}
particle furnace_flame_1
{
{
count 9
material textures/darkmod/volta/sfx/fire_body1
time 0.500
cycles 0.000
timeOffset 0.000
bunching 1.000
distribution cylinder 4.100 4.200 3.000 0.000
direction cone 23.400
orientation aimed 0.000 0.400
speed "35.000" to "17.500"
size "3.500" to "1.500"
aspect "4.000" to "1.000"
rotation "2.000" to "68.500"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.330
fadeOut 0.260
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.900 0.800 0.200 0.100
offset 0.000 0.000 -2.000
gravity -45.200
}
{
count 22
material textures/darkmod/volta/sfx/fire_body2
time 0.500
cycles 0.000
timeOffset 0.000
bunching 1.000
distribution sphere 7.000 7.000 0.000 0.000
direction cone 8.200
orientation view
speed "8.000" to "7.000"
size "5.000" to "1.000"
aspect "1.000"
angle 2.500
rotation "0.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.000
fadeOut 0.400
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 1.000 1.000 1.000 0.000
offset 0.000 0.000 -8.000
gravity -35.000
}
{
count 8
material textures/sfx/vp3
time 2.150
cycles 0.000
bunching 0.950
distribution rect 10.000 10.000 0.000
direction cone "90.000"
orientation view
customPath helix 0.000 0.000 0.000 0.000 0.000
speed "0.000"
size "2.500" to "13.500"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 1.000
fadeOut 0.000
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 0.000
offset 0.000 0.000 5.000
gravity world -6.000
}
{
count 20
material textures/particles/pfirebig2_sort10
animationFrames 1
time 0.550
cycles 0.000
bunching 1.000
distribution cylinder 6.000 7.000 0.000 0.000
direction outward "0.000"
orientation view
speed "0.000"
size "1.000" to "2.000"
aspect "1.000"
randomDistribution 1
boundsExpansion 0.000
fadeIn 0.550
fadeOut 0.000
fadeIndex 0.000
color 1.000 1.000 1.000 1.000
fadeColor 0.000 0.000 0.000 1.000
offset 0.000 0.000 -3.000
gravity world -20.000
}
} |
|
|
I don't see the proper definitions here. Ok, I went into volta_lights.def and added the following spawnargs on volta_torchflame_mobile_large: "name_attach" "smoke2" "name_attach2" "smoke3" "set use_cycles on smoke2" "1" "set use_cycles on smoke3" "1" As far as I understand, this is the way to set spawnarg on an attachment without def. And I'm not sure "torch_smoke_2.prt" attachment has its own def, I suppose it is some kind of implicitly made func_smoke. After these modifications I see in debugger that Jurgen's idFuncSmoke gets the spawnarg. And If i kill him, the torch flames go off as usual. |
|
|
So I think there is just something bugged about my setup in that FM, sorry about that. I did make a test map with a few func_smokes and those did extinguish normally, so that's good! Now I guess I just have to fix Eye on the Prize |
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 30.07.2023 19:30 | wellingtoncrab | New Issue | |
| 30.07.2023 19:30 | wellingtoncrab | File Added: welli_torch_move_smoke.prt | |
| 30.07.2023 19:43 | wellingtoncrab | Note Added: 0016043 | |
| 30.07.2023 19:43 | wellingtoncrab | File Added: UPINSMOKE.map | |
| 10.01.2026 18:31 | stgatilov | Note Added: 0017108 | |
| 10.01.2026 18:39 | stgatilov | Note Added: 0017109 | |
| 10.01.2026 23:00 | stgatilov | Note Added: 0017110 | |
| 11.01.2026 19:30 | stgatilov | Note Added: 0017111 | |
| 11.01.2026 19:30 | stgatilov | Assigned To | => stgatilov |
| 11.01.2026 19:30 | stgatilov | Status | new => feedback |
| 11.01.2026 19:30 | stgatilov | Fixed in Version | => TDM 2.14 |
| 11.01.2026 19:30 | stgatilov | Target Version | => TDM 2.14 |
| 12.01.2026 16:37 | Amadeus | Note Added: 0017113 | |
| 13.01.2026 00:23 | stgatilov | Note Added: 0017117 | |
| 13.01.2026 03:51 | Amadeus | Note Added: 0017118 | |
| 13.01.2026 18:17 | stgatilov | Note Added: 0017121 | |
| 13.01.2026 18:18 | stgatilov | Note Edited: 0017121 | |
| 13.01.2026 18:20 | stgatilov | Note Edited: 0017121 | |
| 13.01.2026 19:22 | Amadeus | Note Added: 0017122 | |
| 13.01.2026 19:22 | Amadeus | File Added: torch_smoke.def | |
| 13.01.2026 19:22 | Amadeus | File Added: torch_with_sparks_smoke.prt | |
| 14.01.2026 09:36 | stgatilov | Note Added: 0017124 | |
| 15.01.2026 00:32 | Amadeus | Note Added: 0017127 | |
| 15.01.2026 00:32 | Amadeus | Note Edited: 0017127 |