Scaling - according to the world size

Flinx

Prince
Joined
Dec 8, 2005
Messages
455
ls 612 has implemented a new option which allows for scaling based on world size.:goodjob:

The base for any calculations is Worldsize Standard.
However with the current calculations i get lower values on my giant map than on a normal map.:(

I asked ls for his calculating method, and it is rather easy:
take the number of tiles in the world, divide them by 21 (the tiles a city can work) and bring them into a ratio with the base value from world size standard.

I admit this is a good idea but i still miss the fact that i'm not alone on the map and the number of default players should be included.

Well, below is my proposal for the new scaling numbers:

World Size|Tiles horizontal|Tiles vertical|No. of tiles on map|cities on map|default players|worldsize value|ratio
Duel|40|24|960|45,71|2|22,86|0,77
Tiny|52|32|1664|79,24|3|26,41|0,89
Small|64|40|2560|121,90|5|24,38|0,81
Standard|84|52|4368|208|7|29,71|1
Large|104|64|6656|316,95|9|35,22|1,19
Huge|128|80|10240|487,62|11|44,33|1,49
Giant|160|100|16000|761,90|13|58,61|1,97
Gigantic|200|120|24000|1142,86|15|76,19|2,56
Enormous|240|160|38400|1828,57|19|96,24|3,24
Immense|300|200|60000|2857,14|21|136,05|4,58

As an example: on a standard map i need to build 6 glassblowers as prereq to build the wonder Ishtar Gate.
So on a giant map i'd need 1,97 times the base value, with some rounding this would be 12 glassblowers.
This should apply also to civics, if i have a number of 3 cities before unhappiness kicks in for any additional city on standard it should be 3 x 1,97, close to 6 cities before the limit kicks in.

I for one think this would be the right way, include the number of default civs.:D

Feel free to join the discussion. :)
 
Wait, I have? Or are you simply refering to City Limits (the Scaling option for those is 2 months old).

At any rate, to implement those numbers (which are really good) I'd actually be in favor of AIAndy's Adapt tag being added to the WorldSizeInfos, and then I'd use that number inthe DLL for the city limits calculation.

@AIAndy: Would you be willing to do that?
 
I also think that Laskaris and primeOver ought to weight in on this, since they know alot about map issues (I believe)

This is a scaling issue for City Limits, their stuff would not impact this (unless they are seriously messing with the sea level, which I doubt).
 
Wait, I have? Or are you simply refering to City Limits (the Scaling option for those is 2 months old).

At any rate, to implement those numbers (which are really good) I'd actually be in favor of AIAndy's Adapt tag being added to the WorldSizeInfos, and then I'd use that number inthe DLL for the city limits calculation.

@AIAndy: Would you be willing to do that?
The Percents tag for Adapt has been implemented for GameSpeedInfo, HandicapInfo and WorldInfo right away (and you can use the same adapt ID in all three to scale a value along all three axis with a single use of Adapt or adaptValueToGame).
 
This should apply also to civics, if i have a number of 3 cities before unhappiness kicks in for any additional city on standard it should be 3 x 1,97, close to 6 cities before the limit kicks in.

Things like this make some Wonders impossible to build.
Equestrian Guild and Circus Maximus require lot of city with Horse in City Vicinity. Far too much in big map.
 
Things like this make some Wonders impossible to build.
Equestrian Guild and Circus Maximus require lot of city with Horse in City Vicinity. Far too much in big map.

Yes, but the number required for required building should also scale
 
The Percents tag for Adapt has been implemented for GameSpeedInfo, HandicapInfo and WorldInfo right away (and you can use the same adapt ID in all three to scale a value along all three axis with a single use of Adapt or adaptValueToGame).

One more question, which method do I call to return an adapt percent?
 
OK, I'm a bit confused. Would I do something like this?

Code:
int iAdaptID = GC.getInfoTypeForString("ADAPT_SCALE_CITY_LIMITS");
int iCityLimit = adaptValueToGame(iAdaptID, m_iCity Limit);

