PSP - Trovare palette

Aperto da Cid89, Ottobre 04, 2009, 16:05:32

Discussione precedente - Discussione successiva

Cid89

Ciao.
Sto provando a tradurre un gioco per PSP (Prinny: Can I Really Be The Hero?). Le cose stanno filando lisce, a parte qualche problemino qua e là...
Premetto che chiedo scusa se sbaglio/non conosco gran parte de linguaggio tecnico :S

Uno di questi è dato da un certo file che contiene testi, sotto forma di immagine.
Quello che si legge nel gioco è questo
http://img202.imageshack.us/img202/1051/snap003.png
mentre il massimo che sono riuscito a ottenere con il Tile Molester (ho provato tutti i formati esistenti, credo) è questo:
http://img401.imageshack.us/img401/4608/deskwx.jpg
(le prime due righe sono quelle che si vedono nell'altra immagine; le altre sono per testi che compaiono pochi secondi dopo, nel gioco).
Il file che contiene la grafica è QUESTO (sono pochi KB).

Ho chiesto un (bel) po' d'aiuto a Sephiroth1311 e Vash, ma a quanto pare non è esattamente il loro campo, quindi non sono riuscito a risolvere.
Insomma, i problemi di tutta questa faccenda sono due:
1) col Tile Molester i colori sono tutti sballati, rendendo impossibile qualsiasi modifica (se ho capito bene, ci dovrebbe essere la palette DENTRO il file, da qualche parte... Ma io non riesco a trovarla, anche perché non sono sicuro di cosa dovrei cercare esattamente).
2) l'immagine è "schiacciata". E, se ho capito bene, qui c'è poco da fare se non usare un programma paurosamente complicato (feidian? non ricordo) per provare a rimettere tutto in forma più umana.

Credo che risolvere il punto 1 sia più facile che risolvere il punto 2. ^^

Tra l'altro questo gioco si sta rivelando decisamente SEMPLICE come struttura (e di roba compressa ce n'è poca), quindi non credo che abbiano studiato qualche formato complicato proprio per questo file: suppongo che sia qualcosa di relativamente vicino a uno standard...che purtroppo non conosco :unsure:

Grazie mille per la pazienza, spero che qualcuno sappia aiutarmi :preghiera:
Ciao :saluto:

Gemini

I problemi di natura grafica ormai sono i miei preferiti:

Questa immagine l'ho ottenuta dando uno sguardo veloce alla configurazione dei bit, per cui potrebbero esserci imperfezioni, anche se ora come ora non mi pare di vederne.
I dati dell'immagine iniziano a 0xD00. Si tratta di semplici blocchi 32x8 a 4 bit, assemblati insieme per formare quella mostruosità 512x512. Il motivo per cui in modalità 16bpp era possibile vedere qualcosa è dovuto al fatto che 8x8 16 bpp corrisponde a 32x8 4bpp.
La palette inizia a 0xCC0, usa 4 byte a indice (in ordine 8 bit per rosso, verde, blu e alpha) ed è assolutamente identica a quella usata da immagini come PNG, tant'è che i valori di alpha sono usati per simulare l'antialiasing del font.

Per farla breve, ti serve un programma personalizzato per gestire questo formato. Questo è quello che ho scritto io per l'occasione:
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
u8* data;

Image img;
RGBQUAD pal[16];

StoreFile(_T("anime94_en.dat"),data);

// convert an R8G8B8A8 PSP palette
u8* o_pal=data+0xCC0;
for(int i=0; i<16; i++)
{
 pal[i].rgbRed=*o_pal++;
 pal[i].rgbGreen=*o_pal++;
 pal[i].rgbBlue=*o_pal++;
 pal[i].rgbReserved=*o_pal++; // alpha
}

u8* conv=data+0xD00;
// create the out image
img.Create(512,512,4,pal);
for(int i=0; i<(img.height/8)*(img.width/32); i++)
{
 int x=i%16*32;
 int y=i/16*8;
 // convert a 32x8 tile
 for(int yi=0; yi<8; yi++)
 {
  for(int xi=0; xi<32; xi+=2)
  {
   img.SetPixelAt(x+xi,y+yi,*conv&0xF);
   img.SetPixelAt(x+xi+1,y+yi,*conv>>4);
   conv++;
  }
 }
}
img.SaveBitmap(_T("test.bmp"));

