[BTS 3.13] Civilization Specific Tech Trees

Check out the first post. The mod is now compatible with BTS 3.17. I don't know how many mods are updating to 3.19 but as soon as finish installing the patch I'll make a 3.19 version.

This is awesome! I can't wait til it's updated. It's funny, I was just wishing for something like this so that I could have a bunch of "ethnic" technologies (and, therefore, civics - and have religions only able to be founded by appropriate civs) without having to use a whole pile of dummy techs as prerequisites.

A question though: how exactly does this work? Are other civs able to get these techs through stealing, if I set <bTrade> to 0?
 
@Frekk
If a tech is not of the same channel or the all channel you can not steal, research, or trade it.

@PsiCorps
Actually doesn't sounds too bad. I'll PM you later to make sure I know exactly what you need.
 
I will just ask does not hurt I assume. Have you though about allowing techs to be traded from different tech channels but with a large penalty instead of not at all. I mean like the idea, but the thing that holds me back if that none can be traded. Wish there was something for impossible and something with a severe penalty.

So for example when Europeans reach the new world horseback riding can be taught to the natives in the new world but with a severe penalty, or either something that checks if it is the same tech on the other tech tree but with a different cost. Well I understand ahead of time if too much work, but that it is the hold up on using it to me anyway.
 
hi,

can anyone update this to 3,19?


ive tried, i compiled the sdk,
and got no errors, merged in the schemas, added the tags where they should be,
and it didnt work when i set cannels to civs and techs - <ichannel>1<ichannel> and <itechchannel>1<itechchannel>.

anyone can help?
 
