generate_gazette.sh Calls OpenAI to generate "The Civ Chronicle" — an era-appropriate, unreliable wartime newspaper article for each turn.
For a long-running game like this, that's a pretty clever little twist to keep the group engaged. I have extremely low confidence I could convince enough friends to do it with me for long enough to get through a game, but this seems like such a fun idea.
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.
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.
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.
It’s my first time playing any Civ game ever. I’m currently at the top of the scoreboard for reasons entirely unbeknownst to me. My advice for anyone else considering playing their own game: form an alliance with the server admin.
Managing to recreate Pitboss mode is a neat achievement.
How do you handle the turn time creep problem? If people complete their turns and the game moves to the next 24 hour bloc after the last player submits, the submission window creeps earlier in the day until the deadline until it gets too early for one or more players and they miss a turn. Or do you not immediately process the turns and always stick to the 24H time period even if you have all players?
I want to do something like this for work, except instead of Civ it's discussing a topic, and instead of Civ it's email. Unfortunately, everyone seems addicted to Slack, as it minimises the time it takes for everyone to misunderstand each other.
Our goto is Civ VI where we play an age every few days. Start game we can usually get 2 ages in, end game 1/2 age or less. Game time is usually 60-90 min
Is this similar gameplay to longturn.net Freeciv with 25h turns? I would guess guess it is. Longturn has a fork of the Freeciv client, available from Github. There are some improvements to the UI and other things, including rulesets for longturn type of games. Might give some ideas for improving stuff.
42 comments
It's a bit verbose honestly (see https://freeciv.andrewmcgrath.info), I welcome pull requests with improved prompting!
I thought about trying some kind of mod for Civ IV but never got around to it. FreeCiv does make more sense.
Very cool stuff.
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.
Ignoring Civ 2 vs Civ 5 differences, any experiancing hosting Unciv vs Freeciv?
https://github.com/freeciv/freeciv
https://github.com/yairm210/unciv
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.
How do you handle the turn time creep problem? If people complete their turns and the game moves to the next 24 hour bloc after the last player submits, the submission window creeps earlier in the day until the deadline until it gets too early for one or more players and they miss a turn. Or do you not immediately process the turns and always stick to the 24H time period even if you have all players?
I used to play a half-dozen or so games of Diplomacy at time with daily turns for years.
There are still modern games that take advantage of this idea (my friends have been playing Old World like this recently) but I'd like to see it more.
My friends and I played for a while. The first week was a blast, the second week was fun, but week three felt like a chore and we all lost interest.