They're the FoL version of kelp, like Ancient Forests.
upper right there is a tool bar. click the beaker.
There is a F key short cut too but I dont have it memorized... F6? maybe F5?
Somehow I thought you did.![]()
I'm not sure HOW to do it. I know you can, but I don't know the command... I'd check Orbis, to see how they open up 'Mercenary' screen, when you click the button... Fairly sure that will help you.
enum ButtonPopupTypes // Exposed to Python
{
BUTTONPOPUP_TEXT,
BUTTONPOPUP_MAIN_MENU,
BUTTONPOPUP_CONFIRM_MENU,
BUTTONPOPUP_DECLAREWARMOVE,
BUTTONPOPUP_CONFIRMCOMMAND,
BUTTONPOPUP_LOADUNIT,
BUTTONPOPUP_LEADUNIT,
BUTTONPOPUP_DOESPIONAGE,
BUTTONPOPUP_DOESPIONAGE_TARGET,
[B][COLOR="Red"]BUTTONPOPUP_CHOOSETECH[/COLOR][/B],
BUTTONPOPUP_RAZECITY,
BUTTONPOPUP_DISBANDCITY,
BUTTONPOPUP_CHOOSEPRODUCTION,
BUTTONPOPUP_CHANGECIVIC,
BUTTONPOPUP_CHANGERELIGION,
BUTTONPOPUP_CHOOSEELECTION,
BUTTONPOPUP_DIPLOVOTE,
BUTTONPOPUP_ALARM,
BUTTONPOPUP_DEAL_CANCELED,
BUTTONPOPUP_PYTHON,
BUTTONPOPUP_PYTHON_SCREEN,
BUTTONPOPUP_DETAILS,
BUTTONPOPUP_ADMIN,
BUTTONPOPUP_ADMIN_PASSWORD,
BUTTONPOPUP_EXTENDED_GAME,
BUTTONPOPUP_DIPLOMACY,
BUTTONPOPUP_ADDBUDDY,
BUTTONPOPUP_FORCED_DISCONNECT,
BUTTONPOPUP_PITBOSS_DISCONNECT,
BUTTONPOPUP_KICKED,
BUTTONPOPUP_VASSAL_DEMAND_TRIBUTE,
BUTTONPOPUP_VASSAL_GRANT_TRIBUTE,
BUTTONPOPUP_EVENT,
BUTTONPOPUP_FREE_COLONY,
BUTTONPOPUP_LAUNCH,
BUTTONPOPUP_FOUND_RELIGION,
//FfH: Added by Kael 11/04/2007
BUTTONPOPUP_CONFIRMCASTGLOBAL,
BUTTONPOPUP_CONFIRMCASTWAR,
BUTTONPOPUP_CONFIRMSETTLEMENT,
//FfH: End Add
#ifdef _USRDLL
NUM_BUTTONPOPUP_TYPES
#endif
};
popupInfo = CyPopupInfo()
popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_CHANGECIVIC)
popupInfo.addPopup(iPlayer)
Think you found the same code, actually.Hope it works.
![]()
bool CvDLLButtonPopup::launchChooseTechPopup(CvPopup* pPopup, CvPopupInfo &info)
{
CyArgsList argsList;
argsList.add(GC.getGameINLINE().getActivePlayer());
long lResult=0;
...
int iNumTechs = 0;
for (int iPass = 0; iPass < 2; iPass++)
{
for (int iI = 0; iI < GC.getNumTechInfos(); iI++)
{
if (((iI == eBestTech) || (iI == eNextBestTech)) == (iPass == 0))
{
if ([COLOR="Red"][B]player.canResearch((TechTypes)iI)[/B][/COLOR]):
{
...
iNumTechs++;
}
}
}
}
if (0 == iNumTechs)
{
// player cannot research anything, so don't show this popup after all
[COLOR="Red"][B]return (false)[/B][/COLOR];
}
gDLL->getInterfaceIFace()->popupSetPopupType(pPopup, POPUPEVENT_TECHNOLOGY, ARTFILEMGR.getInterfaceArtInfo("INTERFACE_POPUPBUTTON_TECH")->getPath());
gDLL->getInterfaceIFace()->popupLaunch(pPopup, false, ((iDiscover > 0) ? POPUPSTATE_QUEUED : POPUPSTATE_MINIMIZED));
return (true);
}
bool CvPlayer::canResearch(TechTypes eTech, bool bTrade) const
{
bool bFoundPossible;
bool bFoundValid;
int iI;
if(GC.getUSE_CAN_RESEARCH_CALLBACK())
{
CyArgsList argsList;
argsList.add(getID());
argsList.add(eTech);
argsList.add(bTrade);
long lResult=0;
gDLL->getPythonIFace()->callFunction(PYGameModule, "canResearch", argsList.makeFunctionArgs(), &lResult);
if (lResult == 1)
{
return true;
}
}
if (![COLOR="DarkOrange"][B]isResearch()[/B][/COLOR] && getAdvancedStartPoints() < 0)
{
return false;
}
if (GET_TEAM(getTeam()).isHasTech(eTech))
{
return false;
}
...
return true;
}
bool CvPlayer::isResearch() const
{
if(GC.getUSE_IS_PLAYER_RESEARCH_CALLBACK())
{
CyArgsList argsList;
long lResult;
argsList.add(getID());
lResult = 1;
gDLL->getPythonIFace()->callFunction(PYGameModule, "isPlayerResearch", argsList.makeFunctionArgs(), &lResult);
if (lResult == 0)
{
return false;
}
}
[COLOR="Red"][B] if (!isFoundedFirstCity())
{
return false;
}
[/B][/COLOR]
return true;
}