@Krashan,
post #58
Straciłem dziś nieco czasu na usunięcie bardzo dziwnego błędu. Niektórzy gracze raportowali, że kropki w grze mają uszkodzoną grafikę. Początkowo nie byłem w stanie tego błędu u siebie odtworzyć, ale w końcu okazało się, że występuje w specyficznych okolicznościach: system 3.1, ale nie nowszy, do tego brak karty graficznej (dokładniej, karta może sobie być, ale Workbench na ekranie OCS/ECS/AGA) i koniecznie ekran WB w 4 kolorach. Ostatecznie błąd udało się wyeliminować, poprawiony kod jest już na GitHubie. Szczegóły błędu dla ciekawskich poniżej. Dla wszystkich jeszcze dodam, że prace nad selektorem poziomów w toku.
A teraz do błędu. Żeby zoptymalizować rysowanie kropek, przy starcie gry, obraz kropki był rysowany w pomocniczej bitmapie, która była alokowana z parametrem friend bitmap ustawionym na bitmapę ekranu. Chodzi tu o to, że system tę pomocniczą bitmapę ma stworzyć w takim formacie, żeby blitowanie do frienda było jak najszybsze. Brzmi logicznie. Tylko że nie przewidziałem, że gdy bitmapa kropki i bitmapa ekranu mają tyle samo bitplanów (czyli 2) to moja bitmapa dostaje przeplotu i maska się do niczego nie nadaje. Gdy ekran ma 8 lub więcej kolorów, liczba bitplanów się nie zgadza i moja bitmapa nie ma przeplotu.
Co ciekawe w systemie 3.1.4 "poprawiono ten błąd", programiści uznali, że skoro w dokumentacji była mowa o tworzeniu maski w określony sposób, to ten sposób ma działać zawsze. No i działa.
Koniec końców doszedłem do wniosku, że wcale nie wolniejszym sposobem będzie bezpośrednie rysowanie kropek funkcją BltTemplate() (dwa wywołania na kropkę) od razu w rastporcie okna. Testy wykazały, że mam rację i w ten sposób całkowicie pozbyłem się tej nieszczęsnej bitmapy pomocniczej i funkcji BltMaskBitMapRastPort() z kodu.
A w ogóle to należałoby skorzystać z podsystemu GELs, ale primo lenistwo, secundo nie wiem na ile dobrze jest to emulowane przez systemy RTG.