Hej. Miałem dziś trochę wolnego (hehe, od 18.30 ;) ), ale odpocząłem sobie od FF12. Przysiadłem chwilkę do tego dekompresora/kompresora do plików z FFX. Nie wrzucam na priv, bo i tak będę publikował na rhdn, jak tylko go nieco lepiej przetestuję.
Kod: Zaznacz cały
ffxtool 0.1 by ffgriever
Usage: ffxtool [OPTION] INFILE OUTFILE
-c compress INFILE into OUTFILE
-d decompress INFILE into OUTFILE
-h display this help and exit
@robin
Przykładowy plik, który mi przesłałeś był nieprawidłowy. Albo ktoś użył nieudolnie napisanego dekompresora, albo źle zrzucił pamięć z ps2. Mój dekompresor powinien wypakowywać wszystko jak trzeba.
Sam kompresor również działa. Sprawdziłem go na kilkunastu plikach z różnych części gry. Wypakowałem, zmieniłem tekst, spakowałem, wrzuciłem do obrazu i gra działała jak powinna. Nie zawsze produkuje identyczny plik jak oryginalny (nawet jeśli nic nie zmieniam). W takich przypadkach plik wynikowy z mojego kompresora jest o kilka bajtów mniejszy niż oryginał. Dzieje się tak między innymi z tym plikiem z zanarkand przed meczem. Wrzuciłem go jednak tak przekompresowanego i też wszystko chodzi, więc i w reszcie powinno być ok.
Wątpliwości mam tylko co do jednej rzeczy. Czy maksymalny rozmiar runa to 259, czy 515 bajtów. Musiałbym dorwać jakiś oryginalny plik, w którym są aż takie powtórki.
Gra generalnie używa połączenia trzech typów bloków w skompresowanym pliku:
1. nieskompresowane dane
2. kompresowane z użyciem RLE
3. kompresowane z użyciem LZSS
Wszystkie mogą (i zwykle tak jest) występować w obrębie jednego pliku. Kompresor zawsze liczy dla wszystkich trzech i wybiera najbardziej efektywną metodę dla danego fragmentu pliku (stosunek ilości przekazanych danych do długości reprezentujących go danych w pliku wynikowym). Chociaż nie szuka zbyt wielu kroków naprzód, więc pewnie mógłby być jeszcze efektywniejszy (ale przecież nie zrobię brute force dla wszystkich możliwych kombinacji - nie jest to konieczne).
Byłbym zapomniał. Dekompresor/Kompresor obsługują pliki ze skryptem i sporo innych (type "01"). Niektóre z pozostałych plików korzystają jednak z innego algorytmu kompresji (typ "02"). Jeśli jednak cały tekst i obrazki będą w tych "01", to nie ma się co naprężać i pisać dla zabawy ;).
Jeśli ci brazylijczycy/portugalczycy z PO.B.R.E nadal nie mogą poradzić sobie z napisaniem kompresora, to po sprawdzeniu dam im cynk (i tak zauważą, jak toola zupladuję na rhdn).