Page 1 sur 1

Logs de combat !

Posté : dim. 07 août 2022, 23:28
par JohnBob
Bonsoir,
► Afficher le texte

&quot a écrit : - And about some lines in baldur.exe, BaldursGateII, SiegeOfDragonspear.exe, SiegeOfDragonspear...

Roll:%d +Luck:%d +SpecialAC:%d +HitMod:%d +Attack of Opportunity:4 +Attack of Opportunity:0 +Berserk:2 +Berserk:0 +Left:%d +Right:%d +Invisible:%d +Invisible Target:%d +Range:%d +Hated Race:%d +Special Target:%d +Protections:%d Roll:%d +DamageMod:%d +Hand bonus:%d *Backstab:%d +Berserk:%d +Strength:%d +Special Bonus:%d +Min Damage:%d

Here a screenshot in-game...
► Afficher le texte
Do you think it's possible to translate them, and / or, make the text more reader-friendly, without causing problems with the executables ? And do you have any hints on the method to follow ?
It's possible to replace the strings with new ones, though the order in which the data is presented is fixed.

There's two ways to change the string:

1) Replace the strings in-place. As long as the new format string is shorter than or equal to the length of the old one you can simply overwrite the contents, making sure to place a null byte ('\0') at the end.

2) Allocate a new string at runtime and patch the code to refer to it. For example, to replace " +Luck:%d":
  • Find every location that references the string, you'll have to use Ghidra / IDA Freeware / x64dbg for this. Then come up with a pattern for each address; I get:

    Code : Tout sélectionner

    [B3LuckStringRef]
    Pattern=660F4CC8
    Operations=ADD -10
    Put that in InfinityLoader.db. Now we have to patch the location, (put this in a M_*.lua file):

    Code : Tout sélectionner

    (function()
    
        local B3ReplaceString = function(pattern, existingInstructionSize, destRegister, newString)
            if existingInstructionSize < 5 then EEex_Error("Existing instruction too small to replace") end
            EEex_HookNOPs(EEex_Label(pattern), existingInstructionSize - 5, {[[
                lea #$(1), qword ptr ds:[#$(2)] ]], {destRegister, EEex_WriteStringAuto(newString)}, [[ #ENDL
                jmp #L(return)
            ]]})
        end
    
        EEex_DisableCodeProtection()
    
        B3ReplaceString("B3LuckStringRef", 7, "rdx", " +Lucky Mod:%d")
    
        EEex_EnableCodeProtection()
    
    end)()
    where B3ReplaceString(<pattern name>, <size of existing instruction>, <destination register>, <new string>)

    For example, using x64dbg:
    Image

    The characters on the left are the instruction bytes. So <size of existing instruction> = 7, (two characters make one byte), <destination register> = "rdx".

    And for our troubles:
    ► Afficher le texte


Posté : lun. 08 août 2022, 00:13
par jazira
JohnBob a écrit :Bonsoir,

Une question peut-être mal placée, mais vous êtes probablement les plus à même d'y répondre !

Sur les screenshots présent dans ce post, on peut voir les logs de combats avec jets de toucher et jets de dégâts...

Est-il possible de les traduire malgré que les textes se trouvent dans les fichier "baldur.exe" et "BaldursGateII", ou est-ce impossible ?
Salut,

Si tu parles bien du bloc de textes avec tous les différents bonus et malus affectant le TAC0, qui vient a priori de l'exécutable (donc hard codé), alors j'ai bien peur que non, du moins pas dans la forme actuelle du mod CorrectfrBG2EE. Qui est techniquement très simple dans sa conception et configuration. À part les textes, l'audio, la vidéo et quelques chaînes d'objets corrigées (uniquement les textes), le mod est très sobre et touche à un minimum de chose technique de manière à maximiser la compatibilité avec d'autres mods.

Si je ne dis pas de bêtise, il faudrait alors modifier directement l'exécutable du jeu, à la manière de Tobex. Je ne dis pas que c'est impossible, mais c'est très compliqué. En tout cas, moi j'en serai incapable. Et le rapport effort/gain serait très déséquilibré.

Cependant je ne suis pas un spécialiste, d'autres moddeurs auront sûrement plus d'expertise que moi à ce sujet.

Posté : lun. 08 août 2022, 00:26
par JohnBob
Ok, merci de ta reponse !

Je vais suivre ton conseil et attendre d'autre avis, en fonction je poserais la question à Bubb le créateur de EEex...
Et le rapport effort/gain serait très déséquilibré.
Effectivement si c'est trop compliquer, cela n'en vaudra pas la peine !

Posté : mar. 16 août 2022, 00:19
par JohnBob
Bonjour / Bonsoir,

J'ai mis à jour le premier post avec la réponse de Bubb, si vous voulez jeter un œil...

Voici le lien vers ma réponse... (...pas très productive)

Alors si l'un d'entre vous a des pistes pour que je trouve les valeurs demander, ou bien des petites précisions sur les termes employés, comme :

Code : Tout sélectionner

[B3LuckStringRef]

[B]Pattern[/B]=[b][U]660F4CC8[/U][/b]
[B]Operations[/B]=[b][U]ADD -10[/U][/b]
Et je vous tiendrais au courant si quand ça avance !



PS : Principalement à l'attention de Lefreut, je pense,
► Afficher le texte


Pas sûr que ça vous intéresse, ou que ça se rapporte à ce que vous faites avec les cinématiques, mais je suis tombé sur ce sujet du forum Beamdog....

Il y a plusieurs vidéos au début du thread et une à la fin...

Au passage félicitation pour la nouvelle sortie...



Posté : ven. 19 août 2022, 02:45
par jazira
JohnBob a écrit :Bubb stuff...
jazira a écrit :En tout cas, moi j'en serai incapable.
Eh ben, j'confirme...

J'ai pas pigé un broc de c'qu'i' dit, l'bon Bubb. :(
JohnBob a écrit :Au passage félicitation pour la nouvelle sortie...
Merci. :)

Posté : ven. 19 août 2022, 17:52
par JohnBob
Eh ben, j'confirme...

J'ai pas pigé un broc de c'qu'i' dit, l'bon Bubb.
Ne m'en parle pas c'est une énigme à résoudre tout ça !

Cependant j'avance un peu, j'ai trouver quelques pistes et comprend un tout petit, mais alors un tout petit peu le logiciel "x64dbg"...

Par contre, Je n'arrive toujours pas à retrouver une pattern en fonction du texte....

Bon j'ai pas trop le temps de me pencher sérieusement dessus, mais ça va aller... j'espère !

Posté : ven. 19 août 2022, 19:26
par rivvers
Pour ce que j'ai compris, la chaîne ' LUCK:%d ' à modifier se trouve à l'adresse 00 00 00 01 40 5A D3 10, à chaque fois que l’exécutable a besoin de cette valeur, il va la chercher à cette adresse.
L'idée est de rediriger les appels à cette adresse vers celle qui nous arrange, qu'il a appelé ' LUCK MOD:%d '.
Le problème est d'identifier les appels à cette adresse qui nous arrange pas.
C'est le rôle du Pattern, il s'agit de l'adresse en question mais avec les bytes inversés : 10 D3 5A 40 01 00 00 00 (sinon c'est moins drôle !).
Si je ne dis pas de bêtises tu devrais trouver quelques occurrences à ce pattern dans l'exécutable.

Sinon ba... :gign: