|
Forum - Polski Portal COLOBOTa |
|
|
Architektura gry |
Autor |
Wiadomość |
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 02-10-2011, 17:11 Architektura gry
|
|
|
Do tej pory zajmowaliśmy się pierdołami. W przerwie od commitów (a może to tylko mi się svn zj**ał i nie widzę aktualizacji? ) spowodowanej rokiem szkolnym etc. postanowiłem poruszyć ten temat (tiaaaaa...)
Jak sama nazwa tematu wskazuje zajmować się będziemy architekturą, czyli czymś co jest konieczne do każdego dużego projektu programistycznego.
Zamknij więc te demoty, te komixxy, mistrzów i piekielnych też, które skrzętnie ukrywasz w drugim oknie przeglądarki gdy udajesz że szukasz na Wikipedii informacji o lasach tropikalnych. Zamknij też zminimalizowanego Minecrafta, i tak w końcu zginiesz (w grze oczywiście). Wersja ekstremalna: znajdź taki przełącznik z tyłu komputera, przełącz go na 0 a po 5 sekunach na 1 (możesz po krótszym czasie ale chyba nie chcesz spalić zasilacza bo wtedy już nigdy nie włączysz Minecrafta). Jeśli go nie ma to użyj zamiast tego takiego świecącego na czerwono przełącznika na listwie. Następnie włącz komputer i w przeglądarce nie przywracaj sesji tylko w czystym oknie wejdź na forum. Taaa, dobrze. Uporałeś się z czasomarnowaczami nowoczesnych technologii (por. http://eduwww.net/index.p...dzieja&Itemid=4 ).
Więc na takim systemie uruchom najnowszą wersję Colonization z SVN. Co widzisz? Lamerskie menu (to akurat pierdoła, więc nie będziemy jej poprawiać na coś mniej lamerskiego) a następnie lamerską mapę (płaszczyzna, tylko podtrzymujących słoni brakuje xD ) ze skrzynią w środku i skybox'a który ma przypominać góry. Można pewnym klawiszem utworzyć pojazd, który wisi w powietrzu (prawdziwie tibijska fizyka). Nawet nie wiadomo czy koła będą się poruszały jak powinny. Czy jeżeli umieścimy transporter to zostaną prawidłowo wczytane grupy tak abyśmy mogli animować chwytak? A może wystarczy jedna instrukcja a chwytak będzie animowany automatycznie (animacja w pliku z modelem)? Cały silnik fizyczny dziwnie działa - na skrzyni można się "osunąć" a stożek twardo blokuje przejście.
Kolejna sprawa - kod (hahaha!). Fragmenty łączące grę z silnikiem są skopiowane z neta niczym prace magisterskie studentów przedsiębiorczości i zarządzania. Plik CDeviceInfo.h najwyraźniej był tworzony na wzór API Micro$oftu. Po co duplikować kod dodając tylko literki L? Nie wystarczy normalny char*? Przecież UTF-8 jest kompatybilny z ASCII, po co komplikować? Czy nazw rendererów nie da się odczytać z Irrlicht'a?
Do czego zmierzam? Wszyscy się jarali (ja też) że już coś działa, a bazując na aktualnym kodzie można napisać co najwyżej single-player FPS-a z jednym nieruchomym wrogiem, ale za to z anaglifowym 3D (innowacja, sprzedajmy to!).
A więc jak to powinno wyglądać? No właśnie trzeba się zastanowić. (1) Musimy zaprojektować strukturę przestrzeni nazw i klas. Czym będzie rdzeń gry? Fizyki raczej nie będzie obsługiwał, więc co? Tylko zarządzanie obiektami? Synchronizację multiplayera? To dyskusje podobne do typu jądra przy tworzeniu OS-u (monolit, mikro czy hybryda?). (2) Jeżeli wykorzystujemy silnik fizyczny Irrlicht'a będzie on musiał działać także na serwerze. Jak zsynchronizujemy fizykę przy multiplayerze? Jak połączymy go z programowaniem i zdalną kontrolą robotów?
Z dotychczasowych propozycji wiem że mapy będą plikami 3D (mesh). Zuo, mhrok. Dlaczego? Jedną z cech decydujących o "otwartości" (hahaha) Colobota (pomijam otwartość kodu, hahaha) było użycie plików tekstowych do opisu poziomów. Dzięki temu ludzie mający ciekawe pomysły na fabułę, lecz nieumiejący obsługiwać Blendera czy 3Ds Max'a mogli tworzyć user levele. Mogli nawet nadawać "klimat" planetom dzięki wykorzystaniu własnych tekstur gruntu, mgły w wybranych miejscach etc. (3) Zastosujmy to też w Colonization! Dajmy wybór, czy mapa ma być bez obróbki ładowana z pliku (przyda się do scen indoor i np. do jaskiń) czy tworzona na podstawie heightmapy, opisu gruntu i opisów ozdób. Obiekty interaktywne *nie powinny* być w pliku środowiska! Podawałem już proponowaną strukturę, dawno dawno temu, o tu: http://www.colobot.cba.pl...topic.php?t=123 z tym że wtedy byłem jeszcze windowsiarzem i nie myślałem o multiplatformowych kontrolkach GUI.
GUI to kolejna ciężka sprawa. Czy interfejs *musi* być budowany na kontrolkach Irrlicht'a? Nie wyobrażam sobie edytora programów dla robotów. (4) Bardziej profesjonalnym sposobem byłoby zrobienie *kilku okien*, np. w GTK, w tym menu główne, edycja programu, projektowanie robotów (o ile wdrożymy ten pomysł) i, wreszcie, podgląd 3D.
Co do struktury klas: jak jeszcze lubiłem C# i próbowałem tworzyć CWorld, napisałem taki plik planet.cs: http://paste.debian.net/133643/
Struktura katalogów i plików wyglądała tak:
Kod: | .
./c-world.sln
./tests
./tests/interpolation
./tests/interpolation/interpolation.csproj
./tests/interpolation/AssemblyInfo.cs
./tests/interpolation/bin
./tests/interpolation/bin/Debug
./tests/interpolation/bin/Debug/interpolation.exe.mdb
./tests/interpolation/bin/Debug/c-world.dll
./tests/interpolation/bin/Debug/c-world.dll.mdb
./tests/interpolation/bin/Debug/interpolation.exe
./tests/interpolation/interpolation.pidb
./tests/interpolation/Main.cs
./AssemblyInfo.cs
./bin
./bin/Debug
./bin/Debug/c-world.dll
./bin/Debug/c-world.dll.mdb
./core
./Packages.mdproj
./c-world-core.pidb
./c-world.userprefs
./planet.cs
./c-world-core.csproj |
(planet.cs chyba miał się ostatecznie znaleźć w core...)
Tym optymistycznym akcentem w postaci przykładu kodu kończę. Liczę na odpowiedzi. Nawet na trolling, o ile będzie konstruktywny (konstruktywny trolling? Istnieje w ogóle coś takiego?)
pozdr
adiblol
[ Dodano: 02-10-2011, 17:26 ]
Cytat: | Irrlicht is not a game engine, it only does graphics. For a game, you need a bit more, like sound output and maybe networking and physics | http://irrlicht.sourceforge.net/faq.html
Czyli fizykę robimy zewnętrznie? Hm... |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Wronq
Dołączył: 05 Sie 2011 Posty: 27
|
Wysłany: 02-10-2011, 21:49
|
|
|
Jednym z ciekawszych pytań jest w jaki sposób będzie obsługiwany parser? Chodzi mi o to, co będzie co udostępniało jakiemuś obiektowi, który wypełnia instrukcje. To trzeba dobrze przemyśleć, żeby kicha nie wyszła na koniec, bo przeróbki mogą okazać się kosztowne, jeżeli z poziomu parsera będziemy się odwoływać do świata/plików/robotów itd.
Co proponujecie jako język skryptowy? C++? Czy na łatwiznę i jakieś lua? |
_________________ Some people see things as they are, and say "why?". I dream things that never were and say "why not?". |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 02-10-2011, 21:59
|
|
|
Wronq napisał/a: | Czy na łatwiznę i jakieś lua? | A idź Ty ze składnią Pascala
Najlepiej Python. Pytanie brzmi jak zrobić aby kod wykonywał się sprawiedliwie (tzn. tyle samo mocy CPU serwera dla każdego robota). Chyba żaden istniejący język skryptowy tego nie zagwarantuje. Musielibyśmy napisać własną maszynę wirtualną.
W bardzo zamierzchłych czasach nad tym myślałem http://c-world.cvs.source...1.4&view=markup |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Madman07
Wiek: 28 Dołączył: 29 Maj 2011 Posty: 133 Skąd: Ze Stargate ;]
|
Wysłany: 03-10-2011, 00:00
|
|
|
Widzę ze adiblol się zna na rzeczy To ja wtrącę parę swych uwag:
Fizyka. Tutaj mozna bazować na rozwiązaniu Source'a od Valve. Robimy istny podział serwer - klient (nawet dla gry single player, choć wtedy i serwer i klient to jedna maszyna, chociaz można to traktować jako dwie połączone ze sobą). Serwer liczy całą fizykę. Klient bawi się renderingiem 3d + tzw. prediction czyli bawi się kawałkiem fizyki dotyczącym gracza. O ile w single player to nie problem, to w multi duży wpływ mają pingi. Dlatego serwer liczy swoją fizykę graczy, a kazdy z klientów ją poprawia, żeby zapewnić jak najlepszą interakcję. Tak mi się wydaje, trochę siedzę w source.
Mapy, mapy, mapy. Nie wiem jak reszta, ale ja tu wolałbym levele z 3ds maxa tudzież jakiegoś hammera, radianta w formacie 3ds, albo bsp. Heightmapy mają kilka wad - praktycznie 0 (zero!) możliwości zbudowania pięknego tzw. skybox 3d, który jest stworzony poprzez powiększenie pewnego fragmentu mapy (wraz z różnymi efektami (sprities etc) + zwyczajny skybox w tle). Następna wada to brak możliwości jaskiń, a myślę, ze wiele osób by chciała je mieć. Ponadto o ile moje rozumienie jest ok, w przpadku map bsp wszelkie lightmapy itp są skompilowane, co odciąża grafikę usera i daje więcej fps
Programowanie robotów mogło by być w lua IMHO ale to już zalezy od was. Wspominam ten język tylko dlatego, ze jest składniowo nieco łatwiejszy.
A i roboty. Tu się skłaniam pozycji, że poszczególne części robotów są łączone w kodzie i animowane. Trochę więcej pracy dla programistów, choć jest drugie wyjście. Tzw. poses. W source działa to w ten sposób, żr podczas przygotowywania animacji, definiujemy np. minimalne, maksymalne wychylenie i pozycje neutralną. Można wprowadzić wiele takich animacji (proces jest nieco skomplikowany, zajęło mi dokładnie dzień żeby skumać, jak to działa dla 2 animacji). Załóżmy, że zamknięcie chwytaka definiujemy za pomoca liczb z zakresu 0-1 (otwarty/zamkniety). Dzięki poses możemy płynnie regulować stopień otwarcia chwytaka bezpośrednio z kodu (bez jego mącenia dodawaniem poszczególnych części modelu ręcznie i przypisywaniem im właściwych pozycji) w zależności od chwytanego obiektu jednocześnie z zachowaniem odpowiedniej pozycji modelu kolizji. Jak się można domyślić takie coś się bardzo przyda, jeżeli bot stoi na stromym wzniesieniu a podnoszony obiekt lezy pod innym katem
Uff się rozpisałem... |
_________________
"The Destiny. Launched hundreds of thousands of years ago. Faster than light, yet not through hyperspace. Who knows how far it's traveled." |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
Wysłany: 03-10-2011, 21:54
|
|
|
Jest jeszcze inne wyjście dot. animacji: wciągamy w to silnik fizyczny z tym że wtedy musimy precyzyjnie zaprojektować obiekt tak jak w realnym świecie. Później sterujemy z kodu gry tylko silnikiem elektrycznym/spalinowym/parowym xD/jonowym/whatever który porusza innymi częściami
Co do najwyższego poziomu abstrakcji: proponuję aby obiekty, ich właściwości etc. były pisane w Pythonie. W C++ tylko podstawy, np. lista obiektów, ich synchronizacja przez sieć, programowalność botów (tzn wykonywanie programów, nie że programy w C++...), integracja z silnikiem graficznym i fizycznym, dźwięk, i wszystkie "ogólne" sprawy które nie muszą być "modowalne".
A co w Pythonie? Wszystkie definicje obiektów. W każdym user levelu inne roboty będą na pewno ciekawym rozwiązaniem. Warunki zakończenia misji. Program uruchamiany równocześnie z misją który będzie mógł np. spawnować obcych.
WARNING WARNING WARNING!!! NIE WDRAŻAĆ IRRLICHTA DO JĄDRA GRY!!! Ma służyć tylko do wyświetlania. Nie chcemy go na serwerze, prawda?
Silnik fizyczny: np. Newton Game Dynamics. Istnieje gotowe rozwiązanie integrujące go z Irrlicht'em. |
_________________ 1Tbps Project && Telecomix Network
|
|
|
|
|
Madman07
Wiek: 28 Dołączył: 29 Maj 2011 Posty: 133 Skąd: Ze Stargate ;]
|
Wysłany: 03-10-2011, 22:29
|
|
|
@up, O ile takie rozwiązanie przynosi mi na myśl grę typu GMOD albo Spin Tires, o tyle nie sądze, że to było by coś fajnego :p |
_________________
"The Destiny. Launched hundreds of thousands of years ago. Faster than light, yet not through hyperspace. Who knows how far it's traveled." |
|
|
|
|
adiblol
Administrator forum FLOSS FTW!
Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy Dołączył: 21 Kwi 2008 Posty: 1313 Skąd: pokój odsłuchowy
|
|
|
|
|
Raptor
Clever Girl
Twoja ulubiona misja: Raptorowanie
Pomógł: 4 razy Wiek: 24 Dołączył: 26 Cze 2010 Posty: 432 Skąd: Isla Nublar
|
Wysłany: 04-10-2011, 21:39
|
|
|
adiblol napisał/a: | Jest jeszcze inne wyjście dot. animacji: wciągamy w to silnik fizyczny z tym że wtedy musimy precyzyjnie zaprojektować obiekt tak jak w realnym świecie. Później sterujemy z kodu gry tylko silnikiem elektrycznym/spalinowym/parowym xD/jonowym/whatever który porusza innymi częściami |
To strasznie obciąży procesor, nie mówiąc już o ogromie niewidocznych, ale istniejących polygonów. Żaden z dzisiejszych domowych komputerów, nawet ze wsparciem technologii CUDA, nie poradzi sobie z kompletną grą działającą w ten sposób. Ale sam pomysł ciekawy. Nigdy do czegoś tak oczywistego nie doszedłem ... |
_________________ - Stężenie czekolady we krwi: 93‰
- Ja to bym zjadł jeszcze batona...
|
|
|
|
|
Thorin12
Administrator forum Cichy obserwator
Pomógł: 1 raz Dołączył: 25 Lut 2008 Posty: 134 Skąd: Wyspa Berk
|
Wysłany: 04-10-2011, 22:03
|
|
|
Ew. można odrzucić poligony i zrobić Voxele D:
Gra będzie wtedy bardziej realistyczna ale też trudniejsza do kodowania...
(Wiem, nie znam się...) |
_________________
|
|
|
|
|
Madman07
Wiek: 28 Dołączył: 29 Maj 2011 Posty: 133 Skąd: Ze Stargate ;]
|
Wysłany: 05-10-2011, 01:06
|
|
|
Nie mówiąc o liczeniu właściwości fizycznych silników. Ja tutaj nie mam zamiaru liczyć transmitancji operatorowych, i tak za dużo matlaba mam :p |
_________________
"The Destiny. Launched hundreds of thousands of years ago. Faster than light, yet not through hyperspace. Who knows how far it's traveled." |
|
|
|
|
|
Nie możesz pisać nowych tematów Możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Wersja do druku
|
|
| |
|
|
|
|
Polski Portal COLOBOTa © 2008 - 2012 |
|
|