Ich habe meine vorschläge mal etwas gegliedert:
1. Die Monster sollten auch eine eigene funktion mit endlosschleife haben. Der Teil
//wenn skill(leben) zu klein dann tot
if (you.skill12 <= 0)
{
ent_remove(you);
}
sollte auf jedenfall dort rein, und nicht in die funktion des turms. das ist sonst keine saubere trennung, und du wirst nur durcheinanderkommen.
2.
you = ent_create(tower001_mdl,mouse_ent.x,tower_schiesse);
Hier scheint das "you" mir am anfang recht sinnlos. Es hat aber glaube ich nichts mit dem problem zu tun was du hast.
3.
while (ent_tower001 == NULL) { wait(1);}
leuchtet mir nicht ein. ich hoffe du willst nicht jeden erstellten turm mit 1 bis x durchnummerieren? das gleiche für die anderen variablen. Hier müsstest du ja für jeden turm eine eigene funktion schreiben. Nutze da lieber ein Array oder versuch ganz ohne eine durchnummerierung auszukommen, indem du angriffswert und geschw in skills des jeweilen towers speicherst.
4. scheint der fehler in der funktion show_angriff zu liegen, denn du hast ent_next und you soweit ich sehen konnte korrekt benutzt. kannst du die nochmal zeigen?