Murder é um motor de jogos ECS em pixel art em C#

Um novo motor de jogos 2D em pixel art e código aberto, em C#, construído em torno de uma arquitetura Entity Component System (ECS), está a receber elogios pelo design limpo, pelo forte fluxo de trabalho no editor e pelo uso de tecnologias familiares como MonoGame. Os comentadores comparam a sua abordagem ECS e o comportamento do garbage collection em C# com Unity e Godot, debatendo se ECS é exagero para pequenos títulos em pixel art ou uma forma útil de estruturar jogos complexos com muitas entidades. O nome provocador do projeto, “Murder”, também gera debate sobre capacidade de pesquisa, mau gosto percebido e se a marca agressiva é uma desvantagem ou um não-problema para ferramentas de desenvolvimento.

Impressões gerais

  • Muitos comentadores elogiam a aparência do motor, o estilo do editor e o foco em pixel art.
  • Os tutoriais de pixel art ligados por um dos contribuidores são elogiados como alguns dos melhores disponíveis, especialmente por serem concisos e bem escritos.
  • Vários jogos de jam feitos com o motor são partilhados e descritos como impressionantes para tempos de desenvolvimento curtos.

Nome e marca do motor

  • Um debate significativo gira em torno do nome “Murder”.
  • Preocupações:
    • SEO fraco devido à palavra genérica e muito usada.
    • Perceção de mau gosto ou de uma agressividade desnecessária, especialmente tendo em conta a violência no mundo real.
    • Receio de que plataformas (por exemplo, YouTube/Google) possam rebaixar o conteúdo.
  • Contra-argumentos:
    • Pesquisar por “murder engine” já apresenta o projeto.
    • Outros motores e ferramentas amplamente usados também têm nomes genéricos ou “esquisitos”.
    • Alguns consideram as objeções exageradas ou “pearl-clutching” e apreciam o tema de “murder of crows”.
  • O gosto é apresentado como algo subjetivo; não se chega a consenso.

Arquitetura ECS e implementação

  • Várias pessoas confundem inicialmente “ECS” com o chipset da Amiga; outras esclarecem que significa “Entity Component System”, uma arquitetura de jogos orientada a dados.
  • O ECS interno (“Bang”) é discutido:
    • Os componentes são structs simples; os sistemas são classes acionadas por interfaces implementadas.
    • Os filtros definem que entidades um sistema processa.
    • Os source generators criam métodos auxiliares (por exemplo, TryGetVelocity), provavelmente por desempenho/ergonomia.
    • As entidades armazenam componentes em dicionários; isto não é um ECS por archetype/SoA, favorecendo a simplicidade em vez da velocidade máxima.
    • Permanecem questões sobre ordenação de sistemas, múltiplas queries num único sistema e o comportamento quando componentes são adicionados/removidos a meio do tick.

ECS é exagero para jogos 2D em pixel art?

  • Uma perspetiva: a maioria dos jogos em pixel art é pequena e não precisa de ECS; OOP pode ser mais simples.
  • Respostas:
    • ECS pode ajudar a gerir grandes quantidades de entidades (por exemplo, jogos tipo “bullet hell” ou de automação).
    • Melhores padrões de acesso à memória podem melhorar o desempenho e a duração da bateria.
    • Alguns consideram ECS conceptualmente mais limpo como “mutação controlada”, independentemente do desempenho.

C# e garbage collection

  • São levantadas preocupações sobre pausas de GC no desenvolvimento de jogos em C#.
  • Várias respostas argumentam:
    • Os GCs modernos do .NET têm bom desempenho se as alocações forem controladas (object pooling, minimização de alocações por frame).
    • Os problemas são especialmente pronunciados no Unity porque usa um GC antigo do Mono; outros motores baseados em .NET têm melhor desempenho.
    • As estratégias incluem pré-alocação, pooling, desativar certos modos de GC ou chamar explicitamente GC.Collect() em momentos controlados.
  • Há discussão a comparar GC por tracing com contagem de referências (por exemplo, Swift, GDScript do Godot), observando trade-offs entre determinismo, overhead e adoção em plataformas.

Comparação com Unity, Godot e MonoGame

  • O ECS do Unity é descrito como complexo devido à coexistência com GameObjects e a um fluxo de trabalho separado de “authoring”; a depuração visual é limitada.
  • O ECS de Murder é descrito como “apenas C#” com menos camadas: componentes e sistemas são adicionados diretamente, e as entidades do editor ficam imediatamente utilizáveis.
  • MonoGame é apresentado como uma reimplementação madura e estável do XNA, usada em vários jogos indie conhecidos, situando-se entre bibliotecas de baixo nível e motores completos.
  • Godot é mencionado pelo uso de contagem de referências e como alternativa cuja integração com .NET está a melhorar.

Experiência de utilização e questões em aberto

  • Um desenvolvedor que experimentou tanto o ECS do Unity como o de Murder relata que o ECS de Murder é muito mais fácil de aprender e usar, especialmente no editor.
  • O C# é amplamente descrito como agradável e legível.
  • Surge uma pergunta sobre usar F# com o motor, mas não é respondida no tópico, pelo que o suporte entre linguagens permanece pouco claro.