State of Civ VI Modding

Why on earth doesn't that thing let you put your model together like a lego set, complete with the ability to import new parts, and then you just mash a single button to do all the ~stuff~ related to it? That would enable people like me (number changers) to be able to do something resembling basic modding.

The Asset Editor/Previewer already has elements of this. For example you can drag to position Tile Base elements (3D elements) in the Asset Previewer to make new Improvements etc of existing elements which is a really nice feature. For 3D units there should really be better tie in between the Asset Previewer and Units.artdef. You can put together you Unit from existing attachments (which is already possible) in the previewer and then press a button to create the Unit Member entry based on the Unit you are looking at - I feel like that wouldn't be too hard and would be a natural extension of what is already in place.

Also as the @thecrazyscot's tool shows the Mod.Art.xml could be automatically created/maintained based on the presence of XLPs and ArtDefs and the XLPs could be automatically created/maintained based on the presence and types of Assets and Textures. Art stuff could definitely be made simpler from a modders perspective for sure.

That said they have said they are going to continue to work on the tools and they have already put far more effort into this area than went into art support for either Civ 4 or Civ 5.
 
I don't think it helps that you need to be a software developer to do anything resembling basic modding (I don't count changing numbers in SQL as modding). Just look at all the stuff someone had to go through in the Asset Editor thread. Why on earth doesn't that thing let you put your model together like a lego set, complete with the ability to import new parts, and then you just mash a single button to do all the ~stuff~ related to it? That would enable people like me (number changers) to be able to do something resembling basic modding.

The community here is super-helpful (I wouldn't still be here if LeeS, Whoward and others hadn't helped me in the Civ 5 days). Someone on this site made a modding assistant, which is a step in the right direction, but it's nowhere near enough to enable us simple folk to make the stuff that Firaxis-provided tools would. Do the people at Firaxis really have to struggle the way we do?

Maybe Civ 7 will launch with modding tools for non-developers on day one. I can hope, right? :) (And dll source code will fly, I know).

Maybe VI modding is screwed because of this kind of hyperbole; I'm not a software developer, most VI modders I know aren't software devs. You don't need to be a software dev to experiment with Modifiers and Lua Events, and to classify things that don't involve new unit models as "basic modding" (and thus by implication sub-par) is simply inaccurate. To dismiss the entire code infrastructure of modding as "number changing" is not only a disservice to the most fundamental aspect of a mod but contributes towards a poor mindset for the growth of modding capability; if the only thing that's considered important is the asthetics of a mod, then the exploration of what can be done with Modifier-Requirement or Method-Event combinations is going to be neglected and gameplay aspects will suffer.

If you've decided you want to leave the Asset Editor to others, despite how accessible it makes model making compared to V, then you can still make more than "basic mods" with code through the exploration of what new ModifierTypes are possible or what Events fire for what people at what times. This is what will progress modding until the DLL release provides the relatively effort free solution to the problems - one that will be much more restricted to software developers, ironically enough..
 
I mean, it is hyperbole - you're claiming that you need to be a software developer in order to mod. You obviously don't literally mean that; you're hyperbolising in order to suggest just how difficult you find it. The problem, as Chrisy suggests, however, is that such hyperbolising is disingenuous. You might find it difficult to the point that you believe you need a professional development background to get into modding, but that doesn't mean its true, and acting as if it were is liable to give the wrong impression to people. Like Chrisy, and countless others, I have no professional IT background - heck, I don't even have a very scientific, mathematical, or technical background, and at first I found it very hard to wrap my head around the rigid logic of modding (in Lua/Modifiers). But through patience, practice, and a willingness to learn from others (especially, through the tried method of reverse engineering others' mods), it can be overcome. A dismissive or otherwise obstinate attitude is only going to hold you back.
 
There is indeed no need to be a a software developer to mod. I'm not. But patience is key, you'll need at lot of time to learn from other mods, the base files and tutorials. And even with experience, you still need time, I always does a facepalm when someone make a private request for a mod and manage to put the infamous "surely, for you it will only take five minutes" in the request. Well, let me say it publicly, no, it doesn't.

BTW, number changing IS modding, it's everyone first step.

The problem for civ6 is not that it's fundamentally harder to mod than civ5, on the contrary, but the lack of initial documentation surely didn't help, it's less an issue now with the provided internal documentation in the SDK folder and thanks to LeeS, Deliverator and all other modders providing tutorials, but for civ5 we had Kael's guide from day one.
 
