Quake II Rerelease Game Source – Spielcode für die Quake-II-Neuveröffentlichung 2023
(github.com/id-Software)- Enthält den Spielcode der Quake-II-Neuveröffentlichung 2023 sowie den ursprünglichen Spielcode als Referenz; dieser Source Code ermöglicht es Nutzern, das Spiel zu modden
- Mods können wie beim Originalspiel in die Neuveröffentlichung geladen werden: beim Start mit
+set game mymododer während des Spiels über die Konsole mitgame mymod - Um Änderungen an den Original-Spieldateien zu vermeiden, wird empfohlen, Mods im Verzeichnis
%USERPROFILE%\Saved Games\Nightdive Studios\Quake IIzu installieren - Die Neuveröffentlichung nutzt eine neue API für die Kommunikation zwischen Server und Spielmodul und führt ein schlankes Client-Spielmodul ein, ähnlich dem
cgame-Modul aus Quake III Arena, um zuvor hartcodiertes Client-Verhalten ändern zu können - Die Codebasis kombiniert die Spielmodule
baseq2,ctf,rogueundxatrixdes Originalspiels; ein C++17-Compiler ist erforderlich - Die Kompilierung wurde nur mit Clang, VS2019 und VS2022 getestet; der Code lässt sich sowohl mit C++17 als auch mit C++20 kompilieren, wobei bei C++20 die Abhängigkeit von
fmtlibentfallen kann - Abhängigkeiten sind fmtlib und jsoncpp; sie können mit
vcpkg install jsoncpp:x64-windows fmt:x64-windowsinstalliert werden - Die DLL der Neuveröffentlichung lädt Karten der ursprünglichen Expansion Packs unter Umständen nicht korrekt; es gibt Fälle, in denen Karten angepasst wurden, um Konflikte bei
spawnflagszu beheben - Bestehende Mods lassen sich möglicherweise an die geänderte Game-Export-Schnittstelle anpassen, doch wegen umfangreicher Änderungen an Struktur und Layout – um alle Expansion Packs in einer Codebasis zu unterstützen und neue Funktionen abzubilden – kann bei Nutzung der neuen Codebasis eine Neuentwicklung nötig sein
- Die interne Logik der Game-DLL wurde statt der 10 Hz der Original-Engine auf eine Tickrate von 40 Hz angepasst; 40 Hz wurden als Balance zwischen 25-ms-Schritten sowie Bandbreiten- und CPU-Überlegungen gewählt
- Das Speichersystem schreibt Level- und Spieldaten als UTF-8-JSON, statt Pointer-Offsets und Speicher-Kopien zu verwenden; das Speichersystem interagiert nicht mehr direkt mit dem Dateisystem
- Die Quake-II-Neuveröffentlichung nutzt das Serverprotokoll Version 2023; die meisten Nachrichten sind abwärtskompatibel, einige wurden jedoch für neue Funktionen, geänderte Funktionen und erhöhte Limits angepasst
- id Software kann für dieses Release keinen Support leisten und empfiehlt die Nutzung Community-getriebener Ressourcen
1 Kommentare
Meinungen auf Hacker News
Quake II war meine erste Erfahrung damit, C zu schreiben.
Der Code war klar, konsistent und geradlinig. Ich würde nicht behaupten, es sei der beste Source, den ich je gelesen habe, aber er hat die Messlatte hoch gelegt. Später habe ich in verschiedenen Game-Sourcen viel seltsamen Code gesehen: Verschachtelungen, die über den rechten Bildschirmrand hinausgingen, riesige Funktionen, die unzählige Dinge taten. Das war eine frühe Lektion, dass man auch mit einfachem Code großartige Dinge machen kann.
Ende der 1990er bis Anfang der 2000er habe ich mit Quake und Quake II Kindern VR-Unterricht gegeben. Wir hatten VR-Headsets und ein paar PCs mit Q.E.D. oder Qoole und ließen 12- bis 14-Jährige bzw. 14- bis 18-Jährige ihr eigenes Virtual-Reality-Spiel bauen.
In Wirklichkeit erstellten sie Quake-/Quake-II-Level ohne Monster oder Waffen und erzählten darin Geschichten, indem sie über Trigger im Level Bildschirmmeldungen einblendeten. Ein Team baute ein Level, in dem man Schleim überqueren und per Button eine Pumpe einschalten musste, um den Schleim abzulassen. Ein anderes Team baute ein 3D-Wasserlabyrinth im Weltraum, durch das man hindurchschwimmen musste. Einige der von Schülern erstellten Level habe ich noch immer auf der Festplatte, aber manche laufen nicht mehr richtig.
Für den Unterricht habe ich einen Mod gebaut, der statt des Blasters eine Leuchtpistole gab. Im Grunde war es der Blaster, aber mit anderem Soundeffekt, ohne Waffenmodell, und die Projektile wurden so geändert, dass sie von der Schwerkraft beeinflusst wurden, abprallten und nach einer gewissen Zeit erloschen. Wenn man in diesem Kurs war, konnte es sein, dass man das Headset nicht ausprobieren konnte, weil es nicht immer richtig funktionierte.
Kommentare innerhalb von Funktionen sind relativ selten, und ohne ein gutes Verständnis von 3D-Grafik stößt man häufig auf kryptische Ausdrücke, die einen ratlos machen. Da es das Werk eines Branchenvorreiters wie Carmack ist, ist das natürlich nicht überraschend, aber um ihm sicher folgen zu können, braucht man viel Vorwissen und eine gewisse mathematische Veranlagung.
Früher habe ich chronisch Makkaroni-Code geschrieben: 25 Zeilen Code bildeten das Gerüst für ein Dutzend Funktionen, und darauf wurden wieder ein Dutzend weitere Dinge aufgebaut. Er lief extrem schnell, aber die technische Schuld wuchs rasant, und irgendwann konnte man diese Funktionen nicht mehr anfassen, weil zu viel von dem, was darauf aufbaute, dadurch zu brechen drohte.
Ich versuchte, es mit Kommentaren zu erklären, aber die Kommunikation war schlecht: Ich schrieb nur, was eine Funktion tut, nicht wie sie funktioniert. Dinge wie „SINE-Tabelle verarbeiten“, „Tabellen defragmentieren“, „binär interpretieren“. Alle sagten: „Was zum Teufel ist das? Aber es ist verdammt schnell.“ Wenn es nicht um Videospiele, sondern um ein anderes Feld gegangen wäre, hätten vermutlich weder ich noch das Produkt lange überlebt.
Es war erstaunlich zu sehen, dass erfolgreiche, unterhaltsame und ausreichend stabile Spiele im Hintergrund mit absolut katastrophalem Code ausgeliefert wurden. Wenn auch so grob zusammengeflickter Müll genug Geld einbringen kann, frage ich mich manchmal, ob sich die Mühe und Zeit lohnt, die ich investiere, um Chaos zu vermeiden.
Über diese Stelle musste ich lachen: https://github.com/ESWAT/john-carmack-plan-archive/blob/mast...
In John Carmacks .plan vom 31. Januar 1997 steht, dass er in ein Ferrari-Autohaus ging, um einen neuen F355 als „vernünftiges“ Auto zu kaufen, dann den F40 direkt davor sah und ihn schließlich kaufte. Danach schrieb er auch noch, dass er inzwischen zu viele Ferraris habe und seinen ersten Ferrari als Preis für den Sieg bei einem Quake-Turnier vergeben wolle.
Der Preis war ein 328 GTS von 1987 mit Turbolader, vorgestellt in der Januarausgabe 1994 des Turbo Magazine, mit 360 PS an den Hinterrädern auf dem Chassis-Prüfstand. Er hatte einen neuen Motor und eine neue Lackierung bekommen, aber der Innenraum brauchte offenbar noch Arbeit. Er wollte außerdem genug Bargeld beilegen, um Steuern und Versicherung zu decken.
Wenn ich eine Quake-II-Anekdote dalassen darf: Quake II war der erste Ego-Shooter, den ich bis zum Ende durchgespielt habe.
Ich besuchte im Sommer einen Freund in einem anderen Bundesstaat und spielte es dort eine Woche lang; sonst hätte man mir das wahrscheinlich niemals erlaubt. Als ich anfing, kannte ich eigentlich nur DOOM und benutzte einfach dieselbe Steuerung. Überraschenderweise funktionierte das, und ich spielte ohne groß darüber nachzudenken weiter.
Dann hing plötzlich meine Sicht an der Decke fest, und ich war völlig verwirrt. Es stellte sich heraus, dass ich die Maus berührt hatte, und nach einigem Herumprobieren begriff ich das Konzept der Maussteuerung für die Blickrichtung. Danach wurde das Spiel deutlich einfacher.
Es gab kein Internet, weder ich noch mein Freund kannten Maussteuerung für die Blickrichtung, und wir hatten auch noch nie jemanden einen echten 3D-FPS spielen sehen. Heute ist dieses Wissen so weit verbreitet, dass man sich kaum noch vorstellen kann, wie fremd und außerirdisch die Interfaces von Spielen damals wirkten. Schön, dass der Source Code veröffentlicht wurde.
[0]: https://github.com/id-Software/Quake-2
[1]: https://github.com/id-Software
Das war etwa 1999 auf der ComicCon in Rom, Italien, zu der Zeit, als Half-Life gerade Gold Master wurde und die Multiplayer-Demo veröffentlicht war. Mindestens 20 Leute spielten alle Half-Life im LAN-Multiplayer, sogar mit Maus. Das war ein völlig verrückter Anblick.
Danach war ich bis 2005 auf unzähligen LAN-Partys, aber Online-Matchmaking hat QuakeNet und die soziale Kultur drumherum zerstört.
Ach, das weckt Erinnerungen
1999 war Quake II das Spiel, das ich gespielt habe, im Grunde buchstäblich fast das einzige. Ich habe enorm viel Zeit in QII gesteckt und mit Mod-Erstellung meinen ersten Code geschrieben
Es ist keine Übertreibung zu sagen, dass Quake II mich vom Computernutzer zum Programmierer gemacht hat. Es hat die Richtung meines Lebens und meiner Karriere als Erwachsener bestimmt
Beim Bauen meiner ersten Mod lernte ich Vektorrechnung, das Verstehen einer bestehenden Codebase und die Integration automatischer Builds für schnelles Testen. Ich habe auch ein wenig mit Map-Erstellung und 3D-Art herumprobiert, merkte aber bald, dass ich kein Artist oder Designer bin
Damals hatte ich keinerlei Versionsverwaltung oder Backup-Strategie, daher ist der ursprüngliche Code komplett verloren gegangen. Das nächste Spiel, in das ich ähnlich hineingezogen wurde, war Tribes 2, und das dort mögliche Scripting und Modding war wirklich großartig
https://xn0.co/Xeno-Mod_1.9_Setup.exe
Natürlich würde jeder auf HN eine ausführbare Datei aus irgendeiner Internetquelle herunterladen und ausführen! Aber wenn du das originale QII hast und neugierig bist, ist es sicher, sie auszuführen
Hommage: http://guake-project.org/
Gewaltig, das versetzt mich direkt zurück in die 90er. Genau genommen geht es um das erste Quake
Auf dem Boden meines Schlafzimmers stand ein PC, vermutlich ein Pentium 166MMX, und ein Freund brachte eine ähnliche Kiste mit, etwas schneller, so um die 233. LAN-Karten hatten wir nicht
Wir nutzten das alte Parallelkabel meines Vaters, um Windows vorzugaukeln, es sei eine LAN-Verbindung, und es funktionierte gut genug, dass wir tagelang spielten. Dann wurde es ein bisschen langweilig und ich versank in der Modding-Szene, wobei ich nichts selbst baute, sondern veröffentlichte Sachen herunterlud und ausprobierte. Girobot und KQP (Killer Quake Patch) werde ich nie vergessen
Die Girobot-Bots waren ziemlich stark, solange sie nicht im Terrain steckenblieben. Die eigentliche Goldgrube war KQP, das alle möglichen verrückten Mods, Waffen und Bot-Systeme hinzufügte. Die Vampire Gun ließ getroffene Spieler langsam, aber nicht zu langsam, in Fleischbrocken zerfallen und sterben, was mich jedes Mal zum Lachen brachte. Ich vermisse die 90er wirklich
Soweit ich weiß, waren in KQP übrigens auch ZeusBots enthalten
[1] https://github.com/Jason2Brownlee/QuakeBotArchive
Ich habe anderswo Beschwerden gesehen, dass es zur Neuveröffentlichung keine Linux-Version gibt, aber der Source wurde hier veröffentlicht und es heißt, er sei mit clang getestet worden. Großer Applaus an id dafür, Prinzipien treu zu bleiben
Ich denke, rechtlich verpflichtet waren sie wohl nicht, da sie den alten Code ja ebenfalls besessen haben dürften
Es gibt so viele Spiele, die nicht mehr verkauft werden und auf modernen Software- und Hardware-Stacks nicht laufen
Ich wünschte, es gäbe ein Gesetz, nach dem Software, wenn 20 Jahre lang keine Patches erschienen sind, um sie auf neuen Plattformen lauffähig zu halten, aus Sicht ihrer kulturellen Bedeutung als Open Source veröffentlicht werden muss
Ich frage mich, was ihr davon haltet, in C/C++ wie in diesem Source _t als Typ-Suffix zu verwenden
Nach meinem Verständnis ist es für von der Sprache definierte Typen reserviert, aber ich habe nie eine vernünftige Alternative gesehen. Ohne Suffix wirkt der Code manchmal seltsam. Für einen Custom-Typ für „viewport“ finde ich zum Beispiel
viewport_t viewport;besser alsviewport viewport;Meist ist mir das nicht wichtig genug, um mich dagegen zu wehren, also benenne ich Typen so, wie es der Styleguide verlangt. Ein Präfix
tist schlimmer, und das ganze Worttypedefanzuhängen ist noch schlimmer_treserviert, sondern POSIXTrotzdem habe ich mir beim Arbeiten mit den id-Tech-Codebases die
_s/_t-Gewohnheit angewöhnt und entschieden, dass es in Ordnung ist, wenn meine C-Codebase für immer als „nicht POSIX-konform“ abgestempelt wird. Was auch immer das praktisch heißen soll. In C++ verwende ich einfach InitialCamelCaseunder_scores. Dann kommt zwar etwas wieViewport viewport;heraus, aber zumindest erkennt man leicht, dassViewportein Typ ist_typevorInteressanterweise verwendet die riesige Codebase eines Embedded-Produkts mit Custom-OS keine Typen wie
uint32_tfür Integer mit fester Breite. Stattdessen definiert ein gemeinsamer Unternehmens-Headeruint32usw. ohne_t-Suffix. Warum das so entschieden wurde, weiß ich nichtIn meiner Jugend war dieses Spiel für mich alles. Clans, Ladders und echte Online-Gaming-Kultur habe ich dadurch zum ersten Mal kennengelernt.
Meine Map war The Edge, meine Waffen waren Railgun oder Rocket Launcher. Damals lief alles noch über Dial-up, deshalb war es wichtig, einen Server mit guter Latenz zu finden. Am nervigsten waren die Leute, die diese Waffe benutzt haben, die bei allen Lag verursacht hat.
Mir ist klar, dass Q3 das größere Spiel war, das das Genre perfektioniert hat, aber mein Favorit wird immer Quake 2 bleiben. Es hatte auch eine solide Singleplayer-Kampagne und Erweiterungen, und das Tempo passte für mich genau. Mit Q3 wurde alles zu schnell.
VQL ist deutlich näher an Q2, während PQL eher CPMA oder QuakeWorld ähnelt. Als Bonus ist auch The Edge in Quake Live spielbar.
Wenn du Quake-2-Fan bist und eine Oculus Quest 2 nutzen kannst, empfehle ich dir Quake2Quest. Es fühlt sich wirklich ganz anders an, durch die Maps zu laufen, auf denen man früher so unglaublich viel Zeit verbracht hat.