[#1] Kod źródłowy klonu Robbo
Razem z grą zamieszczam kod źródłowy, może ktoś przeportuje go na inne systemy... Gra jest w pełni systemowa napisana w języku C, Podstawowa operacja graficzna to BltBitMap() - rysuje ikonki.

http://minniatian.republika.pl/Robbo/RobboSrc.lha

[#2] Re: Kod źródłowy klonu Robbo

@Minniat, post #1

Witam,

Nie za bardzo rozumiem, czemu czekasz dziesięc ramek w pętli gry po blitbitmap, być może to jest powodem opóźnień joysticka. Podejrzewam, że lepszym rozwiązaniem jest wykorzystanie timer.device i uśpienie zadania na ten okres czasu. Ale to tylko propozycja bo ja jestem waflem w tym temacie ( timer.device ).


Pozdrawiam

[#3] Re: Kod źródłowy klonu Robbo

@asman, post #2

Ta przerwa nadaje odpowiednie tempo gry. Jeśli chcesz to mogę zmniejszyć te 10 ramek do ośmiu (testowałem). Wtedy gra będzie szybsza. Co do timer.device to jego użycie spowoduje, że gra może mieć tempo różne od częstotliwości wygaszania pionowego, tylko jakiejś dowolnej wartości (np. 1/15 sekundy), ale uważam to za niepotrzebne.

[#4] Re: Kod źródłowy klonu Robbo

@Minniat, post #3

Minniat napisał(a):

> Ta przerwa nadaje odpowiednie tempo gry.

A jakie tempo jest odpowiednie? Takie przy odswierzaniu pionowym 50Hz czy takie przy odswierzaniu pionowym 100Hz?

> Jeśli chcesz to mogę
> zmniejszyć te 10 ramek do ośmiu (testowałem). Wtedy gra będzie
> szybsza.

bez sensu. Tempo gry bedzie zalezalo od tego, jaka czestotliwosc odswierzania pionowego ustawil sobie posiadacz komputera.

> Co do timer.device to jego użycie spowoduje, że gra
> może mieć tempo różne od częstotliwości wygaszania pionowego,

Nie, uzycie timer.device spowoduje, ze gra bedzie miala tempo niezalezne od czestotliwosci wygaszania pionowego. Czyli tak, jak powinno byc.

> ale uważam
> to za niepotrzebne.

To ty tak uwazasz, a 90% osob ktore wyprobuja twoja gre bedzie niezadowolonych.

PS. Na kartach graficznych ktore nie potrafia wygenerowac IRQ po kazdej ramce obrazu WaitTOF() bedzie sztuczna przerwa ktorej czas tez jest srednio definiowalny.

PPS. uzyj timer.device. Jesli nie chcesz/nie potrafisz, to zainteresuj sie funkcja Delay() z dos.library.

[#5] Re: Kod źródłowy klonu Robbo

@szuler, post #4

1) To prawda, że tempo gry będzie zależało od oświeżania pionowego ale uważam, że tak jest dobrze. Osobiście używam trybu EURO72: 320x200 z odświeżaniem 70Hz. Obraz jest bardzo stabilny.

2) Ten typ gry jak Robbo może mieć tempo zależne od odświeżania pionowego, chodzi o to, że gra podzielona jest na tzw. generacje (automat taki jak gra Life) i zależy mi na synchronizacji wyświetlania ikon. Mogę jednak przetestować grę z timer.device.

3) Według mnie praktycznie wszyscy użytkownicy są zadowoleni z obecnego systemu "timeingu" gry.

4) Proponuję przeportować mój kod pod kartę graficzną. Jeśli chcesz możesz też wprowadzić timer.device (po to zamieszczam kod źródłowy)

Pozdrawiam.



Ostatnia modyfikacja: 06.08.2008 09:11:14
[#6] Re: Kod źródłowy klonu Robbo

@Minniat, post #1

Tak jak napisał szuler - tak się nie robi. Wszystkie operacje w grze powinny być związane z czasem. Zawsze się robi tak żeby np. idąca postać przemieszczała się w danym czasie o taką sama odległość. Niezależnie od tego na jakiej maszynie program jest uruchomiony. Na wolnym sprzęcie będą skoki, na szybkim będzie płynny przesuw ale zawsze prędkość będzie taka sama. A samo wrzucanie tego na ekran to już odrębna i nieistotna sprawa. :)



Ostatnia modyfikacja: 06.08.2008 09:14:39
[#7] Re: Kod źródłowy klonu Robbo

@MDW, post #6

Na PC klon Giana Sisters ( Giant Worlds Beta 0.83) jest napisany w ten sposób że prędkość jest zależna od odświeżania. Przy 100Hz jest za szybko (dobry CRT), przy 60Hz (LCD) za wolno....

http://www.informatik.uni-frankfurt.de/~sinsch/DownloadGianaWorlds.htm
[#8] Re: Kod źródłowy klonu Robbo

@MDW, post #6

Witam,

Zawsze się robi tak żeby np. idąca postać przemieszczała się w danym czasie o taką sama odległość. Niezależnie od tego na jakiej maszynie program jest uruchomiony

Czy mógłbyś trochę więcej na ten temat napisać albo pokierować mnie na jąką stronę ( tylko nie google - tam już byłem i troszkę poczytałem :) ), bo jestem waflem w tym temacie a chciałbym zostać kabanem. Najbardziej mnie interesuje kwestia przemieszczania i animacji. Czyli dajmy na to ludek ma się przemieścić powiedzmy 16 pikseli w lewo i mam na to 8 klatek animacji. Z tego co zrozumiałem to w najgorszym przypadku ludek od razu przemieści się 16 pikseli w lewo bez animacji. Z góry dziękuje

Pozdrawiam

[#9] Re: Kod źródłowy klonu Robbo

@asman, post #8

Witam ponownie,

W zasadzie to już sobie sam odpowiedziałem na pytanie. Wystarczyło dobrze zastanowić się nad ostatnim zdaniem z Twojej wypowiedzi.

A samo wrzucanie tego na ekran to już odrębna i nieistotna sprawa

W każdym razie dzięki

Pozdrawiam


PS: Nie ma to jak sobe zdać pytanie i samemu sobie odpowiedzieć ( chyba zostane omnibusem z 5-10-15 :D )

[#10] Re: Kod źródłowy klonu Robbo

@Minniat, post #1

main.c:225: warning: implicit declaration of function `openDisplay'

main.c:293: warning: implicit declaration of function `closeDisplay'

main.c:1002: warning: implicit declaration of function `getJoyEvent'

main.c:1027: warning: implicit declaration of function `setupJoy'

main.c:1035: warning: implicit declaration of function `setController'

main.c:1036: warning: implicit declaration of function `closeGamePort'

maps.c:15: warning: implicit declaration of function `Read'

resources.c:29: warning: implicit declaration of function `printf'

wpierw to popraw (tzn pododawaj odpowiednie pliki *.h)

potem pomysl zeby przepisac obslugę joyów na lowlevel.device, wtedy wszyscy skorzystają

[#11] Re: Kod źródłowy klonu Robbo

@MDW, post #6

Ha ha, pamiętam jak kiedyś napisałem sobie grę pod Amosem (posiadając gołą 020), gdzie należało komputerowego przeciwnika zablokować biegając wokół niego i zastawiając pola ograniczoną ilością bloków. Po paru latach odpaliłem tą grę pod 030/50 i po prostu nie dało się w nią grać, wszystko jednym słowem "zasuwało" :). Wtedy to właśnie stwierdziłem i w ogóle zorientowałem się, że milisekundy to jedyne wyjście dla pełnej synchronizacji. Dlatego może właśnie przestałem pisać projekty pod Amigę, bo byłem zbyt zielony, by móc wycisnąć z 030/50 to, co ludzie potrafią już napisać na 020. Oczywiście ja zacząłem od Amosa, próbowałem z AmigaE i zakończyłem na BlitzBasic2, kto wie, może gdybym miał więcej cierpliwości do C, projekty te udałoby się zrealizować jak choćby shoot'emka, który miał wypasioną grafikę i dlatego pod BlitzBasic2 chodził nieźle, ale nie przy większej ilości obiektów. Byłem leniwy, niecierpliwy no i kocham PHP i JavaScript :P a Tobie Minniat polecam gorąco przerobić to na milisekundy, to naprawdę nie wiele roboty.

Pozdrawiam!



Ostatnia modyfikacja: 08.08.2008 11:58:49
[#12] Re: Kod źródłowy klonu Robbo

@rzookol, post #10

Jakiego kompilatora używasz? U mnie (na Classicu) DiceC jak i GCC (po dodaniu otwierania bibliotek) kompilują się bez błędów i ostrzeżeń.

Co do lowlevel.library to spróbuję to wprowadzić.

[#13] Re: Kod źródłowy klonu Robbo

@Minniat, post #12

Domyślne ustawienia kompilatora nie są zbyt restrykcyjne.

[#14] Re: Kod źródłowy klonu Robbo

@Minniat, post #12

używam gcc, warningi Ci się nie pokazują bo nie masz dodanego -Wall podczas kompilacji. Warto to włączyć zeby potem mieć mniej problemów.

[#15] Re: Kod źródłowy klonu Robbo

@rzookol, post #14

Czy jest mozliwosc wystawienia screenow z gry? Albo binarki...
[#16] Re: Kod źródłowy klonu Robbo

@KAT, post #15

[#17] Re: Kod źródłowy klonu Robbo

@Minniat, post #1

Witam

Widziałem Twoją wersję Robbo i nie jestem pod wrażeniem ( ale to jest moje osobiste zdanie i nikt z tym nie musi się zgadzać ). Mówię to nie po to by Cię zdołować ale po to byś spojrzał krytycznym okiem na to co stworzyłeś.

1) Skoro nie używasz podwójnego buforowania to po co allokujesz dwie bitmapy o wielkości ekranu ?

2) Po co ustawiasz flagi DBUFFER , przecież nie używasz systemowych bobów ?

3) dlaczego nie wybrałeś bitmapy typu interleaved
( bodajże flaga BMF_INTERLEAVED ) ?


Pozdrawiam

[#18] Re: Kod źródłowy klonu Robbo

@asman, post #17

Szkoda, że nie przetestowałeś gry z bombami i działkami - gra wyglądała bardzo atrakcyjnie. Teraz możesz to dodać za pomocą edytora map.

1 i 2) display.c, resources.c oraz joysys.c współdzielę z innymi moimi programami i to taka pozostałość (w innych programach np. używam podwójnego buforowania).

3) Nie jest to konieczne w Robbo. Używam tego z kolei w moim edytorze map do Benefactora, żeby scrolling mapy odbywał się płynnie i bez "przebarwień".

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem