Our hopes for modability

Like Acken and Jon Shafer said, DLL source code on release. Gimme gimme.

Definitely wouldn't mind some easier multithreaded support within the DLL as well. I tried messing around with OpenMP for Civ5's but basically ran into a brick wall. A multithreaded A* pathfinder would also mean faster turns (seeing as the pathfinder is the main performance bottleneck), and that we could get the AI to do more complicated calculations, maybe even think an entire turn ahead tactics-wise.
 
Like Acken and Jon Shafer said, DLL source code on release. Gimme gimme.

Definitely wouldn't mind some easier multithreaded support within the DLL as well. I tried messing around with OpenMP for Civ5's but basically ran into a brick wall. A multithreaded A* pathfinder would also mean faster turns (seeing as the pathfinder is the main performance bottleneck), and that we could get the AI to do more complicated calculations, maybe even think an entire turn ahead tactics-wise.
Yeah, some 'think ahead' would be good, instead of:
  • I am the AI and I just got a Great Engineer
  • I am two turns away from discovering Tech-X
  • Tech-X unlocks the most fundamentally useful and powerful wonder in the entire game
  • I think I'll plant my Great Engineer for a Manufactory
 
Yeah, some 'think ahead' would be good, instead of:
  • I am the AI and I just got a Great Engineer
  • I am two turns away from discovering Tech-X
  • Tech-X unlocks the most fundamentally useful and powerful wonder in the entire game
  • I think I'll plant my Great Engineer for a Manufactory

That kind of thing is actually doable with Civ5's code, though it would take a very long time to set it up. I'm thinking of more along the lines of doing the following:
  • I can capture a city this turn...
  • ... but if I do, the opponent will re-take their city and smash into my attacking army on their turn...
  • ... so even though I would normally want to prioritize taking cities, I think I'd rather use my units to attack the enemy units near the city...
  • ... except I still want to take the city next turn if possible, so maybe I'll dedicate one or two of my units to attacking the city instead of doing something that would help attack nearby units, but isn't as valuable as opening the possibility of taking the city next turn.
For every single viable tactics outcome, the AI would mock-play their opponents' turns, then make changes to its tactics outcomes and repeat until it finds an outcome that is suitable. This would involve a metric ton of pathfinder calculations, so unless you like waiting an hour for an AI turn to finish, multithreaded A* is required for a system like this.
 
I'm a total noob modder, so this is where my thoughts stem from.

I want more ease of use. To me, that means making more variables available through noob languages like XML and less through more learned languages like Lua. There were many pre-defined variables in XML (%yield modifier per follower) that morphed into Lua if you wanted a slightly different variable (% or flat yield modifier per specialist). Where XML ended and Lua began seemed unintuitive. Felt like there was more potential available in XML than was represented in Civ5.

Other than that, I agree that I'd want to see less stuff hard-coded into the DLL this time around. There were many times I was asking for help with mod ideas in the forums and would get the response "yeah that's hard-coded, you'd need to ask such-and-such who's usually very busy". At the end of the day, there will be (inevitably) tons of stuff hard-coded, and tons of stuff using more advanced files like ASP.Lua, which is fine. Just seems there can be more features and variables available to noobs.
 
I'm a total noob modder, so this is where my thoughts stem from.

I want more ease of use. To me, that means making more variables available through noob languages like XML and less through more learned languages like Lua. There were many pre-defined variables in XML (%yield modifier per follower) that morphed into Lua if you wanted a slightly different variable (% or flat yield modifier per specialist). Where XML ended and Lua began seemed unintuitive. Felt like there was more potential available in XML than was represented in Civ5.

Other than that, I agree that I'd want to see less stuff hard-coded into the DLL this time around. There were many times I was asking for help with mod ideas in the forums and would get the response "yeah that's hard-coded, you'd need to ask such-and-such who's usually very busy". At the end of the day, there will be (inevitably) tons of stuff hard-coded, and tons of stuff using more advanced files like ASP.Lua, which is fine. Just seems there can be more features and variables available to noobs.

