Feedback thread

Can something be done about duplicating civilopedia entries? For example, Wealth is listed both in Concepts and Civics pages. This makes it impossible to check what Wealth civic does by clicking the link under Nanominituarization tech, because it leads to the Concepts page. There are other entries like this.
 
Can anyone tell me how the base mechanics work?

For example, in SMAC, unless the base is starving, production goes first, then the growth happens, then there is a check for drone riots. How does it work in Planetfall?

From what I've seen, most drone riots occur in the same turn something causes them. Then, if they are not quelled, there is a chance something nasty will happen (I've only seen revolts, do they do anything else?).

I've never starved a base, does this create additional drones? When are they created? Suppose I have a base with 1 food unit left and each turn 5 food units are subtracted from the total. What will happen when I hit next turn? Will I lose 8 credits immediately? Is there a chance I can lose the base when the next turn starts? Or will the next turn happen as usual and I would only risk additional maintainance and the chance of revolt on the turn after that, when the food supply finally hits 0?
 
Copy-pasting some functions for me to examine and explain later:

Spoiler :
Code:
if (doGrowth())
	{
		return;
	}
	updateMaintenance(); // Planetfall Maniac
	if (doRiots())
	{
		return;
	}

	doCulture();

	doPlotCulture(false, getOwnerINLINE(), getCommerceRate(COMMERCE_CULTURE));

	doProduction(bAllowNoProduction);

