Cruel
King
The answer would definatly be SDK as python that would be a long code and pretty taxxing on game preformance (assuming your doing more than one unit)
The_J are you have the same opinion? A small program of this nature have a high impact?
The answer would definatly be SDK as python that would be a long code and pretty taxxing on game preformance (assuming your doing more than one unit)
taxing...I don't think so, since not many GPs are born.
But I'm not even sure if it's possible to do it Python, since there's AFAIK no real counter for the GPs, means there's no way to determine how many names are already used. *that* is the main problem.
Game options need XML + SDK to properly work, no Python involved, sorry.

if (gc.getGame().getGameTurnYear() == gc.getDefineINT("START_YEAR") and not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_START)):
if not gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ADVANCED_START):

.
.
You are doing a great job here and thanks for it. 
In my mod 's is it Swamp .
What is your mod? Link?
pPlayer = gc.getPlayer(pWinner.getOwner())
if pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_TRAINER')):
if (unitY.getUnitCombatType() == gc.getInfoTypeForString("UNITCOMBAT_ANIMAL")):
if CyGame().getSorenRandNum(100, "Bob") <= 20:
iUnit = pLoser.getUnitType()
newUnit = pPlayer.initUnit(gc.getInfoTypeForString( 'UNIT_T_WOLF' ), pWinner.getX(), pWinner.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.NO_DIRECTION)
newUnit.finishMoves()
CyInterface().addMessage(pWinner.getOwner(),False,15,CyTranslator().getText("TXT_KEY_TRAINER",()),'',0,'Art/Interface/Buttons/Units/wolf.dds',ColorTypes(44), pWinner.getX(), pWinner.getY(), True,True)
if pLoser.isAnimal():

pPlayer = gc.getPlayer(pWinner.getOwner())
if pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_TRAINER')):
if pLoser.isAnimal():
if CyGame().getSorenRandNum(100, "Bob") <= 19:
newUnit = pPlayer.initUnit(gc.getInfoTypeForString( 'UNIT_T_WOLF' ), pWinner.getX(), pWinner.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.NO_DIRECTION)
newUnit.finishMoves()
CyInterface().addMessage(pWinner.getOwner(),False,15,CyTranslator().getText("TXT_KEY_TRAINER",()),'',0,'Art/Interface/Buttons/Units/wolf.dds',ColorTypes(44), pWinner.getX(), pWinner.getY(), True,True)

pPlayer = gc.getPlayer(pWinner.getOwner())
if pWinner.isHasPromotion(gc.getInfoTypeForString('PROMOTION_TRAINER')):
if pLoser.isAnimal():
if CyGame().getSorenRandNum(100, "Bob") < 20:
newUnit = pPlayer.initUnit(gc.getInfoTypeForString( 'UNIT_T_WOLF' ), pWinner.getX(), pWinner.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.NO_DIRECTION)
newUnit.finishMoves()
CyInterface().addMessage(pWinner.getOwner(),False,15,CyTranslator().getText("TXT_KEY_TRAINER",()),'',0,'Art/Interface/Buttons/Units/wolf.dds',ColorTypes(44), pWinner.getX(), pWinner.getY(), True,True)
Today platyping because was the log in . I have this weekend off, so tune my mod 
I guess we might need a "quick python questions" thread.
And lets be honust....most python questions aren't quick