Kerbal Space Program gets high marks for giving me a great intuitive sense of orbital mechanics, aeronautical design, and space mission architectures (‘to get to space you need to go sideways, not up’), even if the actual rocket building is simplified to Lego-like to keep it fun
My light bulb moment was when I looked at the Apollo 13 orbital paths and mentally considered a few alternatives they could have done too.
And for anyone frustrated with the premature release of KSP 2, I recently discovered Juno New Origins which scratches a similar itch. It works on both Android and PC, and SyncThing or the like can transfer saves/crafts between.
I disagree that While True: Learn() is a game about ML. It's _themed_ as a ML game, but it's mere a share-sorting puzzle game where you are routinely load-balancing things until it works precisely as the task expect. Driving minigame was bugged at that time I was playing the game, but from what I seen on YT videos, the whole thing is about clicking "Evolve" button.
HRM was personally disappointing because of both the lack of depth (no appeal to programmers) and the sudden difficulty hike (no appeal to non-programmers). Also it had (or still has?) some game-breaking interpreter bug that made me lost my code and ultimately give up.
What category do you think this would best belong in? I watched the trailer but it wasn't super clear to me how the gameplay worked. Looks like you can move chests and keys around, but not the room itself? What's the logic/programming angle?
So you enter a room via a chest, but can also move a chest around and even take it out of the current room. And the state of room is (mostly) reset once you enter the same room again, so you can duplicate a chest provided that it was once in some other chest. Crucially, some chest refers to the existing room---you can often infinitely recurse into the same room again and again (hence the name of the game). Each level of recursed room keeps its contents until the exit, and is distinct from other levels even though they all share the same room structure.
Scheme-stained glasses will translate these mechanics as follows: a chest is a function and a visible room is a scope formed by a function invocation. So it is obvious that entering the same chest again won't (mostly) keep existing objects and nested rooms have distinct states. As the game progresses, you will find various objects that interact with typical function scopes, and many of them have analogies in Scheme or similar languages. For example, I think there was an object that corresponds to an one-shot continuation!
I enjoyed The Incredible Machine as a kid, the modern equivalent (though still 10 years old) is 'Contraption Maker' - https://store.steampowered.com/app/241240/Contraption_Maker/ - which was designed by the same person. Glad to see he's still going all these years later!
This is not 'Incredible Machine' related, but while I'm here, I'm working on an engineering-adjacent game where you build and automate a zoo full of spooky monsters. Might be of interest to some! https://store.steampowered.com/app/654960/The_Eldritch_Zooke...
It has one of the best mechanism simulators I've seen in a game with all sorts of gears, differentials, slider joints, springs etc. I've found it handy for virtually prototyping, you can mock up and test machine concepts much faster than CAD software.
Sim Tower would deserve a spot on the list if it was more modern. It was originally built as an elevator simulation and then turned into a game, and it shows. Unfortunately, it's a 16 bit application and thus not well suited for modern systems. It was unstable even back then, time was tied to CPU speed, and playing with DosBox and corresponding bad mouse behavior (no acceleration) isn't fun.
Project Highrise seems to mostly omit the fine-grained elevator control that was at the core of Sim Tower, so the most recent successor that I'm aware of is Yoot Tower, which I didn't get around to trying yet. Unfortunately neither SimTower nor Yoot Tower seem to be available legally.
I think they were the first games I added while building the list, and a heavy inspiration for it to begin with :) I added a thank-you for them just now.
I wish that there was a separate list/category of games involving coding (block or actual).
One game that I really got into for a bit was Autonauts [1], but ended up falling a bit short of what I was really looking for (due to very awkward UI and controls).
But would really love to see more games with automation (like Factorio) but where the automation was coded. Or tower defense/RTS games (like Mindustry) or simulation (like Rimworld) where you could automate the AI.
I see some games involving coding, but mostly look like hacking games, which I think are more puzzle games, vs. sandbox.
Like I said, Autonauts would have been this, but it’s just too awkward, and not quite as deep as I was hoping.
I was excited this was such a list, until I realized it wasn’t software engineering.
(My very first experience with something close to this was FFXII, which I loved, but fell flat for many because they didn’t want to automate the battles, which was my favorite part!)
Look at Screeps: World [0] for depth in a programming base-builder RTS.
You write the code for each of your units, either natively in Javascript or Typescript, or via WASM you can run Rust, Python, etc. You use a private server or join a shared MMO world. There's a free sim [1] to try out the basics, though the actual game has much more depth. And an active Discord for help [2].
There's also a variant Screeps: Arena [3] that focuses on 1:1 PVP battles with ranked ladders if you prefer short-lived matches to a long-running world.
Bitburner is in the list, and it's an excellent game where you have to code (JS/Typescript). The date 2021 is wrong like many others in the page: it's probably the introduction on Stream, because the game goes back to 2016. It's an open-source game (reading the source code is sometimes recommended) and can be played in the browser at https://bitburner-official.github.io/
It's a long and rather hard game, but I liked its learning curve. You'll need to understand the way the "world of the game" works, then define and code a strategy. Then other "worlds" appear, where other strategies are required. I enjoyed playing it and I have 5k lines of TS code in my Git repository for bitburner.
Oh, thanks for that correction! I changed the date on Bitburner. If you know of any other errors, please let me know (here or as a PR/issue in the repo). Appreciate it!
> But would really love to see more games with automation (like Factorio) but where the automation was coded.
> I was excited this was such a list, until I realized it wasn’t software engineering.
SpaceChem is a programming game, and it's on the list, but it's not categorized under Hacking, Computer Science, Logic, and Automation, which would have been the correct category. It's listed under Puzzle & Casual instead. Opus Magnum has the same problem.
SpaceChem is more "programmy" than Opus Magnum. Do you like writing Befunge?
Making a new category is easy, but as you said, I don't think there are a whole lot that could go in it? I'll at least add Autonauts for now, though!
Do you think Bitburner, Exapunks, while true: learn(), TIS-100, and Screeps would belong there too, or do you think a category specifically for "Production automation via code" would be more helpful?
PS That category just sounds like work you can get paid for, lol :)
It's already been shared in the comments, but look into Human Resource Machine. It's a fun little game that tricks you into learning to solve problems in assembly.
Civ VI (more precisely all Civ series games) should be on this list. There is a whole category of Great Engineers and the game mechanics allow these real life Engineers to aid in the construction of Wonders and triggering a win condition. City planning is a big part of the game.
Poly Bridge is also a game that is focussed on building bridges.
Kerbal Space Program is focussed on constructing a Rocket and launching it.
While making the list, I debated this in my head for quite a while and couldn't come to a good conclusion either way.
On one hand, if we add Civ, that would probably open up all 4X games (Stellaris, Sins of a Solar Empire, maybe even Age of Empires, etc.). That might be a lot of games, and arguably the "engineering" isn't a huge focus in those games. From what I remember, those games don't have a whole lot of automation/assembly lines going on, or focus on route-building (Civ has roads, but it's only a minor part of the game), infrastructure, etc. It's a pretty big-picture view nations, rather than the day-to-day nitty-gritty of running individual cities/settlements.
On the other hand, it could also be argued that settlement games are similar too, just a matter of degree or "zoom level".
I'm on the fence about it. Any thoughts?
-----
Oh, and Poly Bridge and KSP are on there already :)
Discuss the thoughts at the top of the GitHub page so that your thinking and criteria are clear of why certain games are included an others are not. It's completely fine to exclude Civ -- it is kind of a unique game that aims to include many aspects of ancient and modern Civilizations from military conquest to scientistic research to engineering achievements. You could argue it's an aspect of the game but not a central game mechanic which the list aims to promote.
Don't over think it though -- it's just a list of games that supposed to be useful to whatever audience you have in mind. I'm just trying to rattle off suggestions anyhow and that makes the list better given many games were 'considered'.
As much as I like the game, the engineering depth isn't that deep compared to "work fast and always know what's behind your cutting surface." (Especially since you are dismantling, rather than constructing.)
I mean, it boils down to stuff like: Systematically depressurize, get fuses before removing generators, shut off fuel before removing thrusters, have an exit path for the generator before you disconnect the coolant, etc.
> Else Heart.Break() is a reimagination of the adventure game – a fantastic story set in a fully dynamic and interactive world. Instead of rigid puzzles you will learn (with the help from other characters in the game) how the reality of the game can be changed through programming and how any problem can be solved in whatever way you find suitable.
I feel like it's kind of unfair to put Factorio's release date as 2020. Yes, that's what Steam says, and that's it's 1.0 release date. But Satisfactory is listed as 2020, and that is still in early access. So maybe note on the list when a game is still in early access?
What does “early access” even mean nowadays? Seems like devs can label (or not label) a game as “early access” whenever they want. I’m guessing most do it as a way to set lower expectations to minimize bad reviews.
I think Factorio was early access longer than necessary, and Satisfactory also feels like it’s well beyond “early access”.
E.g. it’s not like “early access” means that they’re still making changes to the game, and stop making changes once the label is gone. I’ve seen “early access” games get abandoned (or even never see another update), and I’ve seen games out of “early access” still continue getting several updates.
Satisfactory feels like it's absolutely Early Access: Recent Satisfactory patches have changed the tech tree, broken existing production lines due to recipe changes, and even changed the geography of the world (one of my power plants is now inside a mountain, which makes it very difficult to change anything). They're also planning to add a plot involving the alien artifacts you find across the world, although so far nothing further is known.
That seems to be the clear line between "early access" and "Updates past 1.0": are you backwards compatible? Before 1.0, you don't have to worry about that, but I'd be very annoyed to find a new mountain in the middle of my base come 1.1
Satisfactory does often feel feature-complete, they could release the game as-is and I don't think it would feel particularly unfinished.
However it is unfinished by virtue of the fact that they have a lot more planned, and it's early access by virtue of having resources in the world with "WIP" in their tool tips.
I changed it to 2016, which is when Wikipedia says it entered early access. I also added an early access tag (thanks to a PR).
Sorry, the dates weren't meant to be a competition, and I just pulled whatever Steam listed it as! If you know of any other games that have an unfair date, please let me know :)
My original favorite engineering "game" was Garrys mod, which is basically just a playground using the Half Life 2 physics and game engine. I had great fun slapping wheels on something like a bathtub and making a makeshift car, or making silly Rube Goldberg style machines using levers, ropes, thrusters, etc. Not a typical game since it didn't offer any typical goals or levels outside of have fun and be creative, but that IMO only heightened the inspiration to engineer stuff to play with.
ahhh, I didn't realize steam only. I don't think you'd find many dosbox games that really fit the theme. Robot odyessy is coming up on 40 years old.
but this
```
I say keep it to just Steam games. That way if nothing else it has the focus to be an amazing utility and still has plenty of items to curate. Once the criteria becomes "everything under the sun" it becomes so huge that it's likely to have a low signal to noise ratio for usefulness.
```
seems like a pretty reasonable stance. Completely fair to say if people want old games, go look for old games.
Brilliant! I remember playing this as a kid on my Apple II+. I can’t remember how many hours it took me, but I eventually managed to make it through the entire thing. Many happy memories of this game helped lead me to a career in software engineering.
The Factorio founder stated on Reddit that "Modded minecraft, mainly buildcraft/industrialcraft, was huge inspiration to create Factorio." (A link to that Reddit post is the first citation in Wikipedia's article on Factorio.)
The entire factory game genre owes its existence to Minecraft mods.
Java MC industrial mods have been the granddaddy of industrial games since 1.4.7. Nothing scratches the itch quite like a 4 story chemical plant with hundreds of regulated processes.
I don't have any I can personally vet on the public internet. Most of what I've seen is on the GTCEu discord. Image searching "nomifactory" yields some stuff that looks about right. "Lawn base".
Back in the 1.4.7 days the biggest packs out there were kitchen sink packs like MindCrack with GT3 being the biggest single mod. The gregtech family tree has grown substantially and the largest branches are much more intricate than what used to be around. On par with Krastorio2.
Even unmodded Minecraft would belong on this list. Redstone contraptions and production automation can be part of base building in the basic survival game. The list has a section for Open-World Survival Sandboxes - Minecraft is one of the originators of that genre.
Yeah, the page says "The game that created the genre" about Factorio, which isn't really true - the factorio-style gameplay was preceeded and inspired by tech mods in Minecraft.
Included in most of the tech mod packs but deserving of a special mention is ComputerCraft, which allows you to program computers and robots in Lua that can interact with the Minecraft world!
CC is the reason I can write some Lua, at least after the initial intro when I was fumbling around in the TES 3 editor. I went down that rabbit hole and build some far too complex one-off things. One of them even called out to a PHP backend for a shared database. I think I started hacking on a system that could propagate updates between CC nodes in a sort of mesh network (wireless CC networks) before just using the database backend. Luckily I lost interest before writing a whole network layer.
Does anybody know of any good spiritual successors to Robot Arena 2? I loved this game growing up and it very much fits into this awesome list somewhere.
Players spend some "homework" time designing vehicles, then they test them in turn-based combat, then it's back to the drawing board to revamp designs. For every hour of combat play, it's probably at least one hour of design time, tweaking designs within constraints . . .
Starting with version 5, they started dumbing down the rules and focusing more on faster combat and moving around larger toy cars instead of designing anything. Because who wants to play a geeky engineering game, anyway? (me)
I had a lot more fun with incredible.pm; a lot of the difficulty in the Natural Number Game was in the UI being unclear. For example, I ran into a case where I had y <= d and I wanted y <= d + 1.
The two relevant theorems here are the transitivity of the <= relation and the fact that n <= n+1 for all n. Both of those were in my "inventory". But I had no way to apply them.
In incredible.pm, you'd have a block for "n <= n+1 for all n", you'd run that through a universal instantiator, and you'd get d <= d+1 as a result. Then you could use that as input to the transitivity theorem.
But in the Natural Number game, where I had my hypothesis y <= d and my goal y <= d+1, there was no way that I was aware of to introduce the result d <= d+1, even though I had access to a theorem proving that specific fact. The solution turned out to be to say "apply le_trans" [to the goal y <= d+1], which gave me the intermediate goal y <= ?succ.inr.h.y . Hovering that upper bound then says "[This] Parses a synthetic hole [...] This syntax is used to construct named metavariables."
Then, guessing something that might work but that the game certainly doesn't teach you to do, I closed that goal by calling "exact" on my hypothesis that said y <= d.
This works† and unifies the value d with the named metavariable ?succ.inr.h.y . But I would not consider it a triumph of user experience.
incredible.pm is also better in that it provides a playground where you can set up your own proofs of arbitrary theorems.
† Well, the call to exact works. The call to apply le_trans split my goal "y <= d+1" into three goals, which were "y <= ?succ.inr.h.y , ?succ.inr.h.y <= d+1, and, for no reason I can imagine, ℕ. However, proving the first two goals completed the overall theorem, so I still don't know what it meant to have a third goal of "ℕ".
I agree that incredible.pm is much better as a game; the NNG feels more like "as thin a veneer over Lean as they could get away with". Also, I was much less frustrated with the Lean 4 NNG because I'd already played "guess the verb" with the Lean 3 version, and I consulted the Lean docs at times; it's definitely not self-contained the way incredible.pm is.
(that said, I liked NNG better because (a) the sequence felt more like actual theory* building than figuring a few cool puzzles, (b) I much prefer the textual input —even with the "guess the verb" problem— to clicking and dragging wires and blocks, and (c) I feel like I've learned something about how to use Lean, while it seems unlikely I'd be able to transfer much from the UX of incredible.pm — maybe if I'd tried 'modding' it I'd feel differently?)
Maybe a fair way to put it is that the NNG is like ice hockey: for it to be fun at all you must first enjoy skating?
* the old, Lean 3, NNG had as its crux "trichotomy for ℕ"; that was very satisfying to finally prove!
> (a) the sequence felt more like actual theory* building than figuring a few cool puzzles
There is some of this in incredible.pm, and there's some of it in NNG. I made very little use of previous results in either one, except for a few levels of NNG that shame you for not generating simple proofs from immediately previous results.
incredible.pm's "gameplay" element where you're challenged to prove the theorem in as few statements (blocks) as possible works against the idea of developing a bank of theorems and then applying those theorems to prove other theorems. I'm not so fond of it.
> (b) I much prefer the textual input —even with the "guess the verb" problem— to clicking and dragging wires and blocks
That's fair. The bigger issue I have is that in incredible.pm you're free to make statements if you think those statements will be useful to you, while NNG is very strict about making you work with only the statements you're given.
In fact, there is one level in incredible.pm where I solved it in what was listed as the minimum number of blocks, but one of those blocks was a label. The label block is not doing any logical work, but sure enough, if I deleted the label block, incredible.pm was unable to unify the output that I had routed into the label block with the input that I had routed the label block into. So it would appear that at least one of the levels in incredible.pm specifically expects you to introduce your own statement with your own phrasing as an aid.
> (c) I feel like I've learned something about how to use Lean, while it seems unlikely I'd be able to transfer much from the UX of incredible.pm
I should be fair to NNG: I had extreme difficulty using existential statements correctly in incredible.pm, and more moderate difficulty managing to correctly use universal generalization. I think solving those levels gave me at least a decent mental model of how the theorem prover was handling quantifiers internally, and that should have transferred to a textual interface -- although it hasn't really stuck in my mind.
> the old, Lean 3, NNG had as its crux "trichotomy for ℕ"; that was very satisfying to finally prove!
That's still present in the current NNG. It is the proof I spent so much time complaining about above, the final level of Inequality World. (Or rather, that level wants you to prove that any two natural numbers are comparable, but you must use the trichotomy in order to do that, and you can't use what you haven't proved.)
--------
I think NNG would benefit a lot from including more difficult proofs. (And from letting you introduce your own intermediate goals!) I was proud when I finished the proof that ∀x.(r(x)→⊥)→r(f(x)) ⟹ ∃x.r(x)∧r(f(f(x))) . I had to think about what the theorem was saying and write down a plan of attack. NNG doesn't really have anything like that.
--------
Something I really did like in NNG was the remarks about (and eventual proof of) injectivity of the successor function. It's very interesting to me that the proof is based on, as NNG describes it, "the mathematically pathological pred[ecessor] function" - but only on cases where the pathology doesn't exist. (The proof involved introducing the function, making it inaccessible to the player, and instead giving the player the theorem "pred succ n = n", which is true without any exceptions.)
"pred succ n = n" reminds me a lot of def'ns of the form "(left p, right p) = p"; I'll have to think about that a bit. Injectivity of succ is, I guess, what distinguishes ℕ from similar constructions with different characteristic? (did I just think that, or am I parroting NNG?)
> ∀x.(r(x)→⊥)→r(f(x)) ⟹ ∃x.r(x)∧r(f(f(x)))
I think I gave up on incredible.pm too early (although I did skip ahead for SKI) ... I'll have to go back and try that. It seems to have a bit of the flavour of "all people who claim to be Sir Anthony Charles Lynton Blair KG are liars"
I've been thinking more about succ_inj and I keep thinking Peano was right (injectivity of the successor function must be an axiom) and the NNG is wrong (it's not a theorem).
NNG gives you the pred_succ theorem, and calls it a theorem, but I don't see how it's supposed to be proved. Suppose the successor to 9 were 3. What's stopping that from being the case?
I don't see that pred_succ ("pred succ n = n" for all n) is a lemma from which succ_inj can be proved - it looks to me like pred_succ is logically equivalent to succ_inj. Each is true if and only if the other is.
Here the problem is not so much that the pred function is mathematically pathological as that the axioms, without the axiom that the successor function is injective, do not allow us to define a predecessor function at all. The guarantee that when, you call succ on nine, you don't get a number that is also the successor of some other number -- which is necessary in order for pred_succ to be a valid theorem -- is precisely the statement that succ is injective.
> Does it also prevent a forward fork, to two separate tails?
This is prevented by saying that the successor function is a function. If a = b, then S(a) necessarily equals S(b). (The other half of axiom 7, the statement that when S(a) = S(b) then a = b, is the definition of an injective function. It's what prevents us from saying that the successor to 9 is 3.)
There is a fun image of dominos on the wikipedia page for the Peano axioms that explains how the structure of the natural numbers is constrained by the axioms.
A backwards loop from a number in the chain of succession from zero to an earlier number in the same chain can't happen because the successor function is injective.
A backwards fork (two chains meeting) can't happen for the same reason.
A forwards fork would be invisible to us as long as our only available tool is the successor function, which will always choose the same branch of the fork. This essentially means that forwards forks don't exist. There could be a larger structure in which it is true that e.g. the "9" node has one outgoing edge pointing to "10" and another one pointing to "green", but only one of those edges can be the edge picked out by the successor function, so our structure would only include one of the "10" or "green" nodes.
A loop parallel to the chain of succession from zero [imagine the normal chain "0, 1, 2, ..." alongside the three special elements 甲 乙 丙 arranged in a three-element circle] is ruled out by axiom 9, which says that any set that contains the chain of succession from zero contains all the natural numbers.
thinking out loud...
we are free to define a predecessor function by saying it is the inverse of the successor function. That definition would immediately prove the pred_succ theorem, as long as the successor function is invertible. Half the definition of being invertible is being injective, so this doesn't let us prove succ_inj in a non-circular way.
I don't know how else we would attempt to define the predecessor function, given the algebraic structure we're working with where all values take the form "0" or "succ n".
FWIW I just plug'n'chugged le_total without needing le_trans:
induction y with d hd
right
apply zero_le
cases hd with hdl hdr
left
cases hdl with e he
use succ e
rw [add_succ,he]
rfl
cases hdr with w hw
cases w with z nz
left
use 1
rw [hw]
tauto
right
rw [hw,add_succ,← succ_add]
use z
rfl
My description: Use code to direct wheeled, hover and flying bots to construct, combat and explore.
Description: Colobot (Colonize with Bots) is an educational, post apocalyptic real-time strategy video game featuring 3D graphics, created by Swiss developer Epsitec SA. The objective of the game is to find a planet for colonization by the human race by establishing a basic infrastructure on the surface and eliminating any alien life forms endangering the expedition. The game takes place on the Earth, Moon, and seven fictional planets. The main feature of the game, which makes it educational, is the possibility for players to program their robots using a programming language similar to C++ or Java.
Shapez.io is a great introduction to factory building games. It’s basic and visual enough to be immediately understandable but there’s a lot of room for advanced builds. It is getting a sequel soon, too.
Humbly suggesting “Automation” (https://en.m.wikipedia.org/wiki/Automation_(video_game)) for the cars category, because not only is the engineering side of things relatively in depth, you can export your designs and drive them in another game which is heavy on physics simulation, BeamNG.
There seems to be a fair bit of overlap with "base-building games" (a genre I'm fond of), including base-building games which I wouldn't necessarily describe as engineering games but just more generally management/simulation/strategy games (e.g. Evil Genius, Prison Architect, etc.) - Rimworld is on the list but feels a lot less engineering-oriented than say, Factorio, but on the other hand, (Open)RCT2 is missing which is surprising.
Basebuilders seem to divide into two rough categories: ones where things you build appear immediately (e.g. RCT2), and ones where minions have to go and install what buildings you command to be installed (e.g. Evil Genius, Factorio's robots).
Recommendations for interesting basebuilders are always of interest.
While we're on the subject: games with level editors (particularly those with some kind of scripting system) are kind of interesting as even if the gameplay isn't "engineering", you can get sucked into level design. DROD comes to mind. A list of games with level editors would also be interesting.
Not sure if its exactly relevant, but I would also add From the Depths as well.
It has a very steep learning cliff, but once you learn it you can build all kinds of war machines, from ships to robot walkers and spacecraft. And you create the individual systems which your vehicles use as well, such as steam engines, weapon systems, AI, etc.
Hey folks, this blew up way more than I expected :) Glad so many are interested.
I've merged all the PRs on Github and addressed about half the comments here on HN. I'll go through the rest ASAP. Thanks so much for all the contributions!
I feel like this extends to other genres but in a more abstract way. I have spent a long time engineering a build order in an rts or a load out in an MMO (I'm thinking EVE Online as an example)
Either way, thank you for putting this list together
Oxygen not included is very cool by actually requiring logic gates to do anything sophisticated and also teaching a lot of scientific concepts
The systems you can design in ONI can be crazy complicated and it is just a joy when it works. I derive a lot of satisfaction from just optimising systems in that game even though it is not really required difficulty-wise to do optimisation
Depends how realistic you're looking for, but The Sims 4 has a pretty comprehensive home-building aspect. You can also pick up the original The Sims or The Sims 2 for extremely cheap at thrift shops (since the series is so popular).
My light bulb moment was when I looked at the Apollo 13 orbital paths and mentally considered a few alternatives they could have done too.
https://store.steampowered.com/app/220200/Kerbal_Space_Progr...