return iCityLimit;
Yes, that should work. If it is a function used often, use the pattern in the link I gave instead (it only resolves the ID once instead of each time this is called).
 
Things like this make some Wonders impossible to build.
Equestrian Guild and Circus Maximus require lot of city with Horse in City Vicinity. Far too much in big map.

Horses can also be hunted and then brought to your cities sometimes i am lucky and get a mid game hunting island free of pesky AI ruining it and those that do would be finding a very very angry me whom has more wrath then their god could ever muster :lol:
 
OK, I'm a bit confused. Would I do something like this?

Code:
int iAdaptID = GC.getInfoTypeForString("ADAPT_SCALE_CITY_LIMITS");
int iCityLimit = adaptValueToGame(iAdaptID, m_iCity Limit);

return iCityLimit;

Adapting city limits to map size only will be incorrect though. You also need to adapt (inversely) to the starting number of civs, since the factor you want is land area/civ
 
Adapting city limits to map size only will be incorrect though. You also need to adapt (inversely) to the starting number of civs, since the factor you want is land area/civ

Flinx's numbers already have that factored in if I'm reading them right.
 
As explained in the OP i took LS 612 base calculations (number of world tiles divided by 21 (city fat cross) and divided this value by the number of default players.

So you get the expected results: scaling world size from standard to giant increases the base numbers on city limits now; with LS612 version numbers diminiished with growing world sizes which felt not right to me.
 
As explained in the OP i took LS 612 base calculations (number of world tiles divided by 21 (city fat cross) and divided this value by the number of default players.

So you get the expected results: scaling world size from standard to giant increases the base numbers on city limits now; with LS612 version numbers diminiished with growing world sizes which felt not right to me.

I agree, I'm just having trouble getting the code for it to work right with the adapt system, which under the hood works differently than most XML data mechanisms.
 
This is a scaling issue for City Limits, their stuff would not impact this (unless they are seriously messing with the sea level, which I doubt).

Yeah... this isn't really our focus. One problem is that I am not familiar with the system you have already set up. How do the adaption methods work?
 
Yeah... this isn't really our focus. One problem is that I am not familiar with the system you have already set up. How do the adaption methods work?

Essentially how Flinx wants it to work. The only difference is that I'm using an arbitrary baseline for the modifier, which is wrong. If I get this to work soon then it will mean that the modifiers will be easily adjustable and more balanced.
 
Essentially how Flinx wants it to work. The only difference is that I'm using an arbitrary baseline for the modifier, which is wrong. If I get this to work soon then it will mean that the modifiers will be easily adjustable and more balanced.

Sounds good!

Actually what I said above isn't 100% correct. After thinking about it a bit I realize that scaling (to some extent) is a part of the GeoRealism engine since the area of a plot must be considered. I seem to recall having raised this issue earlier. My approach was to come up with a consensus on how people viewed scaling in terms of map sizes. I then decided to leave the scaling up to the user since we had so many different opinions. Anyway, I am guessing that the results of this will be proportional to the system I use if the user selects an option where the actual size of the world scales with the world size chosen.
 
@AIAndy:

I just want to confirm that I'm doing this correctly, this code will properly adapt City Limits using the Adapt tag, right?

PHP:
	//ls612: Option to scale City Limits by Mapsize
	else if ( !bRawXMLValue && GC.getGameINLINE().isOption(GAMEOPTION_SCALE_CITY_LIMITS))
	{
		if (m_iCityLimit != 0)
		{
			int iCityLimit;
			CvPlayer* pPlayer = &GET_PLAYER(GC.getGameINLINE().getActivePlayer());
			int iAdaptID = GC.getInfoTypeForString("ADAPT_SCALE_CITY_LIMITS");
			
			iCityLimit = pPlayer->getGameObject()->adaptValueToGame(iAdaptID , m_iCityLimit);
			

			return iCityLimit;
		}
		else
		{
			return m_iCityLimit;
		}
	}
 
Back
Top Bottom