2 poin oleh GN⁺ 2023-12-22 | 1 komentar | Bagikan ke WhatsApp

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 nama game-sample.json menjadi game.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.json yang bisa digunakan pada instalasi lokal.
  • Ubah nama JSON game yang diekspor menjadi game.json lalu 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

 
GN⁺ 2023-12-22
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

    • Pada prinsipnya, ini bukan hal yang sangat sulit. Saat bekerja dengan produsen mobil, kami harus membuat pengguna login dengan akun OEM, dan secara teori semuanya dikatakan patuh regulasi, tetapi dalam praktiknya banyak bagian yang tidak berjalan dan perbaikannya juga lama
      Namun cara yang disebut di atas benar-benar tidak boleh terjadi, dan saya kira Google sudah melarangnya
    • Ini disebut OAuth 2.0, dan kalau memakai sesuatu seperti Okta, implementasinya sederhana
  • 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

    • Kombinasi fitur bagus, mudah dipelajari, dan hambatan masuk yang rendah bisa membawa cukup jauh
      Bayangkan struktur di mana hasil bermakna bisa muncul hanya dengan beberapa hari atau bahkan beberapa jam secara kasual. Ingat saja Flash
    • Ada komunitas yang aktif dan setiap hari mereka membuat 150–300 game baru
      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 banyak bermain game dan dulu juga pernah menjual game, tetapi belum pernah mendengar istilah itu. Apa itu 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 asing
    Bagaimanapun, untuk mengurangi potensi biaya, masih banyak ruang perbaikan di sisi networking. Keseluruhan proyeknya sangat mengesankan dan dibuat dengan baik

    • Di WebSocket kami, gerakannya cukup responsif: https://gooberdash.winterpixel.io/
      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
    • Bisa jelaskan lebih lanjut bagian “gerakannya terasa agak tersendat seperti yang bisa diduga dari WebSocket”? Saya pernah mencoba beberapa “game IO”, dan selain pemain yang sesekali punya latensi parah, kelihatannya cukup mulus
      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
    • Karakter CJK merupakan bagian yang sangat besar dari karakter Unicode yang dapat dicetak. [1] Dua blok terbesar mencakup U+3400~U+4DBF, U+4E00~U+9FFF
      String 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

    • Sepertinya saya harus mulai menulis blog!
      Yang dimaksud “mulai menulis blog” di sini adalah membuat engine blog baru sepenuhnya dari nol
    • Bisa jelaskan bagian mana dari modd.io yang Anda maksud? Maksudnya ini adalah hasil dari kegagalan saat mencoba membuat game?
    • Kebanyakan orang yang memakai engine kemungkinan sejak awal bukan ingin membuat game, melainkan sebenarnya ingin membuat engine
  • 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?

    • Saya kurang paham kenapa begitu. Dari sisi koneksi, berkat event loop Node, pemblokiran I/O untuk permintaan/respons HTTP sepertinya tidak akan jadi masalah
      Backend juga rasanya tidak melakukan pekerjaan berat seperti simulasi fisika untuk frontend
    • Kami memakai uWebSockets(https://github.com/uNetworking/uWebSockets). Ini ditulis dalam C, tetapi ada antarmuka yang bisa digunakan dari NodeJS
      Dalam pengujian sederhana, performanya jauh lebih baik daripada pustaka websocket populer lain yang cepat melambat
    • Di sebagian besar game IO, bottleneck-nya sepertinya adalah I/O. Nama genrenya memang berasal dari top-level domain, meski terlihat seperti permainan kata
      Karena itu Node terasa sebagai pilihan yang bagus
    • Skalabilitas bisa menjadi pertimbangan nyata, terutama saat jumlah koneksi besar. Dalam kasus kami, kami mengoptimalkan backend agar dapat menangani jumlah koneksi simultan yang cukup besar secara efisien
      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?

    • Terima kasih atas pertanyaannya. Kami secara sadar memutuskan membuat engine ini dengan struktur yang lebih opinionated dibanding alternatif modular lain, karena kami ingin pengembangan game multiplayer 2D bisa dilakukan dengan sangat cepat
      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
    • “Ini untuk apa?”
      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

    • Kami tidak menyarankan mengedit JSON secara langsung. Cukup sulit dibaca dan menggembung. Di modd.io ada action yang bisa langsung memodifikasi peta
      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

    • Jangan salah paham, saya sungguh penasaran. Kenapa mengejutkan kalau GitHub star-nya kurang dari 100?
    • Mungkin karena baru saja diumumkan