Look, I'm not promising anything here, but this is something I've been thinking about for a little while. Some of you may have seen some of the stuff I've been working on lately (here or here, for example), but one of the things I've realised is that content-heavy games are really really hard. I've spent more time in Blender than I have in my IDE, and I'm not really suited to that sort of work.
I've been doing a little bit of War Worlds work lately (mostly making sure it will continue to function after the SSL certificate expires), but it's got me thinking. What would I do if I wanted to pick up War Worlds again? I think given the long absense, it might be a good opportunity to think of what working on a new version of the game would look like.
So, if you had to start over, what would you change?
I feel like the main thing in War Worlds today that I would change if I had the chance is cash. It's a huge pain in the early game, because you never have enough of it and the "slowness" of the early game is probably one of the biggest complaints I hear (apart from crashes 🤔). Later in the game, players tend to have so much cash that it's a total non-issue.
If we got rid of cash, I think there's a couple of things we'd need to replace it with.
- Because you could no longer accelerate builds, I think it would be simpler to just reduce build times significantly overall. Also, we'd need to make it clearer how focus and population affects build times in general.
- Using cash to send fleets could be replaced with "fuel", which could be a collected resource like farming and mining is today. Or we could just get rid of the "cost" component of sending fleets at all.
- Cash is a pretty big incentive to join an alliance. Some better trading or something could replace cash as the incentive (e.g. you can directly trade ships between alliance members)
On the topic of alliances, I feel like alliances in the current game are a bit of an after-thought (well, they are). Something that is more fundamental would be good and in particular I'm thinking of a more fully fleshed-out trading system as well as the ability to coordinate attacks and actually work together.
The current architecture of the game isn't bad, but there's a lot of changes that I think I would make if I were to start over again. If you're not interested in the technical aspects, you can just skip this whole section and jump to the Conclusion.
On the client, I think the multi-activity architecture has hurt us a bit. Resuming activities and the activity lifecycle is the source of many crashes. It would also simplify and speed up the game (not to mention fix many out-of-memory issues) as we wouldn't be creating and destroying the starfield map all the time.
I've thought about doing something cross-platform with iOS as well, but I don't think I have the resources to manage two platforms.
Always-connected WebSocket-style API
The current API is pretty HTTP-centric. Every request is a full HTTP request and response. This is a bit of a hang over from the days when the server ran on App Engine, and it's not the best architecture from a latency/bandwidth point of view. Whether we'd move to actual WebSockets or maybe something custom, I'm not sure. But there's no reason the main API between the client/server needs to be request/response style HTTP.
"In-memory" persistent world
Also related to the HTTP-centric API, the server itself is mostly stateless. Each request loads the data it needs from the database, processes it and saves it back to the database again. That's great from a resiliency point of view, but it's terrible from a performance point of view. I feel like a better architecture would be to load sectors into memory while a client is looking at it, process requests purely in memory and persist the whole sector back to disk periodically as needed.
If we got rid of cash from the game, that would also remove much of the need to be constantly simulating stars. Currently, the only reason we need to constantly be simulating stars is in order to calculate your cash income. If we moved to a model where sectors of stars were loaded into memory, it would be possible to "freeze" the sectors while nobody was looking at it, and only unfreeze it when actually needed.
These are some of the ideas I've been tossing around in my head lately. I'd love to hear what you guys think the game needs (but remember: no promises!)