Na stronie koleżanki ukazała się kolejna moja recenzja, tym razem książki “Tworzenie gier 2D i 3D w języku Turbo Pascal”.
Zapraszam do lektury pod adresem https://majkabloguje.blogspot.com/2024/01/788-tworzenie-gier-w-kilku-sowach.html!
Gwoli ścisłości i reliability załączam tutaj jej tekst.
Tekst
Będąc jeszcze młodym programistą – maksymalnie podstawówka – i zapalonym fanem języka Turbo Pascal (o którym złego słowa nie dam powiedzieć, choć uczenie go w roku 2023 studentów Wydziału Chemicznego zakrawa o absurd) wpadła w moje ręce książka Tworzenie gier 2D i 3D w języku Turbo Pascal. I choć już napisałem w tym języku kilka gier, to postanowiłem dać jej szansę. Byłem już posiadaczem dwóch egzemplarzy, oba komuś pożyczyłem i zapomniałem komu. Skleroza nie boli, ponoć.
Tym razem kupiłem trzeci egzemplarz, którego nie pożyczę już nikomu i na trwale umieszcze go na półce. Wiedza z tej książki jest już nieprzydatna, ale ze względu na walory o których napiszę dalej powinienem ją mieć pod ręką.
Zanim poważnie rozważycie zakup tej książki (co samo w sobie nie jest łatwe), przeczytajcie tę recenzję proszę do końca. Większość technik opisanych w tej książce jest po prostu nieaktualna, względnie napiszecie grę która na żadnym bieżącym sprzęcie się nie uruchomi. Zostaliście ostrzeżeni.
Na dzień dobry wita nas asembler – na co komu w roku 2023 assembler? A no odpowiedź jest prosta, przynajmniej z punktu widzenia historycznego: to musiało działać szybko. Otóż musicie zdać sobie sprawę z tego, że z punktu widzenia wydajności obliczeniowej posunęliśmy się bardzo daleko i komputery historyczne przy dzisiejszych to jak bicykl przy bugatti. Tak więc to ma sens z punktu widzenia historycznego – te rzeczy musiały się liczyć szybko. Istotnie, szereg ciekawych optymalizacji (sposobów na to, żeby ten sam problem policzyć szybciej) opracowany był w czasach gdzie o tzw. wspomaganiu sprzętowym nikt nie słyszał, ba nawet nie wyobrażał sobie, że coś takiego będzie w ogóle miało kiedyś sens. Jedynym ratunkiem był programista rozmawiający ze swoim sprzętem – kartą graficzną, kartą dźwiękową, klawiaturą – bezpośrednio. Chciał czy nie chciał, musiał to robić przy pomocy asemblera. Oczywiście teraz już nikt tego nie robi, bo systemy operacyjne dysponują zestawem swoich blbliotek – takich jak DirectX czy OpenGL, które gros pracy potrafią odwalić za nas, nie mniej jednak pamiętajcie Państwo, że książka została wydana w roku 2002, a to informatycznie rzecz ujmując – prehistoria.
Książka ta porusza jednocześnie dość wybiórczo i chaotycznie podstawy programowania, co czyni ją (mam nadzieję) przydatną dla osób, które doświadczenie z programowaniem mają ograniczone, aczkolwiek nie polecam jej dla zupełnych nowicjuszy – autor potrafi skakać z tematu na temat i na przykład w dziale o wczytywaniu obrazów BMP (bitmap) dowiecie się o podstawach automatycznego zarządzania pamięcią. Zły rozdział, zły opis, zły temat. Techniki opisane w tej książce nie są jednakowoż ograniczone do języka Turbo Pascal, stąd moim zdaniem niewłaściwy również tytuł, bo z powodzeniem można przenieść je również do innych języków pracujących w środowisku MS DOS. Opisują one dużo bardziej pewne strategie i to, jak działa sprzęt, nie zagłębiając się w specyfikę języka Turbo Pascal, ale nie powiem że wszystkie elementy zostały pominięte, bo chociażby ta pamięć automatyczna była rzeczą która zastosowania miała będzie właściwie tylko w tym języku, gdyż dotyka jego specyfiki.
Później przenosimy się do problemów karty graficznej i robiącej wrażenie jak na swoje czasy rozdzielczości 320×200, z którą to rozdzielczością będziemy pracować aż do końca książki. Pamiętajcie proszę że programy napisane pod system operacyjny DOS, w którym pracuje Turbo Pascal, potrafiły zaadresować maksymalnie 1 MB pamięci, a to dużo mniej niż wynosi ilość pamięci niezbędna do wyświetlenia wszystkiego na waszym nowym monitorze HD. Z drugiej strony nie zgadzam się z tym twierdzeniem że to było mało pamięci, bo kiedyś szło napisać super program który używał te swoje 60 kB pamięci, tylko trzeba było tą pamięć szanować. Wydaje się, że w dzisiejszych czasach, gdy jeśli brakuje Ci pamięci programista powie Ci to kup lepszy komputer, sztuka ta zupełnie zanikła. Z drugiej strony kiedyś nie było takiej dużej ilości danych i sam kojarzę jak miałem problem z dyskiem 200 MB – co na tym dysku ja mam nagrać, skoro to jest naprawdę dużo miejsca?
Potem przechodzimy do formatu pliku BMP i sposobach jak go wczytywać oraz wyświetlania mapy w grach RTS. Kojarzę jak kiedyś (gimnazjum) bardzo rzuciłem się na tzw. rzut izometryczny (rzut ¾ w nomenklaturze malarskiej, że tak powiem). Informacji o tym w książce nie było, ale nie żałuję, bo książka jest wszak dla początkujących. Netto, nie zachwycił mnie ten dział, bo większość rzeczy była tutaj napisana absolutnie zdroworozsądkowo.
Później przyszedł dział z kartą dźwiękową Sound Blaster (innej wtedy po prostu nie było) i też mnie nie zachwycił. Po prostu nie miałem karty dźwiękowej! W książki można dowiedzieć się przy okazji o kilku technikach stosowanych w informatyce, takich jak DMA, niespecyficznych dla tworzenia gier komputerowych (DMA samo w sobie dużo bardziej przydatne byłoby w pisaniu sterowników do urządzeń), z której średnio zaawansowany programista powinien zdawać sobie sprawę.
Teraz czas na opis najlepszego działu, w moim odbiorze, z tej książki. Tworzenie gier 3D. Musicie wiedzieć, że w dzisiejszych czasach problem jest z perspektywy programisty bardzo uproszczony, bo w wielkim skrócie wysyłamy karcie graficznej listę trójkątów do wyświetlenia i ona już się martwi jak to wszystko wyświetlić. Kiedyś nie było takich udogodnień i każdy piksel 2D musiał skądś się wziąć. Mówię Wam prawdę – w całym Internecie nie znalazłem lepszych materiałów, tłumaczących jak to wszystko ręcznie przeliczyć i jak z listy trójkątów 3D ustalić, który tak naprawdę jest widoczny, więc który powinien postawić zwycięski piksel na ekranie 2D. Dopiero po odczytaniu tej książki zrozumiałem o co chodzi w układzie współrzędnych (u, v) wykorzystywanych dla tekstur! Cała matematyka jest tutaj wyłożona jak krowie na rowie w taki sposób, aby każdy mógł to zrozumieć (nawet jeśli nie jesteś dobry z matematyki). Jeśli tylko wiesz, do czego służą te wzory i możesz zrozumieć problem z którym się mierzysz, wal śmiało! Dodatkowo, książka ta omawia jak policzyć te rzeczy szybko, co może ze względu na wzrost mocy obliczeniowej nie jest tak palące, jak liczenie wszystkiego od podstaw, nie mniej jednak dalej jest to cenne.
Zdaję sobie sprawę z tego, że masa z wiedzy w tej książce jest już niepotrzebna. Dużo prościej po prostu powiedzieć karcie graficznej czy systemowi operacyjnemu tutaj masz trójkąty, one mają takie tekstury, światło pada tak, radź sobie, czy też problem radzenia sobie w środowisku gdzie nie ma na wszystko pamięci przywołuje miłe wspomnienia, acz jest to już historia. Jednak w czasach, gdy ta funkcjonalność nie była dostępna, wiedza ta była po prostu elementarnie potrzebna. Fakt ten zapewnia tej książce stałe miejsce w mojej biblioteczce i wrócę do niej nie raz, po to, aby odkurzyć sobie wiadomości z tego zakresu.