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 Verwendung | Bedeutung der Bezeichnung |
mhp | Dies bedeutet, dass hier nun die maximalen HP verwendet werden. |
hp | Dies bedeutet, dass hier nun die aktuellen HP verwendet werden. |
mmp | Dies bedeutet, dass hier nun die maximalen MP verwendet werden. |
mp | Dies bedeutet, dass hier nun die aktuellen MP verwendet werden. |
maxtp | Dies bedeutet, dass hier nun die maximalen TP verwendet werden. Dies ist standardmäßig bei 100, sofern es nicht durch ein Plugin erweitert wird. |
tp | Dies bedeutet, dass hier nun die aktuellen TP verwendet werden. |
atk | Dies bedeutet, dass hier nun der Angriffswert verwendet wird. |
def | Dies bedeutet, dass hier nun der Verteidigungswert verwendet wird. |
mat | Dies bedeutet, dass hier nun der Magische Angriffswert verwendet wird. |
mdf | Dies bedeutet, dass hier nun die Magische Verteidigung verwendet wird. |
agi | Dies bedeutet, dass hier nun die Agilität verwendet wird. |
luk | Dies 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 Verwendung | Bedeutung der Bezeichnung |
hit | Dies ist die Trefferrate |
eva | Dies ist die Ausweichrate |
cri | Dies ist die Rate für Kritische Treffer |
cev | Dies ist die Rate fürs Kritische Ausweichen |
mev | Dies ist die magische Ausweichrate |
mrf | Dies ist die magische Reflektierungsrate |
cnt | Dies ist die Rate, wie wahrscheinlich ein Konter passiert |
hrg | Dies ist die Rate, bei der jede Runde HP geheilt werden, bzw. abgezogen werden. Kann positiv so wie negativ sein. |
mrg | Dies ist die Rate, bei der jede Runde MP geheilt werden, bzw. abgezogen werden. Kann positiv so wie negativ sein. |
trg | Dies ist die Rate, bei der jede Runde TP generiert werden, bzw. verloren werden. Kann positiv so wie negativ sein. |
tgr | Dies ist die Rate, wie wahrscheinlich es ist, als Ziel gewählt zu werden. |
grd | Dies ist die Rate, zu wieviel Prozent der Schaden beim Verteidigen reduziert wird. |
rec | Dies 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. |
pha | Dies 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. |
mcr | Dies 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. |
tcr | Dies 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. |
pdr | Dies 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. |
mdr | Die 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. |
fdr | Dies ist die Rate, die bestimmt um wieviel der Schaden durch Bodentiles ausgeteilt wird. |
exr | Dies 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