Wie mächtig ist Damage Formula eigentlich?

  • Willkommen zu diesem kleinen aber feinen Tutorial.

    Ich werde heute mit euch einmal ein paar Grundlagen zur Schadensberechnung machen und ebenfalls einen etwas fortgeschrittenen Einstieg, was da eigentlich alles möglich ist. Seit gespannt, was man eigentlich mit der Grundfunktion im Maker anrichten kann. Dieser Kurs kann im Grunde ab dem RPG Maker VX Ace verwendet werden, jedoch konzentriere ich mich hier jetzt auf den RPG Maker MZ, weswegen einige Befehle im VX Ace bzw. im MV anders heißen könnten, oder entweder nicht existieren oder über Umwege erreichbar sind. Falls da Fragen sind, könnt Ihr mich gern hier im Tutorial oder per PN fragen und ich helfe euch gern weiter!

    Einleitung

    Wir kennen es alle; Wir haben uns einen Skill überlegt, der extrem mächtig sein soll, aber wir wissen einfach nicht so recht wie wir das umsetzten können und wie sehr uns hier eventuell "Out of the Box" bereits zur Verfügung steht. Denn sind wir uns einmal ehrlich, wer kann den wirklich dieser Box zutrauen, so mächtig zu sein.

    Grundlagen

    Was sehen wir am Screenshot?

    pasted-from-clipboard.png
    Wir haben hier beim Typ, den HP-Schaden eingestellt, also fügen wir auch den HP Schaden zu. Als Element haben wir einen Normalen Angriff, also im Grunde ist es ohne ein Element.

    Die Formel zur Berechnung des Schadens ist a.atk * 4 - b.def * 2. Darauf werde ich in Kürze weiter drauf eingehen.

    Die Abweichung beträgt 20%, was bedeutet, wenn unser errechneter Treffer 100 ergibt, kann dieser Wert +/- 20 Schaden machen. Heißt mindestens 80 Schaden und Maximal 120.

    Den Kritischen Treffer haben wir mit Ja bestätigt, was dazu führt, dass es möglich ist, mit dem Angriff einen Kritschen Treffer zu erzielen und dadurch mehr Schaden austeilen.

    Wie wird die Formel aufgebaut?

    Die Formel beinhaltet auf jeden Fall einmal 2 wichtige Komponenten, auf die wir immer Acht geben müssen! a und b. Doch was bedeuten diese beiden Buchstaben?

    Kurz erklärt: a ist der Anwender und b das BAngriffsziel.

    Wenn wir uns die Schadensformel nochmal ansehen, heißt das also:

    a.atk = Angriffskraft des Anwenders

    b.def = Verteidigung des Angriffsziel.

    Also heißt die Formel jetzt dieses: Angriffskraft des Anwenders * 4 und davon ziehen wir dann die Verteidigung des Angriffsziel * 2.

    Wenn wir jetzt sagen, unsere Angriffskraft ist 25 und die Verteidigung des Ziels wäre ebenfalls 25, somit würde die Rechnung so aussehen:
    25 * 4 - 25 * 2 = 50 Schaden.

    Was kann alles bei a und b angegeben werden?

    Einiges. Da geht echt viel. Ich habe hier mal eine kleine Auflistung, was alles geht, ohne dass ich jetzt tiefer in die Materie rein gehe:

    Bezeichnung für die VerwendungBedeutung der Bezeichnung
    mhpDies bedeutet, dass hier nun die maximalen HP verwendet werden.
    hpDies bedeutet, dass hier nun die aktuellen HP verwendet werden.
    mmpDies bedeutet, dass hier nun die maximalen MP verwendet werden.
    mpDies bedeutet, dass hier nun die aktuellen MP verwendet werden.
    maxtpDies bedeutet, dass hier nun die maximalen TP verwendet werden. Dies ist standardmäßig bei 100, sofern es nicht durch ein Plugin erweitert wird.
    tpDies bedeutet, dass hier nun die aktuellen TP verwendet werden.
    atkDies bedeutet, dass hier nun der Angriffswert verwendet wird.
    defDies bedeutet, dass hier nun der Verteidigungswert verwendet wird.
    matDies bedeutet, dass hier nun der Magische Angriffswert verwendet wird.
    mdfDies bedeutet, dass hier nun die Magische Verteidigung verwendet wird.
    agiDies bedeutet, dass hier nun die Agilität verwendet wird.
    lukDies bedeutet, dass hier nun das Glück verwendet wird.


    Es gibt auch noch spezielle Parameter, welche jedoch in % Angezeigt werden im Maker, jedoch im Maker anders gespeichert sind. Grundsätzlich sind diese Werte immer als Floatingpoint Zahlen gespeichert. Das heißt, diese Zahlen sind Dezimalzahlen im Gegensatz zu den voran gegangenen Werten, welche Integer sind, was für Ganzzahlen steht.

    Wenn der Maker sagt, dass etwas 90% ist, dann liegt der Wert im Hintergrund bei 0.9. Ist etwas bei zum Beispiel 110%, so wird dies im Maker mit 1.1 abgebildet.

    Folgende Werte sind rein als Prozentzahlen vorhanden und können ebenfalls in der Schadensformel verwendet werden:

    Bezeichnung für die VerwendungBedeutung der Bezeichnung
    hitDies ist die Trefferrate
    evaDies ist die Ausweichrate
    criDies ist die Rate für Kritische Treffer
    cevDies ist die Rate fürs Kritische Ausweichen
    mevDies ist die magische Ausweichrate
    mrfDies ist die magische Reflektierungsrate
    cntDies ist die Rate, wie wahrscheinlich ein Konter passiert
    hrgDies ist die Rate, bei der jede Runde HP geheilt werden, bzw. abgezogen werden. Kann positiv so wie negativ sein.
    mrgDies ist die Rate, bei der jede Runde MP geheilt werden, bzw. abgezogen werden. Kann positiv so wie negativ sein.
    trgDies ist die Rate, bei der jede Runde TP generiert werden, bzw. verloren werden. Kann positiv so wie negativ sein.
    tgrDies ist die Rate, wie wahrscheinlich es ist, als Ziel gewählt zu werden.
    grdDies ist die Rate, zu wieviel Prozent der Schaden beim Verteidigen reduziert wird.
    recDies ist die Rate, wieviel Prozent Heilung man erhält. Zum Beispiel würde man durch einen Trank 100 HP bekommen, die rec ist bei 1.1, das Resultat wären dann 110 HP.
    phaDies ist die Rate, um wieviel Prozent die Heilung durch den Anwender anschlägt. Wenn man einen Trank nimmt, der 100HP heilt, die pha des Anwenders bei 1.1 ist, somit würde der Trank beim Ziel 110 HP heilen.
    mcrDies ist die Rate, die die MP Kosten beeinflusst. Je höher die Zahl umso teurer werden die Kosten, je niedriger, umso günstiger wird es.
    tcrDies ist die Rate, die die TP Kosten beeinflusst. Je höher die Zahl umso teurer werden die Kosten, je niedriger, umso günstiger wird es.
    pdrDies ist die Rate, wieviel Schaden man durch physische Angriffe erhält/austeilt. Je höher die Zahl, umso mehr Schaden wird erhalten und auch ausgeteilt.
    mdrDie ist die Rate, wieviel Schaden man durch magische Angriffe erhält/austeilt. Je höher die Zahl, umso mehr Schaden wird erhalten und auch ausgeteilt.
    fdrDies ist die Rate, die bestimmt um wieviel der Schaden durch Bodentiles ausgeteilt wird.
    exrDies ist die Rate, die bestimmt wieviel Erfahrungspunkte man erhält. Je höher die Zahl, umso mehr Erfahrungspunkte gibt es.


    Doch was fangen wir nun mit diesen Informationen an? Gute Frage, jetzt bauen wir uns eine erste komplexere Schadensformel.

    Fortgeschrittene Schadensformeln

    Legen wir nun einmal fest, was wir genau machen wollen.

    Wir wollen die Attacke Psychoschlag aus Pokemon nachbauen. Es ist ein Angriff, der die spezielle Angriffskraft nimmt und anstelle der speziellen Verteidigung wird die physische Verteidigung verwendet. Der spezielle Angriff entspricht hier unserem magischen Angriff und die spezielle Verteidigung, der magischen Verteidigung. Somit würde die Formel dann wie folgt aussehen:

    a.mat - b.def

    Ich weiß, es heißt ja, fortgeschrittenere Schadensformeln, aber das war ja sehr einfach! Wo ist hier der Fortschritt? Dazu kommen wir jetzt; Wir erweitern diese Schadensformel so, dass der Angreifer seinen magischen Angriff zusätzlich durch seine magische Ausweichrate beeinflusst wird, während die Ausweichrate des Gegners die physische Verteidigung stärkt.

    Die Formel würde nun so aussehen:
    (a.mat + a.mat * a.mev) - (b.def + b.def * b.eva)

    Schon sieht das ganze etwas interessanter aus.


    Ein weiteres Beispiel, wie interessant man das ganze gestalten kann ist folgendes Beispiel:

    Ich möchte gerne einen Skill erstellen, welcher Grundsätzlich immer 100 Schaden macht, jedoch wird der Angriff immer schwächer, je weniger HP der Anwender hat. Dies würde dann so aussehen:

    100 * a.hp/a.mhp

    Wenn wir jetzt diese Schadensformel verwenden und der Anwender zum Beispiel 33 HP hat, seine Max HP sind bei 101, somit würde das Ergebnis in der Klammer folgendes sein: 32.6732 periodisch. Somit würde der Schaden auch in einer Dezimalzahl enden, was wir jedoch nicht wollen und vom Maker selbst auch abgefangen wird.

    Komplexe Schadensformeln

    Dieser Bereich sollte wirklich nur dann erforscht werden, wenn man sich sicher ist, dass man mit all den vorhandenen Möglichkeiten seine individuellen Schadensformeln zu berechnen. Ich empfehle hier schon gewisse Tauchgänge in die Plugins gemacht zu haben und da ein kleines Grundverständnis zu besitzen. Ansonsten wird es etwas schwieriger, diese Punkte zu verstehen.

    Was kann ich in eine Schadensformel alles packen?

    Im Grunde geht alles, was man will. Diese eine Zeile für die Schadensformel ist im Grunde ein Eingabefeld für JavaScript Code. Es gibt ein paar kleine Ausnahmen, die man zwar rein schreiben kann, aber kein Ergebnis liefern bzw. den Schaden auf 0 setzen. Ein gutes Beispiel hierfür wäre Console.log();. Aber was wäre denn jetzt eine Möglichkeit, die ich in meiner Schadensformel machen könnte, das ich sonst nicht könnte?

    Rückstoßschaden

    Den meisten bekannt aus Pokemon, kann man sich relativ Simpel eine Fähigkeit bauen, die Rückstoßschaden ermöglicht. Sagen wir mal, wir haben einen Angriff, dessen Formel ist a.atk * 4 - b.def * 2 und wir wollen hier nun einen Rückstoßschaden von 33% des verursachten Schadens. Die Varianz stellen wir hier nun auf 0%, denn wir werden diese ebenfalls in der Formel hinzufügen. Wir nehmen eine Varianz von 20%. Die Schadensformel werden wir als dmg bezeichnen, die Varianz wird mit vari betitelt und der Rückstoßschaden wird als rss bezeichnet werden. Nun würde die Formel wie folgt aussehen:

    vari = ((20 - Math.floor(Math.random()*41))/100.0); dmg = a.atk * 4 - b.def * 2; dmg = Math.floor(dmg * (1.0 + vari)); rss = Math.floor(dmg * 0.33); a.setHp(a.hp - rss); dmg;

    Was zum Henker ist den jetzt hier passiert? Wo sind meine einfachen Formeln hin gekommen? Warum um Himmels willen, sollte man sich so eine Arbeit antun? Ganz einfach, weil es einfach schön ist, wenn die Schadensformeln nicht einfach nur einfache A - B Formeln sind, sondern einiges an Komplexität aufweisen. Nun aber mal der Reihe nach. Ich werde euch nun aufschlüsseln, was dieses Monster bedeutet.

    Varianz

    vari = ((20 - Math.floor(Math.random()*41))/100.0);

    Hier wird die Varianz berechnet. Das machen wir deshalb, weil wir ja gerne vom Schaden den Rückstoß wissen wollen. Wenn wir die Varianz aus der Datenbank nehmen, so wird das hier leider nicht berücksichtigt, so aber schon. Wir wollten eine Varianz von 20% haben, was bedeutet +/- 20%. So nun aber zur Aufschlüsselung:

    vari = dient uns als Variable, in der wir den Wert zwischenspeichern wollen.

    Math.floor(arg) dient uns dazu, dass wir aus einer Dezimalzahl eine Ganzzahl machen. Es wird hierbei immer abgerundet auf die nächste ganze Zahl.

    Math.random()*41 dient uns dazu, dass wir eine Zufallszahl erhalten. Math.random() liefert eine Zahl zwischen 0 und <1. Wir multiplizieren das Ergebnis mit 41, damit wir eine Zahl zwischen 0 und 40 erhalten. Dies ist wichtig, da wir ja eine Varianz von +/- 20 haben wollen, weswegen dann das Ergebnis von 20 abgezogen wird. Hätten wir mit 40 Multipliziert, so wäre das Ergebnis eine Zahl zwischen 0 und 39.

    /100.0 dient uns dazu, um aus dem Ergebnis das wir in der Rechnung erhalten, eine Dezimalzahl zu machen, welche uns beim weiterrechnen hilft. die Zahl wird dann zwischen -0.2 und 0.2 liegen.

    Schadensformel

    dmg = a.atk * 4 - b.def * 2

    Hier haben wir unsere recht simple Schadensformel vom Anfang aus dem Bild. Ich glaube ich muss hier nichts erklären. Das dmg = ist wie vari, lediglich eine Variable zum zwischenspeichern des Wertes.

    Schadensberechnung inkl. Varianz

    dmg = Math.floor(dmg * (1.0 + vari))

    Hier wird nun die Varianz in den Schaden mit einbezogen.

    dmg = wird erneut verwendet, da wir dieser Variable nun einen neuen Wert zuweisen wollen.

    Math.floor(arg) kennen wir ja bereits.

    dmg * sieht wohl etwas verwirrend aus. Wir wollen ja der Variable dmg einen neuen Wert geben, jedoch verwenden wir es in der Zuweisung selbst? Richtig, dadurch können wir den bisherigen Wert verwenden und das Ergebnis neu zuweisen.

    (1.0 + vari) wird für die Multiplikation zur Variable dmg verwendet. Hier wird zu den 1.0 die Varianz hinzugerechnet. Mathematisch gesehen ergibt ja + und + ein +, hingegen + und - ja bei - bleiben. Unabhängig vom Ergebnis bei vari, wird zu der 1.0 entweder +0.2 gerechnet oder -0.2. Dadurch wird das Ergebnis (0.8 bis 1.2) mit dem errechneten Schaden multipliziert und ergibt dann das Ergebnis inkl. Varianz. Einfach, oder?

    Rückstoßschaden berechnen

    rss = Math.floor(dmg * 0.33)

    Mit diesem Teil wird nun der Rückstoßschaden bestimmt. Wir hatten ja gesagt, dass dieser 33% des erteilten Schadens entspricht, weswegen wir schon von Haus aus mit 0.33 gerechnet haben.

    rss = ist eine weitere Zuweisung zu einer Variable die wir in dieser Formel etwas später benötigen werden.

    Math.floor(arg) verfolgt uns auch schon in dieser Auflistung.

    dmg * 0.33 habe ich bereits in der Einleitung erklärt, aber es nimmt hier nun den Schaden aus dmg, welcher die Schadensformel + Varianz bereits beinhaltet und wird nun mit 0.33 multipliziert um zum Rückstoßschaden zu gelangen.

    Rückstoß abziehen und dem Gegner Schaden zufügen

    a.setHp(a.hp - rss); dmg;

    In diesem Abschnitt, wird dem Anwender nun endlich der Rückstoßschaden zugefügt und der Gegner erhält seinen Schaden.

    a.setHp(arg); ist unser großer Helfer hier. Dieser setzt die aktuellen HP auf den in den Klammern befindlichen Wert.

    a.hp - rss berechnet uns die neuen HP des Anwenders. Hier wird mit rss der Rückstoßschaden von den aktuellen HP abgezogen und als Ergebnis dann über den Befehl a.setHp(args) als neue HP verwendet.

    dmg; Dies ist das letzte Glied in unserer Schadensformel, weswegen auch dies angibt, wieviel Schaden verursacht wird. Hier ist es zum Beispiel der Wert, welcher in der Variable dmg steht.

    Zusammenfassung zum Rückstoßschaden

    Wenn wir nun das Ganze zusammenfassen, steckt dahinter eigentlich sehr viel was im Hintergrund berechnet wird, nur um am Schluss dann am Bildschirm zB. die Zahl 100 steht und dem Helden 33 HP abgezogen werden. Es veranschaulicht aber auch in meinen Augen perfekt, wie man etwas so Bekanntes einfach nachstellen kann, ohne zwingend ein Plugin dafür verwenden zu müssen. Man ist damit auch um einiges flexibler als eventuell mit einem Plugin.

    Praktisch bei dieser Übung war es auch, den Umgang mit Math.floor() und Math.random() zu lernen. Diese beiden Funktionen gehen beim RPG Maker gerne Hand in Hand, vor allem wenn man Berechnungen mit Zufallszahlen anstellen will. Wichtig ist hier auch immer, dass man bei Math.random() nicht vergisst, dass das Ergebnis eine Zahl zwischen 0 und <1 ist. Wenn man dann zum Beispiel eine Zahl zwischen 0 und 10 haben will, dass man dann mit 11 Multiplizieren muss. Will man ein Ergebnis zwischen 1 und 10, so wäre folgendes der richtige Weg:

    Math.floor(Math.random() * 10) + 1

    Dadurch erhält man ein Ergebnis zwischen 0 und 9 und mit dem + 1 wird es dann natürlich auf ein Ergebnis zwischen 1 und 10 erhöht.

    Abfrage in einer Schadensformel

    Dieser Punkt ist ein sehr praktischer, aber auch sehr fortgeschrittener Punkt. Man kann in eine Schadensformel auch eine Abfrage packen. Es gibt hierfür 2 Möglichkeiten, wie dies stattfinden kann. Doch dazu kommen wir gleich. Zuerst wollen wir einmal unseren Anwendungsfall definieren.

    Wir wollen einen Angriff starten, welcher 100 Schaden macht. Hat der Anwender den Status mit der ID 10, so macht der Angriff 200 Schaden. Hat der Anwender den Status 11, so macht dieser Angriff 50 Schaden.

    Wie sieht die Formel hierfür aus?

    Verschiedene Versionen

    Version 1

    if (a.isStateAffected(10)) { dmg = 200;} else if (a.isStateAffected(11)) { dmg = 50;} else { dmg = 100;}; dmg;

    Version 2

    a.isStateAffected(10) ? 200 : a.isStateAffected(11) ? 50 :100


    Ich persönlich empfehle grundsätzlich immer Version 1, da hier weniger Fehler gemacht werden können. Ich finde es aber dennoch wichtig, dass man Version 2 auch kennt. Beide bewirken das selbe, unterscheiden sich jedoch am Aufbau. Beleuchten wir diese genauer.

    Aufschlüssselung Version 1

    Wenn wir dies nun in einem Plugin schreiben würden, dann würde es so aussehen:

    if (a.isStateAffected(10)) {

      dmg = 200;

    } else if (a.isStateAffected(11)) {

      dmg = 50;

    } else {

      dmg = 100;

    };

    dmg;

    Sieht um einiges besser aus, als die vorherige Version, stimmts? Ist auch bei weitem Leserlicher als zuvor. Deswegen empfehle ich auch diese Schreibweise, weil man es auf diese Art und Weise zurecht schreiben kann und dann lediglich nur mehr die Zeilen dazwischen löschen muss.

    a.isStateAffected(StateId) gibt uns einen boolschen Wert zurück. Dieser Wert kann entweder Wahr oder Falsch sein. Anhand dessen wird auch weiter verfahren. Wir haben hier eine Verkettung von 2 If-Abfragen. Wenn eine der beiden zutrifft, wird der entsprechende Punkt ausgeführt, der dafür steht, falls beide nicht Zutreffen, wird das else ausgeführt. Schlussendlich wird der dmg ausgeteilt.

    Aufschlüsselung Version 2

    Es ist etwas redundant diesen Punkt erneut aufzuschlüsseln, deswegen kommt eine kurze Erklärung zum Syntax.

    Der Syntax baut sich im Grunde so auf:

    Prüfung ? Wenn Ja : Wenn Nein

    Es sieht simpel aus. Wichtig hier ist jedoch, dass man das ganze Richtig aufbaut. Im Vergleich zu Version 1, sieht diese Version sehr kompakt aus und eher wie die Arbeit eines Profis. Lasst euch davon nicht blenden, geht den sicheren Weg von Version 1, bis ihr nicht sattelfest seid und dann könnt ihr immer noch auf Version 2 umsteigen.

    Tipps von Profis für Anfänger und Fortgeschrittene

    Ich habe hier zwei kleine Tipps an euch, mit denen ihr euch viel Übersicht verschaffen könnt. Ich werde euch nicht großartig auf die Folter spannen.

    Unendlich Platz mit einer besseren Übersicht

    Dies ist ein Geheimtipp unter all den Entwicklern, die selbst viele komplexe Schadensformeln schreiben. Erstellt eine .js-Datei und nennt diese zum Beispiel "Schadensformeln.js" und fügt diese in euer Projekt ein und setzt das Plugin auf aktiv. Jedes Mal, wenn ihr eine neue Schadensformel anlegen wollt, erstellt ihr eine neue Methode mit dem Skillnamen in euerer "Schadensformeln.js" an. Die Methode sollte dann so aussehen:
    var schadensformelName = function(a, b) {

      var dmg;

      // code;

      return dmg;

    };

    In die Schadensformel beim Reiter Skill schreibt ihr dann einfach nur mehr folgendes:

    schadensformelName(a, b)

    Dadurch wird dann einfach die Methode aus eurem Plugin aufgerufen und es wird die Schadensformel berechnet und ausgegeben. Der Grund warum wir a und b übergeben wollen, ist jener, damit wir mit der Schadensformel auch wirklich rechnen können. Ihr könnt dann in eurer Schadensformel anstelle von a und b andere Bezeichnungen wählen. Dazu müssten nur die Übergabe-Parameter in der function() umbenannt werden. Ich würde sogar zu Beginn folgendes empfehlen:

    var schadensformelName = function(anwender, ziel) {

      var dmg;

      // code;

      return dmg;

    };

    In der Einabe zur Scahdensformel im Reiter Skill muss es trotzdem bei schadensformelName(a, b) bleiben.

    Euer großer Gewinn daraus?
    Die ganzen Schadensformeln sind an einem Ort. Ihr könnt schnell nachsehen, wie man zum Beispiel bei Skill 4 die Schadensformel aufgebaut hat, weil man was ähnliches bei Skill 16 nun ebenfalls will. So muss man nun nicht mehr zwischen den beiden Skills immer wieder hin und her hüpfen, sondern hat alles auf einem Blick. Beim VX Ace war dies zusätzlich noch ein wichtiger Punkt: Keine Zeichenbeschränkung. Ich weiß jetzt nicht genau wie lang das Feld beim MV und beim MZ ist, jedoch deutlich länger als beim VX Ace.

    Wo man das Wissen noch Anwenden kann

    Bei den Items. Im Grunde überall, wo man eine Schadensformel angeben kann. Es ist extrem praktisch. Man kann dadurch so viele komplexe Formeln aufbauen.

    Was man alles in der Schadensformel einbauen kann

    Man kann die Anzahl an Mitglieder mit einfügen, nahezu alles. Ich bin bis jetzt noch nie vor einem Punkt gestanden und wusste nicht, wie ich diesen einbinde. Wenn man sich in einem Editor (Notepad++ kann ich empfehlen) die rpg_objects.js öffnet und etwas durchsucht, kann man sehr viele Dinge abfragen. Wenn man Spieler/Gegnerspezifische Dinge abfragen will, sollte man sich etwas an die Klassen Game_Actor, Game_Actors, Game_Battler, Game_BattlerBase sowie Game_Enemy halten. Diese halten alle Werte, die Helden und Monster haben. Man kann auch andere Dinge einbinden, wie zum Beispiel, wenn man mehr Schaden machen will, je mehr Partymitglieder man hat. Dies ist alles Möglich, es sind kaum Grenzen gesetzt.

    Abschluss

    Abschließend möchte ich gerne Sagen, dass ich euch jederzeit zur Verfügung stehe und euch gerne helfe bei der Ausarbeitung von Schadensformeln. Es gibt so viele Möglichkeiten die einem dadurch eröffnet werden, die man dann auch Nutzen sollte.

    Falls es gewünscht wird, kann ich auch noch ein weiteres Tutorial schreiben, in dem ich in noch komplexere Schadensformeln eintauche und diese euch Erkläre. Falls Ihr hierzu Beispiele/Wünsche habt, die ich behandeln soll, immer her damit.


    Somit sage ich zum abschließenden Abschluss, vielen Dank für eure Zeit, dies hier zu lesen. Ich hoffe es ist verständlich genug. Ich werde es auch weiterhin immer wieder etwas ausarbeiten und auch Fehler verbessern. Alle Formeln die ich in diesem Tutorial angegeben habe, die funktionieren zu 100% in einem frischen RPG Maker MZ Projekt.


    Liebe Grüße,
    Flipely

  • Ich kann mich da nur anschließen - ein extrem wichtiges Tutorial mit so viel hilfreichen & neuen Informationen, nicht nur für RPG Maker Neulinge. Von jetzt an werde ich diese Seite wahrscheinlich ständig im Hintergrund offen haben, wann immer ich einen Skill erstelle.

  • Wow, ein mega großes Danke an Dich für dieses Tutorial! Wie Lyon schon meinte, eröffnen sich dadurch völlig neue Möglichkeiten!

    Meine Projekte:

    Hauptprojekt:Village Siege (Arbeitstitel)Tower-Defense Spiel mit kleinem TwistPrototyp: ~ 30%GDevelop
    Nebenprojekt:Misty Hollow: Makabere Abenteuer (Arbeitstitel)klassisches RPG mit einer Mischung aus Witz und GruselDemo: ~ 5%RPG Maker MZ
  • Ich merk schon, ich hab keine Chance mehr mich rauszureden, dass ich den Maker nur rudimentär beherrsche, bei all den tollen Tutorials hier.

    Große Props an dich!

    Da kommt man sich in der Tat manchmal vor wie der letzte Noob. :grinsenderork: Das hat aber den Vorteil, dass es noch viel zu lernen gibt und viel Raum für Neugierde auf all die verborgenen Mysterien unserer oft völlig unterschätzten Lieblings-Engine bleibt!

  • Hallo,

    das freut mich, dass es so gut ankommt. 😁


    Baxeda ja, es ist klein. Es wirkt so groß, weil halt viel Erklärungen dabei sind, aber man kann noch so viel mehr da rein bauen. Ich werde in den nächsten Tagen ein weiteres Tutorial zu Schadensformeln raus bringen, in dem weitere Dinge beleuchtet werden und man noch mehr Kontrolle über den Schaden hat.


    Lyon passt ja perfekt! Jetzt hast schon mal einige Grundlagen, die man verwenden kann!


    Coucassi Das freut mich zu hören, ich hoffe nur du verrenst dich da dann nicht auch so wie ich damals. x)

    Es ist halt sehr vielfältig nutzbar, was einem nie gesagt wird, warum auch immer.


    I.Z. ich kenne mich hier bei den Schadensformeln aich nur deswegen so gut aus, weil ich selbst mal ein Script (zu VXAce Zeiten) genutzt hatte um verrückte Schadensberechnungen durchzuführen. Mit der Zeit hatte ich gemerkt, dass das Script gar nicht mehr macht als die Schadensformel aus dem Script an die Stelle zu übergeben, an der man sonst die Schadensformel aus der Datenbank erhält. Von da an begann ich mich durch ausprobieren an alles ran zu tasten. Inzwischen gibt es vermutlich kaum eine Schadensformel, die ich nicht hin bekommen würde.


    ChimaereJade bitte gern, ist noch der Anfang, wie bereits gesagt, kommt da nochmal ein Tutorial dazu, welches noch mehr Themen abdeckt.


    Allgemein:

    Falls also jemand Wünsche zu bestimmten Effekten (Pokemon Attacken, Attacken aus anderen Spielen oder sonstiges) hat, immer her damit. Ich bereite in der Zwischenzeit die Fortsetzung vor und werde dort noch ein paar schöne Spielereien präsentieren.


    lg

  • Kojote ja, irgendwie quälen sich da gerade viele durch :D

    Kommt also recht passend irgendwie :)


    Lyon ja das ist durchaus Möglich, man benötigt aber ein paar kleine Tricks und Kniffe dafür. Soll es immer die selbe Anzahl sein? also zB. 3 Bomben legen und beim 4ten Mal sprengt es den Gegner mit massivem Schaden? Oder willst du vielleicht 2 Skills/ein Skill und ein Item machen, bei dem du das Item x-mal platzierst und dann beim Verwenden des Skills jagst du entsprechend den gelegten Bomben alle Gegner/einen Gegner hoch? Beides möglich. 😬

  • Lyon ja das ist durchaus Möglich, man benötigt aber ein paar kleine Tricks und Kniffe dafür. Soll es immer die selbe Anzahl sein? also zB. 3 Bomben legen und beim 4ten Mal sprengt es den Gegner mit massivem Schaden? Oder willst du vielleicht 2 Skills/ein Skill und ein Item machen, bei dem du das Item x-mal platzierst und dann beim Verwenden des Skills jagst du entsprechend den gelegten Bomben alle Gegner/einen Gegner hoch? Beides möglich. 😬

    Die zweite Variante wäre für mich besser. Also man plaziert mit einem Skill und mit dem Zweiten löst man es aus. Das wäre sehr interessant für den Ingenieur Charakter den ich habe.

  • Wenn ich mich erst richtig an den zweiten Teil unseres Spiels setze, werden mir bestimmt auch noch zig Sachen einfallen^^ Momentan sind alle Skills fix und beheben nur noch Bugs. Der Skill den du vorgeschlagen hast Lyon hört sich ziemlich interessant an. Bei usn bekommt man einen Sprengemsiter ins Team, vielleicht klaue ich mir mit deiner Erlaubnis die Idee dafür ;)
    FlipelyFlip ich bin richtig gespannt. Mega cool, dass du sowas allein mit Damage Formularen hinkriegst. Was ich in Richtung Stacking Skills gemacht habe hat mehrere Plugins und Status-Effekte gebraucht.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!