not working at my BTS 3.19 :(

I create similar mod only with python. more simple. (because I unready with dll's :( )

I creating mod with three different races: Humans, mutants and robots.

First I make identical tag in xml:
Spoiler :

robots techs:
<TechInfo>
<Type>TECH_ROBOTTECH1</Type>
<..>
<Quote>Robots technology</Quote>
</TechInfo>

<TechInfo>
<Type>TECH_ROBOTTECH2</Type>
<..>
<Quote>Robots technology</Quote>
</TechInfo>

<TechInfo>
<Type>TECH_ROBOTTECH3</Type>
<..>
<Quote>Robots technology</Quote>
</TechInfo>


humans techs:
<TechInfo>
<Type>TECH_HUMANTECH1</Type>
<..>
<Quote>Humans technology</Quote>
</TechInfo>

<TechInfo>
<Type>TECH_HUMANTECH2</Type>
<..>
<Quote>Humans technology</Quote>
</TechInfo>

<TechInfo>
<Type>TECH_HUMANTECH3</Type>
<..>
<Quote>Humans technology</Quote>
</TechInfo>


mutants techs:
<TechInfo>
<Type>TECH_MutantTECH1</Type>
<..>
<Quote>Mutants technology</Quote>
</TechInfo>

<TechInfo>
<Type>TECH_MutantTECH2</Type>
<..>
<Quote>Mutants technology</Quote>
</TechInfo>

<TechInfo>
<Type>TECH_MutantTECH3</Type>
<..>
<Quote>Mutants technology</Quote>
</TechInfo>






Spoiler CvTechChooser.py :

def placeTechs (self):
<..>
if (gc.getGame().getActiveCivilizationType() == 0 and gc.getTechInfo(i).getQuote() == "Robots technology"):
screen.attachPanelAt( "TechList", szTechRecord, u"", u"", True, False, PanelStyles.PANEL_STYLE_TECH, iX - 6, iY - 6, self.getXStart() + 6, 12 + ( BOX_INCREMENT_HEIGHT * PIXEL_INCREMENT ), WidgetTypes.WIDGET_TECH_TREE, i, -1 )
screen.setActivation( szTechRecord, ActivationTypes.ACTIVATE_MIMICPARENTFOCUS)
screen.hide( szTechRecord )
if (gc.getGame().getActiveCivilizationType() == 1 and gc.getTechInfo(i).getQuote() == "Humans technology"):
screen.attachPanelAt( "TechList", szTechRecord, u"", u"", True, False, PanelStyles.PANEL_STYLE_TECH, iX - 6, iY - 6, self.getXStart() + 6, 12 + ( BOX_INCREMENT_HEIGHT * PIXEL_INCREMENT ), WidgetTypes.WIDGET_TECH_TREE, i, -1 )
screen.setActivation( szTechRecord, ActivationTypes.ACTIVATE_MIMICPARENTFOCUS)
screen.hide( szTechRecord )
if (gc.getGame().getActiveCivilizationType() == 2 and gc.getTechInfo(i).getQuote() == "Mutants technology"):
screen.attachPanelAt( "TechList", szTechRecord, u"", u"", True, False, PanelStyles.PANEL_STYLE_TECH, iX - 6, iY - 6, self.getXStart() + 6, 12 + ( BOX_INCREMENT_HEIGHT * PIXEL_INCREMENT ), WidgetTypes.WIDGET_TECH_TREE, i, -1 )
screen.setActivation( szTechRecord, ActivationTypes.ACTIVATE_MIMICPARENTFOCUS)
screen.hide( szTechRecord )
<..>

def drawArrows (self):
<..>
for j in range( gc.getNUM_OR_TECH_PREREQS() ):

eTech = gc.getTechInfo(i).getPrereqOrTechs(j)
if (gc.getGame().getActiveCivilizationType() == 0 and gc.getTechInfo(i).getQuote() == "Robots technology"):
reikvaras = 1
elif (gc.getGame().getActiveCivilizationType() == 1 and gc.getTechInfo(i).getQuote() == "Humans technology"):
reikvaras = 1
elif (gc.getGame().getActiveCivilizationType() == 2 and gc.getTechInfo(i).getQuote() == "Mutants technology"):
reikvaras = 1
else:
reikvaras = 2

if ( eTech > -1 and reikvaras == 1):
<..>





Also I made three differents bacgrounds:
Spoiler :

# Here we set the background widget and exit button, and we show the screen
screen.showWindowBackground( False )
screen.setDimensions(screen.centerX(0), screen.centerY(0), 1024, 768)
screen.addPanel( "TechTopPanel", u"", u"", True, False, 0, 0, 1024, 55, PanelStyles.PANEL_STYLE_TOPBAR )
if (gc.getGame().getActiveCivilizationType() == 0):
screen.addDDSGFC("TechBG", ArtFileMgr.getInterfaceArtInfo("SCREEN_BG_ROBOTS").getPath(), 0, 48, 1024, 672, WidgetTypes.WIDGET_GENERAL, -1, -1 )
if (gc.getGame().getActiveCivilizationType() == 1):
screen.addDDSGFC("TechBG", ArtFileMgr.getInterfaceArtInfo("SCREEN_BG_HUMANS").getPath(), 0, 48, 1024, 672, WidgetTypes.WIDGET_GENERAL, -1, -1 )
if (gc.getGame().getActiveCivilizationType() == 2):
screen.addDDSGFC("TechBG", ArtFileMgr.getInterfaceArtInfo("SCREEN_BG_MUTANTS").getPath(), 0, 48, 1024, 672, WidgetTypes.WIDGET_GENERAL, -1, -1 )
if (gc.getGame().getActiveCivilizationType() != 0 and gc.getGame().getActiveCivilizationType() != 1 and gc.getGame().getActiveCivilizationType() != 2):
screen.addDDSGFC("TechBG", ArtFileMgr.getInterfaceArtInfo("SCREEN_BG_OPAQUE").getPath(), 0, 48, 1024, 672, WidgetTypes.WIDGET_GENERAL, -1, -1 )
screen.addPanel( "TechBottomPanel", u"", u"", True, False, 0, 713, 1024, 55, PanelStyles.PANEL_STYLE_BOTTOMBAR )
screen.setText( "TechChooserExit", "Background", u"<font=4>" + CyTranslator().getText("TXT_KEY_PEDIA_SCREEN_EXIT", ()).upper() + "</font>", CvUtil.FONT_RIGHT_JUSTIFY, 994, 726, 0, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_CLOSE_SCREEN, -1, -1 )
screen.setActivation( "TechChooserExit", ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )






In result - three completely differents techs trees:

Humans:
Spoiler :




Mutants:
Spoiler :




Robots:
Spoiler :


 
This mod is great and just what I'm looking for.

However, would it be possible to have it so that a civilization could go down more than one channel? For example, in my mod, there are the Mauryans. I would like them to access all the generic techs (so those techs are set to -1), Mauryan-specific techs (so those techs set to the same channel as Maurya) - but also I want them to be able to research techs specific to all civs from the Indian subcontinent....so I'd need them to be able to access two channels rather than one.

Is it do-able?
 
I'd like to know, since it isn't that clear to me - does this work with BtS 3.19? And, is it possible that this be made into a python modcomp instead of an SDK modcomp?
 
I'd like to know, since it isn't that clear to me - does this work with BtS 3.19? And, is it possible that this be made into a python modcomp instead of an SDK modcomp?

The one bit I can answer is that it is compatible with BtS 3.19 - it says so in post #47.
 
Oh. I thought he meant that he was going to update it to 3.19, but it wasn't updated yet.


Anyhow, in the modcomp here, I'm assuming that the tech titled something like "ssfsoifjaosfjoawiefwfnoaisnfgh" is just a test, right?
 
I merged this into a mod I am trying to build, and have had no problems. Just to let you know. It just works as intended.
 
Alright, I'm a bit curious here, as I found a tag in the CivilizationInfos.xml, <DisableTechs/>. Apparently that tag prevents a civ from researching a specified technology. What is the difference between that tag and this modcomp, besides the fact that this modcomp makes things a bit more convenient?
 
Well I have never used the "<DisableTechs>" Did not even know of it till you just said something. Well I assume that just removes tech from being available from a civilization.

This could use the same space for example on the tech tree that is different for each civilization. For example if you wanted a different polytheism tech for each civilization to found different religions... You can have Polytheism 1, Polytheism 2, Polytheism 3, and etc. You need to tell each tech to match a new channel so you could have channel 1, channel 2, channel 3, and etc. The Rome uses channel 1 say so you have the Roman religion, Egypt has channel 2 so the Egyptian religion, Mayans have channel 3 so the Mayan religion.

That is just an example but the python screen included hides the techs not available to your tech channel. So you do not have to figure how to have non-researchable techs hidden. They are a lot of different uses I mean. This is a really small change. It is very easy to do in the SDK by anyone.

I just do not know what "disabletechs" does. But it sounds like it would be more work to list every tech that you do not want. You would have to make every tech fit on the screen somehow then disable them if you wanted new unique techs, and I doubt it hides them. I never tried it though again. I am just guessing.
 
Interesting. Well, for my purposes, first and foremost, I like to include as little SDK as possible, so that is why this <DisableTechs> seems so appealing, despite the big hassle that would be involved in the xml. Although you are right in that making the techs visible and invisible for each civilization would be a bit of a problem.
 
Back
Top Bottom