> mob/verb/StartBalloons()
> var/obj/Balloons/Red/R=new/obj/Balloons/Red
> if(global.Round>0&&global.Round<5)
> Spawn(R,10)
>
> proc
> Spawn(var/obj/Balloons/T, var/Count)
> for(Count, Count >1, Count--)
> if(T.name == "Red")
> var/obj/Balloons/Red/R = new(locate(/turf/Start))
>
Why are you creating a new balloon and passing it to Spawn just to check it's name and create another balloon? That's redundant. Just pass a text value to the proc instead of wasting space by creating a new object and not even deleting it.
> if(!R.Target)
> for(var/obj/End/A in world)
> R.Target = A
> break
>
Now to this. Since you are creating a new balloon, it isn't going to have a target, is it? Instead of doing this every time, I would suggest doing this in the balloon's New() proc. Have it grab it's own target.
Also, you don't have to do in world. world is what is searched by default.
> atom/movable/Move()
> .=..()
>
Now why are you overriding Move() just to call it's parent function? Don't bother even using these lines unless you plan on modifying Move().
That's my whole code, that's everything I've done coded so far.