From: Ron Koenderink Date: Thu, 16 Dec 2004 19:40:06 +0000 (+0000) Subject: (ac_calc_flak,ac_fireflak,pinflak_planedamage): New ac_calc_flak(). X-Git-Tag: v4.2.19~34 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=2c4b89e2d13552e2ba850bfd4a0b3201521dd515 (ac_calc_flak,ac_fireflak,pinflak_planedamage): New ac_calc_flak(). Move common flak damage code from ac_fireflak() and pinflak_planedamage() to ac_calc_flak(). --- diff --git a/include/plane.h b/include/plane.h index 10966b500..d236ba91c 100644 --- a/include/plane.h +++ b/include/plane.h @@ -175,6 +175,7 @@ extern void ac_doflak(struct emp_qelem *, struct sctstr *); extern void ac_shipflak(struct emp_qelem *, coord, coord); extern void ac_landflak(struct emp_qelem *, coord, coord); extern void ac_fireflak(struct emp_qelem *, natid, natid, int); +extern int ac_flak_dam(int); extern void ac_encounter(struct emp_qelem *, struct emp_qelem *, coord, coord, s_char *, int, int, struct emp_qelem *, struct emp_qelem *); diff --git a/src/lib/commands/bomb.c b/src/lib/commands/bomb.c index befbc13e6..b9290a346 100644 --- a/src/lib/commands/bomb.c +++ b/src/lib/commands/bomb.c @@ -885,11 +885,6 @@ strat_bomb(struct emp_qelem *list, struct sctstr *target) putsect(§); } -#define FLAK_MAX 15 -float lflaktable[16] = { 0.20, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, - 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, -}; - static int pinflak_planedamage(struct plnstr *pp, struct plchrstr *pcp, natid from, int flak) @@ -902,26 +897,13 @@ pinflak_planedamage(struct plnstr *pp, struct plchrstr *pcp, natid from, struct lndstr land; natid plane_owner; int dam; - float mult; flak -= (pp->pln_def + 1); if (pcp->pl_flags & P_X) flak -= 2; if (pcp->pl_flags & P_H) flak -= 1; - if (flak > 8) - mult = lflaktable[FLAK_MAX] * 1.33; - else if (flak < -7) - mult = lflaktable[0] * 0.66; - else { - flak += 7; - mult = lflaktable[flak]; - } - mult *= flakscale; - dam = (int)((roll(8) + 2) * mult); - if (dam > 100) - dam = 100; - + dam = ac_flak_dam(flak); disp = 0; plane_owner = pp->pln_own; eff = pp->pln_effic; diff --git a/src/lib/global/constants.c b/src/lib/global/constants.c index 9a8958a0e..8e3dccfba 100644 --- a/src/lib/global/constants.c +++ b/src/lib/global/constants.c @@ -161,7 +161,7 @@ double bankint = 0.25; /* bank interest rate (dt * bars) */ double tradetax = 0.99; /* Tax charged on trade */ double buytax = 1.0; /* Tax charged on market purchases */ int startmob = 127; /* Sanctuary starting mobility */ -double flakscale = 1.75; /* Scale factor for flak damage */ +float flakscale = 1.75f; /* Scale factor for flak damage */ /* money gained from taxes, paid to military, and reservists */ double money_civ = 0.0083333; diff --git a/src/lib/subs/aircombat.c b/src/lib/subs/aircombat.c index 11f46227d..939a736b7 100644 --- a/src/lib/subs/aircombat.c +++ b/src/lib/subs/aircombat.c @@ -61,13 +61,6 @@ static void getilist(struct emp_qelem *list, natid own, struct emp_qelem *c, struct emp_qelem *d); static void ac_dog(struct plist *ap, struct plist *dp); -#define FLAK_MAX 15 - - /* -7 -6 -5 -4 -3 -2 -1 0 */ -float flaktable[16] = { 0.20, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, - 0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, -}; - void ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list, coord x, coord y, s_char *path, int mission_flags, @@ -940,7 +933,6 @@ ac_fireflak(struct emp_qelem *list, natid from, natid other, int guns) struct plnstr *pp; struct plist *plp; int n; - float mult; int diff; struct emp_qelem *qp; struct emp_qelem *next; @@ -964,22 +956,42 @@ ac_fireflak(struct emp_qelem *list, natid from, natid other, int guns) diff -= 2; if (plp->pcp->pl_flags & P_H) diff -= 1; - if (diff > 8) - mult = flaktable[FLAK_MAX] * 1.33; - else if (diff < -7) - mult = flaktable[0] * 0.66; - else { - diff += 7; - mult = flaktable[diff]; - } - mult *= flakscale; - n = (int)((roll(8) + 2) * mult); - if (n > 100) - n = 100; + n = ac_flak_dam(diff); ac_planedamage(plp, from, n, other, 2, 1, msg); } } +/* + * Calculate flak damage + */ +int +ac_flak_dam(int flak) +{ + int dam; + float mult; + /* <-7 -7 -6 -5 -4 */ + static float flaktable[18] = { 0.132f, 0.20f, 0.20f, 0.25f, 0.30f, + /* -3 -2 -1 0 +1 +2 +3 +4 */ + 0.35f, 0.40f, 0.45f, 0.50f, 0.50f, 0.55f, 0.60f, 0.65f, + /* +5 +6 +7 +8 >+8 */ + 0.70f,0.75f, 0.80f, 0.85f, 1.1305f }; + enum { FLAK_MAX = sizeof(flaktable)/sizeof(flaktable[0]) }; + + if (flak > 8) + mult = flaktable[FLAK_MAX]; + else if (flak < -7) + mult = flaktable[0]; + else { + flak += 8; + mult = flaktable[flak]; + } + mult *= flakscale; + dam = (int)((roll(8) + 2) * mult); + if (dam > 100) + dam = 100; + return(dam); +} + /* * See if this plane is flying in this list */