Venno wrote:Tym programem ratujesz życie
bez unpackera uzyskanie grafik byłoby bardzo żmudne i czasochłonne.
Wątpie aby fanowski remake w ogóle powstał gdybyśmy nie mieli sposobu odzyskania grafik. Nawet gdyby znalazł się śmiałek na odtworzenie wszystkich grafik od zera, to już nie byłoby to samo
.
Venno wrote:Zdradzisz kilka tajemnic, bo coraz bardziej mnie to zastanawia. Czy pliki .res, .s32 są w pewien sposób zaszyfrowane czy po prostu można odczytywać z nich grafiki bit po bicie? Jeżeli tak to czym się różnią pliki jednostek od np plików tilesetów. Czy może to wszystko jest zapakowane w jakąś paczkę
Sam chwilę przeglądałem strukturę tych plików ale poddałem się.
Zarówno pliki .res jak i .s32 nie są zaszyfrowane. Res prawdopodobnie jest formatu IBM - large logical record file, natomiast format .s32 wygląda na autorski, jako że nie zawiera stosownego nagłówka, oraz nie udało się mi odnaleźć podobnych formatów z tamtych czasów.
W jaki sposób unpacker wypakowuje dane z pliku res?
1. Szuka wystąpienia specyficznych słów kluczowych w pliku. Dla NORMAL.RES jest to tekst ".s32", dla MAXIMUM.res są to dane nagłówkowe pliku pcx, natomiast dla MUSIC.RES zawiera ręcznie wpisane adresy początku i końca utworów.
Format S32
A2. Dla S32: po znalezieniu słowa kluczowego .s32 wczytujemy blok pamięci z miejsca gdzie je znaleźliśmy. Jest to struktura przechowująca : nazwę pliku w postaci tablicy 14 elementów char, offset danych, wielkość danych. Niech kolejno będą to zmienne A dla nazwy, B dla offsetu oraz C dla wielkości.
A3. Wczytujemy blok o wielkości C z miejsca B w tym samym pliku. Format s32 rozpoczyna się nagłówkiem 0x00 10 00 00. Potem posiada 1000 bajtów zawierające offsety kolejnych rysunków. Pierwszy rysunek zaczyna się zawsze na 1001 bajcie. Wielkości rysunków znamy dzięki ich offsetom. Wystarczy sprawdzić gdzie znajduje się kolejny rysunek w stosunku do obecnego aby poznać jego rozmiar.
A4. Każdy rysunek, nazwijmy go formatem o32 (s32 - set32, o32 - obraz32) zawiera kolejno następujące dane: szerokość, wysokość, sposób rysowania, funkcje specjalne, dane rysunku. Obrazy używają kompresji w postaci przeskakiwania mało istotnych pikseli (Komendy 0x80), jak i wykorzystywania pikseli z innych obrazów, czego jeszcze nie rozgryzłem (komendy 0x 00 XX YY ZZ 00). Komendy < 0x80 to ilość pikseli następujących po tej komendzie. Każdy piksel obrazka to indeks o wartości w przedziale od 0 do 255. Indeks ten wskazuje na kolor jaki jest załadowany w aktualnej palecie VGA DOSa. Pojedyńczy kolor ma 18 bitów, każde 6 bitów przeznaczonych jest kolejno na kolor czerwony, zielony oraz niebieski.
A5. Dokonujemy konwersji RGB 18 bit -> BMP RGBA 32 bit i zapisujemy wynik do pliku.
Format wav
B2. MUSIC.RES zawiera kilka wav połączonych w jeden wielki plik. Wystarczy podzielić go na części i zapisać jako osobne pliki.
Format pcx
C2. pliki PCX wypakujemy zgodnie ze standardem PCX. Dokładne informacje na jego temat znaleźć można tutaj :
http://www.shikadi.net/moddingwiki/PCX_Format
Mam nadzieję, że nie zanudziłem zbytnio
.