Adding to this, just making the Lua system more intuitive overall would be an excellent improvement, as there is quite a bit of weirdness especially with the UI side of things, and if you want to replace a single, existing Lua function with something different, the only choice you have AFAIK is to completely replace the entire file containing the function with a new one, which kind of ruins the whole modularity advantage that Civ5's setup is supposed to have. Quite often even if I knew there was a way to do something through Lua, it was just so much easier to make the change through the DLL: as opposed to the Lua functions and systems, everything is in one place in the DLL (provided you can find some part of the breadcrumb trail that you're looking for, that can be a hard part), and you immediately know if your changes are going to be multiplayer-friendly or not.

As an aside, I'd be quite amused if overflow science multiplication is still a thing in Civ6, i.e. the overflow "feature" that forced Firaxis to apply a hard cap to overflow as a band-aid fix, since it turns out to be caused by something stupidly simple. Overflow science double-dips the science modifier: the science modifier gets applied once when overflow is generated and a second time when it is spent, and of course if spending it generates more overflow, that gets another helping of science modifier applied to it, etc. Remove the science modifier application when overflow is spent, and bam, problem solved. Now, if a Firaxis-grade team of developers cannot do what a sleep-deprived university student could, it'd be quite something.
 
My dream... with the release of the SDK comes a folder full of converted Civ V leader, unit, improvement and wonder models. If it's just a matter of running them through a simple software application that Firaxis has readily at hand, I don't see why not. Lacking that, I really hope that they are easily converted for use in Civ 6... looking at the screenies, I see no reason they shouldn't be.
 
I do hope we can easily add our own sounds and music according to our likes. Not like in Civ 5 - it was impossible.

BTW, Jeff Briggs is a genius. Love the music that he and Michael Curran etc. created for civ games.
 
I do hope we can easily add our own sounds and music according to our likes. Not like in Civ 5 - it was impossible.

BTW, Jeff Briggs is a genius. Love the music that he and Michael Curran etc. created for civ games.

Adding music to Civ 5 has been a thing for a while - Leuigi's made some tutorials showing how to do it, and it's pretty easy.
 
Adding music to Civ 5 has been a thing for a while - Leuigi's made some tutorials showing how to do it, and it's pretty easy.

They probably meant upon release. Music wasn't possible at the beginning without outright replacing an existing civs. So when I released the Pope, he had to remove Songhai from the game, to get his music working.
 
Adding music to Civ 5 has been a thing for a while - Leuigi's made some tutorials showing how to do it, and it's pretty easy.

They probably meant upon release. Music wasn't possible at the beginning without outright replacing an existing civs. So when I released the Pope, he had to remove Songhai from the game, to get his music working.

I think that's another point that Civ's modding capability developed over time. Even if Civ 6 is difficult to begin with (which, if their press releases are to be believed, is unlikely), then we would find ways to improve it until they make it easier for us.
 
Our hopes for modability

I modded Civ4 and Civ5, but mostly editing world maps and changing rules via xml but no intensive programming in Lua or Python so far ...

- The map editor of Civ5 was nice but lacked support for large number of civs. It would be nice to place the 43 civs and CS inside the editor instead of using Ynaemp mod to process a file with coordinates of TSLs.
- When new resources cocoa and bison were added to Civ5, the editor was not updated ... I hope for a better support of the Civ6 editor ...
- Inside the map editor it would be helpful to have small statistics about number of tiles of each terrain type and placed resources. (Probably can be done quickly with a script.)
- When placing a limited number of resources, it would be helpful to pick them up from kind of inventory and drag/drop them on the map, but also use drag/drop to move them on the map or move them back into the inventory without manually deleting/creating them.

- Changing game rules via xml in Civ5 is sometimes easy and sometimes difficult and sometimes impossible. There are civs, leaders, techs, social policies, religious beliefs, wonders, buildings and units and all may have the same kind of special attributes but they are usually not interchangeable.

Example 1 :
# A leader may provide free promotions via a trait using the functionality "Trait_FreePromotions"
# A building/wonder may use the attribute "FreePromotion"
# A policy may use the functionality "Policy_FreePromotions"
# A belief cannot give a free promotion
As far as I understand object oriented programming (e.g. C++), it is no problem to define civs, leaders, techs, social policies, religious beliefs, wonders, buildings and units in a way that they can all use the same method/attribute "FreePromotion" (using classes, inheritance, interface)

