XSE applymovement Script Problem

    • XSE applymovement Script Problem

      Hallo,

      Ich habe ein Problem. Ich habe ein Script geschrieben für mein Rom Hack (Rom base=Pokemon Smaragd)
      und es funktioniert allles so wie es soll im Script, bis auf eine Sache.
      Ich habe im Script angegeben das der Spieler selbst einen Schritt nach unten macht und einen nach rechts.
      Das funktioniert auch aber der Spieler macht plötzlich dann ein Face Move nach links ohne das ich es angegeben habe.

      Hier das Script:

      Quellcode

      1. #dynamic 0x800000
      2. #org @main
      3. checkflag 0x205
      4. if 0x0 goto @start
      5. end
      6. #org @start
      7. msgbox @text 0x2
      8. applymovement 0xFF @go
      9. waitmovement 0x0
      10. applymovement 0x8 @go1
      11. applymovement 0x9 @go1
      12. msgbox @text2 0x2
      13. setflag 0x203
      14. setflag 0x204
      15. warp 0xB 0x4 0xFF 0x6 0x7
      16. pause 0x9
      17. hidesprite 0x8
      18. hidesprite 0x9
      19. release
      20. end
      21. #org @text
      22. = Hey, [player]!
      23. #org @text2
      24. = Kommst du mit zur Trainer Schule?\pMatthew hat dir extra einen Platz\nfreigehalten.\pProf. Determilues ist sehr streng.\pDu kannst von Glück reden dass er\ndich noch mit reingenommen hat.\pNormalerweise würde er das nicht machen\pAber er sieht irgendwie Hoffnung in dir.\pTrainerhoffnung hat er dich genannt.\nWie auch immer, wir müssen los.
      25. #org @go
      26. #raw 0x8
      27. #raw 0xB
      28. #raw 0xFE
      29. #org @go1
      30. #raw 0xA
      31. #raw 0xA
      32. #raw 0xA
      33. #raw 0xA
      34. #raw 0xFE
      Alles anzeigen
    • Cradily_ArT schrieb:

      Hallo,

      Ich habe ein Problem. Ich habe ein Script geschrieben für mein Rom Hack (Rom base=Pokemon Smaragd)
      und es funktioniert allles so wie es soll im Script, bis auf eine Sache.
      Ich habe im Script angegeben das der Spieler selbst einen Schritt nach unten macht und einen nach rechts.
      Das funktioniert auch aber der Spieler macht plötzlich dann ein Face Move nach links ohne das ich es angegeben habe.

      Hier das Script:

      Quellcode

      1. #dynamic 0x800000
      2. #org @main
      3. checkflag 0x205
      4. if 0x0 goto @start
      5. end
      6. #org @start
      7. msgbox @text 0x6 '--Textboxen die nicht schließen sollen sind Typ 6 oder 4
      8. applymovement 0xFF @go
      9. waitmovement 0x0
      10. applymovement 0x8 @go1
      11. applymovement 0x9 @go1
      12. waitmovement 0x0 '--auch auf diesen Move solltest du warten
      13. msgbox @text2 0x6 '--Selbes Problem wieder, callstd 2 beinhaltet ein faceplayer (vlt löst das das Facing aus, ich weiß es nicht)
      14. setflag 0x203
      15. setflag 0x204
      16. warp 0xB 0x4 0xFF 0x6 0x7
      17. waitsate '--viel eleganter als pause 0x9
      18. hidesprite 0x8
      19. hidesprite 0x9
      20. release
      21. end
      22. #org @text
      23. = Hey, [player]!
      24. #org @text2
      25. = Kommst du mit zur Trainer Schule?\pMatthew hat dir extra einen Platz\nfreigehalten.\pProf. Determilues ist sehr streng.\pDu kannst von Glück reden dass er\ndich noch mit reingenommen hat.\pNormalerweise würde er das nicht machen\pAber er sieht irgendwie Hoffnung in dir.\pTrainerhoffnung hat er dich genannt.\nWie auch immer, wir müssen los.
      26. #org @go
      27. #raw 0x10
      28. #raw 0x13 --0x10, 0x11, 0x12, 0x13 sind die Movements für normale Geschwindigkeit, die von 0x8 ausgehend sind "slow"
      29. #raw 0xFE
      30. #org @go1
      31. #raw 0x12
      32. #raw 0x12
      33. #raw 0x12
      34. #raw 0x12 '--siehe oben
      35. #raw 0xFE
      Alles anzeigen
      Wo war Gondor, als meine Klausurenphase begann?
    • Jop. Ich kann dir gerne auch mal erklären, wie waitstate funktioniert, falls es dich interessiert: Wenn waitstate ausgeführt wird, wird eine interne "Warte"-Flag im Scripthandler gesetzt. Jeden Frame will der Scripthandler weiterlaufen, tut das aber nicht, wenn diese "Warte"-Flag gesetzt ist.
      Jetzt haben viele Script-Befehle und hauptsächlich specials, die Funktion, am Ende ihrer Ausführung genau diese "Warte"-Flag zurückzusetzten (selbst wenn sie nicht gesetzt war, verursacht das ja keinen Fehler). Warp gehört zu diesen Befehlen. Du musst aber bedenken, dass du nach einem Warp, auf den du mit waitstate gewartet hast, nur noch den Frame hast, in dem der Script zu Ende läuft: Das heißt, Befehle, die länger als einen Frame dauern (z.B. applymovement oder msgbox) werden nicht zu Ende ausgeführt. Normalerweise führt man solche Dinge dann per Levelscript auf der Ziel-Map fort, da dieser beim Betreten der Map ausgelöst wird.
      Waitstate hat hauptsächlich den Zweck, dass der Script nicht schon beendet, bevor der Warp komplett ausgeführt wurde. Da kann es nämlich dazu kommen, dass der Spieler, während der Bildschirm schwarz wird, noch so lustige Sachen machen kann wie: Mit Personen sprechen, das Menü öffnen, einen neuen Warp auslösen. Deswegen immer waitstate nach einem warp.
      Wo war Gondor, als meine Klausurenphase begann?