PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : DynamicQuickPatch Plugin für RPG Maker 2003 (DynRPG)



budbud
23.05.2025, 23:02
DynamicQuickPatch Plugin für RPG Maker 2003 (DynRPG)

Hallo zusammen!

Ich freue mich, mein neuestes Plugin für RPG Maker 2003 vorzustellen. Es handelt sich um ein dynamisches Speichermodifikations-System, das vollständig über die DynRPG.ini konfiguriert werden kann.

Funktionen


Komplett konfigurierbar über DynRPG.ini
Zuordnung von RPG Maker 2003 Variablen zu Speicheradressen
Unterstützung für drei Wertformate (8-bit, 32-bit und Hex)
Automatische Speicheraktualisierung bei Variablenänderungen
Konfigurierbare automatische Updates beim Laden von Spielständen
Automatische Wiederherstellung der ursprünglichen Speicherwerte beim Starten eines neuen Spiels
Konfigurierbare Variablen-ID-Bereiche passend zu deiner Spieldatenbank
Bereichsvalidierung zur Verhinderung ungültiger Speicherschreibvorgänge
Optionale Debug-Meldungen, die Speicheränderungen anzeigen


Installation


Platziere die Datei 'DynamicQuickPatch.dll' im DynPlugins-Ordner deines Spiels
Konfiguriere das Plugin in deiner DynRPG.ini Datei (siehe unten)


Konfiguration

Die gesamte Konfiguration erfolgt in der DynRPG.ini Datei. Hier ist ein Beispiel:



[dynamic_quickpatch]
; Debug-Meldungen aktivieren oder deaktivieren
ShowDebugMessages=true

; Maximale Variablen-ID (Standard: 1000)
; Stelle dies auf die maximale Variablen-ID in deiner Spieldatenbank ein
MaxVariableId=2000

; QuickPatch-Zuordnung #1 - Beispiel für 8-Bit-Wertzuordnung
QuickPatch1_VariableId=1
QuickPatch1_Address=0x401234
QuickPatch1_Type=8bit
QuickPatch1_OnLoadGame=true

; QuickPatch-Zuordnung #2 - Beispiel für 32-Bit-Wertzuordnung
; Dieser Patch wird beim Laden eines Spielstands NICHT angewendet
QuickPatch2_VariableId=2
QuickPatch2_Address=0x40ABCD
QuickPatch2_Type=32bit
QuickPatch2_OnLoadGame=false

; QuickPatch-Zuordnung #3 - Beispiel für Hex-Wertzuordnung
QuickPatch3_VariableId=3
QuickPatch3_Address=0x410000
QuickPatch3_Type=hex
QuickPatch3_HexValue=90ABCD
; OnLoadGame ist standardmäßig true, wenn nicht angegeben


Unterschied zu normalen Quickpatches

DynRPG's Standard-Quickpatches sind statische Speichermodifikationen, die in der DynRPG.ini-Datei definiert und einmalig beim Laden des Spiels angewendet werden:



[QuickPatches]
; Versteckt EXP im Hauptmenü und Speicherbildschirm
HideEXP=49E148,EB71,49F1CA,EB67,49F095,EB21
; Verschiebt das Fenster auf dem Titelbildschirm zu den Koordinaten 144/56
MoveTitleWindow=490821,#144,490828,#56


Dieses Plugin erweitert das Konzept, indem es:

Speichermodifikationen während des Spiels dynamisch ändern lässt
RPG Maker-Variablen bestimmten Speicheradressen zuordnet
Den Speicher automatisch aktualisiert, wenn sich Variablen ändern
Sicherstellt, dass der Speicher beim Laden von Spielständen korrekt aktualisiert und beim Starten eines neuen Spiels zurückgesetzt wird


Arbeiten mit Hex-Werten

Bei Verwendung des Typs 'hex' ist der 'HexValue' statisch und kann den Wert der Variable nicht direkt verwenden. RPG Maker 2003-Variablen können nur Ganzzahlen speichern, keine Hex-Strings. So verwendest du Hex-Werte effektiv:

Variablen als Aktivierungsschalter verwenden

Für Hex-Werte fungiert die Variable als Ein/Aus-Schalter:
- Wenn Variable = 0: Der Patch ist AUS (ursprüngliche Speicherwerte bleiben erhalten)
- Wenn Variable > 0: Der Patch ist EIN (Hex-Wert wird angewendet)

Hier ist ein Beispiel mit den Komponenten des "HideEXP"-Quickpatches:



; Variable 5 steuert die EXP-Anzeige in Menüs:
; Wert 0 = EXP anzeigen (ursprüngliches Verhalten, Patch inaktiv)
; Wert 1+ = EXP ausblenden (Patch aktiv, verwendet die HideEXP-Quickpatch-Werte)

