Fischen (Stardew Valley) | Grandrorials

  • i_RMMV


    Hallo!


    Ich bin es (mal) wieder ^^.

    Heute soll es um ein Fischen-System gehen, dass bei dem bekannten Spiel "Stardew Valley" verwendet wurde. Hierzu habe ich ein Video hochgeladen:



    Also, dann würde ich sagen fangen wir doch mal an!


    1) Grafiken


    Ja, dieses mal will ich wirklich mit den Grafiken anfangen, da es nur ein paar sind und man die schnell erwähnt hat.


    1) Fish (48x45)

    2) Fishing_HUD (141x555)

    3) Green_Bar (55x83)

    4) Green_Bar2 (28x531)


    Lasst euch noch von den englischen Namen beirren. Ich weiß auch nicht wieso ich das tue.


    2) Sequenz bis zum Fischen


    Bevor wir mit dem eigentlichen System anfangen können, muss eine gewisse Überleitung dazu stattfinden. Diese ist zwar in diesem Beispiel ohne Animation, funktioniert aber nach dem einfachen "Pokémon-Prinzip".


    Eventseite 1 Event 1


    Setzt die Variablen 1 und 2 auf den Wert von Spieler X und Spieler Y auf der Karte. Dies wird gleich benutzt, um abzufragen ob der Spieler in der Nähe von Wasser steht.


    Eventseite 1 Event 2


    Es wird abgefragt, ob der Spieler auf einem Feld neben dem Wasser steht und auch in die jeweilige Richtung guckt. Dies wird mit den Koordinaten aus dem ersten Event gemacht. Allgemein würde ich euch eher empfehlen das mit Regio ID's abzufragen.

    Darüber müsst ihr euch dann selbst einmal schlau machen, ich habe es in dem Tutorial so gemacht, weil es eigentlich nicht so wirklich darum geht^^.

    Dazu wird der Spieler noch an der Stelle festgehalten, damit er sich nicht bewegen kann während er angelt.

    Und es wird der Schalter "Fischen" angeschalten, der uns direkt zu unserem nächsten Event begleiten wird, unzwar der Sequenz, bei der nach einer zufälligen Zeit das Ausrufezeichen aufploppt.


    Eventseite 1 Event 3


    Habt ihr die Reise vom letzten Event bis zu diesem gut überstanden? Ja? Gut! Denn jetzt passiert die erste Action!

    In diesem Fall wird eine Variable mit dem Namen "Zufall1" zufällig auf den Wert 60 ~ 360 gesetzt. In der Schleife darauf wird genau dieser Wert in Frames gewartet , bis dann das Ausrufezeichen aufploppt.

    Darauf folgt wieder eine Schleife, bei der der Spieler 60 frames Zeit hat Enter zu drücken, bevor der Fisch entwischt.

    Dann werden ein paar Werte zurückgesetzt, damit man unendlich oft angeln kann, ohne das sich etwas ungewünscht ändert. Könnt ihr spüren? Wir sind angekommen! Das EIGENTLICHE TUTORIAL beginnt!


    3) Das EIGENTLICHE TUTORIAL (Fischen)


    Eventseite 2 Event 3


    Hier fängt es jetzt vielleicht an etwas kompliziert zu werden.


    1) Die Variable "Balken Speed Level" repräsentiert den Fortschritt der Geschwindigkeit des Balkens, welchen der Spieler steuert, in Hundertsteln. Wenn diese Variable auf 100 ist, wird die eigentliche Geschwindigkeitsvariable um eins erhöht und diese resettet.

    Wenn diese Variable auf -100 ist, wird die eigentliche Geschwindigkeitsvariable um eins verringert und diese resettet.

    2) Die Variable "Balken Speed" repräsentiert die Geschwindigkeit des Balkens in ganzen Stellen. Diese ist nicht gecappt.


    Später werden die beiden Variablen zusammengerechnet ("Balken Speed Level" dann noch durch 100) und der Variable Y für den Balken angerechnet.


    4) "Physiks" und Anzeige des Balkens


    Eventseite 1 Event 4


    Scripten, yeeeey! Das gibt jetzt erstmal einen richtig großen Code:


    Code
    1. SpeedAnzeige = 0; // Setzt die Variable SpeedAnzeige auf den Wert 0.
    2. Geschwindigkeit = $gameVariables.value(6); // Fügt der Variable Geschwindigkeit den Wert von der Spiel-Variable mit der ID 6 hinzu.
    3. Hundertstel = $gameVariables.value(7); // Setzt die Variable Hundertstel auf den Wert von der Spiel-Variable mit der ID 7.
    4. Platzhalter = Hundertstel / 100; // Setzt die Variable Platzhalter auf den Wert von der Variable Hundertstel durch 100.
    5. Speed = Geschwindigkeit + Platzhalter; // Setzt die Variable Speed auf die addierte Summe der Variablen Geschwindigkeit und Platzhalter.
    6. SpeedAnzeige = $gameVariables.value(5) + Platzhalter; // Setzt die Variable SpeedAnzeige auf den Wert von der Spiel-Variable mit der ID 5 plus dem Wert von der Variable Platzhalter.
    7. Speed2 = Math.abs(SpeedAnzeige); // Setzt die Variable Speed2 auf den absoluten Wert (keine Vorzeichen) von der Variable SpeedAnzeige.
    8. Speed1 = Math.abs(Speed); // Setzt die Variable Speed1 auf den absoluten Wert (keine Vorzeichen) von der Variable Speed.

    Und noch einen:


    Code
    1. var Umkehrung = $gameVariables.value(6) + Platzhalter; // Setzt die Variable Umkehrung auf den Wert von der Spiel-Variable mit der ID 6 plus dem Wert von der Variable Platzhalter.
    2. Umkehrung *= (-1); // Dreht das Vorzeichen des Wertes um (Kräfteumkehrung, damit die Geschwindigkeit, die auf den Balken wirkt nicht einfach verpufft wenn es die Grenze berührt)
    3. Umkehrung /= 10; // Die Variable wird durch 10 geteilt, damit es weniger Kraft wird.
    4. $gameVariables.setValue(6, Umkehrung); // Die Spiel-Variable mit der ID 6 wird wieder auf den Wert von der Variable Umkehrung gesetzt, damit die Hundertstel-Werte mit eingerechnet werden bei der Rundung.
    5. console.log(Umkehrung); // Zeigt den Wert der Variable Umkehrung in der Konsole (nur für Testzwecke)

    Die Abfragen, die abfragen ob der Balken einen gewissen Wert überschritten hat, oder nicht, sind die obere und untere Grenze, die der Balken nicht überschreiten darf.


    Eventseite 1 Event 5


    Code
    1. $gameScreen.showPicture(3, 'Green_Bar', 0, $gameVariables.value(4), Speed2, 100, 100, 255, 0); // Zeigt das Bild des grünen Balkens auf der ID 3 auf dem X Wert der Spiel-Variable 4 und auf dem Y Wert der Variable Speed2 auf einer 100 % X und Y
    2. Skalierung.

    Außerdem wird auch während dieser Sequenz der Spieler zum Warten gezwungen.


    5) Der Gegenspieler aka. Fisch


    Eventseite 1 Event 6


    Dies ist die "KI" des Fisches. Die Bewegmuster sind je nachdem welchen Fisch man am Haken hat schwieriger. Der Rest sollte eigentlich selbsterklärend sein.


    6) Fang-Balken


    Eventseite 1 Event 7


    Als erstes werden die Variablen Y+ von dem Fisch und für den Balken des Spielers erstellt. Diese werden auf den Y Wert des Balkens bzw. des Fisches gesetzt und dann um die Hälfte der Y Pixel der jeweiligen Grafik addiert.

    Danach wird abgefragt, ob die Fischgrafik sich in der Grafik des Balkens befindet, oder eben... die Hälfte davon :). Wenn das der Fall ist, wird die Variable FangBalken um 0.5 verringert, ansonsten um 0.35 erhöht.

    Wenn die Variable FangBalken >= 0 ist, ist der Balken leer, ergo ist der Fisch entwischt. Wenn er jedoch <= -100 ist, hat man den Fisch gefangen, da die Grafik des Balkens auf 100% angezeigt wird und somit komplett ausgefüllt ist.


    Code
    1. if (FangBalken > -100) { // Wenn die Variable FangBalken größer als -100 ist, wird sie mit 0.5 subtrahiert.
    2. FangBalken -= 0.5;
    3. }

    Code
    1. if (FangBalken < 0) { // Wenn die Variable FangBalken kleiner als 0 ist, wird sie mit 0.5 addiert.
    2. FangBalken += 0.35;
    3. }

    Eventseite 2 Event 7


    Der Fisch ist entweder entwischt, oder man hat ihn gefangen. Wenn man ihn gefangen hat, kommt ein Sound. Hier müsste man dann den Fisch hinzufügen, wenn man das System tatsächlich in ein Spiel implementieren wollte.


    Eventseite 1 Event 8


    Code
    1. $gameScreen.showPicture(1, 'Green_Bar2', 0, 158, 576, 100, FangBalken, 255, 0); // Zeigt das Bild des 2ten grünen Balkens auf der ID 1 auf dem X Wert 158 und auf dem Y Wert 576 auf einer 100 % X und dem Wert der Variable FangBalken Y an.

    7) Das Ende


    Und wieder neigt sich ein Tutorial dem Ende zu. Auch hier würde ich mich wieder über Feedback freuen. Ideen für ein Tutorial? Anreize für was auch immer? Immer her damit! Schreibfehler dürfen natürlich auch genannt werden ^^.



    Downloadlink: http://www.mediafire.com/file/…cttg/Fischen+Tutorial.zip

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Grandro ()

  • Ich bin jedes Mal auf's Neue fasziniert, wie du deine Tutorials und die damit verbundenen Ergebnisse präsentierst und uns zur Verfügung stellst!

    Dieses Fischer-System ist einfach richtig genial gemacht und erinnert mich an so manche Stunden in Stardew Valley xD

    Vielen Dank für das tolle Tutorial und der Datei zum Download dazu! :)

    :s_info: Ehemalig in dieser Community als Toothless bekannt, habe ich nun meinen Künstlernamen angenommen: Cryptogene

    So manch einer kennt ja ohnehin schon meine 3D Szenen.


    ninja_pointright Ihr wollt euch für das Forum bedanken und dieses zu 100% unterstützen? Ihr könnt uns finanziell durch eine Schenkung unterstützen. Danke für euren Support!