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 *);
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)
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;
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;
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,
struct plnstr *pp;
struct plist *plp;
int n;
- float mult;
int diff;
struct emp_qelem *qp;
struct emp_qelem *next;
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
*/