]> git.pond.sub.org Git - empserver/blobdiff - src/lib/subs/attsub.c
Replace "roll0(N) + M" by "roll(N) + M-1"
[empserver] / src / lib / subs / attsub.c
index 92262f6fe31467b2e69cc002cf187136429da352..ef22fac45b158ebbf784344c0827b4094e0349fe 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2011, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2013, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                Ken Stevens, Steve McClure, Markus Armbruster
  *
  *  Empire is free software: you can redistribute it and/or modify
  *  Known contributors to this file:
  *     Ken Stevens, 1995
  *     Steve McClure, 1996-2000
- *     Markus Armbruster, 2006-2009
+ *     Markus Armbruster, 2006-2012
  */
 
 #include <config.h>
 
 #include <ctype.h>
 #include <math.h>
+#include "chance.h"
 #include "combat.h"
+#include "empobj.h"
 #include "file.h"
 #include "map.h"
 #include "misc.h"
 #include "mission.h"
+#include "news.h"
 #include "nsc.h"
 #include "optlist.h"
 #include "path.h"
 #include "plague.h"
 #include "player.h"
 #include "prototypes.h"
-#include "xy.h"
-#include "empobj.h"
 #include "unit.h"
+#include "xy.h"
 
 #define CASUALTY_LUMP  1       /* How big casualty chunks should be */
 
@@ -1457,7 +1459,6 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
 {
     struct nstr_item ni;
     struct lndstr land;
-    struct sctstr sect, dsect;
     struct ulist *llp;
     int dtotal;
     double new_land = 0;
@@ -1465,7 +1466,6 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
     double pathcost;
     int origx, origy;
     double eff = att_combat_eff(def);
-    char buf[1024];
 
     if (list)
        dtotal = get_dtotal(def, list, 1.0, 1);
@@ -1497,12 +1497,10 @@ att_reacting_units(struct combat *def, struct emp_qelem *list, int a_spy,
        if (!in_oparea((struct empobj *)&land, def->x, def->y))
            continue;
 
-       getsect(land.lnd_x, land.lnd_y, &sect);
-       getsect(def->x, def->y, &dsect);
-       if (!BestLandPath(buf, &sect, &dsect, &pathcost,
-                         lnd_mobtype(&land)))
+       pathcost = path_find(land.lnd_x, land.lnd_y, def->x, def->y,
+                           def->own, lnd_mobtype(&land));
+       if (pathcost < 0)
            continue;
-
        mobcost = lnd_pathcost(&land, pathcost);
        if (land.lnd_mobil < mobcost)
            continue;
@@ -1839,12 +1837,12 @@ att_fight(int combat_mode, struct combat *off, struct emp_qelem *olist,
      * since a single dead guy normally wouldn't cause a commander to
      * rethink his strategies, but 50 dead guys might.
      */
-    odds += (random() % 11 - 5) / 100.0;
+    odds += (roll(11) - 6) / 100.0;
     if (odds < 0.0)
        odds = 0.1;
     if (odds > 1.0)
        odds = 1.0;
-    recalctime = 8 + (random() % 43);
+    recalctime = 7 + roll(43);
     while (!success && ototal) {
        if (chance(odds)) {
            pr("!");
@@ -1860,9 +1858,9 @@ att_fight(int combat_mode, struct combat *off, struct emp_qelem *olist,
        if (((a_cas + d_cas) % 70) == 69)
            pr("\n");
        if (recalctime-- <= 0) {
-           recalctime = 8 + (random() % 43);
+           recalctime = 7 + roll(43);
            odds = att_calcodds(ototal, dtotal);
-           odds += (random() % 11 - 5) / 100.0;
+           odds += (roll(11) - 6) / 100.0;
            if (odds < 0.0)
                odds = 0.1;
            if (odds > 1.0)