I had it as a while loop before this. I was trying to save myself 2 lines of code (no i -= 1, and no wait will be needed when I add the actual code to it).
It works in example A. So Im sure Its not the for loop...
I miss understood you at the first place. And I think it's not going to work, cause you have to know how 'wait_for' actually looks like:
#define wait_for(f) while (proc_status(f)) wait(1)
#define wait_for_my(f) while (proc_status(f,my)) wait(1)
As you can see, it just checks if there is any running functions with the given function pointer (f), so your idea isn't going to work anyway. Cause having multiply running 'wait_time(150)' functions will stop all those 'wait_for', waiting till all 'wait_time' functions will end. Better insert 'while(i > 0)' loop right before the 'ent_remove', don't make thing too complicated where they should be simple

Greets
Edit: two lines

while(my.skill99 < 3){ my.skill99 -= time_step / 16; wait(1); }
ent_remove(my);