adding detail to the trainers script

before the trainers just assumed a nullable pointer. Now it uses an
array instead, specifying the datatype.

This change would have not been possible under the old system - only
now, with data available from scripts, is it possible to do dynamic
sub-structures based on data in the main structure.
add level sanity checks

levels range from 0-100. Add checks to the datatypes with that
knowledge.