Ergebnis 1 bis 20 von 2334

Thema: Programmwunsch und -erstellungsthread #2

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    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?^^

  2. #2
    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?

  3. #3
    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)

  4. #4
    Wäre da vielleicht ein brauchbarer Anhaltspunkt dabei? (Adressen sind virtuell)

    Zitat Zitat von (Cherry) RMInterna.cue\Runtime-Interna\Adressen\Funktionen\Diverse
    476888 -> Attack
    463E74 -> BattleMainLoop
    47449C -> BattleWon
    483124 -> ChangeHeroName
    49590C -> DoChoice
    48A4AC -> DoEvents
    495110 -> DoMessage
    47C4B4 -> DoTeleport
    4921E4 -> DrawAnimations
    4527D0 -> DrawChar
    4799FC -> DrawGameMenu
    47B920 -> DrawMap
    48F594 -> DrawPictures
    480470 -> EnemyAttack
    4970DC -> GameMain
    482A78 -> GetActor
    480270 -> GetEnemy
    45E524 -> GetEvParam
    485B4C -> GetEvent
    4830D8 -> GetHeroName
    48F560 -> GetPicture
    469E6C -> GetSwitch
    469EE0 -> GetVar
    451F04 -> LoadXYZFromResource
    47B734 -> MapMainLoop
    47AA6C -> MenuMainLoop
    48FD84 -> MoveEvent
    45611C -> PlayMovie
    485CCC -> ProcShowMessage --> danach alle anderen Eventbefehl-Funktionen!
    48DE2C -> RideVehicle
    46ED58 -> SaveMainLoop
    469E84 -> SetSwitch
    469EF8 -> SetVar
    471F3C -> ShopMainLoop
    492610 -> ShowBattleAnimation
    4948E4 -> ShowMessage
    47C49C -> Teleport
    46E358 -> TitleScreenMainLoop
    491F00 -> UpdateAnimations
    48F574 -> UpdatePictures
    455F84 -> WindowMainLoop

  5. #5
    RM2k3 1.08: 4C7BA8
    Methode UpdateMessageBox der Klasse TLcfMessageWindow. eax ist der this-Pointer der TLcfMessageWindow-Instanz.

    Was hast du da vor?

    Geändert von Cherry (13.06.2013 um 12:15 Uhr)

  6. #6
    Zitat Zitat von Cherry Beitrag anzeigen
    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.

    Geändert von bugmenot (13.06.2013 um 20:07 Uhr)

  7. #7
    Zitat Zitat von bugmenot Beitrag anzeigen
    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.

  8. #8
    @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

  9. #9
    +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?

  10. #10
    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.

    Geändert von Cherry (13.06.2013 um 19:39 Uhr)

  11. #11
    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.

  12. #12
    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

  13. #13
    Zitat Zitat von bugmenot Beitrag anzeigen
    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.
    2k: 0x94936
    2k3: 0xC7412
    Die 50 gibt die X Anfangsposition für den Text an, also dezimal 80.

  14. #14
    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:













Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •