- Hypersomnia adalah shooter multipemain berbasis komunitas yang mendukung duel dengan teman maupun pertempuran antara dua klan, dan merupakan game yang bisa dimainkan online sejak 2017
- Ditulis dengan Modern C++ dan diimplementasikan tanpa game engine, serta tersedia sebagai game open source gratis
- Komposisi gamenya menggabungkan taktik Counter-Strike, dinamisme Hotline Miami, dan nuansa nostalgia pixel art RPG jadul; saat ini menyediakan 24 senjata unik, 10 map komunitas, serta dua mode, Bomb defusal dan Gun game
- Jalur distribusinya meliputi main di browser, Steam, Windows, Linux AppImage, dan macOS dmg; saat game dimulai, interactive Tutorial akan dijalankan
- Menjalankan server bisa dilakukan melalui Server Docker atau Headless AppImage, dan semua arsip ditandatangani secara digital serta disediakan jalur verifikasi tanda tangan
- Editor map bawaannya menggunakan pendekatan 100% WYSIWYG yang memungkinkan bekerja langsung di dalam dunia game, dibuat dengan ImGui dan memakai format map JSON
- Jika folder PNG, WAV, OGG ditempelkan ke direktori map, game akan mengenalinya secara otomatis
- Jika GIF di-drag-and-drop ke adegan, file itu langsung berfungsi sebagai animasi di dalam game
- Map yang sedang dikerjakan bisa diuji main hanya dengan satu klik, dan klien yang terhubung akan otomatis mengunduh versi map saat ini beserta resource kustom
- Server, game, dan editor berada dalam file eksekusi yang sama di semua OS, sehingga sesi bisa dimulai dari editor, dihentikan dengan ESC, lalu kembali ke keadaan semula
- Jaringannya didasarkan pada determinisme simulasi lintas platform, dan bekerja 100% deterministik di klien browser, klien native Windows, Linux, macOS, hingga build ARM native
- Alih-alih terus mengirim seluruh status objek lewat jaringan, hanya input pemain yang dikirim, sementara sisanya disimulasikan secara lokal di tiap klien
- Untuk determinisme perhitungan floating-point, digunakan
clangdi semua OS, dengan/fp:strictpada build Windows dan-ffp-model=strictpada build ARM, serta fungsi matematika sepertistd::sin,std::sqrtdiganti dengan implementasi keluarga STREFLOP - Dalam contoh dengan dua karakter yang dikendalikan pemain, trafik pada tickrate 60Hz sekitar
40 kbit/s (= 5 KB/s), dan hanya karakter yang dikendalikan pemain yang berkontribusi pada trafik jaringan
- Klien browser dan klien native dapat bermain bersama di server yang sama berkat libdatachannel dan datachannel-wasm
- Server bisa di-host dari browser lalu diakses oleh klien native, atau server bisa dibuka dari klien native dan tautan akses browser dapat dikirimkan
- Versi browser mendukung login Discord, ranked match, dan global Leaderboards; jika akun Discord dan akun Steam ditautkan, versi Steam dan versi web akan berbagi rating yang sama
- rectpack2D yang ditulis untuk texture packing digunakan di Assassin's Creed: Valhalla, perusahaan pembuat drone, dan dua makalah ilmiah
- Implementasi memory pool menyediakan penyimpanan berurutan, alokasi O(1), dealokasi O(1), dereferensi O(1), ekspansi otomatis, dan perilaku deterministik; saat mengirim status awal world, status internal pool objek game juga disertakan agar klien dapat mensimulasikan pengenal objek dan urutan memori yang sama secara deterministik
- Self-updater bawaan otomatis mengunduh dan menerapkan pembaruan, memverifikasi apakah pembaruan berasal dari kunci publik pengembang yang di-hardcode melalui pemanggilan
ssh-keygen, dan jika host build diretas lalu versi berbahaya diunggah, klien lama akan menolak menerapkan pembaruan tersebut
1 komentar
Komentar Hacker News
Saya sempat bertanya-tanya apakah aritmetika floating point tidak sepenuhnya dispesifikasikan, dan ternyata saya seharusnya mencari dulu: https://stackoverflow.com/questions/49471943/floating-point-...
Ini bukan sesuatu yang selesai hanya dengan satu instruksi
sqrt; biasanya dimulai dari aproksimasi Taylor lalu hasilnya disempurnakan dengan beberapa iterasi metode Newton, sehingga muncul pilihan seperti orde deret Taylor, titik pusat, dan jumlah iterasiIEEE 754 bisa mengatur perkalian, tetapi untuk
sqrt,sin,cos,tantetap harus ditentukan bagaimana cara menghitungnya, dan implementasi itu biasanya ada di standard library yang disediakan compilerSelain itu, floating point tidak memenuhi sifat asosiatif, jadi
(a+b)+c != a+(b+c); hanya dengan mengubah urutan operasi dasar saja hasilnya bisa berbedaCara pembulatan bisa berbeda antararsitektur, dan jika mencampur arm/amd/intel ada kemungkinan muncul perilaku non-deterministik: https://en.wikipedia.org/wiki/IEEE_754#Reproducibility
Game ini tampaknya menghindari masalah itu dengan memakai implementasi floating point berbasis software, dan jika ditambah compiler yang diseragamkan, sepertinya bisa lepas dari sebagian besar masalah
https://docs.oracle.com/cd/E77782_01/html/E77791/z4002282485...
Dalam C dan banyak bahasa lain, operator yang umum dipakai tidak dipetakan secara eksplisit ke operasi floating point tertentu, sehingga compiler punya keleluasaan besar
Selain itu juga ada status global tak terlihat seperti mode pembulatan yang kadang dipakai; kalau saya ingat benar, DirectX dulu suka mengubah flag di belakang layar
-marchberbedaHanya saja itu bukan open source, dan bukan berarti ini bukan pencapaian. Kenyataannya ini memang sangat sulit
[0] https://springrts.com/
Perbedaannya di sini adalah game RTS tidak memakai fisika floating point deterministik, jadi Hypersomnia memerlukan solusi baru
Itu mengisi kekosongan yang ditinggalkan TA dan SupCom, dan meskipun SupCom 2 sendiri RTS kecil yang cukup bagus dan lebih kasual, rasanya tidak sampai setara
Dan mari kita tidak membahas PA
BAR juga tampak cukup menjanjikan: https://www.beyondallreason.info
Bukan berarti game itu sendiri masuk ke AC:Valhalla, melainkan library texture packing yang dibuat selama pengembangannya yang dipakai di sana[1]. Tentu ini bukan untuk mengecilkan pencapaiannya; hal itu sendiri sudah layak jadi satu tulisan
Selain itu, mengatakan bahwa ini adalah sumber dari sistem ECS yang dipakai di Unity juga terasa agak berlebihan. Saya pernah memakai game engine yang menggunakan ECS bahkan sebelum 2010, dan di ranah game engine tampaknya asal-usulnya bisa ditelusuri ke Operation Flashpoint[2]
[1] https://github.com/TeamHypersomnia/rectpack2D
[2] https://t-machine.org/index.php/2007/09/03/entity-systems-ar...
Suatu hari kalau punya waktu, mungkin setelah pensiun saya ingin mencoba hal seperti ini, dan proyek-proyek seperti ini sangat mungkin menjadi bahan belajar untuk memahami dunia tersebut
Ini mengingatkan saya pada ARC dari akhir 90-an, yaitu Attack Retrieve Capture, yang sekarang nyaris bertahan hidup lewat Armor Critical
https://en.wikipedia.org/wiki/Attack_Retrieve_Capture
http://armorcritical.com
Saya penasaran pekerjaan komersial lain apa yang telah dilakukan untuk menjaga proyek ini tetap berjalan, apakah ada rencana rilis di Steam, dan bagaimana persistent world memengaruhi gameplay
Saya juga penasaran bagaimana teknik cerdik untuk merekonstruksi status fisika saat pemain baru masuk terlihat bagi pemain yang sudah ada, misalnya apakah posisi peluru tampak bergeser
Saya juga berinvestasi dengan baik dari tabungan saya sehingga bisa sepenuhnya fokus pada Hypersomnia
Saya ingin merilisnya di Steam sebelum 2024
Saat ini sama sekali belum ada dunia persisten; itu hanya sekadar menyebutkan arah yang mungkin diambil ke depannya jika game ini sukses, seperti teaser.
Rekonstruksi fisika sama sekali tidak boleh memindahkan posisi. Yang direkonstruksi hanyalah "keadaan panas" seperti kontak atau pohon, dan momen ketika keadaan ini bermakna hanyalah saat simulasi dijalankan dari satu keadaan ke keadaan berikutnya, jadi setelah itu tidak memengaruhi rendering.
Satu-satunya dampak yang mungkin dirasakan pemain yang sudah ada hanyalah penurunan frame sekali ketika dunia fisika yang perlu direkonstruksi sangat besar, tetapi pada praktiknya semua map masih kecil dan paling cocok untuk pertandingan 3v3
Kedua, aku menemukan bug besar di MacOS. Pada layar jeda/pengaturan, input mouse meleset jauh sehingga bahkan opsi di menu utama pun tidak bisa diklik
Aku sudah mengumpulkan rekaman layar, log, dan system report: https://youtu.be/O4OoMdeFAt0
Saya hampir selalu bermain di Windows dan Linux, jadi sudah lama tidak menjalankannya di MacOS; saya akan cek apakah ini bisa diperbaiki
Terutama tulisan tentang ECS dan networking
Senang melihat perkembangannya sejauh ini
Saat menjelaskan arsitektur deterministik di README, saya memang menautkan tulisan blog penting dari Glenn Fiedler, tetapi saya bukan orang itu, jadi kalau sempat menimbulkan salah paham, itu bukan maksud saya
https://www.freeinfantry.com/
https://en.m.wikipedia.org/wiki/Infantry_(video_game)