well, just try to use it, it's not actually what you think it is.Well it'll become so natural that you wont even think that you are using it when you are typing the code.
when you create function with a infinite while loop and put wait(1); at the end of that while, that while will loop only once per frame. wait makes the loop wait for the next frame. and youll get one per frame functionality.wait doesnt make the whole functions to wait for the next frame, it only makes the function which is wait called from to wait.
about "action" keyword, it is actually "void" type.
acknex.h line 12: typedef void action;
only diffrence is that in wed, actions show up in behaviour list, and you can assign this funtions to your entities that you have placed in wed.
if you use and a while(1)...wait(1) loop in you actions(entity functions, whatever you want to call), you'll also get another function that runs once every frame. Then tehre is "my" pointer which refers to the entity which is currently calling that action.then you can use "my" in your action, which will point to the entity that is calling the action, and you can access all entity properties using my, point it to something else, pass it as a function paramter etc.
so when you write an action like
action braaagahahahaga(){
while(1){
my.pan+=10;
wait(1);
}
}
and assign this to an entity in wed, and run your script, your entity will start to spin like crazy. and wont stop spinning.
Concep it very easy yet very powerfull.
Skim thru the workshops, and you'll find your self diving deep in the manual and prototyping you game in full speed.