Benvenuto Visitatore(Log In|Registrati)

4 Pagine V   1 2 3 > »   
Reply to this topicStart new topic
> [Completato] FABLE (1996) By Telstar - Sirtech, Conversione Italiana
TheRuler
messaggio16 Dec 2008, 23:24
Messaggio #1



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Sarica qui la patch di conversione da Inglese/Francese in Italiano dell'avventura grafica FABLE by Sirtech/Telstar.



http://www.oldgamesitalia.net/traduzioni/fable-conversione


Fable gira tranquillamente sotto winxp/vista/7 senza modificare alcuna impostazione di compatibilità.

Prima di tutto installare Fable dal file SETUP.EXE che si trova nel CD-ROM (copierà 4 file in cr0ce nella cartella scelta, ad esempio C:\giochi\fable)
Il testo introduttivo, una volta avviata la patch, spiega come procedere :
CITAZIONE
Questa patch trasforma il gioco (versione Windows) dalla versione Inglese o Francese in Italiano (Ad esclusione del parlato che comunque non esiste).
Assicurarsi di aver installato precedentemente il gioco ed aver copiato nella cartella (es. C:\giochi\fable) l'intero contenuto del CD-ROM originale.
Dopo aver applicato la patch eseguire il file "FABLE.reg".


il file FABLE.reg si trova dentro la cartella in cui è stato installato il gioco e quindi applicata la patch.



********************** il post da cui è iniziato il progetto di conversione **************************

Arrivato oggi! Yuppi!

...prima questione...
il gioco è in inglese... ok... ma all'interno dell'exe e dei file di gioco... c'è anche l'ITALIANO!!!!...
exe:
CITAZIONE
Look at Talk to Take Give Use Walk to Examine Drop to with Regarder Parler … Taker Donner Utiliser Marcher … Examiner F Drop … Betrachte Sprich mit Nimm Gib Benutze Gehe zu Untersuche Ablegen an mit S Look at S Talk to S Take S Give S Use S Walk to S Examine S Drop S to S with Guarda Parla con Prendi Dai Usa Vai verso Esamina Lascia a con Inventory Inventoire Inventar S Inventory Inventario Game Options Options de jeux Spieloptionen S Game Options Opzioni di Gioco NATIF VESA SINGLE DOUBLE INFO ENG FRE GER SPA ITA AUTO GAME TITLE CD ROM S F OUTRO $ ANDERS
ENGLISH version selected

FRENCH version selected

GERMAN version selected

SPANISH version selected

ITALIAN version selected

Automatic playback mode selected

All loading from current directory.

All loading from cdrom directory.


da PART1.DAT:

CITAZIONE
Il villaggio di Quickthorpe Š il solo luogo
veramente civilizzato di Balkhane.
Quickthorpe ha passato tutta la sua giovane
vita qui dentro queste mura, dove i veri eroi
sono pochi e il coraggio Š una risorsa rara.$Il villaggio Š antico, e la sua storia Š
circondata da un alone di mistero sin
dalla scomparsa degli Antichi, molti secoli fa.$Il portone Š la sola entrata o uscita dalla
citt…. Dentro ci sono sicurezza, un caldo
giaciglio con la famiglia e le persone care.
Fuori il mondo Š ostile, e le possibilit… di
sopravvivenza sono poche.$Non c'Š niente da fare. Mi hanno proprio
chiuso fuori.



il problema è che non c'è nessuna opzione per il cambio di lingua!

il file fable.cfg presenta questa configurazione:

[PROGRAM]
Type = 1
Language = 0


ma qualunque numero metta non cambia mai nulla...
che sia bloccato su eng?
Qualcuno ha mai affrontato il problema?

Messaggio modificato da TheRuler il 21 Mar 2014, 11:24
Motivo della modifica: Aggiunta patch al primo post.


--------------------
 
Glorifindel
messaggio16 Dec 2008, 23:39
Messaggio #2





Gruppo: Gamer
Messaggi: 608
Iscritto il: 5 February 06
Utente Nr.: 2.660
BGE Broken Sword - The Shadow Of The Templars
Playing Alan Wake
SO Windows7




Ottima notizia!
Se qualcuno ha la versione italiana posti qui la sua configurazione!


--------------------
"Hokey religions and ancient weapons are no match for a good blaster at your side, kid." -Han Solo // "La somma dell'intelligenza sulla terra è costante, la popolazione è in aumento." -ignoto
 
Gharlic
messaggio17 Dec 2008, 00:10
Messaggio #3


Il Grafobrancio
Gruppo icone

Gruppo: UST Member
Messaggi: 6.747
Iscritto il: 11 February 03
Utente Nr.: 2.151
SO Win2000


Direttore (149)


Ma senti che storia! Allora la versione che circolò in Italia (importata da software&co) è la seconda... il personaggio si chiama Quickthorpe, ma non c'è traccia del logo sirtech. Comunque nel fable.cfg della versione italiana è riportato questo:

[PROGRAM]
Type = 1
Language = 4

Adesso m'hai fatto venire la curiosità di sapere come va a finire la versione che ho io, maledetto Rullaccio biggrin.gif


--------------------

«Io ritengo, senza ombra di dubbio, che l'UST sia il miglior gruppo di traduzioni amatoriali che l'Italia abbia avuto negli ultimi 150 anni.» S.B.
 
Glorifindel
messaggio2 Apr 2009, 00:05
Messaggio #4





Gruppo: Gamer
Messaggi: 608
Iscritto il: 5 February 06
Utente Nr.: 2.660
BGE Broken Sword - The Shadow Of The Templars
Playing Alan Wake
SO Windows7




Mi è arrivato oggi Fable dall'Inghilterra (preso in buona parte grazie anche alla scoperta del Rullo) e confermo pienamente che è presente il testo in italiano all'interno dei file part*.dat.
Non riesco però a impostarlo come lingua di gioco, neanche mettendo Language = 4... ci DEVE essere un modo...


--------------------
"Hokey religions and ancient weapons are no match for a good blaster at your side, kid." -Han Solo // "La somma dell'intelligenza sulla terra è costante, la popolazione è in aumento." -ignoto
 
Tsam
messaggio2 Apr 2009, 08:56
Messaggio #5


The Answer
Gruppo icone

Gruppo: Founder
Messaggi: 22.498
Iscritto il: 13 December 03
Da: Brianza
Utente Nr.: 593
The Answer

BGE Monkey Island 1
Playing Machinarium
SO WinVista

'11




Ottime notizie ragazzi..state facendo venire anche a me voglia di recuperarlo..questo caso del doppio finale è quantomeno singolare :-). Così anche il fatto che scavando negli archivi si scoprano queste cose, come ho già detto più volte, non fa che stuzzicarmi in maniera considerevole :-).

Quasi quasi lo recuper! buone indagini nel frattempo.. ciao
tsam

ps il. cfg presenta solo quello per lal ingua? non c'è qualche altra chiamata da qualche parte oppure il file con la lingua non è "numerato"?


--------------------
 
TheRuler
messaggio2 Apr 2009, 12:00
Messaggio #6



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




ho confrontato la mia versione con quella italiana di Indiana e per quanto riguarda i file di configurazione non cambia nulla. Nel senso che puoi modificare quello che vuoi tanto il gioco va nella lingua impostata nell'exe.
Credo sia proprio l'exe che decide... forse creando una patch che interessi solo l'exe potremmo fare in modo di abilitare l'italiano anche nelle versioni straniere...


--------------------
 
The Ancient One
messaggio2 Apr 2009, 12:11
Messaggio #7



Gruppo icone

Gruppo: Admin
Messaggi: 30.471
Iscritto il: 18 April 04
Da: Britannia
Utente Nr.: 1.377
pulley-in-the-middle

BGE Ultima 7
Playing Ultima 7: "Il Portale Oscuro" IN ITALIANO!

Dungeon Master 1 (PC - DosBox)
Sonic (Wii)
Runaway (PC)

SO WinXP




Grande Rullo!

Sarebbe veramente una cosa utilissima!!!


--------------------
 
Tw@in 28
messaggio10 Jan 2010, 12:27
Messaggio #8





Gruppo: Gamer
Messaggi: 8
Iscritto il: 10 January 10
Utente Nr.: 17.288
SO Win2000




Ehm....so che il topic è fermo da Aprile dell'anno scorso, ma....ci sono novità?
Un mio amico francese mi ha regalato la versione cd Francese Sirtech....ho controllato nei files VCD, e sembra che almeno il testo italiano sia ricompreso....ovviamente, nessun risultato alternado il file cfg come sopra specificato....
 
TheRuler
messaggio10 Jan 2010, 15:56
Messaggio #9



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Ciao Tw@in 28, benvenuto su OGI! e grazie per aver rispolverato questo thread.
Ogni tanto fa bene riportare alla mente progetti mollati a metà!
Potresti postare la lista dei files presente nel CD?
nella mia versione inglese non ci sono files .VCD. scratch.gif

Al momento ho fatto una prova creando una patch che converte il gioco da inglese ad italiano. E' venuta di soli 5MB (ci sono differenze minime su praticamente tutti i files), ma purtroppo costringe a ricopiare i files modificati su un nuovo CD: l'exe vuole quei files la' e da nessun'altra parte.
Visto che non esiste un sistema anticopia nell'exe provo a darci una occhiata e capire come poter modificarlo per lasciare i files sull'HD.


--------------------
 
The Ancient One
messaggio11 Jan 2010, 09:59
Messaggio #10



Gruppo icone

Gruppo: Admin
Messaggi: 30.471
Iscritto il: 18 April 04
Da: Britannia
Utente Nr.: 1.377
pulley-in-the-middle

BGE Ultima 7
Playing Ultima 7: "Il Portale Oscuro" IN ITALIANO!

Dungeon Master 1 (PC - DosBox)
Sonic (Wii)
Runaway (PC)

SO WinXP




Grandi!!! n5.gif


--------------------
 
Tw@in 28
messaggio11 Jan 2010, 20:54
Messaggio #11





Gruppo: Gamer
Messaggi: 8
Iscritto il: 10 January 10
Utente Nr.: 17.288
SO Win2000




CITAZIONE (TheRuler @ 10 Jan 2010, 15:56) *
Ciao Tw@in 28, benvenuto su OGI! e grazie per aver rispolverato questo thread.
Ogni tanto fa bene riportare alla mente progetti mollati a metà!
Potresti postare la lista dei files presente nel CD?
nella mia versione inglese non ci sono files .VCD. scratch.gif

Ciao TheRuler, e intanto grazie per aver preso a cuore questa mia richiesta.
Errore mio....MediaPlayer Classic me li leggeva come VCD, in realtà sono semplici files .part.
Ecco la lista dei files nel CD della versione francese.
CODE
DIRECTX (directory)
AUTORUN.EXE
AUTORUN.INF
DECORS.DAT
DISK.ID
DOS4GW.EXE
DSETUP.DLL
DSETUP6E.DLL
DSETUP6J.DLL
DSETUPE.DLL
DSETUPJ.DLL
FABLE.EXW
FABLE.EX_
HERO.DAT
HMIDET.386
HMIDRV.386
INSTALL.DAT
INSTALL.EXE
INTRO.IMX
MISC.DAT
OUTRO.IMX
PART1.DAT
PART2.DAT
PART3.DAT
PART4.DAT
PRESENT.IMX
SETUP.EXE
SETUP.EX_
SETUP.INI
SOS9503.DLL
SOSLIBS3.DLL
SOUNDS.DAT
SPEEC.DAT
TITLE.DAT
TITLE.WAV

CITAZIONE
Al momento ho fatto una prova creando una patch che converte il gioco da inglese ad italiano. E' venuta di soli 5MB (ci sono differenze minime su praticamente tutti i files), ma purtroppo costringe a ricopiare i files modificati su un nuovo CD: l'exe vuole quei files la' e da nessun'altra parte.
Visto che non esiste un sistema anticopia nell'exe provo a darci una occhiata e capire come poter modificarlo per lasciare i files sull'HD.

Cavolo, ma va bene anche così com'è....quindi, se ho capito bene (e qui incrocio le dita) tutte le versioni CD avrebbero potenzialmente tutti i files (anche audio) di tutte le lingue?
Se mi posti la patch così com'è la provo....anche usando un'immagine CD: non è un problema, tanto l'originale lo ho. ^^
 
TheRuler
messaggio11 Jan 2010, 21:29
Messaggio #12



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Il problema è che dovrei avere la versione francese per poter creare la patch (magari ci mettiamo d'accordo via PM).
Intanto ti chiedo di postare anche le dimensioni dei files, così posso vedere se la versione italiana è compatibile con quella francese.
L'exe della versione italiana non funziona se abbinato ai files della versione inglese (va in crash), ma la cosa strana è che funziona viceversa.
Ho trovato l'exe modificato di una versione francese (non mi è utile per la creazione patch visto che non esiste nel cd originale) e se messo sulla versione italiana funziona, ma fa vedere i testi in francese.
La conferma almeno l'abbiamo: i files contengono tutto il testo, anche se sono leggermente diversi, ed è l'exe il responsabile della selezione della lingua.

Prova intanto a sostituire solo l'exe... magari ci va grassa e basta quello.

Se funziona passami il tuo francese che creo la patch.
Files allegati
File Allegato  FABLE.RAR ( 94.78k ) Numero di download: 18
 


--------------------
 
Tw@in 28
messaggio12 Jan 2010, 22:09
Messaggio #13





Gruppo: Gamer
Messaggi: 8
Iscritto il: 10 January 10
Utente Nr.: 17.288
SO Win2000




Allora, intanto posso dire che il gioco si avvia, il menu iniziale è in Inglese, il prologo si vede in Francese ma con sottotitoli in ITA!! ;)
Purtroppo, però, al momento di avviare la nuova partita, il gioco crasha con il seguente errore:
CODICE
The instruction at 0042d888 referenced memory at 4a484746
The memory could not be read from

Click on OK to terminate the application


In ogni caso, siamo sulla buona strada, direi....intanto ecco la lista dei files con le relative dimensioni:
CODICE
D:\ "FABLE_FRENCH"
AUTORUN.EXE    91648    
AUTORUN.INF    29    
DECORS.DAT    21315402    
DISK.ID    14    
DOS4GW.EXE    265396    
DSETUP.DLL    20992    
DSETUP6E.DLL    34400    
DSETUP6J.DLL    34288    
DSETUPE.DLL    41984    
DSETUPJ.DLL    41984    
FABLE.EX_    494699    
FABLE.EXW    311808    
HERO.DAT    4182577    
HMIDET.386    83774    
HMIDRV.386    317317    
INSTALL.DAT    384241    
INSTALL.EXE    164257    
INTRO.IMX    45822473    
MISC.DAT    1263146    
OUTRO.IMX    20078128    
PART1.DAT    7532618    
PART2.DAT    6294786    
PART3.DAT    6625131    
PART4.DAT    2656363    
PRESENT.IMX    6688109    
SETUP.EX_    159109    
SETUP.EXE    100352    
SETUP.INI    1591    
SOS9503.DLL    105472    
SOSLIBS3.DLL    76941    
SOUNDS.DAT    11746305    
SPEECH.DAT    224578458    
TITLE.DAT    2104546    
TITLE.WAV    8069182    
DIRECTX\    DIR


Per la versione Francese, vedo se riesco a fare qualcosa....mi pareva d'averla vista addirittura in giro per il web, qualche tempo fa.... rolleyes.gif

Messaggio modificato da Tw@in 28 il 12 Jan 2010, 22:12
 
TheRuler
messaggio13 Jan 2010, 02:27
Messaggio #14



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Ieri ho avuto tempo di addentrarmi nei meandri
Ma a questo punto ho bisogno di una mano. DK? Syxtem? Alpo?