Example 2 :
Typical yields in Civ5BNW are Food, Production, Gold, Science, Culture, Faith, Happiness, Tourism ...
A policy has to use the correct one of 3 different methods
# Policy_BuildingClassYieldChanges
# Policy_BuildingClassCultureChanges
# Policy_BuildingClassHappiness
to modify output (yield) of a buildingclass via policy.

Example 3 :
A policy can add yields to a specialist via
# Policy_SpecialistExtraYields
but it does not work for Culture, Faith, Tourism and probably Happiness (as far as I know) ...
If all the yields would inherit from a class "Yield" with an interface "SpecialistExtraYields", it could be so easy ...

Example 4:
There are Caravans and CargoShips but most parameters determing revenue from internal/external Trade Routes are hardcoded, so it is not possible to adjust the revenue when modding the economy system. Science via TradeRoutes is a great idea but when a mod upscales Science by 500%, the Science from TradeRoutes cannot be adjusted and becomes meaningless.


So I do hope that Civ6 will be well structured, more flexible and more modable compared with Civ5. Please do not use hardcoded values!!!
(However if they did not focus on this so far, they are unlikely to change Civ6 code now and we will have to wait for Civ7.)
 
I think that's another point that Civ's modding capability developed over time. Even if Civ 6 is difficult to begin with (which, if their press releases are to be believed, is unlikely), then we would find ways to improve it until they make it easier for us.
Civ5's (and possibly some of Civ4's) modding community will primarily decide whether they want to stick with Civ5 or move onto Civ6 when Civ6 is released. It doesn't matter if Civ6 becomes more moddable later on, if it isn't very mod-friendly when it releases, you won't see many modders move onto Civ6, period. Just look at the state of DLL modding in Civ5: Civ4 had a bunch of people who were good at DLL modding, but because Civ5 waited until after they released their first expansion to publish the DLL source code, most of those people either did not move onto Civ5 or lost interest in modding completely (notque's probably the most prevalent example I can think of). Even now, six years after the initial release of Civ6, the closest thing to an unofficial patch to Civ5, CBP, is nowhere near as refined and developed as BUG or BAT is for Civ4.

Example 1 :
# A leader may provide free promotions via a trait using the functionality "Trait_FreePromotions"
# A building/wonder may use the attribute "FreePromotion"
# A policy may use the functionality "Policy_FreePromotions"
# A belief cannot give a free promotion
As far as I understand object oriented programming (e.g. C++), it is no problem to define civs, leaders, techs, social policies, religious beliefs, wonders, buildings and units in a way that they can all use the same method/attribute "FreePromotion" (using classes, inheritance, interface)
Classes governing policies, buildings, leader traits, and beliefs do not implement a common interface; I guess the C++ equivalent would be that they are not children of a common, virtual class. This is probably because most of Firaxis' C++ specialists work on the engine (there is a lot of virtual class fanciness in the engine headers that are imported into the DLL), so the people who work on the DLL side are either C-focused or worse. For example, the entire set of functions that the AI uses to optimize its Great Work slots looks like it was written by a Lua/Python programmer who has had no prior experience working with a low-level language: there are little to no use of pointers and references in those functions, and items are removed from POD vectors by rebuilding them without the original items instead of removing the original item and shifting up the addresses of all following items (a system that could have been written to work extremely quickly with a single array of pointers to pointers instead used a system where seven vectors were constantly being shuffled around and rebuilt). As a result, instead of embracing OOP, free promotions are handled by near-identical code implemented separately in the classes for leader traits, policy effects, building effects, and tech effects (embarkation). Changing this would require these classes to be rewritten to use a common virtual class for promotions, and looking at how much Civ6's engine has changed from Civ5, I don't think Firaxis' C++ programmers would have had the time to clean up issues like these in the DLL.

Example 2 :
Typical yields in Civ5BNW are Food, Production, Gold, Science, Culture, Faith, Happiness, Tourism ...
A policy has to use the correct one of 3 different methods
# Policy_BuildingClassYieldChanges
# Policy_BuildingClassCultureChanges
# Policy_BuildingClassHappiness
to modify output (yield) of a buildingclass via policy.
Yields in the YieldChanges stuff are handled uniformly. The reason there's a separate section for culture changes is supposedly because Jon Shafer did not get along very well with the people working on the DLL, and you can definitely see the result of that if you look at the DLL's source code. Basically every culture-related function is named "JONSCulture" or something similar and is very much divorced from other, yield-related functions like science or gold processing ones. Happiness is a mess in Civ5's codebase, it's technically not even a yield unless an AI settler is scoring a tile for city suitability, so let's just say that even if Civ6's amenities and population cap system does not work out, at least it won't be as much of a mess as happiness is in the game's code.

