My issue with them is that they get close enough to actual programming that I invariably quit, and go actually work on a hobby programming project, rather then play. As a result, I generally buy the game, play the first few levels, and then go make some commits on a programming puzzle that has an actual end-result that I benefit from.
I really wish the games used an actual language or assembly opcode set. If I could play TIS-100 and practice ARM or AVR assembly, that would be amazing.
I have the same problem. But I did just finish Exapunks. I think it was because the atmosphere of the game was very enjoyable, and the puzzles were a lot easier than usual. So it was easier to play a few levels as a break from real programming.
I also really love Zachtronic's earliest games. IIRC there's one about designing ICs at the silicon level, and one about reverse engineering hardware.
> I really wish the games used an actual language or assembly opcode set. If I could play TIS-100 and practice ARM or AVR assembly, that would be amazing.
Yeah. A lot of Zachtronic's games and other programming/hacking type games really leave me with a similar hunger for something more realistic. So I ended up making a prototype of such an idea where you can find and exploit a bug in an emulated ARM core to unlock a door:
> Of course Zachtronics is also indirectly responsible for Minecraft, so there's that too :P
For those who don't know the story, Zachtronics had this game called Infiniminer[0], from which Notch apparently took the idea for block-based game[1]. From the words of Notch himself[2]:
"But then I found Infiniminer. My god, I realized that that was the game I wanted to do. I played it in multiplayer for a while and had a blast, but found it flawed. Building was fun, but there wasn’t enough variation, and the big red/blue blocks were pretty horrible. I thought a fantasy game in that style would work really really well, so I tried to implement a simple first person engine in that style(...)".
Do you post updates on your work on this game at all?
I would love to purchase a game that taught different hacking challenges using true to life code/exploits.
You just articulated what has been bothering me about these games! I couldn't put a finger on it. I tried them out, and found them to be incredibly well made, and yet couldn't get myself to play them. I felt like I was seriously wasting time that I could spend doing actual programming, so I stopped. I think these games would do really well targeting an audience that is new to programming.
Life is too short to feel like you always need to be productive. Believe me, I know the feeling and I find it frustrating because it impedes my ability to relax.
Time spent enjoying yourself and learning things (even if they aren't directly applicable to work) is not time wasted. Improving your problem solving skills is always good and it often feels good, as long as you keep the level of time commitment within a healthy range.
The way I read grandparent is that the game feels so much like real work that you might as well get something out of it. I have the same problem with a lot of puzzle games: I already solve puzzles all day every day, might as well go work on those.
I have the opposite feeling - solving "puzzles" for real-life work is tedious and boring (and the end result is just money), while Zachtronics games let me exercise the same mental muscles with much less frustration.
EDIT: Urm, sorry. Zachtronics games let me actually exercise my brain, just like side projects. Real on-the-job programming these days is mostly gluing, which has nothing to do with technology, and is essentially navigating bureaucracy created by other people. You have state A, you know state B you want to be in, you have to discover the appropriate forms to fill in and stamps to collect on the way, and often perform kafkaesque dance around public keys and OAuth flows and related concepts. It's getting about as fun as tax forms.
I'm sorry, I simply cannot buy this idea that any kind of coding can't be made out to be fascinating.
I was asked today what about working with websites I found so fulfilling. The reason boils down to the fact that, more than any other domain out there, I feel like I'm working directly with the future. I'm working directly at the intersection of technology and business, driving real value for real people. Anybody who is making a website for dev money is doing this. It's just way too expensive to waste money on something that's not.
I feel like if you consider your job as 'just gluing', you're missing out on something amazing.
Friday we were having a team discussion about data modeling and how we wanted to structure a particular concept. When does it become worthwhile to introduce another database to accommodate a new data flow? What precisely is the criteria you use for determining when to denormalize? Our Postgres database worked just fine with little consideration towards perf, until we needed to use analytics. Now all of a sudden all those joins matters.
How do you work effectively with designers to produce a great-looking, functional website at the speed that a media company wants to work at? The whole team has had to really level up their CSS knowledge and code organization because things change really really fast. Layout goes from being a chore to a matter of fair urgency that you get right the first time and fast.
Say you don't work for a fast-paced media company. Great, now you have tons of spare cycles to devote towards maintainability and code quality. Just how far can you golf your job down to? At my last job I was touching a code editor twice a week.
I refuse to buy into the mentality that says that any programming job can be meaningless. There's always something neat you can be doing there.
I agree that anything can be made fun if you try hard enough. It's a kind of mental hack. Some people are better at it than others.
I'm very happy that you feel passionate about your work. I envy that. This comment is not an attempt at making you less passionate; I'm trying to point out differences in perspective.
One phenomenon I observed is that people who just learned programming are fascinated by everything. People on their first or second job. People just learning their first or second programming language. They're so full of enthusiasm. I envy them. For me, that moment was many years ago, way before I was able to join the job market. Because of that, I sometimes think that there's a disadvantage to learning to program before adulthood - your first jobs won't be as exciting. You've already seen 90% of the problems you're about to face, and your attention is thus focused not on the technical aspects, but on the fact that you have this problem in the first place, likely for no good reason.
> The reason boils down to the fact that, more than any other domain out there, I feel like I'm working directly with the future. I'm working directly at the intersection of technology and business, driving real value for real people.
Yeah, for me - and many others - that "future" is a disastrous dystopia, a perversion of what computing could be, a land of corporate riches, total surveillance and great waste of resources, instead of the promised efficiency and empowerment of individuals. The web of today - from the tech stack to dev communities to popular business models - is a tragic reminder of how "worse is better" can be taken to an extreme, resulting in all the compute being mostly wasted on software bloat and glitter. Consider e.g. Moore's law, and then consider that the software of today doesn't usually offer new user-facing features that are actually useful (i.e. not glitter) over the software from 15 years ago. Sure, most of it is the same old thing but networked!, but that's arguably more of a business model change than something meaningful to end users. And the web is unfortunately driving all that bloat, glitter and user-hostile business practices.
Yes, I very much don't like the cloud.
> (...) driving real value for real people. Anybody who is making a website for dev money is doing this.
I question the "real value for real people" part of this. In fact, I believe it would be better for everyone if a lot of those web jobs were not done at all. After all, the dominant model of the web is to waste people's time (result of optimization for engagement) while making money off advertising (i.e. wasting more time), plus building surveillance infrastructure to make extra buck off data collection. I do not subscribe to the view that just because some money changes hands, it's automatically a good thing.
But then, maybe I'm just burned out. I've noticed I've become increasingly depressed about this industry, and the typical jobs that are available.
I switched to being a data engineer and have found it remarkably refreshing. Sure, it’s “just” a combination of DBA, ETL engineer, devops, and glue coding, but the data world is 15-20 years behind programming practices and it’s fun to see unit testing and version control being applied to data, as well as the rusty tooling getting some new love. Especially with dbt, a data transform tool that’s fun to use. I generally agree with your downbeat view on things, but data engineering has its own problems that have given me a renewed interest in tech. For now!
I can't even fathom a dystopic view at this point. All of my senses indicate that both the near and far term future are going to be amazing, and just get better all the time. I'm not a big fan of the current Javascript meta, but metas come and go. The current job market does depress me a bit, labor liquidity seems to be veering sharply downwards at the moment.
The only thing that worries me right now is World War 3. And losing the whales. That's really sad.
Every piece of computing hardware you own has been designed so that it is able to spy on you. If that, combined with the general government trends going on right now doesn't sound dystopic to you then nothing will.
I guess I've studied enough history to know what real dystopias look like and how they come about to realize that this just isn't it. Society is inherently adversarial, but the amount of actual violence is going down.
Violence doesn't just disappear, it just morphs into another form. As the internet has slowly spread, it's allowing a lot of people's inner turmoil to manifest, this is the cause of the current political environment. Since this turmoil is chaotic and undirected, it's being harnessed by people who do have agency to serve political ends.
It's worrying until you realize that this is how politics has always been done. Democracies have always been mob rule with an aristocratic backbone to fall back on when things get too unruly.
I'll take the current political climate over that which generated the French Revolution any day of the week.
Spy networks also have a long long history. They used to be the tools of autocrats to enforce social order, and still are in political entities like ISIL. I'll take my computers spying on me for economic ends over people spying on me to actually literally control my behavior any day of the week and Sunday too.
> I'll take the current political climate over that which generated the French Revolution any day of the week.
The question is, are those two climates really that different?
> people spying on me to actually literally control my behavior
You've essentially defined advertising industry. It's a very insidious form of control, but just because it doesn't involve threats of violence, doesn't mean it isn't there and isn't working.
What made the French Revolution and today different is the sheer murderousness of the population and willingness to get whipped up into big mobs that then take people from their homes, kill them, put their heads up on pikes. This became normal. It got so bad that someone thought the guillotine was a humane invention.
You just can't conflate today's RedPillers with that.
If you look at the Civil War, this was a conflict that rent families apart. Brothers faced down brothers across a battlefield. Fathers fought sons. The Civil War was the culmination of a political quarrel that steadily rose in tenor since the inception of the nation. It was a hundred years in the making, enough time for the sides involved to get real passionate about it.
The essence of fighting and violence are still there, the same deep inner chaos is driving these conflicts.
But what's missing is the ridiculous amount of zeal that both sides possessed. If you have that kind of zeal, these days the only way to fulfill it is to go join ISIL. And people do that. But most people aren't getting that bad. They find an outlet. Trump is that outlet. Brexit is that outlet. Before it was mob violence.
It's the same with advertising. The continuation and slow civilization of the new domain of the marketing of human attention. However bad it is now, it was worse before. Before machines did the dirty work, it was other humans acting in unbelievably shady manners to rip people off for as much as they could. And it was considered normal.
Combine that with the fact that web chumps think they're 'inventing' when they're solving problems that were solved decades ago, only worse, and most of them don't have the historical background, education, or even interest to know what mistakes they're making. They think its "leveling up" to solve an already solved problem, but in web format, while wasting everyone's time with ads, tracking, gimmicks, for money.
You are not burnt out, or wrong. The web used to be better; computing used to be better. Windows is now a service, and Linux still can't drive graphics card without nonfree drivers. We failed, but I think there might be a chance to fix things.
We need to out together a cohesive document that explains why modern computing needs a serious overhaul, and a plan to get there. The computer should be fast; UI should be appealing, but minimal. It should be understandable and open down to RTL of the processor. The core should be aggressively minimal, and fully understandable. Networks with no central auth should be at least an option (preferably a local mesh). It should be cheap.
I'm thinking like a modern DOS, but for RISCV, fully implemented on an FPGA (goal of course to move to custom silicon for performance improvements later).
> web chumps think they're 'inventing' when they're solving problems that were solved decades ago, only worse, and most of them don't have the historical background, education, or even interest to know what mistakes they're making.
Your tone is very out of place in this thread. If you don't know that something was solved before and you solve it yourself, it is a great feeling and very rewarding.
I love solving crossword puzzles, riddles and similar games. Yes, even though someone else even _designed_ them. We were talking about gaming.
> We need to out together a cohesive document that explains why modern computing needs a serious overhaul, and a plan to get there. The computer should be fast; UI should be appealing, but minimal. It should be understandable and open down to RTL of the processor. The core should be aggressively minimal, and fully understandable. Networks with no central auth should be at least an option (preferably a local mesh). It should be cheap.
Agree on all those goals. Over the years, I've seen some essays and comments scattered all over the web containing those ideas; it would be great to collate all of those thoughts somewhere.
We could open a repo and start writing things down?
I can handle the FPGA side. Start with essentially DOS for RISCV. Use qemu for kernel development, and Verilator as the simulator for RTL. Develop a simple graphics unit that is "pluggable" so you can replace it with a more advanced one later (or if the user requires it). Same for networking.
We'll target one of the ICE40 fpgas with an open toolchain. Not that they're great FPGAs, but the open toolchain is what's important.
In the range of things I can think of that can make the world of computing better, reinventing the hardware / OS combo is so far out in the sticks that you're going to be fighting lions and tigers for your daily sandwich. Is x64 / Linux really that bad? And do none of the existing alternative OSes offer what you need?
My side projects generally involve creating my own little Garden of Eden on top of as mainstream a system as the world can muster, which appears at the moment to be Ruby driven by a shell, not sure yet if it's appropriate to try something other than bash. I never even get motivated to drop down to making C extensions, much less reinvent hardware.
If I'm going to reinvent anything at this point it will be the shell, which to me is the most powerful UI abstraction tool available atm. My main gripe at the moment is $PATH. If I want my own tool to be called sort, well the answer is don't do that.
Reinvention is only relevant when you can actually add capabilities that didn't exist before. Then you have to communicate those new capabilities with a killer app. Even my little example, nobody's going to care that I fixed shell tool namespacing if I can't articulate why I needed it with a better system for personal computing.
And if I go and do all that work to make a new shell, it has to solve all the same problems that the status quo evolved to solve. Now that I'm thinking about it, the answer to my dilemma is to invert the shell, make a very basic CLI that delegates to the shell when you really need it, but offers an extensible garden that is free of the shell otherwise. Build on Readline, not bash. I never really needed bash anyway.
I mean, don't get me wrong, I'd be very very happy to implement my side project on the hardware and OS that adheres to your proposed doctrine. Openness is great. But the seething shifting mass of backwards compatibility isn't just going to go away after you reinvent it all. You're just resetting the clock.
Resetting the clock might be worth it at this point, if we can jettison accumulated cruft and simplify, simplify, simplify.
My problem with things like Haiku and Reactos is that they're trying to emulate systems that have already existed - Beos and Windows, respectively. All I want is a modern DOS, say with a faster/more capable graphics layer.
The closest I've found is Wirth's Project Oberon, but the choice of language meant that there's very little that can be pulled from existing repositories and used directly - not too many people are programming in Oberon. C is a requirement, but you get that with the RISCV tooling.
Yeah, that's exaggerated. What author probably meant, that proprietary drivers give some features, which won't work with open source drivers. For example, better results in 3D acceleration. In my case, I was unable to configure properly multi-display with 4 screens and HDMI audio without nvidia proprietary drivers.
If you really feel like your software job is just routine sticking bits together, maybe start to look for another job. The one thing I like about my dev job is it's always something new and interesting, and the stuff I am building is overall not interesting at all, but I enjoy what I do within it. After 15+ years of front end development I still get a kick out of plugging together features and seeing the results.
I hate routine and repetitive tasks and I would quit if I was bored every day (there are certainly some boring days).
I read somewhere once that new developers coming into the industry just for the money are in for a shock. Software is boring to a lot of people, you have to be the right kind of person to actually enjoy the tedium of reloading, recompiling, debugging, just for that one short lived smirk to yourself when it all works and you check it in.
Real programming jobs exist and pay a lot. You have to be extremely good though - more like a mathematician or a CS researcher. Some examples: C++ Latency programmer for HFT funds, Staff Research Engineer at Google, AI Research at DeepMind/OpenAI
Companies with the interesting jobs are not as profitable as those with glue-things-together jobs, and aren't hiring. In fact, I hear they're looking to get out of that business entirely. It'll soon be glue, all the way down, with university partnerships so kids can pay tuition to invent new stuff before they graduate to glue land.
Embedded programming usually don't have the same byrocracy. Instead of OAuth flows there are flawed hardware specs and long lists of security requirements, though.
> Instead of OAuth flows there are flawed hardware specs
That sounds... a lot like a Zachtronics game. How feasible do you think it is for a gluing web developer with a full-time job already to move into embedded?
True, and I do usually go for side projects instead of playing. There's a difference though, that I can't articulate, that makes Zachtronics games alluring, particularly when I get stuck on the side project and lose steam.
Sure to each its own, not everyone of us has fun the same way.
My side projects on github are a joke vs actual FOSS contributors, because I very seldom touch them for any meaningful time, given there is no pressure to finish anything.
I like shmups/FPS games, but the enjoyment I get out of them is very different then how I enjoy programming.
Zachtronics games feel, at least to me, just like programming, only without the useful end-result. If I'm going to play a videogame to relax, I don't want to feel like I'm working without actually doing anything.
Maybe, if I didn't have a bajillion hobby programming projects that all have lots of things that I can tinker with, I'd have more interest.
Not the gp but that's exactly how I feel about these kinds of games. They're fun, but they're too close to what I actually do for a living and I might as well just go do some work. It means they're not relaxing.
Along those lines, as someone who just programs as a hobby and not a career, these games are just as much fun as any side project. They're a puzzle that uses similar logic, but I never feel like it's wasted time, since a lot of programming hobbies are "wasted time" in that they are fun for me to work on and sometimes produce something tangible, but it's mostly just about messing around with something new.
That doesn't bother me because actual opcodes are the least transferrable skill of the parts of programming they teach.
Yeah, I'm not going to be able to go from the games straight into x86 programming but when I come across the idea of op-codes and registers again I'll be in more familiar territory.
What they do teach very well is the Test / Execute / Debug loop and problem solving.
I believe these sort of games are made by people and for people that dont want or cannot do a thing for real but would love to try it out with a pause and/or fast forward button. Look at all the simulator games coming out from germany and other places. There are skyscraper builder simulator, busdriver, lots of farming, fire fighter and so on. Not to mention the flight simulator genre that is even used by pilots to practice. Coding simulators are more aimed at teaching you concepts and get you started thinking the right way.
This is generally my opinion about all gaming. I'd rather do anything with real world results than spend time and money on video games. As a kid I would spend a whole summer on the PC playing SimCity, Doom (I am old), and later Rainbow Six (I loved that game), but eventually I realized how empty I felt after playing those games to death.
Oh, and Tetris dreams, I don't miss them one bit. I still get the same effect if I work on a programming problem relentlessly into the night, dreaming in code is torment for me.
> ...spend a whole summer on the PC playing SimCity, Doom (I am old), and later Rainbow Six (I loved that game)...
You're really not THAT old :)
On your main point: I disagree. Even if they don't have "real world results", that doesn't mean that they're not valuable. They have value as cultural products much like books and movies do, but I also think there's an inherent value in "play" itself. It gives us joy, it teaches us how learn new skills, it gives as a practice arena for social interaction, and it exercises the parts our brains dealing complex thinking, spacial reasoning and reaction. It's also just plain fun, and that's not nothing.
You could say playing games "has no value" in the sense that reading a novel "has no value": doing this activity doesn't contribute anything to the world. It's just good for you.
I feel the same way lately. Occasionally I'll fire up a game, play for a while, get bored, and go back to programming. Then I get bored programming because outside of my work, I can't think of what to make... besides games. Or things tangentially related to games, like music synthesizers or things that draw cool effects on the screen.
I highly recommend https://microcorruption.com/ - it was a game by (the now defunct) Matasano to do hiring for exploit researchers, and is a lot of fun. You're given the disassembly for an ARM e-lock and told to craft an exploit to gain access.
TIS-100 and Shenzen-io are actually a good introduction to the concepts behind assembly, even if they're on a toy platform.
I had done a lot of python and ruby programming, but I didn't know what a register was or an op code, etc, until I played around with those games. It also was the first time I understood what a pointer is and "low level" programming in general, and gave me enough of a knowledge base to get a grasp on Rust and start learning it.
Well, I prefer games that abstract the programming behind a nice visual. SpaceChem is still a favorite and while I haven't actually played it, Magnum Opus is my next in the list.
I was going to ask this (whether it involves actual programming).
Maybe it would be useful to teach more inaccessible parts of actual programming. Assembly is a good example of something useful which I would assume a lower % of programmers have time to practise.
Another example is reading source code. Again, a smaller % of progammers do this as a hobby.
There was an example of the algorithm that turns the screen red in Doom. If I recall, this led to an interesting HN rabbit hole.
I never thought I'd see a mention of Colobot on HN - but yes, you could play the entire game like a normal action-adventure 3D game, or program robots to do everything for you and just sit in one place the entire game. It was amazing.
Of the bunch, my favorite so far has been Infinifactory, I think because it's metaphorical floor for solutions is usually lower, and the solutions are visually pleasing in a way that doesn't require you to understand code.
I never knew about ZachTronics. I was excited to buy the game but then I saw your comment, which was a doubt I had in mind. Now I don't really want to buy the game. Thanks!
this, basically. I've been programming since I was 8 and professionally for decades. Shenzhen I/O was very cute at first and then just became an exercise that closely resembled work.
I beat this last night. It's easier than TIS-100 (no 9 instruction limits!) and Shenzhen I/O, following the general polishing trend of Zachtronics games becoming more beatable. SpaceChem (their first puzzle game) was stupidly difficult [1] [2].
My personal ranking: Opus Magnum > Shenzhen I/O > Exapunks > Infinifactory > TIS-100 > Spacechem.
I think the dev's goal has been towards balancing the difficulty not so much towards making difficult puzzles that are rewarding to beat, but towards making reasonably challenging puzzles that become rewarding to revisit and optimize as you get better at the game. In a way it sort of mirrors when you've just started learning programming, when every task takes large amounts of thinking "how am I even going to solve this?", implementing a solution that is sure to not be very optimal or even well written, vs. being an experience programming, when "how do I solve this?" is only the first step towards "how do I make my solution _better_?".
I hope we keep getting more Zachtronics games for a while; there really aren't too many games out there that are comparable to them.
> I think the dev's goal has been towards balancing the difficulty not so much towards making difficult puzzles that are rewarding to beat, but towards making reasonably challenging puzzles that become rewarding to revisit and optimize as you get better at the game
That's been my impression as well. TIS-100 is still has a high replay value, because optimize optimize optimize!
Not a single game I know drives home the concept of "technical debt" as much as Factorio does. Every time I want to automate manufacturing of a new thing, I end up wondering whether I should do a quick&dirty hack on existing pipelines, refactor half of my base, or just build a new one elsewhere...
(And you can't just always keep choosing "build a new one elsewhere", because this increases a literal attack surface and invites literal bugs.)
Never though about it that way, it really seems that Factorio is a very good representation of actual software development without actually containing coding (except for the logic you can do through the cables if I remember).
I've found all the games to have high replay value for the same reason. It doesn't really matter how hard the game is because there are plenty of challenges beyond just passing the level.
What does "stupidly difficult" even mean? Does it just mean you did not manage to solve all the puzzles (yet)?
Honestly, I find that Spacechem is one of the very best game ever. I am really happy that Zachtrorics continues trying making better similar games, as it generally does make great games (I immediately purchase all their games - I only missed Opus Magnum as I was busy becoming a father when it launched), but so far, I was not able to feel the joy I felt when my Spacechem reactor finally worked, watching all the chucks fitting together (I know, I really need to try Opus Magnum which is more similar to Spacechem than other games in the serie - but my impression is that the UI looks much more busy, and simplicity is one of Spacechem strong point, which makes it enjoyable on a tablet for example). I'll admit that Spacechem had the advantage to be the first of this kind I tried, so it could be one of the reasons I loved it so much.
Also I am a bit sad that making games easier to beat is even a goal at all - it's great to try to make them easier to play / to start for non-programmers and beginners. But I find that having a few levels that are really challenging makes a game strictly better. I know that many people think "I paid for the whole game, I need to be able to finish it all reasonably quickly", but personally, I think it could just mean that the game was simply not challenging enough.
For what it is worth, I did beat Spacechem (whatever it means, I have the "beat the game" achievement on Steam), but I am stuck on TIS-100 and Shenzhen I/O (I spent much less time on this one though). Exapunks does feel easier than both for now (the programming language is slightly "higher level", so maybe it feels more familiar).
I like Nethack :) Btw, that reminds me of Dwarf Fortress and the whole "losing is fun" idea, of which I am a great fan as well, and do not find anything stupid about it ;)
Sorry, my bad, I did not read this article. Zach himself is calling the game "stupidly difficult". I still strongly disagree with the term though :) Plus seeing the graph, I find that it does not seem to be the case - I mean most levels in the main campaign seem to be over 80% success rate (hypothesis: "defense" levels are not available in the Android version, which could be a reason why they seem to have a lower success rate)
80% completion rate with 20 levels works out as a ~1% chance of ever finishing the game (which i'd say counts as fairly hard). Looking at the graph, the pass rate seems to be higher, but there are also a lot more than 20 (non-optional) levels, so I would guesstimate the finish rate to be less than 1% (90% per level for 40 levels is also around 1% to finish the game, for example).
https://steamcommunity.com/stats/SpaceChem/achievements according to steam achievement "beat the game", it's actually 4%. I do agree that it makes it a difficult game to finish. Then again, my point is that I think it's fine not to be able to finish a game, especially a puzzle game which have no story. You just have to spend more time on the puzzle you are stuck on, so in a sense, you get more game time for your money :)
SpaceChem does have a story though. I gave up on the game after it got too difficult, and at that time I was disappointed that I wouldn't find out what happens in the rest of the story.
Opus Magnum had some puzzles that were rather tedious, I think maybe more than average. There's always a point in these harder puzzles where you know what you need to do and then slogging through the execution is daunting on its own.
Interestingly, I liked the Spacechem the most (probably because the program is represented in the most visual form of all their games, and it has excellent music and it's very calming to watch a resulting solution), although I didn't finish the last optional puzzle and any of the expansions.
I would love to go back and finish those, but what holds me back is that I would have to replay the whole game. All the tricks I learned about how to play it I have already forgotten.
SpaceChem wasn’t their first, they had a few prior with long names, the only one of which I remember is Codex of Alchemical Engineering. There was a steam mecha one, and an IC design one.
KOHCTPYKTOP, Engineer Of The People was the "IC design one". It's an abstraction of NMOS semiconductor design, making it a difficult game to approach. Fun, though!
You are so right. These guys make the games I wish I could make if I were a game programmer/designer. Top notch. The other small game designer who I can recommend is this guy: http://www.crypticcomet.com .Too bad it seems he does not make games anymore.
From what I've heard on a thread discussing one of his games, it's the fact that his games are built with an old adobe tool (or something like this) and they can't be sold throught Steam. And apparentky selling directly from his site doesn't bring enough money anymore.
And he doesn't want to relearn a new dev environment, since (if I remember right) he's not a developper, rather a game designer.
>The year is 1997. You used to be a hacker, but now you have the phage. You made a deal: one hack, one dose. There’s nothing left to lose… except your life.
He'd made the classic mistake, the one he'd sworn he'd never make. He stole from his employers. He kept something for himself and tried to move it through a fence in Amsterdam. He still wasn't sure how he'd been discovered, not that it mattered now. He'd expected to die, then, but they only smiled. If course he was welcome, they told him, welcome to the money. And he was going to need it. Because -- still smiling -- they were going to make sure he never worked again.
They damaged his nervous system with a wartime Russian mycotoxin.
Strapped to a bed in a Memphis hotel, his talent burning or micron by micron, he hallucinated for thirty hours.
The damage was minute, subtle and utterly effective.
For Case, who'd loved for the bodiless exultation of cyberspace, it was the Fall. In the bars he'd frequented as a cowboy hotshot, the elite stance involved a certain relaxed contempt for the flesh. The body was meat. Case fell into a prison of his own flesh.
Early Gibson vs late Gibson begs the question -- What's more punk? Unfocused but incandescent adolescent rage or technically executed vicious critique?
I don't remember much rage or viciousness in Gibson, early or late - my overwhelming impression is of cool capers and if anything a general optimism about the future.
Ex-hacker is in desperate situation, agrees (reluctantly) to perform one more hack in exchange for getting out of said desperate situation, is the Neuromancer-ripped plot of many a bad hacker movie (Swordfish and Blackhat certainly qualify). Take away the tech and you have a pretty standard heist-film plot going back before Neuromancer.
1997, yo. Massive corporations rule everything, people are getting wet-wired into cyberspace, pollution and overpopulation and climate change have thrown everyone but the super-wealthy into a desperate struggle for survival... and Hanson's "MMMbop" is playing on the radio.
Mostly for practical reasons. I can't imagine how the UI would work on a phone -- either the text would be microscopic, or you'd have to scroll around constantly.
It's of course far easier to armchair design, but I could imagine it working well enough?
Each individual cell is ~12 lines of very short line lengths, yeah? You can easily fit a single cell on-screen with a keyboard while editing (or potentially while running), and then you could imagine a more abstract representation of a whole running system if you choose to zoom out while the system is running.
A few years ago I built a prototype of an iOS editor for Core War (https://en.wikipedia.org/wiki/Core_War), and it felt super-natural to have a custom keyboard whose keycaps were individual opcodes rather than ASCII characters.
I never noticed (I play on Linux). Maybe it's an issue on Mac only? Spacechem works great on my crapy and old android tablet, so it must not be that bad.
> We do all of our development in C# using a custom low-level “game engine”. At some point we need to do a writeup about it, it’s kind of interesting tech.
But I think they have at least one Unity game... or so I thought.
Would also love to read a detailed writeup about their custom engine.
Also found this quote[1] from an AmA on reddit:
> We've used C# since SpaceChem. I can't imagine using anything else, honestly. Infinifactory and TIS-100 use Unity, while everything else uses some kind of lightweight SDL-backed C# engine.
> SHENZHEN I/O and Opus Magnum are both using a very minimalist C# "engine" inspired by some of Casey Muratori's ideas on game engines and game programming. It uses DirectX or OpenGL for graphics, and SDL for everything else. It's basically just one giant Update() loop, and is the greatest game engine I've ever had the pleasure to work with. Despite this, I would not advise novice game programmers to do the same.
This looks like a lot of fun. I just started playing gladiabots (https://gladiabots.com/) which will probably scratch that itch for a while. Exapunks seems to have a bit more of a learning curve and story from what I can tell from the trailer.
That's certainly important to note. Though in this case the game is done already and basically "release" quality. I think they did the same thing for TIS-100 as well; Early Access for a bit even though the game is done and 99% bug-free.
They've been releasing games this way for a while. Early Access with most of the pieces in place, with some polish on graphics, balance, and music for a few months before it's all finalized. Shenzhen I/O and Opus Magnum were done that way for sure.
That’s one option, but another more fun option might be to get the game now and be active on the reddit or at least lurk there. This adds another layer of enjoyment as you get to participate in coming up with optimization tricks.
And that said, from experience with previous games in they have released what will happen is that they’ll only do the following things: reorder a small number of levels for balance, add a small number of quality of life features and then after release they tend to add another set of puzzles, where the first set would have already justified the asking price. It’s early access in name only imo.
You can often treat the T register as a general purpose register. One trick when it comes to loops is that TJMP is true if T holds any value other than 0.
I'm currently making a hacking puzzle game prototype where you need to manipulate bits of memory to trick CPU into doing the things you want. Having a single register makes it much easier to design puzzles and also solving them. It also makes the gameplay more straightforward.
You said general purpose, which X, Y, and SP most certainly are not. You can't do much math ops with X and Y; SP is even more restricted.
If we're being more generous then EXP clearly wins over the 6502 because it has two registers that can be used interchangeably. T's only failing is its propensity for being overwritten by TEST.
EXAs also have attached memory in the form of a file. Accessing that memory takes a "few" more cycles than it takes the 6502 to access the zero page. But it's there none the less.
> You said general purpose, which X, Y, and SP most certainly are not. You can't do much math ops with X and Y; SP is even more restricted.
In that sense I wouldn't say that the accumulator in 6502 is a general purpose register in the first place, since it's just as useless for addressing as the X and Y registers are for arithmetic and logic operations. Each register in the 6502 has a distinct (but often overlapping) set of available operations, and that you can do arithmetic with one of them doesn't mean that it's a general purpose register.
My issue with them is that they get close enough to actual programming that I invariably quit, and go actually work on a hobby programming project, rather then play. As a result, I generally buy the game, play the first few levels, and then go make some commits on a programming puzzle that has an actual end-result that I benefit from.
I really wish the games used an actual language or assembly opcode set. If I could play TIS-100 and practice ARM or AVR assembly, that would be amazing.