Final Fantasy VII to jedna z najważniejszych gier w bibliotece pierwszej konsoli Sony, która w dużej mierze przyczyniła się do spektakularnego sukcesu PlayStation i pokonania Segi oraz Nintendo w wyścigu po koronę królowej piątej generacji konsol. Już jutro za sprawą remake’u Final Fantasy VII na PS4 wspomnienia związane z pierwowzorem gry na pewno odżyją w niejednym domu. Mimo, że pod względem mechaniki będzie to zupełnie nowe spojrzenie na FFVII, to pierwsze recenzje sugerują, że twórcom udało się zachować wyjątkowy klimat pierwowzoru.Przy okazji premiery Final Fantasy VII Remake przypomniało mi się o pewnej publikacji, o której zapewne niewiele osób ma pojęcie, a która w bardzo szczegółowy sposób analizuje silnik FFVII na PSX i rozkłada go na czynniki pierwsze. Mowa o „Gears” A look inside the Final Fantasy VII Game Engine autorstwa Joshua Walkera oraz „Qhimm Team”. O jej istnieniu dowiedziałem się za sprawą jednego z Was mniej więcej rok temu (dzięki Łukasz!).„Gears” A look inside the Final Fantasy VII Game Engine to typowo fanowski projekt ludzi, którzy swego czasu próbowali sklonować oryginalny silnik Square, na którym oparto Final Fantasy VII, tak by wykorzystać go w środowisku PC. Więcej na ten temat możecie przeczytać na stronie projektu oraz na SourceForge, gdzie bardzo wczesną wersję silnika można pobrać. Niestety projekt ten od wielu lat nie jest już rozwijany i nie zanosi się na to by miało to ulec zmianie.Tak czy inaczej, jeżeli interesują Was techniczna strona Final Fantasy VII, to przy okazji premiery gry na PS4 warto dowiedzieć się czegoś więcej na temat silnika oryginału. „Gears” A look inside the Final Fantasy VII Game Engine możecie pobrać zupełnie za darmo tutaj.A co tak dokładnie możecie znaleźć w tej publikacji? Nasz forumowy kolega @verteks podjął się analizy tego dokumentu, a oto efekty tej pracy. Pozwólcie, że oddam mu głos. 😉———————————————————-Dokument scharakteryzowałbym tak:wyraźny podział na wersję z PS1 i port na PC;zero deasemblacji kodu źródłowego gier…;…ale za to dość powierzchowna analiza jak ten kod działa, podziału na moduły i jak one ze sobą współpracują;skupienie się na zasobach / danych jakie FF7 używa, to jest formaty modeli, tekstur, teł, budowa szkieletów postaci i tak dalej;Te „kody” w C++ / Delphi to sposób na opisanie formatów danych, typy danych z tych języków upraszczają opis wielkości poszczególnych pól – zamiast pisać, że oś X ma rozmiar 32 bitów / 4 bajtów, łatwiej napisać że jest w rozmiarze int i programiści wiedzą jakich wartości się spodziewać.dużo matematycznych wzorów na liczenie obrażeń danej broni, czarów – mechaniki gry, jakieś materie, stany postaci, hodowla Chocobo i tak dalej (nie wiem jak to działa w grze, nie grałem jak pisałem wcześniej);Generalnie grupa ludzi za odpowiedzialna „Gears” A look inside the Final Fantasy VII Game Engine skupiła się na hackowaniu zasobów w celu podmiany teł, modeli i tym podobnych.Ciekawostki:podział kodu na rdzeń (kernel) oraz moduły wywodzi się z pierwszej gry w serii, to jest Final Fantasy na konsolę Family Computer / Nintendo Entertainment System i niezmieniony zachował się do siódmej części włącznie. W pierwowzorze wynikał on z tego, jak Famicom / NES działają;moduły te mają ściśle wyspecjalizowane zadania i nie odwołują się bezpośrednio do sprzętu – od tego jest rdzeń, taka warstwa abstrakcji pomogła w przeportowaniu gry na PC;FF7 został napisany z pomocą środowiska Psy-Q, popularnego wśród twórców gier na PS1, dowodem na to są statycznie dołączone do kodu biblioteki Psy-Q i kilka formatów danych zgodnych z narzędziami będącymi częścią środowiska developerskiego;w zapisie gry pierwsze 80 bajtów to zduplikowane dane z dalszej części sejwa – zrobiono to w celu przyspieszenia wczytywania podglądu w menu save w grze; zmiana tych danych jest tylko kosmetyczna – zmienione dane się wyświetlą, ale po wczytaniu gra z nich nie skorzysta, tylko z tych w dalszej części pliku zapisu;filmiki FMV są w palecie kolorów o rozmiarze 24 bitów, ale grafiki wykorzystane podczas rozgrywki mają paletę kolorów tylko 15 bit;gra kontroluje napęd PS1 w specjalny sposób w celu uniknięcia zwiech przy zmienianiu modułów;gra ma ukryty duży tryb debugowania, gdzie poszczególni twórcy mieli swoje pokoje w grze do testowania różnych zdarzeń z gry – część zdarzeń nie działa prawidłowo powodując bugi;gra używa własnego języka skryptowego do obsługi rozgrywki, język ma 246 (!) różnych poleceń;w celu obliczania obrażeń podczas walk gra wykonuje 19 kroków na podstawie wielu danych (bardzo nerdowych danych nadmienię);w grze jest 319 unikalnych przedmiotów a jest tylko 256 unikalnych identyfikatorów, początkowe ID są przypisane do dwóch przedmiotów jednocześnie, a jaki jest to przedmiot rozróżnia się po ilości – jeżeli ilość jest nieparzysta, no to jest to jeden przedmiot, jak parzysta to drugi (w grze można mieć tylko 127 / 128 sztuk danego przedmiotu?);dane generalnie wszystkie są skompresowane, użyte algorytmy to LZS (specyficzny, dobrze opisany w dokumencie) i GZIP;To takie ciekawostki, które wydają mi się najciekawsze, jeśli coś konkretnego miałbym napisać to dajcie znać co, a możecie to zrobić w tym wątku na forum.———————————————————-Jeszcze raz wielkie dzięki @verteks, za przetłumaczenie tego na ludzki język. Na koniec wrzucam Wam również ciekawostkę, a mianowicie polską reklamę Final Fantasy VII, towarzyszącą premierze gry w naszym kraju ponad 20 lat temu. Niewiele takich reklam ukazywało się w prasie w tamtym czasie, więc tym bardziej można je docenić po latach. „Stoisz na progu świata, w którym panuje zło. Zostałeś wybrany, aby się z nim zmierzyć. Przygotuj się dobrze. Pojedynki z patrolami cyborgów i ich wytresowanymi potworami to nie przelewki. W tym świecie nie ma przebacz. Pamiętaj, wyjście będziesz musiał sobie wywalczyć mieczem i podstępem.”