Ergebnis 1 bis 20 von 22

Thema: RPG-Maker 2k3 8-stellige Zahlen oder Kommazahlen ?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Also gut wenn du so darauf brennst es zu wissen^^

    Die Formel sieht wie folgt aus:

    BasisSchaden = Angriffskraft + [( Angriffskraft + Level) / 32] * [( Angriffskraft * Level) / 32]
    MaximalerSchaden = [(Power * (512 - Verteidigung) * BasisSchaden) / 8192]
    Schaden = MaximalerSchaden * Rnd(3841..4096) / 4096

    Wobei Angriffskraft der Stärkewert des Charakters + die Waffenstärke (bzw. ein Bonus, da es in meinem Spiel keine normalen Waffen gibt^^). Level ist das Level des angreifenden Charakters (sollte eigentlich klar sein^^).
    Power ist die grundlegende Stärke des Angriffs. Eigentlich wollte ich das permanent bei 16 belassen (Standardangriff), aber wegen den physischen Techniken habe ich es variabel gemacht. Verteidigung ist die Verteidigung des Gegners und der Basisschaden ist das was vorher berechnet wuirde. Das ist auch die Zeile wo sich dann das Problem ergibt. Denn so kommt man bei optimalen Verhältnissen (für den Spieler) auf 73.097.216 bevor man durch 8192 teilt.
    Der letztendliche Schaden ergibt sich dann aus dem maximalen Schaden (Zeile2) multipliziert mit einer Zufallszahl zwischen 3841 und 4096 geteilt durch 4096 (für die Varianz). Okay hier kommt es auch nochmal zu dem Problem, da man hier auf 36548608 kommen kann, bevor das ganze wieder geteilt wird. Nein die Formel ist NICHT von mir^^

    Ich denke aber ich werde das ganze jetzt mal mit dem DynRPG lösen...bzw. ich versuche es. Mal sehen ob meine kleinen Programmierkenntnisse dafür ausreichen^^

    Hm ich hab jetzt erstmal meine RPG_RT.exe mit dem DynRPG gepatcht, aber jetzt startet das Spiel, der Bildschirm bleibt schwarz und dann minimiert sich das Spiel wieder. Wenn man es wieder öffnet funktioniert es wieder, dennoch ist das ganze nicht grade schön. Ich nehme einfach mal an, das liegt daran dass es eine RPG_RT.exe war die bereits mit dem BetterAEP gepatcht war. Gibt es da eine Möglichkeit beides parallel zum Laufen zu bringen, ohne dass es zu diesem (oder anderen) Fehlern kommt ?


    Edit: 18/4096 würde man rechnen wenn man da versucht, die Rechenoperationen zu tauschen (letzte Zeile) bevor man es dann wieder mit einer Zufallszahl zw. 3841 und 4096 multipliziert. Deshalb sagte ich ja es bringt nichts, die einfach umzudrehen^^

    Edit2: Okay ich kriegs nicht hin ._.
    Kann mir vielleicht jemand dabei helfen ? Bzw. mir erklären wie man das macht ?

    Zitat Zitat von EasyEventExporter
    - SCRIPT -
    <> Comment: BasisSchaden = Angriffskraft + [( Angriffskraft + Level) / 32] * [( Angriffskraft * Level) / 32]
    : MaxSchaden = [(Power * (512 - Def) * BasisSchaden) / (16 * 512)]
    : Power = Stärke...16 = normal
    : Schaden = MaxSchaden * Rnd(3841..4096) / 4096
    <> Change Variable: [817] = 0
    <> Change Variable: [806-808] = 0
    <> Change Variable: [817] = V[803]
    <> Change Variable: [806] = V[803]
    <> Change Variable: [806] += V[802]
    <> Change Variable: [806] /= 32
    <> Change Variable: [807] = V[802]
    <> Change Variable: [807] *= V[803]
    <> Change Variable: [807] /= 32
    <> Change Variable: [806] *= V[807]
    <> Change Variable: [817] += V[806]
    <> Change Variable: [806-808] = 0
    <> Change Variable: [806] = 512
    <> Change Variable: [806] -= V[812]
    <> Change Variable: [817] *= V[805]
    <> Change Variable: [817] *= V[806]
    <> Change Variable: [817] /= 8192
    <> Change Variable: [817] *= Random [3841-4096]
    <> Change Variable: [817] /= 4096
    <> Show Message: Schaden: \c[2]\v[817]
    : Hilfswert1: \c[3]\v[806]
    : Hilfswert2: \c[4]\v[807]
    <> Call Event: Common Event #90
    Zitat Zitat von EasyEventExporter
    - SCRIPT -
    <> Comment: BasisMagieschaden = 6 * [Level +Zauberangriff]
    : MaxMagieSchaden = [(Power * (512 - Zauberabwehr) * BaseMagieschaden) / (16 * 512)]
    : Power = Stärke des Zaubers
    : Magieschaden = MaxMagieschaden * Rnd(3841..4096) / 4096
    <> Change Variable: [817] = 6
    <> Change Variable: [806] = V[804]
    <> Change Variable: [806] += V[802]
    <> Change Variable: [817] *= V[806]
    <> Change Variable: [807] = 512
    <> Change Variable: [807] -= V[813]
    <> Change Variable: [808] = 16
    <> Change Variable: [808] *= 512
    <> Change Variable: [817] *= V[807]
    <> Change Variable: [817] *= V[805]
    <> Change Variable: [817] /= V[808]
    <> Change Variable: [817] *= Random [3841-4096]
    <> Change Variable: [817] /= 4096
    <> Call Event: Common Event #90

    Also das ich dann quasi die Berechnung des Schadens auslager und von DynRPG berechnen lasse und nicht den Eventcode hier benutze, da das ja wie gesagt nicht geht, da der Maker das nicht hinkriegt mit 8-stelligen Zahlen zu arbeiten. Bräuchte dafür allerdings 2 Berechnungen, da die Formel für den magischen Schaden anders ist. Wäre wirklich nett wenn mir da jemand unter die Arme greifen kann und mir das ganze erklärt.

    Geändert von Quetschi (18.11.2012 um 21:17 Uhr)

  2. #2
    Oh Gott was denkst du dir für Schadensformeln aus
    Bei solchen werten wünsche ich dir viel Spass dein System entsprechend zu Balancen.
    Da muss man ja jedesmal nachrechnen wenn man einen Wert verändern will.^^
    Naja jedem das seine. Viel Spass damit.
    Gruß Bex

  3. #3
    Das Balancing sollte nicht so das Problem werden. Ich hab mir mit Pascal ein Programm für mich geschrieben, dass mir das ganze berechnet bzw. grob. Dann muss ich daran nur noch ein bisschen feilen und fertig. Auch wenn ich das Programm mal wieder ein bisschen überarbeiten könnte. Und weiß der Geier warum ich komm mit C++ iwie nicht klar :/

  4. #4
    Hey, Ich bin's nochmal....

    Irgendwie krieg ich das ganze mit DynRPG nicht hin :/

    Ich bin wie hier ( http://rpg-maker.cherrytree.at/dynrp...g_started.html ) vorgegangen und hab zunächst eine neue Dynamic Link Library erstellt und dann weiter alle Einstellungen vorgenommen (Sprich die Punkte 1-26 ausgeführt).

    Dann habe ich folgendes als Code geschrieben:

    #define AUTO_DLLMAIN
    #include <DynRPG/DynRPG.h>

    bool OnStartup(char *pluginName){
    *reinterpret_cast<unsigned char *>(0x4AD36F) = 0xEB;
    *reinterpret_cast<unsigned char *>(0x4AD399) = 0xEB;
    return true;
    }

    Ich habe mal im DynRPG-Thread ein bisschen gelesen und gesehen dass Cherry das hier gepostet hat:

    Zitat Zitat von Cherry Beitrag anzeigen
    Die Beschränkung die von "<> Change Variable" erzeugt wird, lässt sich hiermit aufheben (in onStartup verwenden).

    Code:
    *reinterpret_cast<unsigned char *>(0x4AD36F) = 0xEB;
    *reinterpret_cast<unsigned char *>(0x4AD399) = 0xEB;
    Also wenn ich nicht völlig falsch liege hebt das ja die Variablenbecshränkung auf, d.h. mein Makerprojekt müsste mit 8-stelligen Zahlen zurechtkommen.

    Jetzt hab ich noch eine Frage und ein Problem.

    Die Frage: bool OnStartup(char *pluginName) Kann bzw. muss das pluginName hier stehen bleiben oder muss ich das durch den Namen meines Plugins ersetzen ? In Cherry's "Getting Started" steht nämlich nicht ob, man da den Namen des eigenen Plugins einsetzen muss oder nicht oder ich hab es überlesen

    Das Problem ist folgendes: Wenn ich versuche das Ganze zum Laufen zu bringen, sollte ja eigentlich eine .dll Datei in meinem DynPlugins-Ordner vorzufinden sein. Diese wird aber nicht erstellt und Code:locks gibt mir nur die Meldung:

    "schaden_berechnen - Release" uses an invalid compiler. Probably the toolchain path within the compiler options is not setup correctly?! Skipping...
    Nothing to be done.

    Ich habe allerdings alles so gemacht, wie es in dem "Getting Started" beschrieben ist, deshalb weiß ich nicht wo da der Fehler ist. Als ich das erste Mal diese Meldung bekommen habe habe ich Code:locks nach toolchain path gesucht, aber nichts gefunden. Also hab ich das alte Projekt komplett gelöscht und das ganze noch einmal Schritt für Schritt nach dem "Getting Started" gemacht, leider kam wieder die selbe Meldung. Also hab ich Code:locks nochmal deinstalliert und wieder neu installiert und bin das ganze noch einmal durchgegangen. Leider kommt die Fehlermeldung immer wieder. Weiß jemand woran das liegt und wie ich das behebe ?

  5. #5
    Du brauchst das CodeBlocks-Setup, das MinGW mitinstalliert (codeblocks-10.05mingw-setup.exe). Wenn du das andere Setup genommen hast, deinstalliere CodeBlocks und installiere es wieder mit dem richtigen Setup. Wenn nicht: Schau mal ob unter Settings -> Compiler and Debugger der GNU GCC Compiler eingestellt ist und überprüfe im selben Fenster unter Toolchain executables ob der korrekte Pfad eingestellt ist. Gegebenenfalls musst du auf Auto-detect klicken.

    Die Rückruffunktion heißt übrigens "onStartup" und nicht "OnStartup". Anderenfalls kann DynRPG sie nicht finden und aufrufen.

    "pluginName" ist nur der Bezeichner für den Funktionsparameter und ihn umzubenennen würde nichts bringen. Du musst da auch nichts einsetzen. DynRPG wird beim Aufruf der Rückruffunktion einen C-String an die Funktion übergeben, der den Namen des Plugins enthält und mit pluginName kannst du darauf zugreifen. Vielleicht solltest du dich zuerst etwas mit den Grundlagen von C/C++ beschäftigen. Anfangen kannst du z.B. mit http://www.cplusplus.com/doc/tutorial/.

    Geändert von Kyuu (20.11.2012 um 00:31 Uhr)

  6. #6
    Was mich hier wirklich interessieren würde: Auf Basis von was diese Schadensformel?

  7. #7
    @ Kyuu:

    Erst einmal dankeschön. Dank dem Auto-Detect funktioniert das Ganze jetzt. Alle anderen Einstellungen waren korrekt, da ich es ja 1:1 nach Cherry's 26 Punkten durchgegangen bin. Keine Ahnung warum dann da etwas falsch war, zumal Cherry das nicht erwähnt.
    Okay, ich wusste nicht dass die Groß-/Kleinschreibung hier so einen Unterschied macht. Ich programmiere sonst mit Pascal unter Lazarus und da ist es egal ob ich z.B. hans : integer; oder hans : InTEgeR; schreibe. (Zumindest bei dem was ich bis jetzt gemacht habe, hab' aber auch nur ein bisschen mehr als Schulkentnisse^^)
    Hm...das Tutorial werde ich mir noch angucken und dann eventuell noch das ein oder andere für DynRPG schreiben.

    @Corti:

    Ich habe ja geschrieben, dass diese Formel NICHT von mir ist. Das ist die Schadensformel von Final Fantasy 7 (Siehe hier: http://finalfantasy.wikia.com/wiki/A...al_Fantasy_VII ). Ich hab die Formel genommen, weil ich eben nicht dieses stumpfe Schaden = Angriff-Verteidigung oder Schaden = Angriff x2 - Verteidigung und If Schaden < 0 then Schaden = 0 haben wollte.
    Dann hab ich zu erst versucht mir etwas eigenes zu Überlegen, war aber nie zufrieden damit. Also habe ich begonnen mal ein bisschen im Internet nachzugucken, wie es andere Spiele und eben auch kommerzielle Spiele gemacht haben. (Ja ich geb es zu aus Faulheit, weil es eben einfacher ist als sich eine wirklich gute Formel auszudenken) Und da Final Fantasy 7 so ziemlich mein Lieblingsrollenspiel ist und die Formel so schien, als liesse sie sich leicht anwenden, habe ich sie eben übernommen.
    Das heißt dann auch, das die Statuswerte bei mir wie in Final Fantasy auf 255 begrenzt sind. Das ist allerdings auch mehr als genug. Ich finde man muss sich nicht da dran aufgeilen, dass man einen Angriffswert von 999 hat. Das Balancing werde ich auch noch hinbekommen müssen, aber ich habe mir bereits ein kleines Programm geschrieben, dass mir dabei hilft und die Statuswerte meiner ersten 3 Charaktere sind bis jetzt auch darauf ausgelegt und werden auch nicht zu stark ansteigen (so hat der Hauptheld z.B. nur einen Stärkezuwachs von 0,8 per Level)
    Das ist so die "Geschichte" dahinter^^

  8. #8
    Aber würd's dir schwer fallen eine eigene Schadensformel analog zu der von FF7 zu entwickeln, die mit niedrigeren Werten rechnet? Ich geh einfach mal davon aus, dass du die FF7-Formeln schon verstanden haben wirst, da es sonst am Ende mit dem Balancing 'nen ziemlichen Hick-Hack geben könnte.

  9. #9
    @Penetranz:

    Nein, dass würde mir sicherlich nicht schwer fallen, aber ich wäre wahrscheinlich wieder immer unzufrieden mit meinem Ergebnis. Und da ich zu dem Zeitpunkt ( Achja...damals) gerade wieder einmal FF7 gespielt habe, habe ich mir das ganze auch etwas genauer angeschaut und damit rumgerechnet habe, weil ich einen "LowLevelRun" gemacht habe. Also habe ich mir halt immer die Statuswerte angeguckt, ein bisschen rumgerechnet usw. und da war dann halt quasi schon die Grundlage da.
    Ich habe allerdings erst vor kurzem mit dem wirklichen makern dieses Projekts angefangen, da ich auch noch das erste Kapitel der Story grob geschrieben habe und auch nicht immer so viel Zeit hatte.
    Anyway...ich hatte halt schon viel damit rumgerechnet und mir mehrere Gedanken dazu gemacht und dabei halt auch schon am Balancing meiner ersten Gegner gearbeitet^^
    Deshalb hab ich dann auch nicht mehr versucht die Formel zu variieren. Leider habe ich beim Rechnen nicht die Zwischenschritte gemacht, sondern die "Teilformeln" zu
    Schaden = [(Power * (512 - Verteidigung) *{Angriffskraft + [( Angriffskraft + Level) / 32] * [( Angriffskraft * Level) / 32] } / 8192] * Rnd(3841..4096) / 4096
    zusammengefasst.
    Da ist mir dann halt nicht aufgefallen, dass da zwischendrin so hohe Werte sind.

    Aber das ist ja jetzt eigentlich auch egal, da das ganze nun dank Cherry's DynRPG und Kyuu's Hilfe korrekt funktioniert.

  10. #10
    FF7 hat ja echt drollige Mathematik. ( Falls es ausser mir noch wen interessiert: http://www.gamefaqs.com/ps/197341-fi...vii/faqs/22395 )
    Wenn man aber nicht gerade immense ATk zu Def - Differenzen hat hält sich der Vorteil zu den Makerformeln allerdings doch stark in Grenzen.

  11. #11
    Die Seite ist echt nett, aber man kann es auch irgendwo übertreiben, als Spieler das ganze zu wissen.

    Naja ich kenne die genauen Makerformeln nicht, aber dort lässt sich der Schaden eben nur vom Angriff und Verteidigungswert beeinflussen. Bei dieser Formel ist es zum einen der Angriffswert, (der sich aus der Stärke des Charakters + Waffenstärke zusammensetzt), das Level, die Powervariable (im Normalfall 16) und dem Verteidigungswert des Gegners.
    Wenn man jetzt an der Powervariable etwas verändert, merkt man den Unterschied sofort. z.B. eine Technik, die aus 3 Angriffen mit einer Power von 8 besteht, die einzelnen Angriffe ziehen nur 50% eines normalen Angriffs ab. Da es aber 3 Angriffe sind zieht es insgesamt 1,5 mal so viel ab wie ein normaler Angriff (3*8/16 = 1,5).
    Der Angriffswert ist der Stärkewert des Charakters + die Stärke der Waffe (also wie beim RPGM, allerdings liegt die Grenze bei 255) das ganze alleine hier dran zu variieren ist schon schwerer, da für die Berechnung des Basisschadens noch das Level hinzukommt.
    Da weiß ich nicht genau wie das ganze zusammenhängt...Ich hab da ein paar Rechnungen zugemacht und dabei den Angriffswert halbiert/geviertelt ebenso wie das Level, aber mal hatte das ganze den Faktor 2,3 dann 2,6 oder sogar 3,4. Das muss man dann eben ein bisschen ausprobieren und rumrechnen.
    Beim Verteidigungswert hingegen ist wieder eine schöne Gleichmäßigkeit zu erkennen. Wenn der Wert 0 beträgt, wird mit (512-0) multipliziert und somit kommt der volle Schaden zustande, wenn der Gegner allerdings 255 Vertedigung hat wird der Schaden halbiert (da aber immer abgerundet wird, kann sich das um ein paar Schadenspunkte verschieben, aber die sind ja nicht die Welt^^).

    Somit hat der Schaden (theoretisch gesehen) immer angemessene Werte und kann maximal halbiert werden, egal wieviel mehr Verteidigung der Gegner mehr hat als ich Angriff.
    Wenn man die RPGM-Formel nimmt und beispielhaft dem Helden 100 ATK und dem Gegner 999 DEF gibt, dann wäre mein Schaden -199 +-20%, denn (100/2)-(999/4)=50-249,75 (abgerundet also 249) = -199 +- 20%. Damit der Gegner nicht geheilt wird, wird der Schaden auf 0 gesetzt. Also kann ich wie ein Bekloppter auf den Gegner draufhauen und werde ihn trotzdem niemals besiegen, da ist es egal das er selber mir keinen Schaden macht...der Kampf wäre endlos. Okay das sollte im Normalfall nicht so sein, aber kann vorkommen...gerade in Open World Spielen, die schlecht gebalanced sind und mit dem Standardsystem arbeiten (Nein das ist kein Aufruf das Standardsystem hinzuschmeissen und es nicht zu benutzen, nur sollte man es vernünftig balancen).
    Bei meinem System würde ich dem Gegner (diesmal würde er 255 als maximale DEF haben) immernoch Schaden zufügen. Vielleicht nicht sonderlich viel (das kommt ja noch auf mein Level an) aber ich würde ihn irgendwann besiegen können. Es kann ja beispielsweise auch einfach nur ein Gegner mit extrem hoher Verteidigung sein.

    So gesehen bietet es schon einige Vorteile gegenüber dem Standardsystem, aber man muss das halt alles umsetzen und dazu braucht man ein eigenes KS und das ist etwas, dass nicht jeder umgesetzt bekommt.

  12. #12
    Der "Power-"Wert ist im Maker als 'Attribut' vorhanden und auch in Form der'Attack-Influence' ( die eine Modifikation zwischen 0 und 100% des Faktos zulässt ) , auch damit lässt sich jede Form von "Prozent des Normalschadens" einstellen, in einem eigenen Kampfsystem wäre es ein Prozentmodifikator ( * 50 / 100 ) auf den ( Atk-Def/2 ) - Faktor.

    Der "Level-up"-Faktor, der bei FF7 als Modifizierung des ATK-Wertes passiert ist beim Maker durch das Prinzip Atk-Def/2 ähnlich gegeben. Hierbei ist dann zwar nicht der Level direkt Teil der Formel, bei aber zB 100 Atk und 100 Def ist der Schlagschaden dann 100/2-100/5 = 25 Schaden; 100 Atk -> 25 Schaden. Weitere 100 Atk würden den Schaden auf 75 erhöhen, +100 Atk -> +50 Schaden, Schadenswerte erhöhen sich also stärker wenn der Angreifer ein höheres Level gewinnt, ausgehend von einer sehr groben Ähnlichkeit der Werte auf gleichem Level und einer Steigerung der Statuswerte beim Levelup.

    Der Fall, dass Atk so weit < Def ist kann zwar theoretisch vorkommen, praktisch wird es aber so sein, dass auch HP und Agilität bei Helden mit dem Level und bei Monstern analog zum Heldenlevel steigen. Während also je mehr der Angreifer gen 50% der Verteidigerdef geht, der Schaden immer mehr sinkt und gegen 0 geht, steigen die HP des Verteidgers, er kommt öfter dran und haut wesentlich härter zu. Ist "den Kampf dann noch schaffen können" dann ein Kriterium für "gute Formeln?"
    Davon ausgehend, dass der Kampf bei ausgeglichenen Spieler & Monsterleveln nicht lächerlichst einfach ist sollte der rechnerische Fall nicht mehr gewinnen zu können schon lange vor dem 0-Schaden Breakpoint einsetzen.

Berechtigungen

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