Realism Invictus

Something does indeed seem to be bugged. On SVN 5508, I loaded a quick test as Crimea, and, though the scenario did actually load this time, I had no units whatsoever, and all AI civs had 0 score and an even delta of (+10,000) or something like that. I should have taken a screenshot at the time, but alas, I did not. Thinking that Crimea itself may just have had no units by intention for some reason, I tried to load it as Austria on another attempt this morning, since I know that they do. It once again got snagged on Setup Map indefinitely, and I ended up having to restart my PC to get around it.

Looking at the error log, I believe this is because I may have manually enabled revolutions in the scenario file previously and this is incompatible with your fix. I'm not sure that that would have any bearing on the units not appearing for Crimea, however (unless that was somehow by design).

It seems that .log files can't be attached directly, so here is the raw text with a timestamp from this morning, so it should contain the failure with loading the scenario.

Spoiler :

sys.path = ['..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\email', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\encodings', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\build', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\lib', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\py', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\tools', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\lib\\colourchooser', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\lib\\editor', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\lib\\floatcanvas', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\lib\\masked', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\lib\\mixins', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\lib\\ogl', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\af', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\ca', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\cs', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\da', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\de', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\el', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\es', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\eu', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\fi', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\fr', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\hi', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\hu', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\id', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\it', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\ja', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\lv', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\nb', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\nl', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\pl', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\pt_BR', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\ru', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\sl', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\sv', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\tr', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\uk', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\zh_CN', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\zh_TW', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\af\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\ca\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\cs\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\da\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\de\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\el\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\es\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\eu\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\fi\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\fr\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\hi\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\hu\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\id\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\it\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\ja\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\lv\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\nb\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\nl\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\pl\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\pt_BR\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\ru\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\sl\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\sv\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\tr\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\uk\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\zh_CN\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\locale\\zh_TW\\LC_MESSAGES', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\py\\tests', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\tools\\XRCed', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM\\wx\\tools\\XRCed\\src-images', '..\\WARLORDS\\ASSETS\\PYTHON\\SYSTEM']

sys.modules = {'zipimport': <module 'zipimport' (built-in)>, 'signal': <module 'signal' (built-in)>, '__builtin__': <module '__builtin__' (built-in)>, 'sys': <module 'sys' (built-in)>, '__main__': <module '__main__' (built-in)>, 'exceptions': <module 'exceptions' (built-in)>, 'CvPythonExtensions': <module 'CvPythonExtensions' (built-in)>}

