Hej,

Na początek witam wszystkich.
Kilka dni temu natrafiłem na kompilator cc65 i postanowiłem sprawdzić jak działa. Działa, więc trzeba było zabrać się za jakiś projekt...
Popularność komputerów 8 bitowych jest prawdopodobnie porównywalna z popularnością gier roguelike, czyli niewielka.
Gdyby więc brak popularności przemnożyć, mogłby wyjść projekt, który wyjątkowo mało kogo zainteresuje :-)
Tak oto zrodził się u mnie pomysł stworzenia 8 bitowej wersji gry Dungeon Crawl, czyli remake "w drugą stronę".
Od pomysłu do czynów nie daleko i efekt dwóch wieczorów można znaleźć tu:
www.alamak0ta.republika.pl/minicrawl.zip

W założeniach ma to być okrojona wersja pełnej gry, sterowana joystickiem/klawiaturą.

Aktualnie zrobione jest:
- Środowisko do kompilacji - Visual Studio + WinVice, ze względu na wygodę.
- Definicje broni, zbroi, potworów.
- Dwa generatory podziemi - standardowy oraz jaskinia. Zapewniona przechodniość.
- Losowo rozmieszczanie potworów, zależne od poziomu. Gra nie będzie dawała możliwości wyboru gałęzi, jak w oryginale.
- Podstawowa struktura gry - gracz, potwory
- Field of View - dwa rodzaje - w tym jeden rzucający cienie typu Ultima4.

Największy problem mam z prędkością funkcji rysujących z conio.h, co można zobaczyć w załączonym archiwum. Na Atari i C64 są koszmarnie wolne. Pod NES działają przyzwoicie.
Próbowałem używać dodatkowego bufora + refresh w stylu biblioteki Curses, ale w centrowanym FOV lub przy wykorzystaniu rzucania cieni zmian do narysowania jest zbyt dużo.

Dwa pytania:
- Czy jest ktoś chętny do pomocy w tym projekcie? Każda pomoc się liczy :-)
- Czy ma ktoś gotowe procedurki asm do szybszego rysowania znaków (dowolne platformy wspierane przez cc65)?

pozdrawiam,
Jakub

2

troche mi zajelo nim odnalazlem sie w roli znaku @, pozbieralem troche literek r i nawet jedna k
slowem - potrzebujesz grafiki, szybkoscia  to to w tej chwili tez nie grzeszy
mysle, ze gdybys pododawal troche komentarzy do kodu to znalazlo by sie troche chetnych do tego pisarstwa
a gdyby zastosowac algorytm ray castingu nie tylko do wyznaczania widocznych czesci mapy, ale do generowania widoku, to byla by z tego calkiem fajna giera

przechodze na tumiwisizm

3

Ojacię! Roguelike jak żywa - trzymam kciuki.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

Candle: z tymi literkami to właśnie o to chodzi :)

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

5

tak? :D
no ale mogly by byc chuc wieksze! :D

przechodze na tumiwisizm

6

ilmenit napisał/a:

- Czy ma ktoś gotowe procedurki asm do szybszego rysowania znaków (dowolne platformy wspierane przez cc65)?

Na atari pod sdx jest quicked, który zastępuje systemowy sterownik i działa ze 3x szybciej.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

7

fajna sprawa, zeby tak jeszcze wyrysowac to w jakims rzucie... nawet nie real time tylko po nacisnieciu jakiegos klawisza...
calkiem fajny projekcik.

http://atari.pl/hsc/ad.php?i=1.

8

Potestowałem jeszcze i wydaje mi się, że bez ASMa w time-critical code się nie obejdzie... :-/ Próbowałem bezpośredniego dostępu do pamięci ekranu na Atari i C64. Na Atari przyspieszenie w stosunku do conio jest duże. Na C64 prawie niewidoczne.
Natrafiłem za to na nieznany mi problem :-)
W pamięci ekranu znaki mają inną reprezentację niż w tabelach ASCII/ATASCII/PETSCII, które przynajmniej w 0x20-0x5E powinny się zgadzać... Nakieruje mnie ktoś na artykuł o tym lub rzuci słówko wyjaśnienia?
Będzie się trzeba też zająć PageFlippingiem, bo odrysowywanie jest męczące dla oczu.
Ktoś chętny do pomocy? :-)

9

http://tajemnice.atari8.info/9_92/9_92_6502.html

http://atari.pl/hsc/ad.php?i=1.

10

dzięki.

11

page fipping to chyba strasznie wielkie dzialo na ten problem, nie lepiej rysowac do bufora i robic blit na podstawowa strone? (direct draw mi sie wlaczyl) :D
do przerzucenia jest de facto kilka bajtow, modyfikowac display liste (poczatek pamieci ekranu) mozna, ale po co?
kolejna rutynka w asmie i problem zalatwiony

przechodze na tumiwisizm

12

I tu i tu muszę rysować do bufora. W przypadku page flipping jak rozumiem jedynie zmieniam adres pamięci ekranu (2 bajty), zaś przy kopiowaniu będzie kilkaset bajtów pamięci ekranu. W artku wskazanym przez xxl jest:
"Nie pozostaje nic innego, jak zmusić ANTIC, by wyświetlał dane bezpośrednio w kodach ATASCII. Jak? Wiem, ale nie powiem. A może ktoś z Was sam zgadnie?". Czy chodzi o zamianę miejscami poszczególnych fontów?

13

Tak, dokładnie :) Chodzi o odpowiednie "przetasowanie zestawu znaków". Z resztą kilka numerów później było wyjaśnione - taki mini-konkurs ze strony JBW :)

grzybson/SSG^NG

14

a było z gotowym kodem to robiącym? :)

15

conio ztcp uzywa cio, tak wiec poki nie uzyje sie quicked bedzie slamazarne.
co do page flippingu - 2 metody: albo 2x displaylist i przelaczanie sie miedzy nimi (w/g mnie o wiele lepsze rozwiazanie niz proponowane przez candla blitowanie w vsync), albo modyfikowanie jedynego dl, podmieniajac adresy pobierania danych ekranowych.

co do kodow ekranowych - najprosciej podmienic generator znakow, co przy okazji da namiastke grafiki (czyli np. zastapienie @ jakims symbolem postaci, zmiana znakow roznych scian, drzwi... to nawet w nakladkach na ADOM robili coponiektorzy, jak i na inne nethaki...)

candle: jak nie znasz "rogalikow" to polecam przyjrzec sie nethackowi, albo ADOMowi.
xxl: no przerobka z liter na grafike (np. przez wspomniana podmiane generatora znakow) nieco zmienia klimat i powoli sie z tego zacznie robic kolejna ultima...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

16

Zmiany generatora znaków to dla mnie zbyt dużo pracy... i nauki. Ostatni raz na Atari programowałem ze 20 lat temu :-)
Do ADOMa to był mój projekt PoC: http://www.alamak0ta.republika.pl/adomhack.html

Page flipping powinien być prosty przy jednym dl.

Grafika wbrew pozorom wiele nie zmienia. W oryginalnego Dungeon Crawl (wersja Stone-Soup) grywam głównie w wersję graficzną.
Klimat jest zachowany, zaś potworki bardziej czytelne. W przypadku tak małej rozdzielczości, jaką mają kompy 8 bitowe, pozostanę raczej przy literkach.

17

Nie zmieniać zestawu! Cała gra straci urok IMO. Przy polu gry 10x10 jest do skopiowania 100 bajtów - da się kilka razy na ramkę :)

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

18