Code:
bool CvCity::doGrowth()
{
	int iDiff, iI, iJ, iK;
	CvWString szBuffer;
	CvWString szName;
	CvPlot* pPlot = plot();
	CvCity* pNewCity = NULL;

/*************************************************************************************************/
/**	SPEEDTWEAK (Block Python) Sephi                                               	            **/
/**	If you want to allow modmodders to enable this Callback, see CvCity::cancreate for example  **/
/*************************************************************************************************/
/**
	CyCity* pyCity = new CyCity(this);
	CyArgsList argsList;
	argsList.add(gDLL->getPythonIFace()->makePythonObject(pyCity));	// pass in city class
	long lResult=0;
	gDLL->getPythonIFace()->callFunction(PYGameModule, "doGrowth", argsList.makeFunctionArgs(), &lResult);
	delete pyCity;	// python fxn must not hold on to this pointer
	if (lResult == 1)
	{
		return false;
	}
/*************************************************************************************************/
/**	END	                                        												**/
/*************************************************************************************************/

	iDiff = foodDifference();

	changeFood(iDiff);
	changeFoodKept(iDiff);

	setFoodKept(range(getFoodKept(), 0, ((growthThreshold() * getMaxFoodKeptPercent()) / 100)));

	if (getFood() >= growthThreshold())
	{
		if (AI_isEmphasizeAvoidGrowth())
		{
			setFood(growthThreshold());
		}
		else
		{
			changeFood(-(std::max(0, (growthThreshold() - getFoodKept()))));
			changePopulation(1);

			// ONEVENT - City growth
			CvEventReporter::getInstance().cityGrowth(this, getOwnerINLINE());
		}
	}
	else if (getFood() < 0)
	{
		changeFood(-(getFood()));

		if (getPopulation() > 1 && !(isOccupation()) && !(isBarbarian()) && GET_PLAYER(getOwnerINLINE()).getNumCities() > 1 && !GET_PLAYER(getOwnerINLINE()).isDomai())
		{
			if (GET_PLAYER(getOwnerINLINE()).isBiodomed())
			{
				return false;
			}
			if (GC.getGameINLINE().getSorenRandNum(10, "Revolt #1") < getRevoltTestProbability()) // test for units which reduce revolt chance
			{
				CLLNode<IDInfo>* pUnitNode;
				CvUnit* pLoopUnit;
				int iGarrisonModifier = std::max(1, cultureGarrison(NO_PLAYER)/8);
				if (-iDiff > GC.getGameINLINE().getSorenRandNum(30 * iGarrisonModifier, "Revolt #2"))
				{
					CLinkList<IDInfo> oldUnits;

					pUnitNode = plot()->headUnitNode();

					while (pUnitNode != NULL)
					{
						oldUnits.insertAtEnd(pUnitNode->m_data);
						pUnitNode = plot()->nextUnitNode(pUnitNode);
					}

					pUnitNode = oldUnits.head();

					while (pUnitNode != NULL)
					{
						pLoopUnit = ::getUnit(pUnitNode->m_data);
						pUnitNode = plot()->nextUnitNode(pUnitNode);

						if (pLoopUnit)
						{
							if (pLoopUnit->canDefend())
							{
								pLoopUnit->changeDamage((pLoopUnit->currHitPoints() / 2), NO_PLAYER);
							}
						}
					}
					if (getNumRevolts(BARBARIAN_PLAYER) >= GC.getDefineINT("NUM_WARNING_REVOLTS"))
					{
						szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_REVOLTED_JOINED_REBELS", getNameKey());
						gDLL->getInterfaceIFace()->addMessage(getOwnerINLINE(), false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CULTUREFLIP", MESSAGE_TYPE_MAJOR_EVENT,  ARTFILEMGR.getInterfaceArtInfo("WORLDBUILDER_CITY_EDIT")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), getX_INLINE(), getY_INLINE(), true, true);
						gDLL->getInterfaceIFace()->addMessage(BARBARIAN_PLAYER, false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CULTUREFLIP", MESSAGE_TYPE_MAJOR_EVENT,  ARTFILEMGR.getInterfaceArtInfo("WORLDBUILDER_CITY_EDIT")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), getX_INLINE(), getY_INLINE(), true, true);
						szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_REVOLTS_JOINS_REBELS", getNameKey());
						GC.getGameINLINE().addReplayMessage(REPLAY_MESSAGE_MAJOR_EVENT, getOwnerINLINE(), szBuffer, getX_INLINE(), getY_INLINE(), (ColorTypes)GC.getInfoTypeForString("COLOR_ALT_HIGHLIGHT_TEXT"));
						szName.Format(L"%s (%s)", getName().GetCString(), GET_PLAYER(getOwnerINLINE()).getName());
						for (iI = 0; iI < MAX_PLAYERS; iI++)
						{
							if (GET_PLAYER((PlayerTypes)iI).isAlive())
							{
								if (iI != getOwnerINLINE())
								{
									if (isRevealed(GET_PLAYER((PlayerTypes)iI).getTeam(), false))
									{
										szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_REVOLTED_JOINED_REBELS", szName.GetCString());
										gDLL->getInterfaceIFace()->addMessage(((PlayerTypes)iI), false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CITYCAPTURED", MESSAGE_TYPE_MAJOR_EVENT, ARTFILEMGR.getInterfaceArtInfo("WORLDBUILDER_CITY_EDIT")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), getX_INLINE(), getY_INLINE(), true, true);
									}
								}
							}
						}
						GET_PLAYER(BARBARIAN_PLAYER).acquireCity(this, false, false, true);
						pNewCity = pPlot->getPlotCity();
						if (pNewCity != NULL)
						{
							pNewCity->changeOccupationTimer(GC.getDefineINT("BASE_OCCUPATION_TURNS") + ((pNewCity->getPopulation() * GC.getDefineINT("OCCUPATION_TURNS_POPULATION_PERCENT")) / 100));
						}
						GC.getMapINLINE().verifyUnitValidPlot();
						int iFreeUnits = std::max(1, GC.getGameINLINE().getSorenRandNum((3 * iGarrisonModifier) / 2, "Free Units"));
						for (int iI = 0; iI < iFreeUnits; ++iI)
						{
							GET_PLAYER(BARBARIAN_PLAYER).initUnit((UnitTypes)GC.getInfoTypeForString(GC.getDefineSTRING("UNIT_PARTISAN")), pPlot->getX_INLINE(), pPlot->getY_INLINE(), UNITAI_CITY_DEFENSE);
						}
						return true;
					}
					else
					{
						changeNumRevolts(BARBARIAN_PLAYER, 1);
						changeOccupationTimer(GC.getDefineINT("BASE_REVOLT_OCCUPATION_TURNS") + GC.getGameINLINE().getSorenRandNum(-(foodDifference() / 4), "Revolt Turns"));

						// XXX announce for all seen cities?
						szBuffer = gDLL->getText("TXT_KEY_MISC_REVOLT_IN_CITY", GET_PLAYER(BARBARIAN_PLAYER).getCivilizationAdjective(), getNameKey());
						gDLL->getInterfaceIFace()->addMessage(getOwnerINLINE(), false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CPU_DRONE_RIOTS", MESSAGE_TYPE_MINOR_EVENT, ARTFILEMGR.getInterfaceArtInfo("INTERFACE_RESISTANCE")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), getX_INLINE(), getY_INLINE(), true, true);
					}
				}
			}
		}
	}
	if (!(isOccupation()) && isBarbarian() && getNumRealBuilding((BuildingTypes)GC.getInfoTypeForString(GC.getDefineSTRING("BUILDING_REBEL_STRONGHOLD"))) > 0)
	{
		for (iI = 0; iI < MAX_PLAYERS; iI++)
		{
			if (GET_PLAYER((PlayerTypes)iI).isAlive())
			{
				CvPlayer& pPlayer = GET_PLAYER((PlayerTypes)iI);
				if (pPlayer.isDomai())
				{
					szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_REVOLTED_JOINED", getNameKey(), pPlayer.getCivilizationDescriptionKey());
					gDLL->getInterfaceIFace()->addMessage((PlayerTypes)iI, false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CULTUREFLIP", MESSAGE_TYPE_MAJOR_EVENT,  ARTFILEMGR.getInterfaceArtInfo("WORLDBUILDER_CITY_EDIT")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), getX_INLINE(), getY_INLINE(), true, true);
					szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_REVOLTS_JOINS", getNameKey(), pPlayer.getCivilizationDescriptionKey());
					GC.getGameINLINE().addReplayMessage(REPLAY_MESSAGE_MAJOR_EVENT, getOwnerINLINE(), szBuffer, getX_INLINE(), getY_INLINE(), (ColorTypes)GC.getInfoTypeForString("COLOR_ALT_HIGHLIGHT_TEXT"));
					szName.Format(L"%s (%s)", getName().GetCString(), GET_PLAYER(getOwnerINLINE()).getName());
					for (iJ = 0; iJ < MAX_PLAYERS; iJ++)
					{
						if (GET_PLAYER((PlayerTypes)iJ).isAlive())
						{
							if (iJ != getOwnerINLINE())
							{
								if (isRevealed(GET_PLAYER((PlayerTypes)iJ).getTeam(), false))
								{
									szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_CAPTURED_BY", szName.GetCString(), GET_PLAYER((PlayerTypes)iI).getCivilizationDescriptionKey());
									gDLL->getInterfaceIFace()->addMessage(((PlayerTypes)iJ), false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CITYCAPTURED", MESSAGE_TYPE_MAJOR_EVENT, ARTFILEMGR.getInterfaceArtInfo("WORLDBUILDER_CITY_EDIT")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), getX_INLINE(), getY_INLINE(), true, true);
								}
							}
						}
					}
					if (getPreviousOwner() != NO_PLAYER )
					{
						int* piShuffle = shuffle(GC.getNumTechInfos(), GC.getGameINLINE().getSorenRand());
						for (iJ = 0; iJ < GC.getNumTechInfos(); iJ++)
						{
							if (GET_TEAM(GET_PLAYER(getPreviousOwner()).getTeam()).isHasTech((TechTypes)piShuffle[iJ]) && !GET_TEAM(pPlayer.getTeam()).isHasTech((TechTypes)piShuffle[iJ]))
							{
								GET_TEAM(pPlayer.getTeam()).setHasTech(((TechTypes)piShuffle[iJ]), true, NO_PLAYER, false, true);
								break;
							}
						}
						SAFE_DELETE_ARRAY(piShuffle);
					}
					pPlayer.acquireCity(this, false, false, true);
					for (int iDX = -2; iDX <= 2; iDX++)
					{
						for (int iDY = -2; iDY <= 2; iDY++)
						{
							CvPlot* pLoopPlot = plotXY(pPlot->getX_INLINE(), pPlot->getY_INLINE(), iDX, iDY);
							if (NULL != pLoopPlot)
							{
								if (pLoopPlot->isUnit())
								{
									CLLNode<IDInfo>* pUnitNode = pLoopPlot->headUnitNode();
									while (pUnitNode != NULL)
									{
										CvUnit* pLoopUnit = ::getUnit(pUnitNode->m_data);
										pUnitNode = pLoopPlot->nextUnitNode(pUnitNode);
										if (pLoopUnit->getOwnerINLINE() == BARBARIAN_PLAYER && pLoopUnit->isPsi() && !pLoopUnit->isAnimal())
										{
											CvUnit* pNewUnit = pPlayer.initUnit(pLoopUnit->getUnitType(), pLoopPlot->getX_INLINE(), pLoopPlot->getY_INLINE(), pLoopUnit->AI_getUnitAIType());
											pNewUnit->convert(pLoopUnit);
										}
									}
								}
							}
						}
					}
					if (pPlayer.getNumCities() == 1)
					{
						for (iJ = 0; iJ < GC.getNumTechInfos(); iJ++)
						{
							int iCount = 0;
							for (iK = 0; iK < MAX_CIV_TEAMS; iK++)
							{
								if (GET_TEAM((TeamTypes)iK).isAlive())
								{
									if (GET_TEAM((TeamTypes)iK).isHasTech((TechTypes)iJ))
									{
										iCount++;
										if (iCount > 1)
										{
											GET_TEAM(pPlayer.getTeam()).setHasTech(((TechTypes)iJ), true, NO_PLAYER, false, false);
											if (GC.getGameINLINE().isOption(GAMEOPTION_NO_TECH_BROKERING))
											{
												GET_TEAM(pPlayer.getTeam()).setNoTradeTech((TechTypes)iJ, true);
											}
											break;
										}
									}
								}
							}
						}
					}
					return true;
				}
			}
		}
	}
	return false;
}

Code:
bool CvCity::doRiots()
{
	int iI;
	CvWString szName;
	CvWString szBuffer;
	CvPlot* pPlot = plot();
	CvCity* pNewCity = NULL;
	int iAngryPopulation = angryPopulation();
	if (iAngryPopulation > 0)
	{
		if (!(isOccupation()) && !(isBarbarian()) && GET_PLAYER(getOwnerINLINE()).getNumCities() > 1 && !GET_PLAYER(getOwnerINLINE()).isDomai())
		{
			if (getUnhappyProduction() > 0 || getNoMilitaryPercentAnger() > 0 || getCulturePercentAnger() > 0 || getReligionPercentAnger() > 0 || getWarWearinessPercentAnger() > 0 || getEspionageHappinessCounter() > 0)
			{
			if (GC.getGameINLINE().getSorenRandNum(10, "Revolt #1") < getRevoltTestProbability()) // test for units which reduce revolt chance
			{
				CLLNode<IDInfo>* pUnitNode;
				CvUnit* pLoopUnit;
				int iGarrisonModifier = std::max(1, cultureGarrison(NO_PLAYER)/8);
				if (iAngryPopulation > GC.getGameINLINE().getSorenRandNum(30 * iGarrisonModifier, "Revolt #2"))
				{
					CLinkList<IDInfo> oldUnits;

					pUnitNode = plot()->headUnitNode();

					while (pUnitNode != NULL)
					{
						oldUnits.insertAtEnd(pUnitNode->m_data);
						pUnitNode = plot()->nextUnitNode(pUnitNode);
					}

					pUnitNode = oldUnits.head();

					while (pUnitNode != NULL)
					{
						pLoopUnit = ::getUnit(pUnitNode->m_data);
						pUnitNode = plot()->nextUnitNode(pUnitNode);

						if (pLoopUnit)
						{
							if (pLoopUnit->canDefend())
							{
								pLoopUnit->changeDamage((pLoopUnit->currHitPoints() / 2), NO_PLAYER);
							}
						}
					}
					if (getNumRevolts(BARBARIAN_PLAYER) >= GC.getDefineINT("NUM_WARNING_REVOLTS"))
					{
						szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_REVOLTED_JOINED_REBELS", getNameKey());
						gDLL->getInterfaceIFace()->addMessage(getOwnerINLINE(), false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CULTUREFLIP", MESSAGE_TYPE_MAJOR_EVENT,  ARTFILEMGR.getInterfaceArtInfo("WORLDBUILDER_CITY_EDIT")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), getX_INLINE(), getY_INLINE(), true, true);
						gDLL->getInterfaceIFace()->addMessage(BARBARIAN_PLAYER, false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CULTUREFLIP", MESSAGE_TYPE_MAJOR_EVENT,  ARTFILEMGR.getInterfaceArtInfo("WORLDBUILDER_CITY_EDIT")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), getX_INLINE(), getY_INLINE(), true, true);
						szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_REVOLTS_JOINS_REBELS", getNameKey());
						GC.getGameINLINE().addReplayMessage(REPLAY_MESSAGE_MAJOR_EVENT, getOwnerINLINE(), szBuffer, getX_INLINE(), getY_INLINE(), (ColorTypes)GC.getInfoTypeForString("COLOR_ALT_HIGHLIGHT_TEXT"));
						szName.Format(L"%s (%s)", getName().GetCString(), GET_PLAYER(getOwnerINLINE()).getName());
						for (iI = 0; iI < MAX_PLAYERS; iI++)
						{
							if (GET_PLAYER((PlayerTypes)iI).isAlive())
							{
								if (iI != getOwnerINLINE())
								{
									if (isRevealed(GET_PLAYER((PlayerTypes)iI).getTeam(), false))
									{
										szBuffer = gDLL->getText("TXT_KEY_MISC_CITY_REVOLTED_JOINED_REBELS", szName.GetCString());
										gDLL->getInterfaceIFace()->addMessage(((PlayerTypes)iI), false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CITYCAPTURED", MESSAGE_TYPE_MAJOR_EVENT, ARTFILEMGR.getInterfaceArtInfo("WORLDBUILDER_CITY_EDIT")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), getX_INLINE(), getY_INLINE(), true, true);
									}
								}
							}
						}
						GET_PLAYER(BARBARIAN_PLAYER).acquireCity(this, false, false, true);
						pNewCity = pPlot->getPlotCity();
						if (pNewCity != NULL)
						{
							pNewCity->changeOccupationTimer(GC.getDefineINT("BASE_OCCUPATION_TURNS") + ((pNewCity->getPopulation() * GC.getDefineINT("OCCUPATION_TURNS_POPULATION_PERCENT")) / 100));
						}
						GC.getMapINLINE().verifyUnitValidPlot();
						int iFreeUnits = std::max(1, GC.getGameINLINE().getSorenRandNum((3 * iGarrisonModifier) / 2, "Free Units"));
						for (int iI = 0; iI < iFreeUnits; ++iI)
						{
							GET_PLAYER(BARBARIAN_PLAYER).initUnit((UnitTypes)GC.getInfoTypeForString(GC.getDefineSTRING("UNIT_PARTISAN")), pPlot->getX_INLINE(), pPlot->getY_INLINE(), UNITAI_CITY_DEFENSE);
						}
						return true;
					}
					else
					{
						changeNumRevolts(BARBARIAN_PLAYER, 1);
						changeOccupationTimer(GC.getDefineINT("BASE_REVOLT_OCCUPATION_TURNS") + GC.getGameINLINE().getSorenRandNum((iAngryPopulation / 2), "Revolt Turns"));

						// XXX announce for all seen cities?
						szBuffer = gDLL->getText("TXT_KEY_MISC_REVOLT_IN_CITY", GET_PLAYER(BARBARIAN_PLAYER).getCivilizationAdjective(), getNameKey());
						gDLL->getInterfaceIFace()->addMessage(getOwnerINLINE(), false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_CPU_DRONE_RIOTS", MESSAGE_TYPE_MINOR_EVENT, ARTFILEMGR.getInterfaceArtInfo("INTERFACE_RESISTANCE")->getPath(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), getX_INLINE(), getY_INLINE(), true, true);
					}
				}
			}
			}
		}
	}
	return false;
}
 
This is the order in which stuff happens:

1) growth
2) starvation/food riots
3) unhappiness/drone riots
4) production

In your example of 1 food left, and 5 starvation, you have an immediate chance for food riots after hitting end turn. This was to make coding easier, and to prevent an exploit (which allowed you in SMAC to prevent starvation) where you could alternate turns of +1 food and -5 food without suffering riots. ;)

The chance of a food riot increases linearly with the amount of food you're lacking. The chance is reduced the bigger and stronger your base garrison is.

The first time you get food riots, you get a warning revolt which puts your base in a couple turns of 'occupation' during which the base can't do anything.

The second time you get food riots, control of the base is transferred to the barbarians. Again a couple occupation turns (based on the population size of the base) are added during which the barbarians can't do anything with the base. When the occupation ends, control of the base is transferred to Domai. So you'd better try and recapture the base before the barbarian occupation turns end.

***

Starvation does not add drones/unhappy citizens. However drones can cause riots as well, with a similar effect as food riots. This feature was added as a trade-off for heavy genejack factory use.

To qualify for drone riots, the base must fulfill at least one of the following conditions:
  • It has a Genejack Factory
  • It has no unit garrisoned
  • The base is under cultural influence of a faction you're at war with.
  • The base has a religion which is the state religion of a faction you're at war with.
  • The base is suffering war weariness
  • An espionage mission has recently increased unhappiness

If one of these conditions has been fulfilled, the chance of a riot increases linearly with the number of drones the base has. For the rest the story is the same as with food riots. Chance of revolt reduced with a big & strong garrison. Second revolt leads to barbarian control and eventually Domai's control.

I think I'll move the drone riot check to before the growth check in a next patch. As far as I can see drone riots can't be exploited like food riots could if I moved that code.
 
In your example of 1 food left, and 5 starvation, you have an immediate chance for food riots after hitting end turn. This was to make coding easier, and to prevent an exploit (which allowed you in SMAC to prevent starvation) where you could alternate turns of +1 food and -5 food without suffering riots.
Damn, that was exactly what I had in mind when I was writing. :) Good thinking on your part.

How does Nerve Staple special ability function in reducing the rioting factor? I've noticed that it doesn't affect the chances of revolt that much. Does it benefit the base to have several Nerve Stapler units as opposed to regular units or a mix of thereof?

Hunter-Seeker Algorithm description reads: "any units built in the base get Polymorphic Encryption promotion". The only units that can ever get this promotion are bunkers. But the description also says that all bunkers get PE automatically. So is there anything I'm missing here? Why the line about non-specific units is there?

How long does it take to get the next Planetary Governor elections? I thought they happen every 20 turns, but I do not remember when or where I learned about this. How often Council proposals can be made? Can the Governor stall them, i.e. not propose anything during his term?

How do Creches and Cloning Vats function? I've stopped growth just so I could finish Creches, then started to grow the base again, but I didn't get bonus food when the base grew. Does it only save the food that was produced after the building was finished?

What happens when wild lifefoms capture the city? How long does the player have to retake it before something nasty starts happening?
 
How does Nerve Staple special ability function in reduceng the rioting factor? I've notice that it doesn't affect the chances of revolt that much.

What it says on the tin. A 20% reduction in revolt chance. Does the % in the tooltip indicate otherwise? (Even if the tooltip would indicate otherwise, it would be the tooltip that's wrong - not the actual riot code.)

Here's the line in the actual riot code involving the Nerve Stapler:

Code:
if (GC.getGameINLINE().getSorenRandNum(10, "Revolt #1") < getRevoltTestProbability()) // test for units which reduce revolt chance

Without a Nerve Stapler, getRevoltTestProbability() is 10, meaning this line always returns true. With a Nerve Stapler getRevoltTestProbability() is 8, meaning there's 2 chances in 10 the rest of the revolt code won't fire.

Does it benefit the base to have several Nerve Stapler units as opposed to regular units or a mix of thereof?

One unit with the nerve stapler promo is enough. More than one unit doesn't help. Sorry if that's confusing. Blame Firaxis - that part is not my code. :mischief:

Hunter-Seeker Algorithm description reads: "any units built in the base get Polymorphic Encryption promotion". The only units that can ever get this promotion are bunkers. But the description also says that all bunkers get PE automatically. So is there anything I'm missing here? Why the line about non-specific units is there?

Sorry again for any confusion. I added the line about Bunkers, because Bunkers everywhere, both old and new built, will get the promo. The "any units" line gets automatically added by existing Firaxis code, because I used the existing FreePromotion XML tag to give this effect. This saved me the time of having to add an extra tag to the XML and C++ code just for that effect.

How long does it take to get the next Planetary Governor elections? I thought they happen every 20 turns, but I do not remember when or where I learned about this. How often Council proposals can be made?

Every 5 years according to the XML. Assuming the Governor can make 4 proposals (I can't find a value for this right now on first sight, but IIRC that's the number), that would be 25 years between Governor elections.

Can the Governor stall them, i.e. not propose anything during his term?

IIRC he can choose not to propose anything, but that would not delay elections.

How do Creches and Cloning Vats function? I've stopped growth just so I could finish Creches, then started to grow the base again, but I didn't get bonus food when the base grew. Does it only save the food that was produced after the building was finished?

Exactly. That rule was added to Civ4 to avoid the need for the micromanagement you describe.

What happens when wild lifefoms capture the city? How long does the player have to retake it before something nasty starts happening?

Every turn there's a 50% chance a native life unit is created in the base and its population is reduced by 1. As long as the base's population is higher than one, only the previous human base owner can recapture the city. (Or other human factions would have to declare war on the original owner to be able to capture the city.) Once again, you're encouraged to make haste with recapturing lost cities. Time is of the essence!
 
Every turn there's a 50% chance a native life unit is created in the base and its population is reduced by 1. As long as the base's population is higher than one, only the previous human base owner can recapture the city. (Or other human factions would have to declare war on the original owner to be able to capture the city.) Once again, you're encouraged to make haste with recapturing lost cities. Time is of the essence!
Can I suggest delaying the effects for the early game? If you only have three or four bases, it is unlikely that you can muster more than two or three extra units, and it is equally unlikely that they can reach the conquered base fast enough. And when they do, the city is swarming with lifeforms, so you need more units, which take a long time to build at that stage. In practice, it means that the base that is captured early is guaranteed to be reduced to size 1. It happened often in the early versions of Planetfall when the native life actually was going for the kill instead of just standing there. If only players had 5 'free' turns before really bad things started happening, that would improve things considerably while still maintaining the feeling of urgency. The number of 'free' turns can be reduced with the passing of time, because you research techs that make building and transporting units faster, and there is more of them. I'd say, -1 'free' turn per 40 years or so.

The second suggestion in regards to native life would be this: can you increase the probability of land native units to be spawned in 'agressive' mode. IIRC, barbarians come in two varieties: the ones that actively seek your units and attack your bases ('agressive') and the ones that blockade you, ruin your terraforming, and take their time until you kill them ('passive'). I've had 5 fungal pops in our current multiplayer game, and I am yet to see an agressive native unit. The threat of having a low PR is considerably cheapened because of that.

Speaking of fungal pops - I did not get any for 20 years now. And I have a lot of fungus near my borders. It just so happens that the bases that have fungus in their city radius are green. Are these bases safe from fungal pops, or do they still happen based on your planet attitude and not on individual base PR rating?
 
hi, how do we add governor's office to other factions?
i'd like to see Miriam get a research penalty because in my recent game, she is ahead in research compared to Zak.
 
Hello,

first off, thanks for the mod, have been enjoying it for quite some years now. :)

One question though, after a fresh install and downloading and installing v16, I've run into rather odd selection sounds. Infantry units seem to no longer talk, there's just a rather muffled sound there, but locusts and mind worms now actually talk when selected ("What's the plan?" etc.).

Is this an issue on my end, or is anyone else seeing this, too?

edit: Happens both with the extra smac sounds installed and without.
 
Last month, I played a game as Deirdre in v16, and IIRC didn't hear native lifeforms talk English. :dunno:
 
Hi, very enjoyable mod, for the most part. Thanks to the team members for all the hard work. I didn't see this problem listed elsewhere, so I hope I'm not bringing up a known issue. My current game I received the free Sea Colony Pod for researching Algaculture first. I built a Gun Foil to escort it to the site I had chosen for the colony. Once there, but before being able to build the colony I was attacked by native life. It ignored the Gun Pod and destroyed the Sea Colony Pod first. Is this a bug, or is it simply a feature of this mod that makes it a waste of time to escort Sea Colony Pods? Hope it is a bug, since the latter would be rather irritating. :D Thanks for bringing the flavor of SMAC to CivIV.
 
Hi, very enjoyable mod, for the most part. Thanks to the team members for all the hard work. I didn't see this problem listed elsewhere, so I hope I'm not bringing up a known issue. My current game I received the free Sea Colony Pod for researching Algaculture first. I built a Gun Foil to escort it to the site I had chosen for the colony. Once there, but before being able to build the colony I was attacked by native life. It ignored the Gun Pod and destroyed the Sea Colony Pod first. Is this a bug, or is it simply a feature of this mod that makes it a waste of time to escort Sea Colony Pods? Hope it is a bug, since the latter would be rather irritating. :D Thanks for bringing the flavor of SMAC to CivIV.

It might have been the NL unit owned the "attack weakest unit in a stack" promotion. :dunno:
 
What I did this weekend:

. Factions following their trade partner's favourite civic will provide a trade route income bonus to both factions.
. Diplomacy music added for Domai.
. Base screen music added for the Consciousness, Cult and Drones (same as their diplomacy music).
. Feature fix: thermobaric missiles destroy half the fungus around their target plot.
. Interface: Factions' hated civic shows on the F4 Info tab.
. Interface: # of features present in your territory shows on the F9 Statistics tab.

Regarding the trade route income bonus. If for instance your favourite civic is Knowledge, and both you and the faction you have a trade route with are using Knowledge, then you both get a +50% modifier to the trade route. The other way around too, if for instance your trade partner's favourite civic is Free Market, and you both are using that civic, you both get a +50% bonus for your trade routes with each other.

As money becomes involved, hopefully this will make a human player's favourite civic more relevant. It adds an extra element to diplomacy, both in single player and multiplayer, and could give some use to the "switch civic" diplomacy option.
 
Any thoughts on decreasing trade route income when factions have one anothers' forbidden civic?
 
Not sure if this is just one of those odd AI things but I was playing the Gaians and I had a handy Transcend so I after I got the tech to spawn Cho, I built a city on a island, and then created the Dawn of Planet wonder.

So Cho becomes part of my team. Now the island isn't big enough for another city. So being the helpful ally that I am, I gifted them a transport so they could move their extra colony pod to another area. However, not only did the AI didn't use it, they started to build a new transport.

I haven't played this mod for a long time and I really enjoyed the upgrades. My only complaint is I wish there was a more visual way to tell the mountain ridges which screws up movement. That is really just a machts nichts sort of thing.
 
I've noticed in the last few games of mine that for no apparent reason but I declare war on someone. In my previous game it was Miriam and in my current game it is Yang. I can't get them to talk and I'm not in any alliances which force me to. Even if I use the worldbuilder to force peace as well as change my civics to match my enemy, I end up "You declared war on X" even though I didn't initiate it.

What is stupid is these two were the most relentless AI's on Planet and all they do is crank out units so the game just suddenly becomes a race to see who can produce more units while the other factions traipse to victory.

The only thing I can think of is I've got the Voice of Planet religion but I can't find anything which mandates I have to attack someone.

As far as I can tell, I'm patched to 16a.

Also, any reason why the Wonder movies art doesn't show or have I neglected to copy some art form the original game?
 
Any thoughts on decreasing trade route income when factions have one anothers' forbidden civic?

Might that not make relations between certain factions too determinist?

So Cho becomes part of my team. Now the island isn't big enough for another city. So being the helpful ally that I am, I gifted them a transport so they could move their extra colony pod to another area. However, not only did the AI didn't use it, they started to build a new transport.

There are several different unit AIs for transports. That unit AI type is set when the unit is built and it rarely gets changed by the AI. The unit you gifted the AI had a general troop transport AI. Transporting colony pods is a seperate AI however, so they built a new transport for that specific purpose.

I've noticed in the last few games of mine that for no apparent reason but I declare war on someone. In my previous game it was Miriam and in my current game it is Yang. I can't get them to talk and I'm not in any alliances which force me to. Even if I use the worldbuilder to force peace as well as change my civics to match my enemy, I end up "You declared war on X" even though I didn't initiate it.

Your team mate Cha Dawn is always forced to declare war on the faction with the lowest Planet Attitude. So don't build Dawn of Planet if you don't want to be at war with the biggest polluter.

Also, any reason why the Wonder movies art doesn't show or have I neglected to copy some art form the original game?

Are you aware that at the moment only 17 of the movies have been connected to play in the game?

If you are, please attach a screenshot showing the folder content and structure where you placed the movies.
 
Might that not make relations between certain factions too determinist?

Are you aware that at the moment only 17 of the movies have been connected to play in the game?

If you are, please attach a screenshot showing the folder content and structure where you placed the movies.


Ah, okay so Just Say No to Cho!

As for the Wonder Movies, I "misspoke" as it isn't the movies but just the pop-up. It has been a long time since I played this mod and I seem to recall that previously when you built a Wonder you just got a screen shot of some picture. When I build a wonder, I get a greyish/brown pop-up but no pic.

In fact, after reviewing some of the threads on this forum, I didn't even think you had some of the movies to the point where they'd play like the original game.
 
From the modpacks section, as nobody seems to be looking there for days:
me said:
A question I was not able to answer myself so far: the manual says that Psi combat always begins with a base strength of 3 for the attacker (and 2 or 3 for the def.). Does this get altered if a unit is injured ?

For example, if a unit has normally a :strength: of 7 but currently is injured down to :strength: 3.5, does that mean it will attack in psi combat with psi-strength of 1.5 or psi-strength of 3 ?

Also, do I get this right that modern flamethrower units do not bring any significant advantages against native life ? I noticed that they have a slightly better Psi-attack against mind worms and fungal towers(?), but most notably more modern flame thrower units get upped in :strength: which only helps them against regular military units.
Correct ?

thanks :)
 
Yes, psi strength is altered as in your example when a unit is injured. Besides the changing of combat strength to 2 or 3, psi combat functions exactly the same as conventional combat.

Regarding the flame thrower line, yes and no. The % bonus on the unit itself barely changes. On the other hand:
1) High Chemistry enables both Plasma Throwers, but also Plasma Shard, so a Plasma Thrower with the Plasma Shard spec ab will have a +55% bonus vs worms, while a Flamethrower only has +25%.
2) Hyperians starts with the Empath Song spec ab, which the Flamethrower line normally can't get. Together with the Plasma Shard spec ab that's a +80% bonus vs worms.
 
Back
Top Bottom