Example 3 :
A policy can add yields to a specialist via
# Policy_SpecialistExtraYields
but it does not work for Culture, Faith, Tourism and probably Happiness (as far as I know) ...
If all the yields would inherit from a class "Yield" with an interface "SpecialistExtraYields", it could be so easy ...
See my reply to example 1 on why there is no common "yield" interface. See my reply to example 2 on why culture and happiness are not grouped with other yield modifiers. Tourism, much like happiness, also is not technically a yield in Civ5, and you can definitely see a lot of weirdness in the game's codebase that is a result of this bad structuring. Faith is probably just an oversight where Firaxis forgot to copy over the specific code that's in the functions for things like beliefs and buildings, because that's the risk you run when you don't use interfaces.

So I do hope that Civ6 will be well structured, more flexible and more modable compared with Civ5. Please do not use hardcoded values!!!
(However if they did not focus on this so far, they are unlikely to change Civ6 code now and we will have to wait for Civ7.)
Hardcoded values are unavoidable (see e.g. engine limitations), but Civ5's overuse of hardcoded values often comes down to poor programming. For example, the reason Civ5 has a limit on 22 Civs is because city-state players are defined by their player slot instead of a boolean that is set during player creation: any players beyond slot 22 are treated as city-states, and pre-game setup creates city-state players by adding them in at slot 22. The reason there are so many inconsistencies between the way seemingly identical effects tied to policies, beliefs, leader traits, tech effects, and building effects is because the people who wrote that system did not employ virtual classes. Honestly, looking at CivBE's credits (where out of 40 developers, maybe 2 were C++ programmers), Civ5's codebase, Civ6's large engine overhaul, and the fact that Firaxis have not been hiring C++ programmers lately, I don't see these issues getting sorted out anytime soon.
 
Why not make Leader 3D Editor like a "Galactic Civilization" starship-creating?
Have a ton`s of part`s of "Leader`s" thats easy to assemble? Just select body, head, add some special`s (the hair, crown, plate armor, rings, tunic, eye patch and so on), select needed animation from pool of animations (99% leader`s is humanoid`s and uses normal humanoid "skeleton" for animation) - and New Leader is readY! No need to know 3D!!Easy to anybody!!

And why not created a 3D editor like MDLVis for Warcraft 3, but for Civ 6? - VERY EASY to learn and use, to add something, that not in "standard parts"? Why use in civ 4 and 5 something "exotic" format of 3D model`s like Nif or gr2?
 
@ Delnar_Ersike
Thank you very much for your insights ...

Here is another point :
All objects (buildings, wonders, policies, beliefs, promotions, ...) in the game have descriptions and Mouseover infos.
It would be very helpfull when changing database values like replacing +1 culture by +1 faith would be automatically displayed with correct values in the description without need to manually adjust texts. So all informative texts would have 2 parts :
- a handmade general description (without any values) and
- an automatically generated list of properties based on current database values.
 
Honestly All I want is to be able to change out the bright green grass colors and the ugly ice cream cone pine trees needs to go!

If I can even make the graphics LOOK like civ 5 graphics I will die happy!
 
Why not make Leader 3D Editor like a "Galactic Civilization" starship-creating?
Have a ton`s of part`s of "Leader`s" thats easy to assemble? Just select body, head, add some special`s (the hair, crown, plate armor, rings, tunic, eye patch and so on), select needed animation from pool of animations (99% leader`s is humanoid`s and uses normal humanoid "skeleton" for animation) - and New Leader is readY! No need to know 3D!!Easy to anybody!!

Partially because that removes their excuse for DLC, partially because that's actually much harder than you might think it is. I can guarantee you that the current models at least are all individually modeled, it's highly unlikely their pieces could transfer without a lot of modification.
 
Partially because that removes their excuse for DLC, partially because that's actually much harder than you might think it is. I can guarantee you that the current models at least are all individually modeled, it's highly unlikely their pieces could transfer without a lot of modification.


Link to video.

Nintendo did it though.
 
Top Bottom