Questions about making an electrified Railroads mod

Alipheese XVI

Chieftain
Joined
Jun 1, 2017
Messages
4
Hello everyone! I'm new to the forums but I'm a long time player of the game, and while I've briefly tried civ VI recently and I like some of the new features I find the AI so painfully dump that it makes that game unplayable for me, so I came back to good old 5 and the brilliance of "Artificial Unintelligence", Pick'N'Mix's custom dll and many other mods.

Anyway, one of the aspects of the game I that really liked was building up my economy and watching it grow as I connect my cities and upgrade my infrastructure, but it always bothered me that I had to wait until the modern Era to build railroads, (and how historically inaccurate it is) so I thought of making a small mod where railroads become available with steam power (the tech that reveals coal), whereas the railroads tech in the modern era gets the extra prerequisite of electricity and instead allows for the construction of electrified railroads (same maintenance as normal railroads with better speed and, if possible, a slightly increased industry bonus to connected cities - I didn't manage to find that one yet). I looked in the XML files of a few mods I used, (especially this mod which adds extra improvements and I used as a template - https://steamcommunity.com/sharedfiles/filedetails/?id=87662377) as well as the in-game assets, and I came up with five xml files which are supposed to do what I want (plus increase the building time for any type of railroad in forest tiles to 150% and jungles to 200% as I saw the code for something similar in that mod) but trouble is that when I activate the mod there is no change in the game except for railroads apparently being built instantly now, (no electrified railroads, no availability with steam engine etc) so I'd very much appreciate it if one of you can explain what I did wrong or perhaps what tool I should use to achieve what I'm looking for!

I never did any modding before so any help will be appreciated! :)

Here's a list of all the files I created (more like edited out of pre-made in-game or modded xmls) and their code:

1. Electrical Railroads (v1).MODINFO