delete[] data;
return 0;
}

Sephiroth 1311

Sephiroth 1311
****************
membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it
*****************************
Fidati di chi ama leggere, fidati di chi porta sempre con sé un libro di poesie. Guarda con sospetto chi ti dice che non ha tempo, che la letteratura è una bella  cosa, che quando si è giovani  si può leggere, ma poi? Mente, non gliene importa nulla. Mente sapendo di mentire.
Roberto Cotroneo

Cid89

O_O
Non ho davvero parole. "Grazie" è troppo poco immagino...

Veramente pazzesco, sono sinceramente shockato, grazie mille :o


edit: di imperfezioni comunque non ce ne sono, è tutto perfetto. Credo che mi sia appena risalita la febbre di uno o due gradi dopo aver visto questa cosa.

Gemini

Attenzione perché i primi 7 colori (escludendo il primissimo, trasparente) usano vari valori di alpha anche se i canali sono tutti R0G0B8, per cui non ci vuole nulla per sputtanare tutto l'antialiasing. Anche l'immagine che ho fatto io soffre di questo problema, essendo creata da bitmap (che teoricamente non ha alpha) e convertita successivamente in png perdendo informazioni della palette. Bisognerebbe salvare tutto in png o qualche formato che mantiene l'alpha, solo che la mia libreria delle immagini ora come ora salva solo in bmp. :B Ovviamente il mio obsoleto Paint Shop Pro non lo fa impostare l'alpha in modalità 16 colori manco a prenderlo a calci. >.>

Cid89

Grazie per le informazioni.
Ora rimetto mano (a mente lucida) su quel file e vedo di capirci qualcosa.
Comunque grazie davvero per tutto, ho ancora paura da quando ho visto l'immaginona nera O_O

Cid89

Se Dio vuole, ho risolto tutti i problemi con quel file là.

Ovviamente però è sbucato fuori un altro ->FILE<- (ce ne saranno altri, 2-3 direi) con delle scritte. Ipotizzo che sia dello stesso tipo dell'altro, dato che ancora una volta col tile molester vedo l'immagine "schiacciata" con 16 bpp...

Così sono tornato al problema originario: come trovare la palette? :o
Se l'immagine è ancora una volta 4bpp, allora ci sono 16 colori possibili, quindi 16 indici nella palette; se ho 4 byte per ogni indice (rosso, verde, blu, alpha), il totale di byte della palette dovrebbe essere 16*4=64.
Mi sono messo ad esplorare il file alla ricerca di qualcosa lungo 64 byte che potesse esserlo. Ha vinto questo (0xED0):

00 00 00 00
2D 31 30 FF
42 32 7B FF
4E 4A 8C FF
6F 6B D6 FF
94 5A 5A FF
B6 7C 73 FF
EF B5 8C FF
7C 63 6B FF
AD 94 9C FF
D6 BD BD FF
8C 67 4E FF
C0 98 73 FF
F7 D0 8C FF
52 41 42 FF
FF F7 F7 FF

che messa su paint shop pro mi dà questa palette -> (il nero, in realtà, è trasparente)

Ora, io so com'è l'immagine di questo file, si vede qui. http://www.youtube.com/watch?v=gm82z6lNgak&feature=related (O:16) (è la stessa anche nella versione europea che sto traducendo. Non che sia di importanza primaria tradurre proprio QUEL "wait", anzi, ma comunque sono curioso)

Tutto sembra corrispondere con la palette: ci sono i vari toni di viola, c'è il marrone, il bianco, e via discorrendo. Potrei supporre di aver avuto un culo maestoso e di aver azzeccato la palette (prima provo ad estrarre, in ogni caso).

Vorrei chiedere a Gemini (o a chiunque ci capisca, of course :P ), che ha trovato la palette dell'altro file, se ha agito anche lui un po' alla "io speriamo che me la cavo", oppure se da qualche parte nell'header c'è "scritto" DOVE si trova la palette.

Grazie mille, ciao ^^



Edit: Gemini, inoltre non ho capito come hai fatto a stabilire a priori che l'immagine era 512x512 o_o