Zasoby pomocne w badaniu silnika Quake 3 [zamknięte]


14

Czy istnieją dobre zasoby (podręczniki, samouczki itp.), Aby rozpocząć naukę kodu silnika Quake 3 poza samym kodem?

Bardzo interesuje mnie wiedza na temat jego struktury do celów edukacyjnych i być może wprowadzenie pewnych modyfikacji.

Odpowiedzi:


13

Powinieneś zacząć od artykułu w Wikipedii na temat id Tech 3 . Można to uzupełnić podsumowaniem GDC Briana Hooka i starymi materiałami na temat blogu Element 61 . Oprócz tego będziesz musiał przejrzeć kilka starych samouczków modowych, które możesz znaleźć, aby spróbować zrekonstruować, co się dzieje.

Sugerowałbym zacząć od oryginalnej wersji źródłowej od id, zamiast ioquake3 lub what-have-you, aby naprawdę zobaczyć kontekst tego, co się dzieje (w jaki sposób dane wejściowe są obsługiwane i kierowane w silniku, jaki rodzaj zdarzenia bazowego struktura jest używana itp.).

Kilka kluczowych punktów, które pomogły mi, gdy z nim pracowałem:

  • Zawsze jest serwer; na szczycie ramki może znajdować się logika klienta.
  • Wejście jest kierowane najpierw do konsoli, jeśli jest zainteresowana, następnie do GUI, a następnie do właściwej gry.
  • Sam silnik jest oddzielony (twardy!) Od logiki gry za pomocą funkcji pułapki. Sprawdź (jeśli pamięć służy) grę i renderuj projekty, aby znaleźć rzeczywisty kod silnika.
  • Logikę gry można napisać w całości, aby działała na maszynie wirtualnej Quake 3. Podczas modowania i korzystania z natywnych bibliotek DLL musisz uruchomić grę jakoquake3.exe +set sv_pure 0 +set vm_game 0 +set vm_cgame 0 +set vm_ui 0 , aby silnik mógł uruchamiać kod natywny zamiast kodu VM.
  • Interfejs użytkownika systemu menu jest dziwnym, złym, pokręconym stosem struktur i wywołań zwrotnych. Jest użyteczny, gdy go rozwiążesz, ale może to wymagać prób i błędów. Pamiętaj, to stos.
  • Jeśli piszesz kod w natywnych bibliotekach DLL, możesz przydzielić pamięć, pisać w C ++ lub cokolwiek innego. Możesz także użyć STL - nie ma powodu, aby sztywno przestrzegać idiomów C, z wyjątkiem sytuacji, gdy bezpośrednio komunikujesz się z silnikiem.

Kilka fajnych rzeczy, które zrobiłem dla tego ze współpracownikiem:

  • Prosty interfejs wiersza poleceń do wywoływania poleceń powłoki z konsoli i zrzucania strumieni stdout / stderr z powrotem do konsoli (konsola Quake).
  • Interfejs z bazą danych SQL do pobierania i wyświetlania rekordów.
  • Elastyczny zestaw narzędzi do tworzenia okien i widżetów do tworzenia elastycznych wyświetlaczy w kliencie klienta (za pomocą wykresów słupkowych, pól tekstowych, ramek graficznych, menu kontekstowych, okien o zmiennym rozmiarze itp.).
  • Powolne rakiety. :)

Osobiście odkryłem, że silnik był świetną kombinacją naprawdę inteligentnych rzeczy zrobionych na naprawdę głupie sposoby, naprawdę głupich rzeczy zrobionych na naprawdę sprytne sposoby i naprawdę inteligentnych rzeczy zrobionych na naprawdę mądre sposoby. To świetny przykład tego, jak uzyskać modułowość i dobry projekt strukturalny w średnim projekcie C.

Wreszcie, nie czuj się źle, jeśli zajmie to trochę czasu. Zajęło mi to chyba miesiąc, aby naprawdę wiedzieć, gdzie znaleźć to, czego szukałem w silniku; jeśli wszystko inne zawiedzie, zacznij od init aplikacji i po prostu tuneluj w dół do funkcji, zostawiając komentarze dla siebie jako drogowskazy. Mój monitor został pokryty różowymi karteczkami samoprzylepnymi z nazwami funkcji, numerami linii i krótkimi opisami tego, co zrobili.



1

Absolutnie.

http://en.wikipedia.org/wiki/Quake_engine to dobry przegląd tego, co się tam dzieje, ale można dość szybko zapoznać się ze szczegółami architektury poprzez cytowania.

Chciałbym również zasugerować kilka książek na temat architektury silnika gry, które mogą być bardziej zgodne z tym, czego szukasz. Chociaż nie są one specyficzne dla Quake, zajmują się szczegółami konstrukcji silnika i działają równolegle do wielu aspektów silników Quake:

  • Architektura silnika gier 3D - 978-0122290640
  • Programowanie silnika gry 3D - 978-1592003518

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.