Suggestions that would make a Big Difference
This thread aims to collate in a central place suggestions for additions or changes to the modding interface(s) that would make a big difference to what we could do (as opposed to little things like extra behaviour columns in the DB or extra Events/GameEvents). Some of them will hopefully be quite small changes for developers, but it's hard to predict what would or wouldn't be. I've got the list started with some ideas of my own or culled from elsewhere; I'll remove anything there's a much better argument against than for. I'll add anything that's suggested that there's a good argument for and no overwhelming argument against.
- Ability to (modularly) add FontIcons
- More extensible resource-scattering in AssignStartingPlots, so new resources can be added in modular fashion and still use the cleverness and balance features of the existing design
- Ability to add 3D graphics in modular fashion
- Working nexus, particularly enabling addition of terrain, resource and building/wonder graphics
- Ability to add sounds (of all sorts)
- Opportunity to modularly work with unit flag icons and strategic view graphics (for units and resources, at least, preferably to actually mod graphics used for everything)
- And related to SV graphics and 3D graphics, decouple them so you can create new units with existing 3D and new SV; why aren't SV graphics just the unit flag icon anyway?
- More flexibility with yields - and make Culture a Yield, and preferably happiness as well (for happiness only when worked, for example)
- Allow non-repeating techs to dead-end
- Allow actual creation of processes that can convert any yield to any other (reports indicate that you can't)
- Actual extensibility of terrain types. This may require sanitisation of the whole difference in how terrain and land and so on are handled between Lua and XML (and presumably C++), with clarity as to what is a feature and what is a base type and how to describe the overall combination, and so on. It seems inconsistent at the moment. Alternatively, explain how it isn't inconsistent, and how it could ever be extended so as to, for example, add another feature that works like forests and jungles, and separately to add one that works like hills.
- Allow for the map to be properly updated during the game - at present, if you change a plot's terrain, the graphics don't update until you save and reload
- Better ways to inform AI about things like promotions - make sure AI knows about value of promotions, and their effect on combats it might be considering. Of course, the degree to which the AI can already tell these things is unknown. Does it simulate combats before trying them, as the player can?
- Dependencies, load order and exclusions stuff to actually work. This would, for instance, allow for mods that alter the database schema in ways that other mods can then make use of - but such requires the schema-altering mod to be loaded first. It also requires it to be loaded at all. Neither is currently possible to enforce. Load order control is something important that would be very useful.
(One hope with these threads is that we might get some dialogue from devs, particularly FXSSSeckman, as he's already engaged in some here)
Addendum: some small but hopefully easy requests:
- A civilization reference in Unit_UniqueNames, so you can have civ-specific great person names (for example)
- Drop-downs for the actions/content tabs in ModBuddy, for the ones that will work without doing anything else to make them exist
- ModBuddy (or otherwise in modding tools) component that takes a 256x256 graphic and creates all relevant sizes
- For Lua game objects (Player, Unit, etc), add a getTypeName() (or whatever) that returns, for example, "Player" for a player, "Unit" for a unit, and so on. Or if that's effectively already possible, tell us how.
- Add method getOwner to all game objects that don't have it already, and if it doesn't make sense for that type, make it return nil.
and some things that are currently hard-coded Lua that could be DB-driven:
- Action icons
- Specialist icons (in the city UI)
And finally some extra specific columns that have been requested (but let's not fixate on this sort of request to much, please?)
(also, note that some of these can be done with what's there now, you just have to do the Lua to support it)
- Promotions - BarbarianAttack and BarbarianDefence modifiers, required tech reference
- Improvement column/table for mountains as per current hill ones - MountainMakesValid column and Improvement_MountainYields table
- Buildings - add requirements for national/world/any wonder in city, and for natural wonder nearby
- Policies and techs - allow each to require one of the other, so a policy enables a tech or a tech enables a policy.
Last edited by SamBC; 05-31-2011 at 08:33 AM.
First comment - define "big". What's "big" for a novice modder is probably "small" for an experienced one, but if you don't make things easy/simple for the novice they are likely to just "walk away".
Second comment - who is to define what is a "better argument", after all "one man's freedom fighter is another's terriost". Just because "Mr X" doesn't think a suggestion is any good, doesn't make the suggestion invalid.
That said, here's my list
1) In ModBuddy, provide some drop-downs in the Actions and Content tabs - where there are a restricted set of values for an entry (set/type) a free text field should not be an option! Also, the filename has to be a file in the project so should be a (sub-set of the) list of files in the project.
2) Provide a ModBuddy plugin that would accept a 256x256 graphic and create ALL the necessary size DDS atlas/icon files. If I could easily change the unit flag, sv flag and pedia icons, I can live with re-using existing units 3d artwork
3) Sort out the mess that is ActionIcons.lua - this can be simplified into a single table with three columns - ActionType, IconAtlas and IconOffset. Due to the different tables that ActionType is pulled from you wouldn't be able to run referential integrity checks against ActionType (but you can't do that now anyway with the look-up table approach)
4) Decouple the 3d artwork from the SV flag - at the moment you can't create a new unit with a new SV flag but using existing 3d artwork (without duplicating the 3d artwork entries).
a) Processes - add BuildingClassInCity condition (eg process to convert X to Y requires building Z in city)
b) Buildings - add AnyWonder, Global Wonder, National Wonder in city condition (eg build Tourist Board if AnyWonder in city)
c) Buildings - add Natural Wonder nearby condition (eg build Excursion Bus Stop if natural wonder nearby)
d) Promotions - add required tech condition (eg can only get AirLift promotion if flight has been researched)
e) Policies - add required tech condition (eg can only adopt Military Caste if chivalry has been researched)
6) Techs - permit dead end branches and add prereq policy to techs (so can only research X if policy Y has been adopted)
7) Promotions table - add
<Column name="BarbarianAttack" type="integer" default="0"/>
<Column name="BarbarianDefense" type="integer" default="0"/>
8) Improvements table - add
<Column name="MountainsMakesValid" type="boolean" default="false"/>
<Table name="Improvement_MountainsYields"> (columns as <Table name="Improvement_HillsYields">)
8b) Sort out the "LUA plot deals in type (ocean, flat, hills, mountains) and terrains (grass, plains, tundra, snow, etc) while XML calls it all terrain (some of which are water and some of which are graphical-only)" mess in the Terrains table and all the tables which reference it
9) Yields - happiness should be a yield - I may want to improve a grassland hex next to fresh water into a public park that grants +1 happiness
10) Processes - should be able to convert any yield into any other yield, eg Food Processing Factory permits hammers to be converted into food, Despotism Policy would permit happiness to be converted into hammers, etc
11) Unit_UniqueNames - add
<Column name="CivilizationType" type="text" reference="Civilizations(Type)"/>
(a null value implies a non-civ specific name)
12) Run-time map updates. At the moment if you change the type of a plot (eg from mountains to hills) while the strategic view changes immediately, the 3d view does not. Also, if you remove a resouce from a plot, while the graphic in 3d view is removed, the resource marker is not (see Units - Tunnel Boring Machine and Units - Mounted Units for examples)
13) Oh yeah, a full set of API documentation would be nice - things like JavaDocs have only been around for 15 or so years so it shouldn't be that hard to document as you go.
Yes, I thought of both those initial points, but decided against writing every side of the arguments that I could think of in the initial post. If you want clarity on 'big', it's more like 'what would open up broad new possibilities even though it seems quite small', so as to mean 'not little nitpicks'. In terms of arguments, I'm hoping it never comes to a close call. If someone suggests something, and then a good argument comes up that it'd be a bad idea, I'm hoping there'd be a general consensus on that.
Right, added some extra lists to add most of those, as some were quite narrow or specific, but still worth saying. Didn't include the one on documentation, I think FXSSSeckman knows we'd like as complete documentation as possible.
Same here - except I know it's important, always mean to do it better and sooner, and still fall well short. I've gotten better over the years, and I do better in Java because my IDE puts the skeleton doc-comments in place.
Originally Posted by whoward69
Added point about promotions and AI, suggested on CFC.
Add a GetClassName() method to each object type, such that pPlayer:GetClassName() returns "Player", pUnit:GetClassName() return "Unit", etc. The standard Lua type(pPlayer) returns "table", type(pUnit) returns "table" is not very helpful!
While in that code, for any object type that DOESN'T have a GetOwner() method add one that always returns nil
Promoted dependencies and load order to the main, small-but-more-important-than-you-might-think list
A dialog editor! (Unless I've missed it somewhere)
anchor="C,T" offset="5,10" blah, blah, blah is driving me nuts!
Yeah, but something straightforward and consistent in the core itself is better for compatibility and so on, so it's still worth having. In other words, a mod does not obviate the need for a core feature.
Originally Posted by whoward69
PS: Basically, FXSSSeckman outlines a way of doing it; how about adding in the described method to core so we don't have to worry about what version of the function has been added to the table in the context we're in, whether it's been added at all, and so on. It's hardly a burden, and it's a sensible design feature.
Last edited by SamBC; 06-16-2011 at 05:01 AM.
Reason: Added PS
This is already possible, as one of the the Techs in the Polynesia scenario does it.
Originally Posted by SamBC
Hmm. I shall look at how, so I can tell others about it when they mention it again (as I included that one from someone else's request)
Originally Posted by whoward69
Some things that you can add in WorldBuilder but are not present on the map when the game starts
1) Major civ starting locations (the unused ones obviously!)
2) Minor civ starting locations (again the unused ones)
3) City Ruins improvement (why these are removed I do not know!)
1 and 2 are needed to be able to fully randomise starting locations
If City Ruins were left, they could be used to simulate 1
As we're bringing the events thread back to life ...
"Getters" for the common attributes of controls, eg GetAnchor(), GetAnchorSide(), GetColor(), GetColorSet(), IsDisabled(), GetFont(), GetFontStyle(), IsHidden(), GetLeadingOffset(), GetOffset(), GetPadding(), GetSize(), GetString(), GetStyle(), GetTextAnchor(), GetTextOffset(), GetTexture(), GetTextureOffset(), GetToolTip(), GetTruncateWidth(), GetWrapWidth() (the IsXyz() ones may already be available)
These would allow for a simple Dialog Editor to be constructed in FireTuner
SetText() method for Radio Buttons
The ability to specify the relative Z-order of a context
(Not actually wanted "after" but needed "before" on several occasions)
What a fabulous idea back in the day. A remake of this in the modern era would be a blockbuster hit. Civ5 isn't too far off, actually, except that it lacks many critical elements for the non-programmer layman. Someone will along one day and will create what I have in mind, and they will make millions from it.
Was this along the same lines as SEUCK and 3DCK?