QuoteWe've released a few games across Rust, Godot, Unity, and Unreal Engine, and [..]
QuoteWhat I'd want instead is to have a very pretty GUI, with lots of custom sprites, animations, vector shapes, particles, effects, flashes, etc. I want my button to wiggle when it's clicked, I want my text to animate as it's hovered, I want to be able to use a custom shader and distort it with a noise texture. I want particles to fly around when a character box is selected.
QuoteMaking a fun & interesting games is about rapid prototyping and iteration, Rust's values are everything but that
QuoteECS solves the wrong kind problem
Quotemany times people use ECS because it solves the particular problem of "where do I put my objects", without really using it for composition, and without really needing its performance
QuoteECS as dynamic composition, allowing combinations of components to be stored and queried and modified together without having to be tied in a single type.
QuoteI've been in countless arguments where someone tried to convince me how I absolutely should be separating Position and Health out of my objects, and how my code is spaghetti if I'm not doing that.
Quotegenerational arenas generational arenas generational arenas
QuoteGeneralized systems don't lead to fun gameplay
QuoteHere's a few things that I think create good games, that are going directly or indirectly against generalized ECS approaches:
Quote- VFX that are not based on having lots of same-y particles, but time synchronized events (e.g. multiple different emitters firing on a hand-designed schedule) working across all the game's systems.
QuoteA good example game here would be The Binding of Isaac, which is a very simple roguelike with hundreds of upgrades that modify the game in very involved, interactive and deeply complex ways.
QuoteRust is the type of language where wanting to do a new type of upgrade might lead you down a path of refactoring all of the systems, and many would even say "that's great, now my code is much better and can accommodate so many more things!!!". It sounds like a very convincing argument [..]
QuoteA more flexible language would allow the game developer to immediately implement the new feature in a hacky way, and then play the game, test it and see if the feature is actually fun, and potentially do a bunch of these iterations in a short amount of time.
QuoteIndirection only solves some problems, and always at the cost of dev ergonomics
QuoteWhat would be 3 lines of code in C# suddenly becomes 30 lines of Rust split into two places.
QuoteThe most canonical example here is something like: "while I'm iterating over this query I want to check a component on this other thing and touch a bunch of related systems" (spawn particles, play audio, etc.).
QuoteRust being great at big refactorings solves a largely self-inflicted issues with the borrow checker
It's very often said that one of Rust's greatest strengths is ease of refactoring. This is most definitely true, and I have had many experiences where I could fearlessly refactor significant parts of the codebase, with everything working afterwards. Everything works as advertised?
QuoteIn Rust, sometimes just doing a thing is not possible, because the thing you might need to do is not available in the place where you're doing the thing, and you end up being made to refactor by the compiler, even if you know the code is mostly throwaway.
Quotethe borrow checker forces a refactor at the most inconvenient times [..] I've often found that being unable to just move on for now and solve my problem and fix it later was what was truly hurting my ability to write good code.