]> git.pond.sub.org Git - empserver/commitdiff
Factor new lnd_sabo() out of sabo()
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 1 Aug 2009 22:34:20 +0000 (18:34 -0400)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 5 Dec 2009 14:19:37 +0000 (15:19 +0100)
This permits giving seagun(), fortgun() and landunitgun() internal
linkage.

include/land.h
include/prototypes.h
src/lib/commands/sabo.c
src/lib/subs/landgun.c

index 6f5232ffc12cef5fdbaf17a1412809ef14b725a4..5f8bbb9a84e666004bdfababd3b000dc43834f43 100644 (file)
@@ -165,6 +165,7 @@ extern int lnd_nxlight(struct lndstr *);
 extern int lnd_nland(struct lndstr *);
 
 extern int lnd_fire(struct lndstr *);
+extern int lnd_sabo(struct lndstr *, short *);
 extern double lnd_fire_range(struct lndstr *);
 
 /* src/lib/subs/lndsub.c */
index 9cc98f7aa48dc1be2542295dfb0ff14637ffda01..5f7ad29720e1dbab67b09d99ca3df2f2ba4a9597 100644 (file)
@@ -454,9 +454,6 @@ extern void lnd_oninit(void *);
 extern void lnd_postread(int, void *);
 extern void lnd_prewrite(int, void *, void *);
 /* landgun.c */
-extern double seagun(int, int);
-extern double fortgun(int, int);
-extern double landunitgun(int, int);
 extern double torprange(struct shpstr *);
 extern double fortrange(struct sctstr *);
 extern int roundrange(double);
index e8af7df0c3777c7f4d0930dc18bc2665f96d28aa..51cae85a15cf5b2010c688a9784eb9755bb64cd2 100644 (file)
@@ -69,7 +69,6 @@ sabo(void)
            pr("%s has no shells.\n", prland(&land));
            continue;
        }
-       --land.lnd_item[I_SHELL];
 
        odds = LND_SPY_DETECT_CHANCE(land.lnd_effic);
        if (chance(odds)) {
@@ -83,13 +82,9 @@ sabo(void)
            continue;
        }
 
-       dam = fortgun(3 * land.lnd_effic, 7);
-       if (sect.sct_item[I_SHELL] > 20)
-           dam += seagun(land.lnd_effic,
-                         random() % (sect.sct_item[I_SHELL] / 10));
-       if (sect.sct_item[I_PETROL] > 100)
-           dam += seagun(land.lnd_effic,
-                         random() % (sect.sct_item[I_PETROL] / 50));
+       dam = lnd_sabo(&land, sect.sct_item);
+       if (dam < 0)
+           continue;
 
        pr("Explosion in %s causes %d damage.\n",
           xyas(land.lnd_x, land.lnd_y, land.lnd_own), dam);
index cd4298cdb44a760e0e8f10f9953282a99105b482..714af4b2a998f64136e607b2d5fb4f4cb3fc8c5e 100644 (file)
@@ -42,7 +42,7 @@
 #include "sect.h"
 #include "ship.h"
 
-double
+static double
 fortgun(int effic, int guns)
 {
     double d;
@@ -53,7 +53,7 @@ fortgun(int effic, int guns)
     return d;
 }
 
-double
+static double
 seagun(int effic, int guns)
 {
     double d;
@@ -65,7 +65,7 @@ seagun(int effic, int guns)
     return d;
 }
 
-double
+static double
 landunitgun(int effic, int guns)
 {
     double d;
@@ -202,6 +202,31 @@ lnd_fire(struct lndstr *lp)
     return d;
 }
 
+/*
+ * Sabotage with land unit LP.
+ * Use ammo.
+ * Return damage if the land unit sabotages, else -1.
+ */
+int
+lnd_sabo(struct lndstr *lp, short item[])
+{
+    int dam;
+
+    if (lp->lnd_ship >= 0 || lp->lnd_land >= 0)
+       return -1;
+    if (!(lchr[lp->lnd_type].l_flags & L_SPY))
+       return -1;
+    if (!lp->lnd_item[I_SHELL])
+       return -1;
+    lp->lnd_item[I_SHELL]--;
+    dam = fortgun(3 * lp->lnd_effic, 7);
+    if (item[I_SHELL] > 20)
+       dam += seagun(lp->lnd_effic, random() % (item[I_SHELL] / 10));
+    if (item[I_PETROL] > 100)
+       dam += seagun(lp->lnd_effic, random() % (item[I_PETROL] / 50));
+    return dam;
+}
+
 /*
  * Return number of guns ship SP can fire.
  */