Tłumaczeniowe kroniki GrajPoPolsku :)

ffgriever
Posty: 488
Rejestracja: 17 paź 2008, o 15:29

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: ffgriever » 19 wrz 2009, o 09:53

Ucieszą się. :P Nie wiem, czy to może o to chodzić, ale po sprawdzeniu źródeł widzę, że typy kompresji to RLE, LZSS i unknown (no chyba, że to przejęzyczenie, oni tak potrafią :)).
Fakt, napisali jakiś dekompresor i udostępnili źródła... Nieco przekombinowali miejscami i jakiś dziwny fix dla ujemnych zrobili ;) (dorzucenie 0x20 zer przed oknem). Tak samo wielka kombinacja alpejska poboczem drogi z counterem i offsetem dla lzss u nich, podczas gdy jest to proste jak budowa cepa ;).

Ich dekompresor:

Kod: Zaznacz cały

// O "decoder[i]" serve para utiliar os bytes usados quando for encontrado um flag LZ // sendo assim o "decoder [0] = primeiro byte" "decoder[1] = segundo byte" e assim por diante //////////////////////////////////////// for(x = 0; x <= size_dec ; x++ ) // Isso zera todos os "decoder[]" para preparar para o processo { decoder[x] = 0; //printf("decoder[%02d] = %02X\n",x,decoder[x]); } //////////////////////////////////////// for( x = 0 ; x <= size_dec ;) // Agora começa a bagaça { ////////////////////////////// // Inicialmente ele cria 0x20 de zeros nescessários no arquivo temporário if (x == 0) { byte = 0; while(x < 0x20) { fwrite(&byte,1,1,dec); decoder[x] = 0; x++; } } ////////////////////////////// fread(&flag,1,1,arq); // Leitura de um FLAG // Se o flag for menor que 0x7E indica quantos bytes RAW deve pular para o próximo flag // Se for maior que 0x7E é um FLAG indicando compressăo // Sendo 0x7E repetiçăo de bytes e maior de 0x80 compressăo LZ fprintf(log,"\nFLAG = %02X",flag); // LOG indicando um flag if(flag >=0x7E) // LOG indicando um flag se é compressăo ou năo é fprintf(log," de compressăo\n",flag); else fprintf(log," de de salto até o próximo flag\n",flag); //getch(); if(flag == 0x00) goto END; // Se achar FLAG = 0x00 entăo termina o processo // Caso encontre um FLAG indicando compressăo if(flag >= 0x7E) { fprintf(log,"Dados comprimidos: "); // LOG indicando quais dados foram descomprimidos ///////////////// // RLE decode // Repetiçăo de bytes if (flag == 0x7E) { unsigned int RLE = 0; fread(&RLE,1,1,arq); RLE += 4; // Verifica quantos bytes serăo repetidos... fread(&byte,1,1,arq); // ...e qual byte será repetido for( y=0 ; y < RLE; y++) // Inseri os bytes repetidos { fwrite(&byte,1,1,dec); decoder[x] = byte; fprintf(log,"%04X",byte); x++; } } ///////////////// // Ainda desconhecido e provavelmente năo tem, năo custa nada colocar caso ocorra. if (flag == 0x7F) // ??? { printf("\nCompressao desconhecida encontrada: %02X\n",flag); getch(); } ///////////////// // LZ decode if (flag >= 0x80) { int LZflag = 0; unsigned long int OFFSET = 0; int OFFSET_CENT = 0; fread(&OFFSET,1,1,arq); // Lę o posicionamento de onde o dado comprimido está LZflag = flag - 0x80; LZbyte = 3; // O Flag é dividido em octal, entăo este processo verifica quantos bytes // e quanto adiciona no deslocamento OFFSET_CENT = 0; for( y=0, i=1 ; y < LZflag; y++) { if(i == 0x8) { OFFSET_CENT = 0; LZbyte += 1 ; i=0; // A cada octal é mais um byte para a descompressăo } else OFFSET_CENT += 0x100; i++; } // Adiciona 0xX00 ao deslocamento do LZ OFFSET += OFFSET_CENT; // Aqui é repetiçăo de byte LZ sendo assim repetindo uam sequęncia de bytes em outra área (BASE Lempel-Ziv) for( y=0 ; y < LZbyte ; y++) { decoder[x] = decoder[x - (OFFSET+1)]; fprintf(log,"%02X ",decoder [x]); fwrite(&decoder[x],1,1,dec); x++; } } } ////////////////////////////// // Caso seja um flag de salto ele gravará o tamanho do salto em arquivos sem compressăo else { fprintf(log,"Dados RAW: "); // LOG for(y = 0; y < flag ; y++) { // Praticamente é um copia e cola de um arquivo pro outro decoder[x] = 0; fread(&decoder[x],1,1,arq); fwrite(&decoder[x],1,1,dec); fprintf(log,"%02X ",decoder[x]); x++; } fprintf(log,"\n"); // LOG } } /////////////////////////////////////// END: // Caso o arquivo termine no LOOP eel pula para o processo final que é este
A to mój (insize to rozmiar pliki minus 5, a początek bufora wejściowego zaczyna się na szóstym bajcie pliku - czyli wywalamy nagłówek):

