SDK Modding Request Thread

Sneaks

Brooklyn Bum
Joined
Oct 15, 2010
Messages
1,877
Location
NYC
This thread is designed to be a thorough list of any features modders would like to see added to the core game/SDK.

Each request will be listed under an appropriate heading, and have a number preceding it on a 1-10 scale representing priority. Where possible, a link will be made to mods that have developed the function, or could use it.

General SDK Tools
  • 10- DLL Access
  • 9 - Greater access to the AI, especially in terms of combat/missions/pathing
  • 8 - Allow for graphics/VFS/Database reloading in game
  • 7 - Working associations/blocking in ModBuddy

Graphics Tools
  • 9 - Ability to add custom landmarks/wonders/improvements
  • 6 - Ability to add custom Font Icons - Needed when creating new yields/resources
  • 5 - Ability to use flat images as custom leaderheads rather than copying existing leader animations
  • 5 - Access to route graphic logic - to fix poorly connecting road graphics
  • 4 - Ability to add custom Fonts

Graphics Data/Files

Lua Functions
  • 7 - Implementation of UIAddin content types for GameSetup/AdvancedSetup, NotificationPanel, InfoCorner, and DiploCorner
  • 6 - Greater superglobal and cache functionality
  • 5 - Ability to edit how Research Agreements work

Lua Objects/Events
  • 7 - TurnStartLoopPlayers(pPlayer)
  • 7 - TurnStartLoopCities(pCity)
  • 7 - TurnStartLoopPlayerCities(pPlayer, pCity)
  • 6 - TurnStartLoopPlots(pPlot)
  • 6 - TechResearched(pPlayer, iTech)
  • 6 - BuildingCreated(pCity, iBuilding)
  • 6 - BuildingGained(pCity, iBuilding)
  • 6 - BuildingDestroyed(pCity, iBuilding)
  • 6 - BuildingLost(pCity, iBuilding)
  • 4 - Fix (or better document) events Events.RunCombatSim and Events.EndCombatSim
  • 4 - OnBuildingClassCreated(city, building) event

XML - Data
  • 7 - Implement functions that allow for modders to control Culture and Happiness in the same manner as yields (adding to/from objects/tiles, altering rates)

XML - Contexts
 
Maybe I'm missing something here - but the Events Events.RunCombatSim and Events.EndCombatSim do not fire. Would be nice if those things would work.
 
Okay, my major wishlist, minus the ones you've already listed (like the BuildingCreated event):

> Negative values. Many fields that claim to be "integers" simply don't acknowledge a negative entry, but many do, and there's no easy way to tell which is which. The worst offenders for not allowing negative values are Happiness for buildings, and resource requirements for buildings. (A negative resource requirement would mean the building creates the resource; right now, we have to use a mod. The negative Happiness is a much bigger problem.)
> Sounds. Currently, you can't seem to add custom sounds to a mod, like sound clips for when a new technology is discovered or a new era is entered.
> The ability to alter which terrains are Impassible to a given domain type, and create new Domains that have differing lists of terrain types. Alternatively, a promotion that has a TRUE "CanMoveImpassible" to allow a land unit to move over water without Embarking. Either of these would allow us to create "anti-gravity" units.
> Ability to add new font icons and/or unit flag icons. Currently these don't have the usual atlas/index setup, which makes things much more difficult to edit.
> The ability to have a Wonder/building play a Civ4-style movie when built, instead of a flat picture. (More specifically, the ability to tie more things to different content types. So a movie when you enter a new Era, for instance, or when certain key "events" happen in a scenario game.)
> An XML stub or Lua function to alter the radius in which a single city can work tiles.
> An XML stub or Lua function to alter the range of a single city's ranged attack.
> XML stubs and/or Lua functions to alter the trade route income of a single city, or to change how empire-wide trade route incomes scale with technology or buildings.
> A working Airlift functionality.
> More XML stubs to put existing capabilities into new categories. For instance, there's no real reason we can't have a unit promotion that gives a single unit Japan's "Bushido" trait to fight at full strength when wounded. Too many capabilities are only usable in the single table that used them in the vanilla game. (DLL access would, of course, make this easy.)

