Gen3 Scripting Fragen (30.09.17)

    • 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:


      Levelscript


      '---------------
      #org 0x804A93
      showsprite 0x8
      msgbox 0x8804ABF MSG_NORMAL '"Hallo [player]! Heute beginnt\ndei..."
      giveitem 0x4 0x10 MSG_OBTAIN
      applymovement 0x8 0x8804D7D
      waitmovement 0x0
      hidesprite 0x8
      setvar 0x4033 0x1
      release
      end



      '---------
      ' Strings
      '---------
      #org 0x804ABF
      = Hallo [player]! Heute beginnt\ndeine große Reise. Du und [rival]\lschaffen es hoffentlich, diesen\lKrieg zu beenden. Denk bei deiner\lReise bitte daran, die anderen\lKulturen zu respketieren. Wir\lhaben sehr viel Glück, dass man\lunser Dorf im ganzen Land\lrespektiert. Es befinden sich\lviele Trainer im Land, welche\lKämpfen, um dem Krieg zu\lentfliehen. Pass also gut auf dich\lauf! Ich gebe dir außerdem\leinen Pokedex, diese Karte und\ldiese Orden. Früher musste man\lsich Orden erkämpfen um an der\lPokemon-Liga teilzunehmen. Heute\lsind sie wertlos. Aber zumindest\lkannst du mit ihnen VMs\lverwenden. Achja. Hier noch \lPokebälle! Bitte komm in mein \lHaus. Es ist im Nordwesten der \lStadt. Dort habe ich Pokémon \lfür dich.



      '-----------
      ' Movements
      '-----------
      #org 0x804D7D
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0x1F 'Step Left (Fast)
      #raw 0xFE 'End of Movements



      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.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Nachtion ()

    • 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
      Wandering on Horizon Road
    • Spoiler anzeigen

      #dynamic 0x800000
      #org @main
      checkflag 0x201
      if 0x1 goto @done
      lock
      msgbox @text 0x6
      applymovement 0x255 @move
      waitmovement 0x0
      release
      end


      #org @done
      release
      end


      #org @text
      = Ich sollte Prof. Baum besuchen.


      #org @move
      #raw 0x10
      #raw 0x10
      #raw 0xFE


      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
      Nachtrag:
      #dynamic 0x720000
      #org @main
      checkflag 0x201
      if 0x0 goto @block
      end

      #org @block
      lock
      msgbox @txt01 0x4
      closeonkeypress
      applymovement 0xFF @move01
      waitmovement 0x0
      release
      end

      #org @txt01
      = Ich sollte Prof. Baum besuchen.

      #org @move01
      #raw 0x10
      #raw 0x10
      #raw 0xFE
      ------------------------------------------------------------------------------------
      ~ ~ ~ SoulK3 ~ ~ ~

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

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

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von 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..
    • XSE Script

      '---------------
      #org 0x720000
      checkflag 0x201
      if 0x0 goto 0x872000B
      end


      '---------------
      #org 0x72000B
      lock
      msgbox 0x8720022 MSG_KEEPOPEN '"Ich sollte Prof. Baum besuchen."
      closeonkeypress
      applymovement MOVE_PLAYER 0x8720044
      waitmovement 0x0
      release
      end



      '---------
      ' Strings
      '---------
      #org 0x720022
      = Ich sollte Prof. Baum besuchen.



      '-----------
      ' Movements
      '-----------
      #org 0x720044
      #raw 0x10 'Step Down (Normal)
      #raw 0x10 'Step Down (Normal)
      #raw 0xFE 'End of Movements


      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:
      Spoiler anzeigen

      1. #freespace 0xFF
      2. #dynamic 0xE40000
      3. #org @main
      4. lock
      5. faceplayer
      6. checkflag 0x205
      7. if 0x1 goto @done
      8. applymovement 0x6 @go
      9. waitmovement 0x0
      10. msgbox @text 0x6
      11. setflag 0x205
      12. release
      13. end
      14. #org @done
      15. release
      16. end
      17. #org @text
      18. = Blabla
      19. #org @go
      20. #raw 0x13
      21. #raw 0x13
      22. #raw 0x13
      23. #raw 0xFE

      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.)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Eiswind ()

      • 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..

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Eiswind ()

    • 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:
      Spoiler anzeigen

      #raw 0x00 = Face Down
      #raw 0x01 = Face Up
      #raw 0x02 = Face Left
      #raw 0x03 = Face Right
      #raw 0x04 = Step Down (Slow)
      #raw 0x05 = Step Up (Slow)
      #raw 0x06 = Step Left (Slow)
      #raw 0x07 = Step Right (Slow)
      #raw 0x08 = Step Down (Normal)
      #raw 0x09 = Step Up (Normal)
      #raw 0x0A = Step Left (Normal)
      #raw 0x0B = Step Right (Normal)
      #raw 0x0C = Jump2 Down
      #raw 0x0D = Jump2 Up
      #raw 0x0E = Jump2 Left
      #raw 0x0F = Jump2 Right
      #raw 0x10 = Delay1
      #raw 0x11 = Delay2
      #raw 0x12 = Delay3
      #raw 0x13 = Delay4
      #raw 0x14 = Delay5
      #raw 0x15 = Step Down (Fast)
      #raw 0x16 = Step Up (Fast)
      #raw 0x17 = Step Left (Fast)
      #raw 0x18 = Step Right (Fast)
      #raw 0x19 = Step on the Spot Down (Slow)
      #raw 0x1A = Step on the Spot Up (Slow)
      #raw 0x1B = Step on the Spot Left (Slow)
      #raw 0x1C = Step on the Spot Right (Slow)
      #raw 0x1D = Step on the Spot Down (Normal)
      #raw 0x1E = Step on the Spot Up (Normal)
      #raw 0x1F = Step on the Spot Left (Normal)
      #raw 0x20 = Step on the Spot Right (Normal)
      #raw 0x21 = Step on the Spot Down (Faster)
      #raw 0x22 = Step on the Spot Up (Faster)
      #raw 0x23 = Step on the Spot Left (Faster)
      #raw 0x24 = Step on the Spot Right (Faster)
      #raw 0x25 = Step on the Spot Down (Fastest)
      #raw 0x26 = Step on the Spot Up (Fastest)
      #raw 0x27 = Step on the Spot Left (Fastest)
      #raw 0x28 = Step on the Spot Right (Fastest)
      #raw 0x29 = Slide Down
      #raw 0x2A = Slide Up
      #raw 0x2B = Slide Left
      #raw 0x2C = Slide Right
      #raw 0x2D = Slide Down
      #raw 0x2E = Slide Up
      #raw 0x2F = Slide Left
      #raw 0x30 = Slide Right
      #raw 0x31 = Slide Down
      #raw 0x32 = Slide Up
      #raw 0x33 = Slide Left
      #raw 0x34 = Slide Right
      #raw 0x35 = Slide Running Down
      #raw 0x36 = Slide Running Up
      #raw 0x37 = Slide Running Left
      #raw 0x38 = Slide Running Right
      #raw 0x3A = Jump Facing Left (Down)
      #raw 0x3B = Jump Facing Down (Up)
      #raw 0x3C = Jump Facing Up (Left)
      #raw 0x3D = Jump Facing Left (Right)
      #raw 0x3E = Face Player
      #raw 0x3F = Face Against Player
      #raw 0x40 = Lock Sprite Facing
      #raw 0x41 = Release Sprite Facing
      #raw 0x42 = Jump Down
      #raw 0x43 = Jump Up
      #raw 0x44 = Jump Left
      #raw 0x45 = Jump Right
      #raw 0x46 = Jump in Place (Facing Down)
      #raw 0x47 = Jump in Place (Facing Up)
      #raw 0x48 = Jump in Place (Facing Left)
      #raw 0x49 = Jump in Place (Facing Right)
      #raw 0x4A = Jump in Place (Facing Down/Up)
      #raw 0x4B = Jump in Place (Facing Up/Down)
      #raw 0x4C = Jump in Place (Facing Left/Right)
      #raw 0x4D = Jump in Place (Facing Right/Left)
      #raw 0x4E = Face Left
      #raw 0x54 = Hide Sprite
      #raw 0x55 = Show Sprite
      #raw 0x56 = Exclamation Mark (!)
      #raw 0x57 = Question Mark (?)
      #raw 0x58 = Love (<3)
      #raw 0x62 = Walk Down
      #raw 0x63 = Walk Down
      #raw 0x64 = Face Down (Delayed)
      #raw 0x65 = Face Up (Delayed)
      #raw 0x66 = Face Left (Delayed)
      #raw 0x67 = Face Right (Delayed)
      #raw 0x70 = Jump in Place (Facing Down)
      #raw 0x71 = Jump in Place (Facing Up)
      #raw 0x72 = Jump in Place (Facing Left)
      #raw 0x73 = Jump in Place (Facing Right)
      #raw 0x74 = Jump Down Running
      #raw 0x75 = Jump Up Running
      #raw 0x76 = Jump Left Running
      #raw 0x77 = Jump Right Running
      #raw 0x78 = Jump2 Down Running
      #raw 0x79 = Jump2 Up Running
      #raw 0x7A = Jump2 Left Running
      #raw 0x7B = Jump2 Right Running
      #raw 0x7C = Walk on the Spot (Down)
      #raw 0x7D = Walk on the Spot (Up)
      #raw 0x7E = Walk on the Spot (Left)
      #raw 0x7F = Walk on the Spot (Right)
      #raw 0x80 = Slide Down Running
      #raw 0x81 = Slide Up Running
      #raw 0x82 = Slide Left Running
      #raw 0x83 = Slide Right Running
      #raw 0x84 = Slide Down
      #raw 0x85 = Slide Up
      #raw 0x86 = Slide Left
      #raw 0x87 = Slide Right
      #raw 0x88 = Slide Down on Left Foot
      #raw 0x89 = Slide Up on Left Foot
      #raw 0x8A = Slide Left on Left Foot
      #raw 0x8B = Slide Right on Left Foot
      #raw 0x8C = Slide Left diagonally (Facing Up)
      #raw 0x8D = Slide Right diagonally (Facing Up)
      #raw 0x8E = Slide Left diagonally (Facing Down)
      #raw 0x8F = Slide Right diagonally (Facing Down)
      #raw 0x90 = Slide2 Left diagonally (Facing Up)
      #raw 0x91 = Slide2 Right diagonally (Facing Up)
      #raw 0x92 = Slide2 Left diagonally (Facing Down)
      #raw 0x93 = Slide2 Right diagonally (Facing Down)
      #raw 0x96 = Walk Left
      #raw 0x97 = Walk Right
      #raw 0x98 = Levitate
      #raw 0x99 = Stop Levitating
      #raw 0x9C = Fly Up Vertically
      #raw 0x9D = Land
      #raw 0xFE = End of Movements


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