Hacker News new | ask | show | jobs
by santoshalper 483 days ago
What a thoughtful post. I think there is a narrative that localthunk is a "shitty programmer" (which he might very well be), but that by extension, it also means that he just got lucky and bumblefucked his way into massive success - almost as though he didn't know any better.

A post like this dispels that narrative - he clearly put a ton of thought into the design of that game and was incredibly intentional about where he wanted it to go.

4 comments

In what quarters is that narrative? Surely one only has to play Balatro for an hour or two to understand the incredible game design effort that underpins it all, which is brought so vibrantly to life by the music, art, animations, and all the rest of it.

I can't imagine someone appreciating all this and still managing to poo poo it over a few bugs or maybe some quibbles about it having been built in Lua.

People that mention this are usually referring to this chunk of the source code: https://www.reddit.com/r/programminghorror/s/KmEWRILR1q

My assumption is that a lot of the people that look at small chunks of code and judge someone’s programming ability are people who have only worked in corporate environments and have never had to build a large project on their own, and don’t have any understanding of the effort it takes to make a game like Balatro by yourself. Maybe that’s an unfair judgment. But so is calling LocalThunk a “shitty programmer” over some questionable if-else logic.

People love to dunk on hacky looking gamedev code. Some of it is pretty ugly, e.g, VVVVVV's famous gigantic switch statement, but if it works and makes a fun game, that's the actually important part.
It's verbose and could be simplified, but also looks like something you write once and never look at again. If it works it makes no sense to spend any more time on it.
Yeah, working on a game myself and ... sometimes you just gotta do stuff like that.

Working on a game solo requires juggling several wildly different disciplines at the same time. Sometimes you're in "game designer" mode, you need to fix a bug or add a feature, and you bonk in the caveman thing that obviously works.

Solo gamedev is basically the "startups should accumulate technical debt" meme on steroids. As long as you can understand the code, nobody cares about how it looks. Only how the game plays.

He clearly comes across as a conscious game designer as well. And programming doesn't need to be good on today's machines. Many of the indie successes are shit software, like Minecraft, Valheim, Cities Skylines, Project Zomboid, and I'm sure there's many others. Great product design and PR are infinitely more important than software quality.
I have never heard that assertion, I don’t know how anyone can play Balatro and not feel that it is a deeply intentional creation. I think localthunk would be the first to tell you they got lucky with how it found an audience outside of themselves, but everything in the game oozes polish and intention.
The assertions are more around code quality. Game design is wonderful.

Apparently there are places where the code is like a thousand lines of if card_name then effect.

For a project with lots of variation being maintained by a single person that’s totally fine.
Yep, there are days I yearn for just having a super long set of if statements, vs the over-engineered messes that I deal with on a daily basis.

So many codebases end up impenetrable in the pursuit of fancy design patterns...

I think that too fancy code is just as bad as the original if-else spaghetti, but then even worse, because the patterns are abstract now as well.
Bad code can have a really high cognitive load to maintain. Just to illustrate what bad means, take a look at this:

https://www.reddit.com/r/programminghorror/comments/1cb6rca/...

I can see that having even bits of modification impacts lots of lines, where if written just a bit more saner, it could impact just a few.

Of course everyone is absolutely free to do the things however they want on their project. It's just that bad code, and bad choices bite back sometimes really badly. Project Zomboid is built in LUA for example, and it shows, it's a horrorshow not just to play, but to develop it as well. Their programmers spend a lot of time with just refactoring things. Besides functionality, maintainability should be a huge focus in my experience, so that the devs don't hate life if they have to touch the code again.

The example you post is out of context and maybe a bit overly verbose but again it’s one guy maintaining it and is perfectly readable. Does anyone really struggle to understand that?

I’m back working on a twenty plus year old codebase (and game) that’s ~3 millions loc and would kill for something simple like that rather than some of the overabstracted crimes lurking within.

The problem is not with understanding, but with maintainability. If you need, for any reason, to touch that code again, instead of a few changes, you have to be consistently doing a lot of changes. This has a higher chance of manual errors. And it has nothing to do with other bad code, like the one that you encounter. Both can be bad code, and what you inherited sounds worse. I hate it when the badness is compounded with complexity. It feels pretentious to me.
Yeah, without context criticism of this code is silly.

What if this wasn't always how cards worked? What if the mapping was (at one point in development) not straightforward? Or localthunk had some ideas and wanted to leave the door open to a more complex mapping scheme?

Undertale's code base is apparently no better. For games I don't think code quality is nearly as paramount; there's not a whole lot of maintenance going on there, though this doesn't apply to live service games.
Even if the underlying code is "bad", who cares? There are far more important skills in indie game development then programming ability. I'd much rather play an interesting, well-designed game with a few bugs and messy code over a well-programmed but boring game.