Our hopes for modability

Discussion in 'Civ6 - Creation & Customization' started by MatteM, May 14, 2016.

  1. Delnar_Ersike

    Delnar_Ersike Prince

    Joined:
    Jan 1, 2007
    Messages:
    497
    Location:
    localhost
    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.
     
  2. LeeS

    LeeS Imperator

    Joined:
    Jul 23, 2013
    Messages:
    7,241
    Location:
    Illinois, USA
    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
     
  3. Delnar_Ersike

    Delnar_Ersike Prince

    Joined:
    Jan 1, 2007
    Messages:
    497
    Location:
    localhost
    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.
     
  4. Acken

    Acken Deity

    Joined:
    Sep 13, 2013
    Messages:
    5,637
    Gender:
    Male
    Location:
    QC, Canada
    Especially since the AI engineer is already programmed to wait around for some turns if it has nothing to rush.

    Don't really change the fact that it wont wait for a tech after that time but still worth mentioning.
     
  5. Aheadatime

    Aheadatime Prince

    Joined:
    Dec 21, 2009
    Messages:
    325
    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.
     
  6. Delnar_Ersike

    Delnar_Ersike Prince

    Joined:
    Jan 1, 2007
    Messages:
    497
    Location:
    localhost
    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.
     
  7. Acken

    Acken Deity

    Joined:
    Sep 13, 2013
    Messages:
    5,637
    Gender:
    Male
    Location:
    QC, Canada
    Less hardcoded stuff for sure but I teally want source code for changing mechanics and ai. But im skeptic it will take a long time to be released :(
     
  8. Craig_Sutter

    Craig_Sutter Deity

    Joined:
    Aug 13, 2002
    Messages:
    2,753
    Gender:
    Male
    Location:
    Calgary, Canada
    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.
     
  9. darko82

    darko82 Emperor

    Joined:
    Dec 5, 2005
    Messages:
    1,324
    Location:
    Poland
    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.
     
  10. Chrisy15

    Chrisy15 Flower, Beautiful

    Joined:
    Jul 9, 2015
    Messages:
    2,081
    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.
     
  11. JFD

    JFD Kathigitarkh

    Joined:
    Oct 19, 2010
    Messages:
    9,129
    Location:
    The Kingdom of New Zealand
    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.
     
  12. Chrisy15

    Chrisy15 Flower, Beautiful

    Joined:
    Jul 9, 2015
    Messages:
    2,081
    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.
     
  13. historix69

    historix69 Emperor

    Joined:
    Sep 30, 2008
    Messages:
    1,320
    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.)
     
  14. Delnar_Ersike

    Delnar_Ersike Prince

    Joined:
    Jan 1, 2007
    Messages:
    497
    Location:
    localhost
    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.

    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.

    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.

    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.

    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.
     
  15. Arlokk

    Arlokk Chieftain

    Joined:
    Aug 12, 2013
    Messages:
    29
    Location:
    Russian Federation
    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?
     
  16. historix69

    historix69 Emperor

    Joined:
    Sep 30, 2008
    Messages:
    1,320
    @ 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.
     
  17. labellavienna

    labellavienna Warlord

    Joined:
    Mar 23, 2012
    Messages:
    132
    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!
     
  18. sukritact

    sukritact Artist and Modder

    Joined:
    Sep 21, 2010
    Messages:
    2,903
    Location:
    Bangkok
    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.
     
  19. clanky4

    clanky4 Emperor

    Joined:
    Jul 11, 2012
    Messages:
    1,262
    Location:
    USA

    Link to video.

    Nintendo did it though.
     
  20. sukritact

    sukritact Artist and Modder

    Joined:
    Sep 21, 2010
    Messages:
    2,903
    Location:
    Bangkok
    I think there's a difference between that and modular The Sims style leader creation. :p
     

Share This Page