What I do not understand is why when I refer to an instance variable it doesn't take into account for each individual instance's unique variables. I am under the impression that there is a universal solution for getting the system to make instances behave independently based on their uniquely different variables.
When you refer to instance variable, the system actually does this "for each picked instance".
Say, if you do "Gun set var to random(10)", a different random number will be set for each instance of the Gun.
And if you do "Gun set scale to var", they will all become different sizes.
As for the Timer - this is not a workaround. This is the right way to do things in C2 when you are dealing with multiple instances and delayed actions.
If you only have 1 gun, you can use "Every x seconds" or "Wait", no problem.
If you have multiple instances of gun and they are firing/reloading at different times, it may be really difficult to get them working correctly with all these "Every x seconds", "Trigger once" and "Wait" events.
In your last capx the problem is with the "Trigger once" condition.
After one gun has fired, event #5 is triggered, all good. Then a second gun fires, but the first gun still has Cycling=1, so this event will not be triggered, because it's still true and it has already triggered once.
And then the first gun fires again, but event #5 is still true, so it's still not triggered and now both guns are stuck with Cycling=1.
Here is a simple solution: