Miesięcznik Bajtek 1993 /5 KLAN ZX SPECTRUM
Krótka rozprawa z taśmą (cz. 3 - ostatnia) Jacek Trojański
Zgodnie z obietnicą, zajmiemy się teraz przystosowaniem gry do zapisywania plików na dyskietce.
Przeważnie zapisywany jest bieżący stan gry lub tabela najlepszych wyników.
Jako przykład niech nam posłuży TAUCETI II - gra stara ale dobrze napisana i często korzystająca z taśmy. Umożliwia ona zapamiętanie stanu gry oraz własnoręcznie zaprojektowanych pojazdów. Ładować z taśmy możemy właśnie stan gry projekty statków, a także kolejne poziomy (jest ich pięć)
Procedury obsługi znajdujemy dosyć szybko stosując opisane wcześniej metody.
Najprościej jest poszukać (za pomocą monitora) nazwy pliku nagrywanego, np."level...”
W ten sposób odnajdujemy tablicę
#89F0 : chr(3) 'Game File'
#8A01: chr(3) 'Ship Data'
#8A12. chr(3) 'level III '
#8A23: chr(3) 'Extra lev'
Pod adresem #8224 znajdujemy tablicę, służącą do dopisywania końcówek z numerem levelu:
#8224 : 'EXTR' #8228 : ' I '
#822C : ' II ' #8230 : ' III '
#8234 : ' IV ' #8238 : ' V '
Odpowiednia końcówka jest kopiowana pod adres #8A19, czyli po spacji za słowem "level“. Widać, że prócz wymiany procedur, będziemy musieli zmodyfikować tablicę z nazwami tak, by nie zawierały one wewnątrz spacji. Wpierw jednak zajmiemy się samymi procedurami. Po żmudnych poszukiwaniach odnajdujemy adresy' #89BE (LOAD) i #89B3 (SAVE).
Są to procedury niskiego poziomu, wspólne dla wszystkich operacji, jednak bardzo trudno je przystosować do współpracy z dyskiem. Szukamy więc wszystkich wywołań (rozkazów CALL 89BEh i CALL 89B3h. czyli ciągów #CD, #BE,. #89 i #CD, #B3, #89).
Następnie cofamy się, ustalając właściwy początek badanej procedury.
Ostatecznie otrzymujemy adresy #87C0 (LOAD) i #88FA (SAVE) Warto przeanalizować umieszczony tam kod w całości, jednak zostawiam to jako ćwiczenie dociekliwym czytelnikom.
Każda z tych procedur, poza ładowaniem lub nagrywaniem odpowiednich bloków, ma za zadanie rozróżnić. czy jest to level, projekt statku. czy stan gry. a następnie dobrać nazwę z omówionej wcześniej tabeli.
Ponadto wyświetlane są różne komunikaty. Porównajmy treść procedur z zamieszczonymi listingami. Dodatkowych wyjaśnień wymagają parametry wejściowe. Dla procedury LOAD:
level C=4, .B=4
ShipData C=2, B=2
GameFile C=9, B=0
Z tych wartości obliczany jest adres nazwy, W przypadku, gdy ładowany ma być poziom (level), akumulator zawiera jego numer.
Dla procedury SAVE występują tylko dwie wartości parametru: B = 2 dla ShipData
i B = O dla GameFile (poziomów przecież nie można zapisywać).
Najlepszym wyjściem będzie diasemblowanie bloku pamięci od #87C0 do #89B3 z zapisaniem na taśmę (lub dysk). Następnie zbędne linie zastępujemy tymi z listingów (obszary "wykropkowane" na wydrukach nie ulegają zmianie). Po kompilacji programu z listingu 1. nagrywamy go np. pod nazwą OVL1.BIN. Musimy jeszcze sprawdzić jaki adres otrzymała etykieta ROMON (przełączanie ROM-ów, wspólne dla obu procedur).
Adres ten przypisujemy etykiecie ROMON w listingu drugim (powinien on wynosić #88C1 o ile listing 1 nie byl modyfikowany).
Drugi utworzony blok kodu zapamiętujemy w pliku OVL2.BIN. Teraz trzeba załadować główny blok gry i "dograć" nasze pliki pod odpowiednie adresy (#87C0 i #88FA).
Jednak to nie wszystko.
Trzeba jeszcze zmodyfikować tablicę z nazwami. Powinna ona wyglądać następująco:
#89F0 DEFM chr(3), "GAMEFILE"
#8A01 DEFM chr(3), "SHIPDATA"
#8A12 DEFM chr(3), "LEVEL"
#8A23 DEFM chr(3), "EXTRALEV"
Drugą tablicę (z rzymskimi numerami leveli) pozostawiamy bez zmian; Zauważmy, że numery te będą przepisywane pod adres #8A18, czyli bezpośrednio po słowie "level".
Ostatnią czynnością będzie wyszukanie w pamięci słów "TAPE", "tape" i "Tape" i ich zamiana na "Disk".
W ten sposób w menu gry zamiast "Tape menu” będzie napis "Disk menu” itp.
Po zapamiętaniu głównego bloku gry, przystępujemy do kopiowania leveli.
Nadajemy im oczywiście nazwy "LEVELI", "LEVELII", aż do "LEVELV".
l to właściwie już wszystko. Tych, którym opisane czynności nie wydają się proste odsyłam do poprzednich części niniejszego artykułu.
Innym. w ramach rozgrzewki, polecam przeróbkę SIM CITY lub TETRIS (jest ona prostsza od opisanej). Tego typu gier jest całe mnóstwo; niektóre zajmują całą dyskietkę, lub jeszcze więcej.
Przystosowanie gier do współpracy z dyskiem daje satysfakcję, a przy okazji sama gra zyskuje na wartości i wzrasta przyjemność zabawy.
JACEK TROJAŃSKI
|
|
|
|