Intro jest zbindowane z głównym egzekiem okami.A czy "główny ELF" w Okami ukrywałeś czy bindowałeś z cractro? Bo jeśli są osobne to można by łatwo zrobić dodatkową łatę, omijającą demo. Wtedy ws hack powinien działać.
Choć wówczas konsekwencją będą pirackie "wersje crippled". ;) Teoretycznie mamy ich gdzieś, ale wiesz jak jest... A ten preloader (czy jak go tam nie nazwiemy) to e-sztuka i zbrodnią byłoby pozbawiać Futrzaka takich atrakcji! ;D
Patcher wczytuje egzeka z płytki, pobiera tylko sekcje binarne, po czym kompresuje je i dorzuca jako oddzielną sekcję (w wysokim miejscu pamięci, odpowiednio poniżej minimalnej wartości stosu) do egzeka intra (ten jest już skompresowany i zaszyfrowany prostym algorytmem symetrycznym - nie pytajcie po co szyfrowanie tam było ;) ). Podmienia w odpowiednich miejscach w intrze (w niekompresowanej sekcji) wskaźniki do wielkości, sekcji pamięci, entry point, itp. Potem całość zapisuje w miejscu uprzednio zajmowanym przez egzek okami (całość jest mniejsza, więc to nie problem).
Przy uruchomieniu całość wczytywana jest do pamięci, odszyfrowywane jest i dekompresowane intro. Po skończeniu intra kopiowany jest w obszar systemowy malutki unpacker, który czyści pamięć, dekompresuje okami w miejsce, w którym było intro i czyści wszystko powyżej, ustawia odpowiednie parametry i usuwa sam siebie po czym przekazuje wykonanie do entry pointu okami (jest w scratchpadzie, szybkim cache procesora zmapowanym na pamięć, wcześniejsza wersja po prostu czyściła siebie, ale nie przeszkadzało to w wykonaniu, bo instrukcje były i tak w cache procesora i stamtąd je pobierał, jeśli nie wykonało się flush cache dla instrukcji, ale ponieważ pcsx2 nie obsługiwał instruction cache, na emu wszystko się wykrzaczało, stąd przeniesienie do scratchpada w późniejszej wersji).
No coż, nie da się tego prosto obejść nie tworząc wersji bez intra (prościej chyba byłoby dodać patch na WS do samego intra).
No i fakt. To intro było bardzo udane. Przyjemne dla oka, dosyć żartobliwe. Może nie było bardzo zaawansowane technicznie, ale swoje ciekawostki też miało Np. muzyka pobierana bezpośrednio z munge gry, więc nic nie było dodawane przez patcher, tylko rozszyfrowane (tak, muzyka w munge z jakiegoś powodu była szyfrowana prostym xorem, który zmieniał się według konretnego ciągu, którego kolejny element był opisany prostym wielomianem), dekompresowane (wersja ADPCM od CRIware, niekompatybilna z natywnym formatem SPU2) i zmiksowane (nawet cztery ścieżki w stereo - czyli osiem kanałów mono - czasami softwarewy mix, bo srzęt obsługuje tylko 4 kanały PCM - czyli 2 ścieżki stereo - stąd w niektórych momentach odgłosy z napędu DVD, jakby kogoś zarzynano - wszystko było czytane z płyty na bieżąco). Do tego warstwy i kilka fajnych efektów (w tym chyba pierwszy homebrew na darmowym ps2sdk+gskit, w którym działało przechwytywanie wyrenderowanej klatki z vram, dodanie efektu i ponowne wrzucenie - musiałem dopisać całą tę funkcjonalność, ponieważ w gskit zwyczajnie jej brakowało, musiałem też dodać wsparcie dla wyświetlania 4 bitowych bitmap, bo ich obsługa była absolutnie skopana, dodałem też prosty manager VRAM, bo tego do tej pory w gskit nie ma).
Nawet z perspektywy czasu intro nadal mi się podoba :). No i czarne liście + tribute ze smętną muzyką... Na tym pasażu wyszło w praktyce, jak przekazywanie instrukcji przez RPC EE<->IOP jest wolne - w 1/2 sekundy tylko 16 zmian głośności - prościej byłoby przekazać jedną komendę do fadeout/fadein i zrealizować całość na IOP, zamiast wysyłać poziomy głośności z EE ;). No, ale chyba nikt nie zauważył.