Tampil di HN: Membuka sumber kode mesin game saya
(github.com/moddio)Mesin Game Moddio 2
- Moddio adalah mesin game yang memprioritaskan multiplayer.
- Dilengkapi kode jaringan dengan otoritas server, interpolasi snapshot, dan fitur rekonsiliasi sisi klien.
- Mendukung lebih dari 50 pemain bersamaan atau lebih dari 300 objek bergerak pada VM seharga $5 per bulan.
Demo
- Yang termasuk di dalam paket: mesin fisika Box2D, kode jaringan dengan otoritas server, sistem inventaris dan item, atribut bawaan (HP, energi, dll.) beserta laju regenerasinya, sistem dialog, toko, kontrol unit, proyektil dan pergerakan unit dengan prediksi sisi klien, AI unit dan pencarian jalur A*, kontrol mobile, dan lainnya.
Cara menjalankan game
- Memerlukan Node 18 atau lebih baru.
- Setelah menyiapkan repositori, pindah ke direktori
/src, ubah namagame-sample.jsonmenjadigame.json, lalu kembali ke direktori root dan jalankan server. - Setelah itu, game dapat dimainkan di http://localhost:80.
Cara membuat game baru dari nol
- Game Moddio dibuat dan diedit menggunakan editor game Moddio yang tersedia di https://www.modd.io.
- Setelah membuat game, Anda dapat mengekspor
game.jsonyang bisa digunakan pada instalasi lokal. - Ubah nama JSON game yang diekspor menjadi
game.jsonlalu pindahkan ke direktori./src.
Cara berkontribusi
- Moddio sepenuhnya gratis dan open source di bawah lisensi MIT.
- Untuk mengetahui cara menjadi kontributor, kunjungi halaman cara berkontribusi.
Kredit
- Menggunakan Isogenic game engine, Phaser, PlanckJS, uWebsocket, Box2D, aset Kenney, Hero Icons, dan lainnya.
Opini GN⁺
- Mesin game Moddio berfokus pada pengembangan game multiplayer dan menawarkan fitur kuat yang mendukung banyak pemain dengan biaya rendah.
- Karena bersifat open source dan terus berkembang lewat kontribusi komunitas, mesin ini juga mudah diakses oleh software engineer pemula.
- Berbagai fitur yang dibutuhkan untuk pengembangan game sudah tersedia secara bawaan, sehingga pengembang dapat dengan cepat membuat prototipe dan melakukan pengujian.
1 komentar
Opini Hacker News
Di layar pendaftaran aplikasi Android, pengguna diminta memasukkan nama pengguna dan kata sandi Google di tempat yang terlihat seperti formulir web di dalam aplikasi, dan pengguna tidak punya cara untuk tahu apakah aplikasi itu mengintip kata sandinya
Biasanya aplikasi sepertinya memakai alur berpindah ke layar login lalu kembali lagi, jadi penasaran apakah pola itu sulit diimplementasikan. Juga penasaran apakah ini masalah yang muncul karena dukungan lintas platform
Namun cara yang disebut di atas benar-benar tidak boleh terjadi, dan saya kira Google sudah melarangnya
Membuat pengguna mengadopsi sebuah game engine sama sekali bukan hal mudah, apalagi jika sumber tertutup
Melihat galeri game di situsnya, sepertinya sejauh ini mereka melakukannya cukup baik; penasaran apakah itu dibuat oleh beberapa teman saja atau ada komunitas yang cukup aktif
Bayangkan struktur di mana hasil bermakna bisa muncul hanya dengan beberapa hari atau bahkan beberapa jam secara kasual. Ingat saja Flash
Hambatan masuk yang rendah bagi developer game maupun pemain jelas membantu. Tidak perlu mengunduh atau mendaftar
Dari judulnya saja saya tidak menyangka ini adalah modd.io. Ini framework/platform populer yang dipakai untuk membuat game IO
Saya masuk ke salah satu server Brains dan penasaran seperti apa pengalaman dengan sekitar 50 pemain. Gerakannya terasa agak tersendat seperti yang bisa diduga dari WebSocket, dan karena saya sedang membuat sesuatu yang mirip, saya juga penasaran dengan kompresi jaringan
Saya tidak yakin apakah kompresi LZ-string saja sudah cukup. Untuk 50 pemain, ia memakai sekitar 20 KB per detik, sementara Warzone hanya sekitar 48 KB per detik untuk 150 pemain. Jika bukan data tak terbatas, biaya bandwidth cloud bisa cukup besar
Menarik juga bahwa buffer byte terkompresi terlihat seperti
埒愑䣔橤㤰゙㟍稦獦ঙ惝䓇強栛䳌۬䌃̩佼. Saya tidak tahu apakah hasil kompresi LZ-string memang seperti ini, tetapi terlihat cukup asingBagaimanapun, untuk mengurangi potensi biaya, masih banyak ruang perbaikan di sisi networking. Keseluruhan proyeknya sangat mengesankan dan dibuat dengan baik
Kuncinya adalah prediksi sisi klien dan algoritme rollback networking. State game kami sekitar 1 KB pada 30 Hz, jadi biasanya masuk dalam satu paket, dan karena itu WebSocket juga tidak terlalu buruk. Tentu saja protokol yang tidak andal memang lebih baik
Beberapa bulan lalu saya sedikit menguji WebSockets, dan sejauh yang saya pahami, memakai TCP untuk komunikasi yang sensitif terhadap latensi seperti game punya kelemahan yang cukup besar. Header TCP lebih dari 2 kali lebih besar daripada UDP, ada paket kontrol tambahan, dan pengiriman data baru tertunda saat data lama dikirim ulang. WebSockets juga berjalan di atas TCP, jadi punya kelemahan yang sama
Meski begitu, orang-orang bilang TCP menjamin pengiriman pesan WebSocket, tetapi saya bisa mereproduksi packet loss. Pada akhirnya kelemahannya tetap ada, dan kalau benar-benar butuh pengiriman terjamin, kita harus membuat sesuatu sendiri di atasnya; kalau begitu, rasanya dari awal kita juga bisa membuat hanya pesan yang diperlukan seperti itu di atas UDP
Perlu diingat, selain sedikit mencoba networking, pengetahuan dan pengalaman saya hampir tidak ada
U+3400~U+4DBF,U+4E00~U+9FFFString tersebut didekode menjadi
\u57d2\u6111\u48d4\u6a64\u3930\u3099\u37cd\u7a26\u7366\u0999\u60dd\u44c7\u5f37\u681b\u4ccc\u06ec\u4303\u0329\u4f7c[1] https://en.wikipedia.org/wiki/CJK_Unified_Ideographs
Cara pasti untuk tidak pernah menyelesaikan game adalah memulai dari menulis engine
Membuat teknologi sendiri memang sangat mungkin, tetapi di setiap tahap teknologi itu harus disesuaikan untuk proyek sendiri, bukan menjadi platform game serbaguna
Yang dimaksud “mulai menulis blog” di sini adalah membuat engine blog baru sepenuhnya dari nol
Saya pernah melihat backend multiplayer berbasis Node.js akhirnya melambat sampai seperti merangkak ketika jumlah koneksi bertambah. Penasaran bagaimana masalah ini diatasi
Dalam kasus seperti ini, bukankah alternatif seperti Go lebih baik?
Backend juga rasanya tidak melakukan pekerjaan berat seperti simulasi fisika untuk frontend
Dalam pengujian sederhana, performanya jauh lebih baik daripada pustaka websocket populer lain yang cepat melambat
Karena itu Node terasa sebagai pilihan yang bagus
Tiap game dibatasi maksimal 64 pemain, tetapi saat diuji hingga lebih dari 100 koneksi, tidak terlihat masalah performa. Tiap game berjalan di container yang terisolasi
Saya penasaran dengan motivasi membuat engine baru
Dari README, ada hal-hal yang cukup spesifik yang sudah bawaan, seperti sistem senjata (jarak dekat/proyektil), toko, proyektil dengan prediksi sisi klien, dan pergerakan unit
Saya penasaran kenapa hal-hal seperti ini dimasukkan langsung ke engine, bukan dibuat sebagai plugin yang bisa disalin. Tentu banyak game tidak membutuhkan fitur seperti ini; apakah ini engine game? Atau engine untuk genre tertentu seperti FPS/RPG/dll.?
Saya tidak membenci teknologinya sendiri, tetapi pertanyaan “kenapa?” masih tersisa. Ini untuk apa? Kenapa harus memakai ini, bukan Three.js plus server sendiri?
Misalnya, kami membuat MMORPG sederhana dalam 2 jam: https://www.youtube.com/watch?v=GZVsxkALR5U
Menurut kami ada hubungan terbalik antara kemudahan penggunaan dan tingkat kustomisasi. Kami memilih yang pertama untuk menjembatani kesenjangan antara game multiplayer, yang dikenal sulit dibuat, dan pengembang game kasual
Sepertinya bukan untuk Anda, melainkan untuk orang yang ingin membuat game spesifik semacam itu. Tidak semua engine harus serbaguna
Saya punya beberapa proyek hobi yang sepertinya cocok dengan ini. Saya bisa coding, tetapi saat mengerjakan proyek hobi ada kalanya saya tidak ingin terlalu fokus seperti itu, jadi low-code dan editor interaktif terlihat bagus untuk pengembang hobi
Yang paling saya nantikan secara pribadi adalah peta dan generasi dunia. Saya bertanya-tanya apakah cara terbaik adalah mengekspor game ke JSON, memodifikasinya secara programatik, lalu mengimpornya kembali
Namun ini agak terasa membebani. Dunia tutorial yang belum dimodifikasi saja berisi 3.500 baris JSON, jadi ada banyak hal yang harus dipahami
Cara pertama yang terpikir adalah sengaja melakukan pengeditan lalu melihat bagaimana JSON berubah. Saya juga perlu mencari viewer diff JSON yang bagus. Sepertinya itu akan membantu menemukan bagian yang ingin saya utak-atik. Aset dan tile peta mungkin akan saya kumpulkan lewat editor interaktif
Saya penasaran apakah pendekatan ini masuk akal, dan apakah ada alat yang bisa membantu
Salah satu kreator di komunitas kami sedang membuat peta secara dinamis dengan ChatGPT. Ia membuat game petak umpet, mengirim prompt untuk menghasilkan JSON peta 2D, lalu memuat peta itu setiap kali ronde baru dimulai. Karena belum dipublikasikan, sulit bagi saya untuk membagikan gamenya
Selain itu, salah satu anggota komunitas sedang membuat interpreter untuk JSON game kami. Contoh: https://pypi.org/project/pymodd/
Senang melihat makin banyak proyek open source seperti ini bermunculan. Mengejutkan bahwa GitHub star-nya bahkan belum sampai 100