Home Dota 2

Adding new ability particles?

polycounter lvl 3
Offline / Send Message
schnoodle polycounter lvl 3
Alright, I've been digging around for a few hours and found nothing, so my question is, how the heck do I add custom ability particles to the game to test out?

I've edited Shadow Demon's abilities to match my item, and yet even after trying to add it to the particles\units\heroes folder, I can't test it out in game, so I have no clue how it looks right now!

Also, another question, which I can't find the answer to, how do I go about adding my own custom particles on an item, even though it didn't have one before? I know this is very difficult but I really want to do this, and so much around particles seems to be all hush-hush that it's incredibly annoying. Share the knowledge, please!

Replies

  • quockhanhlk
    Offline / Send Message
    quockhanhlk polycounter lvl 11
    Do you have -override_vpk in the launch options ?
  • schnoodle
    Offline / Send Message
    schnoodle polycounter lvl 3
    yes I do :0

    I have an idea of what might be wrong, and will update in a few hours here :)
  • Vovosunt
    Offline / Send Message
    Vovosunt polycounter lvl 4
    I'd like to bump this thread up!
    I've been trying to figure out how to add particles to items for several days and so far i was not able to :(

    Any insight on that topic would be much appreciated :)
  • quockhanhlk
    Offline / Send Message
    quockhanhlk polycounter lvl 11
    keep calm and wait for Pior's stuff xD
  • Automedic
    It still works for me so in all likelihood it's some mistake on your part. Here's a few things you can try in case you haven't resolved the issue:

    a) check wether the path of the .pcf is right
    should be Steam\steamapps\common\dota 2 beta\dota\particles\units\heroes

    b) check wether you named your file correctly
    should be hero_shadow_demon.pcf

    c) restart the client; apparently a few weeks ago Valve changes the way their files get cached, so you can't just reload new files by reconnecting to the server - you have to restart the entire client

    d) check wether your particle file gets read at all, for example by tining one of Shadow Demon's effects in a different colour and testing it ingame
  • Vovosunt
    Offline / Send Message
    Vovosunt polycounter lvl 4
    keep calm and wait for Pior's stuff xD

    I actually asked him about that XD
    Well hopefully Pior gets that thing figured out for the sake of all of us :)
  • schnoodle
    Offline / Send Message
    schnoodle polycounter lvl 3
    alright here's my update: i have no clue what's wrong. it's for shadow demon, and i tried naming every main parent their default particle name, and naming the file hero_shadow_demon.pcf (overwriting the original in \dota\root\particles\units\heroes) and it still doesn't work

    -override_vpk is active is in the launch options, and i launch a game testing my imported item, and absolutely nothing is changed.
  • schnoodle
    Offline / Send Message
    schnoodle polycounter lvl 3
    Automedic wrote: »
    It still works for me so in all likelihood it's some mistake on your part. Here's a few things you can try in case you haven't resolved the issue:

    a) check wether the path of the .pcf is right
    should be Steam\steamapps\common\dota 2 beta\dota\particles\units\heroes

    b) check wether you named your file correctly
    should be hero_shadow_demon.pcf

    c) restart the client; apparently a few weeks ago Valve changes the way their files get cached, so you can't just reload new files by reconnecting to the server - you have to restart the entire client

    d) check wether your particle file gets read at all, for example by tining one of Shadow Demon's effects in a different colour and testing it ingame

    wait wait wait, do we still do dota\particles\units\heroes? because i don't have one of those, but i do in a dota\root\ folder... should i make the folder? im going to try that.

    EDIT:: OH DANG!! that worked!! thank you so much!

    I will be updating this thread with a roundup of everything i've found about adding custom particles to items that didn't have them previously, and will explain what i've been doing and what i've been having trouble with in a bit!
  • pior
    Online / Send Message
    pior grand marshal polycounter
    Hi there ! I understand your struggle - it took me days to figure it out too, including reverse-engineering Valve models and asking around ... I am writing things down at the moment, I'll try to upload a PDF soon.
  • schnoodle
    Offline / Send Message
    schnoodle polycounter lvl 3
    aaaa thanks pior you're awesome!!!

    and just to follow up on my part, resources i found:
    QC syntax and Particle Positioning
    Potential QC example from some thread
    more potential formatting examples

    Whenever you decompile a model, you are given a qc file
    For example, my shadow demon qc file named "mdldecompiler.qc"
    $cd "C:\Users\mac\Desktop\shadow_demon\decompile"
    $modelname "heroes/shadow_demon/shadow_demon.mdl"
    $model "default" "shadow_demon_model.dmx.smd"
    
    $lod 1
     {
      replacemodel "shadow_demon_model.dmx" "lod1_shadow_demon_model.dmx"
    }
    $poseparameter turn -1.00 1.00
    $cdmaterials ""
    $hboxset "default"
    $hbox 0 "spine1" -12.345  -27.421  -25.850  28.748  27.421  24.594
    $hbox 0 "spine2" -11.868  0.446  -21.791  5.029  21.665  33.649
    $hbox 0 "spine3" -3.383  -36.772  -23.642  57.787  36.772  51.600
    $hbox 0 "bicep_R" -58.938  -11.556  -18.504  2.141  38.276  13.863
    $hbox 0 "elbow_R" -26.164  -12.717  -21.858  9.944  12.318  12.168
    $hbox 0 "r_pinky3_0" 5.960  -1.717  -4.047  7.574  2.516  -3.361
    $hbox 0 "r_pinky3_1" 2.165  -3.362  -3.517  17.541  2.660  4.260
    $hbox 0 "jaw1_0" 1.427  -7.817  0.309  11.061  7.817  12.437
    $hbox 0 "bicep_L" -2.141  -38.276  -13.864  58.938  11.556  18.504
    $hbox 0 "elbow_L" -9.944  -12.318  -12.168  26.164  12.717  21.858
    $hbox 0 "l_pinky2_0" 6.639  -3.065  -4.576  8.745  0.952  -3.926
    $hbox 0 "l_pinky2_1" 2.626  -3.213  -3.943  17.399  3.432  4.209
    $hbox 0 "thigh_R" -35.247  -25.507  -29.387  18.872  10.546  22.315
    $hbox 0 "knee_R" -22.491  -11.194  -9.397  8.587  9.832  11.711
    $hbox 0 "root" -22.476  -24.591  -13.688  22.453  24.591  22.811
    $hbox 0 "thigh_L" -18.872  -10.546  -22.315  35.247  25.507  29.387
    $hbox 0 "knee_L" -8.587  -9.829  -11.711  22.491  11.194  9.397
    $hboxset "feet"
    $hbox 0 "ankle_L" -18.976  -23.790  -19.212  53.385  19.957  26.939
    $hbox 0 "ankle_R" -52.262  -19.957  -28.175  18.976  23.272  19.212
    $hboxset "select_high"
    $hbox 0 "spine1" -11.380  -45.226  -23.710  55.635  45.226  42.377
    $hbox 0 "root" -38.574  -43.187  -85.082  28.659  43.187  12.385
    $hboxset "hands"
    $hbox 0 "wrist_R" -42.818  -10.969  -11.898  -1.363  7.676  16.526
    $hbox 0 "wrist_L" 1.363  -7.676  -16.526  42.818  10.969  11.898
    $hboxset "head"
    $hbox 0 "head" -13.267  -9.904  -16.589  15.112  9.904  16.649
    $hboxset "select_low"
    $hbox 0 "root" -67.379  -77.859  -84.876  59.254  77.859  86.140
    $attachment "attach_attack1" "Index_1_L" 0.00 0.00 0.00 rotate 0.00 -0.00 0.00
    $attachment "attach_head" "head" 0.00 0.00 0.00 rotate 0.00 0.00 -0.00
    $attachment "eye_L" "head" 11.00 5.80 1.00 rotate 0.00 0.00 -0.00
    $attachment "eye_R" "head" 11.00 -5.80 1.00 rotate 0.00 0.00 -0.00
    $attachment "attach_attack2" "Index_1_R" 0.00 0.00 0.00 rotate -0.00 0.00 0.00
    $attachment "attach_hitloc" "spine2" 0.00 0.00 0.00 rotate 0.00 -0.00 -0.00
    $surfaceprop "default"
    $keyvalues  {  } 
    $illumposition -2.760 -0.000 100.618
    $sequence BindPose "BindPose" fps 30.00
    $sequence loadout_spawn "loadout_spawn" ACT_DOTA_SPAWN 1 fps 23.00
    $sequence idle "idle" loop ACT_DOTA_IDLE 1 fps 30.00
    $sequence attack "attack" ACT_DOTA_ATTACK 1 fps 30.00 {
      { event AE_CL_CREATE_PARTICLE_EFFECT 0 "SD_W follow_attachment attach_attack1" }
    }
    
    $sequence attack2 "attack2" ACT_DOTA_ATTACK2 1 fps 30.00 {
      { event AE_CL_CREATE_PARTICLE_EFFECT 0 "SD_W follow_attachment attach_attack2" }
    }
    
    $sequence ability1_cast "ability1_cast" ACT_DOTA_CAST_ABILITY_1 1 fps 30.00
    $sequence ability2_cast "ability2_cast" ACT_DOTA_CAST_ABILITY_2 1 fps 30.00
    $sequence ability3_cast "ability3_cast" ACT_DOTA_CAST_ABILITY_3 1 fps 30.00
    $sequence ability4_cast "ability4_cast" ACT_DOTA_CAST_ABILITY_4 1 fps 30.00
    $sequence ultimate "ultimate" ACT_DOTA_CAST_ABILITY_5 1 fps 30.00
    $sequence stun "stun" loop ACT_DOTA_DISABLED 1 fps 30.00
    $sequence flail "flail" loop ACT_DOTA_FLAIL 1 fps 30.00
    $sequence death "death" ACT_DOTA_DIE 1 fps 30.00 {
      { event AE_CL_PLAYSOUND 97 "BodyImpact_Common.Medium" }
    }
    
    $sequence portrait "portrait" ACT_DOTA_CAPTURE 1 fps 30.00
    $sequence portrait_hero_selector "portrait_hero_selector" ACT_DOTA_CAPTURE 2 fps 30.00
    $sequence run "run" loop ACT_DOTA_RUN 1 fps 30.00 {
      { event AE_CL_PLAYSOUND 1 "Hero_ShadowDemon.Footsteps" }
      { event AE_CL_PLAYSOUND 14 "Hero_ShadowDemon.Footsteps" }
    }
    
    $sequence workshop_anim_00 "workshop_anim_00" fps 30.00
    $sequence workshop_anim_01 "workshop_anim_01" fps 30.00
    $sequence workshop_anim_02 "workshop_anim_02" fps 30.00
    $sequence workshop_anim_03 "workshop_anim_03" fps 30.00
    $sequence workshop_anim_04 "workshop_anim_04" fps 30.00
    $sequence workshop_anim_05 "workshop_anim_05" fps 30.00
    $sequence workshop_anim_06 "workshop_anim_06" fps 30.00
    $sequence workshop_anim_07 "workshop_anim_07" fps 30.00
    $sequence workshop_anim_08 "workshop_anim_08" fps 30.00
    $sequence workshop_anim_09 "workshop_anim_09" fps 30.00
    $sequence spawn "spawn" ACT_DOTA_SPAWN 1 fps 30.00
    $sequence teleport "teleport" ACT_DOTA_TELEPORT 1 fps 30.00
    $sequence teleport_end "teleport_end" ACT_DOTA_TELEPORT_END 1 fps 30.00
    $sequence turns_lookFrame_0 "turns_lookFrame_0" fps 30.00
    $sequence turns_lookFrame_1 "turns_lookFrame_1" fps 30.00
    $sequence turns_lookFrame_2 "turns_lookFrame_2" fps 30.00
    $sequence turns "turns_lookFrame_0" fps 30.00 {
      blendwidth 3
      blend turn -1.000000 1.000000
      delta
     turns_lookFrame_0 turns_lookFrame_1 turns_lookFrame_2
    }
    

    so far i'm trying to find out how it knows where to get particles from, the attachments tag is used for positioning (and must be connected to a bone).
    also i have no clue about the file hierarchy/structure so i don't know where i would put this, and if i have to compile a model, i don't know how.

    that long and that's all i've gotten so far, haha
  • Drew Carrymore
    I had problems with decompiling the models and textures, so i can't help you with that, but i can help you with your QC file. I had a problem where editing the file would remove all the linebreaks so be careful with that.

    Here's a video of my particles working on a compiled model of a forge spirit AndrewHelenek sent me.

    [ame="http://www.youtube.com/watch?v=dPoOX6ZS_xo"]http://www.youtube.com/watch?v=dPoOX6ZS_xo[/ame]


    If you are trying to attach the particles to a hero you'll have to decompile the model to edit the QC and recompile it. If you are adding particles to a courier or a summonable unit, a simple way to do it is to compile it in the Dota Workshop submitter. Once you have the preview and you've made sure the model and aniamtions are ok in game, you can go to \Steam\SteamApps\common\dota 2 beta\content\dota\models\items\ and copy the model and animation files to a new folder. Once you've done that open the QC file and at the top you'll have something like:
    $modelname "items/invoker/forge_spirit/0x00c5a2cd/djinn/djinn.mdl"
    
    Change that path to the path of the default unit, in this case:
    $modelname "heroes/invoker/forge_spirit.mdl"
    
    Now you want to check the attachments. These are points that particle files can be locked to. the format is the following
    $attachment "ATTACHMENTNAME" "BONENAME" X Y Z rotate pitch yaw roll
    
    So for my example i added attachment points to the spirit's head for the hair and eyes.
    $attachment "attach_hair" "head" -8.00 20.00 0.00 rotate 90.00 180.00 90.00
    $attachment "attach_eye1" "head" -15.00 6.00 7.00 rotate 0.00 0.00 0.00
    $attachment "attach_eye2" "head" -15.00 6.00 -7.00 rotate 0.00 0.00 0.00
    
    By the way studiomdl.exe sometimes has...strange...interpretations for the rotation axes so you might have to do a bit of trial and error if you need that.

    You also probably shouldn't go adding new attachment points to the base hero models, if you do that Valve will have to recompile the models and put them in an update. This is more for stuff that is its own unit like couriers.






    Next you want to add the particles. For always on ambient particles you want to add a block like this:
    $keyvalues
    {
    	particles
    		{
    		effect
    		{
    			name			"PARTICLE NAME (NOT FILENAME!)"
    			attachment_type		ATTACHMENTTYPE
    			attachment_point	ATTACHMENTPOINTNAME
    		}
    	}
    }
    

    For attachment type you have the following options:

    start_at_origin - particle spawns at the model origin but doesn't move with it
    start_at_attachment - particle spawns at the position of the attachment point but doesn't move with it

    follow_origin - particle spawns at the model origin and moves with it
    follow_attachment - particle spawns at the position of the attachment point and moves with it

    So for my particles it looked like the following:
    $keyvalues
    {
    	particles
    		{
    		effect
    		{
    			name			"invoker_djinnSpirit_hair"
    			attachment_type		follow_attachment
    			attachment_point	attach_hair
    		}
    		effect
    		{
    			name			"invoker_djinnSpirit_hand"
    			attachment_type		follow_attachment
    			attachment_point	attach_attack1
    		}
    		effect
    		{
    			name			"invoker_djinnSpirit_hand"
    			attachment_type		follow_attachment
    			attachment_point	attach_attack2
    		}
    		effect
    		{
    			name			"invoker_djinnSpirit_eye"
    			attachment_type		follow_attachment
    			attachment_point	attach_eye1
    		}
    		effect
    		{
    			name			"invoker_djinnSpirit_eye"
    			attachment_type		follow_attachment
    			attachment_point	attach_eye2
    		}
    	}
    }
    

    The particles you are using should be in the hero's pcf file by the way, so in this case hero_invoker. If you're doing it for a courier i guess just put them in a pcf file that you know will get loaded, so put them in a hero's pcf file and make sure you pick that hero when you go to test it ingame.




    For particles that activate with an ability it's a little different. For this you want to find the sequence for the action you want to trigger the particle. As an example's here's the sequence for one of Centaur's attack animations that adds the particle streak to the weapon when he attacks.
    $sequence "attackb" "centaur_anims\attackb.smd" {
    	fps 30
    	"ACT_DOTA_ATTACK" 1
    	{ event AE_CL_CREATE_PARTICLE_EFFECT 5.99999976158142 "CENTAUR_BASE_ATTACK_STREAK follow_attachment attach_attack1" }
    }
    

    Or in more generic terms:
    $sequence "attackb" "centaur_anims\attackb.smd" {
    	fps 30
    	"ACT_DOTA_ATTACK" 1
    	{ event AE_CL_CREATE_PARTICLE_EFFECT ANIMATIONFRAMENUMBER "PARTICLENAME ATTACHMENTTYPE ATTACHMENTPOINTNAME" }
    }
    

    That's pretty much it, before you compile your model though save and reopen your QC file to make sure it looks ok. I had problems with line breaks disappearing which stopped it compiling. For compiling i used Crowbar. Just set the game to compile for to Dota 2, check the paths are correct for your install and navigate to your modified QC file. Hit compile Folder of QC file and it should do its thing. Look at the compile log to see ifyou can find any errors, if there are none then open up dota and start a custom game and test it out.

    One last thing to keep in mind, this is just for previewing your particles in the game. If they are ever added to the game they are probably going to be added as a particle overwrite or a completely new particle system, not compiled as part of the model like this.
  • schnoodle
    Offline / Send Message
    schnoodle polycounter lvl 3
    @Drew Carrymore
    This is awesome! thank you so much!

    So for my model, I don't WANT to add the particle to the hero, is there a way to add my particle to my specific model?

    EDIT: I found out i could just decompile the shadow_demon_cape.mdl so i did that, and then put my attachment and keyvalues in, checking the @modelname and things were right.

    still no particle effect :(
  • Drew Carrymore
    Follow what i did above but put it in the model of the item.

    Here's an example from the Dendi F2P pudge set that has a particle that puts a crow on his shoulder.
    $modelname "items/pudge/ftp_dendi_back/ftp_dendi_back.mdl"
    
    $bodygroup "default"
    {
    	studio "ftp_dendi_back_reference.smd"
    }
    
    $lod 1
    {
    	replacemodel "ftp_dendi_back_reference.smd" "ftp_dendi_back_ftp_dendi_back_lod1.smd"
    }
    
    
    $attachment "attach_shoulder" "spine3" 28 -60 28 rotate 0 90 0
    
    $surfaceprop "default"
    
    $contents "solid"
    
    
    
    
    
    $sequence "ref" "ftp_dendi_back_anims\ref.smd" {
    	fps 30
    }
    

    You would add the ambient particle block to the end of that for testing purposes. Keep in mind that the item will only have the bone chain that the item uses, so if it's for a weapon you can't add the attachment point to the head bone.
  • schnoodle
    Offline / Send Message
    schnoodle polycounter lvl 3
    alright, i got it working, somehow. i've been doing so much that i don't even remember what i did wrong, hahaha. now i just need to position my particles right, because for some reason they only stick straight up even if i rotate it?

    EDIT:: If i remember correctly, it was something about using my item, naming it shadow_demon_cape.mdl, and then replace the original file so that Crowbar would compile my model instead of the base model. Also, you should make a Custom game, do not test your item through the workshop importer if you want to try it out. your effects won't go through iirc, but nothing bad will happen.

    my end .qc file was as follows:
    $cd "C:\Users\mac\Desktop\shadow_demon\decompile"
    $modelname "heroes/shadow_demon/shadow_demon_cape.mdl"
    $model "default" "shadow_demon_cape_model.dmx.smd"
    
    $lod 1
     {
      replacemodel "shadow_demon_cape_model.dmx.smd" "lod1_shadow_demon_cape_model.dmx.smd"
    }
    $cdmaterials ""
    $hboxset "default"
    $hbox 0 "spine1" 0.000  -41.029  -18.569  65.417  41.029  0.000
    $hbox 0 "spine2" -3.025  -48.955  -25.658  24.097  48.955  33.098
    $hbox 0 "spine3" -15.335  -43.753  -23.642  57.787  43.753  51.600
    $hbox 0 "bicep_L" -2.614  -38.583  -27.596  78.754  14.019  22.425
    $attachment "attach_gem" "spine2" -16 0 -35 rotate -90 0 0
    $surfaceprop "default"
    $keyvalues
    {
    	particles
    		{
    		effect
    		{
    			name			"shadow_demon_brace_gem"
    			attachment_type		follow_attachment
    			attachment_point	attach_gem
    		}
    	}
    } 
    $illumposition -5.914 -0.064 145.823
    $sequence BindPose "BindPose" fps 30.00
    
    I would also suggest replacing the lod1 file with your item as well, even if you only have the lod0. But using the same file name is very important, otherwise it won't work.
  • Drew Carrymore
    I can't help you with that since i don't know what particle you are working on, but it's probably an issue with using world space over local space.
  • schnoodle
    Offline / Send Message
    schnoodle polycounter lvl 3
    ah, i figured out a bit ago that i was using a render_sprite_trail, and can't rotate it :(

    thanks for everything!
  • katzeimsack
    Offline / Send Message
    katzeimsack polycounter lvl 19
    Hi,
    everytime I import my own saw, the timersaw particle effect disappears.
    But the original decompiled qc has no particle attachement or anything.
    Any idea what is happening?
  • Kenji87
    Hi guys, I recently downloaded the workshoop tool for DOTA2 to make some particle fx, but I have some issues.

    All the dota2 vfx I'm playing with are .Vpcf files, which I'm testing in my test package:
    Steam\steamapps\common\dota 2 beta\dota_ugc\content\dota_addons\test but I can't see in game (which run with the -override_vpk command)

    I've been following this guide: http://www.workshophatemachine.com/2014/06/04/introduction-dota-2-particle-systems/ but without using the Alien Swarm SDK, as I want to use the DOTA2 particle editor.

    The vfx which I extracted from the pak01_dir are in .pcf format and cannot be opened by the DOTA2 particle editor (only .vpcf).
    Also, it seems to extract only a small part of the vfx, for example it only extract 1 fx file for each character, for example "hero_lich.pcf", while in my test folder I have many.vpcf related to the lich which I can modify in the editor.

    I really don't know what to do anymore, I would like to bring my .vpcf I'm working on in the game, I tried many many things but I can't make it work.

    Thank you very much

    Daniele
  • Kenji87
    Hi guys, I recently downloaded the workshoop tool for DOTA2 to make some particle fx, but I have some issues.

    First of all I couldn't open any vfx from the editor, this is because the DOTA2 particle editor apparently cannot open .pcf, but I found someone who converted them in .vpcf (I don't know how) and I downloaded the package so I can modify the vfx.

    All the dota2 vfx I'm playing with are .Vpcf files, which I'm testing in my test package:
    Steam\steamapps\common\dota 2 beta\dota_ugc\content\dota_addons\test but I can't see in game (which run with the -override_vpk command)

    I've been following this guide: http://www.workshophatemachine.com/2014/06/04/introduction-dota-2-particle-systems/ but without using the Alien Swarm SDK, as I want to use the DOTA2 particle editor.

    The vfx which I extracted from the pak01_dir are in .pcf format and cannot be opened by the DOTA2 particle editor (only .vpcf).
    Also, it seems to extract only a small part of the vfx, it only extract 1 fx file for each character, for example "hero_lich.pcf", while in my test folder I have many .vpcf related to the lich which I can modify in the editor.

    I really don't know what to do anymore, I would like to bring my .vpcf I'm working on in the game, I tried many many things but I can't make it work.

    Thank you very much

    Daniele
  • Alismuffin
    Offline / Send Message
    Alismuffin polycounter lvl 7
    Hey Daniele!

    Valve have said that they are reworking their particle system workflow so I would recommend waiting for that to be released! At least that's what I'm doing

    They actually said they don't want people submitting particle effects in the New Bloom event which ends sometime in January
  • ReMixx
    Kenji87 wrote: »
    ... but I found someone who converted them in .vpcf (I don't know how) and I downloaded the package so I can modify the vfx ...

    If you can convert from .pcf to .vpcf, then you can probably convert the other way too. Who converted them for you? I'd like to know about this too as I get closer to poking at particles for the Hattery.
  • hariss
    HI, I am noob and started making items, particle effect has greatly drawn my interest I want to startup with that please help me, I want to know few things these are as follows:

    1. how to add particle effect on pudge hook like scorching talon hook had? because I know that particle effect can be added on item which had particle on it already, but pudge hook had no particle effect but the scorhing talon hook had it so I don't know how did they do it. can anyone shed some light on it?

    2. second adding any custom particle effect to any spell which is bounded to any specific items only, how to do that? example: like some of juggernaut sword make bladedancer spell to show custom effect what is that? is that particle effect too? if so, then how to make it trigger when proc happens.

    3. if I can add a totally new particle effect which an item doesn't had it before? if yes then how? and how to change the spell effects and animations what are they called as?

    Please help me I would be glad and appreciate any help, I am totally a newbie in this but I am crazy for particle effects I want to make an item with particle effect on it.
  • acmeimages
    If you were adding particles for a courier, where would you save the particle file, and how would you direct to it in the .qc file?

    Thanks in advance
Sign In or Register to comment.