<?xml version="1.0" encoding="utf-8"?>
<Mod id="4c756864-da74-4831-abc1-329b1150b9b4" version="1">
<Properties>
<Name>Electrified Railroads</Name>
<Stability>Alpha</Stability>
<Teaser>[COLOR_POSITIVE_TEXT]Vanilla[/COLOR] | [COLOR_POSITIVE_TEXT]G&amp;K[/COLOR] | [COLOR_POSITIVE_TEXT]BNW[/COLOR]</Teaser>
<Description>Makes Railroads available with Steam Power in the Early Industrial Era, (as I feel they should've been) and adds a new tile improvement called Electrified Railroad which has all the industrial benefits of normal railroads as well as double speed on flat terrain and 80% higher speed over hills. The Electrified Railroad will be available once you research the Railroad tech in the early modern era, which has now been modified to also have electricity as one of its prerequisites.</Description>
<Authors>[COLOR_PLAYER_CYAN_TEXT]Communist_Bismark[/COLOR]</Authors>
<HideSetupGame>0</HideSetupGame>
<AffectsSavedGames>0</AffectsSavedGames>
<MinCompatibleSaveVersion>0</MinCompatibleSaveVersion>
<SupportsSinglePlayer>1</SupportsSinglePlayer>
<SupportsMultiplayer>1</SupportsMultiplayer>
<SupportsHotSeat>1</SupportsHotSeat>
<SupportsMac>1</SupportsMac>
<ReloadAudioSystem>0</ReloadAudioSystem>
<ReloadLandmarkSystem>0</ReloadLandmarkSystem>
<ReloadStrategicViewSystem>0</ReloadStrategicViewSystem>
<ReloadUnitSystem>0</ReloadUnitSystem>
</Properties>
<Dependencies />
<References />
<Blocks />
<Files>
<File md5="82C509009A56FCAB1F79510786A08E45" import="0">XML/Misc/CIV5RoutesUpdate.xml</File>
<File md5="F70B1C2FD047E10C82EA0A4AB1AE381F" import="0">XML/Technologies/CIV5TechnologiesUpdate</File>
<File md5="CC60BDF4B319426C70964B40AD9A05AD" import="0">XML/Units/CIV5Units_WorkerUpdate2.xml</File>
<File md5="CC60BDF4B319426C70964B40AD9A05AD" import="0">XML/Terrain/CIV5Builds_ElectrifiedRailroads.xml</File>
</Files>
<Actions>
<OnModActivated>
<UpdateDatabase>XML/Units/CIV5Units_WorkerUpdate2.xml</UpdateDatabase>
<UpdateDatabase>XML/Technologies/CIV5TechnologiesUpdate.xml</UpdateDatabase>
<UpdateDatabase>XML/Misc/CIV5RoutesUpdate.xml</UpdateDatabase>
<UpdateDatabase>XML/Terrain/CIV5Builds_ElectrifiedRailroads.xml</UpdateDatabase>
</OnModActivated>
</Actions>
<EntryPoints>
<EntryPoint type="InGameUIAddin" file="Lua/ImprovementUpgrades.xml">
<Name>Improvement Upgrades discovery check</Name>
<Description>Checks for newly discovered resources</Description>
</EntryPoint>
</EntryPoints>
</Mod>

NOTE: The following are in a XML subfolder within the mod folder.

2. CIV5RoutesUpdate.xml

<?xml version="1.0" encoding="utf-8"?>
<GameData>
<!-- Table definition -->
<Table name="Routes">
<Column name="ID" type="integer" primarykey="true" autoincrement="true"/>
<Column name="Type" type="text" notnull="true" unique="true"/>
<Column name="Description" type="text"/>
<Column name="AdvancedStartCost" type="integer" default="0"/>
<Column name="Value" type="integer" default="0"/>
<Column name="Movement" type="integer" default="0"/>
<Column name="FlatMovement" type="integer" default="0"/>
<Column name="GoldMaintenance" type="integer" default="0"/>
<Column name="Industrial" type="boolean" default="false"/>
<Column name="PortraitIndex" type="integer" default="-1"/>
<Column name="IconAtlas" type="text" default="NULL" reference="IconTextureAtlases(Atlas)"/>
<Column name="Civilopedia" type="text"/>
</Table>
<Table name="Route_Yields">
<Column name="RouteType" type="text" reference="Routes(Type)"/>
<Column name="YieldType" type="text" reference="Yields(Type)"/>
<Column name="Yield" type="integer" notnull="true"/>
</Table>
<Table name="Route_TechMovementChanges">
<Column name="RouteType" type="text" reference="Routes(Type)"/>
<Column name="TechType" type="text" reference="Technologies(Type)"/>
<Column name="MovementChange" type="integer" notnull="true"/>
</Table>
<Table name="Route_ResourceQuantityRequirements">
<Column name="RouteType" type="text" reference="Routes(Type)"/>
<Column name="ResourceType" type="text" reference="Resources(Type)"/>
<Column name="Cost" type="integer" notnull="true"/>
</Table>
<!-- Table data -->
<Routes>
<Row>
<Type>ROUTE_RAILROAD</Type>
<Description>TXT_KEY_ROUTE_RAILROAD</Description>
<Value>2</Value>
<AdvancedStartCost>18</AdvancedStartCost>
<Movement>20</Movement>
<FlatMovement>6</FlatMovement>
<GoldMaintenance>2</GoldMaintenance>
<Industrial>true</Industrial>
<PrereqTech>TECH_STEAM_POWER</PrereqTech>
<Civilopedia>TXT_KEY_CIV5_IMPROVEMENTS_RAILROAD_TEXT</Civilopedia>
<PortraitIndex>41</PortraitIndex>
<IconAtlas>TERRAIN_ATLAS</IconAtlas>
</Row>
<Row>
<Type>ROUTE_ELECTRIFIED_RAILROAD</Type>
<Description>TXT_KEY_ROUTE_RAILROAD</Description>
<Value>3</Value>
<AdvancedStartCost>18</AdvancedStartCost>
<Movement>12</Movement>
<FlatMovement>3</FlatMovement>
<GoldMaintenance>2</GoldMaintenance>
<Industrial>true</Industrial>
<PrereqTech>TECH_RAILROAD</PrereqTech>
<Civilopedia>TXT_KEY_CIV5_IMPROVEMENTS_RAILROAD_TEXT</Civilopedia>
<PortraitIndex>41</PortraitIndex>
<IconAtlas>TERRAIN_ATLAS</IconAtlas>
</Row>
</Routes>
<Route_TechMovementChanges>
<Row>
<RouteType>ROUTE_ROAD</RouteType>
<TechType>TECH_MACHINERY</TechType>
<MovementChange>-10</MovementChange>
</Row>
</Route_TechMovementChanges>
<Route_Yields>
<Row>
<RouteType>ROUTE_ELECTRIFIEDRAILROAD</RouteType>
<YieldType>YIELD_FOOD</YieldType>
<Yield>0</Yield>
</Row>
</Route_Yields>
</GameData>


3. CIV5Builds_ElectrifiedRailroads.xml

<GameData>
<Builds>
<Row>
<Type>BUILD_RAILROAD</Type>
<PrereqTech>TECH_STEAM_POWER</PrereqTech>
<Time>400</Time>
<RouteType>ROUTE_RAILROAD</RouteType>
<Description>TXT_KEY_BUILD_RAILROAD</Description>
<Help>TXT_KEY_BUILD_RAILROAD_HELP</Help>
<Recommendation>TXT_KEY_BUILD_RAILROAD_REC</Recommendation>
<EntityEvent>ENTITY_EVENT_RAILROAD</EntityEvent>
<HotKey>KB_R</HotKey>
<OrderPriority>95</OrderPriority>
<AltDown>1</AltDown>
<IconIndex>25</IconIndex>
<IconAtlas>UNIT_ACTION_ATLAS</IconAtlas>
</Row>
<Row>
<Type>BUILD_ELECTRIFIED_RAILROAD</Type>
<PrereqTech>TECH_RAILROAD</PrereqTech>
<Time>400</Time>
<RouteType>ROUTE_ELECTRIFIED_RAILROAD</RouteType>
<Description>TXT_KEY_BUILD_RAILROAD</Description>
<Help>TXT_KEY_BUILD_RAILROAD_HELP</Help>
<Recommendation>TXT_KEY_BUILD_RAILROAD_REC</Recommendation>
<EntityEvent>ENTITY_EVENT_RAILROAD</EntityEvent>
<HotKey>KB_E</HotKey>
<OrderPriority>95</OrderPriority>
<IconIndex>25</IconIndex>
<IconAtlas>UNIT_ACTION_ATLAS</IconAtlas>
</Row>
</Builds>
<BuildFeatures>
<Row>
<BuildType>BUILD_ELECTRIFIED_RAILROAD</BuildType>
<FeatureType>FEATURE_JUNGLE</FeatureType>
<PrereqTech>TECH_BRONZE_WORKING</PrereqTech>
<Time>800</Time>
<Remove>false</Remove>
</Row>
<Row>
<BuildType>BUILD_ELECTRIFIED_RAILROAD</BuildType>
<FeatureType>FEATURE_FOREST</FeatureType>
<PrereqTech>TECH_MINING</PrereqTech>
<Time>600</Time>
<Remove>false</Remove>
</Row>
<Row>
<BuildType>BUILD_RAILROAD</BuildType>
<FeatureType>FEATURE_JUNGLE</FeatureType>
<PrereqTech>TECH_BRONZE_WORKING</PrereqTech>
<Time>800</Time>
<Remove>false</Remove>
</Row>
<Row>
<BuildType>BUILD_RAILROAD</BuildType>
<FeatureType>FEATURE_FOREST</FeatureType>
<PrereqTech>TECH_MINING</PrereqTech>
<Time>600</Time>
<Remove>false</Remove>
</Row>
</BuildFeatures>
</GameData>

4. CIV5TechnologiesUpdate.xml

<?xml version="1.0" encoding="utf-8"?>
<GameData>
<!-- Table definition -->
<Table name="Technologies">
<!-- Basic info -->
<Column name="ID" type="integer" primarykey="true" autoincrement="true"/>
<Column name="Type" type="text"/>
<Column name="Description" type="text" default="NULL"/>
<Column name="Civilopedia" type="text" default="NULL"/>
<Column name="Help" type="text" default="NULL"/>
<!-- Tech info -->
<Column name="AIWeight" type="integer" default="0"/>
<Column name="AITradeModifier" type="integer" default="0"/>
<Column name="Cost" type="integer" default="0"/>
<Column name="AdvancedStartCost" type="integer" default="-1"/>
<Column name="Era" type="text" default="NULL"/>
<Column name="FirstFreeUnitClass" type="text" default="NULL"/>
<Column name="FeatureProductionModifier" type="integer" default="0"/>
<Column name="WorkerSpeedModifier" type="integer" default="0"/>
<Column name="FirstFreeTechs" type="integer" default="0"/>
<Column name="EmbarkedMoveChange" type="integer" default="0"/>
<Column name="EndsGame" type="boolean" default="false"/>
<Column name="AllowsEmbarking" type="boolean" default="false"/>
<Column name="AllowsDefensiveEmbarking" type="boolean" default="false"/>
<Column name="EmbarkedAllWaterPassage" type="boolean" default="false"/>
<Column name="AllowsBarbarianBoats" type="boolean" default="false"/>
<Column name="Repeat" type="boolean" default="false"/>
<Column name="Trade" type="boolean" default="false"/>
<Column name="Disable" type="boolean" default="false"/>
<Column name="GoodyTech" type="boolean" default="false"/>
<Column name="ExtraWaterSeeFrom" type="boolean" default="false"/>
<Column name="MapCentering" type="boolean" default="false"/>
<Column name="MapVisible" type="boolean" default="false"/>
<Column name="MapTrading" type="boolean" default="false"/>
<Column name="TechTrading" type="boolean" default="false"/>
<Column name="GoldTrading" type="boolean" default="false"/>
<Column name="OpenBordersTradingAllowed" type="boolean" default="false"/>
<Column name="DefensivePactTradingAllowed" type="boolean" default="false"/>
<Column name="ResearchAgreementTradingAllowed" type="boolean" default="false"/>
<Column name="TradeAgreementTradingAllowed" type="boolean" default="false"/>
<Column name="PermanentAllianceTradingAllowed" type="boolean" default="false"/>
<Column name="BridgeBuilding" type="boolean" default="false"/>
<Column name="WaterWork" type="boolean" default="false"/>
<Column name="GridX" type="integer" default="0"/>
<Column name="GridY" type="integer" default="0"/>
<Column name="Quote" type="text" default="NULL"/>
<Column name="PortraitIndex" type="integer" default="-1"/>
<Column name="IconAtlas" type="text" default="NULL" reference="IconTextureAtlases(Atlas)"/>
<Column name="AudioIntro" type="text" default="NULL"/>
<Column name="AudioIntroHeader" type="text" default="NULL"/>
</Table>
<Table name="Technology_DomainExtraMoves">
<Column name="TechType" type="text" reference="Technologies(Type)"/>
<Column name="DomainType" type="text" reference="Domains(Type)"/>
<Column name="Moves" type="integer"/>
</Table>
<Table name="Technology_Flavors">
<Column name="TechType" type="text" reference="Technologies(Type)"/>
<Column name="FlavorType" type="text" reference="Flavors(Type)"/>
<Column name="Flavor" type="integer"/>
</Table>
<Table name="Technology_ORPrereqTechs">
<Column name="TechType" type="text" reference="Technologies(Type)"/>
<Column name="PrereqTech" type="text" reference="Technologies(Type)"/>
</Table>
<Table name="Technology_PrereqTechs">
<Column name="TechType" type="text" reference="Technologies(Type)"/>
<Column name="PrereqTech" type="text" reference="Technologies(Type)"/>
</Table>
<!-- Table data -->
<Technology_PrereqTechs>
<Row>
<TechType>TECH_RAILROAD</TechType>
<PrereqTech>TECH_STEAM_POWER</PrereqTech>
</Row>
<Row>
<TechType>TECH_RAILROAD</TechType>
<PrereqTech>TECH_DYNAMITE</PrereqTech>
</Row>
<Row>
<TechType>TECH_RAILROAD</TechType>
<PrereqTech>TECH_ELECTRICITY</PrereqTech>
</Row>
</Technology_PrereqTechs>
</GameData>

5. CIV5Units_WorkerUpdate2.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Created by ModBuddy on 8/5/2012 5:36:51 AM -->
<GameData>
<!--Updates worker unit to use additional tile improvements-->
<Unit_Builds>
<Row>
<UnitType>UNIT_WORKER</UnitType>
<BuildType>BUILD_ELECTRIFIED_RAILROAD</BuildType>
</Row>
</Unit_Builds>
</GameData>

Thank you very much in advance and sorry for the length of the post guys!
 
First of all, use [CODE][/CODE] blocks to post your code. It preserves spacing and looks way cleaner.
Code:
--This is some code in a code block
local myvar = 3
Spoiler :

It looks like this in the comment-editor:

[CODE]
--This is some code in a code block
local myvar = 3
[/CODE]



From what I noticed (on a first glance) is that in some cases you try to redefine several tables that already exist, which will throw errors. For example:
Code:
<Table name="Technology_DomainExtraMoves">
<Column name="TechType" type="text" reference="Technologies(Type)"/>
<Column name="DomainType" type="text" reference="Domains(Type)"/>
<Column name="Moves" type="integer"/>
</Table>

An error in a file will usually cause the game to discard all of the contents of that file, which is probably why your electric railroad does not show up whatsoever.

If you enable logging (view whoward69's tutorial for that), you would've probably found this error out in one of the log files. (More specifically, either in the Database.log or xml.log)



---
NOTE: Modding routes (E.g. railroads/roads/upgrades for those) is something interesting. IIRC, all routes with a higher ID will have all properties of a route with a lower ID. In your case, this is exactly what you want (i.e. the electric railroad having all properties of a normal railroad and road). However, if you wish to have a route-Unique Improvement you might run into issues, though it's not applicable in your case.
 
Thank you for the advice, Troller! Sorry for taking so long to answer but I've been busy this weekend. So, I deleted all the definitions to no effect, but one thing I do notice is that the icon for building railroads now actually appears before the railroads technology in game, only it's greyed out until I research it. One Thing I think is important here is that I never actually found a prereq tech field in the vanilla routes file, so I just put it there (like in the improvements one) and expected it to work. I didn't realize yet where the game actually specifies the needed techs for road or railroad, so I think any mod that edits them would be really helpful. (please send me a link if you know of any) I will definitely check whoward69's tutorial to perform some bugfixing, but if anyone can help me either: 1. find the vanilla xml that defines prereq techs for roads and railroads (it's not the CIV5routes xml in misc), 2. give me a link to a mod that alters routes in any way or 3. give me a link to a tutorial on creating custom improvements (I only found one dealing with buildings) I'd be really grateful! Cheers!
 
Table <Builds> both specifies the prerequisite technology and defines the worker (or other unit) action that constructs the improvement.
Spoiler :
Code:
	<Builds>
		<Row>
			<Type>BUILD_ROAD</Type>
			<PrereqTech>TECH_THE_WHEEL</PrereqTech>
			<Time>400</Time>
			<RouteType>ROUTE_ROAD</RouteType>
			<Description>TXT_KEY_BUILD_ROAD</Description>
			<Help>TXT_KEY_BUILD_ROAD_HELP</Help>
			<Recommendation>TXT_KEY_BUILD_ROAD_REC</Recommendation>
			<EntityEvent>ENTITY_EVENT_SHOVEL</EntityEvent>
			<HotKey>KB_R</HotKey>
			<CtrlDownAlt>1</CtrlDownAlt>
			<OrderPriority>95</OrderPriority>
			<IconIndex>24</IconIndex>
			<IconAtlas>UNIT_ACTION_ATLAS</IconAtlas>
		</Row>
		<Row>
			<Type>BUILD_RAILROAD</Type>
			<PrereqTech>TECH_RAILROAD</PrereqTech>
			<Time>400</Time>
			<RouteType>ROUTE_RAILROAD</RouteType>
			<Description>TXT_KEY_BUILD_RAILROAD</Description>
			<Help>TXT_KEY_BUILD_RAILROAD_HELP</Help>
			<Recommendation>TXT_KEY_BUILD_RAILROAD_REC</Recommendation>
			<EntityEvent>ENTITY_EVENT_RAILROAD</EntityEvent>
			<HotKey>KB_R</HotKey>
			<OrderPriority>95</OrderPriority>
			<AltDown>1</AltDown>
			<IconIndex>25</IconIndex>
			<IconAtlas>UNIT_ACTION_ATLAS</IconAtlas>
		</Row>
		<Row>
			<Type>BUILD_FARM</Type>
			<PrereqTech>TECH_AGRICULTURE</PrereqTech>
			<Time>700</Time>
			<ImprovementType>IMPROVEMENT_FARM</ImprovementType>
                           ....etc
Even if you work through all the xml-related issues there is no real guaranttee you'll successfully add a new type of route. I'm not sure if Future Worlds adds a new type of route or not. Other than that I am drawing a blank on what other mod might have succeeded in adding a new type of route.
 
Back
Top Bottom