September 6th, 2020, 23:00
Posts: 6,687
Threads: 131
Joined: Mar 2004
That is correct, a Golden Age uses the eligible GP nearest to the capital. Selecting GP beyond the first has no effect on what GP are consumed. I investigated this in the code once.
Selecting multiple GP causes a start-golden-age order for each of them, and each of those orders looks nearest the capital for the GP it will consume. You get what you asked for, you ordered each of those GP to start a golden age if possible, same as each of a stack of catapults will bombard if possible.
Civ 4 issues an order to each unit individually, it has no concept of issuing one order to a group of units, even if it looks like that in the UI. The start-golden-age order is unique in that it's the only order where the ordered unit needs some other unit to do something. The CvUnit code that executes the order doesn't look back at the Python interface code to see if that some-other-unit might be a selected one.
September 6th, 2020, 23:25
Posts: 486
Threads: 7
Joined: Jan 2013
(September 6th, 2020, 23:00)T-hawk Wrote: That is correct, a Golden Age uses the eligible GP nearest to the capital. Selecting GP beyond the first has no effect on what GP are consumed. I investigated this in the code once.
Selecting multiple GP causes a start-golden-age order for each of them, and each of those orders looks nearest the capital for the GP it will consume. You get what you asked for, you ordered each of those GP to start a golden age if possible, same as each of a stack of catapults will bombard if possible.
Civ 4 issues an order to each unit individually, it has no concept of issuing one order to a group of units, even if it looks like that in the UI. The start-golden-age order is unique in that it's the only order where the ordered unit needs some other unit to do something. The CvUnit code that executes the order doesn't look back at the Python interface code to see if that some-other-unit might be a selected one.
Ah christ almighty. Let this be a lesson to everyone: never expect the game to be as smart as you want it to be.
September 8th, 2020, 15:15
Posts: 7,602
Threads: 75
Joined: Jan 2018
I never played civ6 and obviously also don't know anything about the code there. Sorry.
September 8th, 2020, 15:18
Posts: 7,602
Threads: 75
Joined: Jan 2018
(August 30th, 2020, 18:53)NobleHelium Wrote: Can you look up how spy defense works with friendly spies and security bureaus?
I do think there are already very extensive explanations about the espionage system or what exactly do you want to know here?
September 8th, 2020, 17:12
(This post was last modified: September 8th, 2020, 17:14 by NobleHelium.)
Posts: 13,214
Threads: 25
Joined: Oct 2010
(September 8th, 2020, 15:18)Charriu Wrote: (August 30th, 2020, 18:53)NobleHelium Wrote: Can you look up how spy defense works with friendly spies and security bureaus?
I do think there are already very extensive explanations about the espionage system or what exactly do you want to know here?
I'm looking for something like:
1) the chance to catch a spy every turn (and the additional chance to uncover the owner)
2) how having a security bureau affects that
3) how having a spy nearby affects that, and what the definition of "nearby" is
September 8th, 2020, 21:01
Posts: 6,687
Threads: 131
Joined: Mar 2004
September 8th, 2020, 23:36
Posts: 13,214
Threads: 25
Joined: Oct 2010
Okay, that was basically what I was looking for, thanks. In fact now I vaguely remember reading that post before.
September 17th, 2020, 10:04
Posts: 7,602
Threads: 75
Joined: Jan 2018
This will be a quick one.
Are the free wins against barbs 100% wins or is the game lying to us?
For this we look into CvUnit and here into the method getDefenderCombatValues:
Code: if (kDefender.isBarbarian())
{
if (GET_PLAYER(getOwnerINLINE()).getWinsVsBarbs() < GC.getHandicapInfo(GET_PLAYER(getOwnerINLINE()).getHandicapType()).getFreeWinsVsBarbs())
{
iTheirOdds = std::min((10 * GC.getDefineINT("COMBAT_DIE_SIDES")) / 100, iTheirOdds);
}
}
if (isBarbarian())
{
//Charriu FREE_WIN_AGAINST_BARB_WITH_SETTLER
if (GET_PLAYER(kDefender.getOwnerINLINE()).getWinsVsBarbs() < GC.getHandicapInfo(GET_PLAYER(kDefender.getOwnerINLINE()).getHandicapType()).getFreeWinsVsBarbs())
{
iTheirOdds = std::max((90 * GC.getDefineINT("COMBAT_DIE_SIDES")) / 100, iTheirOdds);
}
}
I left out most of the actual calculation and only show you the part concerning free wins. As long as there are still free wins against the barbs available the game either calculates the defenders odds as:
- 90 * GC.getDefineInt("COMBAT_DIE_SIDES") / 100. COMBAT_DIE_SIDES is normally set to 1000, so this value will be 900.
- their normally calculated combat value
It will take whichever value is higher. The way combat odds is calculated means that every unit more or less can be considered a unit of strength 90 in a fight against barbs.
Summary
As it may already be clear, the game is lying when it comes to free barb fights. There is a possibility to loose those fights, albeit being a very small one.
September 17th, 2020, 10:13
Posts: 2,941
Threads: 12
Joined: Apr 2015
Good thing our Scouts aren’t running into rampaging barbarian Modern Armor then :D
September 17th, 2020, 10:15
Posts: 8,608
Threads: 92
Joined: Oct 2017
(September 17th, 2020, 10:04)Charriu Wrote: As it may already be clear, the game is lying when it comes to free barb fights. There is a possibility to loose those fights, albeit being a very small one.
So, i shouldnt trust any barb fight. Got it.
"Superdeath seems to have acquired a rep for aggression somehow. In this game that's going to help us because he's going to go to the negotiating table with twitchy eyes and slightly too wide a grin and terrify the neighbors into favorable border agreements, one-sided tech deals and staggered NAPs."
-Old Harry. PB48.
|