- Hypersomnia ist ein Community-basierter Multiplayer-Shooter, der Duelle mit Freunden oder Kämpfe zwischen zwei Clans unterstützt und seit 2017 online spielbar ist
- Er wurde in Modern C++ geschrieben und ohne Game Engine umgesetzt und wird als kostenloses Open-Source-Spiel angeboten
- Das Spielkonzept kombiniert die Taktik von Counter-Strike, die Dynamik von Hotline Miami und die pixelartige Nostalgie von Old-School-RPGs; derzeit gibt es 24 einzigartige Waffen, 10 Community-Maps und zwei Modi: Bomb defusal und Gun game
- Verfügbar über Browser-Play, Steam, Windows, Linux AppImage und macOS dmg; beim Spielstart wird ein interaktives Tutorial ausgeführt
- Der Server kann als Server-Docker oder als Headless AppImage ausgeführt werden; alle Archive sind digital signiert, und ein Weg zur Signaturprüfung wird bereitgestellt
- Der integrierte Map-Editor arbeitet zu 100 % nach dem WYSIWYG-Prinzip direkt in der Spielwelt, wurde mit ImGui erstellt und verwendet ein JSON-Map-Format
- Wenn PNG-, WAV- und OGG-Ordner in das Map-Verzeichnis kopiert werden, erkennt das Spiel sie automatisch
- Wird ein GIF per Drag-and-drop in die Szene gezogen, funktioniert es im Spiel sofort als Animation
- Die in Arbeit befindliche Map kann mit einem Klick playgetestet werden, und verbundene Clients laden automatisch die aktuelle Version der Map und benutzerdefinierte Ressourcen herunter
- Server, Spiel und Editor befinden sich auf allen Betriebssystemen in derselben ausführbaren Datei, sodass sich eine Sitzung im Editor starten, mit ESC unterbrechen und anschließend in den ursprünglichen Zustand zurückkehren lässt
- Das Networking basiert auf plattformübergreifendem deterministischem Simulationsverhalten und funktioniert zu 100 % deterministisch zwischen Browser-Client, nativen Clients für Windows, Linux und macOS sowie nativen ARM-Builds
- Anstatt fortlaufend den Status aller Objekte über das Netzwerk zu senden, werden nur die Spielereingaben übertragen, während jeder Client den Rest lokal simuliert
- Für deterministisches Gleitkomma-Verhalten wird auf allen Betriebssystemen
clangverwendet; auf Windows-Builds kommt/fp:strict, auf ARM-Builds-ffp-model=strictzum Einsatz, und mathematische Funktionen wiestd::sinundstd::sqrtwerden durch Implementierungen aus der STREFLOP-Familie ersetzt - Im Beispiel mit zwei von Spielern gesteuerten Charakteren liegt der Traffic bei einer Tickrate von 60 Hz bei etwa
40 kbit/s (= 5 KB/s), und nur von Spielern gesteuerte Charaktere tragen zum Netzwerkverkehr bei
- Dank libdatachannel und datachannel-wasm können Browser-Client und native Clients zusammen auf demselben Server spielen
- Es ist möglich, einen Server im Browser zu hosten und sich mit einem nativen Client zu verbinden; ebenso kann ein nativer Client einen Server öffnen und einen Browser-Zugangslink verschicken
- Die Browser-Version unterstützt Discord-Login, Ranglisten-Matches und globale Leaderboards; wenn Discord- und Steam-Konto verknüpft werden, teilen sich Steam-Version und Web-Version dieselbe Wertung
- rectpack2D, geschrieben für Texture Packing, wird in Assassin's Creed: Valhalla, von einem Drohnenhersteller und in zwei wissenschaftlichen Arbeiten verwendet
- Die Implementierung des Memory Pools bietet zusammenhängenden Speicher, O(1)-Allokation, O(1)-Freigabe, O(1)-Dereferenzierung, automatische Erweiterung und deterministisches Verhalten; beim Übertragen des initialen Weltzustands wird auch der interne Zustand des Game-Object-Pools eingeschlossen, damit Clients dieselben Objektkennungen und dieselbe Speicherreihenfolge deterministisch simulieren können
- Der integrierte Self-Updater lädt Updates automatisch herunter und wendet sie an, prüft über einen
ssh-keygen-Aufruf, ob das Update vom hartkodierten öffentlichen Entwicklerschlüssel stammt, und verweigert auf bestehenden Clients die Anwendung von Updates, falls das Build-Hosting kompromittiert wurde und eine bösartige Version hochgeladen wurde
1 Kommentare
Hacker-News-Kommentare
Ich hatte mich gefragt, ob Gleitkomma-Arithmetik nicht vollständig spezifiziert ist, hätte aber wohl zuerst suchen sollen: https://stackoverflow.com/questions/49471943/floating-point-...
Es ist nicht einfach ein einzelner
sqrt-Befehl, sondern eher etwas, das mit einer Taylor-Näherung beginnt und das Ergebnis dann mit einigen Newton-Iterationen verfeinert; dabei gibt es Entscheidungen wie die Ordnung der Taylor-Reihe, den Mittelpunkt und die Anzahl der IterationenIEEE 754 kann Multiplikation festlegen, aber bei
sqrt,sin,cos,tanmuss das Berechnungsverfahren definiert werden, und diese Implementierung steckt üblicherweise in der Standardbibliothek, die der Compiler mitbringtAußerdem gilt für Gleitkommazahlen das Assoziativgesetz nicht, also
(a+b)+c != a+(b+c), sodass schon eine andere Reihenfolge der Grundoperationen zu abweichenden Ergebnissen führen kannDie Rundungsweise kann sich je nach Architektur unterscheiden, und wenn man arm/amd/intel mischt, kann es zu nichtdeterministischem Verhalten kommen: https://en.wikipedia.org/wiki/IEEE_754#Reproducibility
Dieses Spiel scheint zur Vermeidung des Problems eine Software-Gleitkommaimplementierung zu verwenden, und zusammen mit einem einheitlichen Compiler dürfte das die meisten Probleme aus dem Weg räumen
https://docs.oracle.com/cd/E77782_01/html/E77791/z4002282485...
In C und vielen anderen Sprachen sind gängige Operatoren nicht explizit auf bestimmte Gleitkomma-Operationen abgebildet, sodass Compiler viel Spielraum haben
Dazu kommt unsichtbarer globaler Zustand wie Rundungsmodi, der in gewissem Maß ebenfalls verwendet wird; soweit ich mich erinnere, hat DirectX im Hintergrund gern Flags umgestellt
-marchanders gesetzt istDas war nur nicht Open Source, was aber nicht heißen soll, dass es keine Leistung ist. Es ist tatsächlich sehr schwierig
[0] https://springrts.com/
Der Unterschied hier ist, dass RTS-Spiele keine deterministische Gleitkomma-Physik verwenden, weshalb Hypersomnia eine neue Lösung braucht
Es hat die Lücke gefüllt, die TA und SupCom hinterlassen haben, und SupCom 2 war als eher kleines, zugängliches RTS für sich genommen ziemlich gut, aber eben nicht auf diesem Niveau
Und über PA reden wir besser nicht
BAR sieht ebenfalls ziemlich vielversprechend aus: https://www.beyondallreason.info
Das Spiel selbst wurde nicht in AC:Valhalla verwendet, sondern eine während der Entwicklung entstandene Bibliothek zum Texture Packing[1]. Das soll die Leistung natürlich nicht schmälern; das wäre für sich schon einen eigenen Artikel wert
Auch die Aussage, es sei die Quelle des in Unity verwendeten ECS-Systems gewesen, wirkt etwas übertrieben. Ich habe schon vor 2010 Game-Engines mit ECS verwendet, und im Bereich Game-Engines scheint es auf Operation Flashpoint[2] zurückzugehen
[1] https://github.com/TeamHypersomnia/rectpack2D
[2] https://t-machine.org/index.php/2007/09/03/entity-systems-ar...
Wenn ich irgendwann Zeit habe, wahrscheinlich nach der Rente, würde ich so etwas gern selbst ausprobieren, und solche Projekte könnten dabei als Lehrmaterial dienen, um diese Welt kennenzulernen
Es erinnert mich an ARC aus den späten 90ern, also Attack Retrieve Capture, das heute nur noch mit Mühe als Armor Critical weiterlebt
https://en.wikipedia.org/wiki/Attack_Retrieve_Capture
http://armorcritical.com
Ich frage mich, was sonst noch kommerziell gemacht wurde, um das Projekt am Laufen zu halten, ob ein Steam-Release geplant ist und wie sich die persistente Welt auf das Gameplay auswirkt
Mich interessiert auch, wie die clevere Technik zur Rekonstruktion des Physikzustands beim Beitritt neuer Spieler für bestehende Spieler aussieht, zum Beispiel ob sich dadurch Kugelpositionen verschieben
Ich habe meine Ersparnisse außerdem gut investiert, sodass ich mich ganz auf Hypersomnia konzentrieren konnte
Ich möchte es vor 2024 auf Steam veröffentlichen
Derzeit gibt es überhaupt keine persistente Welt; es wurde nur so etwas wie ein Teaser erwähnt, in welche Richtung es künftig gehen könnte, falls das Spiel erfolgreich wird
Ein Neuaufbau der Physik sollte Positionen überhaupt nicht verschieben. Neu aufgebaut werden nur Berührungen oder baumartige „Hot States“, und dieser Zustand ist nur in dem Moment relevant, in dem die Simulation von einem Zustand in den nächsten fortgeschrieben wird; auf das spätere Rendering hat das daher keinen Einfluss
Die einzige mögliche Auswirkung auf bestehende Spieler ist, dass bei einer sehr großen Physikwelt während des Neuaufbaus einmal kurz die Framerate einbricht; in der Praxis sind aber alle Maps noch klein und am besten für 3v3-Matches geeignet
Zweitens habe ich auf MacOS einen größeren Bug gefunden. Im Pausenbildschirm/in den Einstellungen ist die Maus-Eingabe stark versetzt, sodass ich nicht einmal Optionen im Hauptmenü anklicken kann
Ich habe Bildschirmaufnahme, Logs und einen Systembericht zusammengestellt: https://youtu.be/O4OoMdeFAt0
Ich spiele fast immer unter Windows und Linux und habe MacOS daher nicht lange laufen lassen; ich werde nachsehen, ob ich das beheben kann
Vor allem solche über ECS und Networking
Schön zu sehen, wie weit das gekommen ist
Als ich in der README die deterministische Architektur erklärt habe, habe ich zwar auf einen wichtigen Blogpost von Glenn Fiedler verlinkt, aber ich bin nicht diese Person; falls das zu einem Missverständnis geführt hat, war das nicht beabsichtigt
https://www.freeinfantry.com/
https://en.m.wikipedia.org/wiki/Infantry_(video_game)