Colonization for Civ 6

MDoulos

Chieftain
Joined
Feb 5, 2017
Messages
59
Why aren't there efforts among Colonization lovers who are programmers to make a Colonization for Civ 6? What are the barriers to entry that non-programmers like me don't think about?
 
Civ4 and civ6 seem to be made with completely different ideas on how to mod. Do note that I haven't actually tried civ6 myself. The following is based on online research in modding civ6, not personal experience.

Civ4 is actually quite primitive when it comes to mod support. It expose parts of the game to the modders. Each item added to the mod will then replace that item in the full game. It's almost like modding is an afterthought to the game.

Civ6 appears to have been designed with a modern modding engine. It has a database of units, buildings etc. Interestingly it has a database (or database like) structure for lua code additions. Clearly the modding support has been built into the game early in the development.

On paper, Civ6 is way better. the database structure allows it to load one mod with a new unit and then another mod with a new unit and so on. It should work fine, at least as long as it doesn't load two mods, which try to mod the very same function in the lua code. Civ4 on the other hand can only handle one mod at a time and if you want two mods, you need to manually merge those two into one, which can be quite time consuming. Clearly Civ6 is superior when it comes to getting what you want from all mods combined.

However Civ4 has one gigantic advantage in it's primitive approach, which is full control of all the code in the DLL (instead of the functions handpicked to be lua exposed). This means Civ4 is actually superior for total conversion mods. For instance in M:C there is a new feature called Perks. They work like techs, but are invented with Founding Father points rather than research. The DLL provides the ability to read a new xml file, store it in a memory structure picked by me, allow the effect of ownership to be whatever I want (due to reaching all parts of the code) and control if/what should be added to savegames. Adding a new game concept is easier with the primitive Civ4 approach and quite hard if not impossible with the Civ6 approach.

I'm not even sure Colonization can be added to Civ6. However it is (at least in theory) possible to write Colonization for civ4BTS. The only thing, which comes to my mind as an issue is drawing Colonization style yields on the map. The rest would be just a lot of work in the DLL, python and xml.
 
So technically Civ 6 is easier to change what already exists and mod in terms of swapping what's there with something else, or with adding new stuff that follows a cookie cutter framework- But it doesn't allow for the creation of new concepts and total conversions? Bonkers if you ask me. Without the ability to add new concepts, what's the point of modding? To change the color or civ name? It irks me in the feels that modding concepts is more difficult if not prohibitive in the sleeker looking game.
 
I'm not certain that it doesn't allow it. There are games out there, which have a multiple mod approach like civ6, which allow quite a lot of modding. In fact Rimworld has a total conversion mod where you colonize Mars (which explicitly say you should not use it with other mods). The big question is the amount of functions being exposed to modding and I haven't been able to find a list of exposed functions in civ6.
 
It looks like Civ6 doesn't even have a worldbuilder yet and the SDK hasn't been released. So I'm sure that will have an impact on its perceived modableness.
 
So technically Civ 6 is easier to change what already exists and mod in terms of swapping what's there with something else, or with adding new stuff that follows a cookie cutter framework- But it doesn't allow for the creation of new concepts and total conversions? Bonkers if you ask me. Without the ability to add new concepts, what's the point of modding? To change the color or civ name? It irks me in the feels that modding concepts is more difficult if not prohibitive in the sleeker looking game.

More or less, yes. There's a lot of new stuff that can be added to Civ6, but things like having resources as yields, or adding a new trade system are likely to be impossible. Hopefully this will change when (and if) they release the DLL source for Civ6, depending on how much of the game's code is contained there. You can add new concepts through Lua to Civ6, but the amount you can change that way is more limited.

Civ4Col's greatest strength is its enormous moddability. Along with Civ4, it is probably one of the most moddable commercial games out there. The base Civ4Col game is... not that good, it should be as good as the original at least, but it isn't. It really needs the excellent mods we have here to shine.
 