sys.builtin_module_names = ('CvPythonExtensions', '__builtin__', '__main__', '_bisect', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_csv', '_heapq', '_hotshot', '_locale', '_multibytecodec', '_random', '_sre', '_subprocess', '_symtable', '_weakref', '_winreg', 'array', 'audioop', 'binascii', 'cPickle', 'cStringIO', 'cmath', 'collections', 'datetime', 'errno', 'exceptions', 'gc', 'imageop', 'imp', 'itertools', 'marshal', 'math', 'md5', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'regex', 'rgbimg', 'sha', 'signal', 'strop', 'struct', 'sys', 'thread', 'time', 'xxsubtype', 'zipimport')
load_module CvEventInterface
load_module BugEventManager
load_module CvEventManager
load_module CvUtil
load_module traceback
load_module CvScreensInterface
load_module CvMainInterface
load_module ScreenInput
load_module CvScreenEnums
load_module time
load_module Revolutions
load_module BugUtil
load_module ColorUtil
load_module BugDll
load_module BugOptions
load_module BugConfig
load_module BugCore
load_module BugInit
load_module BugPath
load_module BugConfigTracker
load_module shutil
load_module BugTypes
load_module xmllib
..\WARLORDS\ASSETS\PYTHON\SYSTEM\xmllib.py:9: DeprecationWarning: The xmllib module is obsolete. Use xml.sax instead.
11:03:12 DEBUG: BugConfig - registering xml handler BugConfig.RootHandler
11:03:12 DEBUG: BugConfig - registering bug handler BugConfig.BugHandler
11:03:12 DEBUG: BugConfig - registering load handler BugConfig.LoadHandler
11:03:12 DEBUG: BugConfig - registering config handler BugConfig.ConfigHandler
11:03:12 DEBUG: BugConfig - registering arg handler BugConfig.ArgHandler
load_module configobj
load_module __future__
load_module codecs
load_module validate
validate import failed
load_module BugOptionsScreen
load_module BugErrorOptionsTab
load_module BugOptionsTab
load_module BugHelp
load_module Popup
11:03:12 INFO : BugCore - creating uninitialized mod Core
11:03:12 INFO : BugCore - creating uninitialized mod MainInterface
load_module FontUtil
load_module CityUtil
11:03:12 INFO : BugCore - creating uninitialized mod NJAGC
11:03:12 INFO : BugCore - creating uninitialized mod Scores
11:03:12 INFO : BugCore - creating uninitialized mod CityScreen
load_module ReligionUtil
11:03:12 INFO : BugCore - creating uninitialized mod PLE
load_module Scoreboard
load_module DealUtil
load_module PlayerUtil
load_module TradeUtil
load_module DiplomacyUtil
load_module AttitudeUtil
load_module GameUtil
load_module BugUnitPlot
load_module MonkeyTools
load_module PyHelpers
load_module UnitUtil
load_module ReminderEventManager
load_module SdToolKit
load_module BugData
load_module cPickle
load_module autolog
load_module CvModName
11:03:12 INFO : BugCore - creating uninitialized mod Autolog
11:03:12 INFO : BugCore - creating uninitialized mod Reminder
load_module CvAppInterface
load_module GGUtil
load_module GPUtil
load_module ProgressBarUtil
load_module PLE
load_module AStarTools
load_module RawYields
load_module CvTechChooser
load_module math
load_module PyTechGraph
11:03:12 INFO : BugCore - creating uninitialized mod Advisors
load_module TechPrefs
load_module CvForeignAdvisor
load_module CvExoticForeignAdvisor
load_module IconGrid_BUG
load_module DomPyHelpers
load_module TechTree
load_module FavoriteCivicDetector
load_module CvReligionScreen
load_module CvCivicsScreen
load_module CvVictoryScreen
load_module TechUtil
load_module CvEspionageAdvisor
load_module CvPopulationAdvisor
load_module CvOptionsScreen
load_module CvReplayScreen
load_module CvHallOfFameScreen
load_module CvDanQuayle
load_module CvGameUtils
load_module Consts
load_module CvUnVictoryScreen
load_module CvDawnOfMan
load_module Buffy
11:03:12 INFO : BugCore - creating uninitialized mod BUFFY
load_module GameSetUpCheck
load_module AutoSave
load_module MapFinder
load_module MapFinderStatusScreen
11:03:12 INFO : BugCore - creating uninitialized mod MapFinder
11:03:12 INFO : BugCore - creating uninitialized mod AutoSave
load_module CvTechSplashScreen
load_module CvTopCivs
load_module random
load_module CvInfoScreen
load_module CvIntroMovieScreen
load_module CvVictoryMovieScreen
load_module CvWonderMovieScreen
load_module CvEraMovieScreen
load_module CvSpaceShipScreen
load_module CvDebugTools
load_module CvDebugInfoScreen
load_module CvMapGeneratorUtil
load_module CvGFCScreen
load_module CvPopupInterface
load_module CvScreenUtilsInterface
load_module CvOverlayScreenUtils
load_module CvDotMapOverlayScreen
load_module CvStrategyOverlay
11:03:12 INFO : BugCore - creating uninitialized mod StrategyOverlay
load_module CvGreatPersonScreen
load_module GreatPersonNaming
load_module RandomNameUtils
11:03:12 INFO : BugCore - creating uninitialized mod CustDomAdv
11:03:12 INFO : BugCore - creating uninitialized mod TechWindow
load_module CvPlatyBuilderScreen
load_module WBPlotScreen
load_module WBEventScreen
load_module WBCityEditScreen
load_module WBBuildingScreen
load_module WBCityDataScreen
load_module WBPlayerScreen
load_module WBProjectScreen
load_module WBTeamScreen
load_module WBTechScreen
load_module WBPlayerUnits
load_module WBUnitScreen
load_module WBPromotionScreen
load_module WBInfoScreen
load_module WBReligionScreen
load_module WBGameDataScreen
load_module WBCorporationScreen
load_module WBDiplomacyScreen
load_module WBTradeScreen
load_module CvCameraControls
load_module CvAdvisorUtils
load_module DynamicCityNaming
load_module StoredData
load_module DynamicCivNaming
load_module BarbCiv
load_module IDW
load_module AheadOfTime
load_module InputUtil
load_module CvAirCombatExperienceEventManager
11:03:12 DEBUG: BugUtil - extending BugEventManager.preGameStart instead CvAppInterface
11:03:12 DEBUG: BugEventManager - adding event 'PreGameStart'
11:03:12 DEBUG: BugEventManager - adding event 'BeginActivePlayerTurn'
11:03:12 DEBUG: BugEventManager - adding event 'SwitchHotSeatPlayer'
11:03:12 DEBUG: BugEventManager - adding event 'LanguageChanged'
11:03:12 DEBUG: BugEventManager - adding event 'ResolutionChanged'
11:03:12 DEBUG: BugEventManager - adding event 'PythonReloaded'
11:03:12 DEBUG: BugEventManager - adding event 'unitUpgraded'
11:03:12 DEBUG: BugEventManager - adding event 'unitCaptured'
11:03:12 DEBUG: BugEventManager - adding event 'combatWithdrawal'
11:03:12 DEBUG: BugEventManager - adding event 'combatRetreat'
11:03:12 DEBUG: BugEventManager - adding event 'combatLogCollateral'
11:03:12 DEBUG: BugEventManager - adding event 'combatLogFlanking'
11:03:12 WARN : BugEventManager - event 'playerRevolution' already defined
11:03:12 DEBUG: BugInit - game not fully initialized
PY:OnInit




If it's not too much of an ask, could the border requirement for vassalization be wrapped behind an option in the menu? I don't particularly like this idea, for the same reasons as Noyyau; it feels somewhat forced and dissonant with both reality and valid gameplay situations where the ability to peace-vassalize away from borders makes good sense. (I do like the idea of making it more "sticky" however.)

What about the Hapsburg's dominion over the Low Countries and Naples, flanking France and the Papacy far away from Spain proper (and I hear you about to say that they technically controlled the Holy Roman Empire at this time, too, but I think you know what I mean)? What about, later in the game, the USA's Monroe Doctrine on South America without direct control (or any other Victorian era gunboat diplomacy of the time for control of resources, just as non-contiguous vassals provide in-game), or the spheres of influence in the Cold War which in many cases were patchworks of political geography far away from those pulling the strings? I think that for the already quite limited range of diplomatic options we have in the game, vassals satisfyingly model a number of things that a strict border requirement would mitigate even further.
Unfortunately, balancing every aspect is extremely difficult, but I believe that — from a gameplay perspective — vassalizing a country that is too far away doesn’t make much sense and mostly benefits the human player.
It’s one thing to attack a vassal state in America that’s protected by Spain, and another thing entirely if its overlord is right next door or at least nearby. Maybe in the modern era, or from the mid-1800s onward, it could make some sense because distances become less relevant — but before that, it feels a bit unrealistic.
Keep in mind that the system you're planning to implement will most likely cause a state to become a vassal of its invader before being completely destroyed or turned into a zombie civ. That alone should already lead to non-capitulated vassals forming between neighboring countries.
Still, I believe it’s inevitable that if China invades a European country, and that country starts collapsing, it will have to submit — as a vassal — before being fully capitulated.
But it’s also true that, for China, attacking a country like Spain — which has France and Italy as vassals — becomes much more complicated, especially if those vassal states are still competitive.
Let’s be honest — it takes a lot of imagination :) to believe that an AI civ would vassalize for the strategic reasons you mentioned. It would be amazing if that were the case, but in reality, vassalization doesn’t follow any kind of plan or logic.
It’s simply a nation on the brink of collapse, offering itself to anyone willing to take it. There’s no real strategy behind it — no long-term diplomacy, no calculated protection deal. Just pure desperation.That said, I really think the attempt to give it some logic is a great first step. It's not about making the AI perfect — just about pushing it toward more coherent and interesting behavior.
 
