ZX Spectrum > GRAFIKA

Wyciaganie grafiki z gier/dem/binarek

(1/6) > >>

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

[0] Indeks wiadomości

[#] Następna strona

Idź do wersji pełnej