I have found an issue with the CIV4TechInfos.xml file, which may also point out a problem with the way MapScriptTools.py is doing something.
Some of the techs have an empty PrereqTech tag, like "<PrereqTech/>", inside their AndPreReqs section before one that is not empty. The empty one blocks the one that is not empty from showing up in the list of prereq techs generated by the MapScriptTools.py file. I have not actually checked to see if they are blocked for showing up in game, but if the list the map script tools generates is any indication then they are not being used.
For example, the tech TECH_MODERN_SANITATION has this:
Code:
<AndPreReqs>
<PrereqTech/>
<PrereqTech>TECH_ANTIBIOTICS</PrereqTech>
</AndPreReqs>
Which is apparently either ending the parsing when it hits the <PrereqTech/> or it is putting some invalid value (presumably -1) for a tech into the list of And prereq techs before TECH_ANTIBIOTICS which causes the map script tools assume it has hit the end of the list before it gets to it.
This could be a problem only for the map script tools, since it is not checking to see what the number of And tech prereqs really is and looping over the entire list, but stopping when it hits a value that is not valid for a tech. But that would indicate that either the list is empty or that using a <PrereqTech/> actually makes the list have an array element that is invalid at a lower index than one or more valid entries (they go up as high as, I think, 3 after such a thing).
Even if this does not block them from getting into the data during parsing, putting valid entries in the list after the invalid one (or possibly more than one), and even if the DLL can deal with this and still correctly use the actual prereqs, it is still a bad idea to put bad values into your list of AndPreReqs in front of or in between the valid entries. The CIV4TechInfos.xml should have all of these removed (there are quite a few, some are after all the valid entries which is not a problem, but in at least 2 dozen cases there are techs listed after the empty element). It looks like they only occur in the AndPreReqs in the tech infos.