View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0005853 | DarkRadiant | Shader System | public | 25.12.2021 23:06 | 09.10.2022 17:37 |
Reporter | Dragofer | Assigned To | greebo | ||
Priority | normal | Severity | normal | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | 2.14.0 | ||||
Target Version | 3.0.0 | Fixed in Version | 3.0.0 | ||
Summary | 0005853: DR overwrite order for defs is different from TDM's | ||||
Description | If the mapper provides a custom definition with his FM that has the same name as one of the core asset definitions, DR uses different rules for which definition wins out than TDM. For example: For DR, the .prt file whose name sorts lexicographically latest takes priority (i.e. z_nofog.prt overwrites particles in tdm_fog.prt) For TDM, the .prt file whose name sorts lexicographically earliest takes priority (i.e. a_nofog.prt overwrites particles in tdm_fog.prt). Testing so far, DR's order seems to be wrong for: - entityDefs - particles It seems to be correct for: - soundshaders | ||||
Steps To Reproduce | 1) The attached .prt file, z_nofog.prt, should turn TDM's dustfog particles and more into nodraw, 1-cycle, 1-count particles. Place this file in your FM's "particles" folder and set DR to use this FM. 2) Create a func_emitter, change its particle to "tdm_dustfog1.prt". You'll see it's just some huge nodraw quads. If you started TDM it'd look the same as the stock version, however. 3) Rename to a_nofog.prt and "Reload particles" in DR. In DR the particle looks normal in the Particle Editor/Chooser, but in TDM it would now look invisible as intended. | ||||
Tags | No tags attached. | ||||
Attached Files | z_nofog.prt (9,336 bytes)
particle tdm_dustfog1 { { count 1 material textures/common/nodraw time 10.000 cycles 1.000 bunching 1.000 distribution rect 128.000 128.000 32.000 direction outward "0.000" orientation view speed "1.000" to "10.000" size "200.000" aspect "1.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.700 fadeOut 0.800 fadeIndex 0.000 color 1.000 1.000 0.900 0.250 fadeColor 1.000 1.000 1.000 0.000 offset 0.000 0.000 0.000 gravity world 0.000 } } particle tdm_dustfog2 { { count 1 material textures/common/nodraw time 10.000 cycles 0.000 bunching 1.000 distribution rect 128.000 128.000 8.000 direction outward "0.000" orientation z speed "1.000" to "1.200" size "200.000" aspect "1.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.700 fadeOut 0.800 fadeIndex 0.000 color 1.000 1.000 0.900 0.250 fadeColor 1.000 1.000 1.000 0.000 offset 0.000 0.000 0.000 gravity world 0.000 softeningRadius 5 } } particle tdm_dustfog3 { { count 1 material textures/common/nodraw time 10.000 cycles 1 bunching 1.000 distribution rect 128.000 128.000 32.000 direction outward "0.000" orientation view speed "1.000" to "10.000" size "200.000" aspect "1.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.700 fadeOut 0.800 fadeIndex 0.000 color 0.500 0.500 0.500 0.250 fadeColor .500 0.500 0.500 0.000 offset 0.000 0.000 0.000 gravity world 0.000 } } particle tdm_dustfog4 { { count 1 material textures/common/nodraw time 10.000 cycles 0.000 bunching 1.000 distribution rect 5000.000 5000.000 500.000 direction outward "0.000" orientation view speed "10.000" to "30.000" size "2200.000" aspect "1.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.700 fadeOut 0.800 fadeIndex 0.000 color 0.820 0.580 0.400 0.300 fadeColor 0.820 0.580 0.400 0.000 offset 0.000 0.000 0.000 gravity world 0.000 } } particle chimney_smoke1 { depthHack 1 { count 1 material textures/common/nodraw time 7.000 cycles 1 bunching 0.950 distribution sphere 24.000 24.000 24.000 direction cone 10.000 orientation view speed "0.000" to "4.000" size "36.500" to "82.500" aspect "1.000" rotation "-45.000" to "35.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.750 fadeOut 0.900 fadeIndex 0.150 color 0.090 0.100 0.110 1.000 fadeColor 0.000 0.000 0.000 0.000 offset 0.000 0.000 0.000 gravity -10.000 } } particle chimney_smoke2 { depthHack 1 { count 1 material textures/common/nodraw time 6.500 cycles 1 bunching 0.950 distribution sphere 24.000 24.000 24.000 direction cone 10.000 orientation view speed "0.000" to "4.000" size "36.500" to "82.500" aspect "1.000" rotation "-45.000" to "35.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.750 fadeOut 0.900 fadeIndex 0.150 color 0.090 0.100 0.110 1.000 fadeColor 0.000 0.000 0.000 0.000 offset 0.000 0.000 0.000 gravity -10.000 } } // not so bright night time smoke particle chimney_smoke_dull_blue { { count 1 material textures/common/nodraw time 1.550 cycles 1 bunching 1.000 distribution rect 2.000 2.000 0.000 direction cone "0.000" orientation view speed "26.000" to "9.000" size "0.000" to "34.000" aspect "1.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 1.000 fadeOut 1.000 fadeIndex 0.000 color 0.230 0.250 0.310 1.000 fadeColor 0.000 0.000 0.000 0.000 offset 0.000 0.000 0.000 gravity -10.000 } } // not so bright night time smoke particle chimney_smoke_dull_grey { depthHack 10 { count 1 material textures/common/nodraw time 1.550 cycles 1 bunching 1.000 distribution rect 2.000 2.000 0.000 direction cone "0.000" orientation view speed "26.000" to "9.000" size "0.000" to "34.000" aspect "1.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 1.000 fadeOut 1.000 fadeIndex 0.000 color 0.280 0.280 0.300 1.000 fadeColor 0.000 0.000 0.000 0.000 offset 0.000 0.000 0.000 gravity -10.000 } } // not so bright night time smoke - Tall plume, eg, for use within high chimney particle chimney_smoke_dull_blue_tall { { count 1 material textures/common/nodraw time 10.0 cycles 1 bunching 1.000 distribution rect 5.000 5.000 0.000 direction cone "0.000" // angle 0.000 customPath flies 0.000 0.000 0.000 orientation view speed "0.000" to "250.000" size "50" to "150.000" aspect "1.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 1.000 fadeOut 1.000 fadeIndex 0.000 color 0.230 0.250 0.310 1.000 fadeColor 0.000 0.000 0.000 0.000 offset 0.000 0.000 0.000 gravity -10.000 } } particle tdm_floating_mood_dust_small { { count 1 material textures/common/nodraw time 5.000 cycles 1 timeOffset 0.000 bunching 1.000 distribution sphere 48.000 48.000 48.000 direction cone 90.000 orientation view speed "5.000" to "-5.000" size "0.500" to "1.000" aspect "1.000" rotation "0.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 1.000 fadeOut 1.000 fadeIndex 1.000 color 0.070 0.110 0.140 1.000 fadeColor 0.030 0.040 0.070 1.000 offset 0.000 0.000 0.000 gravity 0.000 entityColor 1 } } particle tdm_chimney_smoke { { count 1 material textures/common/nodraw time 6.000 cycles 1 timeOffset 0.000 bunching 1.000 distribution sphere 15.000 15.000 15.000 direction cone 10.000 orientation view speed "0.000" to "4.000" size "15.000" to "45.000" aspect "1.000" rotation "0.000" to "35.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.750 fadeOut 0.900 fadeIndex 0.150 color 0.090 0.100 0.110 1.000 fadeColor 0.000 0.000 0.000 0.000 offset 0.000 0.000 0.000 gravity -10.000 } } particle tdm_chimney_smoke_medium { { count 1 material textures/common/nodraw time 5.000 cycles 1 timeOffset 0.000 bunching 1.000 distribution sphere 15.000 15.000 15.000 direction cone 10.000 orientation view speed "0.000" to "4.000" size "15.000" to "45.000" aspect "1.000" rotation "0.000" to "35.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.800 fadeOut 0.900 fadeIndex 0.150 color 0.090 0.100 0.110 1.000 fadeColor 0.000 0.000 0.000 0.000 offset 0.000 0.000 0.000 gravity -10.000 } } particle tdm_chimney_smoke_small { { count 1 material textures/common/nodraw time 5.000 cycles 1 timeOffset 0.000 bunching 1.000 distribution sphere 15.000 15.000 15.000 direction cone 10.000 orientation view speed "0.000" to "4.000" size "15.000" to "35.000" aspect "1.000" rotation "0.000" to "35.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 0.800 fadeOut 0.900 fadeIndex 0.150 color 0.090 0.100 0.110 1.000 fadeColor 0.000 0.000 0.000 0.000 offset 0.000 0.000 0.000 gravity -10.000 } } particle tdm_floating_dust { { count 1 material textures/common/nodraw time 5.200 cycles 1 bunching 1.000 distribution sphere 128.000 128.000 128.000 direction cone "90.000" orientation view speed "5.000" to "-5.000" size "0.500" to "1.000" aspect "1.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 1.000 fadeOut 1.000 fadeIndex 1.000 color 0.480 0.310 0.220 1.000 fadeColor 0.070 0.040 0.030 1.000 offset 0.000 0.000 0.000 gravity 0.000 } } particle tdm_floating_moon_dust { { count 1 material textures/common/nodraw time 5.000 cycles 1 timeOffset 0.000 bunching 1.000 distribution sphere 128.000 128.000 128.000 direction cone 90.000 orientation view speed "5.000" to "-5.000" size "0.500" to "1.000" aspect "1.000" rotation "0.000" randomDistribution 1 boundsExpansion 0.000 fadeIn 1.000 fadeOut 1.000 fadeIndex 1.000 color 0.070 0.110 0.140 1.000 fadeColor 0.030 0.040 0.070 1.000 offset 0.000 0.000 0.000 gravity 0.000 entityColor 1 } } | ||||
I couldn't exactly reproduce the behaviour you described, but after some research I now know what the engine is doing when loading (particle) decl files: TDM Decl Parser: - It asks the filesystem instance to deliver all .prt files in the particles/ folder, it is returning a list of files (here z_nofog.prt is on the top of the list, since the FM folder is delivering files first) - That list is sorted alphabetically, this makes the z_nofog.prt file slide down to the bottom of the list. - The parser processes that file list, top to bottom, meaning that the TDM files are processed first, the tdm_dustfog1 particle gets created first. - Once the z_nofog.prt is reached, the encountered tdm_dustfog1 is rejected with a duplicate warning. The TDM decl is kept. DarkRadiant's ParticleManager: - Asks the filesystem to deliver all .prt files in the particles/ folder - Every file that is delivered is parsed immediately, i.e. the z_nofog.prt gets to be parsed before the rest of the files - Once the TDM decl is reached, it is actually overwriting the one defined earlier, this way the TDM decl still takes precedence. While the file precedence is well defined (FM folder takes precedence over base game, Filesystem is taking precedence over PK4s), I'm not sure if it's a wise thing to make FMs overwrite base decls in the way described above. It will produce warnings, and that shouldn't be part of any recommended practice. If TDM declarations need to be overwritten, the warning-free way would be to override the corresponding file tdm_fog.prt entirely, which I wouldn't really recommend either. I agree that the DR parsing algorithm needs to be adjusted to match the one in TDM, but the use case remains questionable for me. |
|
When placing the z_nofog.prt in my FM/particles folder: |
|
Duplicate Particle Defs are no longer overwriting previous ones when encountered during the same parse pass. | |
DarkRadiant: master c351fd7f 02.03.2022 04:55 Details Diff |
0005853: Add a .mtr file precedence scenario to the test resources |
Affected Issues 0005853 |
|
mod - test/Materials.cpp | Diff File | ||
add - test/resources/tdm/materials/z_precedence.mtr | Diff File | ||
mod - test/resources/tdm/tdm_example_mtrs.pk4 | Diff File | ||
DarkRadiant: master fcadac25 02.03.2022 05:05 Details Diff |
0005853: Add a .prt file precedence scenario to the test resources |
Affected Issues 0005853 |
|
mod - test/CMakeLists.txt | Diff File | ||
add - test/Particles.cpp | Diff File | ||
add - test/resources/tdm/particles/z_precedence.prt | Diff File | ||
add - test/resources/tdm/test_particles.pk4 | Diff File | ||
mod - tools/msvc/Tests/Tests.vcxproj | Diff File | ||
mod - tools/msvc/Tests/Tests.vcxproj.filters | Diff File | ||
DarkRadiant: master f7cb3e11 02.03.2022 17:35 Details Diff |
0005853: Improve ParticleLoader such that it can deal with duplicate defs. They don't overwrite previously parsed ones in the same pass. |
Affected Issues 0005853 |
|
mod - include/iparticles.h | Diff File | ||
mod - radiantcore/particles/ParticleDef.h | Diff File | ||
mod - radiantcore/particles/ParticleLoader.cpp | Diff File | ||
mod - radiantcore/particles/ParticleLoader.h | Diff File | ||
mod - radiantcore/particles/ParticlesManager.cpp | Diff File | ||
mod - radiantcore/particles/ParticlesManager.h | Diff File | ||
mod - test/Particles.cpp | Diff File | ||
mod - test/resources/tdm/particles/z_precedence.prt | Diff File |
Date Modified | Username | Field | Change |
---|---|---|---|
25.12.2021 23:06 | Dragofer | New Issue | |
25.12.2021 23:06 | Dragofer | File Added: z_nofog.prt | |
26.12.2021 21:02 | Dragofer | Summary | DR overwrite order for particles is different from TDM's => DR overwrite order for defs is different from TDM's |
26.12.2021 21:02 | Dragofer | Description Updated | |
01.03.2022 06:09 | greebo | Status | new => feedback |
01.03.2022 06:09 | greebo | Note Added: 0014743 | |
01.03.2022 06:11 | greebo | Note Added: 0014745 | |
01.03.2022 06:11 | greebo | File Added: grafik.png | |
02.03.2022 09:03 | greebo | Relationship added | related to 0005911 |
02.03.2022 17:40 | greebo | Assigned To | => greebo |
02.03.2022 17:40 | greebo | Status | feedback => assigned |
02.03.2022 17:41 | greebo | Changeset attached | => DarkRadiant master c351fd7f |
02.03.2022 17:41 | greebo | Changeset attached | => DarkRadiant master fcadac25 |
02.03.2022 17:41 | greebo | Changeset attached | => DarkRadiant master f7cb3e11 |
02.03.2022 17:41 | greebo | Status | assigned => resolved |
02.03.2022 17:41 | greebo | Resolution | open => fixed |
02.03.2022 17:41 | greebo | Fixed in Version | => 3.0.0 |
02.03.2022 17:41 | greebo | Note Added: 0014755 | |
02.03.2022 17:41 | greebo | Target Version | => 3.0.0 |
09.10.2022 17:37 | greebo | Status | resolved => closed |