Kod: Zaznacz cały

void ffxDecompress(unsigned char *bufferin, unsigned char *bufferout, unsigned int insize, unsigned int outsize) { unsigned char* src = bufferin; unsigned char* dst = bufferout; while (src[0] != 0 && (unsigned int)(src-bufferin) < insize && (unsigned int)(dst-bufferout) < outsize) { if (src[0] < 0x7e) {//uncompressed memcpy(dst, &src[1], src[0]); dst += src[0]; src += 1 +src[0]; } else {//compressed if (src[0] < 0x80) {//RLE int tmpCnt = (((src[0] - 0x7e)<<8) | src[1])+4;//so 515 max, but it can be only 259 if 0x7e is used and 0x7f is somehow reserved memset(dst, src[2], tmpCnt); dst += tmpCnt; src += 3; } else {//LZSS int tmpCnt = ((src[0]-0x80)/8)+3; int tmpOff = ((((src[0]-0x80)%8)<<8) | src[1])+1; int i; for (i = 0; i < tmpCnt; i++) { int subOff = (int)(dst-bufferout)-tmpOff+i; if ( subOff<0 ) { dst[i] = dst[2048 +subOff]; } else { dst[i] = dst[i -tmpOff]; } } dst += tmpCnt; src += 2; } } } }
PS. Nie ma sprawy. No i przy rle i lzs jest to naprawdę proste. Wystarczy mieć skompresowany i zdekompresowany plik.

PS2. W załączniku poprawiona wersja 0.1a. Zmieniłem tylko delikatnie kompresor. W szczególnych przypadkach pozwoli to zaoszczędzić kilka dodatkowych bajtów (bo w ostatniej wersji z rozpędu dałem zaniżoną wartość).
Załączniki
ffxtool_01a.zip
(3.01 KiB) Pobrany 234 razy

Awatar użytkownika
mziab
Posty: 459
Rejestracja: 20 maja 2008, o 23:11
Grupa: mteam
Kontakt:

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: mziab » 28 wrz 2009, o 21:33

Jakiś tydzień temu rozpoczęła się kolejna, trzecia faza testów Tales of Phantasia. Projekt jest na etapie "przyczepiam się na siłę do drobiazgów, których nikt inny i tak nie zauważy" :) Mam dwóch testerów, ale jeśli ktoś z tutejszych bywalców ma chęć pomóc, na pewno rozpatrzę kandydaturę :)
"Człowieka można przedstawić w postaci ułamka, w którym licznikiem są jego właściwości, a mianownikiem - mniemanie o sobie. Im większy mianownik, tym mniejszy cały ułamek." - Lew Tołstoj

Awatar użytkownika
Berion
Posty: 598
Rejestracja: 3 cze 2008, o 08:34
Grupa: żadna, freelancer :P
Kontakt:

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: Berion » 29 wrz 2009, o 12:03

Chętnie pomogę przetestować Final. Została mi Moria do dokończenia i ostatnia lokacja. ;P
~ Primum non nocere ~

Awatar użytkownika
mziab
Posty: 459
Rejestracja: 20 maja 2008, o 23:11
Grupa: mteam
Kontakt:

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: mziab » 17 paź 2009, o 18:44

Berion: Jednak wolałbym kogoś, kto przejdzie od początku do końca.

W każdym razie, jeden z testerów przeszedł ToP bardzo sumiennie, drugi cierpi niestety na brak czasu. Chyba przejdę grę jeszcze raz, by wyłapać czy wszystkie naniesione zmiany mają sens. A tak poza tym, to postanowiłem przeprosić się z CK2 i skutkiem jest dotłumaczenie prawie wszystkich tekstowych drobiazgów i uzupełnienie programu do wstawiania tychże. Czeka mnie jeszcze sporo ujednolicania i pewnie skracania w tych drobiazgach, ale postęp jest :)
"Człowieka można przedstawić w postaci ułamka, w którym licznikiem są jego właściwości, a mianownikiem - mniemanie o sobie. Im większy mianownik, tym mniejszy cały ułamek." - Lew Tołstoj

Awatar użytkownika
Manuel Czaszka
Konik Manuel
Konik Manuel
Posty: 1823
Rejestracja: 7 lut 2106, o 07:28
Kontakt:

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: Manuel Czaszka » 20 paź 2009, o 20:05

Wraz z twigiem pracujemy od wczoraj na jednym projektem na PCta, który póki co pozostanie tajemnicą - to tyle newsów z mojej strony, "reszta jest milczeniem". ;D
Jeśli miałbym zatytułować tę taśmę, to byłoby to "Ostatnia szansa na ewakuację planety Ziemia, nim zostanie przetworzona"

Awatar użytkownika
mziab
Posty: 459
Rejestracja: 20 maja 2008, o 23:11
Grupa: mteam
Kontakt:

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: mziab » 25 paź 2009, o 21:38

