Verwendest du DynRPG? Da gibts leider noch Transparenzbugs.
Druckbare Version
Verwendest du DynRPG? Da gibts leider noch Transparenzbugs.
Ich bin sicher das wurde schonmal gefragt aber:
Gibt es die Möglichkeit das Hauptmenü zu überspringen und direkt ins Item und Ausrüstungsmenü zu springen?
@goldenroy: Was passiert, wenn du Move Event (increase transparency) dafür ranziehst, anstatt die Transparenz direkt aus dem Event-Editor zu nehmen?
Fürs Itemmenü hat Cherry mal was gemacht.Zitat:
Ich bin sicher das wurde schonmal gefragt aber:
Gibt es die Möglichkeit das Hauptmenü zu überspringen und direkt ins Item und Ausrüstungsmenü zu springen?
Ausrüstungsmenü weiß ich nun nicht.
LG
MajinSonic
Okay, wird das bald gefixt? Ich meine, ich kann damit leben, wenn es nur ein Anzeigebug ist und gefixt wird, sobald das an die Öffentlichkeit gerät. ^~^
Mhm, das werde ich dann wohl versuchen, wenn obiges nicht zutrifft. Ist dann aber auch blöd, wenn ich alles mit dem Move Event Befehl gemacht habe, der DynRPG Fehler dann gefixt wird und beides zusammen viel zu viel Transparenz abgibt. :\
Wenn du vornherein nur das nutzt, was sowieso funktioniert und nicht das kaputte noch hinzu, wird sich durch einen Fix nichts ändern. óo
Schaust du hier.
Hö? Mir geht es um folgendes Szenario:
So sieht es jetzt aus
[Transparenter Char, aber kaputt wegen DynRPG]
~~~
Und wenn ich es jetzt so mache:
[Transparenter Char, aber kaputt wegen DynRPG]
[Manuelle Einstellung mit Move Events]
~~~
Und DANN das DynRPG-Problem gefixt wird, dann sieht das beim ersten einfach so aus:
[Transparenter Char, gefixt]
~~~
beim zweiten allerdings:
[Transparenter Char, gefixt]
[Manuelle Einstellung mit Move Events]
~~~ (Doppelte Transparenz)
Und das wäre halt weniger vorteilhaft. Solange das fixbar ist und auch gefixt wird, kann ich während der Entwicklung ruhig auf die Transparenz verzichten. °-°
↓↓↓Zitat:
[Transparenter Char, aber kaputt wegen DynRPG]
[Manuelle Einstellung mit Move Events]
Zitat:
[Transparenter Char, aber kaputt wegen DynRPG]
[Manuelle Einstellung mit Move Events]
Ich wechsel sehr oft die Herografik, auch teilweise mit dem Hero GFX Befehl, bei dem man afaik jedes mal neu die Transparenz einstellen muss. Ich müsste also alle Events abklappern und das fixen.
Ich nehme an das Cherry eh vor hat, den Transparenzfehler zu beheben, insofern kann ich auch einfach warten.
Außer er ist nicht behebbar, wenn das der Fall ist muss ich es wohl oder übel auf die umständlichere Variante machen. /:
Wobei auf dem Transparenzwert eines Events bzw. des Helden man doch theoretisch direkt Zugriff via DynRPG geben könnte. Klar, geht momentan nicht, halte ich aber für eine Möglichkeit.
goldenroy, mach nen Common Event mit dem Move Event drin und lösch den Inhalt wenn der DynFix rauskommt.
Ich glaube dass der Fehler aber jegliche Charsettransparenz betroffen hat, egal ob über Move Event eingestellt oder über "Transparent" (was intern nix anderes macht als den Transparenzwert zu setzen, genau wie ein Move Event).
Wann ein Fix rauskommt steht leider in den Sternen.
Gibt es irgendwie eine Möglichkeit, dass, wenn man auf "Spiel starten" geht, die BGM nicht stoppt und wieder anfängt, sondern einfach durchgängig weiterläuft für den Fall, dass man für den Titelscreen und den Spielanfang dieselbe BGM benutzen möchte?
also das ist so
du startest das project und dan bist du automatisch auf ner map
also kannst du ja instant ein bild anzeigen und die musik abspielen lassen und wenn du dan halt das spiel anfangen lassen möchtest (intro )
lässt du die musik einfach laufen das spiel startet also sofort im gameplay anstatt vom title screen (sehr hilfreich für minigame colections etc)
Ich cutte glaub einfach die Musik und nehm für den Titelscreen nen Ausschnitt aus der Mitte der BGM. Fällt dann nich so sehr auf, wenn das Lied 2x anfängt. Durchgehend wär mir zwar lieber aber allein dafür jetz n eigenes Titelbild zu machen find ich dann bei näherer Überlegung doch unnötig.^^
Für 2k3: Mit Hex-Editor ab Offset 8FE10 die nächsten 5 Bytes mit 90 überschreiben.
Sollte das Fade-Out der Musik entfernen. Ungetestet.
Öh, mit Hex-Editor kenn ich mich nich aus. Da hab ich eher Angst, dass ich was kaputt mach... :confused:Darf ich dir mal meine .exe schicken und du schaust mal? ;)
OK.
Hast Post.
Funktioniert doch nicht so wie ich gedacht habe.
Also entweder eigener Titelscreen (ist ja eine Sache von 10 Minuten...) oder Workaround.
Okay, trotzdem Danke.
Yo. Ich glaube sowas gabs schonmal (Ich kann mich sogar daran erinnern, darüber gepostet zu haben o,o), aber ich habe ehrlich gesagt vergessen, wie genau das hieß und meine bisherige Suche war erfolglos. Naja, frag ich halt:
Cherry hatte ja mal so einen CustomLoadSave-Patch für das Standard-Menü gemacht, das (mit einer kleinen, von ihm bereitgestellten Modifikation) beim Aufruf des "Speichern"-Menüpunkes anstelle des Savemenüs einen Switch aktiviert hat. Meine Suche / Bitte richtet sich daran, das dies mit dem Menüpunkt ATB-Mode passiert (da ich diesen eh nicht benutze), anstatt mit dem Save-Menüpunkt.
Gibts den schon und/oder wäre es schwer, so etwas zu erstellen? ^~^
- a) Wo gibts den Patch, der das Itemmenü aufruft anstatt des Hauptmenüs?
- b) Gibts einen cleveren Hacker, der mir einen parametrierbaren Sprung in Item oder Ausrüstungsmenü ermöglichen könnte?
- c) Gibts in DynRPG eine Möglichkeit abzufragen, in welchem Menüscreenabschnitt man gerade ist?
a) http://www.multimediaxis.de/threads/...mmenü-ersetzen
b) Wenn ich denn gescheit Assembler könnte... sonst fällt mir nur Cherry ein, der hat aber auch nicht für alles Zeit.
c) Man kann zumindest die Menu-Scene Abfragen, das weiß ich noch als Nicht-DynRPG-Nutzer. Aber wenn du die Menüs eh direkt ansteuerst könntest du doch auch einfach nen normalen Switch oder Variable dafür verwenden?
Hab ich dir doch schon gepostet als du das erste Mal danach gefragt hattest. Hier.
a) http://www.multimediaxis.de/threads/...C3%BC-ersetzen
b) bugmenot scheint clever zu sein.
c) Nicht mit einer offiziellen Funktion des SDK, aber durch einen Speicherzugriff.
Code:int getMenuScreen() {
return (**reinterpret_cast<char ***>(0x4CDC60))[12];
}
/* Return values:
0 = main screen
1 = item screen
2 = item target selection
3 = skill screen
4 = skill target selection
5 = teleport screen
6 = equipment screen
7 = end confirmation screen
8 = status screen
9 = party order screen
*/
Danke Cherry! Die Funktion ist sehr nützlich.
Jetzt ist nur noch die Frage, ob es dafür noch einen Patch geben wird, oder ob ich wirklich diesen scheusslichen Workaround mit simulierten Tastendrücken nehmen muss.
Edit:
Thema durch: Der Maker und SendInput verträgt sich mal gar nicht. Ich schicke VK_DOWN und er scrollt runter, dann drücke ich die Up-Taste und es hört auf, geht nie wieder weiter, bis ich selbst Down-Taste drücke, dann gehts wieder los. Damit kann man nicht verlässlich automatisch durch Menüs springen. Verdammte Scheisse aber auch.
Edit2:
Gibts die. Möglichkeit in den Keycache des Makers zu schreiben?
zu b)
Erm... wie gesagt: in Assembler/Maschinencode bin ich nicht gerade gut eingelesen.
Ich kann höchstens die Adresse angeben, ab welcher die SubRoutinen für die ganzen Fenster samt Inhalten aufgerufen werden:
RM2k -> 0x7840D (0047900C) -> die ganzen EquipMenu-Fenster (+ Cursor?)
RM2k3 -> 0x9F5CC (004A01CC) -> die ganzen EquipMenu-Fenster (+ Cursor?)
(ItemMenü: RM2k 0x950BC (00495CBC) ~unsicher / RM2k3 0xC7C40 (004C8840) ~unsicher)
Ich kann höchstens nur Offset-Angaben für den ganzen Grafik-Output der Standard-Menüs anbieten.
@Cherry: Gibt es analog zu dem Speicherzugriff oben noch einen, der mir sagt, welcher der Helden in der Ausrüstungvorselektion ausgewählt ist? (17:25 Uhr )
Edit: Bwahahaha! Die dreckige Lösung nimmt Form an, Muhuhahahahahaharrr! \o/ ( 22:57 Uhr )
Edit2: It works, Bitches! Gnahahahaha! RAWR! \o/ ( 01:47 Uhr )
Irgendwas zu.. ehm.. meiner Frage..? ( ._.)
Hmpf, mach mal nicht so schnell.
Vielleicht braucht's ja trotzdem noch jemand. Wenn nicht, hab ich wenigstens was dabei gelernt:
https://dl.dropboxusercontent.com/u/...mEquipMenu.ips
Erweiterung vom DirectItemMenu Patch.
Ist die Variable 3386 auf 2, wird das Ausrüstungsmenü aufgerufen, ansonsten das Itemmenü.
Leider hab ich keine Übersicht bei Cherrys verwendeten VariablenIDs für Patches, hoffentlich kommt das Ding nichts in die Quere.
Hahahaha, geile Sache *g
Kann der Patch per Parameter bestimmen, welches Heldenequipmenü aufgerufen wird?
Noch nicht. Ließe sich aber wahrscheinlich einrichten falls du das brauchst.
@Peneface:
Was ich meine war: Wenn du Held Alex und Held Brian hast mit 'ner Variable angeben, ob man in Alex' oder Brian's Equipmenü springt.
@elvissteinjr:
Für alle anderen wäre es ein cooles Feature. Ich würde mich freuen wenn sich eines Tages rausstellt,dass meine Methode noch fiese Nachteile hat, die sich bisher nicht gezeigt haben, solange lass ichs jetzt wie es ist und wie es funktioniert.
Ich sage zu mir selbst "dann mach selbst". Dann hab ich "eigenes Menü, Nutzen und Aufwand" verglichen mit einem Eigenfix in DynRPG und habe letzteres getan.
So:
https://dl.dropboxusercontent.com/u/...mEquipMenu.ips (selber Link wie vorhin)
Variable 3386, falls 0 gibt's beim Menüaufruf das Itemmenü. Ansonsten gibt die Variable die HeldenID(aus der Database, nicht aus der Party) an, dessen Ausrüstungsmenü aufgerufen werden soll.
Das hat auch den Nebeneffekt, dass man Ausrüstungsmenüs von Helden aufrufen kann, die nicht in der Party sind.
Good Work! :D
Nun sind eigene menüs mit dem 2k3 echt kein Problem mehr :D Sehr gut gemacht :3
LG
MajinSonic
Gute Arbeit. Aber wäre es nicht sinnvoll die ganzen Patches mal gesammelt zu den bereits verfügbaren Patches auf der Hauptseite hinzuzufügen und dort vielleicht noch ne eigene Rubrik für euer DynRPG zu machen? Ich seh hier nämlich oft Leute nach Patches und Erweiterungen fragen und da wäre es doch sinnvoll, wenn sie auf der Hauptseite gehostet wären.
Hallöchen mal wieder ^^
Da hier scheinbar alle außer mir studierte Informatiker mit Programmierfähigkeiten sind und hier mit Begriffen (Zeigern, verketteten Listen und Callbacks versteh ich gerade noch so) um sich werfen (als hätten Sie alle Lehrveranstaltungen mit einer 1.0 abgeschlossen), von denen ich kein Wort verstehe oder die ich noch nie gehört hab... obwohl ich immerhin fast zwei Semester etwas Programmierung in Lazarus (Pascal ... Leider nix objektorientiertes...) hatte... dachte ich mir ich frage nochmal nach, ob jemand Lust hätte, Plugins für die folgenden Probleme zu schreiben, da die sicherlich auch selbst gebraucht werden könnten:
Ich zitier mich da nochmal selbst:
-Das konnte ich mittlerweile (nicht sehr schön, aber i.O.) über die bereits im Maker enthaltene Funktion lösen, einen animierten Hintergrund im Kampf zu haben...Zitat:
-> Da der PicsInBattle Patch mit DynRPG ja nicht mehr so richtig funktioniert, frage ich mich ob es mit DynRPG möglich wäre, ein Plugin zu schreiben, dass wie ein Parallel Process im Hintergrund des Kampfes abläuft und dabei
....entweder Pictures, welche irgendwo im Picture Verzeichnis als bspw. bild1.png, bild2.png usw. abgelegt sind, über den Battleanimationen der Helden in einem zeitlichen Abstand von 0,1sek ablaufen lässt, damit so Wettereffekte etc. erzeugt werden können (so ähnlich wie das animated monsters plugin)
Zitat:
....oder den Backdrop in Abständen von 0,1sek verändert und anhand der dateinamen durchlaufen lässt, damit auch im Hintergrund Wettereffekte etc. gezeigt werden können (z.B. Kampf am Stand mit Wellen)
Zitat:
--> Und ich wollte fragen ob es mit DynRPG möglich ist, dass ein Angriff eines Helden im Kampf einem anderen Helden Schaden zufügt bzw. ein Schlag eines Helden ein Monster heilt? (Die Frage hatte ich schon mal gestellt, aber ich glaub da gab es DynRPG noch nicht... http://www.multimediaxis.de/threads/...arty-angreifen Problem war, dass zusätzlich zur Änderung bspw. des Effect Rating in negative Zahlen iwo im Maker eine Sicherheitssperre eingebaut war, die das verhindert.... (damit ist vielleicht auch eine WECKEN Funktion möglich)
Und hier nochmal Cherry, der schon einen Vorschlag zur Umsetzung gemacht hat, der mir ohne die benötigten Kenntnisse leider nicht viel hilft ;_;
PS: Wenn jemand gute Tutorials kennt um sich die für die Programmierung mit DynRPG notwendigen Kenntnisse (Ich hoffe was Morden mit ScopeResolution-Operatoren, Geltungsbereichsauflösungsoperatoren, NameSpaces, statische Member oder Methoden einer Klasse und dereferenzierten Objekte geschrieben hat war auf Einzelfälle bezogen o____O;;; ) anzulesen, der kann mir gerne ein paar Links schicken!Zitat:
Ginge alles. Zum eigene-Party-Angreifen: Ich würds da so machen dass ich die Skills als Heilskill mache und in DynRPG checke ob dieser Skill eingesetzt wird, wenn ja wird die Aktion abgeändert auf einen anderen Skill der gleich heißt und dasselbe tut, nur als Angriff und nicht als Heilung konfiguriert ist.
PPS: Wenn ich hier mal einen Auszug aus dragonheartmans Quellcode zum animated monsters plugin zeigen darf und dazu schreibe was ich verstehe... kann man sehen wie viel Ahnung ich habe...
Du kommst sehr frustriert rüber. Ich werde dir nicht erklären was die einzelnen Sachen in dem Codebeispiel bedeuten, das hat nämlich erstmal wenig mit Maker und DynRPG zu tun, sondern mit C++ ansich. Es gibt auch Youtube sehr anschauliche Tutorials, die dir in wenig Zeit die Antworten auf deine Fragen geben,es lohnt sich wenn man es malkönnen will.
@Plugins:
Wechselnde Hintergründe: Daran dachte ich auch schon einmal, steht aber in der Priorität bei mir weiter unten.
Negative Schadens/Heilungseffekte: Mal das Attribute negativ gemacht?
oO; kommt das echt so rüber?... Liegt wenn dann an meiner eigenen Unwissenheit obwohl ich zumindest etwas Programmierung an der Uni hatte ^^ Eher spricht der Neid aus mir, dass sich hier so viele mit C++ auskennen nur ich nicht ;_; Wundert mich halt, dass hier doch so viele Ahnung davon haben und scheinbar studiert haben ^^
Wir hatten das hier mal versucht falls du das meinst: http://www.multimediaxis.de/threads/...arty-angreifen
Also ich hab ja selbst nichts schulisch oder sonst wie über Informatik gelernt, aber deine kommentierten Codestellen sind eigentlich leicht verständlich wenn man C++ Kenntnisse hast. Bin da sicher nicht das beste Beispiel, da ich mit DynRPG eigentlich nichts mache(gab mal so ein ganz simples PlugIn für Datum und Zeitzugriff, für mehr fehlt mir die Zeit und der Eigenbedarf). Geh mal am besten ein C++ Tutorial durch. Und wenn's nur so ein Crashkurs ist, helfen wird's allemal.
Ich wurde gefragt, ob man die Face-Grafiken in der Message-Box verschieben kann ([Show Message]Befehl, nicht aber im Shop-Fenster):
RPG_RT 2k (v1.07)
0x68498 -> [30] set [30]+-
0x6849D -> [30] set [30]+-
0x94E58 -> [10] set [10]+-
0x94E5E -> [10] set [10]+-
0x94E93 -> [10] set [10]+-
0x94EA2 -> [10] set [10]+-
0x94E99 -> [40 01] (= 64 + 256)
RPG_RT 2k3 (v1.08 )
0x897DE -> [30] set [30]+-
0x897E3 -> [30] set [30]+-
0xC79D7 -> [10] set [10]+-
0xC79DD -> [10] set [10]+-
0xC7A12 -> [10] set [10]+-
0xC7A21 -> [10] set [10]+-
0xC7A18 -> [40 01] (= 64 + 256)
Als DynRPG-Quickpatchcodes wäre das dann:
Breite & Höhe:
48A3E3,#48,48A3DE,#48
X/Y links:
4C85DD,%16,4C85D7,%16
X/Y rechts:
4C8618,#256,4C8612,%16,4C861C,909090909090
Die rot markierten Werte ändern. Werte mit % können nur -128 bis +127 sein, Werte mit # können auch höher sein.
Für Erklärung wie man Quickpatches mit DynRPG benutzt: http://www.multimediaxis.de/threads/...=1#post3084525 (auf jeden Fall einfacher als mit einem Hexeditor herumzuhantieren)
Erklärung für bugmenot: Ich habe die Berechnung für den X-Wert rechts vereinfacht, darum werden einige Befehle mit NOPs überschrieben von diesem Patch.
Btw. ich hab vor einiger Zeit für ein Projekt auf der Arbeit den ordner d:\\temp erstellen müssen.
Dort erstellte sich zu meiner Verwunderung nicht nur das, was ich reinschreibe, sondern auch regelmässig fg.txt mit sowas drin:
- EF07A0 TFormLcfGameMain
- 50396 TFormLcfGameMain
- 40394 FilterGraphWindow
- 602AA TFormLcfGameMain
- 803FE FilterGraphWindow
- C03F0 TFormLcfGameMain
- 903FE FilterGraphWindow
- F039A TFormLcfGameMain
- A03FE FilterGraphWindow
- 1102AE TFormLcfGameMain
- B03FE FilterGraphWindow
- 1603EE TFormLcfGameMain
- C03FE FilterGraphWindow
- 1502B0 TFormLcfGameMain
- 308C8 TFormLcfGameMain
Ultimate?^^
Oh. Sieht nach einem Debugcode aus der wohl vergessen wurde. D:\Temp ist mein Ordner für diversen temporären Kram ^^ Ich finde aber im Code nichts mehr davon, also nehme ich an dass es in der alleraktuellsten Version schon weg ist: http://share.cherrytree.at/showfile-...mate_01632.rar << hast du die?
Ich stelle mal die Frage in den Raum, ob jemand zufällig die Adresse der Funktion kennt, welche für den Output des Textes in der Message Box zuständig ist. (+Abschneiden vom Text am Rand und beim 80x80 Pixel großen Face-Feld)
Wäre da vielleicht ein brauchbarer Anhaltspunkt dabei? (Adressen sind virtuell)
Zitat:
Zitat von (Cherry) RMInterna.cue\Runtime-Interna\Adressen\Funktionen\Diverse
RM2k3 1.08: 4C7BA8
Methode UpdateMessageBox der Klasse TLcfMessageWindow. eax ist der this-Pointer der TLcfMessageWindow-Instanz.
Was hast du da vor?
Wenn man die Face-Grafiken außerhalb der Message Box darstellt, wird der Text immernoch um 80 Pixel verschoben bzw. nach 240 Pixeln (ca. 38 Characters) abgetrennt. Es bleibt also immer diese 80x80 Pixel große Leere.
Ich suche zwar immernoch danach, habe aber währenddessen Folgendes gefunden:
RPG_RT 2k (v 1.07 )
0x9402F -> [04] ändern (gibt die Zahl an ausgegebenen Textzeilen an)
0x93D6F -> [50] ändern (Höhe der M-Box //max.[7F], Range Check Error ab [80])
RPG_RT 2k3 (v 1.08 )
0xC6A0E -> [04] ändern (Textzeilen)
0xC6743 -> [50] ändern (Höhe der M-Box //max.[7F], Range Check Error ab [80])
Mit DynRPG sollte es sicher auch möglich sein, Text manuell einzugeben.
edit:
Die y-Positionen der Message Boxen habe ich leider nicht parat.
Naja man kann dafür eigentlich auch ResourceHacker oder andere Tools verwenden, von denen einige sogar
die Oberfläche darstellen können (weiss nicht mehr ob das PE Explorer / ResourceTuner oder XN war...). ^-^
RCDATA // TFORMEVCMD10110
Oder man trägt die Änderungen bei Ultimate ein.
RPG2000 1.07 - Titelbildschirm-Adressengebims (das man teils schon kennt)
[Fenster]
0x6D5B9: X-Pos (Von der Mitte aus)
0x6D5C0: Y-Pos (Oberster Punkt)
[Neues Spiel]
0x6D5F7: VocabString******
0x6D5FD: Farbe****
0x6D601: Y-Pos**
0x6D606: X-Pos**
[Spiel laden]
0x6D621: VocabString******
0x6D627: Farbe****
0x6D62B: Y-Pos**
0x6D630: X-Pos**
[Spiel laden - Ohne Slots]
0x6D647: VocabString******
0x6D64D: Farbe****
0x6D651: Y-Pos**
0x6D656: X-Pos**
[Beenden]
0x6D66B: VocabString******
0x6D671: Farbe****
0x6D675: Y-Pos**
0x6D67A: X-Pos**
** X und Y bei Texteinträgen sind die relative Position zum Fensteranfang
**** Die Farbe wird aus eurem Systemset genommen, die Nummer zwischen 1 und 20 müsst ihr Hex umwandeln (0x00 bis 0x13)
****** VocabStrings haben eine 4byte-ID (von denen nur 2 Byte wegen des genutzten Datenbereiches wirklich relevant sind)
Für VocabStrings hab ich mal eine Liste angelegt, die Namen hab ich mir manuell zur Übersicht ausgedacht:
@bugmenot: Du hast beim Quickpatch jetzt irrtümlich den 2k-Offset bei der Höhe verwendet. Übrigens würd ich statt "04" (was hexadezimal wäre und daher Nichttechniker bei höheren Zahlen verwirren könnte) "%4" schreiben. (% ist 1 Byte, # sind 4 Bytes und zwar beides dezimal angegeben).
Ich würd das ja überhaupt so machen
AllowInfiniteMessageLines=4C760F,90E9,4AC773,9090,4AC7AB,9090
Mit 4AC91F,9090 wären auch Choices > 4 Lines erlaubt, da braucht man allerdings noch einigen Zusatzcode um die Cancel-Zeile sonderzubehandeln die der Maker als ID 5 einfügt.
Mit diesem Tool kann man diese überlangen Messages auch in den Maker eingeben und bearbeiten: http://share.cherrytree.at/showfile-...revmsgedit.exe
Mit der Position ist es etwas mehr tricky weil da nicht viel Platz im Code für Eigenkonstrukte ist.
4C72A0 << Position im Kampf
4C734D << Position auf der Map
Jeweils ecx = y, edx = x. Und zwar wird hier die Messageboxposition (0 = oben, 1 = mittig, 2 = unten) mit 80 multipliziert:
(auf Map)
mov ecx, [ebx+8c] << Position laden
shl ecx, 4 << mal 16
lea ecx, [ecx+ecx*4] << mal 5
xor edx, edx << X auf 0 setzen
Man kann die ecx-Berechnung mit einem Trick verändern
mov eax, [ebx+8c] << Position laden, diesmal in eax
mov cl, 50 << Zahl 80 in cl laden
mul cl << Multipliziert al mit cl und speichert das Ergebnis in ax
mov ecx, eax << Und wieder in ecx kopieren
Braucht genausoviel Bytes, aber man kann den Multiplikator direkt angeben!
MessageBoxYPosMultiplier=4C734E,83,4C7353,B1,4C7354,%80,4C7355,F6E18BC8
Mehr Erweiterungnen (wie z.B. X ungleich 0, Y-Offset zur Berechnung dazu) geht ohne Code Cave nicht gut in den Platz rein.
Aber man kann sie natürlich in der Größe ändern:
MessageBoxSize=4C733E,#320,4C7343,%80
Im Kampf haben wir aber mehr Platz, da die Berechnung (weil Position immer = 0) dort noch mehr vereinfacht werden kann. Man kann die ganze Berechnung in 4C72A9-4C72B2 mit
mov edx, 1234 << X-Position
mov ecx, 5678 << Y-Position
ersetzen, was genau gleich viel Bytes braucht. (Breite und Höhe für Kampf findet man ab 4C72A0)
BattleMessageBoxPos=4C72A9,BA,4C72AA,#0,4C72AE,B9,4C72AF,#0
BattleMessageBoxSize=4C72A1,#320,4C72A6,%80
Hier noch das was du auch gesucht hast: Maximale Textbreite in Pixeln bevor der Text abgeschnitten wird.
MaxMessageWidthWithFace=4C7FAE,#227
MaxMessageWidthWithoutFace=4C7FCA,#299
Dich könnte auch hier dieser ASM-Code des nicht fertiggestellten Revolution Patches interessieren: http://share.cherrytree.at/showfile-10139/patch.asm
+claps+
Wären meine Cookies nicht halb angebrannt, würde ich jetzt einige verteilen. (Cranberry & White Chocolate)
P.S.
Gibt es eine Möglichkeit einen 'Range Check Error' zu umgehen? (die magische Grenze von 7F) Oder tritt dieser auf, weil die Zahl negativ interprätiert wird und man deswegen die Zahl in 4 bytes angeben müsste?
Ganz genau. Das höchstwertige Bit ist immer negativ*. Also wenn da nur 1 Byte Platz ist heißt das das 8. Bit wiegt -128 statt +128. Wenn da 4 Byte Platz sind heißt das das 32. Bit wiegt -2147483648 statt +2147483648. Daher 7F = +127, 80 = -128, 80 00 00 00 = +128, FF = -1, FF 00 00 00 = 255 (zur Erklärung: 80 FF FF FF = -128, FF FF FF FF = -1)
*: Wenn es um signed arithmetic geht. Und das kannst du beim Maker fast immer annehmen.
EDIT: Jetzt merk ich es erst, bei deinem Quickpatch ist nochwas falsch: Bei der Höhe muss man auch % und nicht # nehmen weil eben nur 1 Byte Platz ist.
DynRPG überschreibt 4 Bytes wenn man # verwendet.
RPG2000 1.07 - Hauptmenü - Auswahlfeld
[Auswahlfeld bei Betreten des Menüs wie eine Messagebox aufklappen]
0x78E2F = 01
[Inventar]
0x78E6F: VocabString
0x78E75: Farbe
0x78E7E: X-Pos
0x78E79: Y-Pos
[Zauber]
0x78E93: VocabString
0x78E99: Farbe
0x78EA2: X-Pos
0x78E9D: Y-Pos
[Ausrüstung]
0x78EB7: VocabString
0x78EBD: Farbe
0x78EC6: X-Pos
0x78EC1: Y-Pos
[Speichern]
0x78F59: VocabString
0x78F5F: Farbe
0x78F68: X-Pos
0x78F63: Y-Pos
[Beenden]
0x78FA3: VocabString
0x78FA9: Farbe
0x78FB2: X-Pos
0x78FAD: Y-Pos
Für Informationen zu den verschiedenen Daten und welcher VocabString welche ID hat, schlagt in Post 1747 nach.
RPG_RT 2k3 1.08 - Hauptmenü - Auswahlfeld
[Auswahlfenster]
0xA03DA = Breite
0xA03EE = Höhe
0xA03F1 set 01 = aufrollen
[Items]
0xA01C5 = y-Pos
0xA01CE = x-Pos
[Skills]
0xA01F4 = y-Pos
0xA01FD = x-Pos
[Equip]
0xA0223 = y-Pos
0xA022C = x-Pos
[Save]
0xA0252 = y-Pos
0xA025B = x-Pos
[Status]
0xA0281 = y-Pos
0xA028A = x-Pos
[Row]
0xA02B0 = y-Pos
0xA02B9 = x-Pos
[Order]
0xA02DF = y-Pos
0xA02E8 = x-Pos
[wait(ATB)]
0xA0312 = Farbe
0xA031C = y-Pos
0xA0325 = x-Pos
[active(ATB)]
0xA033F = Farbe
0xA0349 = y-Pos
0xA0352 = x-Pos
[Beenden]
0xA0372 = Farbe
0xA0387 = y-Pos
0xA0390 = x-Pos
[Party Window]
0x9D3BF = Breite
0x9D3C4 = Höhe
0x9D3C9 set 01 = aufrollen
0x9D3CD = x-Pos
Vergiss nicht dass die Menüpunkte im 2k3 umsortierbar sind. Die Werte die du da zeigst sind nur ein Teil (+8) der Berechnung die da lautet Position*16+8.
Das gilt auch für die Höhe des Auswahlfensters: Du zeigst auf den Teil +16 der Berechnung AnzahlMenüpunkte*16+16
RPG2000 1.07 - Hauptmenü - Beenden-Abschnitt
[Fenster aufklappen lassen]
0x78AF2 = 01 <~ Frage
0x78B79 = 01 <~ Antworten
[Fragefenster]
0x78AD9+78B17: VocabString
0x78B1D: Textfarbe
0x78B1F: Text an/aus (01/00)
0x78B26: Textposition X
0x78B21: Textposition Y
0x78AFB: Fensterpos X (Zentral)
0x78B02: Fensterpos Y (Oberster Punkt)
0x78AF0: Höhe
[Antwortauswahl]
0x78BA3: Ja:Farbe
0x78B3B: Ja:VocabString
0x78BAC: Ja:X-Pos
0x78BA7: Ja:Y-Pos
0x78B4F: Nein:VocabString
0x78BC6: Nein:Farbe
0x78BCF: Nein:X-Pos
0x78BCA: Nein:Y-Pos
0x78B82: Fensterpos X (Zentral)
0x78B89: Fensterpos Y (Oberster Punkt)
0x78B77: Höhe
Für Informationen zu den verschiedenen Daten und welcher VocabString welche ID hat, schlagt in Post 1747 nach.
RPG_RT 2k3 1.08 - Hauptmenü - Beenden
[Fragefenster]
0x9FDA0 = Fensterhöhe
0x9FDA2 set 01 = aufrollen
0x9FDAB = x-Pos
0x9FDB2 = y-Pos
0x9FDCD = Textfarbe
0x9FDCF set 00 = ausblenden
0x9FDD1 = Text y-Pos
0x9FDD6 = Text x-Pos
[Antwortauswahl]
0x9FE27 = Fensterhöhe //Error unter [20] //bei [20] nur "Ja" sicht-/wählbar
0x9FE29 set 01 = aufrollen
0x9FE32 = x-Pos
0x9FE39 = y-Pos
0x9FE53 = Farbe "Ja"
0x9FE57 = y-Pos "Ja"
0x9FE5C = x-Pos "Ja"
0x9FE76 = Farbe "Nein"
0x9FE7A = y-Pos "Nein"
0x9FE7F = x-Pos "Nein"
Ihr solltet das vielleicht in einem eigenen Thread machen. Die meisten Leser dieses Threads dürfte das nicht so sehr interessieren (mir fallen mit mir und euch nur 5 ein). Ich bezweifle sowieso dass es wert ist, diese ganzen Sachen rauszusuchen. Wenn einmal wirklich jemand so ein Detail geändert haben will, kann man das immer noch bei Bedarf machen.
Mods, was denkt ihr? Vielleicht könnt ihr diese ganze Angelegenheit aus diesem Thread rausholen und in einen neuen verschieben. "Der Hardcore-Patch-Thread" oder so, oder "RPG Maker seziert: Speicheradressen und mehr", keine Ahnung ^^
Okay, was Interessantes / allgemein Verwertbares:
Save-Switch (ähnlich dem Patch für den 2k3, setzt einen Switch auf ON, bei Wahl der Menü-Option Speichern (die SaveFileScene wird nicht aufgerufen))
RPG_RT 2k v 1.07:
Ab 0x7A041 folgendes eintippen:
05 00 A1 A4 AB 49 00 8B 00 BA ED 03 00 00 B1 01 E8 2E F2 FE FF 90 90 90
//0x7A04B = [ED 03] (= 1005)
~gibt die Switch-ID an
Edit:
Hier erfolgt bei mir ein jmp ohne irgendwelchen Text auszugeben.
Was wird hier eigentlich gemacht, solange eax < 4 ist?
Nicht 4C7FB2 und 4C7FCE?
Ich möchte mal den ganzen MessageBox-Kram kurz abschließen:
[RPG_RT 2k (v1.07 ) - Message Cursor]
0x94DD0 = Farbe der Zahlen bei 'Input Number'
0x94EBC = Blinke-Cursor Blink-Tempo
0x94EC4 = Blinke-Cursor Blink-Verhalten
0x94F03 = y-Pos-Korrektur des Blinkers nach oben
0x94F13 = x-Pos-Korrektur nach links //erscheint rechts ab [80]
[RPG_RT 2k3 (v1.08 ) - Message Cursor]
0xC7A3B = Blinke-Cursor Blink-Tempo
0xC7A43 = Blinke-Cursor Blink-Verhalten
0xC7A85 = y-Pos-Korrektur des Blinkers nach oben
0xC7A95 = x-Pos-Korrektur nach links //erscheint rechts ab [80]
[RPG_RT 2k (v1.07 ) - Message Skip]
~Messages mittels Shift schneller anzeigen, selbst ohne aus dem Maker zu starten (Credit to Cherry's Revolution Patch)
0x945A9 = [74 10] set [90 90] (aktuelle Zeile zeigen, Skip zur nächsten)
0x945E9 = [74 10] set [90 90] (wenn Skip-Taste am Zeilenende gedrückt ist: komplette Message zeigen)
//für den selben Effekt wie im Test Play einfach beide Änderungen vornehmen
0x5626D = Taste, mit welcher der Message Skip durchgeführt wird
// [10] = Shift
[0D] = Enter
[20] = Space
[01] = linke Maustaste
[02] = rechte Maustaste
[RPG_RT 2k3 (v1.08 ) - Message Skip]
~Messages mittels Shift schneller anzeigen, selbst ohne aus dem Maker zu starten (Credit to Cherry's Revolution Patch)
0xC7042 = [74 10] set [90 90] (aktuelle Zeile zeigen, Skip zur nächsten)
0xC7088 = [74 10] set [90 90] (wenn Skip-Taste am Zeilenende gedrückt ist: komplette Message zeigen)
//für den selben Effekt wie im Test Play einfach beide Änderungen vornehmen
0x6C042 = Taste, mit welcher der Message Skip durchgeführt wird
// [10] = Shift
[0D] = Enter
[20] = Space
[01] = linke Maustaste
[02] = rechte Maustaste
Gibts ne Möglichkeit / nen Patch, der es mir ermöglicht, dass die Levelanzahl in der Database über 99 hinausgehen kann?
[RPG_RT 2k (v1.07 ) - Lvl-Cap ändern]
0x82807 = [8B C3] set [90 90]
[RPG_RT 2k3 (v1.08 ) - Lvl-Cap ändern]
0xB64A3 = [8B C3] set [90 90]
Edit:
Das Lvl-Cap ist abhängig vom eingestellten max.Lvl in der Data Base und von der Gesamt-Exp, die man bei dem max.Lvl haben muss. Die Exp-Kurve wird aber wie gewohnt zur Berechnung der Exp(next Lvl) genutzt. Liegt jetzt Exp(next Lvl) oberhalb von 999.999 (2k) bzw. 9.999.999 (2k3), dann werden keine Lvl-Ups mehr verarbeitet (für jeden Hero werden nur bis zu 999.999 (bzw. 9.999.999) Exp gespeichert/verwertet). Erst, wenn das neue Lvl-Cap erreicht ist, wird das ----/---- angezeigt (dient nur zum Ausblenden des "Exp / Exp(next Lvl)", weil die Exp weiterhin gezählt werden und die Exp(next Lvl) aus der Erfahrungskurve ausgelesen werden).
Ein weiteres Problem ist, dass ab Level 51(2k) bzw. 100(2k3) alle Statuswerte auf 0 gesetzt werden, weil die Data Base dann nichts mehr ausspuckt. (selbst wenn da überall 1 steht, sind es wirklich nur 0)
...oder ich nehme mal spontan an, du willst das angezeigte Level für etwas anderes nutzen (Erfolge/Prozente/etc)
[RPG_RT 2k (v1.07 ) - Exp = Level]
0x827DA = [64] set [68]
[RPG_RT 2k3 (v1.08 ) - Exp = Level]
0xB6472 = [F4] set [F8]
Dies ist eher eine suboptimale Lösung, weil jetzt die "Exp / Exp(next Lvl)" entfernt werden müssen:
(2k)
0x774FD = [01] set [00] (----/---- ausblenden)
0x77550 = [01] set [00] (Exp-Anzeige ausblenden)
(2k3)
0x9D548 = [7C 21] set [EB 71] (Exp-Anzeige im Menü entfernen)
0x9E621 = [01] set [00] (Exp-Anzeige im Statusfenster ausblenden)
0x9E4A6 = [01] set [00] (Exp-Symbol im Statusfenster ausblenden)
0x9E5D4 = [01] set [00] (----/---- im Statusfenster ausblenden)
Edit:
[RPG_RT 2k (v1.07 ) - Exp-Gerade]
0x82459 = [DC 4C 24 08] set [90 90 90 90]
[RPG_RT 2k3 (v1.08 ) - Exp-Gerade]
0xB6002 = [F7 EA] set [90 90]
Hiermit werden die benötigten Exp für jedes weitere Level auf die Exp(next Lvl) von Level 2 gesetzt. Bsp: Exp-Kurve anpassen, bis man 100 Exp für Level 2 benötigt = 200 Gesamt-Exp für Level 3, 300 für Level 4, etc.
Jetzt nur noch die rpg2000.exe im Resource Hacker öffnen:
in TFORMEDPLAYEREXP
zu object Groupbox 3
bei object Slider3
Max = 40 ändern (zB. auf 990)
bei object DialEdit3
MaxValue = 40 ändern (zB. auf 990)
Compile Script
Speichern
Fertig.
Danke, aber gibts für sowas auch ne Art Direktpatch? An Hexhack hab ich mich bisher noch nicht wirklich rangetraut, mangels Ahnung von der Materie.
Ja, die Quickpatches für die neue DynRPG-Loader-Version die es irgendwo im DynRPG-Thread gibt. Die RPG2003.exe-Modifikation gäbe es auch als UIMod-Datei für den RM2k9 Ultimate:
Code:[FormEDPlayerEXP]
Slider3.MaxValue=990
DialEdit3.MaxValue=990
Nennt mich paranoid, aber Level hochsetzen ist 'ne Sache die würde ich machen wenn ich ein eigenes System hätte und mich würd nur die Zahl im Ladebildschirm interessieren, ich kann mir aber schwer vorstellen, dass in einem Spiel, dass die Standardsysteme benutzt alles fehlerfrei weiterläuft wenn man da lustig an den Levelgrenzen rumhackt.