2 Punkte von GN⁺ 2023-08-11 | 1 Kommentare | Auf WhatsApp teilen
  • 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 mymod oder während des Spiels über die Konsole mit game mymod
  • Um Änderungen an den Original-Spieldateien zu vermeiden, wird empfohlen, Mods im Verzeichnis %USERPROFILE%\Saved Games\Nightdive Studios\Quake II zu 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, rogue und xatrix des 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 fmtlib entfallen kann
  • Abhängigkeiten sind fmtlib und jsoncpp; sie können mit vcpkg install jsoncpp:x64-windows fmt:x64-windows installiert 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 spawnflags zu 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

 
GN⁺ 2023-08-11
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.

    • Der Code von id ist definitiv sauber und gut strukturiert, aber aus Sicht normaler Leute war er ziemlich schwer zu verstehen.
      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.
    • Ich habe mich auch schuldig gemacht, solchen Code zu schreiben.
      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.
    • Wenn dir id-Code gefällt, könnte dir auch John Carmack on Inlined Code (2014) gefallen: https://news.ycombinator.com/item?id=12120752
    • Ich habe mich nie im Detail durch den Source von id Software gegraben, aber ich habe schon viel wirklich schrecklichen Game-Source gesehen. Die Messlatte liegt extrem niedrig.
      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.
    • Es wäre schön, wenn du Screenshots der Ergebnisse aus diesem Kurs teilen könntest. Das sieht wirklich großartig aus.
  • Ü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.

    • Ein potenzieller Käufer kommt vorbei? Dann stellen wir den F40 doch rein zufällig direkt neben den Eingang.
  • 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.

    • Falls du es nicht wusstest: Das hier ist der Source Code der Neuveröffentlichung von Quake II. Der ursprüngliche Quake-II-Source ist schon seit Jahren öffentlich verfügbar[0], ebenso mehrere Klassiker von id Software[1].
      [0]: https://github.com/id-Software/Quake-2
      [1]: https://github.com/id-Software
    • Ich erinnere mich noch daran, als ich zum ersten Mal mehrere Leute im LAN einen FPS spielen sah.
      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

    • In einem endlosen Haufen Dateien habe ich das Binary meiner Mod gefunden
      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
    • Tribes 2 war meine erste Modding-Erfahrung, und dieses Spiel hat ebenfalls einen ganz besonderen Platz in meinem Herzen. Später haben mich Sphere und RunUO, Emulatoren für Ultima Online, vom Gamer zum Programmierer gemacht
    • Die Drop-down-Konsole zu entdecken, war wie eine Offenbarung
      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

    • Meinst du mit „Girobot“ den Gyrobot[1] von „Gyro Gearloose“?
      Soweit ich weiß, waren in KQP übrigens auch ZeusBots enthalten
      [1] https://github.com/Jason2Brownlee/QuakeBotArchive
    • Ich hatte 8 GB an Mods, Maps und Skins für Quake-2-Multiplayer, per Modem und manchmal per T1 heruntergeladen. Diese Mods vermisse ich wirklich
    • Das alte Parallelkabel deines Vaters – war das eine Nullmodem-Verbindung? Mit meinem Mitbewohner im College hatten wir in unserer Wohnung das gleiche Setup. Mitte der 90er also Doom 2 und die FPS jener Zeit; schöne Erinnerungen
  • 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 frage mich, warum sie diesen Source Code veröffentlicht haben. Ob es rein aus Prinzip war oder ob es eine rechtliche Pflicht gab, weil der alte Code ebenfalls GPL war
      Ich denke, rechtlich verpflichtet waren sie wohl nicht, da sie den alten Code ja ebenfalls besessen haben dürften
    • Diese Version wurde für alle großen Plattformen veröffentlicht, und ich bin mir ziemlich sicher, dass heute sowohl Nintendo als auch Sony Clang/LLVM in ihren SDK-Toolchains verwenden. Linux könnte zwar mitgedacht worden sein, aber die Hauptmotivation dürfte gewesen sein, es auf modernen Konsolen baubar zu machen
    • Das scheint nur der Spiel-Code zu sein und nicht der Engine-Source-Code, oder übersehe ich etwas?
  • 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 als viewport viewport;

    • Meines Wissens ist das eher eine POSIX-Regel als etwas aus der Sprache C selbst. Jedenfalls verwende ich es in meinem privaten Code, aber in den Coding Standards, mit denen ich gearbeitet habe, war es selbst in Nicht-POSIX-Umgebungen oft verboten
      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 t ist schlimmer, und das ganze Wort typedef anzuhängen ist noch schlimmer
    • Nach meinem Verständnis hat nicht C das Suffix _t reserviert, sondern POSIX
      Trotzdem 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 InitialCamelCase
    • Es wird nicht jedem Geschmack entsprechen, aber ich verwende für Typen eher CamelCase und für Variablen under_scores. Dann kommt zwar etwas wie Viewport viewport; heraus, aber zumindest erkennt man leicht, dass Viewport ein Typ ist
    • Wenn die IDE nicht besonders viel hilft und man allein am Code vor sich erkennen muss, was was ist, ist es nützlich
    • Der C-Styleguide bei meiner Arbeit schreibt _type vor
      Interessanterweise verwendet die riesige Codebase eines Embedded-Produkts mit Custom-OS keine Typen wie uint32_t für Integer mit fester Breite. Stattdessen definiert ein gemeinsamer Unternehmens-Header uint32 usw. ohne _t-Suffix. Warum das so entschieden wurde, weiß ich nicht
  • In 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.

    • Vielleicht gefallen dir Quake-Live-Server mit VQL-Physik.
      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.
    • Mit der Railgun treffen und mit der Machine Gun finishen, gg
  • 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.