15 ms·
Murder is a pixel art ECS game engine in C#
- pjmlp 3y agoLooks great!
- xmichael999 3y agowow!
- deleted 3y ago[deleted]
- mysterydip 3y agoWhen I saw saint11's name with it, I knew it would be good. Their pixel art tutorials are so well presented: http://saint11.org/blog/pixel-art-tutorials/ http://saint11.org/blog/pixel-art-tutorials/
- runevault 3y agoOh wow I didn't realize this was the same guy. I've seen this tutorial before and the way he lays everything out is fantastic.
- im_down_w_otp 3y agoI’ve never seen this before, but having perused through it for a bit I’m convinced this is the absolute best blog on the entire internet.
- chii 3y agoOne reason i think these tutorials are great is because the writing is concise and to the point. No extraneous words. It follows the style of writing outlined in https://en.wikipedia.org/wiki/The_Elements_of_Style https://en.wikipedia.org/wiki/The_Elements_of_Style almost to a T: Vigorous writing is concise. A sentence should contain no unnecessary words, a paragraph no unnecessary sentences, for the same reason that a drawing should have no unnecessary lines and a machine no unnecessary parts. This requires not that the writer make all his sentences short, or that he avoid all detail and treat his subjects only in outline, but that he make every word tell. — "Elementary Principles of Composition", The Elements of Style
- umvi 3y agoI think saint11 is the guy who did the art for the game Celeste
- SamPatt 3y agoThey worked on Celeste and Towerfall, both have excellent pixel art. Very talented.
- ilkke 3y agoI know no disrespect was meant, but calling an artist talented disregards the hard work that went into developing their skills. Unless you are talking about someone's unrealised potential.
- SamPatt 3y agoI know talent isn't innate. It's an obvious compliment.
- ilkke 3y agoWhat do you mean? I can't find a definition of talent that doesn't state it as 'innate' or 'natural'.
- spicyusername 3y agoThat seems a _little_ needlessly pedantic. If we read their comment assuming good faith, a Hacker News guideline, its clear they are merely trying to give credit or otherwise say something positive. From https://news.ycombinator.com/newsguidelines.html https://news.ycombinator.com/newsguidelines.html Please respond to the strongest plausible interpretation of what someone says, not a weaker one that's easier to criticize. Assume good faith.
- ilkke 3y agoI started the post by stating that I know no disrespect was meant. It is precisely in this context that I want to clarify how this very common way of expressing artist appreciation can, and often does, rub the recipient the wrong way. Anecdotal, but I wouldn't be sharing this unless I knew they many of my peers artists feel the same way.
- bigtunacan 3y agoThis is the pixel art tutorials I've been looking for for years! Thanks for your comment!
- dathinab 3y agoCreative names are all fun of fine but this - is not easy to google - is quite tasteless, less so if murder is mainly something you see on tv, but for some people murder is sadly much less of an fictional rare thing it it would be a game, story etc. which has that name and covers that topic it would be fine but naming something pretty unrelated to that murder is just quite a bit of tasteless and unnecessary edge; if it had a flock of crows as a log it would at least be a funny joke
- nkozyra 3y ago> is not easy to google I guess one could have said the same about "unity" or "unreal" or even "Godot" at one point.
- TrueGeek 3y ago“.net”
- morkalork 3y agoSounds like the title of a 90s horror b-movie "Murder.net"
- DonHopkins 3y agoWhich is at least easier to google for than Microsoft COM.
- dathinab 3y agogodot is a pretty unique name, tho
- robertlagrant 3y agoApparently hard to search for.
- esrauch 3y agoBefore the engine I'm sure all ten search results would have been about Waiting for Godot though.
- skrebbel 3y agoWoa, how the hell can C# run on an ECS? It has 2MB of RAM
- deleted 3y ago[deleted]
- clintfred 3y agoNot sure if I'm supposed to laugh, groan, or shake my head. Nicely played, sir!
- skrebbel 3y agoI like the occasional HN troll as much as the next guy, but I’m afraid that it wasn’t a joke. The page has screenshots with big fat pixels and says it’s an ECS game engine so I assumed it was, well, a game engine for the ECS. I since learned that ECS has another meaning that I wasn’t yet familiar with. I might’ve realized this wasn’t for the Amiga if I had read the page (or looked at the screenshots) better though.
- maxvu 3y agoI think ECS here is "entity-component system", a design pattern that seems related to data-oriented design. <https://www.gdcvault.com/play/1024001/-Overwatch-Gameplay-Architecture-and https://www.gdcvault.com/play/1024001/-Overwatch-Gameplay-Ar...>
- deleted 3y ago[deleted]
- sufficer 3y agoWhat is ECS?
- 6581 3y agoEntity component system.
- lstodd 3y agoAnd here I was thinking it's about Amiga 600
- vardump 3y agoSame. I thought pixel graphics within limitations of Amiga 600/3000 Enhanced ChipSet.
- mortenjorck 3y agoThe example game graphics that appear to plausibly fit in a 32-color palette did not help my confusion!
- ch71r22 3y agoGuessing Entity Component System - a common game engine architecture
- gentleman11 3y agoA trendy high performance architecture. Unity is trying to popularize it a lot lately
- capableweb 3y agoNot just about performance, but about getting a very well decoupled code base as well when using ECS.
- ctoth 3y agoUnrelated to the game engine, but I just love how someone unscrupulous could say "the people on that hacker website are discussing murder." I've been thinking a lot recently about what a dedicated adversary could do with totally innocuous material like this.
- Cpoll 3y agoSeems a bit far-fetched, but then again people have taken The Onion articles at face value. Still, with something this easily debunked, is there much difference between "the people ... discussing murder" and an outright lie?
- bear141 3y agoThinking this way, but in the reverse, is the only to consume mass media news. It’s incredible how biased and ridiculous everything is anymore.
- tmountain 3y agoThis looks great! I’m curious if C# game dev has issues with GC pauses.
- neonsunset 3y agoGC issues pretty much exist in Unity land only. Other game engines which use vanilla .NET like Stride work without a hitch.
- VHRanger 3y agoDoes the C# GC have guarantees about when it will/won't run? Dlangs GC for instance guarantee that it will only run on allocation of new memory so it's possible to architect the game to avoid meaningful pauses
- neonsunset 3y agoIn .NET, GC is triggered when a user thread runs out of memory in an allocation budget and needs more, similar to what you described [0]. Generally speaking, indefinitely preventing GC from running is not possible (you always end up putting some data on the heap) therefore an optimal strategy is similar to any other language - limiting allocations and reusing memory through object and array pooling. This will ensure that GC pauses are as infrequent and as short as possible. It's important to note that if there is sufficient allocation budget - the GC will not run. This way, in a well written code the GC may only ever trigger every few hundred frames and only take a millisecond to run. In fact, OSU! has been able to get consistently good frame times even back on .NET Framework. [0] https://github.com/dotnet/runtime/blob/main/docs/design/coreclr/botr/garbage-collection.md https://github.com/dotnet/runtime/blob/main/docs/design/core... [1] https://maoni0.medium.com/dynamically-adapting-to-application-sizes-2d72fcb6f1ea https://maoni0.medium.com/dynamically-adapting-to-applicatio...
- runevault 3y agoI wonder how much of the extra issues Unity has is because it is a very old version of Mono, since more modern versions of .NET have become so much more performant (especially Core 3.1 into 5+). I was sad when .NET 8 came out too late for Godot to fit in the update for Godot 4.2, so I believe they intend to make the update for 4.3.
- magicmicah85 3y agoVery nice. The editor is very stylized, I like it. I’ve always liked monogame because it’s performant and cross platform, though I’ve never made huge games with it, just a demo here and there when I get the itch.
- gentleman11 3y agoWhat is monogame ?
- haunter 3y agohttps://monogame.net/ https://monogame.net/
- gentleman11 3y agoBut is it widely used? Stable? Popular? Really nice to use? Actively developed? Is it infrastructure that other higher level tools build on, or is it like unity?
- misschresser 3y agoCeleste, Stardew Valley, Bastion are some famous games built on it.
- starkparker 3y agoYes.
- actuallyalys 3y agoIt’s a reimplementation of Microsoft‘s popular XNA framework that was used for a number of successful games. Monogame itself has been around for a while and my impression is that it’s a mature and stable project. I would put it in between libraries like SDL that are often used as infrastructure and full engines like Unity.
- voxic11 3y agonot by major game studios anymore but plenty of very popular indie titles use it, yes, yes, yes, yes, its a framework/sdk that comes with everything you need to make a game, though its more a code first model so it isn't "editor-centric" like unity.
- cowboyscott 3y agoItch page (with downloads) of a jam game made with the framework: https://saint11.itch.io/neo-city-express https://saint11.itch.io/neo-city-express edit: Impressive for a 72 hour jam game. Great art, writing, and mechanically interesting in a way that I wasn't expecting.
- DiggyJohnson 3y agoVery cool project. Man I hate to make this sort of comment, but is this a good name for this engine? I’d hate for a demo to get pushed down because a YouTube / Google algorithm doesn’t like it.
- deleted 3y ago[deleted]
- thuuuomas 3y agoSounds like a good reason to promote the merits of your own project, instead of the tools you use.
- pvg 3y agoI hate to make this sort of comment Easier to just not make it, especially since there's a (equally-better-never-made) subthread about it.
- dazaidesu 3y agoehhh its a cute name playing off of the "murder" of crows theme, I like it, makes the theme feel cohesive. Also I don't get the focus on making sure you have the perfect SEO for every side project, seems like a good way to not get anything done.
- PcChip 3y agoI feel like I’m the only one here that actually agrees with you
- Rexxar 3y agoIf they change name, I vote for "Mulder".
- skitter 3y agoNew game engines and ECS frameworks are cool to see. Taking a look at the ECS part, Bang, here's an example of a component abridged/adapted from their Ludum Dare entry: internal readonly struct CarComponent : IComponent { public readonly float Speed = 100f; [Slider(1,20f)] public readonly float Mass = 1; public CarComponent() {} } and of a system: [Filter(typeof(CarComponent), typeof(AgentImpulseComponent))] [Filter(ContextAccessorFilter.NoneOf, typeof(DisableAgentComponent), typeof(CarEngineStoppedComponent) )] internal class CarMoverSystem : IFixedUpdateSystem { public void FixedUpdate(Context context) { foreach (var e in context.Entities) { var car = e.GetComponent<CarComponent>(); Vector2 startVelocity = e.TryGetVelocity()?.Velocity ?? Vector2.Zero; var result = DoSomeCalculations(car, startVelocity); e.RemoveFriction(); e.SetVelocity(result); } } } Looks a bit like DOTS (but I haven't really tried that one either). A system is a class, and which interface it implements determines when it runs. Haven't seen yet where systems are get added to the game / how systems of the same kind get ordered. I'm also curious how a system that does multiple different querries (e.g. one for cars and one for obstacles) looks like. Bang seems to use source code generators – unlike the generic GetComponent<T> above, TryGetVelocity, RemoveFriction and SetVelocity seem to be generated based on the existence of the Velocity and Friction components. I'm not sure why that is, maybe to cache the component id? This isn't an archetype-based framework, instead each entity stores a dictionary of component id => component and each system tracks what entities match (also, each entity stores hooks for e.g. when a component gets added, which is used update which systems know about this entity). I don't know how good that's for performance, but for plenty of games performance isn't as important as ease of development. Also looks like changes are applied immediately. Does this mean that if a system add/remove a component to an entity that affects whether the entity matches the systems filter, it depends on the entity id whether the system processes the entity the same tick?
- lewispollard 3y ago> how systems of the same kind get ordered Curious about this too - it can be frustrating to manually have to add new systems to a fixed list (the amount of times I've got stuck into building a system, then wonder why nothing's happening at runtime - because I forgot to new() it and add it to the system group!), but at the same time, it's often important to fix at compile-time the order that systems run in as they can often be implicitly dependent on each other. I didn't see anything in the docs from a glance that would allow this dependency/ordering to be explicitly marked, so I'm curious to see how it handles this.
- Xeamek 3y agoSince engine is targetting pixel art, isn't ECS a bit of an overkill...? And yes, technically artstyle has nothing to do with game architecture. But in practice, most games of this style are pretty small, and thus don't really have any real performance requirements, so ecs'ing everything is overengineering compared to oop-style, coupled architecture, no? Also related: https://youtu.be/JxI3Eu5DPwE https://youtu.be/JxI3Eu5DPwE
- TillE 3y agoHugely popular little indie game Vampire Survivors, for example, requires some thoughtful optimization to have a zillion objects on screen without lagging to death. ECS isn't the only answer, but it is a valid one.
- ElectricalUnion 3y agoI think Factorio is a better example; items still exist when you don't see them on the map, and assuming you have a somewhat optimized base the performance is very acceptable until you are around 383k items/s being created and destroyed (50kSPM in the in-game parlance).
- Xeamek 3y ago>Items still exist when you don't see them I was always wondering about that: Do they have to? Couldn't you come up with some chunking based system where the game only monitors the 'inputs' for given area and as long as those are stable, skip simulating entire chunk and only generate the output?
- ElectricalUnion 3y agoThat would imply that you need to somewhat have: * a mechanism to constantly evaluate whenever a active chunk is worth promoting to a "hibernated" chunk, with its overhead and; * a very steady state factory chunk. But endgame steady state factories already overperform your average factory by a lot in the first place. It is the chaotic state non-endgame factories that currently need optimizations the most. And it is speficially them that don't reach steady state; one small moment of instability in the inputs and you need to start evaluating the state of your entire factory again. I think that clustorio or the next expansion approach, where you have several "surface" maps that each have well defined limited I/O interfaces "chest or spaceships", in a way that you could split off the massive state of the game into a cluster of smaller servers is the way to go.
- freecodyx 3y agoC sharp is pleasure to read
- TheGrkIntrprtr 3y agosaint11 mentions on his about page: “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/ https://isadorasophia.com/projects/
- owenpalmer 3y agoWay to go team, you're killing it
- nopetrides 3y agoI've a bit of ECS experience in Unity, and I found ECS in Murder much easier. The devs have done an awesome job. I made a small arcade game project with Murder https://nopetrides.itch.io/bombs-away https://nopetrides.itch.io/bombs-away that is available to play
- skitter 3y agoCould you elaborate on the differences?
- nopetrides 3y agoUnity has a ton of extra layers since they are trying to support a mixed game world with both game objects and entities. In order to make a entity from a game object, you have to bake the game objects using something called "authoring". You also can't debug any of the entity stuff visually, only using some tools that display information about the current world state and number of entities. You can't click on entities to drag them around or inspect them. In Murder, the editor lets you set up your sprite with hit boxes and entity components similar to working with Unity prefabs, but you can just drag those into the game world "scene" and they are already entities ready to go. Any systems will include the entities that it filters for without any additional steps. All you need to do is write the scripts for the components and systems, then add the component onto an entity into the world and add the system to the list of systems running in the world. Not to mention doing all that dynamically with support for more complex implementations. TLDR; ECS in Murder is just regular C# with some different context. Learning ECS and using it in Unity was like a whole other world even for an experienced Unity programmer.
- abetusk 3y agoEntity Component System [0]. [0] https://en.wikipedia.org/wiki/Entity_component_system https://en.wikipedia.org/wiki/Entity_component_system
- eggy 3y agoI don't know enough from reading the link, but how hard would it be to program games in F# using the Murder game engine?