Ostatnio miałem ochotę sprawdzić w praniu nowy debugger w bsnesie. A że spokoju nie dawały mi angielskie listy płac w ToP (na początku i na końcu gry), postanowiłem się z nimi rozprawić. Fonty były oczywiście kompresowane, więc musiałem zrozumieć kompresję, napisać stosowny dekompresor, zmodyfikować co trzeba i napisać rekompresor. Na koniec musiałem pobawić się trochę w optymalizację, żeby moje spakowane strumienie nie były większe od pierwotnych. Udało się :)

Bilans: 3 wieczory stracone nad czymś, co większość ludzi i tak pomija... ale satysfakcja duża :)
"Człowieka można przedstawić w postaci ułamka, w którym licznikiem są jego właściwości, a mianownikiem - mniemanie o sobie. Im większy mianownik, tym mniejszy cały ułamek." - Lew Tołstoj

ffgriever
Posty: 488
Rejestracja: 17 paź 2008, o 15:29

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: ffgriever » 26 paź 2009, o 12:30

Troszkę się zawiodłem na społeczności. Pięć osób oferowało tłumaczenie lub pomoc w tłumaczeniu japońskich kwesti na angielski. Wrzuciłem publicznie część skryptu i nazw, podesłałem też kilku osobom mailem (większe partie brakującego skryptu) i... Ani widu, ani słychu. Sam muszę więc dłubać ten japoński. A jak nie native tłumaczy coś na angielski, to rezultat zwykle jest opłakany ;).

No cóż, przeżyję.

Napisać jednak chciałem o czymś innym. Od jakiegoś (dwa lata z ogonkiem) czasu pracuję (z dłuższymi przerwami) nad PS2PSXe. Projekt niby wspaniały, miałby wielkie powodzenie, pracować przy nim, to sama przyjemność, wykorzystuje sprzęt PS2 w taki sposób, że głowa mała, jednak... Zawsze, gdy z wielkim zapałem wznawiam nad nim pracę, natychmiast wyszukuję sobie inne projekty, które odciągają mnie na dłuższy lub króttszy czas. Zaczynam się już nawet zastanawiać, czy wszystko jest ze mną w porządku ;).

W każdym razie rozgryzłem sobie wczoraj (i przetłumaczyłem na c) całą funkcję drukującą menu i dialogi w FF12ZJS. Pozwoliło to pozbyć się paskudnej szerokiej spacji (która wyglądała jak podwójna spacja), znaleźć kilka dodatkowych miejsc przechowywania położeń niektórych okien (wciąż brakuje mi tych, na których najbardziej mi zależy). Tak więc powoli do przodu. Denerwuje tylko fakt, że czasami jedne fixy powodują powstanie nowych problemów, ale czasami po prostu ciężko przewidzieć, jak silnik gry zareaguje na takie czy inne zmiany (wsparcie dla wersji PAL okazało się jednak nieco bardziej skomplikowane, ponieważ nie zgadzał się timing animacji, który trzeba było dopasować w procesie patchowania - a to w niektórych przypadkach wywołało dziwne następstwa ;) ).

Bla, bla. Tak tylko napisałem, żebyście wiedzieli, że jeszcze żyję i mam się dobrze.

Awatar użytkownika
Berion
Posty: 598
Rejestracja: 3 cze 2008, o 08:34
Grupa: żadna, freelancer :P
Kontakt:

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: Berion » 26 paź 2009, o 17:32

Wg. mnie to lepszym pomysłem byłoby się skupić na razie tylko na "przerzutce" z NTSC/U. Ale ja tam się nie znam. ;]

A co do emulatora: jest już dźwięk? Jak z nowymi plugami gpu?
~ Primum non nocere ~

Awatar użytkownika
bemberg
Reptilianin
Posty: 1184
Rejestracja: 31 maja 2008, o 12:03
Grupa: wsparcia
Kontakt:

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: bemberg » 26 paź 2009, o 18:20

A może warto wspomnieć o innych projektach nie związanych z tłumaczeniem gier tu na forum? :) Myślę, że warto poeksperymentować :)
http://www.wykop.pl/link/2516381/playlo ... omentarzy/
Tłumaczymy w rytmie serca? Prawda o Playloc, BDIP i Tłumaczymy w rytmie serca.

Awatar użytkownika
Manuel Czaszka
Konik Manuel
Konik Manuel
Posty: 1823
Rejestracja: 7 lut 2106, o 07:28
Kontakt:

Re: Tłumaczeniowe kroniki GrajPoPolsku :)

Postautor: Manuel Czaszka » 7 lis 2009, o 11:47

A ja coś mam dziś przeczucie, że wieczorem będzie już na stronie VA PL^^
Jeśli miałbym zatytułować tę taśmę, to byłoby to "Ostatnia szansa na ewakuację planety Ziemia, nim zostanie przetworzona"


Wróć do „Kąciki tłumaczy”



Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości