Murder es un motor de juego ECS de pixel art en C#

Un nuevo motor de juego 2D de pixel art de código abierto en C#, construido en torno a una arquitectura Entity Component System (ECS), está recibiendo elogios por su diseño limpio, su sólido flujo de trabajo en el editor y el uso de tecnologías familiares como MonoGame. Los comentaristas comparan su enfoque ECS y el comportamiento de la recolección de basura en C# con Unity y Godot, y debaten si ECS es excesivo para títulos pequeños de pixel art o una forma útil de estructurar juegos complejos con muchas entidades. El nombre provocador del proyecto, “Murder”, también suscita debate sobre su facilidad de búsqueda, su posible mal gusto y si una marca con aire provocador es una desventaja o algo irrelevante para herramientas de desarrollo.

Impresiones generales

  • Muchos comentaristas elogian el aspecto del motor, el estilo del editor y su enfoque en el pixel art.
  • Los tutoriales de pixel art enlazados por uno de los colaboradores son alabados como algunos de los mejores disponibles, especialmente por ser concisos y estar claramente escritos.
  • Se comparten varios juegos de jam hechos con el motor y se describen como impresionantes para tiempos de desarrollo tan cortos.

Nombre del motor y marca

  • El debate significativo se centra en el nombre “Murder”.
  • Preocupaciones:
    • Mal SEO debido a la palabra genérica y muy usada.
    • Percibido como de mal gusto o innecesariamente provocador, especialmente dado el contexto de la violencia real.
    • Temor a que plataformas (p. ej., YouTube/Google) puedan rebajar su clasificación.
  • Contraargumentos:
    • Buscar “murder engine” ya muestra el proyecto.
    • Otros motores y herramientas ampliamente usados también tienen nombres genéricos o “raros”.
    • Algunos consideran las objeciones exageradas o una actitud de “recatamiento” y aprecian la temática de “murder of crows”.
  • El gusto se presenta como subjetivo; no se alcanza un consenso.

Arquitectura e implementación ECS

  • Varias personas confunden inicialmente “ECS” con el chipset de Amiga; otras aclaran que significa “Entity Component System”, una arquitectura de juego orientada a datos.
  • Se comenta el ECS interno (“Bang”):
    • Los componentes son structs simples; los sistemas son clases activadas por interfaces implementadas.
    • Los filtros definen qué entidades procesa un sistema.
    • Los generadores de código crean métodos auxiliares (p. ej., TryGetVelocity), probablemente por rendimiento/ergonomía.
    • Las entidades almacenan componentes en diccionarios; no es un ECS de tipo archetype/SoA, priorizando la simplicidad sobre la velocidad máxima.
    • Siguen abiertas preguntas sobre el orden de los sistemas, múltiples consultas en un mismo sistema y el comportamiento cuando se añaden o eliminan componentes a mitad de tick.

¿Es ECS excesivo para juegos 2D de pixel art?

  • Una opinión: la mayoría de los juegos de pixel art son pequeños y no necesitan ECS; OOP podría ser más simple.
  • Respuestas:
    • ECS puede ayudar a manejar grandes cantidades de entidades (p. ej., juegos tipo “bullet hell” o de automatización).
    • Mejores patrones de acceso a memoria pueden mejorar el rendimiento y la duración de la batería.
    • Algunos consideran ECS conceptualmente más limpio como “mutación controlada”, independiente del rendimiento.

C# y recolección de basura

  • Surgen preocupaciones sobre pausas de GC en el desarrollo de juegos con C#.
  • Varias respuestas sostienen:
    • Los GC modernos de .NET funcionan bien si se controlan las asignaciones (pooling de objetos, mínimas asignaciones por frame).
    • Los problemas son especialmente notorios en Unity porque usa un GC antiguo de Mono; otros motores basados en .NET funcionan mejor.
    • Las estrategias incluyen preasignación, pooling, desactivar ciertos modos de GC o llamar explícitamente a GC.Collect() en momentos controlados.
  • Hay discusión comparando GC por tracing con conteo de referencias (p. ej., Swift, GDScript de Godot), señalando compensaciones en determinismo, sobrecarga y adopción en plataformas.

Comparación con Unity, Godot y MonoGame

  • El ECS de Unity se describe como complejo por convivir con GameObjects y un flujo de trabajo separado de “authoring”; la depuración visual es limitada.
  • El ECS de Murder se describe como “solo C#” con menos capas: los componentes y sistemas se añaden directamente, y las entidades del editor son utilizables de inmediato.
  • MonoGame se presenta como una reimplementación madura y estable de XNA, usada en varios juegos indie conocidos, situada entre librerías de bajo nivel y motores completos.
  • Se menciona Godot por su uso de conteo de referencias y como alternativa cuya integración con .NET está mejorando.

Experiencia de usuario y preguntas abiertas

  • Un desarrollador que probó tanto Unity ECS como Murder informa que el ECS de Murder es mucho más fácil de aprender y usar, especialmente en el editor.
  • C# se describe ampliamente como agradable y legible.
  • Aparece una pregunta sobre usar F# con el motor, pero no se responde en el hilo, así que el soporte entre lenguajes sigue sin aclararse.