Ergebnis 1 bis 20 von 31

Thema: [RM2K3] Brauche Hilfe: Sprung-Script a la Golden Sun

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von Exas Beitrag anzeigen
    Das Prinzip hab ich soweit verstanden - nur weiß ich leider nicht wie ich bestimmen kann ob zwei Felder ein weiter "bespringbares" Feld ist. Kurzer Tipp?
    In etwa so (Pseudocode):
    Speichere die Position des Actors in Variablen.
    Speichere die TerrainID anhand der Position des Helden in eine weitere Variable.

    Wenn die TerrainID der "Kante Oben" entspricht & der Actor nach oben schaut
    Rechne Actor Y Pos - 2 (+ für unten)
    Überprüfe nun, ob die Terrain ID einer Kante entspricht, auf die man springen kann, indem die Terrain ID anhand der Position des Actors erneut gesetzt wird.
    Wird die Pfeiltaste oben eine Zeit lang gedrückt, so lasse den Helden zwei Felder nach oben springen, sofern die vorherige Bedingung erfüllt.

    Analog für Unten.

    Wenn die TerrainID der "Kante Rechts" entspricht & der Actor nach rechts schaut
    Rechne Actor X Pos + 2 (- für links)
    Überprüfe nun, ob die Terrain ID einer Kante entspricht, auf die man springen kann, indem die Terrain ID anhand der Position des Actors erneut gesetzt wird.
    Wird die Pfeiltaste oben eine Zeit lang gedrückt, so lasse den Helden zwei Felder nach links springen, sofern die vorherige Bedingung erfüllt.

    Analog für Links

    Bei einer Kante mit zwei oder bei einer Platform mit vier möglichen Richtungen setzt du innerhalb der Bedingung für die Terrain ID noch die entprechenden einzelnen Bedingungen für die FaceDir des Helden.

    Zitat Zitat von Exas Beitrag anzeigen
    PS: Ich hatte ebenfalls angedacht, den Helden auf kleine Erhöhungen springen zu lassen bzw. von dort runter. Muss mir noch überlegen wie ich das umsetze. Wahrscheinlich auch über Terrain ID's, dann nur mit einem anderen Move-Set?
    Im Prinzip ähnlich. Nur muss der Maker wissen, ob du vor einer Wand stehst. Dann musst du halt eine Abfrage machen, bei der die Terrain ID des Feldes vor dem Helden bestimmt wird.
    Also noch eine Terrain ID für "Wand" bestimmen. Dann müsstest du nur abfragen, wenn du vor einer Wand stehst, ob ein Feld darüber direkt ein begehbares Feld ist, das musst du leider auch per Terrain ID bestimmen.
    Also nicht passierbare Tiles sollte man dann noch per Terrain ID extra bestimmen


    Ich kann mich ja selbst mal an das Problem heransetzen, dürfte nicht so extrem lange dauern.

    Geändert von Drakee (31.08.2015 um 00:45 Uhr)

  2. #2
    Zitat Zitat von Drakee Beitrag anzeigen
    In etwa so (Pseudocode):
    Speichere die Position des Actors in Variablen.
    Speichere die TerrainID anhand der Position des Helden in eine weitere Variable.

    Wenn die TerrainID der "Kante Oben" entspricht & der Actor nach oben schaut
    Rechne Actor Y Pos - 2 (+ für unten)
    Überprüfe nun, ob die Terrain ID einer Kante entspricht, auf die man springen kann, indem die Terrain ID anhand der Position des Actors erneut gesetzt wird.
    Wird die Pfeiltaste oben eine Zeit lang gedrückt, so lasse den Helden zwei Felder nach oben springen, sofern die vorherige Bedingung erfüllt.

    Analog für Unten.

    Wenn die TerrainID der "Kante Rechts" entspricht & der Actor nach rechts schaut
    Rechne Actor X Pos + 2 (- für links)
    Überprüfe nun, ob die Terrain ID einer Kante entspricht, auf die man springen kann, indem die Terrain ID anhand der Position des Actors erneut gesetzt wird.
    Wird die Pfeiltaste oben eine Zeit lang gedrückt, so lasse den Helden zwei Felder nach links springen, sofern die vorherige Bedingung erfüllt.

    Analog für Links

    Bei einer Kante mit zwei oder bei einer Platform mit vier möglichen Richtungen setzt du innerhalb der Bedingung für die Terrain ID noch die entprechenden einzelnen Bedingungen für die FaceDir des Helden.



    Im Prinzip ähnlich. Nur muss der Maker wissen, ob du vor einer Wand stehst. Dann musst du halt eine Abfrage machen, bei der die Terrain ID des Feldes vor dem Helden bestimmt wird.
    Also noch eine Terrain ID für "Wand" bestimmen. Dann müsstest du nur abfragen, wenn du vor einer Wand stehst, ob ein Feld darüber direkt ein begehbares Feld ist, das musst du leider auch per Terrain ID bestimmen.
    Also nicht passierbare Tiles sollte man dann noch per Terrain ID extra bestimmen


    Ich kann mich ja selbst mal an das Problem heransetzen, dürfte nicht so extrem lange dauern.
    Ahhhh Erleuchtung at its best! Danke! Ich probiers aus, sobald ich wieder genügend Schlaf intus hab und melde mich dann wieder mit Ergebnissen/Problemen ^^
    Wäre cool wenn du Zeit findest um es zu testen, bin mega gespannt

  3. #3
    Also ich bin grad fleißig am Skripten ^^ Funktioniert sogar, wenn man auf der Kante die Taste gedrückt hält

  4. #4
    Zitat Zitat von Drakee Beitrag anzeigen
    Also ich bin grad fleißig am Skripten ^^ Funktioniert sogar, wenn man auf der Kante die Taste gedrückt hält
    Bei mir funktioniert's auch einwandfrei
    War erst 'n bisschen viel Arbeit die einzelnen Terrain-ID's abzufragen, aber jetzt klappt's tadellos.
    Dazu kam ja noch die Wie-lange-halte-ich-welche-Richtungstaste-Abfrage von MagicMaker, die sich ebenfalls bestens integrieren lässt.

    Ich hab vorher noch ein Renn-Script gebaut, welches 1. die Position des Actors und 2. die Terrain ID abfragt
    (1. um zu checken ob der Held sich nicht mehr bewegen kann weil Wand, und dadurch in seine Standard-Pose wechselt und 2. für Laufgeräusche bei Gras, Schnee usw.)
    und sowohl das Renn- als auch das Sprung-Skript kommen sich bei den Abfragen nicht in die Quere.

    Bin gerade dabei das ganze jetzt für einen Sprung auf eine höher gelegene Ebene zu scripten, hoffe das klappt auch so gut

    Nochmal für alle: die Vorschläge von MagicMaker und Drakee sind genial *Credit gib*
    Ist anfangs ein bisschen Arbeit aber es erspart den Maps ne Menge unnötige Events.

  5. #5
    Naja, bei mir habe ich gerade einen Bug produziert gekriegt. Aber ich hab das Skript für das überspringen von Lücken und das Skript für das Hochspringen/Runterspringen an Kanten gesondert. Die kommen sich in die Quere, denk ich mal

    Bei dem Hochspringen an eine Kante ist es wie gesagt ähnlich, nur dass im Vornhinein die X/Y Coordinate des Felds um eins in die Blickrichtung des Helden abgefragt wird. Das muss man nicht in ein extra Skript tun, aber in eine extra Variable. Dann kann man bei einer Wand eine weitere Abfrage starten, ob ein weiteres Feld weiter ein begehbares Tile liegt

  6. #6
    Ich bin so glücklich dass es funktioniert Das hat mir echt Kopfschmerzen, ja, fast schlaflose Nächte bereitet
    Gut, dann achte ich darauf die beiden Dinge voneinander zu trennen.
    Muss ins Bett, aber ich melde mich sobald wie möglich mit weiteren Ergebnissen

  7. #7
    Also, so schwer war das doch jetzt nicht, oder? xD

    Ist auf jeden Fall besser, als jedes Mal Map Events zu benutzen. Auf diese Weise ist es halt einfach alles automatisiert und wenn man das wirklich so wie in Golden Sun haben will, dann will man ja überall, wo es möglich ist, Lücken überwinden und auf höhergelegene Kanten springen können. So braucht man nur zu mappen und das entsprechende Common Event regelt alles von alleine Man muss halt beim Mappen nur ein bisschen drauf achten, dass man das nicht so designt, dass man auf einmal dann doch irgendwo hinspringt wo es von der aktuellen Position aus nicht geht.

    Und von welchen Zusätzen da MagicMaker geredet hat, versteh ich auch nicht

  8. #8
    Im Endeffekt war's jetzt nicht so schwer, das stimmt Ich hatte zwar eine ungefähre Vorstellung davon, wie es umsetzbar wäre, aber mir fehlte der nötige Anstoß in den Details, da ich jetzt wirklich nicht so krass technisch begabt bin.^^
    Die Automatisierung macht das System für mich so attraktiv. Ich könnte mir vorstellen das es dem Spieler auch etwas mehr Freiheit bietet und in ihm vielleicht sogar eine Entdecker-Ader geweckt wird. Zu oft hatte ich schon Spiele gespielt (auch "professionelle") bei denen ich einfach nur durch gehechtet bin, weil die Maps, auch wenn sie vielleicht optisch ganz nett gestaltet waren, keine Tiefe geboten haben. Dazu dann noch die technische Einschränkung dass man sich eh kaum bewegen kann.

    Zitat Zitat von Drakee Beitrag anzeigen
    Man muss halt beim Mappen nur ein bisschen drauf achten, dass man das nicht so designt, dass man auf einmal dann doch irgendwo hinspringt wo es von der aktuellen Position aus nicht geht.
    Das sollte glaube ich ganz gut funktionieren, sicher gehen die ersten 5 Maps daneben und man irgendwo solche Stellen, aber das sollte mit etwas Ordnung in den Tilesets gut gehen

    Wo wir vorher von Bugs gesprochen haben:
    Ich hab jetzt komischerweise Weise den Fehler, wenn der Actor sich noch im Move-Befehl befindet
    (Slip Through ON, Start Jump, Move Up, Move Up, End Jump, End Slip Through usw.)
    und ich währenddessen schon eine andere Richtungstaste drücke, dann geht zwar alles ganz gut aber der Slip Through ist dann für einen kurzen Moment aktiv und ich gerate in Tiles rein, aus denen kein Entkommen mehr ist. Hast du eine Idee woran das liegen könnte?

  9. #9
    Die Bewegung lässt den Rest vom Event nicht warten und wenn es vorbei ist, kann man wieder Eingaben tätigen.

    Könnte man auf einige Arten lösen. Die Gummihammermethode wäre z.B., das Event am Schluss so lange in einer
    kleinen Warteschleife einzufangen, bis am Ende der Kette an Bewegungsanweisungen ein Switch umgelegt wird,
    was man zum Glück direkt mit in Move einbauen kann.

    Code:
    <>Loop Start
     <>If s[0001] == ON
      <>Set Switch: [0001] = OFF
      <>Break Loop
      <>
     : EndIf
     <>Wait: 0.0s
     <>
    : Loop End
    <>

  10. #10
    Danke MagicMaker! Ich probiers gleich aus
    EDIT: Frage vergessen: Was bewirkt dieses kleine lustige Wait?

    Geändert von Exas (31.08.2015 um 23:26 Uhr)

  11. #11
    Das ist, damit das Spiel diese Schleife nicht in einem ungeheuerlich kurzen Moment so oft wiederholt,
    bis die Engine schlapp macht und laggt. Mit 0 wird auf den nächsten Frame gewartet (x60=1s).

  12. #12
    Eine andere Frage:
    Ist der Slip Through eigentlich nötig? Bei nem Jump kann man einige zuvor unpassierbare Tiles bereits passieren. Würde das bei dir schon reichen, oder gibt es da Konflikte? Ich könnte mir z.B. vorstellen, dass der Jump nur bei Lower Layer Tiles funktioniert. Kenne mich mit Move Events und Maps (lustig, oder?) nicht so gut aus.

    Geändert von Nagasaki (01.09.2015 um 03:11 Uhr)

  13. #13
    Zitat Zitat von MagicMaker Beitrag anzeigen
    Das ist, damit das Spiel diese Schleife nicht in einem ungeheuerlich kurzen Moment so oft wiederholt,
    bis die Engine schlapp macht und laggt. Mit 0 wird auf den nächsten Frame gewartet (x60=1s).
    Aaahhh verstehe! Dass es manchmal auf solche vermeintlichen Kleinigkeiten ankommt ^^

    Zitat Zitat von Nagasaki Beitrag anzeigen
    Eine andere Frage:
    Ist der Slip Through eigentlich nötig? Bei nem Jump kann man einige zuvor unpassierbare Tiles bereits passieren. Würde das bei dir schon reichen, oder gibt es da Konflikte? Ich könnte mir z.B. vorstellen, dass der Jump nur bei Lower Layer Tiles funktioniert. Kenne mich mit Move Events und Maps (lustig, oder?) nicht so gut aus.
    Hab's gerade mal kurz an nem einfachen Map-Event getestet und der Slip Through war nicht nötig, hab auch direkt getestet ob es nur bei Lower Tiles möglich ist.
    Dabei ist auffällig, dass es keine Rolle spielte welches Tile da übersprungen werden sollte, sowohl Lower als Upper Layer sind kein Problem, sowie Map-Events
    die die Priority "Same as Players" haben.
    Großes Aber: wie es aussieht, muss das Tile das sich hinter dem zu überspringenden Tile/Event befindet ein Lower Layer bzw. kein Event, das die gleiche Priority wie der Actor hat, sein. Ansonsten funktionierte der Sprung nicht.
    Kurzes Fazit: Nice to know und hilft bestimmt auch bei der Lösung meines aktuellen Problems

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •