ShinHelp

Aperto da inutilities, Ottobre 20, 2007, 01:26:55

Discussione precedente - Discussione successiva

inutilities

Ho cambiato topic in quanto in quell'altro si stava decisamente uscendo di tema. In questo vorrei discutere più profondamente dello sviluppo di "ShinHelp"(il mio programma).

Aggiornato il 25/03/2008 ore 15.45

PREMESSA
Tenderò, se mi sarà possibile, più a modificare questo messaggio che ad aggiungerne di nuovi, quindi occhio alla data di qui sopra.
Le parti aggiornate saranno in [span style=\'color:blue\']blu, in modo tale che non è necessario che rileggiate tutto. ;) [/span]
Tutto quello che dirò (in particolar modo le questioni tecniche) ovviamente non sarà in termini assoluti ma legato alla mia esperienza che nel mondo del romhacking è molto limitata, praticamente solo Shin Megami Tensei I e neanche tutto, quindi nulla. Per cui sentitevi pure liberi di correggere le mie eventuali(sicure) imprecisioni e inesattezze.

INTRODUZIONE
Che cos'è ShinHelp?(per lo meno quello che vorrebbe essere)
---Bhe, un Dump Editor generico più un Reinserter(altrettanto generico). A questo punto la seconda domanda sarà <"Che cos'è un Dump Editor?">. E qui iniziano le inesattezze in quanto non ho idea se il termine "Dump Editor" sia esatto.
Che cosa fa?
---Permette di editare, quindi tradurre e/o modificare i dump, e grazie al reinseritore integrato ricreare il file.

REQUISITI Windows(XP sicuramente, altri non so se mai fatemi sapere)
--- Librerie Gtk installate nel sistema reperibili in questa pagina (basta scaricare e installare il file gtk+-2.XX.XX-setup.exe).
--- eventuali

REQUISITI Linux
--- Librerie Gtk installate nel sistema, credo che qualsiasi distribuzione c'è le abbia.
--- eventuali

DOWNLOAD
...non volevo rilasciare qualcosa di non completamente testato e definitivo, ma mi sa che è l'unica...

Ho perso un pò di tempo per riuscire a capire come creare un sito, ma alla fine credo di esserci riuscito, e tutto molto minimalista ma serve allo scopo...
ShinHelpInfondo alla pagina linkata.
Progetto Shin Megami Tensei 1Infondo alla pagina linkata.

Gli archivi sono compressi in 7z.
Nel primo archivio c'è il programma vero è proprio, con gli eseguibili per Windows o per Linux(in Linux avviatelo da console) che sono nella directory principale.
Il secondo è il progetto di Shin Megami Tensei 1, che dovreste scompattare nella sottodirectory "./share/ShinHelp_project" di ShinHelp.

COME FUNZIONA
--- Primo Avvio
La prima volta che eseguirete ShinHelp vi verranno fatte alcune domande necessarie per un'iniziale configurazione. La prima chiede di individuare la directory principale del progetto, la seconda la relativa table, la terza il file *.smc originale, le seguenti richiedono solo di scegliere un font per la visualizzazzione(per i caratteri Giapponesi, scegliere un font che li abbia).
--- Una volta avviato
╔═════════════════════╗
Guida alle finestre
╚═════════════════════╝
E' una gif animata:

  ┌────────────────┐
   ☺ Traduzione
  └────────────────┘
     •  La prima finestra in alto a sinistra è dove inserire la frase o parola da ricercare:
        esempio: "Chi cerca" (virgolette escluse) che è diverso da "chi cerca"(cioè c'è differenza tra MAIUSCOLE e minuscole).(Ah! deve essere più di un singolo carattere o codice).
        es. Si può cercare sia "{F0}:" che "@Protagonista@:" che in questo caso sono la stessa cosa.
     
     •  La seconda finestra in basso a sinistra è dove viene visualizzata la frase trovata nella ricerca che potrà essere interamente editata a vostro piacimento(tranne che per i tag [COD<XX>]), nel bene e nel male, è possibile che qualche [COD<XX>] non sia esattamente riconosciuto, e se vorrete ottenere una rom valida dovrete rispettare queste regole:
        non eliminare lettere che potrebbero sembrare inutili es.:
        "[COD<FF>]kThey are ......." può essere tradotto con "[COD<FF>]kLoro sono ......." e non "[COD<FF>]Loro sono .......".
        I tag devono essere inseriti correttamente non c'è nessun controllo(per ora!).
        E' indifferente aggiungere codici "{XX}" o il corrispondente tag "[XX<XX>]" "@XX@" ad esempio in SHIN MEGAMI TENSEI 1 i codici {FC}{FA} indicano nuova pagina (nel caso in cui le righe non bastassero) oppure il tag [NP<FCFA>].
     
  ┌────────────────┐
   ☺ Note
  └────────────────┘
     •  Qui semplicemente potete inserire appunti utili sulla rom che state traducendo.
     
  ┌─────────────────────────┐
   ☺ Configurazione Generale
  └─────────────────────────┘
     •  Alla voce "Directory Base" dovrete selezionare la directory in cui sono presenti le cartelle dei dump, i file "Note.txt" "log.txt" "conf-spec.txt" "archivio_puntatori.txt" "puntatori_aggiornati.txt" "puntatori_ordinati.txt" tutti encodati in utf-8.
       
     •  Alla voce "File Tbl Tabella" dovrete indicare il file .tbl(deve essere encodato in utf-8) con la table che verrà usata per decodificare i dump.
       
     •  Alla voce "File Smc Originale" dovrete indicare la rom da tradurre (inutile per i progetti importati)
        es. "./Shin Megami Tensei I/Shin Megami Tensei I.smc"
       
     •  Il resto è abbastanza ovvio...
     
     •  Il bottone "wizard", per ora inutile...
     
  ┌──────────────────────────┐
   ☺ Configurazione Specifica
  └──────────────────────────┘
     •  Alla voce "Dimensione Blocchi in byte" inserire la dimensione dei blocchi della rom, ad esempio per una LoRom è di 32768(per una HiRom dovrebbe essere il doppio), cmq è inutile in quanto la dimensione viene impostata nella fase di creazione del progetto.
     
     •  Alla voce "Dimensione Header" inserire la dimensione dell'Header, che dovrebbe essere "0" o "512", comunque per ora questo dato non viene utilizzato, e quindi la rom deve essere priva dell'header(vedi SNESTOOL per maggiori info).
     
     •  "Numero Righe per Pagina", ovvio...
     
     •  "Numero Caratteri per Riga", ovvio...
     
     •  Alla voce "Codici Hex per la fine o inizio riga", inserire i codici sempre e comunque in due cifre in esadecimale con le lettere in MAIUSCOLO e racchiudendo ogni byte tra parantesi graffe, separando ogni codice con una virgola e senza alcuno spazio.
        es. "{F9},{FC}"
     
     •  Alla voce "Codici Hex per la fine o inizio pagina", idem come sopra...
        es. "{FC}{FA}"
     
     •  Alla voce "Codici Hex Noti", inserire i codici sempre e comunque in due cifre in esadecimale con le lettere in MAIUSCOLO e racchiudendo ogni byte tra parantesi graffe, seguito dal carattere "=" racchiudendo la descrizione del codice tra i caratteri "@", poi a seguire ancora il carattere "=" con il numero di caratteri che occupa il codice nella riga.
        es. "{F0}=@Protagonista@=8"
     
  ┌───────────┐
   ☺ Creazione
  └───────────┘
     •  Il bottone "Inizia" avvia la creazione dell'intera rom tradotta nella cartella ".\files_tradotti", se qualcosa va storto come sicuramente avverrà, nel log cerca gli errori (di solito si tratterà di aggiungere o tolgiere un numero di byte indicato nel dump indicato), i warning sono trascurabili.
 
P.S.Le icone le ho "rubacchiate" quà e là, non so se siano tutelate da diritti o altro, se qualcuno ha qualche suggerimento a tal proposito...!? Comunque le icone sono nella cartella "./share/pixmaps", liberissimi di cambiarle, credo che siano supportati la miaggior parte dei formati, dovrei provare le gif animate...

CREARE UN VOSTRO PROGETTO COMPLETAMENTE COMPATIBILE(anche con il ripuntatore/reinseritore)
Tool necessari :
---• Le solite LIBRERIE GTK(ovviamente non occorre reinstallarle se lo avete già fatto).
---• ShinPointersHunter(in fondo alla pagina linkata).
---• ShinSprototypize(in fondo alla pagina linkata).
---• La rom del gioco.
---• La relativa table priva dei codici di fine stringa, riga o pagina.
Siccome l'installazione delle librerie è alquanto banale, e l'uso di ShinPointersHunter potrebbe risultare abbastanza complesso, passerò quindi direttamente ad una sessione d'esempio di ShinPointersHunter con la rom 'Treasure of the Rudras'(rom già tradotta in inglese, o meglio tradotta in francese e poi in inglese), che ovviamente mostrerà solo una parte delle funzionalità del programma.
Do per scontato che abbiate già individuato la table, e che quindi vi siate accorti che la Rom è un HiRom, e l'intero testo si trova in due intervalli tra 0x300000->0x35FFFF e 0x3A0000->0x3DFFFF(nei blocchi appaiono anche delle frasi in francese, probabilmente rimasugli inutilizzati della prima traduzione).
Scompattate l'archivio ShinPointersHunter, nella directory così creata 'NomeGioco', compiate la table, e nella directory 'NomeGioco/waiting_room' la rom. Ora tramite il prompt dei comandi dirigetevi all'interno della directory 'NomeGioco', quindi digitate :

ShinPointersHunter[/font] quindi apparirà...
ShinPointersHunter v.0.0.1 for ShinHelp by Itanghell.
http://inutilities.altervista.org
-----------------------------------------------------------Made in Italy, 2008.
E' ESSENZIALE CHE SE PRESENTE L'HEADER VENGA RIMOSSO DALLA ROM(vedi SNESTOOL).
Prendere input da file [y/n] :  
[/font](il programma accetta in input anche direttamente dei files con le opportune impostazioni, ma lo spiegherò più in là...) rispondete 'n' e invio...
Inserisci nome file smc (estenzione compresa): [/font] quindi digitate il nome del file in './waiting_room' es. Rudra.smc e poi invio...
Inserisci nome file tbl (estenzione compresa): [/font] quindi digitate il nome del file es. Rudra.tbl e poi invio...
Specificare tipo puntatori(1=2Bytes 2=3Bytes): [/font] proviamo con puntatori a 3 bytes(meno ambigui), quindi digitiamo '2' e invio...
Specificare tipo rom(1=LoRom1 2=LoRom2 3=HiRom 4=Pc): [/font] sappiamo che è una HiRom, quindi '3' e invio...
Specificare dimensione del blocco testo (in decimale): [/font] la dimensione non è altro che il numero di bytes dall'inizio alla fine del blocco testo(non è del tutto esatto comunque, per ora va bene), quindi 0x35FFFF-0x300000='393216' e invio...
Inserisci indirizzo inizio testo (in esadecimale senza prefisso "0x"): [/font] appunto '300000' e invio...
Inserisci indirizzo fine testo (in esadecimale senza prefisso "0x"): [/font] '35FFFF' e invio...
Esiste un codice univoco di fine stringa, anche di pi&ugrave; bytes, (y/n): [/font] be' non vi sarà difficile individuarlo in "0600", quindi 'y' e invio...
Quale? : [/font] per l'appunto '0600' e invio...
Vuoi effettuare la ricerca dei puntatori solo in alcuni intervalli?(y/n): [/font] qui potete scegliere se effettuare la ricerca solo in alcuni intervalli(anche più d'uno) o nell'intera rom, comunque dopo aver fatto la ricerca in tutta la rom e analizzato i log vi accorgerete che si trovano tutti nell'intervallo 0x40000->0x90000, quindi 'y' e invio...
Inserisci indirizzo inizio intervallo (in esadecimale senza prefisso "0x"): [/font] appunto '40000' e invio...
Inserisci indirizzo fine intervallo (in esadecimale senza prefisso "0x"): [/font] '90000' e invio...
I puntatori nell'intervallo sono perfettamente contigui?(y/n): [/font] potete provare, ma vi accorgerete che non lo sono, cioè tra un puntatore e l'altro ci sono degli atri bytes non meglio identificati, quindi rispondete 'n' e invio...
Vuoi aggiungere un altro intervallo?(y/n): [/font] come avevo già accennato potete aggiungere un altro intervallo in cui cercare i puntatori, ma come già ho detto sono tutti tra 0x40000 e 0x90000, quindi 'n' e invio...
...il programma a questo punto inizia la ricerca...alla fine...

Riassunto :
       Nome file               : RudraNoHihou.smc
       Table file              : RudraNoHihou.tbl
       Tipo Puntatori          : 3Byte
       Tipo Indirizzi          : HiRom
       Dimensione del blocco   : 0X060000
       Inizio testo            : 0X300000
       Fine testo              : 0X35FFFF
       Codice di fine stringa  : 0x0600

Ricerca puntatori 0X040000->0X090000 100.0% | Trovati: 2611| Non Trovati:    59|
Calcolo offset... 100.0%
Creazione prototipo gestione puntatori...  99.9%
La Frase RudraNoHihou.smc_F476A4 puntata da 0X00060C82 ha un offset di 00100700, decisamente grande.
Creazione prototipo gestione puntatori... 100.0%
Consulta il file ShinPointersHunter_RudraNoHihou.smc[0X300000-0X35FFFF].log per maggiori dettagli.
[/font]
quindi ora nella directory 'NomeGioco' si avranno due nuovi files 'proto_gestione_puntatori.txt' e 'ShinPointersHunter_RudraNoHihou.smc[0X300000-0X35FFFF].log', dall'analisi dei quali si potranno dedurre eventualmente informazioni utili quali appunto l'intervallo di indirizzi dei puntatori, eventuali codici di fine stringa etc...(la cosa è un pò più complessa ma in questo caso non occorre approfondire...)
questo per il primo blocco di testo, ma è la stessa identica cosa per il secondo cha va da 0x3A0000 a 0x3DFFFF, ovviamente potrete risparmiarvi la noia di rispondere alle domande di sopra mandando in input al programma un file di testo così composto :

nomefile.smc
nomefile.tbl
3Byte
HiRom
262144
3A0000
3DFFFF
0600
1
40000
90000
n
[/font]
Una volta terminato avviate il programma ShinSprototypize(questo è più semplice) :
ShinSprototypize v.0.0.1 for ShinHelp by Itanghell.
http://inutilities.altervista.org
                                                           Made in Italy, 2008.
Inserisci nome progetto :
[/font] inserite un nome di vostro gradimento e invio...
Specificare tipo rom(1=LoRom1 2=LoRom2 3=HiRom 4=Pc): [/font] come già detto HiRom, quindi '3' e invio...
Individuare Dump Identici?(Sconsigliato per Progetti con dimensioni blocco limitate)[y/n]: [/font] come suggerito digitate 'n' e invio...
Il programma inizierà a fare le sue cose alla fine delle quali avrà creato nella diretctory corrente una sottodirectory con il nome del progetto, bell'e pronta per essere caricata in ShinHelp, da cui una volta caricato il progetto come prima cosa dovrete inserire i codici per fine riga e pagina nella pagina configurazione specifica, ed eventualmente riempire gli altri campi.


IMPORTARE UN VOSTRO PROGETTO*¹
Per poter importare un vostro progetto, cliccate il bottone "wizard" nella scheda "Configurazione Generale". Per portare a termine la procedura avrete bisogno di due cose una table possibilmente in utf-8, ed i dump opportunatamente estratti.
--- La Table
La table per i caratteri giapponesi deve essere in utf-8, ma lo dovrebbe anche se non li utilizzate.
Nelle tables non devono essere presenti i codici di fine line, pagina o stringa e i seguenti caratteri '[' ']' '{' '}' '@'
Se il progetto utilizza più di una tables, nello wizard selezionate quella principale, il resto copiatele nella directory del progetto che verrà creata.
--- I Dump
I dump devono essere 1:1, cioè pari pari a come sono nella rom compreso anche quello che non è "propriamente testo", per i tag ci pensa (con il vostro aiuto) ShinHelp.
Il nome di ogni dump deve essere significativo, ad esempio io utilizzo l'indirizzo da cui l'ho estratto.
(Per le eventuali compressioni aspetto vostri chiarimenti, ma credo che invece che prenderli pari pari debbano essere scompressi...)

La realizzazione del dumper come quella del reiserter, spetta sempre a voi. Questo programma vi fornirà(forse) solo i dump tradotti pronti per essere reinseriti, ricompressi o qualsiasi altra cosa vogliate farci. Non è molto, ma dovrebbe rendere più semplice la scrittura di un dumper e relativo reinserter, delegando completamente a ShinHelp la gestione dei tag.(E credo di uno scompressore e relativo ricompressore, ma di questi ultimi due non ho alcuna esperienza.)

CREARE UN DUMPER COMPATIBILE CON ShinHelp(non credo che la seguente spiegazione sia chiarissima, se avete dubbi o domande chiedete pure)
Il dumper ideale, non è altro che una semplificazione di quello che mi sembra usiate.
Quello che prende in input, indirizzi tabelle o altro, è ininfluente.
Quello che fà per trovare la frase è ininfluente. E qui è già quasi finito il compito del dumper.
Resta solo da mettere su di un file la frase, senza pensare alla decodifica del testo e/o alla gestione dei tag.

Esempio paratico:
per "Shin Megami Tensei I" il dumper che ho scritto prende come input un intervallo di indirizzi rappresentanti l'inizio e la fine della classica tabella dei puntatori
|-----------------------------------------------------|
|cmd:> myDumper.exe
|cmd:> Inserire inizio tabella puntatori : <185A7F>
|cmd:> Inserire fine tabella  puntatori : <185BB3>
|-----------------------------------------------------|

Il dumper che fà, va all'indirizzo 0X185A7F nella rom:

legge quello che c'è "318004" e va a quell'indirizzo(ovvimente lo trasforma da 318004 a 188004):

(Fino a qui per l'editor ShinHelp è ininfluente, la prossima riga è quella che conta)
copia quello che c'è nella rom da 318004 fino a un determinato numero di byte(che è stato alquanto complesso da ricavare, in quanto non mi sembra Shin Megami abbia codici di fine stringa) e lo mette su di un file chiamato "318004.dmp".
Contenuto file "318004.dmp":

Tutto questo ripetuto per ogni puntatore nell'intervallo d'indirizzi immesso.
(In realtà scrive anche su di un file le varie informazioni di ogni puntatore, ma questo è utile solo per reiserter integrato per SMT1)
Fine del lavoro per il dumper.

ANNUNCI
Il programma è praticamente completato (anche se ho ancora qualche idea), solo che avendolo provato solo io non vorrei che voi pensasse che fosse un "programma immaginario"(una rarissima specie di "amico immaginario" :D ), ma anche perchè mi serve il parere di qualcuno con un pò più esperienza di me,
mi chiedevo se qualcuno, magari anche qualcuno che usa Linux, non volesse provarlo?</span>

Un utente Linux ha detto di lui: <"hmm..., si funziona, ma il metodo non è lineare, preferisco gestire il testo e i tag direttamente nel dumper e nel reinserter">

Chester

Io uso Linux, se vuoi posso provarlo.
Close the world, txEn eht nepO

inutilities

Caspita  ;) , certo che voglio!
Non ho messo il link per il download diretto perchè non so come si faccia(non a mettere il link, ma a mettere il prog. in rete), comunque non appena ti vedo su msn te lo invio oppure se me ne dai il permesso te lo mando per email, sono due file; uno da 3MB e l'altro da 1MB.

Chester

Se vuoi metterlo in rete puoi upparlo qui:
http://rapidshare.com

Se invece devi inviarlo solo a me, preferisco per email ;)
Close the world, txEn eht nepO

inutilities

Per distribuirlo su rapidshare mi sembra un pò presto, prima volevo essere certo che funzioni e che riesca ad importare un progetto non mio, per giunta ad oggi non so ancora se su Windows, oltre che a me, ad altri funzioni.
Comunque a chiunque me lo chieda posso inviarlo.
(p.s.piccolo aggiornamento del messaggio iniziale)
O.T. Grande Brisma  :applauso: ! Mi riferisco al fix per FF9 Pal, ora grazie a te anche su PSP  :favorevole: !!!

Brisma

<- [ BrISmA | BloG ] - >
********************
Membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it/
********************
MsN: brisma@hotmail.it - ICQ: 321995513 - eM@il: brisma@alice.it

inutilities

Aggiunti i link per il download.(momentaneamente sospesi  :P )

inutilities

Ok, è un bel po di tempo che non mi  faccio vivo, e siccome è un periodo di stallo e il mio interesse per il progetto stava scemando, ho deciso di rimettere online ShinHelp e il progetto di Shin Megami Tensei 1   ... si sa mai :P , magari a qualcuno potrebbe interessare...
Il Programma dalla prima versione ha subito grandi(grandi :unsure: , poi magari lo sono solo per me) modifiche e aggiunte, ne cito alcune quali
--supporto puntatori a 4 bytes.
--reinserter generico (già :D , nel senso che non è specifico solo per Shin Megami Tensei I ma anche per altri giochi che non hanno puntatori stravaganti, tant'è che dovrebbe essere usato per un progetto di traduzione per un gioco per PS2).
--poi altre minori migliorie.

Ecco il link per i downloads per la versione Windows e quella Linux, sono in fondo a questa pagina :
ShinHelp V.0.0.2
Mentre il Progetto per Shin Megami Tensei I è in fondo a questa :
Shin Megami Tensei I Project V.0.0.2

Se avete domande, commenti, suggerimenti o avete riscontrato dei problemi :D non esitate a farmelo sapere!

P.S.: Il messaggio iniziale non l'ho aggiornato (boh! quando avrò tempo e voglia lo aggiornerò), comunque lì c'è il link da cui si possono scaricare le librerie gtk necessarie per il funzionamento del programma in Windows.

inutilities

Va be', io intanto continuo per la mia strada sperando che a qualcuno interessi o sia di una qualche utilità...
Ho scritto questo programma ShinPointersHunter, che come si dovrebbe capire dal nome è un cacciatore di puntatori (per ora solo per SNES, o meglio per puntatori assoluti da 2/3 bytes) per poter creare progetti compatibili con ShinHelp(ovviamente ciò non toglie che si possano ricavare informazioni utili anche se non si vuole usare lo ShinHelp), e per compatibili intendo anche per il reinseritore :) .
Il prog. richiede che nel sistema siano installate le solite librerie gtk(reperibili qui ->LIBRERIE GTK (basta scaricare e installare il file gtk+-2.XX.XX-setup.exe)), che si abbia la rom del gioco e la rispettiva table(contenente esclusivamente i caratteri).
Scompattate l'archivio ShinPointersHunter....7z e mettete la rom del gioco nella directory ./waiting_room, mentre la table nella directory base. Ora aprite il prompt dei comandi, dirigetevi nella directory base e digitate ShinPointersHunter. Il programma a questo punto vi farà una serie di domande dopo di queste si avvierà la ricerca dei puntatori, al termine della quale verranno creati due files, uno di log con informazioni sulla ricerca, l'altro "proto_gestione_puntatori.txt" dove sono presenti i dati raccolti sui puntatori.

Ci sarebbero un sacco di altre  cose da spiegare, ma sarebbe più semplice e chiaro rispondere direttamente alle vostre domande, quindi come al solito se avete domande, suggerimenti o avete riscontrato problemi non esitate a chiedere :) .

Il download si trova in fondo a questa pagina :
->ShinPointersHunter

P.s. Ovviamente è quasi tutto ancora da testare, io l'ho provato, con esito positivo, con Shin megami tensei 1 e 2(LoRom), e con Treasure of the Rudras(HiRom).
(Piccolo aggiornamento del messaggio iniziale)

Vash

un programma veramente utilissimo...ottimo lavoro vecchio mio ;)
Vash the stampede
il tifone umanoide
la calamità naturale
l'uomo da 60 miliardi di $$


TRIGUN ONE WORD ONE WORLD

inutilities

Grazie Vash ;) !
Proseguendo con la filosofia del testardo come un mulo, continuo rendendo disponibile a tutti un'anteprima di un nuovo progetto di traduzione del testo per Psx Breath Of Fire 3 tramite ShinHelp, sviluppato grazie all'aiuto di (si :D , proprio lui)Vash. E' solo una parte del testo(l'inizio del gioco), in quanto prima di rilasciarlo completamente vorrei che si riuscisse ad aggiungere le lettere accentate ai font, chi sa magari qualcuno che sappia come si faccia potrebbe restare incuriosito dall'anteprima...
Il download in fondo a questa pagina --> Pre-release Progetto BoF3