Hi,
ich arbeite mich grad an dem DynRPG ein (bin eher ein mittelmäßiger Programmierer).
Einfach mal Frage: kann man mit den DynRPG ein eigenes Battle System bauen?
Es ist eine vollewertige Programmiersprache dahinter, du kannst Eingaben abfragen, Grafiken anzeigen und Sound abspielen. In Theorie und Praxis kannst du mit DynRPG auch ein Echtzeitstrategiespiel einbauen. DynRPG ist noch nicht sooo gut darin umfassend auf die Datenbanken des Makers zuzugreifen, so praktisch wie in Ruby mit den neuen Makern ist es also nicht.
Was meinst du denn genau mit "eigenes Battle System"?
... es fehlen halt eine ganze Menge callbacks um Herumgefummel mit verschiedenen Sequenzen zu ersparen (für das Verarbeiten von Code zum passenden Zeitpunkt).
Wie viel bei "Herumfummeln mit der richtigen Sequenzierung" verbleiben soll kann ich nicht sagen. Ich kann neue Sachen testen, will aber nicht zu viel zumüllen.
Bugmenot, ist dir der SkillWindowDuration-Fix bekannt?
Im ersten DynRPG hatte die Cherry die Anzeigedauer dieses "Monster nutzt X skill" -Fensters erhöht. Das hat nahezu jede Form eines intelligenten Kampfsystems ruiniert, weil die Eventverarbeitung dadurch korrumpiert wurde. Es gab dafür einen Fix. also für 0.17. In 0.20 funktioniert der nicht mehr, weil es dort eine "bessere" Version gab, wenn ich mich recht entsinne. Besser war aber immer noch Mist, weshalb ich meine Plugins allesamt für 0.17 mache und 0.20 ignoriere.
In Dyn0.14 wurden die Delays nach dem Einsatz von Items und den Monsteraktionen DoubleAttack / Defend / Observe / Charge / SelfDestruct / Escape von 40 Frames auf 90 Frames erhöt.
Der normal_skill_window_duration fix überschreibt das wieder mit 40.
Dyn0.20 nutzt wieder 40 Frames, nimmt diese Zahl aber aus einem call to function her << hier macht der normal_skill_window_duration fix alles kaputt, weil er in die Sprungweite der call-Anweisung schreibt >> dann wird eine falsche Adresse aufgerufen und die Applikation stürzt ab.
In Dyn0.14 wurde der Delay nach Skills von 30 auf 90 Frames erhöt. SkillWindowDuration macht 30 Frames daraus, Dyn0.20 macht 50 Frames daraus.
Dies hier sollte in Dyn0.20 wieder 30 Frames (nach einer Skillaktion) daraus machen:
Dass das Abziehen der MP-Kosten und die Verarbeitung des Skills durch das bisschen mehr Wartezeit an anderer Stelle etwas kaputt macht, ist bedauerlich.
Alternativ kannst du ja das Schließen des Fensters mit dem SkillNamen über
ausknipsen und an anderer Stelle mit einem eigenen Fix selber durchführen über:
Wo ich das gerade mit den MP lese, im 2k3 KS wird ja keine MP Heilung/Schaden angezeigt. Könnte man das auch anzeigen lassen? Vielleicht in einer andersfarbigen Zahl als Grün (HP Heilung) bzw. dem standard Blau (Hp Schaden) - oder was auch immer für eine Farbe aus der Textbox genommen wird.
Das Attribute/Condition Resistance Control-Ding, kann das irgend etwas, dass man mit DynRPG v0.30 noch nicht machen kann?
...
Kopfschmerzen ersparen.
Du müsstest dir die default-Werte irgendwo abspeichern, dann die richtige Sequenz herausfinden, wer/was angegriffen wird, unter RPG:: Attribute oder RPG:: Condition die entsprechenden Werte abändern und wieder die default-Werte wiederherstellen bevor jemand anderes angegriffen wird. Vorallem muss man dann nicht noch extra herausfinden ob A, B, C, D oder E gilt mit Equipment und JobClasses.
Ansonsten kann man auch mit der Ext.dll als Grundlage entsprechende pseudo-Callbacks nutzen. Dann erspart man sich dieses "Wiederherstellen des Defaults".
Und der Spielordner wird nicht zugemüllt, weil die Werte allesamt in die RPG:: Battler eingebunden wurden (liegen im erweiterten DArray<short, 1> RPG:: Battler:: attributes bzw. conditions von einzelnen Helden innerhalb/außerhalb der Party und von einzelnen Monster-Objekten im Kampf). Mir fällt jetzt kein anderer temporärer Speicher ein, kann mich aber gerne eines Besseren belehren lassen.
Könntest du theoretisch neue Callbacks im DynRPG Stil machen? Ich weiss nicht, was Cherry da genau tut, diesen Code habe ich nicht. Ich schätze, er patcht im Makercode gewisse Stellen um auf Funktionen der DynLoader.dll und die ruft diesen Callback dann in den Plugins auf. Haben PepsiOtaku und du den kompletten DynRPG Code, oder bastelt ihr nur mit den Headern rum?
Funktionen, die aus einem anderen Callback heraus aufgerufen werden und ähnliche Schnittstellen liefern wie reguläre Callbacks (bei zeitabhängigen Rechenoperationen / Abfragen).
Ich habe keine Ahnung vom dynloader, kann da also keine zusätzlichen Callbacks anbinden, ohne diesen "schäbigen Adapter" in Form von einem RT-Patch, onSetSwitch callback, RAM-Zugriffen und sub-optimalem C++ Code. "neue Callbacks im DynRPG Stil" könnte ich machen, wenn ich von Programmieren mehr verstehen würde als GCC 4.7.1 sich nicht mit grundlegenden calling conventions auskennt (außer es gab mal eine Reform, dass alle Register bis auf das output-Register auf den stack gepusht werden... dann will ich nichts gesagt haben).
PepsiOtaku hat meine Dokumentation der ganzen Speicheradressen in besser lesbare Form in die neuen Header gepresst (welche am Ende auch nur zu einem Speicherzugriff kompiliert werden).