So, the short of it is that this is a great insightful comment that I can back up with my own experience in making a game from scratch over the last 4+ years.
1,157 karma · joined April 17, 2022
I'm creating Metropolis 1998, a 2D city builder/simulation video game.
https://store.steampowered.com/app/2287430/Metropolis_1998/
So, the short of it is that this is a great insightful comment that I can back up with my own experience in making a game from scratch over the last 4+ years.
One of the largest speedups is from how much of the codebase I can keep in my head. Because I started from an empty C++ file, the engine reflects how I reason and organize concepts (lossless compression). Thus most of the codebase is in my brains RAM.
I don't see how LLM agents are going to improve my productivity in the long run. The less a person understands their code (organized logic), the more abstracted the conversation is going to become when directing an agent. The higher up the abstraction ladder you go, the less distinct your product becomes.
[1] And very, very rarely have I wished I had it for a moment. Not using git simplifies abstracted parts of development. No branches, no ballooning of conceptual tangents, etc. Focus on one thing at a time. Daily backups and a log of what I worked on for the day suffices should I need to revisit/remember earlier changes. I've never been in a situation where I change I made over a week ago interfered with todays work.
Edit: fun memory. I figured out how scamming works at some point. IIRC (and I may not) I set up a minigame in my studio, and contestants had to give me their furniture to participate in a game. Since furniture could stack weirdly, people made all sorts of crazy mazes that were actually quite difficult to navigate due to the fixed isometric perspective.
Each stage required handing over a more expensive item than the last. At some point someone handed over a super rare/expensive piece of furniture.
Not gonna erase that. ACTUALLY I think I figured out how to clone items due to a bug. Or mine infinite DBs. Used that as cover to get someone to give me their item. Was a long time ago.
Anyways, a user handed me their super rare item and I then gave them a stern warning on how this is a common scam and I just stole their item(s). Then I handed everything back over to them and they profusely thanked me. lol
Fun fact though:
> Between 1831 and 1834, Michael Faraday discovered the solid electrolytes silver sulfide and lead(II) fluoride, which laid the foundation for solid-state ionics. Through his research, Michael Faraday took note of these solid compounds transitioning from insulators to conductors after being heated. While this would take almost another century to be acknowledged by Michael O'Keeffe in 1976, this mixed ionic/electronic conductions became the first record of a solid-state battery
(emphasis mine)
I've used both in my pathing code and tested each in debug/release.
Even if the std:: implementation was as fast as possible, you're still adding bit manipulation on top of accessing the element, so it will be slower no matter what you do.
A good example of this is using std::vector<bool> vs. std::vector<uint8_t> in the debug build vs release build.
vector<bool> is much slower to access (it's a dynamic bitset). If you have a hot part of the code that frequently touches a vector<bool>, you'll see a multiple X slowdown in the debug build.
However, in the release build, there is no performance difference between the two (for me at least, I'm making a fairly complicated game). The cache misses bury it.
- Most of the locals on the beach will start clapping when the sun begins to set. Ipanema is a beautiful beach/area.
- Brazilians are curious and happy to chat with foreigners. I particularly enjoyed how slowly everyone walked, not in a rush to get to anyplace.
- If you're staying in hostels, it's really easy to fall into the trap of hanging around other foreigners who pretty much all speak English fluently (which is fun, but isn't the main purpose of traveling IMO). I learned a little Portuguese before traveling which helped break out of that. I also couch surfed (stayed in strangers homes), which was fun.
- I found the cuisine to be light, though I was on a budget. Pretty sure I lost weight and had to eat more frequently. I miss Acia bowls.
- Dont drink unfiltered tap water, and make sure the bottled water seals aren't broken. I got sick a couple times regardless.
- Carnaval and soccer (football) matches are wild. Tons of energetic people.
- I was never mugged, but met a lot of people who were, or knew someone who was (locals and foreigners). Maybe things have changed. Traveling alone at night is not a good idea.
So like (C++):
vector<uo_map<int, ObjStruct>>
Each vector element is a floor. You just need to move the sprite up in screen space to position it.Though I wish I went with a vector<vector<vector<ObjStruct>>> approach now a days <chunk_id>, <floor>, <object>
I'll be looking into porting during early access. I've heard the game runs on Linux with a compatibility layer though.
I do everything except the pixel art and buildings. It is a crazy amount of work!
Ive hired out help for the pixel art, and then I enhance everything with shaders (tech art).
If you're gonna make a game as an indie, you need to figure out ways to fill in your skill gaps. The competition is brutal. If you can't do it/dont have time to learn and do it, then the only other option is to hire out.
or
A lot of studios are formed from people (cofounders) who depart larger studios, so if you really want to get into the industry, you could start there and network.
Both adults owning a car will be dynamic/based on the city once there are more transportation options.
I'll also be adding options so the player can control how difficult traffic management is.
(If you're a local reading this and enjoy DnD w/ roleplay and acting, email's in my profile)
I started developing a city builder called Metropolis 1998 [1], but wanted to take the genre in new directions, building on top of what modern games have to offer:
- Watch what's happening inside buildings and design your own (optional)
- Change demand to a per-business level
- Bring the pixel art 3D render aesthetic back from the dead (e.g RollerCoaster Tycoon) [2]
I just updated my Steam page with some recent snapshots from my game. Im really happy with how the game is turning out!
[1] https://store.steampowered.com/app/2287430/Metropolis_1998/
[2] The art in my game is hand drawn though
I appreciate you testing, even though it's not a great comparison:
- My feedback cycle of LLM prompting forced me to be more explicit with each call, which benefited your prompt since I gave you exactly what to look for with fewer nuances.
- Maybe GPT 5.1 is old or kneecapped for newer versions of GPT
- Maybe Opus/Claud is just a way better model :P
Please post the code!
Edit: Regarding "exactly what to look for", when solving a new problem, rarely is all the nuance available for the first iteration.
If it's "you didn't explain the problem clearly enough", then that aligns with my original comment.
I recently used copilot.com to help solve a tricky problem for me (which uses GPT 5.1):
I have an arbitrary width rectangle that needs to be broken into smaller
random width rectangles (maintaining depth) within a given min/max range.
The first solution merged the remainder (if less than min) into the last rectangle created (regardless if it exceeded the max).So I poked the machine.
The next result used dynamic programming and generated every possible output combination. With a sufficiently large (yet small) rectangle, this is a factorial explosion and stalled the software.
So I poked the machine.
I realized this problem was essentially finding the distinct multisets of numbers that sum to some value. The next result used dynamic programming and only calculated the distinct sets (order is ignored). That way I could choose a random width from the set and then remove that value. (The LLM did not suggest this). However, even this was slow with a large enough rectangle.
So I poked my brain.
I realized I could start off with a greedy solution: Choose a random width within range, subtract from remaining width. Once remaining width is small enough, use dynamic programming. Then I had to handle the edges cases (no sets, when it's okay to break the rules.. etc)
So the LLMs are useful, but this took 2-3 hours IIRC (thinking, implementation, testing in an environment). Pretty sure I would have landed on a solution within the same time frame. Probably greedy with back tracking to force-fit the output.
Video games have discrete, static goals that let a player focus on an objective. Compared to LLMs, it’s a passive experience.
People play games for all sorts of reasons (to relax, competition, to build something of their own, solve challenges).
I think this is a fundamentally different experience than what an LLM can offer.
That’s not to say LLMs can’t become a fun experience, but it’s going to take decades to develop a way to procure that experience. Look at how long it took dungeons and dragons, or any video game genre, to get to the level of polish it’s at today
People are already trained to say a name to start. Curious why the tech has avoided a cap?
“Alexa, what’s tomorrow’s weather [dada]?”