1.- Si te refieres a los puntos del programa donde se inicializan los valores de vida y vida máxima, entonces las variables quedan sin inicializar y pueden contener cualquier valor. Ese podría ser uno de los problemas.
2.- Si te refieres a los puntos donde se resta la vida, quizá pueda haber problemas cuando se sube de nivel dado que se recalculan los dos niveles de vida (actual y máximo).
3.- También ten en cuenta, por si te sirve de algo, que los cálculos de vida y vida máxima se hacen en BCD, no en binario natural.
1.- Esa rutina no la he tocado, la he dejado tal como esta.
2.- Esa es la que creo que me da (o daba) los problemas
3.- Si, ya me había dado cuenta (más que nada por las instrucciones de ajuste)
En realidad solo quería disfrutar (y aprender, of course) con el código.