20 years of Civ3, and a proposal for 20 more

WildWeazel

Carthago Creanda Est
Joined
Jul 14, 2003
Messages
7,362
Location
/mnt/games/Civ3/Conquests/Scenarios

Today (October 30 2021) is the twentieth birthday of our beloved Civ3!

Twenty years is far too short a time to live among such excellent and admirable modders. We have had an enviable modding scene here thanks in part to such an accessible and customizable game, but there has always been a sense that it fell short of its - and our - potential. Thanks to clever modding tricks, and external tools, and even reverse engineering, we have been able to peek behind the curtain. And yet there are many things that even now are just beyond our reach. As great as this game is, it could be that much greater if we had full control. I am not the first to realize this, but over the years I have become fixated on one inescapable conclusion:


We should remake the game.

This proposal has only made it this far due to the combined efforts of @Ozymandias, @Vuldacon, @Blue Monkey, @Quintillus, @Civinator, @Puppeteer, @Flintlock, and @Lanzelot. Special thanks to them for all their insight and analysis. Together we represent roughly a century of Civ3 experience, and it is our opinion that this is a worthwhile endeavor.

As a programmer, I've been on board with this idea since @Steph first revealed what was SSS back in 2004. It has been brought up several times since then. The last time around, I half-jokingly said I'd do it (hence avatar) and started messing around in Unity3D for a while and thinking about what it would actually take. I was never able to shake that compulsion. I even put together an extensive technical document of what I thought such a project should look like.

But it wasn't just me. I started bouncing ideas off of a few people, and later reached out to others to begin investigating whether this or another avenue was worth pursuing.



We've been brainstorming and digging through various projects since last year to determine what could be done to enhance Civ3. In part due to technical merit, and in part due to skills and interest, we narrowed it down to two approaches: continue @Flintlock's method of exe modding, and recreate the game using a modern game engine.


I won't deny it, making a whole game from scratch is a big deal and hard to pull off. But it's not a pipe dream. Recreating an old, well-understood game is a reasonable, and not that uncommon, project for a small team of dedicated developers. There have been successful open source clones and remakes of Master of Orion, C&C Red Alert, Imperium Galactica, and Age of Empires just to name a few, not to mention FreeCiv which is based on Civ1 and 2 and now has a community of its own.


Yes, this has been tried before here and failed. Multiple times. By people who surely were no less talented or motivated than we are. Trying to remake the game has become a low-key joke around here. That doesn't mean it's impossible. There's nothing about Civ3 that makes it uniquely unable to be recreated.


But we can't just keep doing the same thing and expect different results. There are two main things that we want to do differently this time around.

One, this should be a proper open source project that anybody can participate in. It should all be done in the open with as much collaboration and transparency as possible. That comes with a few benefits. More eyes on the code makes for better quality and lighter work. Working in the open lets everyone know what to expect and what needs to be done. And most importantly, it lets anyone pick up where someone else left off at any time if they drop out or lose momentum. If there's one thing all the previous attempts have in common, it's that nobody else could take ownership.

Two:



In the 20 years since Civ3 was made, and heck even in the ~8 years since @Jimmyh set the high water mark for clone attempts, there have been some great advances in game technology. Specifically, non-commercial game engines.

Godot is itself a free open-source game engine under active development and has become very popular among indie game developers. It supports C# code via Mono and all major operating systems. Using a tool like Godot gives us a lot of leverage to focus on game features vs writing everything from scratch.

A few of us have put together a simple demo using Godot, of what we've been calling C7, short for Civfanatics Creation & Customization Community's Civ3 Conquests Clone. (Fear not, I have an abundance of increasingly absurd codenames should we go forward.)


Here we have a game window that generates a random map using native Civ3 terrain files, and lets you step through the turn cycle. @Puppeteer has also been experimenting with loading and parsing various game files, integrating scripts, and other essential features. Here's a demonstration of unit animations, again loaded directly from Civ3 files:


Now obviously this is not much of a game, but we've worked out some key technical questions and explored several others. More importantly this code is published for reference. There's no need to keep reinventing the wheel, or ceremonial burial or whatever.


Will this actually work?