There are other little things. Like Settler costs; when the cost is set to zero, it calculates the cost based on the free buildings and population of the resulting city, with scalings defined in the GlobalDefines.xml; but, these apply to all units that found cities. If you set the cost to nonzero, it uses that cost no matter what would be in the city. So, it's impossible to make an improved Settler unit that costs more than a standard Settler but scales in the same way. You either have it cost the same amount, or you have it cost a flat amount.

That sort of thing isn't really worth putting on the same list as the others. But it's just an example of how too much is hard-coded.
 
I sure do wish I could control the z-index for graphical elements painted to the screen. I don't know if that's even possible, but it sure would be nice. :)
 
in a perfect world, it would be awesome to be able to manipulate the gre files, so we could again create uinique units, buildings, leaderheads, etc

but at least for now, i would settle for a WORKING ASSET VIEWER
 
A couple things I would like to do in my mod (ETA: 2014 at the current rate):

  1. This is a very generic request (but I have no sense of whether it will be very hard from the C++ side). I'd like to be able to change anything in the db "on the fly" (i.e., during a game via Lua) and know that it will "update" correctly (change map graphic or whatever) and "stick" in the gamesave file (i.e., not be reset to xml value or a value from cache generated by a different game). It's fine if the "update" part takes extra commands (for example, there could be separate updates for map graphics, city/building yields, trait effects, etc.).

  2. If the generic solution in #1 is not possible, then here are some specific things that I would like to be able to do on the fly:
    • Change leader
    • Add/remove traits
    • (many more... which is why I would prefer a generic solution)

  3. More flexible control of unit movement restrictions (1upt, rival borders, foreign cities, etc.). As a simple example, it would be nice to be able to remove 1upt for civilian units while keeping it for military units. More generally, I'd like to be able to control all such movement or "co-habitation" restrictions in the unit xml (or perhaps in the special unit xml). My spy or diplomat or fairy godmother unit should be able to enter rival territory and even enter a foreign city. [Interestingly, I've had units stop in a friendly city when moving through crowded and unrevealed territory. So the engine seems to allow it already, but the interface won't let me chose such movement if I can already see the terrain.]

Edit: I sort of mis-read the OP as a dll mod request thread, even though I know SDK != dll. I'll leave my list anyway, just in case the dll magically appears in the near future (or if someone knows a Lua kludge for any of my requests).
 
Just make culture and happiness into plain yields already. Right now, every single place where happiness or culture is added, instead of being just another entry on the appropriate join table (as per production, science, food, and gold), must be another record on the table. This also basically prevents terrain or features that add happiness, or improvements or specialists that add happiness (or, if the negative values implementation above is considered, unhappiness).
 
I agree with the comment above (although I can imagine that this will be hard with so many hardwired dll connections to happiness and culture).

Here's two more. I think the first could be done via current tools:

  1. A generic "unit action" system in xml. I'm thinking along the lines of the spell/ability system in FFH, which was an XML file that could do simple things by itself or call Python for more complex prereqs or effects. Any action would have a name, trigger (most commonly a button on the unit action panel), optional prerequisites (unit type, level, promotions, etc), and some optional effects (gives unit promotion, gives all nearby units a promotion, etc.). Most importantly, the prereques and effects would both include optional Lua calls. So there would be an optional LuaPrereq (calling a function that must be True) and an optional LuaEffect (calling a Lua function if the action happens).

  2. Optional LuaPrereq and LuaEffect tags in XML for for buildings, policies, techs, and darn near everything else. The LuaPrereq would call a function that must return True in order to build building, adopt policy, research tech, etc. The LuaEffect would call a function when building built, policy adopted, tech researched, etc.
 
This also basically prevents terrain or features that add happiness, or improvements or specialists that add happiness

To be clear, you CAN do this now. In my own mod I've got an Improvement that adds Happiness, by adding a +Happiness feature. (Unfortunately, this is the "happiness if within border" variety, not "happiness when worked".)
I'd also have +happiness specialists working, except that I've put that on hold while I fix a related UI issue. Of course, the AI really wouldn't know how to handle that sort of specialist correctly, so there are other issues involved. (Flavor values can only go so far.)

