I can't see any problem with that spell - it should work (at least in KeweperFX).
Code:
cctrl = creature_control_get_from_thing(thing);
crstat = creature_stats_get_from_thing(thing);
if ((cctrl->flgfield_1 & 0x04) == 0)
{
// Compute armor value
carmor = crstat->armour;
if ((cctrl->spell_flags & CSF_Armour) != 0)
carmor = (320 * carmor) / 256;
// This limit makes armor absorb up to 80% of damage, never more
if (carmor > 204)
carmor = 204;
if (carmor < 0)
carmor = 0;
// Now compute damage
cdamage = (dmg * (256 - carmor)) / 256;
if (cdamage <= 0)
cdamage = 1;
// Apply damage to the thing
thing->health -= cdamage;
thing->word_17 = 8;
thing->field_4F |= 0x80;
// Red palette if the possessed creature is hit very strong
if (thing->owner != game.neutral_player_num)
{
player = get_player(thing->owner);
if (thing_get(player->field_2F) == thing)
{
i = (10 * cdamage) / compute_creature_max_health(crstat->health,cctrl->explevel);
if (i > 10)
{
i = 10;
} else
if (i <= 0)
{
i = 1;
}
PaletteApplyPainToPlayer(player, i);
}
}
}