Who knows. Maybe it'll be another short-lived diversion in the annals of history. Maybe we'll make the next FreeCiv. But it can be done. If we all work together, maybe we'll build something to stand the test of time. We think it's worth trying.


Okay, but why now?

Because there's no time like the present. Today is a big date in Civ3 history. The game has had a minor renaissance thanks to people like @SuedecivIII bringing in new players. Godot is making strides. At least a few of us are interested and willing to give it another shot. I can't do it alone and don't want to. I mean, I certainly don't have a reputation for finishing things.



What do we do now?

Ok, so this is a lot of fanfare for not a lot to show. We were hoping to be further along with a prototype by this point, but real life got in the way. But the prototype isn't the point. It's not about "I'm making this and you get to play it" but "we can all make this together". Me, you, other Civ players, indie developers, anyone who wants to contribute. This belongs to the community.

The next step is to assemble a team and assess our resources. If you want to help, just say so. You don't have to be a programmer or game developer to contribute. We'll need artists. We'll need modders. We'll need play-testers. We'll need IT support. We'll need people with opinions. If you play Civ3, you can help.

So, are you in?




TL;DR?

 
Last edited:
Nothing is in stone as yet, but we have done some prototyping and experimenting. There seem to be no technical blockers to using C# and the Mono version of Godot to read Civ III data and media files and convert them for use in other data structures and other graphics formats.

We've also proof-of-concept-ed using Lua with C# for user-provided scripting capability. Python (via IronPython) is another possibility as scripting language, but we haven't proofed that yet and aren't sure how secure it is for running untrusted scripts.

The vision as discussed so far is a completely new game that can at least one-click import existing C3C mods and save data, but the native data and media formats will be completely different. (But open source, like probably JSON and PNG.) And we get into a lot of hand-waving idealism there, but it should be achievable.

The things we won't be carrying over include limits and crashes to desktop.
 
More importantly this code is published for reference.

And so far MIT-licensed, although a decompression library we're using is Apache-2.0-licensed.

The current work is in the Prototype repo, and so far anything interesting is actually in the Development branch and is where the screenshot in OP is from.

The "simplegame" and "ProtoFramework" repos are even more experimental code that doesn't even make pretty pictures.
 
Speaking of pretty pictures...

We don't have it all hooked together yet as we're still defining the shapes of the pieces to hook up, but we can read much of the BIQ and SAV files, display tiled PCX graphics and even animate units given the path to the unit's .ini file.

Spoiler Here is the base terrain of a SAV file displayed in Godot :


Spoiler Here is a test unit animation :

Spoiler Here are two early tests for unit animation; less correct but amusing :
More than just animating one FLC, the code can read the unit's ini file and play its animations as directed. This one is a bunch of warriors doing the attack animation in random directions.
This is the same but with random available animations, too.
 
Last edited:
Very cool and interesting. The thing that has kept me invested in Civ 3 after all these years is how easy it is to mod it and use the incredible amount of assets that other folk have created. It's good that you're building on what we have already rather than starting from scratch which might be tempting if you wanted to appeal to a modern audience.

Personally, I'd be happy just to see more modding capabilities and some improvements made to the base rules. It would be nice to make combat a bit more sophisticated and allow more unit types/roles. Scripted events would be a nice addition, harkening back to Civ2.

I may be able to lend some practical support. I've got 20+ years of software development experience but I'm a bit rusty in the coding* department since I've been a Manager for the past 10 years :p

*Java, C#, SQL mainly.
 
We don't have it all hooked together yet as we're still defining the shapes of the pieces to hook up, but we can read much of the BIQ and SAV files, display tiled PCX graphics and even animate units given the path to the unit's .ini file.
Thank you, I meant to grab one of your examples and it slipped my mind!

The things we won't be carrying over include ... crashes to desktop.
Now, let's not make promises we can't keep... ;)

I may be able to lend some practical support. I've got 20+ years of software development experience but I'm a bit rusty in the coding* department since I've been a Manager for the past 10 years :p

*Java, C#, SQL mainly.
Ah, I had no idea! The bulk of the code will presumably be C#. I imagine we could use some management too.
 
