T-Machine
t-machine.org · Personal blog · on HN since 2009
T-Machine is the blog of a game developer who writes about entity systems for online games, freelancing, recruiting, and startups.
What HN saysHN cites it as the origin of the entity component system naming, in particular its 2007 entity systems posts on MMOG development.
15HN people shared it
10linked it in comments
5stories submitted
164story points
3 years agolast shared
2009people per year2026
Most-shared posts
- 1Entity systems are the future of mmog development part 16 people · first shared 2009
- 2Entity systems are the future of mmog development part 22 people · first shared 2014
- 3Homepage2 people · first shared 2015
- 4When GitHub kills Open Source1 people · 84 points · first shared 2012 · 49 comments on HN
- 5Recruiters: My fee for referrals is 5%1 people · 72 points · first shared 2011 · 28 comments on HN
- 6Should freelancers in gamedev industry sign NDA’s?1 people · 5 points · first shared 2014 · discussion on HN
- 7VCs, Angels and ghetto testing: They are wrong1 people · 2 points · first shared 2010 · discussion on HN
- 8We need to talk about Tabula Rasa; when will we talk about Tabula Rasa?1 people · 1 points · first shared 2009 · discussion on HN
- 9Data structures for entity systems contiguous memory1 people · first shared 2019
- 102014 entity systems what are your unity3d questions and problems1 people · first shared 2014
What HN people wrote when they linked it
teamonkey · 2023-06-26
Same here. I still find it a bit misleading too.
The game didn’t make it to AC:Valhalla, a texture-packing library that was made during its creation did[1] (not wanting to downplay that achievement, it’s worthy of a post in its own right, IMO).
It’s also a bit of a stretch to claim it was the source of the ECS system used in Unity. I was using a game engine which used ECS prior to 2010. In the game engine world it seems to originate with Operation Flashpoint[2] (post from 2007).
[1] https://github.com/TeamHypersomnia/rectpack2D
[2] https://t-machine.org/index.php/2007/09/03/entity-systems-are-the-futu…
CmonDev · 2015-07-10
Related: a guy trying to fix the Unity3D's broken core - http://t-machine.org.
M8 · 2015-04-30
Modern approach: http://en.wikipedia.org/wiki/Entity_component_system
One of the proponents: http://t-machine.org
dkersten · 2010-07-01
Maybe I'm naive, but I don't think the problem is what everyone always says - that parallel programming is super hard and most programmers cant effectively program for multicore systems. Instead I think the problem is one of education and training. How many programmers actually get decent training and education in multicore programming? I don't think its very many. Of all the programmers complaining how hard it is to write effective multicore programs, how many have actually read books and research papers on the subject? Again, I'd wager not many.
For example, In my four year computer science degree, a lot of time was spent on high level languages like Java, C, C++, Haskell, even prolog. A good bit of time was spent on low level details (two computer architecture modules, an "advanced" computer architecture module, an assembly programming module). Some time was spent on computability, complexity and parsing. Of course, we had a number of math modules too, including probability, statistics and linear algebra. A lot of time was spent on object oriented programming, data structures and algorithms. A little bit of time was spent on other topics like network programming, databases, operating systems (we did cover deadlock and some concurrent programming stuff in great detail here) and AI. The rest was split between single (optional!) modules on niche areas: digital signal processing, cryptography, compression, 3d graphics and so on.. including concurrent programming.
We spent…
Jare · 2021-02-27
It would be fair to attribute the ECS naming (specifically, making "Systems" an integral concept to the, ahem, system) to this from 2007: http://t-machine.org/index.php/2007/11/11/entity-systems-are-the-futur…
sago · 2015-02-09
Mostly modern game engines use an entity system[1], which is a form of database (global data, I guess, in as much as any database is).
The main loop then steps through each component (of which physics would be one) and lets it update the entity data for all entities.
This pattern took over from class/inheritance based architectures about 10 years ago.
There have been some suggestions that Functional Reactive Programming is a better approach. I've used it in some prototypes, but I couldn't scale it to engine-size, and I'm not aware of it having been used successfully for a full game engine.
So, this approach is pretty much it. You keep a database of state, then you run a system (the physics system, say) to update that database.
[1] http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-futur…
wtetzner · 2014-03-26
You might want to look at how people are approaching components now. Instead of components containing logic, components only contain data.
You then have systems that operate on the components. This solves the problem of needing components to interact with each other, since a system can look at as many components as it wants.
https://en.wikipedia.org/wiki/Entity_component_system
http://t-machine.org/index.php/2007/11/11/entity-systems-are-the-futur…
http://piemaster.net/2011/07/entity-component-artemis/
Markku · 2011-08-23
This is really not a good example as games have (read should have) entity systems. See e.g. these two links for an introduction.
http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-futur…
http://www.purplepwny.com/blog/?p=215
There should be no Draw() in your game object (read entity) base class. Not every entity is rendered. You should have instead a component Renderable. And if it happens to be so that your special snowflake has a Renderable component then you can render it on screen. E.g. AI pathing nodes would not usually have one unless you are debugging them you can add one.
In your example you end up with Movable extending GameObject, Camera extending GameObject and then you have no way of combining these two behaviours.
cellis · 2009-11-22
Wow, cool. I was wondering when these would show up here on HN. For a more thorough treatment, you may want to read this series of posts by Adam Martin :
http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-futur…
DonHopkins · 2019-10-23
There are some abstract similarities, but neither COM nor Unity GameObjects/Components are an "implementation" of that pattern, since they were both invented a long time before 2007 when Adam Martin defined ECS in "Entity Systems are the future of MMOG development":
http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-futur…
ECS builds on top of some of the ideas of COM and GameObject/Component, but loses much of the baggage, takes it much further in a different direction, and has a lot of other advantages, like storing the data in separate contiguous cache-friendly buffers.
https://en.wikipedia.org/wiki/Entity_component_system
>In naïve ECS implementations, every system iterates through the complete list of all entities, and selects only those entities that are needed. The total iteration cost for all systems becomes too costly if the number of systems grows or the number of entities is large. In other ECS architectures, every component type is stored in a separate list, so whatever systems operate on a given type of component are only iterating over objects they care about by default. In this common ECS architecture, the described disadvantage actually becomes a major performance advantage, by more efficiently leveraging the CPU instruction and data caches.
http://t-machine.org/index.php/2014/03/08/data-structures-for-entity-s…
>Net effect: Contiguous memory is King
>If you store your data contiguously…