I made a script to change research costs. It works for me, not sure if it works for others. It's VBscript, so should work under any windows, i didn't need to install anything (new) to get it to run on Windows 8
EDIT: Also check the post below for alternative Research cost formula (fast start, slower middle and end game)
EDIT2: Included "TechDefs.xml" and "PirateTechDefs.xml"
EDIT3: as a result of a post by rspiccaver (https://forums.galciv3.com/467114/page/1/), this script now uses an exponential growth model for the tech cost. GalCiv3 already used exponential growth for research costs, so things are closer to Stardocks design like this, only differance is that you can now choose how fast that research cost grows.
EDIT4: cleaned up the code, improved comments
------- copy/paste everything below this line -------
'Disclaimer: I can't program, so the code is noobish, but it does the job
'The tech cost will follow the same exponential growth that Stardock use for the techs
'The only differance is that you can make that growth steeper or shallower with this script
'How much steeper is your choice, it depends on the number of habitable planets and your tastes
'Much steeper growth is recommended for larger maps with many habitable planets
'A bit steeper is recommended for maps with a handful of habitable planets
'1) Save this as a .vbs file (visual basic script)
'2) Place file into a "My documents\GalCiv3\Mods\xxx\Game" folder, xxx=name of mod
'3) Copy/paste all *TechDefs.xml files into same folder
'4) Adjust EndGameResearchMultiplier to a desired value (a few lines down)
'5) Run script once, it takes a few seconds to do all the changes
'If there were no errors, all techs should have their research costs adjusted
'-----------------------------------xxxx-----------------------------------
'How many times more expensive do you want the END-GAME technology to be?
Const EndGameResearchMultiplier = 20
'-----------------------------------xxxx-----------------------------------
Const NumberOfFiles = 10
Dim FilesToOpen()
ReDim FilesToOpen(NumberOfFiles)
' --- List of files to change
FilesToOpen(0) = "AltarianTechDefs.xml"
FilesToOpen(1) = "DrenginTechDefs.xml"
FilesToOpen(2) = "IconianTechDefs.xml"
FilesToOpen(3) = "IridiumTechDefs.xml"
FilesToOpen(4) = "KrynnTechDefs.xml"
FilesToOpen(5) = "TerranTechDefs.xml"
FilesToOpen(6) = "ThalanTechDefs.xml"
FilesToOpen(7) = "YorTechDefs.xml"
FilesToOpen(8) = "TechDefs.xml"
FilesToOpen(9) = "PirateTechDefs.xml"
Const TechBaseCost = 29
Const DeepestTechTier = 9
Const ExponentialGrowthValue = 0.3715
Const TristateFalse = 0
Const ForReading = 1
Const ForWriting = 2
Dim objFSO, objFile, strText, floatResearchModifier
Dim intPosition1, intPosition2, strLeft, strRight, intCost, intTemp(5)
' --- Preparations
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
intPosition1 = 1
floatResearchModifier = Log(EndGameResearchMultiplier*TechBaseCost) / (ExponentialGrowthValue * DeepestTechTier)
' --- Start
For i = 1 to NumberOfFiles
' ---- Open a file
Set objFile = objFSO.OpenTextFile ( FilesToOpen(i-1), ForReading, False, TriStateFalse)
strText = objFile.ReadAll( )
objFile.Close
' ---- Modify content
'--the loop uses "exit do" to break out when the end of the file is reached
Do
intPosition1 = InStr(intPosition1, strText, "<ResearchCost>")+Len("<ResearchCost>")
intPosition2 = InStr(intPosition1, strText, "</ResearchCost>")
strLeft = Left(strText, intPosition1-1)
strRight = Mid(strText, intPosition2, Len(strText))
intCost = Mid(strText, intPosition1, intPosition2-intPosition1)
'--when the file reaches the end it restarts from the beginning, that turns intCost into a string
if isNumeric(intCost) = False Then
exit Do
'WScript.Echo " pos1=" & intPosition1 & " pos2=" & intPosition2 '-for debugging
End If
'--when a tech cost larger than zero is located, do this
if intCost > 0 Then
'--determine tech tier (by using three averages and then round off to closest integer)
intTemp(0) = Log(intCost / (TechBaseCost*0.9)) / ExponentialGrowthValue
intTemp(1) = Log(intCost / (TechBaseCost)) / ExponentialGrowthValue
intTemp(2) = Log(intCost / (TechBaseCost*1.1)) / ExponentialGrowthValue
intTemp(3) = Round((intTemp(0)+intTemp(1)+intTemp(2))/3, 0)
'--determine if research has + or - 10% to it by comparing the three cases to the calculated tech tier
If ABS(intTemp(3)-intTemp(0)) > ABS(intTemp(3)-intTemp(1)) Then
If ABS(intTemp(3)-intTemp(1)) > ABS(intTemp(3)-intTemp(2)) Then
intTemp(4) = 1.1
Else
intTemp(4) = 1
End If
Else
intTemp(4) = 0.9
End If
'--tier and modifier are now known, calculate the new research cost and round down
intCost = Round(intTemp(4)*TechBaseCost*EXP(ExponentialGrowthValue*intTemp(3)*floatResearchModifier)-0.5)
'--replace old cost with new
strText = strLeft + CStr(intCost) + strRight
End If
Loop
' ---- Save the file
'Set objFile = objFSO.OpenTextFile ( "test.xml", ForWriting, True, TriStateFalse) '-for debugging
Set objFile = objFSO.OpenTextFile ( FilesToOpen(i-1), ForWriting, True, TriStateFalse)
objFile.Write strText
objFile.Close
Next
WScript.Echo "Finished"
WScript.Quit 1