particlelist.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. // Register all particles below!
  2. // Example how to register particles from a mod
  3. /*
  4. modded class ParticleList
  5. {
  6. static const int MODDED_PARTICLE = RegisterParticle( "mod_folder/" , "my_modded_particle");
  7. }
  8. */
  9. class ParticleList
  10. {
  11. ref static map<int, string> m_ParticlePaths; // Contains full paths to all particles. WARNING: Paths are without the '.ptc' suffix!
  12. ref static map<string, int> m_ParticleNames; // Contains file NAME (without suffix) to id.
  13. static int m_lastID = 0;
  14. // REGISTER ALL PARTICLES BELOW:
  15. static const int INVALID = -1;
  16. static const int NONE = 0; // 0 does not exist either, valid particle starts from 1
  17. static const int PARTICLE_TEST = RegisterParticle("_test_orientation");
  18. static const int DEBUG_DOT = RegisterParticle("debug_dot");
  19. static const int DEBUG_DOT5M = RegisterParticle("debug_dot5m");
  20. // FIREPLACE
  21. // Normal fireplace
  22. static const int CAMP_FIRE_START = RegisterParticle("fire_small_camp_01_start");
  23. static const int CAMP_SMALL_FIRE = RegisterParticle("fire_small_camp_01");
  24. static const int CAMP_NORMAL_FIRE = RegisterParticle("fire_medium_camp_01");
  25. static const int CAMP_SMALL_SMOKE = RegisterParticle("smoke_small_camp_01");
  26. static const int CAMP_NORMAL_SMOKE = RegisterParticle("smoke_medium_camp_01");
  27. static const int CAMP_FIRE_END = RegisterParticle("fire_small_camp_01_end");
  28. static const int CAMP_STEAM_2END = RegisterParticle("steam_medium_camp_2end");
  29. static const int CAMP_STEAM_EXTINGUISH_START = RegisterParticle("default_01");
  30. static const int CAMP_STOVE_FIRE = RegisterParticle("fire_small_stove_01");
  31. static const int CAMP_STOVE_FIRE_START = RegisterParticle("fire_small_stove_01_start");
  32. static const int CAMP_STOVE_FIRE_END = RegisterParticle("fire_small_stove_01_end");
  33. static const int CAMP_NO_IGNITE_WIND = RegisterParticle("fire_extinguish_wind");
  34. // Fireplace indoor
  35. static const int HOUSE_FIRE_START = RegisterParticle("fire_small_house_01_start");
  36. static const int HOUSE_SMALL_FIRE = RegisterParticle("fire_small_house_01");
  37. static const int HOUSE_SMALL_SMOKE = RegisterParticle("smoke_small_house_01");
  38. static const int HOUSE_NORMAL_FIRE = RegisterParticle("fire_medium_house_01");
  39. static const int HOUSE_NORMAL_SMOKE = RegisterParticle("smoke_medium_house_01");
  40. static const int HOUSE_FIRE_END = RegisterParticle("fire_small_house_01_end");
  41. static const int HOUSE_FIRE_STEAM_2END = RegisterParticle("steam_medium_house_2end");
  42. // Fireplace in barrel with holes
  43. static const int BARREL_FIRE_START = RegisterParticle("fire_small_barrel_01_start");
  44. static const int BARREL_SMALL_FIRE = RegisterParticle("fire_small_barrel_01");
  45. static const int BARREL_SMALL_SMOKE = RegisterParticle("smoke_small_barrel_01");
  46. static const int BARREL_NORMAL_FIRE = RegisterParticle("fire_medium_barrel_01");
  47. static const int BARREL_NORMAL_SMOKE = RegisterParticle("smoke_medium_barrel_01");
  48. static const int BARREL_FIRE_END = RegisterParticle("fire_small_barrel_01_end");
  49. static const int BARREL_FIRE_STEAM_2END = RegisterParticle("steam_medium_camp_2end");
  50. // Fireplace in indoor oven
  51. static const int OVEN_FIRE_START = RegisterParticle("fire_small_oven_01_start");
  52. static const int OVEN_SMALL_FIRE = RegisterParticle("fire_small_oven_01");
  53. static const int OVEN_NORMAL_FIRE = RegisterParticle("fire_medium_oven_01");
  54. static const int OVEN_FIRE_END = RegisterParticle("fire_small_ovenl_01_end");
  55. // COOKING
  56. static const int COOKING_BOILING_EMPTY = RegisterParticle("cooking_boiling_empty");
  57. static const int COOKING_BOILING_START = RegisterParticle("cooking_boiling_start");
  58. static const int COOKING_BOILING_DONE = RegisterParticle("cooking_boiling_done");
  59. static const int COOKING_BAKING_START = RegisterParticle("cooking_baking_start");
  60. static const int COOKING_BAKING_DONE = RegisterParticle("cooking_baking_done");
  61. static const int COOKING_DRYING_START = RegisterParticle("cooking_drying_start");
  62. static const int COOKING_DRYING_DONE = RegisterParticle("cooking_drying_done");
  63. static const int COOKING_BURNING_DONE = RegisterParticle("cooking_burning_done");
  64. static const int ITEM_HOT_VAPOR = RegisterParticle("item_hot_vapor");
  65. // TORCH
  66. static const int TORCH_T3 = RegisterParticle("fire_small_torch_01");
  67. static const int TORCH_T1 = RegisterParticle("fire_small_torch_02");
  68. static const int TORCH_T2 = RegisterParticle("fire_small_torch_03");
  69. //BROOM TORCH
  70. static const int BROOM_TORCH_T1 = RegisterParticle("fire_small_broom_torch_01");
  71. static const int BROOM_TORCH_T2 = RegisterParticle("fire_small_broom_torch_02");
  72. static const int BROOM_TORCH_T3 = RegisterParticle("fire_small_broom_torch_03");
  73. // ROADFLARE
  74. static const int ROADFLARE_BURNING_INIT = RegisterParticle("fire_small_roadflare_red_04");
  75. static const int ROADFLARE_BURNING_MAIN = RegisterParticle("fire_small_roadflare_red_01");
  76. static const int ROADFLARE_BURNING_ENDING = RegisterParticle("fire_small_roadflare_red_02");
  77. static const int ROADFLARE_BURNING_SMOKE = RegisterParticle("fire_small_roadflare_red_03");
  78. // FLARE PROJECTILE
  79. static const int FLAREPROJ_FIRE = RegisterParticle("fire_small_roadflare_red_04");
  80. static const int FLAREPROJ_ACTIVATE = RegisterParticle("fire_small_flare_yellow_01");
  81. static const int FLAREPROJ_ACTIVATE_RED = RegisterParticle("fire_small_flare_red_01");
  82. static const int FLAREPROJ_ACTIVATE_GREEN = RegisterParticle("fire_small_flare_green_01");
  83. static const int FLAREPROJ_ACTIVATE_BLUE = RegisterParticle("fire_small_flare_blue_01");
  84. // DIGGING
  85. static const int DIGGING_STASH = RegisterParticle("digging_ground");
  86. // SMOKE GRENADES
  87. //! RDG2
  88. static const int GRENADE_RDG2_BLACK_START = RegisterParticle("smoke_RDG2_black_01");
  89. static const int GRENADE_RDG2_BLACK_LOOP = RegisterParticle("smoke_RDG2_black_02");
  90. static const int GRENADE_RDG2_BLACK_END = RegisterParticle("smoke_RDG2_black_03");
  91. static const int GRENADE_RDG2_WHITE_START = RegisterParticle("smoke_RDG2_white_01");
  92. static const int GRENADE_RDG2_WHITE_LOOP = RegisterParticle("smoke_RDG2_white_02");
  93. static const int GRENADE_RDG2_WHITE_END = RegisterParticle("smoke_RDG2_white_03");
  94. //! M18
  95. static const int GRENADE_M18_GREEN_START = RegisterParticle("smoke_M18_green_01");
  96. static const int GRENADE_M18_GREEN_LOOP = RegisterParticle("smoke_M18_green_02");
  97. static const int GRENADE_M18_GREEN_END = RegisterParticle("smoke_M18_green_03");
  98. static const int GRENADE_M18_PURPLE_START = RegisterParticle("smoke_M18_purple_01");
  99. static const int GRENADE_M18_PURPLE_LOOP = RegisterParticle("smoke_M18_purple_02");
  100. static const int GRENADE_M18_PURPLE_END = RegisterParticle("smoke_M18_purple_03");
  101. static const int GRENADE_M18_RED_START = RegisterParticle("smoke_M18_red_01");
  102. static const int GRENADE_M18_RED_LOOP = RegisterParticle("smoke_M18_red_02");
  103. static const int GRENADE_M18_RED_END = RegisterParticle("smoke_M18_red_03");
  104. static const int GRENADE_M18_WHITE_START = RegisterParticle("smoke_M18_white_01");
  105. static const int GRENADE_M18_WHITE_LOOP = RegisterParticle("smoke_M18_white_02");
  106. static const int GRENADE_M18_WHITE_END = RegisterParticle("smoke_M18_white_03");
  107. static const int GRENADE_M18_YELLOW_START = RegisterParticle("smoke_M18_yellow_01");
  108. static const int GRENADE_M18_YELLOW_LOOP = RegisterParticle("smoke_M18_yellow_02");
  109. static const int GRENADE_M18_YELLOW_END = RegisterParticle("smoke_M18_yellow_03");
  110. static const int GRENADE_M18_BLACK_START = RegisterParticle("smoke_M18_black_01");
  111. static const int GRENADE_M18_BLACK_LOOP = RegisterParticle("smoke_M18_black_02");
  112. static const int GRENADE_M18_BLACK_END = RegisterParticle("smoke_M18_black_03");
  113. //! FLASH GRENADE
  114. //! M84
  115. static const int GRENADE_M84 = RegisterParticle("explosion_M84_01");
  116. // FRAGMENTATION GRENADES
  117. static const int RGD5 = RegisterParticle("explosion_RGD5_01");
  118. static const int M67 = RegisterParticle("explosion_M67_01");
  119. // GRENADE EXPLOSION BY SURFACE
  120. static const int EXPLOSION_GRENADE_SNOW = RegisterParticle("explosion_grenade_snow");
  121. static const int EXPLOSION_GRENADE_ICE = RegisterParticle("explosion_grenade_ice");
  122. // ELECTRICITY
  123. static const int POWER_GENERATOR_SMOKE = RegisterParticle("smoke_small_generator_01");
  124. static const int BARBED_WIRE_SPARKS = RegisterParticle("electro_shortc2");
  125. static const int LEVER_SPARKS = RegisterParticle("electro_sparks");
  126. static const int EASTER_EGG_ACTIVATE = RegisterParticle("easter_egg_activate");
  127. // PLAYER
  128. static const int BLEEDING_SOURCE = RegisterParticle("blood_bleeding_01");
  129. static const int BLEEDING_SOURCE_LIGHT = RegisterParticle("blood_bleeding_02");
  130. static const int BLOOD_SURFACE_DROPS = RegisterParticle("blood_surface_drops");
  131. static const int BLOOD_SURFACE_CHUNKS = RegisterParticle("blood_surface_chunks");
  132. static const int VOMIT = RegisterParticle("character_vomit_01");
  133. static const int BREATH_VAPOUR_LIGHT = RegisterParticle("breath_vapour_light");
  134. static const int BREATH_VAPOUR_MEDIUM = RegisterParticle("breath_vapour_medium");
  135. static const int BREATH_VAPOUR_HEAVY = RegisterParticle("breath_vapour_heavy");
  136. static const int VOMIT_CHUNKS = RegisterParticle("character_vomit_puddle");
  137. // GUNS
  138. static const int GUN_MUZZLE_FLASH_SVD_STAR = RegisterParticle("weapon_shot_Flame_3D_4star");
  139. static const int GUN_SOLO_MUZZLE_FLASH = RegisterParticle("weapon_shot_Flame_3D");
  140. static const int GUN_FNX = RegisterParticle("weapon_shot_fnx_01");
  141. static const int GUN_FNX_SUPPRESSED = RegisterParticle("weapon_shot_fnx_02");
  142. static const int GUN_PARTICLE_TEST = RegisterParticle("weapon_shot_fnx_01");
  143. static const int GUN_PARTICLE_CASING = RegisterParticle("weapon_shot_chamber_smoke");
  144. static const int GUN_PARTICLE_CASING_RAISE = RegisterParticle("weapon_shot_chamber_smoke_raise");
  145. static const int GUN_CZ75 = RegisterParticle("weapon_shot_cz75_01");
  146. static const int GUN_AKM = RegisterParticle("weapon_shot_akm_01");
  147. static const int GUN_AKM_SUPPRESSED = RegisterParticle("weapon_shot_akm_02");
  148. static const int GUN_IZH18 = RegisterParticle("weapon_shot_izh18_01");
  149. static const int GUN_IZH18_SUPPRESSED = RegisterParticle("weapon_shot_izh18_02");
  150. static const int GUN_MP5K = RegisterParticle("weapon_shot_mp5k_01");
  151. static const int GUN_MP5K_2 = RegisterParticle("weapon_shot_mp5k_02_boris");
  152. static const int GUN_MP5K_SUPPRESSED = RegisterParticle("weapon_shot_mp5k_02");
  153. static const int GUN_MP5K_COMPENSATOR = RegisterParticle("weapon_shot_mp5k_02");
  154. static const int GUN_UMP45 = RegisterParticle("weapon_shot_ump45_01");
  155. static const int GUN_M4A1 = RegisterParticle("weapon_shot_m4a1_01");
  156. static const int GUN_MP133 = RegisterParticle("weapon_shot_mp133_01");
  157. static const int GUN_PELLETS = RegisterParticle("weapon_shot_pellets");
  158. static const int GUN_MOSIN9130 = RegisterParticle("weapon_shot_mosin9130_01");
  159. static const int GUN_MOSIN_COMPENSATOR = RegisterParticle("weapon_shot_mosin_compensator_01");
  160. static const int GUN_CZ527 = RegisterParticle("weapon_shot_cz527_01");
  161. static const int GUN_SKS = RegisterParticle("weapon_shot_sks_01");
  162. static const int GUN_WINCHESTER70 = RegisterParticle("weapon_shot_winch70_01");
  163. static const int GUN_VSS = RegisterParticle("weapon_shot_vss_01");
  164. static const int GUN_AK74 = RegisterParticle("weapon_shot_ak74_01");
  165. static const int GUN_AK101 = RegisterParticle("weapon_shot_ak101_01");
  166. static const int GUN_MAGNUM = RegisterParticle("weapon_shot_magnum_01");
  167. static const int GUN_CZ61 = RegisterParticle("weapon_shot_cz61_01");
  168. static const int GUN_LONG_WINDED_SMOKE = RegisterParticle("weapon_shot_winded_smoke");
  169. static const int GUN_LONG_WINDED_SMOKE_SMALL = RegisterParticle("weapon_shot_winded_smoke_small");
  170. static const int SMOKING_BARREL = RegisterParticle("smoking_barrel");
  171. static const int SMOKING_BARREL_SMALL = RegisterParticle("smoking_barrel_small");
  172. static const int SMOKING_BARREL_HEAVY = RegisterParticle("smoking_barrel_heavy");
  173. static const int SMOKING_BARREL_STEAM = RegisterParticle("smoking_barrel_steam");
  174. static const int SMOKING_BARREL_STEAM_SMALL = RegisterParticle("smoking_barrel_steam_small");
  175. static const int SMARKS_CHAMBER = RegisterParticle("weapon_shot_chamber_spark");
  176. // BULLET & MELEE IMPACTS
  177. static const int IMPACT_TEST = RegisterParticle("impacts/bullet_impact_placeholder");
  178. static const int IMPACT_DISTANT_DUST = RegisterParticle("impacts/distant_dust");
  179. static const int IMPACT_TEST_RICOCHET = RegisterParticle("impacts/bullet_riochet_placeholder");
  180. static const int IMPACT_TEST2 = RegisterParticle("_test_orientation_02");
  181. static const int IMPACT_TEST_ENTER_DEBUG = RegisterParticle("impacts/_test_impact_enter_debug");
  182. static const int IMPACT_TEST_RICOCHET_DEBUG = RegisterParticle("impacts/_test_impact_ricochet_debug");
  183. static const int IMPACT_TEST_EXIT_DEBUG = RegisterParticle("impacts/_test_impact_exit_debug");
  184. static const int IMPACT_TEST_NO_MATERIAL_ERROR = RegisterParticle("_test_no_material");
  185. static const int IMPACT_WOOD_ENTER = RegisterParticle("impacts/hit_wood_ent_01");
  186. static const int IMPACT_WOOD_RICOCHET = RegisterParticle("impacts/hit_wood_ric_01");
  187. static const int IMPACT_WOOD_EXIT = RegisterParticle("impacts/hit_wood_ext_01");
  188. static const int IMPACT_CONCRETE_ENTER = RegisterParticle("impacts/hit_concrete_ent_01");
  189. static const int IMPACT_CONCRETE_RICOCHET = RegisterParticle("impacts/hit_concrete_ric_01");
  190. static const int IMPACT_CONCRETE_EXIT = RegisterParticle("impacts/hit_concrete_ext_01");
  191. static const int IMPACT_FOLIAGE_ENTER = RegisterParticle("impacts/hit_foliage_ent_01");
  192. static const int IMPACT_FOLIAGE_RICOCHET = RegisterParticle("impacts/hit_foliage_ric_01");
  193. static const int IMPACT_FOLIAGE_EXIT = RegisterParticle("impacts/hit_foliage_ext_01");
  194. static const int IMPACT_FOLIAGE_GREEN_ENTER = RegisterParticle("impacts/hit_foliage_green_ent_01");
  195. static const int IMPACT_FOLIAGE_GREEN_RICOCHET = RegisterParticle("impacts/hit_foliage_green_ric_01");
  196. static const int IMPACT_FOLIAGE_GREEN_EXIT = RegisterParticle("impacts/hit_foliage_green_ext_01");
  197. static const int IMPACT_FOLIAGE_CONIFER_ENTER = RegisterParticle("impacts/hit_foliage_conifer_ent_01");
  198. static const int IMPACT_FOLIAGE_CONIFER_RICOCHET= RegisterParticle("impacts/hit_foliage_conifer_ric_01");
  199. static const int IMPACT_FOLIAGE_CONIFER_EXIT = RegisterParticle("impacts/hit_foliage_conifer_ext_01");
  200. static const int IMPACT_GRASS_ENTER = RegisterParticle("impacts/hit_grass_ent_01");
  201. static const int IMPACT_GRASS_RICOCHET = RegisterParticle("impacts/hit_grass_ric_01");
  202. static const int IMPACT_DIRT_ENTER = RegisterParticle("impacts/hit_dirt_ent_01");
  203. static const int IMPACT_DIRT_RICOCHET = RegisterParticle("impacts/hit_dirt_ric_01");
  204. static const int IMPACT_DIRT_EXIT = RegisterParticle("impacts/hit_dirt_ext_01");
  205. static const int IMPACT_RUBBER_ENTER = RegisterParticle("impacts/hit_rubber_ent_01");
  206. static const int IMPACT_RUBBER_RICOCHET = RegisterParticle("impacts/hit_rubber_ric_01");
  207. static const int IMPACT_RUBBER_EXIT = RegisterParticle("impacts/hit_rubber_ext_01");
  208. static const int IMPACT_GRAVEL_ENTER = RegisterParticle("impacts/hit_gravel_ent_01");
  209. static const int IMPACT_GRAVEL_RICOCHET = RegisterParticle("impacts/hit_gravel_ric_01");
  210. static const int IMPACT_GRAVEL_EXIT = RegisterParticle("impacts/hit_gravel_ext_01");
  211. static const int IMPACT_PLASTER_ENTER = RegisterParticle("impacts/hit_plaster_ent_01");
  212. static const int IMPACT_PLASTER_RICOCHET = RegisterParticle("impacts/hit_plaster_ric_01");
  213. static const int IMPACT_PLASTER_EXIT = RegisterParticle("impacts/hit_plaster_ext_01");
  214. static const int IMPACT_METAL_ENTER = RegisterParticle("impacts/hit_metal_ent_01");
  215. static const int IMPACT_METAL_RICOCHET = RegisterParticle("impacts/hit_metal_ric_01");
  216. static const int IMPACT_METAL_EXIT = RegisterParticle("impacts/hit_metal_ext_01");
  217. static const int IMPACT_MEAT_ENTER = RegisterParticle("impacts/hit_meat_ent_01");
  218. static const int IMPACT_MEAT_RICOCHET = RegisterParticle("impacts/hit_meat_ric_01");
  219. static const int IMPACT_MEAT_EXIT = RegisterParticle("impacts/hit_meat_ext_01");
  220. static const int IMPACT_MEATBONES_ENTER = RegisterParticle("impacts/hit_meatbones_ent_01");
  221. static const int IMPACT_MEATBONES_RICOCHET = RegisterParticle("impacts/hit_meatbones_ent_01");
  222. static const int IMPACT_MEATBONES_EXIT = RegisterParticle("impacts/hit_meatbones_ext_01");
  223. static const int IMPACT_GLASS_ENTER = RegisterParticle("impacts/hit_glass_ent_01");
  224. static const int IMPACT_GLASS_RICOCHET = RegisterParticle("impacts/hit_glass_ric_01");
  225. static const int IMPACT_GLASS_EXIT = RegisterParticle("impacts/hit_glass_ext_01");
  226. static const int IMPACT_WATER_SMALL_ENTER = RegisterParticle("impacts/hit_water_ent_01");
  227. static const int IMPACT_WATER_MEDIUM_ENTER = RegisterParticle("impacts/hit_water_ent_02");
  228. static const int IMPACT_WATER_LARGE_ENTER = RegisterParticle("impacts/hit_water_ent_03");
  229. static const int IMPACT_TEXTILE_ENTER = RegisterParticle("impacts/hit_textile_ent_01");
  230. static const int IMPACT_TEXTILE_RICOCHET = RegisterParticle("impacts/hit_textile_ric_01");
  231. static const int IMPACT_TEXTILE_EXIT = RegisterParticle("impacts/hit_textile_ext_01");
  232. static const int IMPACT_SAND_ENTER = RegisterParticle("impacts/hit_sand_ent_01");
  233. static const int IMPACT_SAND_RICOCHET = RegisterParticle("impacts/hit_sand_ric_01");
  234. static const int IMPACT_SAND_EXIT = RegisterParticle("impacts/hit_sand_ext_01");
  235. static const int IMPACT_PLASTIC_ENTER = RegisterParticle("impacts/hit_plastic_ent_01");
  236. static const int IMPACT_PLASTIC_RICOCHET = RegisterParticle("impacts/hit_plastic_ric_01");
  237. static const int IMPACT_PLASTIC_EXIT = RegisterParticle("impacts/hit_plastic_ext_01");
  238. static const int IMPACT_SNOW_ENTER = RegisterParticle("impacts/hit_snow_ent_01");
  239. static const int IMPACT_SNOW_RICOCHET = RegisterParticle("impacts/hit_snow_ric_01");
  240. static const int IMPACT_SNOW_EXIT = RegisterParticle("impacts/hit_snow_ext_01");
  241. static const int IMPACT_ICE_ENTER = RegisterParticle("impacts/hit_ice_ent_01");
  242. static const int IMPACT_ICE_RICOCHET = RegisterParticle("impacts/hit_ice_ric_01");
  243. static const int IMPACT_ICE_EXIT = RegisterParticle("impacts/hit_ice_ext_01");
  244. // EXPLOSIONS
  245. static const int EXPLOSION_LANDMINE = RegisterParticle("explosion_landmine_01");
  246. static const int EXPLOSION_TEST = RegisterParticle("explosion_placeholder");
  247. static const int EXPLOSION_GOAT = RegisterParticle("explosion_goat");
  248. // ENVIRO EFX
  249. static const int SMOKING_HELI_WRECK = RegisterParticle("smoke_heli_wreck_01");
  250. static const int AURORA_SANTA_WRECK = RegisterParticle("smoke_santa_wreck");
  251. static const int SMOKE_GENERIC_WRECK = RegisterParticle("smoke_generic_wreck");
  252. static const int SMOKING_CAR_ENGINE = RegisterParticle("menu_engine_fire");
  253. static const int EVAPORATION = RegisterParticle("menu_evaporation");
  254. // VEHICLES
  255. static const int HATCHBACK_COOLANT_OVERHEATING = RegisterParticle("Hatchback_coolant_overheating");
  256. static const int HATCHBACK_COOLANT_OVERHEATED = RegisterParticle("Hatchback_coolant_overheated");
  257. static const int HATCHBACK_ENGINE_OVERHEATING = RegisterParticle("Hatchback_engine_failing");
  258. static const int HATCHBACK_ENGINE_OVERHEATED = RegisterParticle("Hatchback_engine_failure");
  259. static const int HATCHBACK_EXHAUST_SMOKE = RegisterParticle("Hatchback_exhaust");
  260. static const int BOAT_WATER_FRONT = RegisterParticle("vehicles/boat/boat_water_front");
  261. static const int BOAT_WATER_BACK = RegisterParticle("vehicles/boat/boat_water_back");
  262. static const int BOAT_WATER_SIDE = RegisterParticle("vehicles/boat/boat_water_side");
  263. // CORPSE DECAY
  264. static const int ENV_SWARMING_FLIES = RegisterParticle("env_fly_swarm_01");
  265. // BONFIRE
  266. static const int BONFIRE_FIRE = RegisterParticle("fire_bonfire");
  267. static const int BONFIRE_SMOKE = RegisterParticle("smoke_bonfire");
  268. static const int TIREPILE_FIRE = RegisterParticle("fire_tirepile");
  269. static const int SPOOKY_MIST = RegisterParticle("spooky_mist");
  270. static const int VOMIT_BLOOD = RegisterParticle("character_vomitBlood_01");
  271. // CONTAMINATED AREAS
  272. static const int CONTAMINATED_AREA_GAS_TINY = RegisterParticle("contaminated_area_gas_around_tiny");
  273. static const int CONTAMINATED_AREA_GAS_AROUND = RegisterParticle("contaminated_area_gas_around");
  274. static const int CONTAMINATED_AREA_GAS_BIGASS = RegisterParticle("contaminated_area_gas_bigass");
  275. static const int CONTAMINATED_AREA_GAS_GROUND = RegisterParticle("contaminated_area_gas_ground");
  276. static const int CONTAMINATED_AREA_GAS_SHELL = RegisterParticle("contaminated_area_gas_shell");
  277. static const int CONTAMINATED_AREA_GAS_DEBUG = RegisterParticle("contaminated_area_gas_bigass_debug");
  278. //Fireworks
  279. static const int FIREWORKS_SHOT = RegisterParticle("fireworks_small_01");
  280. static const int FIREWORKS_EXPLOSION_RED = RegisterParticle("fireworks_large_01_Red");
  281. static const int FIREWORKS_EXPLOSION_GREEN = RegisterParticle("fireworks_large_01_Green");
  282. static const int FIREWORKS_EXPLOSION_BLUE = RegisterParticle("fireworks_large_01_Blue");
  283. static const int FIREWORKS_EXPLOSION_YELLOW = RegisterParticle("fireworks_large_01_Yellow");
  284. static const int FIREWORKS_EXPLOSION_PINK = RegisterParticle("fireworks_large_01_Pink");
  285. static const int FIREWORKS_FUSE = RegisterParticle("fireworks_small_04");
  286. static const int FIREWORKS_AFTERBURN_START = RegisterParticle("fireworks_small_02");
  287. static const int FIREWORKS_AFTERBURN_END = RegisterParticle("fireworks_small_03");
  288. //Fireworks anniversary
  289. static const int FIREWORKS_EXPLOSION_THANKS1 = RegisterParticle("fireworks_ThankYou_anim");
  290. static const int FIREWORKS_EXPLOSION_THANKS2 = RegisterParticle("fireworks_For10_anim");
  291. static const int FIREWORKS_EXPLOSION_THANKS3 = RegisterParticle("fireworks_Amazing_anim");
  292. static const int FIREWORKS_EXPLOSION_THANKS4 = RegisterParticle("fireworks_Years_anim");
  293. static const int FIREWORKS_EXPLOSION_THANKS5 = RegisterParticle("fireworks_Dayz_anim");
  294. //pox grenade
  295. static const int GRENADE_CHEM_BREAK = RegisterParticle("contaminated_area_gas_grenade");
  296. //Claymore
  297. static const int CLAYMORE_EXPLOSION = RegisterParticle("explosion_claymore_01");
  298. static const int PLASTIC_EXPLOSION = RegisterParticle("explosion_plastic_01");
  299. // Water jet/spilling
  300. static const int WATER_JET = RegisterParticle("water_jet");
  301. static const int WATER_JET_WEAK = RegisterParticle("water_jet_weak");
  302. static const int WATER_SPILLING = RegisterParticle("water_spilling");
  303. // Drowning bubbles
  304. static const int DROWNING_BUBBLES = RegisterParticle("breath_bubbles");
  305. //! Cupid's bolt
  306. static const int BOLT_CUPID_TAIL = RegisterParticle("cupid_bolt");
  307. static const int BOLT_CUPID_HIT = RegisterParticle("cupid_hit");
  308. // VOLCANIC
  309. static const int HOTPSRING_WATERVAPOR = RegisterParticle("hotspring_watervapor");
  310. static const int GEYSER_NORMAL = RegisterParticle("geyser_normal");
  311. static const int GEYSER_STRONG = RegisterParticle("geyser_strong");
  312. static const int GEYSER_SPLASH = RegisterParticle("geyser_strong_splash");
  313. static const int GEYSER_BUBBLES = RegisterParticle("geyser_bubbles");
  314. static const int VOLCANO = RegisterParticle("volcano_smoke");
  315. // FISHING
  316. static const int FISHING_SIGNAL_SPLASH = RegisterParticle("fishing_signal_splash");
  317. // STEPS
  318. static const int STEP_SNOW = RegisterParticle("step_snow");
  319. // STEPS
  320. static const int VEHICLE_WHEEL_SNOW = RegisterParticle("vehicle_wheel_snow");//
  321. static const int VEHICLE_WHEEL_GRAVEL = RegisterParticle("vehicle_wheel_gravel");//
  322. static const int VEHICLE_WHEEL_ASPHALT = RegisterParticle("vehicle_wheel_asphalt");//
  323. //TREE FALLING PARTICLES
  324. static const int TREE_FALLING_SNOW = RegisterParticle("tree_falling_snow");//
  325. static const int TREE_SOFT_FALLING_SNOW = RegisterParticle("tree_soft_falling_snow");//
  326. static const int TREE_SOFT_LARGE_FALLING_SNOW = RegisterParticle("tree_soft_large_falling_snow");//
  327. static const int TREE_SMALL_FALLING_SNOW = RegisterParticle("tree_small_falling_snow");//
  328. static const int TREE_FALLING_NEEDLE = RegisterParticle("tree_falling_needle");//
  329. static const int TREE_FALLING_LEAF = RegisterParticle("tree_falling_leaf");//
  330. static const int BUSH_FALLING_SNOW = RegisterParticle("bush_falling_snow");//
  331. //TREE PASSING ParticleSource
  332. static const int TREE_PASSING_SNOW = RegisterParticle("tree_passing_snow");//
  333. static const int BUSH_PASSING_SNOW = RegisterParticle("bush_passing_snow");// same as bush_falling_snow
  334. static int RegisterParticle(string file_name)
  335. {
  336. return RegisterParticle(GetPathToParticles(), file_name);
  337. }
  338. //! Splits the full path into name of particle and it's directory path, then registers the particle with the name and returns its ID
  339. //! Called by C++
  340. static int RegisterParticleByFullPath(string fullPath)
  341. {
  342. //! Silently fail on retail, game already takes too long to boot, lets not make it longer
  343. #ifdef DIAG_DEVELOPER
  344. if (fullPath.Replace("\\", "/") > 0)
  345. {
  346. ErrorEx(string.Format("Using wrong path delimiter for particle registering! Use '/' instead of '\\'. fullPath=%1", fullPath), ErrorExSeverity.WARNING);
  347. }
  348. #endif
  349. int lastIndex = fullPath.LastIndexOf("/");
  350. if (lastIndex < 0)
  351. {
  352. //! TODO(kumarjac): bake in this error
  353. #ifdef WAITING_FOR_PBOS_TO_BE_UPDATED
  354. ErrorEx(string.Format("No root path found! fullPath=%1", fullPath), ErrorExSeverity.ERROR);
  355. return ParticleList.INVALID;
  356. #else
  357. return RegisterParticleByFullPath(GetPathToParticles() + fullPath);
  358. #endif
  359. }
  360. // 'graphics/particles/vehicle_wheel_snow' becomes 'graphics/particles/' and 'vehicle_wheel_snow'
  361. string rootPath = fullPath.Substring(0, lastIndex + 1);
  362. string fileName = fullPath.Substring(lastIndex + 1, fullPath.Length() - (lastIndex + 1));
  363. return RegisterParticle(rootPath, fileName);
  364. }
  365. //! Registers a particle and returns its ID
  366. static int RegisterParticle(string root_path, string file_name)
  367. {
  368. if (!m_ParticlePaths)
  369. m_ParticlePaths = new map<int, string>;
  370. if (!m_ParticleNames)
  371. m_ParticleNames = new map<string, int>;
  372. string path = string.Format("%1%2", root_path, file_name);
  373. string fullPath = string.Format("%1.ptc", path);
  374. if ( !FileExist(fullPath) )
  375. {
  376. string devMsgSuffix;
  377. #ifdef DEVELOPER
  378. devMsgSuffix = " Then rebuild 'scripts' and 'graphics' PBOs.";
  379. #endif
  380. ErrorEx(string.Format("Particle file not found! <%1> Correct path to this particle in script file ParticleList.c!%2",
  381. fullPath, devMsgSuffix), ErrorExSeverity.WARNING);
  382. //return ParticleList.INVALID;
  383. }
  384. int existingNameId;
  385. if (m_ParticleNames.Find(file_name, existingNameId))
  386. {
  387. int existingPathId;
  388. if (m_ParticlePaths.GetKeyByValueChecked(path, existingPathId))
  389. {
  390. if (existingNameId == existingPathId)
  391. {
  392. return existingNameId; // We have already registered this exact file
  393. }
  394. else
  395. {
  396. ErrorEx(string.Format("ParticleNames and ParticlePaths array are containing conflicting data. ID %1 vs ID %2", existingNameId, existingPathId));
  397. }
  398. }
  399. else
  400. {
  401. ErrorEx(string.Format("Duplicate particle filename: %1; GetParticleIDByName will only work with the first path if there are two different paths.", file_name), ErrorExSeverity.WARNING);
  402. }
  403. }
  404. else
  405. {
  406. m_ParticleNames.Insert(file_name, m_lastID + 1);
  407. }
  408. ++m_lastID;
  409. m_ParticlePaths.Insert(m_lastID, path);
  410. return m_lastID;
  411. }
  412. static int GetRegisteredParticlesCount()
  413. {
  414. return m_lastID;
  415. }
  416. //! Purely checks for an invalid number, does NOT mean it is actually registered
  417. static bool IsValidId(int id)
  418. {
  419. return id != NONE && id != INVALID;
  420. }
  421. //! Returns particle's full path (without .ptc suffix) based on its ID
  422. static string GetParticlePath(int particle_id)
  423. {
  424. string path;
  425. if (!m_ParticlePaths.Find(particle_id, path))
  426. ErrorEx(string.Format("No particle registered with id: %1", particle_id), ErrorExSeverity.WARNING);
  427. return path;
  428. }
  429. //! Returns particle's full path (with .ptc suffix) based on its ID
  430. static string GetParticleFullPath(int particle_id)
  431. {
  432. return string.Format("%1.ptc", GetParticlePath(particle_id));
  433. }
  434. //! Returns particle's ID based on the path (without .ptc suffix)
  435. static int GetParticleID(string particle_file)
  436. {
  437. int id = m_ParticlePaths.GetKeyByValue(particle_file);
  438. if (!IsValidId(id)) // valid id starts from 1, 0 is invalid
  439. ErrorEx(string.Format("No particle registered with path: %1", particle_file), ErrorExSeverity.WARNING);
  440. return id;
  441. }
  442. //! Returns particle's ID based on the filename (without .ptc suffix)
  443. static int GetParticleIDByName(string name)
  444. {
  445. int id = 0;
  446. if (!m_ParticleNames.Find(name, id))
  447. ErrorEx(string.Format("No particle registered with name: %1", name), ErrorExSeverity.WARNING);
  448. return id;
  449. }
  450. //! Returns base path to all particles
  451. static string GetPathToParticles()
  452. {
  453. return "graphics/particles/";
  454. }
  455. //! Preloads all particles
  456. static void PreloadParticles()
  457. {
  458. if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() ) // client side
  459. {
  460. int count = m_ParticlePaths.Count();
  461. for (int i = 0; i < count; ++i)
  462. {
  463. vobject vobj = GetObject( string.Format("%1.ptc", m_ParticlePaths[i]) );
  464. ReleaseObject(vobj);
  465. }
  466. }
  467. }
  468. }