You can read the code, but my suggestion on how to do this is to just ingest the save game files. They're super easy to work with, especially now we have the magic of LLMs.
In my case i'm creating various json files that describe game state, players, diplomacy, attendance, etc. Then i just throw that at the LLM and give it the goal of writing a newspaper article about where the game is at. The json files are incremental, so i'm not reading all the past versions on every turn. At the end of the current turn it just appends the current turn data to the json file, and then does the generation. These files are also what power the frontend UI, so it's all super lightweight and fast.
To make the graphs, you need to know state at the end of the current turn as the save files don't retain any history. So i store the most recent save file from each turn in order to achieve this.
It's been a journey of reverse engineering this game, but that's kind of the joy of it all.
This was a friends suggestion after I initially proposed something that exposed a bit too much detail. I wanted to show the diplomacy states and unit/city additions per player as a highlight on the home page, but we instead kept the raw files that generated those UI elements and fed them into OpenAI with the prompt and the Gazette was born.
Yeah! I cannot for the life of me remember the game but I used to play this space nation builder type game around 2004-2007...i was so invested. Then i found out the game resets every ~year. Wow that was a sad morning when i woke up to find out I came 50,000th or something haha.
Great question, it's not a typo. Making it 23 hours, it means the 'turn end' is constantly moving and never the same time of day.
The logic here is that we have players that are in Toronto Canada, Portland (Oregon) USA, Newcastle Australia and Berlin Germany. If we put the time at 24 hours, it would mean the turns are scheduled to end approximately the same time every day which introduces potential advantages / disadvantages to certain players.
I've never run Unciv! First i'm hearing of it honestly. I'll have to check it out.
I can say from this experience, the first 24-72 hours of the game was people just complaining in our group chat that the FreeCiv client sucks (it really does). I'm very tempted to jump in and make a few improvements, there's a really awful bug that impacts the ability to move stacked units - and if the diplomacy state changes while units are in the territory of a previous ally, they are unable to move whereas in Civ2 (legit Civ) they just get auto-pushed back to the borders immediately.
> whereas in Civ2 (legit Civ) they just get auto-pushed back to the borders immediatly.
Maybe you're thinking Civ 3? Civ 2 doesn't have borders. If you have units close to other civ's city, they will demand you to withdraw. If you agree, they're teleported to your nearest city.
ah yes you're right! Regardless, i don't think they're mean to get stuck haha. The more offensive element of this issue to me is that the UX gives no feedback, it just doesn't work and gives an audible buzz.
You may know this already, but the different FreeCiv clients are pretty different from each other. It's been a couple of years since I've played FreeCiv, but IIRC the QT client was the nicest at that time.
Yeah, so that's another lesson I learnt during the early phases. I've been using the gtk4 client personally, but someone else suggested the QT client. I do think the QT client is a bit better, but it is broken in different ways too.
It's really confusing to me why there's so many frontends for this one app. I'm tempted to switch to the web interface next time, but figured for now figuring out how to mange the server was enough of a problem without taking on the responsibility for the client people were using at the same time.
LongTurn (~24 hour) format has been something I've been interested in for a while. It means people can casually commit, without it taking over their life.
An interesting observation another friend made the other day was that this adds oxygen to the room. We have a WhatsApp channel with all the players in it, and at this point most of the 'action' is the conversation in WhatsApp. It's a pretty diverse array of people in there too, many who know me, but do not know each other.
haha, we're at turn 9, but if you want to join the next game let me know. Happy to add others! There's a chance there might be appetite to start a simultaneous game if a few people get knocked out early.
It's likely not all this, but i expect an element is: there is a meaningful number of people essentially refusing to work with AI.
Antidotal but I have spoken to friends at Google who are telling me many co-workers say "I tried it didn't work, ill do it myself" when really they just didn't try very hard at all.
Edit: that is to say, if you had a % of your workforce avoiding helping you explore a current trend (valuable or not tbd sure), I can see rational arguments around removing them from the team.
If, as a member of the c-suite, I find that a noticeable percentage of my company's workforce isn't "helping to explorer a current trend" then either they know something I don't or I haven't given them the time/methods by which to explore.
The latter is actually the more pertinent item, as I've seen several times that an initiative get rolled out by leadership, some teams have free time to play around and use it, and other teams have so much on their plate that they're barely able to keep their heads above water, let alone take on another experiment. If someone is worried about getting a project knocked out by end of month/quarter/year in order to keep their job, they're not going to mess about.
Now, that's a leadership failure, but it happens more often than not.
To add to the speculation, it's possible that the people refusing to use it are working slower. Even if the code that they write is objectively better by any metric you'd like, humans can't really pump out code as fast as Claude or Codex can.
If you can get something into "good enough" territory in 1/10th the time of someone who can get it into "great" territory, that is often worth it.
In my case i'm creating various json files that describe game state, players, diplomacy, attendance, etc. Then i just throw that at the LLM and give it the goal of writing a newspaper article about where the game is at. The json files are incremental, so i'm not reading all the past versions on every turn. At the end of the current turn it just appends the current turn data to the json file, and then does the generation. These files are also what power the frontend UI, so it's all super lightweight and fast.
To make the graphs, you need to know state at the end of the current turn as the save files don't retain any history. So i store the most recent save file from each turn in order to achieve this.
It's been a journey of reverse engineering this game, but that's kind of the joy of it all.
reply