This task keeps on growing and growing. I just moved map trade from CvTeam to CvPlayer. Being a CivEffect setting, it is linked to players, not teams. Also it is no longer possible to write python code, which enables or disables map trade directly. The plan is that python should be able to enable CivEffects though, which mean map trade can be enabled that way if we really want to. I noticed that natives are banned from trading maps even if they have the CivEffect needed to do so. I didn't touch that, but eventually that should be removed. At some point after CivEffect is completeted, we should simply search for "isNative()" and replace them with CivEffect settings. We should possibly have a native group in CivEffect where we can customize precisely what we want for each player and it can change during the game. I wonder how many other settings I will run into, which turns out to be code rewriting rather than simply changing the access function in CvPlayer. Next up is allows civic, which I really want to be an InfoArray rather than an int. That will solve the problems I have with cache init. The same goes for allow trade screens. It's unlikely that we will need to change more than one with a single CivEffect, but adding support for it in the DLL is a trivial addon to the cache init. EDIT: actually prohibited civics are only checked when changing civic and it only checks against the currently selected civics, which mean one check for each CivicOptionTypes (currently 5). This mean the real solution is to move it to the civic group rather than the allow group and since it's checked that rarely we shouldn't bother with a cache. It's not like it loops the entire array.