RM2k3 1.08: 4C7BA8
Methode UpdateMessageBox der Klasse TLcfMessageWindow. eax ist der this-Pointer der TLcfMessageWindow-Instanz.
Was hast du da vor?
RM2k3 1.08: 4C7BA8
Methode UpdateMessageBox der Klasse TLcfMessageWindow. eax ist der this-Pointer der TLcfMessageWindow-Instanz.
Was hast du da vor?
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
Geändert von Cherry (13.06.2013 um 13:15 Uhr)
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.
Geändert von bugmenot (13.06.2013 um 21:07 Uhr)
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.
@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
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
+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.
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
Geändert von Cherry (13.06.2013 um 20:39 Uhr)
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
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
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"
Geändert von bugmenot (13.06.2013 um 22:32 Uhr)
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 ^^
--
Mir war nichtmal bewusst dass ich nominiert wurde, aber: Cool! Hälfte des Lobes muss aber unbedingt an Archeia!Now all new and shiny:CherryShare | Patches und Tools | Programmwunschthread | www.cherrytree.at | Cherry = CherryDT
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: