Heh, mine is fixed. :p
I normalize everything to a weighted 0-100% scale. In fact, I need to put a test mode in so corner cases can be verified.
You can get negatives actually. If a creature sucks so bad that it's below the mins, then it can create a negative impacting the computation.
I have the math part COVERED!

here's the computation of the weighted percentage:
set !eval_score_percent ( 65 * !resist ) + ( 25 * !hp ) + ( 5 * !skills ) + ( 5 * !stats )
gosub TM_DecimalDivision !eval_score_percent 100 2
set !eval_score_percent_formatted #RESULT
pretty straight forward. This is the normalization sub:
;---------------------------------------------------------------------
; %1 carry value
; %2 multiplier
; %3 actual value
; %4 minvalue
; %5 maxvalue
sub NormalizeValue
set #RESULT %1
if %4 <> N/A
{
set #RESULT #RESULT + ( ( ( %3 - %4 ) * %2 ) / ( %5 - %4 ) )
set %count %count + 1
}
return #RESULT
So that basically works out to:
percentage (0-100%) = ( ( actual value - min value ) * multiplier ) / ( max value - min value) )
So this gives a weighted average as the actual value moves from min to max, or 0-100%
The multiplier is just there to maintain numerical precision throughout the computation until the decimal division can be performed.