ZX Spectrum > GRAFIKA
Wyciaganie grafiki z gier/dem/binarek
Micky:
Jako kontynuacja watku z dzialu muzyki
http://speccy.pl/forum/index.php/topic,335.msg9786.html#msg9786
Do tego celu uzywalem SGE a dzisiaj znalazlem Tile Molester i Tiledggd.
Wiecej na http://www.zophar.net/utilities/graphutil.html
SGE uzywalem wczesniej do prac zwiazanych z reverse engineering na roznych mikroprocesorach.
Ostatnio widzialem Renegade Levels http://www.worldofspectrum.org/infoseekid.cgi?id=0019052 i chcialbym sie dowiedziec w jaki sposob zostaly wyciagniete grafiki. Prakryczne wskazowki mile widziane :)
RafalM:
Aaaach, Renegade :) Jedna z moich ulubionych gier. Całkiem sporo dłubałem przy tej grze i jak się kiedyś uda to wypuszczę do niej moda czyli grę z pozmienianym tym i owym.
To co zrobiono w tym demie to trochę bardziej zaawansowana szkoła jazdy niż proste wyciągnięcie sprajta ale podzielę się tym co wiem i pewnymi moimi sztuczkami :)
Dobrym nawykiem jest zacząć od SGE by spróbwać zobaczyć w trybie graficznym jak zapisane są dane
Trochę eksperymentów z szerokością kolumny i adresem początkowym i mamy coś takiego:
Nie wiem jak inni ale ja tu potrafię dostrzec bloczki (tiles) budujące tło ;), rozmiarów 8 na 8.
Jeśli przyjrzymy się ekranowi podczas gry to zobaczymy że niektóre takie bloczki jak np. okna, podłoga powtarzają się wiele razy. Stąd podejrzenie że obszar gry musi być zapisany w postaci jakieś mapy typu:
N11 N12 N13...
N21 N22 N23...
N31 N32 N33...
..... ..... .....
Gdzie np. N21 to numer wyświetlanego bloczka w drugim rzędzie i pierwszej kolumnie.
Później okaże się że istotnie tak jest :)
cdn...
Micky:
właśnie o to mi chodziło - interesuje mnie metodologia jak szukać odnośników do tych 'cegiełek',
czyli gdzie i jak jest zakodowana mapa.
Z niecierpliwością czekam na kolejne odcinki :)
p.s. Renegade i u mnie cieszyło się dużym wzięciem :)
EDIT: jeśli admini nie mają nic przeciwko, to dołącz proszę plik r2.sna na którym pracujesz - będą pliki do tutoriala :)
RafalM:
Plik to zwykły snapshot zrobiony na pierwszym poziomie.
Jedna uwaga do Renegade - kod wersji pod 48 kB i 128 kB dość istotnie się różni. Ja bawiłem się wersją 48 kB i moje dotychczasowe i dalsze postępowanie tej wersji dotyczy.
Co robimy dalej?
Przyjrzyjmy się ekranowi i polu gry. Czasem w grach jest one węższe niż 256 pikseli, ale w przypadku Renegade zajmuje ono całą szerokość ekranu i zaczyna się na samej górze. Dlatego możemy przyjąć że lewy górny bloczek mapy zostanie skopiowany pod adres 16384 - początek pamięci ekranu Spectrum.
RafalM:
Użyjemy dalej emulatora Spin v0.7 Wersja jest ważna, bo wcześniejsze wersje nie potrafią robić pewnych rzeczy.
Wczytujemy grę do emulatora. Jest menu i leci muzyka. Wchodzimy w debugger i ustawiamy breakpoint Tools/Debugger/Breakpoints/SetBreakpoint
Ważne by wyczyścić pole Adres. Inaczej nasz warunek będzie sprawdzany tylko wtedy gdy wykonujemy rozkaz pod danym adresem a chcemy wejść do debuggera zawsze gdy odbywa się zapis pod adres 16384
Nawigacja
[#] Następna strona
Idź do wersji pełnej