; Erste Komponente: Modifiziert Code bei 0x49E148
QuickPatch1_VariableId=5
QuickPatch1_Address=0x49E148
QuickPatch1_Type=hex
QuickPatch1_HexValue=EB71

; Zweite Komponente: Modifiziert Code bei 0x49F1CA
QuickPatch2_VariableId=5
QuickPatch2_Address=0x49F1CA
QuickPatch2_Type=hex
QuickPatch2_HexValue=EB67

; Dritte Komponente: Modifiziert Code bei 0x49F095
QuickPatch3_VariableId=5
QuickPatch3_Address=0x49F095
QuickPatch3_Type=hex
QuickPatch3_HexValue=EB21


Alternative: 8-Bit- oder 32-Bit-Werte für dynamische Steuerung

Wenn du direkte numerische Kontrolle über Speicherwerte benötigst, verwende stattdessen die 8-Bit- oder 32-Bit-Typen:



; Variable 6 steuert ein einzelnes Byte bei 0x49E148
; Wenn du es auf 235 (0xEB in Hex) setzt, würde die Sprunganweisung
; aus dem HideEXP-Quickpatch angewendet werden
QuickPatch4_VariableId=6
QuickPatch4_Address=0x49E148
QuickPatch4_Type=8bit

; Variable 7 steuert die Fenster-X-Position (Beispiel mit 32-Bit-Wert)
QuickPatch5_VariableId=7
QuickPatch5_Address=0x490821
QuickPatch5_Type=32bit


Für die 8-Bit- und 32-Bit-Typen wird der tatsächliche Wert der Variable verwendet, um den Speicher zu modifizieren.

Anforderungen


RPG Maker 2003 v1.08
DynRPG 0.32


Download

Das Plugin ist auf GitHub verfügbar: DynamicQuickPatch Plugin für RPG Maker 2003 (https://github.com/MoVehrs/DynRPG-Plugins/tree/main/dynamic_quickpatch)

Bei Fragen oder Feedback stehe ich gerne zur Verfügung!

Cherry
25.05.2025, 09:47
Sehr cool!

budbud
25.05.2025, 13:54
Sehr cool!

Danke! :)

Mike
28.05.2025, 07:39
Ich muss mich vorab entschuldigen, dass ich da jetzt vielleicht eine dumme Frage stelle, weil ich mich nicht wirklich gut auskenne und bislang eigene Speicher- und Lademenüs mit den vorhandenen DynRPG-Patches gebastelt habe (das ist aber auch schon wieder einige Zeit her). Aber was konkret kann ich damit jetzt machen, was mir vorher nicht möglich war? Konkret würde mich interessieren: Könnte ich mit deinem Patch auf einem selbst gebastelten Titlescreen eine Sprachauswahl (zB für die Sprachen Deutsch und Englisch) einbauen und wenn ich dann einen bestehenden Speicherstand lade, wird, je nach Sprachauswahl am Titelbild, auch Einfluss auf einen entsprechenden Switch in einem bereits bestehenden Speicherstand genommen, sodass dann dort die Sprache, wenn sie zuvor Deutsch war, nun Englisch ist?

budbud
28.05.2025, 09:11
Ich muss mich vorab entschuldigen, dass ich da jetzt vielleicht eine dumme Frage stelle, weil ich mich nicht wirklich gut auskenne und bislang eigene Speicher- und Lademenüs mit den vorhandenen DynRPG-Patches gebastelt habe (das ist aber auch schon wieder einige Zeit her). Aber was konkret kann ich damit jetzt machen, was mir vorher nicht möglich war? Konkret würde mich interessieren: Könnte ich mit deinem Patch auf einem selbst gebastelten Titlescreen eine Sprachauswahl (zB für die Sprachen Deutsch und Englisch) einbauen und wenn ich dann einen bestehenden Speicherstand lade, wird, je nach Sprachauswahl am Titelbild, auch Einfluss auf einen entsprechenden Switch in einem bereits bestehenden Speicherstand genommen, sodass dann dort die Sprache, wenn sie zuvor Deutsch war, nun Englisch ist?

Hey Mike,

kein Problem, deine Frage ist absolut berechtigt!

Mit meinem Plugin kannst du bestimmte QuickPatches während des Spiels aktivieren, deaktivieren oder deren Werte ändern. Das eröffnet dir viele neue Möglichkeiten, die vorher so nicht oder nur sehr umständlich möglich waren.

Ein gutes Beispiel: Angenommen, du hast einen Patch, der die Position eines Fensters im Spiel bestimmt. Damit könntest du dem Spieler eine Option anbieten, selbst auszuwählen, wo das Fenster angezeigt werden soll. Ähnlich wie in Chrono Trigger, wo das Battle-HUD entweder oben oder unten am Bildschirm angezeigt werden kann.
Ein weiteres Beispiel wäre bugmenot's RowPhysSkills-Patch: Dort könntest du den Wert von ChargeDmg(%)=49B0BB während des Spiels ändern, obwohl dieser normalerweise fest eingestellt ist.