It certainly saves you a lot of time if you have already programming practice of any kind. Up to the point, you know that all you need is an API reference (here: a list - better description - of Civ6 Lua Events & Objects with arguments & return values) and several example mods, to see how the syntax of the new language is and how typical programming phrases look like.

But it is surely NOT necessary to be a software developer in order to mod civ6. And anyways most of them also just began some time ago with "learning by doing", "training on the job" ... which was much harder a while ago, with FORTRAN & COBOL on punch cards ... :D The modern development tools are very nice.

So what you really need (as already mentioned) is just patience and a willingness to learn.

Of course a nice tutorial can help tremendously, too. Eg in civ4 explained Baldyr in a dozen posts his minimal Rebels mod step by step:

Spoiler :
Code:
from CvPythonExtensions import *

from PyHelpers import *
from Popup import PyPopup

# constants
gc = CyGlobalContext()
cyGame = CyGame()
cyMap = CyMap()
pyGame = PyGame()

iPropability = 5
eBarbarian = gc.getBARBARIAN_PLAYER()
pyBarbarian = PyPlayer(eBarbarian)
popupHeader = "Rebels mod"
popupMessage = "This mod includes the Rebels Python mod. It spawns barbarian units around cities \
with foreign citizens that are currently in disorder. The unit type and the number of units \
adapts to the makeup of the city garrison and the outcome will vary with the circumstances.\n\n\
You have been warned!"

def showPopup():
  """Displays the welcome message on game start"""
  modPopup = PyPopup()
  modPopup.setHeaderString(popupHeader)
  modPopup.setBodyString(popupMessage)
  modPopup.launch()

def checkTurn():
  """Checks all players and cities every turn, and executes the rebels event when applicable."""
  lPlayers = pyGame.getCivPlayerList()
  for pyPlayer in lPlayers:
    lCities = pyPlayer.getCityList()
    for pyCity in lCities:
      cyCity = pyCity.GetCy()
      if checkCity(cyCity):
        lPlots = getPlotList(cyCity)
        spawnRebels(cyCity, lPlots)
       
def checkCity(cyCity):
  """Checks if the CyCity instance is valid for the rebels event."""
  bDisorder = cyCity.isDisorder()
  if bDisorder == True:
    iForeigners = cyCity.getCulturePercentAnger()
    bNeverLost = cyCity.isNeverLost()
    if iForeigners > 0 and bNeverLost == False:
      iRandNum = cyGame.getSorenRandNum(100, "rebels")
      if iRandNum < iPropability:
        return True
  return False

def getPlotList(cyCity):
  """Checks all adjacent plots and returns a list of CyPlot instances."""
  lPlots = list()
  iCityX = cyCity.getX()
  iCityY = cyCity.getY()
  lXCoordinates = range(iCityX - 1, iCityX + 2)
  lYCoordinates = range(iCityY - 1, iCityY + 2)      
  for iX in lXCoordinates:
    for iY in lYCoordinates:
      cyPlot = cyMap.plot(iX, iY)
      bWater = cyPlot.isWater()
      bPeak = cyPlot.isPeak()
      bCity = cyPlot.isCity()
      if bWater == False and bPeak == False and bCity == False:
        lPlots.append(cyPlot)
  return lPlots

def spawnRebels(cyCity, lPlots):
  """Spawns rebel units matching the defenses of the CyCity instance on surrounding random plots."""
  iNumPlots = len(lPlots)
  if iNumPlots > 0:
    iMilitaryUnits = cyCity.getMilitaryHappinessUnits()
    iNumRebels = max(1, iMilitaryUnits / 4)
    eUnitType = cyCity.getConscriptUnit()
    while iNumRebels > 0:
      iRandPlot = cyGame.getSorenRandNum(iNumPlots, "spawn")
      cyPlot = lPlots[iRandPlot]
      iX = cyPlot.getX()
      iY = cyPlot.getY()
      pyBarbarian.initUnit(eUnitType, iX, iY)
      iNumRebels = iNumRebels - 1
Something like this is a great start to understand the general structures. Even if beginning at absolute zero a few days work should be enough to let you doing your first own steps.

.
 
Back
Top Bottom