Maybe you accidentally paused the game? IIRC that could prevent you changing the tech.
I had a weird issue when choosing what to research: when I tried to research machinery or some such, it researched pottery instead, even though I'm certain I should have been able to research it. No matter what I did, it tried to research some earlier thing instead.
You may have been certain you should have been able to research it, but you were wrong.
Machinery requires Metal Casting which requires Pottery.
You may have been certain you should have been able to research it, but you were wrong.
That is a fix to an exploit that allows you to choose as many free techs as you like. I haven't tested it with PBEM games, but I'm surprised that would cause any issues. Can you please answer the following?
- When did it ask you to choose a tech? As soon as you loaded the game or after you hit End Turn?
- What player # are you (if you started the game, probably 0)?
- Does it ask you to pick again?
- Are you blocked from continuing the game, even without your free tech?
- How many human players total?
- How many non-humans excluding barbs?
- Running as a mod or in CustomAssets?
- Other things asked on the Troubleshooting page in my sig.
Well, it's not the end of the world. To be honest, I'm so dominant in the game that it's probably a good thing But if there's an underlying problem, it would be nice to fix before it crops up again.I am really sorry this happened to you. Unfortunately, I can't think of a way to fix it in your current game. Any fix would require changing the DLL (where the problem occurs) which would invalidate the saved game AFAIK. I assume you've tried reloading the game?
Sure, sent.I am hoping the solution is simply ignoring the issue when a PBEM game is involved and let the players enforce it themselves. Could you send me the save game from the turn before to my name at gmail.com? I'll see if I can do a quick test.
/************************************************************************************************/
/* UNOFFICIAL_PATCH 10/21/09 jdog5000 */
/* */
/* Bugfix */
/************************************************************************************************/
/* orginal bts code
iValue += (getNumCities() * 6 * AI_getHealthWeight(isCivic(eCivic) ? -kCivic.getExtraHealth() : kCivic.getExtraHealth(), 1)) / 100;
*/
iValue += (iCities * 6 * AI_getHealthWeight(kCivic.getExtraHealth(), 1)) / 100;
/************************************************************************************************/
/* UNOFFICIAL_PATCH END */
/************************************************************************************************/
/************************************************************************************************/
/* UNOFFICIAL_PATCH 10/21/09 jdog5000 */
/* */
/* Bugfix */
/************************************************************************************************/
/* orginal bts code
iValue += std::max(0, -iTempValue);
*/
// Negative health changes should produce a negative value, not the same value as positive
iValue += std::min(0, iTempValue);
/************************************************************************************************/
/* UNOFFICIAL_PATCH END */
/************************************************************************************************/
AI_getHealthWeight(isCivic(eCivic) ? -kCivic.getExtraHealth() : kCivic.getExtraHealth(), 1)
iValue += (getNumCities() * (isCivic(eCivic)?-6:6) * AI_getHealthWeight(isCivic(eCivic) ? -kCivic.getExtraHealth() : kCivic.getExtraHealth(), 1)) / 100;
void CvTeam::setHasTech(TechTypes eIndex, bool bNewValue, PlayerTypes ePlayer, bool bFirst, bool bAnnounce)
for (iI = 0; iI < GC.getMapINLINE().numPlotsINLINE(); iI++)
{
pLoopPlot = GC.getMapINLINE().plotByIndexINLINE(iI);
if (pLoopPlot->getBonusType() != NO_BONUS)
{
if (pLoopPlot->getTeam() == getID())
{
if ((GC.getBonusInfo(pLoopPlot->getBonusType()).getTechReveal() == eIndex) ||
(GC.getBonusInfo(pLoopPlot->getBonusType()).getTechCityTrade() == eIndex) ||
(GC.getBonusInfo(pLoopPlot->getBonusType()).getTechObsolete() == eIndex))
{
pLoopPlot->updatePlotGroupBonus(false);
}
}
}
}
m_pabHasTech[eIndex] = bNewValue;
for (iI = 0; iI < GC.getMapINLINE().numPlotsINLINE(); iI++)
{
pLoopPlot = GC.getMapINLINE().plotByIndexINLINE(iI);
if (pLoopPlot->getBonusType() != NO_BONUS)
{
if (pLoopPlot->getTeam() == getID())
{
if ((GC.getBonusInfo(pLoopPlot->getBonusType()).getTechReveal() == eIndex) ||
(GC.getBonusInfo(pLoopPlot->getBonusType()).getTechCityTrade() == eIndex) ||
(GC.getBonusInfo(pLoopPlot->getBonusType()).getTechObsolete() == eIndex))
{
pLoopPlot->updatePlotGroupBonus(true);
}
}
}
}
for (iI = 0; iI < GC.getMapINLINE().numPlotsINLINE(); iI++)
{
pLoopPlot = GC.getMapINLINE().plotByIndexINLINE(iI);
// Thomas SG - Bugfix
if (pLoopPlot->isCity(false,getID()))
{
pLoopPlot->updatePlotGroupBonus(false);
}
else if (pLoopPlot->getBonusType() != NO_BONUS)
{
if (pLoopPlot->getTeam() == getID())
{
if ((GC.getBonusInfo(pLoopPlot->getBonusType()).getTechReveal() == eIndex) ||
(GC.getBonusInfo(pLoopPlot->getBonusType()).getTechCityTrade() == eIndex) ||
(GC.getBonusInfo(pLoopPlot->getBonusType()).getTechObsolete() == eIndex))
{
pLoopPlot->updatePlotGroupBonus(false);
}
}
}
}
m_pabHasTech[eIndex] = bNewValue;
for (iI = 0; iI < GC.getMapINLINE().numPlotsINLINE(); iI++)
{
pLoopPlot = GC.getMapINLINE().plotByIndexINLINE(iI);
// Thomas SG - Bugfix
if (pLoopPlot->isCity(false,getID()))
{
pLoopPlot->updatePlotGroupBonus(true);
}
else if (pLoopPlot->getBonusType() != NO_BONUS)
{
if (pLoopPlot->getTeam() == getID())
{
if ((GC.getBonusInfo(pLoopPlot->getBonusType()).getTechReveal() == eIndex) ||
(GC.getBonusInfo(pLoopPlot->getBonusType()).getTechCityTrade() == eIndex) ||
(GC.getBonusInfo(pLoopPlot->getBonusType()).getTechObsolete() == eIndex))
{
pLoopPlot->updatePlotGroupBonus(true);
}
}
}
}
I've noticed this as well. The problem is that the unofficial patch does not save the variable "m_bChoosingFreeTech" in the save files. This means that if you reload the save game on the same turn that you get a free tech, it will assume you are not meant to be choosing a free tech, and thus will call you a cheater. Unfortunately, in PBEM games, every turn reloads the save... so it always triggers the bug.I've just got Liberalism, but when I try to select my free tech, I get in red "You have already chosen your free tech(s)". Googling this phrase brings up this page:
http://code.google.com/p/planetfall...ssets/XML/Text/TextBULL.xml?spec=svn888&r=888, which lists that phrase as a text resource under "<!-- Free Tech Popup Fix -->" with the tag "<Tag>TXT_KEY_CHEATERS_NEVER_PROSPER</Tag>"
I am certainly not cheating - but it looks like the game thinks I am!
Yes, it only happens on the autosave on the exact turn of getting the free tech. So it isn't really a big deal for normal games. But the big problem is that in play-by-email games, every turn is essentially loading an autosave. So this bug can not be avoided - you always miss the free tech. (At least, that's how I understand it. I've never actually played a PBEM game.)Unfortunately, for the Unofficial Patch breaking saved game compatibility wasn't an option. You can try loading the autosave immediately before the turn where you acquired Liberalism. Did you by chance reload the autosave of the turn where you just acquired it? Otherwise it shouldn't happen.
/************************************************************************************************/
/* UNOFFICIAL_PATCH 08/04/09 jdog5000 */
/* */
/* Player interface */
/************************************************************************************************/
/* original bts code
deleteMissionQueueNode(headMissionQueueNode());
*/
if (!isHuman() || (headMissionQueueNode()->m_data.eMissionType != MISSION_MOVE_TO))
{
deleteMissionQueueNode(headMissionQueueNode());
}
else
{
if (canAllMove() || (nextMissionQueueNode(headMissionQueueNode()) == NULL))
{
deleteMissionQueueNode(headMissionQueueNode());
}
}
/************************************************************************************************/
/* UNOFFICIAL_PATCH END */
/************************************************************************************************/