Ok, w zalaczniku przesylam pierwsza wersje silnika izometrycznego: execute i zrodlo (w 64tass). Wymyslilem dzialanie silnika bez zadnych pomocy i wglebiania sie w temat wiec albo wywazalem otwarte drzwi albo napisalem glupi algorytm ale potraktowalem to jako wyzwanie wiec ciiii:). Mimo wszystko dziala w miare szybko. Jest w stanie wyrysowac plansze w czasie okolo 2 ramek wiec spokojnie mozna sobie podzielic rysowanie planszy na dwie ramki po polowie co nie wplynie na odtwarzanie muzyki, sterowania czy AI.
Od razu zaznaczam, ze:
Jestem raczkujacym programista wiec chetnie wyslucham wszelkich opinii na temat \"niuansow\" w tym kodzie choc jest to \"kod wyrzygany\" - zmieniany sto razy w ferworze pracy nad silnikiem, na tym etapie ma po prostu to dzialac

. Nie optymalizowalem kodu, nie speedowalem zadnej z czesci ze wzgledu na to, iz na tym etapie jedynie probowalem wprowadzic swoja idee. Wszelka optymalizacje wykonam oczywiscie na koncu

. Jest tam na przyklad jedna brzydka petla (2x wykonywana) z uzyciem zmiennej LINE2 (ktorej nazwe tez w sumie musze zmienic), tego momentu nie unrollowalem na razie.
Gwoli wyjasnienia:
Bitmape bitmap.png tworze na Amidze i konwertuje do znakow ASCII swoim sprawdzonym programem

. Podobnie z tablicami. Bitmapa czytana jest jako 16 kwadratow (kazdy po 8 pikseli oczywiscie) w poziomie.
Wymyslilem sobie metode \"sasiadow\" zapisana w nybble, lewy nybble to aktualne pole a nastepny nybble to pole sasiadujace (Amaurote-neighbours.png). Tym sposobem tworzone sa znaki dla wszystkich mozliwosci a potem dana wartosc, np: 01 dla szukanego lewego sasiada to znaki 22 i 23. Zakrecone troche, ale przyspiesza znacznie wyswietlanie.
Wyswietlana jest linijka po linijce po dwa znaki. I co najwazniejsze: dodanie nastepnych obiektow nie wplynie na predkosc wyswietlania wcale.
Nie wiem czy dobra droga podazam, bo jezeli pojawi sie wiecej rodzajow pol i dla kazdego narysowac bede musial wszystkie mozliwosci to moze tych znakow zabraknac. Ale wydaje mi sie, ze dzieki temu bardzo szybko sie to wyswietla, wiec jezeli Amaurote bedzie niemozliwe do konwersji w ten sposob, zawsze pozostanie mi silnik dlatego nie liczylem czy starczy znakow - jak starczy to ok. Innej metody nie jestem w stanie wymyslic.
Obiekty \"wystajace\" ponad ziemie to kolejny etap, wszystko wlasnie chcialem wyrysowac bez modyfikacji charsetow na gotowym zestawie, wiec zastanawiam sie jak to rozwiazac dla tak roznorodnej ilosci pol. Mysle, ze wszystkie muchy, naszego \"pajaka\" moga byc tylko sprite\'ami z nakladana maska zaslaniajacych elementow.
Wiec to na tyle, rozgryzlem izometrie w ten sposob - jezeli ktos znalazlby jakies udogodnienie badz tez zaproponowal inne rozwiazanie - byloby super. Wyzwanie jest spore

.
Co do obslugi mozna klawiszami kursora przesuwac sie po polach na ograniczonym obszarze.
Mam tylko problem w wyswietlaniu pozycji x i y w postaci decymalnej.
W include/print_screen.asm probowalem z:
Kod: |
lda #0 ldx map_x jmp $bdcd |
ale zawiesza mi przerwania chyba. Po rozwinieciu tego co kryje sie pod $BDCD okazalo sie, ze \"przeszkadza\" JMP $AB1E. Nie drazylem tematu bo dowiedzialem sie o tym prostym przeksztalcaniu hex2dec godzine temu i nie chcialem zwlekac z tym kodem wiec HEEEELP!!
To chyba wszystko na razie, temat otwarty chyba, zobaczymy. Mam nadzieje, ze nie dalem plamy z tym moim kodowaniem
.
Nie wiem do konca jak nalozyc na to sprite\'y skoro czarny jest przezroczystym (nie odseparuje sprite\'a od planszy na czarnym tyle) no i jeszcze dochodza te \"ramki\" z bokow, moze najlepiej z czegos po prostu zrezygnowac. Ktos umialby zamiescic w kodzie player z muzyka z gry?
BTW. Wersja Amaurote na ZX Spectrum jest nieco bogatsza niz ta na Atari wiec warto sie na niej skupic
.
No i wszystkiego najlepszego Commodore 64! Rok w rok obchodzimy te same urodziny
.
Edit: poprawilem te wyswietlanie koordynat w pliku i jeszcze raz wrzucilem zalacznik, zeby nie robic nastepnej wersji archiwum.
 :Opis: | |  Pobierz |
 :Nazwa zalacznika: |  :AMAUROTE.rar |
 :Rozmiar: |  :16.28 KB |
 :Pobran: |  :Plik sciagnieto 41 raz(y) |