More or less, yes. There's a lot of new stuff that can be added to Civ6, but things like having resources as yields, or adding a new trade system are likely to be impossible. Hopefully this will change when (and if) they release the DLL source for Civ6, depending on how much of the game's code is contained there. You can add new concepts through Lua to Civ6, but the amount you can change that way is more limited.
At one point I tried to move M:C to civ4bts because for unknown reasons, bts has better mod support for network traffic and gamefont setup (in bts, you can define the arguments for network functions, meaning you can send 7 ints if you like. Colo can't do that). I stopped because yields on the map is hardcoded in the colo exe and can't be modded or moved. Moving colo style yields on the map is likely the biggest challenge in moving colonization mods to civ6.

Civ4Col's greatest strength is its enormous moddability. Along with Civ4, it is probably one of the most moddable commercial games out there. The base Civ4Col game is... not that good, it should be as good as the original at least, but it isn't. It really needs the excellent mods we have here to shine.
It's quite unique in the way it's modded.

Civ4 family:
  • only one mod at a time (mixing two is hard work)
  • ability to mod lots of stuff the game developers didn't consider useful to modders
  • C++ (high performance)
  • advanced programming features possible, like adding 3rd party libraries or control of memory management
  • good debugging features
  • might need more skills from modders to make something really good
The typical modding options in modern games:
  • ability to load multiple mods into the same game (like 10 mods, each adding one unit)
  • modders have a select number of functions to call. If the game developers didn't think you would need a certain function, then you can't use it
  • usually intrepided scripting languages (slower than compiled code)
  • poor or no debugging features
  • risk of mod conflicts (if two mods both claims the right to be called by a certain function, only the last will get it, breaking the first mod)
  • loading a lot of mods can in itself be a slowdown (which is a problem if lots of people release lots of small mods intended to be mixed)
  • usually takes less programming skills to get started and you need to study less code to figure out how to do stuff

I think the future is in supporting multiple mods at the same time for a lot of reasons. One being that it works better with steam workshop. However if you have the skills, the civ4 engine is likely the best ever for modding. Most of what I do with it would be impossible with other games, simply because they won't provide access to what I need to get things working.
 
At one point I tried to move M:C to civ4bts because for unknown reasons, bts has better mod support for network traffic and gamefont setup (in bts, you can define the arguments for network functions, meaning you can send 7 ints if you like. Colo can't do that). I stopped because yields on the map is hardcoded in the colo exe and can't be modded or moved. Moving colo style yields on the map is likely the biggest challenge in moving colonization mods to civ6.


It's quite unique in the way it's modded.

Civ4 family:
  • only one mod at a time (mixing two is hard work)
  • ability to mod lots of stuff the game developers didn't consider useful to modders
  • C++ (high performance)
  • advanced programming features possible, like adding 3rd party libraries or control of memory management
  • good debugging features
  • might need more skills from modders to make something really good
The typical modding options in modern games:
  • ability to load multiple mods into the same game (like 10 mods, each adding one unit)
  • modders have a select number of functions to call. If the game developers didn't think you would need a certain function, then you can't use it
  • usually intrepided scripting languages (slower than compiled code)
  • poor or no debugging features
  • risk of mod conflicts (if two mods both claims the right to be called by a certain function, only the last will get it, breaking the first mod)
  • loading a lot of mods can in itself be a slowdown (which is a problem if lots of people release lots of small mods intended to be mixed)
  • usually takes less programming skills to get started and you need to study less code to figure out how to do stuff

I think the future is in supporting multiple mods at the same time for a lot of reasons. One being that it works better with steam workshop. However if you have the skills, the civ4 engine is likely the best ever for modding. Most of what I do with it would be impossible with other games, simply because they won't provide access to what I need to get things working.

Indeed, so mixing multiple mods seems to be the only advantage as far as modding goes for choosing Civ5/Civ6 over Civ4/Civ4Col. Civ5 does have the DLL source available, and though it's (sadly) not as powerful as the Civ4/Civ4Col one, that already helps immensely with modding. Hopefully Civ6's DLL source will be released eventually, too.

An open-source alternative would be even better, of course, but for Colonization there is AFAIK only FreeCol, which runs very slowly for me and from what I've heard a lot of others as well. FreeCiv is much better, but still a bit rough around the edges in some regards.
 
To be fair, it is actually possible to load multiple mods in civ4. What you do is to add a module folder inside the mod's assets and after loading the mod's xml files, it will try to find xml files of the same name inside modules and load those. It will then add the data to the game or overwrite in case of using the same Type tag. It's rarely used for two reasons:
  1. most people don't know it or don't know how to use it
  2. if the DLL changes the contents of an xml file (like adding a tag), the mod will need to update as well
Particularly #2 makes it somewhat useless. Say you make a unit you want to use in multiple mods, you just add it as a module, but since big mods tend to change the tags in the xml files, the 3 mods you want to add it to could easily require 3 different xml layouts. To get around this, new tags could be added with MinOccur=0 and the DLL should insert something useful if the value isn't set, but I haven't seen any mod, which uses that approach consistently. You can't add DLL changes to modules as only one compiled DLL can be used at a time, not mixes of multiple ones and I have no idea about python.

In short: they tried to add a system for loading multiple mods at the same time. It just didn't work out very well.

I do not see a bright future for FreeCol. It's written in java, which is never a good choice when you aim for performance. It's not as brilliant as people say for supporting multiple platforms and relying on an installed JRE has given me a history of hard to fix issues and mind you, that's issues for end user, not developer, like FreeCol refused to go to fullscreen on my computer. Also despite popular belief, it is possible to write windows only java code, possibly even without knowing it. The only thing java has a big plus is the many libraries available. All the other benefits people talk about were true when java was new, but other languages evolved to compete and today I would rather use C++ than java to make software for multiple platforms. It just requires using only cross platform libraries, which most of them are.

Another reason why I don't have much trust in it is the fact that I once made a feature request. It was closed because what I wanted to do is not possible, meaning I was told I was trying to use the game incorrectly. I'm not sure what they were expecting with feature requests, requests for adding existing features? I would be ok with them rejecting for "we disagree that it would be a nice improvement" or "not compatible with our code design", but that's not what they said. In order to have a good project going of this scale, proper handling of incoming ideas and bug reports should be handled correctly and mine wasn't. Later I coded feeder service for RaR and M:C, which arguably does the same, expect it's better and more flexible.
 
They just released a Civ6 update so we'll see if this helps some genuine mods start to get made from it, but I doubt anyones ever going to remake Col on that engine. Their Modifier system could be very flexible for modding if it gets more accessible to modders by using a GUI rather than dozens of SQL commands. Similar to Civ5 it looks like there are still huge difficulties in modding vanilla building and terrain graphics, which make me pessimistic for any true total conversion mods of the magnitude of FfH and Dune Wars.

P.s. Androrc, ha quanto tempo! Vc tem saudade do Civ4Col? :king:
 
They just released a Civ6 update so we'll see if this helps some genuine mods start to get made from it, but I doubt anyones ever going to remake Col on that engine. Their Modifier system could be very flexible for modding if it gets more accessible to modders by using a GUI rather than dozens of SQL commands. Similar to Civ5 it looks like there are still huge difficulties in modding vanilla building and terrain graphics, which make me pessimistic for any true total conversion mods of the magnitude of FfH and Dune Wars.

Civ5 had many issues with moddability compared to Civ4 indeed. IIRC to this day you can't add new sound files.

You can add sound files to Civ6, but much of the rest is unlikely to be possible. For example, a lot of the yields code is AFAIK hardcoded, so having resources as yields (like Civ4Col does) seems to be impossible, even if you only want to store them at the player (rather than the settlement).

P.s. Androrc, ha quanto tempo! Vc tem saudade do Civ4Col? :king:

Sim :) I loved modding it, and it has a special place in my heart.
 
To be fair, it is actually possible to load multiple mods in civ4. What you do is to add a module folder inside the mod's assets and after loading the mod's xml files, it will try to find xml files of the same name inside modules and load those. It will then add the data to the game or overwrite in case of using the same Type tag. It's rarely used for two reasons:
  1. most people don't know it or don't know how to use it
  2. if the DLL changes the contents of an xml file (like adding a tag), the mod will need to update as well
Particularly #2 makes it somewhat useless. Say you make a unit you want to use in multiple mods, you just add it as a module, but since big mods tend to change the tags in the xml files, the 3 mods you want to add it to could easily require 3 different xml layouts. To get around this, new tags could be added with MinOccur=0 and the DLL should insert something useful if the value isn't set, but I haven't seen any mod, which uses that approach consistently. You can't add DLL changes to modules as only one compiled DLL can be used at a time, not mixes of multiple ones and I have no idea about python.

In short: they tried to add a system for loading multiple mods at the same time. It just didn't work out very well.

I do not see a bright future for FreeCol. It's written in java, which is never a good choice when you aim for performance. It's not as brilliant as people say for supporting multiple platforms and relying on an installed JRE has given me a history of hard to fix issues and mind you, that's issues for end user, not developer, like FreeCol refused to go to fullscreen on my computer. Also despite popular belief, it is possible to write windows only java code, possibly even without knowing it. The only thing java has a big plus is the many libraries available. All the other benefits people talk about were true when java was new, but other languages evolved to compete and today I would rather use C++ than java to make software for multiple platforms. It just requires using only cross platform libraries, which most of them are.

Another reason why I don't have much trust in it is the fact that I once made a feature request. It was closed because what I wanted to do is not possible, meaning I was told I was trying to use the game incorrectly. I'm not sure what they were expecting with feature requests, requests for adding existing features? I would be ok with them rejecting for "we disagree that it would be a nice improvement" or "not compatible with our code design", but that's not what they said. In order to have a good project going of this scale, proper handling of incoming ideas and bug reports should be handled correctly and mine wasn't. Later I coded feeder service for RaR and M:C, which arguably does the same, expect it's better and more flexible.[/QUOTE]

I agree, that is not a very good way to go about a project, as it demotivates people from giving feedback or contributing. I don't see a bright future for it either (though I would be glad to be wrong!). It would probably make more sense to add Col elements to Wesnoth, but that of course would take tons of work.
 
Top Bottom