But yes, having Culture and Happiness be true yields would solve a lot of this. Functionally there shouldn't be a difference; while food and production are a purely city-by-city benefit, research and gold are functionally empire-wide quantities, with only limited local effect, a lot like Culture. And there MUST be a local component to Happiness, if only because the recently-added population cap for Happiness buildings would need that sort of thing to be possible.

Really, though, the complaint shouldn't just be about the Culture and Happiness. It's that we can't actually add new Yields. We've got the CIV5Yields.xml file, but we simply can't DO anything with it, because so many other things are hard-coded to only accept the four current Yields.
Again, DLL access would help. But there are much better ways this could have been designed, from the start.

There are a lot of other things like this, where it looks at first glance like we have the ability to customize something, but in practice it's impossible. Another example I gave was sound files; we can update the audio definition files all we want, but it just won't USE them, so what's the point of making those files accessible to us in the first place?
 
Code:
<Table name="MinorCiv_QuestWeights">
    <Column name="MinorCivType" type="MinorCiv_Types(Type)"/>
    <Column name="PersonalityType" type="MinorCiv_Personalities(Type)"/>
    <Column name="QuestType" type="MinorCiv_Quests(Type)"/>
    <Column name="Weight" type="integer" default="0"/>
</Table>
<MinorCiv_QuestWeights>
    <Row>
        <PersonalityType>MINORCIV_HOSTILE</PersonalityType>
        <QuestType>FIND_KILL_CITY_STATE</QuestType>
        <Weight>10</Weight>
    </Row>
</MinorCiv_QuestWeights>
  1. Change minor civ quest weights to a table as seen above, instead of the present method of individual global variables for each cell of the table. The code simply checks if a citystate matches the type or personality, and if so, uses that weight for the quest.
  2. Capability to increase city hitpoints with a building. So for example if a city starts at 20 hitpoints, building Walls might increase it +5 to 25.
  3. Global define true/false to set if research agreements should give a free tech.
 
:lol:

I'm wondering at what point Seckmen and team finally throw their hands in the air, dump the raw dlls to torrent, and then just watch Civ5 come alive. I mean really. How long can you keep people at bay when the throngs of skilled developers are beating down the door to improve your property and build a full on theme park in your backyard.

Yep... it sure must be getting hard. I think we can wear'm down. :)
 
I'm off from work tomorrow, so expect the first posts to be cleaned up with all this added.
 
It would be good to be able to find out which city is involved in combat since the RunCombatSim/EndCombatSim events only supply a unitID and this is -1 for any city.
 
What if there was a way to circumvent a City-State request to conquer another City-State? I always figured something like discovering a certain tech or paying a huge sum of money could be used as an actual "bribe" to have them call off their incorrigible desire to wipe out their neighbors.

I guess I'm used to putting up with a City-State wanting another down, and never answering to it just because I prefer not to conquer unless they're either very viable land or if no other Civ is protecting it.
 
You know, for all of this discussion about wish lists for modding, I realized that I'd prefer if more of the existing stubs actually worked.

Take, for instance, Policy_BuildingClassHappiness, which I was playing around with this evening. It's the XML table used to give Universities +1 happiness at that one policy. There's just one problem: it does so twice. Try making an entry that gives X happiness for some building type. (Do the Palace, it's easier to verify. And attach this effect to the Liberty policy or something.) The turn you build a building with this, it'll give +X happiness to the "Buildings" counter, and on the next turn, it'll give another +X to the Difficulty counter (which is where generic Happiness boosts from the Set/Get logic go). So you get the bonuses twice, which makes Rationalism an even better Happiness booster than Piety.

(I was trying to use this method to fix the Happiness bug with the Courthouse, as well as the separate issue where negative Happiness values in the Buildings table don't work. So I'm three for three!)

Or SpecialistExtraCulture, which is supposed to add X culture per specialist, but instead is broken in a really complex way that makes it give a hundred or so times too much culture.

The list goes on. So before they worry about getting us new toys to play with, I'd like them to just fix the game we have now. (Or give us DLL access so that we can do it ourselves.)
 
Back
Top Bottom