Guys, I'm in!
However, I'm not much use.
I'm not friendly with programming, the last time I wrote anything on qbasic was 20 years ago.
However, in recent years I have read quite a lot on the history of military art (because of Civ3). Plus I can participate in testing.
 

Today (October 30 2021) is the twentieth birthday of our beloved Civ3!

Twenty years is far too short a time to live among such excellent and admirable modders. We have had an enviable modding scene here thanks in part to such an accessible and customizable game, but there has always been a sense that it fell short of its - and our - potential. Thanks to clever modding tricks, and external tools, and even reverse engineering, we have been able to peek behind the curtain. And yet there are many things that even now are just beyond our reach. As great as this game is, it could be that much greater if we had full control. I am not the first to realize this, but over the years I have become fixated on one inescapable conclusion:


We should remake the game.

This proposal has only made it this far due to the combined efforts of @Ozymandias, @Vuldacon, @Blue Monkey, @Quintillus, @Civinator, @Puppeteer, @Flintlock, and @Lanzelot. Special thanks to them for all their insight and analysis. Together we represent roughly a century of Civ3 experience, and it is our opinion that this is a worthwhile endeavor.

As a programmer, I've been on board with this idea since @Steph first revealed what was SSS back in 2004. It has been brought up several times since then. The last time around, I half-jokingly said I'd do it (hence avatar) and started messing around in Unity3D for a while and thinking about what it would actually take. I was never able to shake that compulsion. I even put together an extensive technical document of what I thought such a project should look like.

But it wasn't just me. I started bouncing ideas off of a few people, and later reached out to others to begin investigating whether this or another avenue was worth pursuing.



We've been brainstorming and digging through various projects since last year to determine what could be done to enhance Civ3. In part due to technical merit, and in part due to skills and interest, we narrowed it down to two approaches: continue @Flintlock's method of exe modding, and recreate the game using a modern game engine.


I won't deny it, making a whole game from scratch is a big deal and hard to pull off. But it's not a pipe dream. Recreating an old, well-understood game is a reasonable, and not that uncommon, project for a small team of dedicated developers. There have been successful open source clones and remakes of Master of Orion, C&C Red Alert, Imperium Galactica, and Age of Empires just to name a few, not to mention FreeCiv which is based on Civ1 and 2 and now has a community of its own.


Yes, this has been tried before here and failed. Multiple times. By people who surely were no less talented or motivated than we are. Trying to remake the game has become a low-key joke around here. That doesn't mean it's impossible. There's nothing about Civ3 that makes it uniquely unable to be recreated.


But we can't just keep doing the same thing and expect different results. There are two main things that we want to do differently this time around.

One, this should be a proper open source project that anybody can participate in. It should all be done in the open with as much collaboration and transparency as possible. That comes with a few benefits. More eyes on the code makes for better quality and lighter work. Working in the open lets everyone know what to expect and what needs to be done. And most importantly, it lets anyone pick up where someone else left off at any time if they drop out or lose momentum. If there's one thing all the previous attempts have in common, it's that nobody else could take ownership.

Two:



In the 20 years since Civ3 was made, and heck even in the ~8 years since @Jimmyh set the high water mark for clone attempts, there have been some great advances in game technology. Specifically, non-commercial game engines.

Godot is itself a free open-source game engine under active development and has become very popular among indie game developers. It supports C# code via Mono and all major operating systems. Using a tool like Godot gives us a lot of leverage to focus on game features vs writing everything from scratch.

A few of us have put together a simple demo using Godot, of what we've been calling C7, short for Civfanatics Creation & Customization Community's Civ3 Conquests Clone. (Fear not, I have an abundance of increasingly absurd codenames should we go forward.)


Here we have a game window that generates a random map using native Civ3 terrain files, and lets you step through the turn cycle. @Puppeteer has also been experimenting with loading and parsing various game files, integrating scripts, and other essential features. Here's a demonstration of unit animations, again loaded directly from Civ3 files:


Now obviously this is not much of a game, but we've worked out some key technical questions and explored several others. More importantly this code is published for reference. There's no need to keep reinventing the wheel, or ceremonial burial or whatever.


Will this actually work?

