Hey Walori,
I don't think that your problems are related to the use of function pointers, but the usage of the global entity pointer "me".
Can you please do the following?: In the caller code, open a local ENTITY* pointer like this:
ENTITY* e = ent_next(NULL);
and use "e" instead of me in the whole loop. Maybe you can put into the signature of spawn_move(spawn_cur); an entity parameter as well, whereas you pass "e" and use that one in c_move.
Using wildly the "me" or "my" pointer can cause many problems. Try to avoid that, except you are in an entity-action.