Benvenuto Visitatore(Log In|Registrati)
![]() ![]() |
14 Mar 2009, 10:32
Messaggio
#76
|
|
Gruppo: Admin Messaggi: 2.672 Iscritto il: 27 August 04 Utente Nr.: 1.509 BGE Indy and The Last Crusade SO Windows7 OGI Supporter |
E la possibilità che i giochi Legend vengano supportati dallo ScummVM è molto improbabile; sembra infatti che tutta la logica del gioco sia inserita nell'eseguibile (o da qualche altra parte), non c'è quindi un comodo sistema di script.
|
|
|
|
22 Mar 2009, 12:46
Messaggio
#77
|
|
Gruppo: UST Member Messaggi: 497 Iscritto il: 17 February 03 Utente Nr.: 2.153 SO Win95 |
Oggi sono andato un po' avanti con il lavoro sul codificatore. Mi sono occupato della selezione delle parole del dizionario (in base alla frequenza) e dovrei avercela fatta, ma c'è qualcosa che non mi convince.
Il problema è che con un rapido confronto si vede che il dizionario che mi salta fuori non coincide con quello contenuto nei file originali. Eppure, nel mio dizionario (128 voci) la parola con frequenza minore ha 121 occorrenze... nel dizionario originale invece si trovano parole con frequenza minore di 121: qualcosa non quadra. Boh... specificando che cmq il formato dovrebbe essere valido con qualunque tipo di dizionario scelto (dato che la scelta di esso influisce solamente sulla dimensione del file finale), un po' mi dà fastidio che mi vengano due risultati diversi e mi domando il perchè Presupponendo che la soluzione più efficiente sia l'originale (non posso ancora fare raffronti diretti visto che ancora non ho fatto le routine per ottenere la codifica dello stream compresso di bit), e siccome si è notato che il criterio di scelta per le parole nel dizionario non è il semplice "conta il numero di occorrenze di ogni parola e prendi le 128 parole più frequenti"... qualcuno ha qualche idea su quale possa essere il vero criterio per la scelta delle parole del dizionario? Non so... a me viene da pensare che il motivo sia perchè magari alcune parole hanno un po' meno occorrenze però sono formate da più caratteri e quindi in rapporto "pesano" di più poiche forse alla fine fanno risparmiare bit, però adesso come adesso è solo una mia congettura. Intanto sono indeciso se mi convenga continuare ad insistere su questo punto (finchè mi salta fuori il dizionario uguale) o se mi convenga invece di più tenermi il dizionario com'è venuto e andare avanti. Cmq se qualcuno è curioso del risultato, questi sono 3 file relativi alla creazione del dizionario.
tmpConfrontoDizionariShannara.zip ( 3.42k )
Numero di download: 7Il primo è quello del file originale (che viene ordinato per nome), mentre gli altri due sono i miei dizionari: uno ordinato per nome e l'altro per n° di occorrenze. Ah... tanto per essere precisi: per parola si intende una sequenza di caratteri che possa contenere lettere (maiuscole o minuscole) o apostrofi, e uno spazio finale (facoltativo). Si tratta di una scelta arbitraria dedotta dal dizionario originale. Se qualcuno crede che questa ipotesi vada riconsiderata, me lo dica [uno sguardo al futuro Che poi mi rendo conto ora che per una traduzione in italiano tra "lettere" in cui considerare una parola, io debba includere anche le accentate ad esempio... poi magari qualcuno mi faccia un esempio di questi caratteri un po' "speciali" perchè poi questi li devo inserire uno per uno. E poi come contro parte probabilmente la scelta di tenere l'apostrofo per noi italiani è una scelta un po' svantaggiosa: ad esempio si avrà che "all'aperto" = 1 "all'ingresso" = 1 "aperto" = 1 invece di avere magari: "all'" = 2 "aperto" = 2 "ingresso" = 1 Poi bisognerà decidere se modificare questa regola per favorire la grammatica italiana o se preferire una regola più vicina a quella originale. Cmq vabbè... queste sono considerazioni di ottimizzazione che si possono fare anche in un secondo momento. Più che altro l'ho voluto scrivere visto che modificare due cose come queste è proprio questione di un paio di minuti. -------------------- ![]() ![]() |
|
|
|
23 Mar 2009, 12:57
Messaggio
#78
|
|
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 |
Che poi mi rendo conto ora che per una traduzione in italiano tra "lettere" in cui considerare una parola, io debba includere anche le accentate ad esempio... poi magari qualcuno mi faccia un esempio di questi caratteri un po' "speciali" perchè poi questi li devo inserire uno per uno. Dovrebbero bastare questi: CODE à è é ì ò ù ' CITAZIONE E poi come contro parte probabilmente la scelta di tenere l'apostrofo per noi italiani è una scelta un po' svantaggiosa: ad esempio si avrà che "all'aperto" = 1 "all'ingresso" = 1 "aperto" = 1 invece di avere magari: "all'" = 2 "aperto" = 2 "ingresso" = 1 Poi bisognerà decidere se modificare questa regola per favorire la grammatica italiana o se preferire una regola più vicina a quella originale. Cmq vabbè... queste sono considerazioni di ottimizzazione che si possono fare anche in un secondo momento. Più che altro l'ho voluto scrivere visto che modificare due cose come queste è proprio questione di un paio di minuti. Nella prima parte ho capito veramente ben poco. Ma anche questa seconda parte mi sfugge. Non capisco cosa sono i numeri... Detto questo, avere le lettere accentate corrette sarebbe il massimo. Anche se forse potrebbe creare qualche problema: molti sono quelli che non le scrivono correttamente (io per primo). Quindi in un parser questo potrebbe creare incomprensioni assurde. Voi che dite? Detto questo, credo che l'importante sia poter tradurre il gioco. Meglio un " perche' " in un gioco in italiano, che nessuna traduzione, non vi pare? -------------------- |
|
|
|
23 Mar 2009, 15:31
Messaggio
#79
|
|
Gruppo: UST Member Messaggi: 497 Iscritto il: 17 February 03 Utente Nr.: 2.153 SO Win95 |
Che poi, ora che ci penso bene, non è nemmeno detto che le lettere accentate funzionino
Cioè, inserire il codice per gestire i byte delle lettere accentate non è un problema, ma io ho dato per scontato, in tutto questo discorso, che il programma sia capace di "disegnare le lettere accentate"... ma questo è ancora tutto da dimostrare. Anzi, a dire il vero sono piuttosto pessimista perchè se è vero che la codifica per i caratteri è l'ASCII a 7bit... beh, allora di sicuro non sono presenti le lettere accentate, visto che fanno parte dell'ASCII esteso a 8bit. Insomma... probabilmente per le accentate non c'è verso (sempre andando ad intuizione), cmq si vedrà. Per risponderti invece, quell'esempio riguarda il dizionario del gioco. Mi sono reso conto che non l'ho spiegato un gran che bene, così spero di rimediare ora. Fai conto che ogni carattere del testo di gioco normalmente è codificato con 7 bit. Quindi se una parola contiene 10 caratteri, la sua dimensione è 70bit. Siccome il testo è compresso, si ha che ognuno di questi caratteri non occupa 7bit, ma generalmente meno: la codifica impiegata (huffman) utilizza un numero di bit, necessari a codificare un particolare carattere, che è variabile. Fai conto che in pratica la codifica huffman genera una sorta di tabellina in cui c'è la corrispondenza "sequenza di bit compressi -> carattere del testo del gioco". Questa tabella che viene creata ha 256 righe, ossia il doppio di quelle necessarie per elencare ogni carattere possibile. Che cosa se ne fa di queste righe in più? Le usa per costruire un "dizionario" che avrà quindi 128 voci. Per capire a cosa serve e come funziona, mettiamo il caso che la tabella huffman sia fatta così: - identifico la sequenza di bit con delle lettere maiuscole, per intenderci - tra parentesi graffe ho messo una dimensione a caso, che indica il n° di bit compressi che indicano una particolare lettera CODICE [N°Riga]: [bitCompressi] -> [lettera] 0: A{4} -> s 1: B{2} -> a 2: C{3} -> n ... 128: D{8} -> ananas ... In pratica il dizionario si contraddistingue dal resto della tabella perchè, invece di caratteri singoli, contiene sequenze di caratteri e quindi parole. Questa strategia serve per incrementare l'efficienza della compressione ed è facile rendersene conto. Se ho la parola "ananas" da memorizzare e: 1) la memorizzo non compressa... la parola è di 6 caratteri, di cui ognuno occupa 7 bit. Perciò mi occorrono 6*7=42 bit. 2) la memorizzo compressa senza dizionario... in "ananas" ci sono 3 "a", 2 "n" e 1 "s". Il n° di bit necessario per ogni carattere è rispettivamente "2","3" e "4" (secondo i valori che ho indicato prima nella tabella). Perciò mi occorrono 3*2+2*3+1*4=16 bit. La sequenza di bit che andrò ad inserire sarà (sfruttando le lettere che ho usato nella tabella): BCBCBA 3) lo memorizzo compressa col dizionario... mi accorgo che la parola "ananas" è contenuta nel dizionario e perciò posso codificarla con la sequenza di bit del dizionario (che mi rappresenta direttamente tutta la parola). Perciò in questo caso mi occorrono solo 8 bit e la sequenza di bit che userò sarà semplicemente: D Questa diciamo che è tutta la teoria necessaria per capire come funziona questo tipo di compressione. Ora, tornando al mio discorso, il problema diventa decidere il procedimento per scegliere le parole da inserire nel dizionario. Se te ad esempio hai nel testo del gioco "ananas ananas ananas ananas", potresti decidere di inserire nel dizionario la parola "ananas"(X) o anche "ananas ananas"(Y). Mentre nel primo caso la stringa compressa diventerebbe "X X X X", nel secondo sarebbe "Y Y". Quindi useresti la stessa parola del dizionario meno volte, perchè è più specifica. Questo significa che in questo caso particolare, il risultato finale peserebbe meno... ma se nel resto del testo ci fosse da altre parti la sola parola "ananas" e basta non potresti usare la voce "Y" (mentre nel caso di "X" potevi farlo). Il discorso era questo e il numero a destra delle parole indicava la frequenza. Insomma, visto che usare le parole del dizionario comporta più risparmio, maggiore il n° di volte che quelle parole possono essere utilizzate con le frasi del gioco, meglio è (questo non è proprio vero nella sua totalità, ma come discorso di sintesi può andare bene)- Ora è diventato più chiaro il mio discorso di prima? -------------------- ![]() ![]() |
|
|
|
23 Mar 2009, 15:47
Messaggio
#80
|
|
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 |
Ora è diventato più chiaro il mio discorso di prima? Infinitamente più chiaro. Anche se la colpa non era tua. Sono io che di certe cose non me ne intendo proprio e quindi ho bisogno di una spiegazione veramente terra-terra. Comunque, dimmi un pò, in estrema sintesi: come procede? C'è speranza di poter tradurre questi giochi Legend? (perdona le domande "riduttive", ma in mezzo a queste disquisizioni tecniche ho perso il filo generale del discorso). -------------------- |
|
|
|
23 Mar 2009, 17:37
Messaggio
#81
|
|
Gruppo: UST Member Messaggi: 497 Iscritto il: 17 February 03 Utente Nr.: 2.153 SO Win95 |
CITAZIONE C'è speranza di poter tradurre questi giochi Legend? Se con questa domanda intendi chiedermi se c'è la possibilità di arrivare ad avere un compressore per i file del gioco, direi che la risposta è sì. Che poi si possa tradurre in maniera efficace, dato il parser inglese, io nutro qualche dubbio... ad ogni modo io mi limito a guardare il compressore (più che altro per me è un'occasione per lavorare con la codifica Huffman). Il senso è che probabilmente riuscirò a fare un compressore che riesca a ricreare dei file compressi compatibili con quelli di Shannara (mi sto dedicando esplicitamente a questo gioco visto che è quello di cui ho i file compressi), ma molto probabilmente il compressore non sarà esattamente uguale a quello originale, per cui decomprimendo un file originale e ricomprimendolo col mio programma probabilmente i file saranno diversi tra loro. I motivi ve li ho un po' snocciolati prima. Per fare un po' il punto della situazione, diciamo che le cose che mi rimangono da fare sono: 1) calcolare la probabilità di ogni carattere/parola 2) costruire l'albero di huffman per la codifica dei bit compressi 3) scrivere tutto quanto codificato nel file di output. Non so ancora quanto mi ci voglia. Purtroppo in questo periodo non gli sto dedicando molto tempo, visto che sono in periodo di esami -------------------- ![]() ![]() |
|
|
|
4 Jan 2013, 11:59
Messaggio
#82
|
|
|
Gruppo: IAGTG Member Messaggi: 2.658 Iscritto il: 1 June 05 Da: Roma Utente Nr.: 1.733 SO Altro OGI Supporter ![]() Spolveratore (2) |
Comunque, l'esperienza diretta che ho è che le sh spesso comprimevano i file di gioco, sia per ridurre lo spazio sui dischetti (anche se Shannara, nello specifico, era uscito per cdrom, se non erro) sia per criptare i testi sia per impedire il reverse engineering, utilizzando dei compressori che molto intuitivamente non erano dei compressori "di mercato" o pubblici, ma in alcuni casi modificavano leggermente un modello. Mi ricordo che DK con i "francesi" venne a capo proprio di un caso come questo quando si trattò di decifrare i file dei giochi Microprose: un algoritmo di compressione che era anche di dominio pubblico, era stato leggermente modificato in modo da rendere inutilizzabile il decompressore "standard". Non mancano i casi invece di sh meno smaliziate: Personal Nightmare o Neuromancer, uno dei due, non ho tempo di controllare, è compresso ... con un semplice pkzip (i primi due byte erano "PK").* Ciao, Alberto * EDIT: Ho controllato, non era né l'uno né l'altro, un giorno mi verrà in mente. Ciao, Alberto Messaggio modificato da Alpobemp il 4 Jan 2013, 12:00 -------------------- --
alpobemp at libero punto it |
|
|
|
4 Jan 2013, 12:17
Messaggio
#83
|
|
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 |
Alpo... Non fare scherzi. Non si scherza con i giochi della Legend. Se hai decomprosso qualcosa, devi dirlo!!!!!!!!!!!!! E dobbiamo metterci a tradurli TUTTI! -------------------- |
|
|
|
4 Jan 2013, 12:20
Messaggio
#84
|
|
Gruppo: SMod Messaggi: 10.006 Iscritto il: 7 May 04 Da: Regione dell'Albero d'Oro Utente Nr.: 1.400 BGE Elvira 1 SO WinXP |
Spellcasting, Eric... parla! XD
-------------------- ![]() |
|
|
|
4 Jan 2013, 12:23
Messaggio
#85
|
|
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 |
-------------------- |
|
|
|
4 Jan 2013, 13:31
Messaggio
#86
|
|
|
Gruppo: IAGTG Member Messaggi: 2.658 Iscritto il: 1 June 05 Da: Roma Utente Nr.: 1.733 SO Altro OGI Supporter ![]() Spolveratore (2) |
Non ci siamo: riquoto meglio ed aggiungo altre vecchie autocitazioni per collocare meglio l'ambito.
Ad ogni modo sto conducendo esperimenti e verifiche, ci sarebbe anche da mettere mano in parte all'eseguibile. CITAZIONE Non mancano i casi invece di sh meno smaliziate: Personal Nightmare o Neuromancer, uno dei due, non ho tempo di controllare, è compresso ... con un semplice pkzip (i primi due byte erano "PK").* Ciao, Alberto * EDIT: Ho controllato, non era né l'uno né l'altro, un giorno mi verrà in mente. C'è invece, tanto per fare un altro esempio, un'altra ag, non ricordo bene cos'era, che aveva i file di risorsa semplicemente zippati con il pkzip ... Ciao, Alberto Ciao, Alberto -------------------- --
alpobemp at libero punto it |
|
|
|
![]() ![]() |
| Versione Lo-Fi | Oggi è il: 4th November 2026 - 07:09 |