Who knows. Maybe it'll be another short-lived diversion in the annals of history. Maybe we'll make the next FreeCiv. But it can be done. If we all work together, maybe we'll build something to stand the test of time. We think it's worth trying.


Okay, but why now?

Because there's no time like the present. Today is a big date in Civ3 history. The game has had a minor renaissance thanks to people like @SuedecivIII bringing in new players. Godot is making strides. At least a few of us are interested and willing to give it another shot. I can't do it alone and don't want to. I mean, I certainly don't have a reputation for finishing things.



What do we do now?

Ok, so this is a lot of fanfare for not a lot to show. We were hoping to be further along with a prototype by this point, but real life got in the way. But the prototype isn't the point. It's not about "I'm making this and you get to play it" but "we can all make this together". Me, you, other Civ players, indie developers, anyone who wants to contribute. This belongs to the community.

The next step is to assemble a team and assess our resources. If you want to help, just say so. You don't have to be a programmer or game developer to contribute. We'll need artists. We'll need modders. We'll need play-testers. We'll need IT support. We'll need people with opinions. If you play Civ3, you can help.

So, are you in?




TL;DR?


I'd be willing to donate city sets for this game (or even make new ones if needed). Also animations (since this is a new game, even city gfx can have some animation, likewise for terrain features). I've been creating similar stuff for my own indie projects. But I'd first need to know if there is a team and if I can work with those in the team.
I don't mind the engine, although I haven't coded in Godot. Besides, I am sure I won't be needed for coding.
 
Last edited:
If you make it compatible with Linux I'll enable you exclusive access to my upcoming underwater terraine graphicks packe for a mere 25% off discount.

also you'd have to allow for underwater and/or outer space terrain, just sayin'. Mooching off the original Enemy Unknown games' terrain layers idea would be… welcome.

/subscription post
 
If you make it compatible with Linux

I've been doing most of my dev work on Mac. Godot and C# are cross-platform!

(Note to M1 Mac users: *right now* there is no native Godot with Mono working, but there likely will be in the coming months.)

Edit: Oh, and as far as underwater terrain, we've definitely discussed removing limits on how many terrain layers there can be, but it's still a bit hand-wavey and fuzzy as to how that will actually be implemented.
 
You might also want to look at how Open TTD (Transport Tycoon Deluxe) handles tunnels and waterways. Navigable rivers (not actual ‘sea’ terrain) should be feasible.

Didn't Civ2, IIRC, automatically connect cities through rivers as if they were roaded, for purposes of trade?
 
I'm in, looking forward to contributing as a programmer.

So far I managed to get the prototype running but it did give me some trouble. The build was failing out of the box due to a mismatched checksum for some dependency for the Blast module. I looked around online and in the end solved the problem by setting RestorePackagesWithLockFile to false in Blast.csproj and deleting packages.lock.json. I'm no expert at C# & .NET so I don't know if this is a good permanent solution or if there's some reason to have RestorePackagesWithLockFile set. I'm using the latest stable versions of Godot and Mono SDK, and I'm guessing the checksum didn't match because it was looking for an exact earlier version of the dependency.
 
Again the idea surfaces :). Sounds like you got a good base going though. I look forward to seeing your results.
 
Didn't Civ2, IIRC, automatically connect cities through rivers as if they were roaded, for purposes of trade?

No, in Civ 2 and Civ 2 ToT trade workes different from Civ 3 as there are no strategic and luxury resources but caravans. Exploring along rivers in Civ 2 gives a movement bonus like a road.
 
Oh, and as far as underwater terrain, we've definitely discussed removing limits on how many terrain layers there can be, but it's still a bit hand-wavey and fuzzy as to how that will actually be implemented.

Interesting would also to have underwater cities, as it is in CTP and CTP2. Underwater cities are possible, even with the current C3C, but the rules to handle them seem to be very strange. The same with "water-workers", connecting waterbased luxury and strategic resources and improving the trade value in water-terrain: https://forums.civfanatics.com/threads/civ-3-work-boats.551651/#post-13943564

The reason, why I didn´t integrate worker-boats into CCM 2 was, that the AI killed sometimes all its worker-boats without any visible reason.
 
Last edited:
Top Bottom