#include "pline.h" #include "damage.h" DAMAGE damage_add(DAMAGE a, DAMAGE b) { return(DMG_GENERAL(a.ordinary+b.ordinary,a.magiconly+b.magiconly,a.timeonly+b.timeonly)); } DAMAGE damage_sub(DAMAGE a, DAMAGE b) { int o; int mo; int to; o = a.ordinary - b.ordinary; mo = a.magiconly - b.magiconly; to = a.timeonly - b.timeonly; if ((o < 0) || (mo < 0) || (to < 0)) panic("damage_sub underflow"); return(DMG_GENERAL(o,mo,to)); } DAMAGE damage_proportion(DAMAGE d, int n) { DAMAGE r; int t; t = d.ordinary + d.magiconly + d.timeonly; if (t < 1) return(d); r.ordinary = (n * d.ordinary) / t; n -= r.ordinary; t -= d.ordinary; if (t) { r.magiconly = (n * d.magiconly) / t; n -= r.magiconly; } else { r.magiconly = 0; } r.timeonly = n; return(r); }