Hallo! Ich arbeite seit dem BMT an einer Art Kommandozeilendebugger für den RM2k(3). Ich release hier mal eine allererste Version, weil ich jemandem versprochen habe, dass es "diese" Woche noch ein Release gibt (jetzt ist es eh ein paar Minuten zu spät ^^).
Also, was ist UniDebug nun wirklich? Manch einer kennt vielleicht RMSaveAnywhere. UniDebug ist eine Weiterentwicklung davon. UniDebug kann alles was RMSaveAnywhere kann (nämlich in jedem Makerspiel mit F11 speichern, mit Strg+F11 heilen) - und zwar besser, nämlich ohne schwarzen Bildschirm - aber noch viel mehr. Genauso wie RMSaveAnywhere funktioniert UniDebug aber mit (hoffentlich) jedem RM2k(3)-Spiel, und zwar ohne Patchen - einfach UniDebug starten und in der Taskleiste lassen.
Mit F2 kann man den eigentlichen Debugger aufrufen. Dieser hat ein Kommandozeileninterface. "?" listet alle Befehle auf, mit "help Befehl" bekommt man Hilfe zu einem Befehl. Man kann auch einen Befehl eingeben und F1 drücken. Die Tastenfunktionen kann man mit "help keys" anzeigen, die speziellen Features für erleicherte Bedienung (z.B. Objekte mit Namen statt ID ansprechen) werden mit "help input" erklärt.
Mit der Kontextmenütaste + Zahlentaste kann man ingame einen Hotkey aufrufen. Innerhalb des Debuggers reicht es, die Zahlentaste zu drücken (bevor ein Befehl eingegeben wurde).
Der Debugger.
Beispiel vom Teleport-Feature.
Beispiel mit Hotkey-Leiste.
"Ruler" zum Messen von Strecken/Flächen am Bildschirm.
Overlay mit Event-IDs.
Erklärung zu der oberen Leiste.
Features:
* Funktioniert mit jedem Spiel, ohne Patchen
* Überall speichern
* Überall heilen
* Spielgeschwindigkeit ändern (0.2x - 8x)
* Laufgeschwindigkeit ändern
* Game-Over abbrechen
* Überallhin teleportieren
* Infos über RPG_RT.exe, Harmonypatches und DynRPG-Plugins anzeigen
* Held/Events sichtbar/unsichtbar machen
* Meßwerkzeug mit Mausbedienung
* Overlay mit Event-IDs und deren Layer und Phasing Mode
* Infos über Musik
* Switches und Variablen lesen/schreiben (auch nach Name)
* Konfigurierbare Hotkeys
* Externe Programme starten (z.B. PPC)
* Beliebige Eventcommands zur Laufzeit ausführen, mit diesem "geheimen" Befehl der hier erklärt ist: https://www.multimediaxis.de/threads...=1#post3416936
* ...und mehr!
Geplant, aber noch nicht eingebaut ist außerdem:
* Map-Screenshotter der die ganze Map, inkl. Events, screenshotten kann
* Kampftools - Kämpfe gewinnen/verlieren, immer Autobattle, ...
* Skripte
* Ein Eventdebugger (das wäre das ultimative Ziel)
Zugriff auf:
* Helden
* Pictures
* Kamera
* Eventdetails
* Wetter
* Timer
* Geld
und so weiter.
UniDebug richtet sich sowohl an Spieleentwickler als auch an Spieler/LPer von fehlerhaften oder schlecht balanceten Spielen (als Cheattool).
Bitte testet das Ding und bringt mir Verbesserungsvorschläge - vor allem wärs interessant, ob es bei irgendwelchen Spielen nicht funktioniert oder Probleme verursacht! Ich bin über jedes Feedback dankbar!
Falls es nicht funktioniert und eine finder.log-Datei erzeugt wird in der bei jedem Spiel nur steht "An essential point couldn't been found" direkt nach "Scanning for main pointer", dann kann es an Force-ASLR liegen. Das macht auch diverse Spiele, die Patches verwenden, kaputt. Das sollte sich lösen lassen indem man einmal als Admin in PowerShell folgenden Befehl ausführt:
mfG Cherry
=== Updates:
v0.11 - Kein Crash bei komischer Auflösung, Szene wird korrekt wiederhergestellt bei save/menu/f9 außerhalb der Map
v0.10 - Erster Upload
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Man kann in der TitleScene per F11 speichern (oder das Menü aufrufen). Absturz.
Menü, Shop, Kampf, EnterHeroName, DebugMenü, GameOver werden nach Drücken von F11 und Alt+F11 nicht wieder hergestellt.
Im BattleTest (Database) wird durch F11 das Fenster geschlossen. Edit: Mapgrößen außerhalb von 999x999 werden im F2-Menü nicht richtig angezeigt.
Das komplette Interface des Debuggers passt sich sehr komisch der internen Auflösung des Spiels an.
Unterhalb von 320x240 stürzt es wegen der msvcrt.dll ab, und oberhab von 320x240 wird der Text unleserlich verzerrt.
(Ich rede nicht von der 640x480 Auflösung im großen Fenster. Fenstergröße mit F5 ändern funktioniert.)
@Absturz: Interessant, da ist extra ein Feature drin damit das nicht passiert. Das hat auch schon mal funktioniert.
Schau ich mir dann gleich an.
@BattleTest: Ja, beim BattleTest wird das Spiel geschlossen sobald die Szene nicht mehr "Battle" ist. Da ändere ich jetzt momentan auch noch nix dran, (das heißt dass auch F2 selber den Battletest beendet, das ist nämlich Szene 42).
@Mapgrößen: Ja, weiß ich, ist mir aber momentan noch egal weil kaum jemand so große Maps hat.
@Auflösung: Äh, was meinst du? O_o Veränderst du die Auflösung des Spiels? Das ist natürlich nicht vorgesehen, es gibt ja auch noch keinerlei Patch o.ä. derart. Das Interface passt sich nämlich gar nicht an, sondern kopiert Zeugs in den Bildpuffer. Wenn der nicht 320x240 ist - das ist nicht vorgesehen...
Wenn es tatsächlich jemanden gibt der sowas macht (außer dir privat) weils da einen Patch gibt den ich übersehen habe, dann werde ich wohl was einbauen was den Debugger deaktiviert bei komischer Auflösung, damit es wenigstens nicht crasht.
EDIT: Szenen werden jetzt wieder richtig wiederhergestellt, Auflösung wird überprüft, nochmal runterladen.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Das Event HUD scheint zu buggen, wenn eine Map auf irgendeiner Seite loopt (ab Hero_y < 7 bei vertical loop, ab Hero_x < 9 bei horizontal loop). Bzw. sich die geloopte Map über die eigentlichen Mapränder (x=0, y=0, etc.) bewegt.
Ach und der Ruler zeichnet einen Frame lang ein Rechteck, wenn man einen zweiten Punkt setzt/fixiert.
@HUD: Danke für den Fund. Sieht momentan noch etwas komplexer aus, das zu lösen, kommt also weiter unten auf meine Liste.
@Ruler: Sowas, das ist mir nicht aufgefallen. Aber auf Speed 0,2 merk ichs jetzt auch. Danke!
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
ob es bei irgendwelchen Spielen nicht funktioniert
...
Zitat von UniDebug
Running Finder to detect pointers for debugger failed
...
Das kommt bei ziemlich stark zerpatchten Spielen. Einmal ein privates von mir, keine Ahnung wo ich da anfangen soll zu suchen (werde ich auch nicht). Und einmal kommt das bei Assembling the Void. Vielleicht kann elvissteinjr dazu etwas sagen. Denn die Pointer bleiben ja generell alle gleich.
Habe meine ins Netz gestellten Patches damit durchprobiert. UniDebug startet damit (bisher) vernünftig.
...und wenn der Bildpuffer in 32bit ist (Bananen-Joe's Destiny Patcher V2) dann ist der Debugger wieder verzerrt, farbig und verschoben.
Kleinkram:
* Event_IDs 10002/10003/10004 (Boat/Ship/Airship) werden im Event HUD nicht angezeigt.
* Im F2-Menü kann man mit Strg+Hoch noch ca. 40 Zeilen oberhalb von der Textzeile "UniDebug - The universal RM2k(3) debugger" hochscrollen.
* Man kann den "hotkeys" command mittels "sethotkey" auf eine Taste legen. Spamt eigentlich nur die Konsole voll. Also außerhalb des F2-Menüs. Bzw. alles, was nur Informationen in der Konsole anzeigt, macht das.
* Man kann "sethotkey" per "sethotkey" auf eine Taste setzen, die effektiv nichts macht.
* Wird es, wenn auf mehr Parameter zugegriffen werden kann, Makrobefehle geben (z.B. hotkey8= do A; do B; do C; set D; set E; sethotkey ...) (und Strg+Links/Rechts zur Navigation, wenn der Text Überlänge hat)?
* Wenn beim Eintippen die Vorschläge kommen (z.B. nach "H") dann sind manche davon außerhalb des Screens (das werden dann sicherlich noch mehr, wenn mal mehr Sachen in höheren Versionsnummern dazukommen).
* Hat man von außerhalb Zugriff auf EventParameter? "Erase Event" als durchgekreuzte Events oder so. Oder ob ein Event gerade aktiv ist und eigenen EventCode durchrattert anzeigen?
OK, Unterstützung für Bananen-Joe ließe sich wahrscheinlich sogar machen, aber ich bin mir noch nicht sicher was das für andere Effekte haben wird (außer Verzerrung), wenn das Ding mal mehr kann...
Assembling the Void schau ich mir an.
10002-4 sind keine echten Event IDs (die haben im Eventobjekt ID 0, wie der Held, und sind auch nicht im Array von Map-Events). Unterstützung für Vehicles wird erst eingebaut.
Natürlich kann man auch Befehle die nur was ausgeben auf einen Hotkey legen. Es ist halt natürlich eine Frage der Sinnhaftigkeit, aber ich fange mir nicht an, da irgendwelche Beschränkungen einzubauen. Du kannst ja auch "blub" auf einen Hotkey legen und es wird nur in Konsole schreiben dass er nicht weiß was du meinst.
Es wird Skripte geben. Man kann dann einen Skriptaufruf auf einen Hotkey legen (oder in der Konsole verwenden).
Ja, die Vorschläge passen nicht alle drauf und das bleibt auch so. Die sind auch nur eine Hilfestellung. Es gibt ja auch noch Tab und man kann sich die Liste der Befehle anschauen wenn man mal was nicht mehr weiß.
Man hat momentan noch keinen Zugriff auf Eigenschaften von Events (wenn du das meinst). Man kann allerdings erahnen ob ein Event "aktiv" ist oder nicht, dadurch ob die Outline gepunktet ist oder nicht. Gepunktet bedeutet "Phasing Mode ist an", und Events die gerade keine aktive Eventseite haben oder erased sind haben immer den Phasing Mode an, damit man durch sie durchlaufen kann.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Ist jetzt schon etwas länger her, aber wenn ich mich recht entsinne habe ich hauptsächlich die dort ungenutzte Menu Scene zerpflückt und eigenen Code da reingehauen, falls das hilft.
Irgendwo sind da dann wohl halt auch die Grenzen, wenn die Runtime so entstellt wurde. :V
Hab das Problem schon gefunden, es war das Wegpatchen vom Fade-Out beim Szenenwechsel von der Map (was btw auch den Fade zu Save, Enter Hero Name und Shop entfernt hat). Die gewisse Codestelle, die der Finder da aber gesucht (und nicht gefunden) hat ist für UniDebug eh nicht relevant (nur Power Patch Compact), deshalb hab ich jetzt einfach eingebaut dass er das Fehlen dieser Adresse ignoriert.
EDIT: Hab das Ctrl+Right/Left vorher übersehen. Das ist momentan nicht geplant, weil UniDebug nämlich sowohl Text abschneiden (da steht dann ») als auch umbrechen kann (auch mit Einrückung). Je nach Situation wird was anderes gemacht, nämlich je nachdem ob der Nutzen, den ganzen Text zu zeigen, mehr verwendeten Platz am Screen wettmacht.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!
Es gibt übrigens noch ein geheimes Kommando... ich verrate es hier mal: $evcmd
Es führt einen Eventbefehl aus. Ist nur für fortgeschrittene Anwender zu empfehlen, aber wenn mich wer nach einem gewissen Befehl fragt, kann ich nachschauen. Man kann es sich auch aus dem EasyRPG-Sourcecode zusammenreimen: https://github.com/EasyRPG/Player/bl...nterpreter.cpp - Da sind die diversen Eventbefehle implementiert (mit Kommentar was ihr "Code" ist) und man kann nachvollziehen welche Parameter wofür verwendet werden.
Der Befehl wird in der Umgebung eines "Fake-Events" ausgeführt, was für die meisten Anwendungsfälle reicht. Befehle die Folgebefehle erwarten wie "Show Choice" funktionieren da aber nicht richtig.
Die Syntax ist:
"fakemsg?": 0 oder 1, in den meisten Fällen sollte das einfach 0 sein. Dieses Flag wird dazu benutzt, um temporär ein Fake-Message-Window zu verwenden, während der Befehl ausgeführt wird. Um ehrlich zu sein weiß ich nicht einmal mehr, wofür ich das gedacht hatte...
cmd: Event-Command-ID
text: Ein String, wenn das Command einen erwartet - sonst zwei Anführungszeichen "" für einen leeren String
params: Beliebig viele numerische Parameter, anhand dessen was das Command erwartet
Beispiele:
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!