Outcome types already have a text label each (e.g. in the case of Subdue Animal it is TXT_KEY_OUTCOME_SUBDUE) which you can get from the outcome info class (it is inherited from the info base class). The information which promotions add an extra chance to an outcome type is currently only in the outcome info class. If you want to know for a promotion, if it adds an extra chance to any outcome type, you have to loop through all outcome infos and check. What I mean with mirroring is adding a vector of OutcomeType to the promotion info and then after all XML is read loop once through all outcome infos, read the list of extra chance promotions in each and enter the outcome type into the new vector for those promotions. Now it is cheaper to query if a specific promotion increases the chance for any outcomes by checking that new vector in the promotion info. There are also some other information types that could use that kind of cheaper reverse lookup (at the cost of some memory). I agree, an AI weight should probably be added to the outcome info specifically for this extra chance evaluations for promotions (there is already code to evaluate specific outcome lists for outcome missions).