Last edited:
Can you take a screenshot of your world map around 40% into the game? And what difficulty level do you play on? Also, do you play with separatism enabled? I like this test – I want to understand how much my changes affect it as well. Thanks!"

Here is a screenshot of my game at turn 1000. I'm playing at Noble difficulty and I do have Separatism activated.


Spoiler :

Civ4ScreenShot0565.JPG






I will try bringing down the AI vassalization threshold, but with some additional changes to the AI itself - I'll disallow AI to peace-vassalize itself to someone it doesn't border (that simply makes no sense if going for someone's protection) and I'll make AI vassals more "sticky" by having separate power thresholds for suggesting to become someone's vassal and for breaking it off.

Yeah the constant "jumping from one master to another" is a bit weird, I noticed it in my game too. But having a distant vassal isn't something I would consider problematic : as it was said, the sheer amount of fear a master can create protect the vassal, even if the master has no real intention to waste soldiers on defending it's vassal.

I'm not sure the AI could do it, but for the human, distant vassals are also a nice strategy. In my game, Asia is WILD and there are a few Civ trying to take the whole area by strenght. By accepting to become the master of one of the loosing Civ, I've added my weight in the battle (kinda) and made Cao Cao stop his invasion, preventing him from overruning the whole place and becoming a world-power. I would find it disappointing that it becomes 100% impossible to do (but it could make sense that AI considers distance as a factor to accept/break vassality).

In my mind, I'm always considering vassal like some kind of mariage schenanigans. Not a real oath of feodalty from the Middle-Age, but more like a "marry your daughter to the other ruler's son or cousin". Kinda like an early, more one-sided Alliance Pact.

Does that mean, it is possible to activate separatism for World Map scenarios?

Yes you just have to go "single player -> custom scenario" and you can open up your desired scenario with all the options to tick on or off.

On that point : perhaps the best compliment I can give to Walter's balancing is that I saw the time I spend changing the default options on a new game decrease with each new version of the mod. I'm not far from the point where I could just go with a "Play Now!" game and be happy with it :bounce:
 
Something does indeed seem to be bugged. On SVN 5508, I loaded a quick test as Crimea, and, though the scenario did actually load this time, I had no units whatsoever, and all AI civs had 0 score and an even delta of (+10,000) or something like that. I should have taken a screenshot at the time, but alas, I did not. Thinking that Crimea itself may just have had no units by intention for some reason, I tried to load it as Austria on another attempt this morning, since I know that they do. It once again got snagged on Setup Map indefinitely, and I ended up having to restart my PC to get around it.
It is absolutely, definitely on your side then. I just spent a fair amount of time fine-tuning and autoplaying that very same scenario today, and it worked fine. I suspect it is just failing to update properly for you - delete the modified file and update.
It seems that .log files can't be attached directly, so here is the raw text with a timestamp from this morning, so it should contain the failure with loading the scenario.
As with any other file, just zip it. Also, wrong log file, not the one I requested.
What about the Hapsburg's dominion over the Low Countries and Naples, flanking France and the Papacy far away from Spain proper (and I hear you about to say that they technically controlled the Holy Roman Empire at this time, too, but I think you know what I mean)? What about, later in the game, the USA's Monroe Doctrine on South America without direct control (or any other Victorian era gunboat diplomacy of the time for control of resources, just as non-contiguous vassals provide in-game), or the spheres of influence in the Cold War which in many cases were patchworks of political geography far away from those pulling the strings? I think that for the already quite limited range of diplomatic options we have in the game, vassals satisfyingly model a number of things that a strict border requirement would mitigate even further.
For each such example, we have an actual Scotland peace-vassalizing to Fatimids in the Crusades scenario, or France pledging to Japan on the world map. To me, subjectively, it makes sense if vassals only pledge peacefully to someone they can reach (also technically I'd say your Habsburg examples are moot because they got all their mentioned possessions through inheritance rather than someone voluntarily pledging to become a subject).

That said, I'm not 100% married to this idea. It just felt a reasonable change that led to more realistic gameplay outcomes.
Does that mean, it is possible to activate separatism for World Map scenarios?
Always could. Very much not recommended.
In addition, as you're going to tweak World Map Huge, can we expect balancing changes for the Large one as well?
Already did. Though TBH it was much better balanced already, if only by virtue of being more compact.
On that point : perhaps the best compliment I can give to Walter's balancing is that I saw the time I spend changing the default options on a new game decrease with each new version of the mod. I'm not far from the point where I could just go with a "Play Now!" game and be happy with it :bounce:
Somebody is just reaching the "acceptance" stage :lol:
 
Haha, perhaps ! :D

In retrospect I'm not sure how much the changes you made weighted in that new habit of mine, and how much it just was me "adapting" to how the game should be played.
For exemple I used to hate the "city can switch peacefully because of culture" because I was building almost nothing with :culture: and never played with artists / culture slider (as I had a hard enough time dealing with tiles improvements and warfare + some old hate for culture from Vanilla where I often won a not-intended cultural victory while I was aiming for the spaceship).

Now I'm trying to pay more attention to culture generation and my cities don't revolt due to foreign influence every turn, so I don't feel the need to tick out that option at start anymore.

*gasp*
Perhaps I am getting good !
*happy roll near the fire*
 
That said, I'm not 100% married to this idea. It just felt a reasonable change that led to more realistic gameplay outcomes.
What's the nuance around bordering? If there's a one-tile gap between our borders, will that prevent someone from vassalizing? Will they need to be bordering my civ specifically, or can I also vassalize the neighbor of an existing vassal? If a civ that I share a one-tile border with capitulates to me, and I temporarily lose that border (say the city is conquered, or a 3rd neighboring civ takes cultural ownership of the tile I used to border), will that end the capitulation? Do I have to declare war to re-gain their vassalage?

Somebody is just reaching the "acceptance" stage :lol:
There's an acceptance stage? :confused::lol:

That joke made, I have come around to your way of thinking about Civil Religion's balance and appreciate it for what it is.
Religion still needs to spread faster and/or missionaries need to become available earlier and/or religion needs to spread into cities until they have 2 or 3 religions, 'cause not getting access to rabbi/magi/sage/solar priest/swami until early medieval era, and monasteries being discontinued at the end of the medieval era, and missionaries having a limit of 1 or 2, really bites. All while Acariya, imams, and christian missionaries have a limit of 3-6!
 
What's the nuance around bordering? If there's a one-tile gap between our borders, will that prevent someone from vassalizing? Will they need to be bordering my civ specifically, or can I also vassalize the neighbor of an existing vassal? If a civ that I share a one-tile border with capitulates to me, and I temporarily lose that border (say the city is conquered, or a 3rd neighboring civ takes cultural ownership of the tile I used to border), will that end the capitulation? Do I have to declare war to re-gain their vassalage?
The check is literally whether AI_getAdjacentLandPlots(eTeam) == 0 or not. I love the nuanced questions though, as they imply you knew the previous conditions well (which were the exact same one I mentioned plus the player must have a city on the same continent as vassal's capital, so all I did was required both are true instead of one).
There's an acceptance stage? :confused::lol:
Not everyone reaches it, of course. Lots of bargaining going on here... :mischief: Just grateful for people not being stuck at "Anger"!
 
The check is literally whether AI_getAdjacentLandPlots(eTeam) == 0 or not. I love the nuanced questions though, as they imply you knew the previous conditions well (which were the exact same one I mentioned plus the player must have a city on the same continent as vassal's capital, so all I did was required both are true instead of one).
You might be giving me too much credit, because I wasn't aware of any previous conditions beyond "can't currently be a vassal" and area/population comparisons. :P I'm just worried that requiring a direct border between vassal and master civ leads to frequent unrealistic and impractical edge cases. It also removed the possibility of vassalage meaningfully contributing towards a domination victory (though in practice I never saw that happen anyway).
 
You might be giving me too much credit, because I wasn't aware of any previous conditions beyond "can't currently be a vassal" and area/population comparisons. :P I'm just worried that requiring a direct border between vassal and master civ leads to frequent unrealistic and impractical edge cases.
I was just illustrating the point that whatever edge cases were there, they were there all the time, as all I did was swap an "or" to an "and" in the code. To answer your questions more directly, "yes" to the first one, "I don't know" to the rest. And force-vassalization doesn't break period, unless you've been reduced in territory to half what you were yourself.
It also removed the possibility of vassalage meaningfully contributing towards a domination victory (though in practice I never saw that happen anyway).
I don't think so, as it in force-vassalizing case it shouldn't be a factor at all - if you're successful enough in a war, you're a priori having a shared border, as you took one or more of their cities.
 
I was just illustrating the point that whatever edge cases were there, they were there all the time, as all I did was swap an "or" to an "and" in the code. To answer your questions more directly, "yes" to the first one, "I don't know" to the rest. And force-vassalization doesn't break period, unless you've been reduced in territory to half what you were yourself.
Ahh, okay. I misunderstood that all you were doing was that conditional switch. I thought that AI_getAdjacentLandPlots(eTeam) == 0 was something being added. Thanks for the answers. I apologize if the questions came off pedantic. The change feels like it might be significant in terms of balance and game options. I'll start a new game to see how it plays out.

I don't think so, as it in force-vassalizing case it shouldn't be a factor at all - if you're successful enough in a war, you're a priori having a shared border, as you took one or more of their cities.
Good point, didn't consider that. Though being able to accept voluntary vassalage from for away civs is a heavy contributor to the theoretical end game, but also far too theoretical to be worth balancing against practical and enjoyable gameplay, I guess.

From the changelog:
- Maybe nothing, maybe a very serious bugfix (limited war preparation plans might never actually get cancelled before, no matter what happened, unlike total war preparations - I am not sure whether it impacted anything)
Would that possibly have contributed to this war preparation constant? :P
Screenshot 2025-08-10 at 5.32.03 PM.png
 
Ahh, okay. I misunderstood that all you were doing was that conditional switch. I thought that AI_getAdjacentLandPlots(eTeam) == 0 was something being added. Thanks for the answers. I apologize if the questions came off pedantic. The change feels like it might be significant in terms of balance and game options. I'll start a new game to see how it plays out.
Good point, didn't consider that. Though being able to accept voluntary vassalage from for away civs is a heavy contributor to the theoretical end game, but also far too theoretical to be worth balancing against practical and enjoyable gameplay, I guess.
And that is really all I'm asking for at this point - test and see if it makes it better or worse. And I am absolutely not mad at someone trying to think about the edge cases; it's more of a case of certain mechanics in Civ 4 not being explained enough by the game itself, so much so that they can't be figured out without reading the code.
Would that possibly have contributed to this war preparation constant? :P
As I wrote, it might have. Or it might simply be how K-Mod's AI functions, always preparing for the next war. All I know is the exit clause for exiting limited war preparation plan was there, but there was no actual command to discontinue the preparation, and two other similar clauses for other war type plans had those - so I feel that it should fix something, in theory, unless I missed something else in the code (which is not impossible, as war plan AI code is really convoluted).
 
  • Like
Reactions: [Y]
I don't think debug tools explicitly show WARPLAN_ of a given AI player, so the answer is "I don't know". What this may realistically have led to, though, before being fixed, is AI declaring wars on civs that were stronger to them as it started preparing when the situation was different and failed to cancel preparations for that war when it changed. But again, all just conjecture on my part.
 
I don't think so, as it in force-vassalizing case it shouldn't be a factor at all - if you're successful enough in a war, you're a priori having a shared border, as you took one or more of their cities.
Take this comment as just me being pedantic/insistent/annoying, as for the AI it will work almost always as you say, but war success does not a priori mean conquered and kept cities: I might raze several to eliminate enemy cultural control on those tiles/areas, or to resettle those cities later in better spots.
 
Take this comment as just me being pedantic/insistent/annoying, as for the AI it will work almost always as you say, but war success does not a priori mean conquered and kept cities: I might raze several to eliminate enemy cultural control on those tiles/areas, or to resettle those cities later in better spots.
Are you also seeking to force-vassalize in those situations?
 
Another consideration: This might prevent the desired situation of a losing civ getting protection from a neighbor because their borders are 1 tile apart, or because the invading civ happened to first conquer the city that was on the border. As a player it's definitely abusable, since I can plan to remove the enemy civ's potential vassalizations early on. For civs on a peninsula that don't have much of a border to begin with, it may well just remove the option to vassalize for protection entirely if their only neighbor is the attacker.

I'm trying to get a decent new game going, but with the last update the crash-to-desktop-on-exiting-to-main-menu problem is back. Even with all the movie files in the movie directory gone, it still happens. Are there any other unnecessary files I can remove to bring down the total asset size?

Edit: Of course after 10 crashes, I finally bring it up here, and in the next game I'm able to exit to the main menu without a crash. The power of complaining is so very evident!

Edit 2: Of course, as soon as I champion these powers in the above edit, the game crashes anyway from a memory allocation error. :twitch: I withdraw my exaltation of complaining.
 
Last edited:
I'm trying to get a decent new game going, but with the last update the crash-to-desktop-on-exiting-to-main-menu problem is back. Even with all the movie files in the movie directory gone, it still happens. Are there any other unnecessary files I can remove to bring down the total asset size?
Actually yes, I think you can try something and see if it works. Measure the total size of "Realism" folder - it'll be higher than you think due to SVN service files being present. I wonder if these also get indexed and thus impact the issue. "Clean up" in TortoiseSVN has a "Vacuum pristine copies" option that should kill a lot of those files (compare the folder size before and after) - I wonder if it may help.
 
Actually yes, I think you can try something and see if it works. Measure the total size of "Realism" folder - it'll be higher than you think due to SVN service files being present. I wonder if these also get indexed and thus impact the issue. "Clean up" in TortoiseSVN has a "Vacuum pristine copies" option that should kill a lot of those files (compare the folder size before and after) - I wonder if it may help.
Hrm. TortoiseSVN isn't available for macs, sadly. So far I've been getting by with Git's `git-svn` command, which has been working very smoothly, but that could potentially affect things too.
 
I’ve tested the new changes , and even though it’s still early, I’m pretty confident this is the right direction.
Making the AI more dynamic and bringing back a more classic vassal system, but smarter and better balanced, is definitely a good choice.
The proposed changes to borders and war mechanics are absolutely crucial. Here’s an example: if a major power like China were to get strong vassals in Europe — say Spain, Germany, and France — and then decided to attack Italy (you), you’d end up fighting only against the vassals, possibly never engaging China directly.
This could only be sustainable if vassals were still weak, like in the old system where they were basically technological zombies — sending archers when you already had tanks.
But now that vassals can remain strong and active civilizations, it’s essential to update how alliances, diplomacy, and borders are handled. Otherwise, it risks creating unrealistic or frustrating scenarios for the player.So I fully support this direction — I believe it's not only the right choice, but the only viable. I want to add that Walter’s decision to limit vassals in the way he did — combined with the changes that allow for earlier and easier vassalage — is a very smart move, and clearly shows a deep understanding of Civ 4: Beyond the Sword mechanics, but I had no doubt. one.Without this limitation, a rework of the vassal system like this might not even be possible in the first place.
 
Last edited:
Are you also seeking to force-vassalize in those situations?
I might, depending on many variables .
Using the Egypt HWM game as most recent reference, I attacked and force-vassalized Mali, with the hope Mansa would do some research for me (alas , didn't work). At least I got some resources out of central Africa.
We never had shared borders before the war (tribals in the middle), I razed a couple of his desert cities, aaaand I'm now realizing that I did conquer half his cities before he capitulated. Afterwards I liberated them, for the diplo bonus and because I had never intended to keep them. Definitely "shared borders" there as far as game mechanics are concerned.
Hmmm, bad example.

I guess that conquering an island civ might also count for "shared borders" the moment I conquer one city in the middle of their culture, even if it's just to liberate it later.
 
Lovely comparison. Do you still have the save? I'd love to see how the numbers line up if you pick the Seafarer trait, which Dravidia does have. From you mention of Colossus skewing results, it seems like there are at least a few coastal cities, and I can see the extra trade route from those cities giving even more of a boost than Humanist's gold-per-city.
Sorry for the late reply to this, I was travelling in Scotland. :) Now I am home and have attached the save to the end of the post. Sadly there's 1 minor quirk, I was testing with a modified xml to have the progressive trait give +1 science to scientists, that seems to have stuck to the save even when loading it without the modified trait xml. You can remedy this for the comparison by either substracting science from something in the city with the worldbuilder or unassigning all scientists. (In the save, there is just 1 scientist, in the capital)
Where did you get 400 science from, after 5 years of playing and dozens of games, I've never had more than 220 at 60-70%, at the end of the classic era.
HOW!?
see save above. Keep in mind it was on a moderate difficulty only
The script is lightweight, fully modular, and does not require enabling anything in PythonCallbackDefines.
Please share even your work-in-progress, ideally on a place like github. So many times I have seen people post about their cool things, but then the people disappear or abandon the project before ever releasing anything.
"Motherland call" great wonder need to be nerfed :/

I was modern Fascist - State, modern era and declare war on Imperium with 7 vassals. i Get 7 units for every vassal and +1 free unit for attack Imperium.few turn later when separatists start to show, i declare war on them too for free units.I had 30 cities so 8 units free in every city = 240 free units total on start of the war.
so i jump from 100% STR vs 80% my STR enemy Imperium to 100% STR vs 45% enemy Imperium in 8-10 turns.Yeah, its perfect to steamroll the world and win the game but very unrealistic.Maybe just add -1 population per every free unit nerf? if i losing almost 10 population in every city it wouldn`t be so sugar-sweet win.
Harming city population like that would make this wonder an absolute shot in your own foot. Better to just count vassals as 50% only, i.e. 1 unit per full civ declaring and 1 unit per 2 vassals declaring.
So I've been trying to play Alaric recently to give Legislator a chance, and my conclusion is that Spain is pretty weak, at least for a player civ.

The Mineria has very little impact, and in most games practically no impact. If you get some gold or silver in your opening cities it has a chance to do good, but by the mid classical it loses any appeal. Getting +1:commerce: on 5 or 6 tiles in your empire isn't a notable difference in commercial output after the ancient era. Compare to the Carthaginian Trading Colony improvement: The Trading Colony gets the same +1:commerce: on the relevant resource, but also gives +1 happiness in nearby cities, which ultimately yields a ton more commerce, or hammers, or food. On top of that it can be cultivated. So it gets easy to come by and produces a bonus relevant to the entire game. The Mineria stops being relevant early on in the game, and in most games doesn't have the chance to become relevant in the first place because you don't have gold or silver near your starting area.

The Citadel's XP bonus to siege weapons is very lackluster and narrow. Siege units don't benefit much from promotions. Giving them +%strength doesn't mean much when they have a max amount of damage they can deal to units. Improving city bombard damage, at best, saves you a few turns of bombarding a city, but you can already get that by just adding another siege unit to the stack (which then also adds to the siege aid they give). And you only need the XP bonus in one or two cities in your empire, it's wasted on other cities. Probably my least favorite unique building.
Good point with the citadel. In BtS with its suicidal siege weapons, the +5 xp are amazing to stack up some absurd siege units (ideally with barracks and great instructors on top), but in RI siege is hardly ever at a point where its xp matter (and rack up free xp from bombarding anyway). I think the bonus can certainly stay (it's nice in a thematic way), but it's not enough to make the building any interesting.
Well, Autocracy kind of cedes its role to Dictatorship around that time, so this is intentional.
I'm not even so sure about it. Dictatorship costs you GP points and gives happiness in high-units-garrisoned cities as well as a bit more military production, but it also costs considerably more maintenance. And Autocracy via enlightened absolutism has a shot at more happiness and even culture, too.

I am a bit confused: If Autocracy represents absolute monarchies, and Monarchy with Social Contract -> Constitutional Monarchy represents constitutional monarchies... what exactly does Monarchy represent prior to that limited building? I always assumed it was constitutional monarchies all the time, but the later limited building contradicts that.
All of this seems to support bumping progressive to 10%. +1:science: per scientist might look better than it actually is, as you're unlikely to get anywhere near the amount of additional +5%:science:. One interesting note though is that AI progressive leaders seem to generally perform better than average. Might have to do with their AI prioritising research more, or cheaper research-related buildings (which again means they are more attractive and built earlier by the AI).
My logic for the (not even super impactful) +1 flat science there was to have something that would scale multiplicatively with all the modifiers, unlike the +5% that get less and less meaningful over time as they get crowded out by building factors and the like.

Do you think you can add building yields & building commerce functionality to traits, so these fields can be used by modmodders? I think for example that extra gold or culture for some buildings could be nice for protective, or extra science for progressive.
I was absolutely sure that I already buffed Minerias to be +2 at least. It was raised before and I agree that they're quite weak.
In the latest release they have +1 compared to precious mines, and another +1 from Protectionism, for +2 total if that civic is used.

By the way since you mention Trading colonies: What do you think about giving them +1 hammer instead of +1 commerce? I think this would make them a bit more interesting and distinct from generic plantations rather than just "gives 1 happiness and 1 commerce". Similar to dravidian pepper plantations giving +1 food. This still leaves the +commerce for the more broadly applicable Minerias.
I feel that's an impossible goal. This is simply not how Civ 4 is designed to function. Any attempts to make 1-2-3 city civs viable necessitate A LOT of crutches, as this is simply not the original intention around which the game was built.
Fully agree - I don't think stunting your own expansion should be rewarded, "tall" playstyles in strategy games are generally artificial game mechanics, IRL going "wide" to some extent is always better.
I will try bringing down the AI vassalization threshold, but with some additional changes to the AI itself - I'll disallow AI to peace-vassalize itself to someone it doesn't border (that simply makes no sense if going for someone's protection) and I'll make AI vassals more "sticky" by having separate power thresholds for suggesting to become someone's vassal and for breaking it off.
One thing of note is that when you are a vassal to your neighbour, your culturally contested tiles all get ceded over regardless of %. So it can be far more harmful to your cities than vassalising to someone not right on your border.
 

Attachments

  • Like
Reactions: [Y]
Back
Top Bottom