Gen3 Scripting Fragen (30.09.17)

  • Hallo,
    da ich privat mal wieder etwas rumhacke (kein aufwendiges Projekt, eher nach dem Motto: Einfach, durchspielbar, machbar) muss ich doch wieder etwas scripten. Leider stößt mein XSE Wissen auch etwas an seine Grenzen, so dass ich immer mal wieder einzelne Fragen habe, die ich gern beantwortet hätte. Ich fang mal mit dem ersten an, bei den anderen Problemen probier ich erst noch einmal selber rum. Hier habe ich aber keine Ahnung:


    1. Der wiederkehrende Eich.



    Zum Anfang des Spieles, wenn man sein Haus verlässt, steht Eich vor dem Spieler und erzählt ihm einiges bevor er geht. Ich habe hier mit einem Levelscript gearbeitet und Eich die Personen-ID der passenden Flag gegeben:





    Der Levelscript hat die Flag 4033 und den Wert Null. Der Sprite Eich hat die ID 4033. Wie man erkennt verschwindet Eich durch den Skript (ist ja auch logisch, er geht ja weg). Dies passiert auch wunderbar. Selbst wenn man die Map verlässt. Aber: Sobald man das Spiel speichert und neustartet, steht Eich wieder da. Wie schaffe ich es, dass Eich auch trotz Spielneustart weg bleibt? Der Levelscript startet aber nicht von vorne. Nur das Event Eich als Bild ist wieder da. Eich selber hat keinen eigenen Script.

  • Beware: Flag != Var.


    Eine Flag ist ein bool'sher Wert, sie ist gesetzt, oder nicht gesetzt. Ein Schalter sozusagen, und eine Variable ist halt eine Variable. Sie kann die Werte [0;2^16] annehmen. Um eine Person verschwinden zu lassen, braucht diese Person eine Flag. Diese Flags haben Indizes um ~ 0x200-0x500, danach kommen noch ein paar Trainerflags und andere, für das Spiel besondere, Flags wie z.b. Menüeinträge.


    Ein Levelscript prüft hingegen eine Variable, und wird dann ausgeführt, wenn der Wert der Variable, mit Value übereinstimmt. Um dein Problem zu lösen, musst du dem NPC also eine richtige Flag zuweisen, deine ist nämlich weit außerhalb der Range der Flags. Hidesprite setzt diese Flag dann übrigens auch automatisch, das musst du nicht selbst machen.


    ~Sturmvogel


    Let the old ways live and prosper in the hearts of our young



  • Was der script machen soll: Wenn die Flag aus ist (man noch kein Pokemon hat), soll der Spieler zurückgehen. Wenn die Flag an ist, man also ein Pokemon hat, soll man normal durchgehen können.


    Wenn ich noch kein Pokemon habe bleibt das Spiel / freezed der Spieler, kann sich nicht mehr bewegen. Die Textbox aktiviert sich nicht. Wenn die Flag aktiviert wurde, kann man problemlos durchgehen.


    Warum geht der script ab lock nicht weiter`?

  • Wen versuchst du denn mit deinem Applymovement zu bewegen ?
    Wenn es den "Player" bewegen soll ist 0x255 Falsch.
    applymovement 0xFF @move - Damit Bewegst du den Player!
    applymovement 255 @move - Damit auch ^^
    Mit deinem 0x255 versuchst du die ID 597 zu Bewegen und dadurch führt es zum Crash!


    -SoulK3

    ------------------------------------------------------------------------------------
    ~ ~ ~ SoulK3 ~ ~ ~


    :thumbsup: Wer Rechtschreibfehler findet darf sie gerne Behalten :thumbsup:


    Drei Menschen können ein Geheimnis bewahren.
    Wenn Zwei von ihnen Tot sind.
    :evil:
    ------------------------------------------------------------------------------------

    Edited once, last by SoulK3 ().

  • Hey,


    erstmal Danke für deine Antwort. Hab jetzt nach ein paar Tagen das ganze probiert und bin verwundert. Dein Vorschlag / deine Verbesserung macht natürlich sehr viel Sinn und meiner Meinung nach sollte der Script so auch funktionieren. Dennoch freezed der Charakter beim drauftreten auf das Feld wenn die flag noch nicht aktiviert wurde. Der Script läuft nicht weiter.


    Hat wer ne Idee woran das liegen kann? Habe testweise dann auch deinen Script 1:1 kopiert und einmal mit Suche ab 0x800000 (wie Guides es vorschlagen).


    Ich bin etwas überfragt. Muss ich dem Script in Advance Map einen Wert oder ähnliches zuordnen? Die Map hat nen Levelscript (den von oben), der aber nichts mit dem Script hier zu tun hat. Es scheint ja so als hätte er Probleme die Textmessage abzurufen..


  • https://images.romhackersworld.eu/image-list/?userID=13480


    Müssten alle relevanten Bilder sein.

  • Auf dem Foto ist zu erkennen das du dem Scriptfeld keine Variable zugeordnet hast. Nehm dir eine var und ordne sie zu.


    Im Script selbst kannst du dann das "checkflag" weglassen.
    Als Beispiel:
    Hat dein Scriptfeld die Variable(var-nummer) 0x4055 und den Wert(Var-Wert) 0x00 würde das Script immer ausgelöst wenn die Variable den wert 0x00 hat.
    Wenn du nun in einem anderen Script den Wert der Variable auf 0x01 setzt wird das Scriptfeld nicht mehr getriggert.


    -SoulK3

    ------------------------------------------------------------------------------------
    ~ ~ ~ SoulK3 ~ ~ ~


    :thumbsup: Wer Rechtschreibfehler findet darf sie gerne Behalten :thumbsup:


    Drei Menschen können ein Geheimnis bewahren.
    Wenn Zwei von ihnen Tot sind.
    :evil:
    ------------------------------------------------------------------------------------

  • ok, ich habe eine ähnliche Frage. Habe mir dazu diesesTutorial hier angesehen und auch schon ein paar ähnliche, eig. gleich funktionierende scripts verwendet aber es will nicht klappen.
    Habe jetzt also folgendes script verwendet:


    Aber es klappt nicht, sprich: Alles klappt, es lässt sich also nur einmal auslösen, der Text wird angezeigt. Das einzige, was nicht funktioniert: die ausgewählte Person bewegt sich nicht. Kein Stück..
    Weiß jemand, wo mein Fehler ist?
    der var-wert ist 4045, bei unbekannt habe ich allerdings nur zwei stellen zur verfügung, weswegen ich keine 0300 eingeben kann
    (arbeite mit AM 1.95.)

    • ja, tut sie, hab es mehrmals überprüft.
    • Ja, deshalb auch das #freespace 0xFF und #dynamic 0xE40000 am anfang^^

    wovon genau?^^


    achso, die entsprechende person, die sich bewegen soll(sprich person 6) hat kein script.
    e: mit script gehts auch nicht..

  • Aus einer Table konnte ich entnehmen, dass "#raw 0x13 = Delay4". Die Person bewegt sich nicht, weil einfach 3x ein Delay (Pause) abgespielt wird.


    Hier hast du eine kleine Tabelle für Emerald:


    Tipp: Bei so etwas einfach versuchen, verschiedene Werte für das Movement einzutragen, um sicherzustellen, dass nur die Movementbefehle (raw) falsch sind.