1 poin oleh GN⁺ 2023-12-10 | 1 komentar | Bagikan ke WhatsApp
  • Murder Engine adalah mesin game ECS untuk pixel art yang dibangun di atas FNA, masih dalam tahap pengembangan sehingga perubahan akan sering terjadi dan breaking change diperkirakan akan muncul
  • Contoh awal yang disarankan adalah proyek game jam neocityexpress dan hellomurder, yang menunjukkan alur pembuatan world, entity, dan component
  • Struktur proyek memisahkan game dan game.editor, serta memilih pendekatan mengendalikan editor secara langsung di dalam proyek pengguna tanpa editor.exe terpisah
  • Lingkungan pengembangan mendukung Linux, MacOS, Windows, Steam Deck, dan yang dibutuhkan adalah .NET 8 SDK; target game mendukung Linux, MacOS, dan Windows
  • Karena belum ada paket NuGet, metode yang direkomendasikan adalah mereferensikannya dari .csproj melalui git submodule; saat ini juga belum ada rencana dukungan resmi untuk web maupun mobile

Karakter dan status Murder Engine

  • Murder Engine adalah mesin game ECS untuk pixel art berbasis FNA
  • Mesin ini masih dalam pengembangan, dan meski branch rilis diupayakan tetap stabil, pengguna tetap perlu mengantisipasi banyak perubahan serta bagian yang belum selesai
  • README memberi peringatan “Proceed at your own risk” dan secara jelas menyebut kemungkinan adanya breaking change

Contoh awal dan jalur belajar ECS

  • Bagi pengguna yang ingin cepat memahami lewat contoh, alur yang disarankan adalah mulai dari proyek berikut
  • Untuk memahami bagaimana ECS diterapkan di Murder, pengguna diarahkan ke dokumentasi Bang
    • Bang adalah framework ECS yang digunakan oleh Murder

Struktur proyek dan pendekatan editor

  • Struktur proyek Murder dibagi menjadi resources, src/game, dan src/game.editor
    • game mencakup bin, packed, dan resources untuk game akhir
    • game.editor mencakup bin dan resources untuk editor game
  • Tidak ada editor.exe eksternal, yang ada hanya proyek milik pengguna sendiri
  • Struktur ini dipilih agar seluruh proyek bisa dikendalikan secara langsung, mirip dengan cara pengembangan proyek MonoGame atau FNA
  • Alasan editor dipisahkan ke proyek tersendiri adalah agar kode editor tidak menyentuh kode game, sementara sisi editor tetap bebas melakukan pekerjaan yang diperlukan

Build dan cara pengelolaan dependensi

  • Saat ini belum ada paket NuGet untuk Murder
  • Cara yang direkomendasikan adalah menempatkan Murder sebagai git submodule lalu mereferensikannya dari .csproj
  • Contoh referensi dapat dilihat di HelloMurder.csproj

Persyaratan dan platform yang didukung

  • Lingkungan pengembangan untuk menjalankan editor mendukung Linux, MacOS, Windows, Steam Deck
  • Persyaratan yang diperlukan adalah memasang .NET 8 SDK
  • Platform target game mendukung Linux, MacOS, dan Windows
    • Untuk Linux, ini termasuk Steam Deck
  • Dukungan konsol saat ini masih dalam proses
  • Untuk web serta mobile iOS dan Android, saat ini belum ada rencana dukungan resmi

Kontribusi dan umpan balik

  • Proyek ini masih berada pada tahap yang sangat awal
  • Disebutkan bahwa saran atau umpan balik dapat disampaikan kepada pembuatnya, yang tertarik pada penggunaan nyata dan masukan dari pengguna

1 komentar

 
GN⁺ 2023-12-10
Pendapat di Hacker News
  • Begitu melihat ada nama saint11, saya yakin ini bakal bagus. Tutorial pixel art-nya benar-benar tersusun rapi: http://saint11.org/blog/pixel-art-tutorials/

    • Baru pertama kali lihat, tapi hanya dengan melirik sebentar saja sudah yakin ini blog terbaik di seluruh internet
    • Saya tidak tahu itu orang yang sama. Dulu pernah melihat tutorial ini, dan cara kontennya dibentangkan/ditampilkan sangat bagus
    • Sepertinya saint11 adalah orang yang mengerjakan art untuk game Celeste
    • Ia ikut mengerjakan Celeste dan Towerfall, dan keduanya punya pixel art yang luar biasa. Kelihatannya sangat berbakat
  • Engine game baru dan framework ECS selalu menarik untuk dilihat. Kalau melihat Bang, bagian ECS-nya, ada contoh komponen seperti CarComponent dan sistem seperti CarMoverSystem; sistemnya berupa class, dan interface yang diimplementasikan tampaknya menentukan kapan ia dijalankan
    Agak mirip DOTS, tetapi saya belum menemukan di mana sistem ditambahkan ke game, atau bagaimana sistem-sistem sejenis diurutkan. Saya juga penasaran seperti apa bentuk sistem yang melakukan beberapa query berbeda, misalnya mobil dan rintangan
    Bang tampaknya memakai source code generator. Berbeda dari GetComponent, TryGetVelocity, RemoveFriction, dan SetVelocity sepertinya dihasilkan berdasarkan keberadaan komponen Velocity dan Friction; mungkin karena cache ID komponen, meski saya tidak yakin
    Ini bukan berbasis archetype; tiap entity menyimpan dictionary component id => component, dan tiap sistem melacak entity mana yang cocok dengan filternya. Saya tidak tahu seberapa bagus performanya, tetapi untuk banyak game, kemudahan pengembangan bisa lebih penting daripada performa
    Perubahan juga tampaknya langsung diterapkan. Kalau begitu, ketika sebuah sistem menambah/menghapus komponen pada entity sehingga status kecocokan filter berubah, saya penasaran apakah pemrosesannya pada tick yang sama akan bergantung pada ID entity

    • Saya juga penasaran dengan urutan eksekusi sistem. Harus menambahkan sistem baru secara manual ke daftar tetap bisa terasa menjengkelkan, tetapi pada saat yang sama, sistem-sistem sering memiliki dependensi implisit satu sama lain, jadi menetapkan urutan eksekusi pada waktu kompilasi juga penting
      Saat melihat sekilas dokumentasinya, saya tidak menemukan cara untuk menandai dependensi atau urutan seperti ini secara eksplisit, dan saya penasaran bagaimana engine ini menanganinya
  • Halaman Itch dan unduhan untuk game jam yang dibuat dengan framework ini: https://saint11.itch.io/neo-city-express
    Mengesankan untuk game jam 72 jam. Art dan tulisannya bagus, dan secara mekanik juga menyenangkan dengan cara yang tak terduga

  • Sangat bagus. Editornya sangat stylish, saya suka. Saya selalu menyukai MonoGame karena performanya bagus dan cross-platform, tetapi saya belum pernah membuat game besar dengannya, hanya sesekali membuat demo

  • Kelihatannya bagus. Saya penasaran apakah dalam pengembangan game C# ada masalah jeda GC

    • Dengan manajemen objek sederhana dan memanggil GC.Collect() secara eksplisit pada interval kelipatan kecil dari jeda simulasi, hasilnya cukup baik. Titik optimalnya tampaknya bergantung pada isi scene dan gaya gameplay, yaitu bagaimana objek-objek scene berubah
      Untuk scene dan gameplay bergaya Q3A, ini sangat kokoh. Hampir tidak ada elemen scene yang berubah setiap tick, jadi jeda GC sebagian besar bisa diabaikan
      Di .NET 6+, pada engine DIY, jeda GC terukur sekitar 1–5 ms ketika dipanggil cepat secara strategis dan berulang. Mematikan concurrent/server/background GC di pengaturan proyek, lalu memakai foreground + workstation GC, memberikan jitter paling rendah
      Pilihannya tampak hanya mengelola memori 100% secara manual, atau membersihkan sampah sesering mungkin. Di .NET modern, hampir mustahil mematikan GC sepenuhnya tanpa ilmu hitam seperti hacking DLL level rendah. Jika proses bisa direstart di antara event kerja atau ronde game, Process.Exit() juga merupakan teknik GC yang valid di sebagian area
    • Ada. Ada presentasi bagus dari Miguel de Icaza yang membahas sejarah penambahan C# ke game engine, serta alasan ia menaruh harapan pada penggunaan Swift di Godot dengan klaim bahwa reference counting di Swift menghindari masalah jeda GC
      https://youtu.be/tzt36EGKEZo?si=WNxwcTPGFbJABKez
    • Menurut saya masalah GC hampir hanya ada di Unity. Game engine lain yang memakai .NET biasa, seperti Stride, berjalan tanpa masalah
    • Ada. Unity tentu saja, dan Unreal juga punya GC, jadi harus melakukan alokasi di awal lalu memakai object pooling
    • Seperti kebanyakan bahasa lain, C# juga bisa ditulis agar menghindari alokasi
  • Dari membaca tautannya saja saya belum begitu paham; saya penasaran seberapa sulit membuat game F# dengan Murder game engine

  • Saya pernah memakai ECS sedikit di Unity, dan ECS milik Murder jauh lebih mudah. Para developernya benar-benar membuatnya dengan baik
    Saya membuat proyek game arcade kecil dengan Murder dan bisa dimainkan di sini: https://nopetrides.itch.io/bombs-away

    • Bisa jelaskan perbedaannya lebih rinci?
  • Di halaman perkenalan saint11 tertulis begini: “Murder Engine: 2D Pixel art C# ECS Game Engine made by Isa! I usually help on the render and physics side of it.”
    Isa: https://isadorasophia.com/projects/

  • Ini tidak terkait dengan game engine, tetapi lucu juga bahwa orang berniat jahat bisa berkata “orang-orang di situs web hacker itu sedang membahas murder”
    Belakangan saya sering memikirkan bagaimana materi yang sepenuhnya tidak berbahaya seperti ini bisa dimanfaatkan oleh lawan yang gigih

    • Agak dipaksakan, tapi memang ada orang yang memahami artikel The Onion secara harfiah
      Namun kalau kasusnya semudah ini dibantah, saya tidak tahu apakah ada perbedaan besar antara ungkapan “orang-orang membahas murder” dan kebohongan terang-terangan
    • Berpikir seperti ini, tetapi secara terbalik, adalah satu-satunya cara mengonsumsi berita media massa. Sekarang semuanya begitu bias dan konyol sampai sulit dipercaya
  • ECS itu apa?

    • Sepertinya Entity Component System. Arsitektur yang umum di game engine
    • Arsitektur performa tinggi yang sedang populer akhir-akhir ini. Unity belakangan sedang banyak berusaha memopulerkannya