Zu deiner Frage mit der Sprachauswahl:
Das Umschalten der Sprache und das Speichern dieser Einstellung hat eigentlich nichts direkt mit den QuickPatches zu tun. Aber ich denke, das lässt sich relativ einfach umsetzen.
Wenn ich dich richtig verstanden habe, nutzt du einen eigenen Title Screen (also eine Map mit Events) und möchtest, dass nach dem Laden eines Spielstands die gewählte Sprache beibehalten wird. Also abhängig von einem Switch oder einer Variable.

Ich werde mir das Thema aber heute Abend genauer anschauen und ein Plugin schreiben, das diese Funktion ermöglicht.
Ich melde mich dann nochmal, sobald ich etwas Fertiges habe. Entweder heute Abend oder morgen im Laufe des Tages, je nachdem, wie ich Zeit finde!

Mike
28.05.2025, 12:29
Ein gutes Beispiel: Angenommen, du hast einen Patch, der die Position eines Fensters im Spiel bestimmt. Damit könntest du dem Spieler eine Option anbieten, selbst auszuwählen, wo das Fenster angezeigt werden soll. Ähnlich wie in Chrono Trigger, wo das Battle-HUD entweder oben oder unten am Bildschirm angezeigt werden kann.
Ein weiteres Beispiel wäre bugmenot's RowPhysSkills-Patch: Dort könntest du den Wert von ChargeDmg(%)=49B0BB während des Spiels ändern, obwohl dieser normalerweise fest eingestellt ist.Jetzt hab' ich's verstanden, danke! 😊

Wenn ich dich richtig verstanden habe, nutzt du einen eigenen Title Screen (also eine Map mit Events) und möchtest, dass nach dem Laden eines Spielstands die gewählte Sprache beibehalten wird. Also abhängig von einem Switch oder einer Variable.Genau. Also ich stelle am Titelbildschirm (mit Events, etc) die Sprache auf Englisch. Dann lade ich einen Spielstand, bei dem ich mit der Spracheinstellung Deutsch begonnen habe. Die Sprache ist jetzt, nach dem Laden, jedoch vollständig Englisch.


Ich werde mir das Thema aber heute Abend genauer anschauen und ein Plugin schreiben, das diese Funktion ermöglicht.
Ich melde mich dann nochmal, sobald ich etwas Fertiges habe. Entweder heute Abend oder morgen im Laufe des Tages, je nachdem, wie ich Zeit finde!Bitte tu dir deswegen jetzt keinen Aufwand an! Das war rein theoretisch und ich habe das nur angeführt, weil mir kein besseres Beispiel eingefallen ist. Ein Projekt, wo so eine Funktion zur Anwendung kommen soll, ist derzeit nicht in Arbeit und ich wüsste auch nicht, wann ich sowas in nächster Zeit mal umsetzen könnte, weil ich dafür schlicht und einfach keine Zeit habe 😅

budbud
28.05.2025, 13:23
Jetzt hab' ich's verstanden, danke! 😊
Genau. Also ich stelle am Titelbildschirm (mit Events, etc) die Sprache auf Englisch. Dann lade ich einen Spielstand, bei dem ich mit der Spracheinstellung Deutsch begonnen habe. Die Sprache ist jetzt, nach dem Laden, jedoch vollständig Englisch.

Bitte tu dir deswegen jetzt keinen Aufwand an! Das war rein theoretisch und ich habe das nur angeführt, weil mir kein besseres Beispiel eingefallen ist. Ein Projekt, wo so eine Funktion zur Anwendung kommen soll, ist derzeit nicht in Arbeit und ich wüsste auch nicht, wann ich sowas in nächster Zeit mal umsetzen könnte, weil ich dafür schlicht und einfach keine Zeit habe 😅

Ah, alles klar. Danke für die Rückmeldung!
Ich hatte schon überlegt, ob man das eventuell mit Global Switches oder Variablen lösen könnte, war mir aber nicht sicher, ob das ohne Umwege bei einem Projekt ohne Titelscreen funktioniert.

Ich habe vorhin sogar kurz einen kleinen Entwurf geschrieben, bei dem ein Switch global gemacht wird. Dafür wird der Status des Switches in einer Settings.ini-Datei gespeichert und beim Start eines neuen Spiels oder beim Laden eines Spielstands wieder eingelesen.
Aber wenn das Ganze aktuell gar nicht wirklich gebraucht wird, lasse ich das erstmal ruhen. Vielleicht ergibt sich ja irgendwann mal ein Anwendungsfall. Dann kann ich das nochmal aufgreifen. 😄

Mike
29.05.2025, 06:40
Klingt super, danke für deine Antwort 😄

budbud
31.05.2025, 22:03
Update 1.0.1.1

Logik Fehler behoben
Readme update
Demo Projekt zum GitHub Repository hinzugefügt