Básicamente lo que andas diciendo se acerca bastante más al sistema que tengo xD.
La media que hago no es aritmética, además cuando hay cierta diferencia de nivel entre el de mayor y un pokémon, deja de contarlo.
Y Lógicamente, los pokémon tienen un nivel base con un intervalo aleatorio.
La base y la aleatoriedad son distinta para los salvajes y los distintos tipos de entrenadores.
Además un mismo entrenador en una partida tendrá siempre las mismas 'diferencias' de niveles entre sus pokemon. O sea, si vas a un trainer con "nivel base = 20" y sus pokémon tienen niveles (19, 14, 17) y te derrota, los niveles serán los mismos al volver. Por otro lado, si vuelves con "nivel base = 25) sus niveles serán (24, 19, 21).
Para generar la aleatoriedad utilizo un seed con el TID y el SID (Así me aseguro que en cada partida sea constante). A este seed le añado alguna operación con el id de entrenador del enemigo.
Y bueno, tengo ciertas funciones para poder apagar y encender el sistema, desplazar el offset de nivel la cantidad que yo quiera, fijar el nivel en uno dado.... En fin, funcionalidades varias-