Aaaaahhhhh, Fehler gefunden.
Du ziehst dir selbst den Boden unter den Füßen weg.
Zuerst eine Vorinformation: Der RPG Maker checkt zu Beginn jedes Frames die Startbedingungen der Events.
Event "EV0029", Seite 1, hat Switch 4 "Cursor" als Startbedingung.
Was passiert ist:
=== Framebeginn ===
RPG Maker überprüft Startbedingungen, Switch 4 ist an, also wird Event "EV0029", Seite 1, ausgeführt.
Event "EV0029", Seite 1, hat Switch 4 "Cursor" als Startbedingung.
Event "EV0029", Seite 1, callt Event "Heldenzüge", Seite 1.
Event "EV0029", Seite 1, stellt Switch 4 "Cursor" aus.
Event "Heldenzüge", Seite 1, callt Event "Heldenzüge", Seite 4.
(Event "Heldenzüge", Seite 1, stellt Switch 4 "Cursor" nochmal aus, warum auch immer.)
Event "Heldenzüge", Seite 4, callt Common Event "HP Anzeige".
Common Event "HP Anzeige" führt ein "Wait 0.0" aus, was bedeutet "auf nächsten Frame warten".
=== Nächstes Frame ===
RPG Maker überprüft Startbedingungen, Switch 4 ist aus, also wird Event "EV0029", Seite 1, nicht ausgeführt. <<< und zwar die Skripteinheit. Siehe unten.
Du musst geistig unterscheiden zwischen einer Eventseite als Einheit auf der Map (bzw. Common Event als Einheit in der Database) und als "Skripteinheit". Eine Skripteinheit hat einen Callstack (d.h. einen "Stapel" der sich merkt wenn das Event andere Events gecallt hat, damit am Ende des gecallten Event zur Ursprungsposition zurückgekehrt werden kann) und einen Linepointer, der dem RPG Maker sagt, was die aktuell ausgeführte Zeile ist (was nicht zwingend in derselben Einheit auf der Map sein muss! D.h., Event "EV0029", Seite 1, kann - wie es hier passiert - einen Linepointer haben der gerade auf Common Event "HP Anzeige" zeigt!), sowie ein paar andere Daten (aktuelle "Wartezeit" wenn gerade ein Wait aktiv ist, etc.). Effektiv ist jede "Skripteinheit" eine parallel laufende Instanz des Eventinterpreters des RPG Makers.
Der Linepointer (der interne "Skriptzeilencursor") für Event "EV0029", Seite 1, befindet sich zu Beginn des neuen Frames (durch das Wait 0.0 bedingt) gerade am Ende von Common Event "HP Anzeige", denn der Callstack von diesem Eventskript sieht gerade so aus:
===> Common Event "HP Anzeige", Zeile 22: <> Wait 0.0 <<< aktueller Linepointer
==> Event "Heldenzüge", Seite 4, Zeile 79: <> Call Event: Common Event "HP Anzeige"
=> Event "Heldenzüge", Seite 1, Zeile 51: <> Call Event: "Heldenzüge", Seite 4
> Event "EV0029", Seite 1, Zeile 42: <> Call Event: "Heldenzüge", Seite 1 <<< Ursprungsevent, wird dieses deaktiviert, wirkt sich das auf den gesamten Stapel aus
D.h., durch Deaktivieren von Switch 4, der Startbedingung für Event "EV0029", Seite 1 ist, wird die Ausführung der damit zugeordneten Skripteinheit unterbrochen, auch wenn diese gerade einen Linepointer hat der auf ein anderes Event zeigt (hier das Common Event). Dieser Effekt wird "scheinbar" erst durch "Wait 0.0" ausgelöst, weil das Wait auf den nächsten Frame wartet, und der RPG Maker nur zu Beginn jedes Frames die Startbedingungen überprüft, also das Ausschalten von Switch 4 solange keinen Effekt hat bis das Frame endet.
Du musst also deinen Code umbauen sodass du dir nicht mehr wie eingangs erwähnt selbst den Boden unter den Füßen wegziehst, z.B. indem du Switch 4 nicht als Startbedingung verwendest sondern das gesamte Event "EV0029" in ein "<> Conditional Branch: If Switch [0004:Zug] == ON" packst (obwohl ich vermute dass das nichtmal notwendig ist weil das Event ja niemals wieder von vorne beginnt während die zugehörige Skripteinheit noch nicht am Ende der Eventseite angelangt ist, was ja erst passiert wenn es aus den ganzen gecallten Events zurück ist - aber ich hab deine Events nicht so genau angeschaut um sagen zu können dass es 100% für dich passen würde).
Übrigens: Das Debugaddon hat leider einen Fehler der bei gecallten Eventseiten die falsche Eventseitennummer zeigt, darum steht alles was im Heldenzüge-Event passiert in der trace.log als "Pg 6" drinnen, obwohl es in Wirklichkeit in Seite 1 und 4 abläuft.







Zitieren
Wieder etwas neues gelernt! Danke. 