ilmenit: o, wlasnie adomhack mi sie po glowie tlukl gdy pisalem o tej przerobce adoma :]
co do page flipping - w trybie gr0 rzeczywiscie wystarczy w dl w jednym miejscu podmienic adres poczatku ekranu, bo caly ekran miesci sie w 960 bajtach.
odswiez sobie wiadomosci o dl z http://atariki.krap.pl/index.php/ANTIC_Display_List
http://tajemnice.atari8.info/4_92/4_92_demo.html
jak podmieniac zestaw znakow dowiesz sie z:
http://tajemnice.atari8.info/9_92/9_92_demo.html

btw. az mnie zdziewka dopadla ze w atariki nie moge znalezc informacji na temat zmiany zestawu znakow... za proste by warte bylo opisywania?

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

19

trol trola trolem pogania :)

20 Ostatnio edytowany przez ilmenit (2009-03-01 21:41:51)

Ależ się namęczyłem z tą zmianą zestawu znaków... Dla przyszłych ludzi zaczynających z CC65 dwie małe informacje:
- Pod koniec pamięci jest runtime, więc obniżenie dostępnej pamięci jak jest we wszystkich tutorialach powoduje mazanie po kodzie. Przealokować go gdzieś inaczej nie jest tak prosto...
- Obniżenie pamięci o mniej też powoduje losowe zwiechy, ponieważ CC65 zakłada, że dostępna liczba pamięci się nie zmieni.
- Mało gdzie jest napisany taki drobny szczegół, że dostęp do zestawu znaków musi być wyrównany do 512 bajtów...
- Teoretycznie powinno się dać wyrównać bufory w plikach asm za pomocą .align, ale wyrównanie jest maks. do 256 bajtów.

Ostatecznie z przekopiowania znaków zrezygnowałem. Jak będzie na koniec miejsce w pamięci, to zacznę się bawić.
Zamieszczam poweekendowy progress:
http://www.alamak0ta.republika.pl/minicrawl2.zip
Na funkcję grafiki zrobiłem wrappery zgodne z biblioteką Curses wraz z podwójnym buforowaniem, dzięki czemu ekran przestał być odrysowywany. Dzięki temu mogę też kompilować i wykonywać kod natywnie pod Windows, co znacznie ułatwia szukanie i poprawianie bugów. Wczoraj zaś natrafiłem na kompilator z88dk. W nim na dostęp do ekranu też dodałem wrappery zgodne z curses i udało mi się skompilować gierkę na Spectrumnę :D
W grze można już chodzić i powalczyć z potworkami, ale jest to maksymalnie uproszczone - nie można na razie używać broni ani innych przedmiotów. Statystyki wrogów już na to czekają, więc umiera się szybko.
Są też losowo generowane przedmioty i sporo rzeczy w środku niewidocznych jeszcze dla użytkownika.
Pobawiłem się też  trybami graficznymi >0 i efekt jest całkiem zadowalający :) Gra działa szybciej, bo jest mniejszy ekran do kopiowania, pole gry jest czytelniejsze przy większej czcionce, może być w prosty sposób kolorowe, zaś na dole pozostanie konsola tekstowa na komunikaty.
Czyli ogólnie może powstać z tego coś fajnego.

21 Ostatnio edytowany przez ilmenit (2009-03-04 20:08:19)

Nowa wersja do ściągnięcia:
http://alamak0ta.republika.pl/minicrawl3.zip
Są tam przekompilowane wersje na Atari, C64, NES i Windows z użyciem klawiatury i joysticka oraz kod źródłowy.
W nowej wersji:
Dodany inwentarz, możliwość podnoszenia, zostawiania, zakładania przedmiotów (sterowanie z klawiatury lub joy).
Dodane podstawowe mechanizmy walki z użyciem broni i bez (balans walki pozostał do modyfikacji).
Dodany wpływ szybkości potworków na liczbę czynności, które mogą zrobić podczas tury.
Dodana konsola tekstowa.

Wersje na Atari i C64 są WOLNE.
I takie będą, póki nie zacznę optymalizować i przepisywać fragmentów na asm.
A może ktoś z forumowiczów mi w tym pomoże? :-)