Mesin game ECS pixel art yang dibuat dengan C#, 'Murder'
(github.com/isadorasophia)- 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
gamedangame.editor, serta memilih pendekatan mengendalikan editor secara langsung di dalam proyek pengguna tanpaeditor.exeterpisah - 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
.csprojmelalui 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
- game jam project: proyek game jam untuk melihat arsitektur Murder
- Hello World project: contoh yang menunjukkan cara membuat world, entity, dan component
- 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, dansrc/game.editorgamemencakupbin,packed, danresourcesuntuk game akhirgame.editormencakupbindanresourcesuntuk editor game
- Tidak ada
editor.exeeksternal, 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
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/
Engine game baru dan framework ECS selalu menarik untuk dilihat. Kalau melihat Bang, bagian ECS-nya, ada contoh komponen seperti
CarComponentdan sistem sepertiCarMoverSystem; sistemnya berupa class, dan interface yang diimplementasikan tampaknya menentukan kapan ia dijalankanAgak 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, danSetVelocitysepertinya dihasilkan berdasarkan keberadaan komponenVelocitydanFriction; mungkin karena cache ID komponen, meski saya tidak yakinIni 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 performaPerubahan 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
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
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 areahttps://youtu.be/tzt36EGKEZo?si=WNxwcTPGFbJABKez
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
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
Namun kalau kasusnya semudah ini dibantah, saya tidak tahu apakah ada perbedaan besar antara ungkapan “orang-orang membahas murder” dan kebohongan terang-terangan
ECS itu apa?