andiamo per gradi:
Di cosa abbiamo bisogno? che l'exe di fable faccia partire il gioco dalla dir corrente e non dal CD.
Tecnicamente non è un crack, ma un hack, visto che non esiste protezione in fable, e leggendo il codice è previsto.
Ho i 3 exe: francese (hackerato in modo che bypassi il cd check), italiano originale ed inglese originale tutti per windows.
Sono binari compilati con Watcom.
Ho provato a decompilarli con REC.
Ha funzionato, il codice è molto chiaro.
Ho trovato le variabili sia della selezione della lingua che del CD Check (tutto hardcoded, è per quello che i cfg e le chiavi di registro non influivano sulla lingua).

Oltre tutti potremmo essere in grado di risolvere un bug lasciato dai programmatori per la versione italiana...
Presenta il menù iniziale (nuovo gioco, opzioni ecc...) e quello ingame (inventario, vuoi uscire dalla partita) in inglese, pur essendoci il testo in chiaro.
L'exe francese ha il testo completamente tradotto, difatti.


ecco qui i passaggi chiave:

CODICE
L00404bdc:
    *(ebp - 0x70) = *(ebp - 4) - 5;
    if(*(ebp - 0x70) <= 0xc) {
        switch(*(ebp - 0x70)) {
            case 0:
L00404bfc:
                L0042D921("\rENGLISH version selected\n");
                *(ebp - 0xc) = 0x1f4;
                M0043f6f8 = 16384;
                goto L00404b1a;
            case 1:
                L0042D921("\rFRENCH version selected\n");
                *(ebp - 0xc) = 0x1f4;
                M0043f6f8 = 16385;
                goto L00404b1a;
            case 2:
                L0042D921("\rGERMAN version selected\n");
                *(ebp - 0xc) = 0x1f4;
                M0043f6f8 = 16386;
                goto L00404b1a;
            case 3:
                L0042D921("\rSPANISH version selected\n");
                *(ebp - 0xc) = 0x1f4;
                M0043f6f8 = 16387;
                goto L00404b1a;
            case 4:
                L0042D921("\rITALIAN version selected\n");
                *(ebp - 0xc) = 0x1f4;
                M0043f6f8 = 16388;
                goto L00404b1a;
            case 5:
                L0042D921("\rAutomatic playback mode selected\n");
                *(ebp - 0xc) = 0x1f4;
                M0043646b = 1;
                goto L00404b1a;
            case 6:
                M0043646d = 1;
                goto L00404b1a;
            case 7:
                M0043646d = 0;
                goto L00404b1a;
            case 8:
                L0042D921("\rAll loading from current directory.\n");
                *(ebp - 0xc) = 0x1f4;
                M00436488 = 1;
                goto L00404b1a;
            case 9:
                L0042D921("\rAll loading from cdrom directory.\n");
                *(ebp - 0xc) = 0x1f4;
                M00436488 = 0;
                goto L00404b1a;
            case 0xa:
                goto L00404d2c;
            case 0xb:
                goto L00404d6a;
            case 0xc:
                M0043f625 = M0043f625 | 4;
                M0043646d = 0;
                goto L00404b1a;
        }
        goto L00404bfc;
L00404d2c:
        if(*(ebp - 8) + 1 == *(ebp - 0x14)) {
            L0042D921("\rScene parameter incomplete\n");
            *(ebp - 0xc) = 0x1f4;
        } else {
            *(ebp - 8) = *(ebp - 8) + 1;
            eax = *(( *(ebp - 8) << 2) + *(ebp - 0x18));
            L0042D943();
            M004481a0 = ax;
            goto L00404b1a;
L00404d6a:
            if(*(ebp - 8) + 1 == *(ebp - 0x14)) {
                L0042D921("\rScene parameter incomplete\n");
                *(ebp - 0xc) = 0x1f4;
            } else {
                *(ebp - 8) = *(ebp - 8) + 1;
                eax = *(( *(ebp - 8) << 2) + *(ebp - 0x18));
                L0042D943();
                M004481a8 = ax;
            }
        }
    } else {
        L0042D921("\rParameter not valid\n");
        *(ebp - 0xc) = 0x1f4;
    }
    goto L00404b1a;
L00404dd1:
    if(*(ebp - 0xc) != 0) {
        eax = 0x43bed6;
        L0042D9B0();
        eax = *(ebp - 0xc);
        eax = L0042D9C0();
    }
L00404de9:


si nota che il gioco prevede la selezione della lingua e della directory da cui far partire il gioco (medesima dell'exe o CD).

Sono riuscito a modificare il path di modo che punti all'HD, ma con un escamotage: modificando la label del proprio HD in FABLE. Ci ho perso gli occhi con tutti quei rimandi, e non ho trovato un metodo più elegante, ma sono sicuro che se mi date una mano ci saltiamo fuori.

Ho trovato anche la subroutine preposta al riconoscimento della dir, ma non riesco a postarla perchè il server interpreta il codice come malizioso.
Nel file cercate "%c:\"


altro codice interessante:
CODICE
/* 0x0048d32c       0 */ /* unknown */ void     __imp__SetCurrentDirectoryA;
/* 0x0048d32d       0 */ BOOL    SetCurrentDirectoryA(LPCSTR);




allego i 3 sorgenti.
[attachment=5589:Fable_EXE_sources.rar]

Ho scaricato il compiler OPEN Watcom, ma purtroppo non conoscendolo sono riuscito a fare poco.
Secondo voi ci sono controindicazioni a creare l'exe con un altro compilatore?


--------------------
 
Alpobemp
messaggio13 Jan 2010, 10:31
Messaggio #15



Gruppo icone

Gruppo: IAGTG Member
Messaggi: 2.658
Iscritto il: 1 June 05
Da: Roma
Utente Nr.: 1.733
SO Altro

OGI Supporter


Spolveratore (2)


CITAZIONE (TheRuler @ 13 Jan 2010, 02:27) *
Ho scaricato il compiler OPEN Watcom, ma purtroppo non conoscendolo sono riuscito a fare poco.
Secondo voi ci sono controindicazioni a creare l'exe con un altro compilatore?



Scusate se rigiro la frittata, ma perché hackerare il programma per costringerlo a vedere una directory invece del cd, piuttosto che sfruttare uno dei tanti programmi che simulano un drive cd?

Ciao,
Alberto


--------------------
--
alpobemp at libero punto it
 
TheRuler
messaggio13 Jan 2010, 11:36
Messaggio #16



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Secondo me per l'utente copiare dei file e applicare una patch e' piu' facile che copiare-applicare-rimasterizzare-o creare l'immagine e montare.
Oltre tutto si puo' creare un setup che faccia tutto in automatico.


--------------------
 
TheRuler
messaggio13 Jan 2010, 11:58
Messaggio #17



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Ci sono riuscito, ho fatto prima via Hex edit.
Avendo gia' l'exe francese hackerato, e avendo ottenuto la versione francese di Tw@in ho fatto un confronto dei due exe e ho trovato l'offset con la modifica (5 valori portati a 90).
Ho aperto l'exe italiano (che non coincide per dimensioni o contenuto) e ho cercato somiglianze nel codice. Trovata la corrispondenza similare in un offset vicino ho approtato la modifica. Et voila'!
Il caro vecchio Hex Workshop, non ti delude mai.

ieri sera per prova ho creato la patch omnicomprensiva ENG-FRE to ITA.
Purtroppo, se per la versione italiana l'audio e' in inglese, per la versione francese e' proprio in francese (purtroppo per noi, non certo per loro!)!
Quindi la patch completa viene 120MB circa.

Potremmo creare 3 patch separate:
Eng to ita da 5 MB
Fre to ita (solo testi e lascia il parlato in francese) da 5 MB
Fre to ita da 120 MB


che ne dite?


--------------------
 
Syxtem
messaggio13 Jan 2010, 12:42
Messaggio #18



Gruppo icone

Gruppo: UST Member
Messaggi: 497
Iscritto il: 17 February 03
Utente Nr.: 2.153
SO Win95




Siete stati troppo veloci... non ho nemmeno avuto il tempo di postare tutto il codice assembly che vi avevo commentato per il check sul CD ^^"


--------------------
 
TheRuler
messaggio13 Jan 2010, 13:12
Messaggio #19



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Aspetta pure...
lo voglio lo stesso! posta posta...
non sono ferrato in Assembly, quindi mi fa piacere vedere come hai operato. per prendere nota, ovviamente.


--------------------
 
Syxtem
messaggio13 Jan 2010, 13:39
Messaggio #20



Gruppo icone

Gruppo: UST Member
Messaggi: 497
Iscritto il: 17 February 03
Utente Nr.: 2.153
SO Win95




Boh, vabbè...
CITAZIONE
Sono riuscito a modificare il path di modo che punti all'HD, ma con un escamotage: modificando la label del proprio HD in FABLE.

Per eludere il controllo sulla label del dispositivo è sufficiente andare all'offset 0x5CE8 e modificare i successivi due byte da 0x7521 a 0x9090.
Evito di riportare le mie congetture su come trasferire la lettura dei file del gioco dal CD-ROM ad una cartella sull'HD, dato che il problema pare essere già stato risolto.
Ah... tutti gli indirizzi fanno riferimento all'eseguibile che si trovava nell'allegato FABLE.RAR (l'ultimo allegato di TheRuler non mi si collega a nulla)

Questo è il disassemblato completo della routine che controlla dove si trova il CD del gioco: ve lo metto in uno spoiler così il post sembra più sintetico. L'ho fatto un po' velocemente e non è commentato all'estremo, ma chi ci capisce un po' non dovrebbe avere molta difficoltà nel comprenderne i punti più importanti.
CODICE
Fase 0: Rileva tutti i drive presenti sul computer (floppy, dischi rigidi, cd-rom, penne usb, etc...)
BEGTEXT:00406813                         loc_406813:                            ; CODE XREF: sub_4067D7+1Fj
BEGTEXT:00406813 2E FF 15 04 D2 48 00                    call    cs:GetLogicalDrives; Get bitmask representing
BEGTEXT:00406813                                                                ; the currently available disk drives
BEGTEXT:0040681A 89 45 F0                                mov     [ebp+var_10], eax
BEGTEXT:0040681D C7 45 F8 43 00 00 00                    mov     [ebp+var_8], 43h; SelectedDrive == "C:\"
BEGTEXT:00406824
BEGTEXT:00406824                         loc_406824:                            ; CODE XREF: sub_4067D7+5Bj
BEGTEXT:00406824 83 7D F8 5A                             cmp     [ebp+var_8], 5Ah;  Check: if (SelectedDrive <= "Z:\") JUMP
BEGTEXT:00406828 7E 0A                                   jle     short loc_406834; Vai a Fase 1
BEGTEXT:0040682A EB 52                                   jmp     short loc_40687E; Vai a Fase 2
BEGTEXT:0040682C                        ; ---------------------------------------------------------------------------
BEGTEXT:0040682C
BEGTEXT:0040682C                         loc_40682C:                            ; CODE XREF: sub_4067D7:loc_40687Cj
BEGTEXT:0040682C 8B 45 F8                                mov     eax, [ebp+var_8]
BEGTEXT:0040682F FF 45 F8                                inc     [ebp+var_8]    ; SelectedDrive == Drive successivo
BEGTEXT:00406832 EB F0                                   jmp     short loc_406824
BEGTEXT:00406834                        ; ---------------------------------------------------------------------------

Fase 1: Controlla i drive che sono dei CD-ROM
(notare che poi se ne frega dei risultati ottenuti, e che poi comunque ricontrolla tutti i drive --> Codice inutile)
BEGTEXT:00406834
BEGTEXT:00406834                         loc_406834:                            ; CODE XREF: sub_4067D7+51j
BEGTEXT:00406834 8B 45 F8                                mov     eax, [ebp+var_8]
BEGTEXT:00406837 C6 44 28 89 00                          mov     byte ptr [eax+ebp-77h], 0; Drives[selectedIndex] == "invalid"
BEGTEXT:0040683C 8B 4D F8                                mov     ecx, [ebp+var_8]
BEGTEXT:0040683F 83 E9 43                                sub     ecx, 43h
BEGTEXT:00406842 B8 01 00 00 00                          mov     eax, 1
BEGTEXT:00406847 D3 E0                                   shl     eax, cl
BEGTEXT:00406849 85 45 F0                                test    [ebp+var_10], eax
BEGTEXT:0040684C 74 2E                                   jz      short loc_40687C
BEGTEXT:0040684E 8B 45 F8                                mov     eax, [ebp+var_8]
BEGTEXT:00406851 50                                      push    eax
BEGTEXT:00406852 B8 43 45 43 00                          mov     eax, offset aC ; "%c:\\"
BEGTEXT:00406857 50                                      push    eax
BEGTEXT:00406858 8D 45 EC                                lea     eax, [ebp+RootPathName]
BEGTEXT:0040685B 50                                      push    eax
BEGTEXT:0040685C E8 47 75 02 00                          call    loc_42DDA8
BEGTEXT:00406861 83 C4 0C                                add     esp, 0Ch
BEGTEXT:00406864 8D 45 EC                                lea     eax, [ebp+RootPathName]
BEGTEXT:00406867 50                                      push    eax            ; lpRootPathName
BEGTEXT:00406868 2E FF 15 00 D2 48 00                    call    cs:GetDriveTypeA
BEGTEXT:0040686F 83 F8 05                                cmp     eax, 5
BEGTEXT:00406872 75 08                                   jnz     short loc_40687C; Check: if (SelectedDriveType != "CD-ROM") JUMP
BEGTEXT:00406874 8B 45 F8                                mov     eax, [ebp+var_8]
BEGTEXT:00406877 C6 44 28 89 01                          mov     byte ptr [eax+ebp-77h], 1; Drives[selectedIndex] == "valid"
BEGTEXT:0040687C
BEGTEXT:0040687C                         loc_40687C:                            ; CODE XREF: sub_4067D7+75j
BEGTEXT:0040687C                                                                ; sub_4067D7+9Bj
BEGTEXT:0040687C EB AE                                   jmp     short loc_40682C
BEGTEXT:0040687E                        ; ---------------------------------------------------------------------------


BEGTEXT:0040687E
BEGTEXT:0040687E                         loc_40687E:                            ; CODE XREF: sub_4067D7+53j
BEGTEXT:0040687E                                                                ; sub_4067D7+154j
BEGTEXT:0040687E C7 45 F4 00 00 00 00                    mov     [ebp+var_C], 0
BEGTEXT:00406885 C7 45 F8 43 00 00 00                    mov     [ebp+var_8], 43h; SelectedDrive == "C:\"
BEGTEXT:0040688C
BEGTEXT:0040688C                         loc_40688C:                            ; CODE XREF: sub_4067D7+C6j
BEGTEXT:0040688C 83 7D F8 5A                             cmp     [ebp+var_8], 5Ah;  Check: if (SelectedDrive <= "Z:\") JUMP
BEGTEXT:00406890 7E 0D                                   jle     short loc_40689F; Vai a Fase 2
BEGTEXT:00406892 E9 76 00 00 00                          jmp     loc_40690D     ; Vai a "Errore: CD-ROM non trovato"
BEGTEXT:00406897                        ; ---------------------------------------------------------------------------
BEGTEXT:00406897
BEGTEXT:00406897                         loc_406897:                            ; CODE XREF: sub_4067D7:loc_40690Bj
BEGTEXT:00406897 8B 45 F8                                mov     eax, [ebp+var_8]
BEGTEXT:0040689A FF 45 F8                                inc     [ebp+var_8]    ; SelectedDrive == Drive successivo
BEGTEXT:0040689D EB ED                                   jmp     short loc_40688C
BEGTEXT:0040689F                        ; ---------------------------------------------------------------------------

Fase 2: Ottieni le informazioni di volume di ogni drive e cerca quello con etichetta "Fable"
BEGTEXT:0040689F
BEGTEXT:0040689F                         loc_40689F:                            ; CODE XREF: sub_4067D7+B9j
BEGTEXT:0040689F 8B 45 F8                                mov     eax, [ebp+var_8]
BEGTEXT:004068A2 50                                      push    eax
BEGTEXT:004068A3 B8 43 45 43 00                          mov     eax, offset aC ; "%c:\\"
BEGTEXT:004068A8 50                                      push    eax
BEGTEXT:004068A9 8D 45 EC                                lea     eax, [ebp+RootPathName]
BEGTEXT:004068AC 50                                      push    eax
BEGTEXT:004068AD E8 F6 74 02 00                          call    loc_42DDA8
BEGTEXT:004068B2 83 C4 0C                                add     esp, 0Ch
BEGTEXT:004068B5 6A 00                                   push    0              ; nFileSystemNameSize
BEGTEXT:004068B7 6A 00                                   push    0              ; lpFileSystemNameBuffer
BEGTEXT:004068B9 6A 00                                   push    0              ; lpFileSystemFlags
BEGTEXT:004068BB 6A 00                                   push    0              ; lpMaximumComponentLength
BEGTEXT:004068BD 6A 00                                   push    0              ; lpVolumeSerialNumber
BEGTEXT:004068BF 6A 20                                   push    20h            ; nVolumeNameSize
BEGTEXT:004068C1 8D 45 A8                                lea     eax, [ebp+VolumeNameBuffer]
BEGTEXT:004068C4 50                                      push    eax            ; lpVolumeNameBuffer
BEGTEXT:004068C5 8D 45 EC                                lea     eax, [ebp+RootPathName]
BEGTEXT:004068C8 50                                      push    eax            ; lpRootPathName
BEGTEXT:004068C9 2E FF 15 08 D2 48 00                    call    cs:GetVolumeInformationA
BEGTEXT:004068D0 85 C0                                   test    eax, eax
BEGTEXT:004068D2 74 37                                   jz      short loc_40690B
BEGTEXT:004068D4 BB 05 00 00 00                          mov     ebx, 5
BEGTEXT:004068D9 BA 48 45 43 00                          mov     edx, offset aFable_0; "FABLE"
BEGTEXT:004068DE 8D 45 A8                                lea     eax, [ebp+VolumeNameBuffer]
BEGTEXT:004068E1 E8 F2 74 02 00                          call    loc_42DDD8     ; Check_Drive_Label("FABLE",SelectedDriveLabel)
BEGTEXT:004068E6 85 C0                                   test    eax, eax
BEGTEXT:004068E8 75 21                                   jnz     short loc_40690B; Check: if (upcase(SelectedDriveLabel) != "FABLE") JUMP
BEGTEXT:004068EA 8B 45 F8                                mov     eax, [ebp+var_8]
BEGTEXT:004068ED 50                                      push    eax
BEGTEXT:004068EE B8 43 45 43 00                          mov     eax, offset aC ; "%c:\\"
BEGTEXT:004068F3 50                                      push    eax
BEGTEXT:004068F4 B8 04 85 44 00                          mov     eax, offset unk_448504
BEGTEXT:004068F9 50                                      push    eax
BEGTEXT:004068FA E8 A9 74 02 00                          call    loc_42DDA8
BEGTEXT:004068FF 83 C4 0C                                add     esp, 0Ch
BEGTEXT:00406902 C7 45 FC 01 00 00 00                    mov     [ebp+var_4], 1 ; ReturnValue == SelectedDriveOK
BEGTEXT:00406909 EB 2D                                   jmp     short loc_406938
BEGTEXT:0040690B                        ; ---------------------------------------------------------------------------
BEGTEXT:0040690B
BEGTEXT:0040690B                         loc_40690B:                            ; CODE XREF: sub_4067D7+FBj
BEGTEXT:0040690B                                                                ; sub_4067D7+111j
BEGTEXT:0040690B EB 8A                                   jmp     short loc_406897
BEGTEXT:0040690D                        ; ---------------------------------------------------------------------------
BEGTEXT:0040690D
BEGTEXT:0040690D                         loc_40690D:                            ; CODE XREF: sub_4067D7+BBj
BEGTEXT:0040690D BA 4E 45 43 00                          mov     edx, offset aFableCdRomMiss; "FABLE CD-ROM missing!"
BEGTEXT:00406912 B8 64 45 43 00                          mov     eax, offset aPleaseInsertTh; "Please insert the FABLE CD-ROM in any C"...
BEGTEXT:00406917 E8 96 AB FF FF                          call    sub_4014B2     ; ShowDialogBox(text,title)
BEGTEXT:0040691C 85 C0                                   test    eax, eax
BEGTEXT:0040691E 75 07                                   jnz     short loc_406927
BEGTEXT:00406920 C7 45 F4 01 00 00 00                    mov     [ebp+var_C], 1
BEGTEXT:00406927
BEGTEXT:00406927                         loc_406927:                            ; CODE XREF: sub_4067D7+147j
BEGTEXT:00406927 83 7D F4 00                             cmp     [ebp+var_C], 0
BEGTEXT:0040692B 0F 84 4D FF FF FF                       jz      loc_40687E     ; if (BottonClick == "Retry") JUMP
BEGTEXT:00406931 C7 45 FC 00 00 00 00                    mov     [ebp+var_4], 0 ; ReturnValue == SelectedDriveFAIL
BEGTEXT:00406938
BEGTEXT:00406938                         loc_406938:                            ; CODE XREF: sub_4067D7+37j
BEGTEXT:00406938                                                                ; sub_4067D7+132j
BEGTEXT:00406938 8B 45 FC                                mov     eax, [ebp+var_4]
BEGTEXT:0040693B 89 EC                                   mov     esp, ebp
BEGTEXT:0040693D 5D                                      pop     ebp
BEGTEXT:0040693E 5F                                      pop     edi
BEGTEXT:0040693F 5E                                      pop     esi
BEGTEXT:00406940 5A                                      pop     edx
BEGTEXT:00406941 59                                      pop     ecx
BEGTEXT:00406942 5B                                      pop     ebx
BEGTEXT:00406943 C3                                      retn


--------------------
 
TheRuler
messaggio13 Jan 2010, 13:50
Messaggio #21



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Grazie Syx!

con che programma lo hai disassemblato?

Ho contattato qualche giorno fa l'autore francese dell'hack. Non si ricordava come avesse fatto di preciso (sono passati anni) ma mi disse che bastava mettere noop tutta la routine di check del CD.
Io ci ho provato, ma non riuscendo a ricompilare ero fermo.
Congettura simile?

ottimo lavoro syx!
Sicuramente piu' professionale del mio ;-)





--------------------
 
Syxtem
messaggio13 Jan 2010, 14:16
Messaggio #22



Gruppo icone

Gruppo: UST Member
Messaggi: 497
Iscritto il: 17 February 03
Utente Nr.: 2.153
SO Win95




CITAZIONE (TheRuler @ 13 Jan 2010, 13:50) *
con che programma lo hai disassemblato?
Sempre e solo IDA.

CITAZIONE (TheRuler @ 13 Jan 2010, 13:50) *
bastava mettere noop tutta la routine di check del CD. Congettura simile?
Beh, sì, in questo caso i NOP diventano 5, però la mia strada era un po' più complicata. Il rischio infatti era che il percorso sul drive individuato, venendo considerato poi per l'accesso ai file, potesse provocare delle eccezioni nel caso non avesse puntato a percorsi corretti. E temevo che quella routine servisse sì per effettuare il check sulla label del Drive CD-ROM, ma anche per memorizzare da qualche parte il percorso dei file del disco da leggere (cosa che infatti fa)... perciò bypassare completamente quella funzione poteva voler dire non far sapere al programma dove cercare i files.
Tramite i NOP che ho indicato, invece, il programma comunque faceva i propri lavori... e poi restituiva il C:\ come "percorso del cd-rom" (poichè è il primo drive che viene esaminato e con l'hack viene immediatamente accettato come valido). Poi ovvio, bisognava modificare le cose per evitare di dover buttare i file direttamente in C:\ (magari in una sottocartella), ma questo dipendeva anche dal contenuto del CD-ROM, e senza avere il gioco era difficile fare delle prove... così ho preferito non andare oltre nelle varie ipotesi di lavoro e "spiegare" direttamente il codice assembly per fare un po' decidere a voi.
Non so se si è capito un po' il ragionamento che c'è stato dietro...


--------------------
 
TheRuler
messaggio13 Jan 2010, 14:43
Messaggio #23



Gruppo icone

Gruppo: SMod
Messaggi: 14.545
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Sei stato chiarissimo, come sempre.

E' stato possibile mettere NOP tutta la routine di check CD secondo me perche' il precedente caso prevedeva gia' una soluzione:
L0042D921("\rAll loading from current directory.\n");


I sorgenti che ho linkato prima effettuivamente sono stati cancellati dal server. Non so come mai.
Per ricompilare cosa avresti usato?


--------------------
 
Syxtem
messaggio13 Jan 2010, 15:00
Messaggio #24



Gruppo icone

Gruppo: UST Member
Messaggi: 497
Iscritto il: 17 February 03
Utente Nr.: 2.153
SO Win95




Oddio... io non avrei proprio ricompilato. Avrei modificato il codice direttamente da editor esadecimale (o al limite con HIEW, che ti permette di scrivere nell'eseguibile direttamente in asm).
Il processo di "decompilazione/ricompilazione" in genere non è mai troppo sicuro poichè intanto non è detto che il file globalmente sia stato decompilato correttamente. Inoltre spesso e volentieri non viene decompilato tutto il file, ma solo ciò che viene riconosciuto. Per fare un esempio, anche IDA non disassembla automaticamente l'intero file (per mille ragioni), per cui non è possibile riassemblare il programma partendo dal codice che ha estrapolato. Inoltre la ricompilazione potrebbe far variare gli indirizzi di memoria precedentemente fissati: i nuovi potrebbero non essere più "compatibili" con risorse esterne come .dll o altro...
Insomma, in genere la decompilazione può essere utile nel caso si voglia avere qualcosa di più semplice da leggere rispetto al codice asm, ma non ho mai sentito di gente che abbia usato questi strumenti per riscrivere le stesse applicazioni che erano state decompilate.


--------------------
 
George Threepwoo...
messaggio13 Jan 2010, 22:32
Messaggio #25





Gruppo: Gamer
Messaggi: 240
Iscritto il: 10 April 09
Utente Nr.: 16.517
BGE Monkey island 2
Playing jack orlando director's cut
SO BeOS




Anche la mia è quella inglese semplice della telstar: "Quickthorpe's village is the only truly
civilized habitation on Balkhane. He has
spent all of his young life within these walls"... :(


--------------------
Lui è Ricardo, il Re Leone dagli occhi d'argento.
 

4 Pagine V   1 2 3 > » 
Reply to this topicStart new topic
1 utenti stanno leggendo questa discussione (1 visitatori e 0 utenti anonimi)
0 utenti:

 

Modalità di visualizzazione: Normale · Passa a: Lineare · Passa a: Outline


Versione Lo-Fi Oggi è il: 31st October 2026 - 18:25