/* material.c */
extern int get_materials(struct sctstr *, short[], int);
/* mobility.c */
-extern void mob_sect(void);
-extern void mob_ship(void);
-extern void mob_land(void);
-extern void mob_plane(void);
+extern void mob_inc_all(int);
extern void sct_do_upd_mob(struct sctstr *sp);
extern void shp_do_upd_mob(struct shpstr *sp);
extern void lnd_do_upd_mob(struct lndstr *lp);
extern void pln_do_upd_mob(struct plnstr *pp);
+extern void mob_access_all(void);
/* move_sat.c */
extern void move_sat(struct plnstr *);
/* nat.c */
for (n = 0; n < MAXNOC; n++)
clear_telegram_is_new(n);
- /* First, make sure all mobility is updated correctly. */
- if (opt_MOB_ACCESS) {
- mob_ship();
- mob_sect();
- mob_plane();
- mob_land();
- }
+ /* Credit the turn's remaining MOB_ACCESS mobility */
+ if (opt_MOB_ACCESS)
+ mob_access_all();
if (opt_AUTO_POWER)
update_power();
finish_sects(etu);
prod_nat(etu);
age_levels(etu);
+ mob_inc_all(etu);
- /* Only update mobility for non-MOB_ACCESS here, since it doesn't
- get done for MOB_ACCESS anyway during the update */
- if (!opt_MOB_ACCESS) {
- mob_ship();
- mob_sect();
- mob_plane();
- mob_land();
- }
if (update_demand == UPD_DEMAND_SCHED
|| update_demand == UPD_DEMAND_ASYNC)
update_removewants();
* Known contributors to this file:
* Dave Pare, 1986
* Steve McClure, 1998-1999
- * Markus Armbruster, 2004-2008
+ * Markus Armbruster, 2004-2016
*/
#include <config.h>
do_upd_checking = 0;
}
+/* Increase mobility of everything for @etus ETUs, update timestamps */
void
-mob_sect(void)
+mob_inc_all(int etus)
{
- struct sctstr *sp;
- int n, etus;
+ struct sctstr *sectp;
+ struct shpstr *sp;
+ struct plnstr *pp;
+ struct lndstr *lp;
+ int i;
time_t now;
time(&now);
- for (n = 0; NULL != (sp = getsectid(n)); n++) {
- sp->sct_timestamp = now;
- if (opt_MOB_ACCESS)
- etus = game_reset_tick(&sp->sct_access);
- else
- etus = etu_per_update;
- do_mob_sect(sp, etus);
+
+ for (i = 0; (sectp = getsectid(i)); i++) {
+ sectp->sct_timestamp = now;
+ if (!opt_MOB_ACCESS)
+ do_mob_sect(sectp, etus);
+ }
+
+ for (i = 0; (sp = getshipp(i)); i++) {
+ sp->shp_timestamp = now;
+ if (!opt_MOB_ACCESS)
+ do_mob_ship(sp, etus);
+ }
+
+ for (i = 0; (pp = getplanep(i)); i++) {
+ pp->pln_timestamp = now;
+ if (!opt_MOB_ACCESS)
+ do_mob_plane(pp, etus);
+ }
+
+ for (i = 0; (lp = getlandp(i)); i++) {
+ lp->lnd_timestamp = now;
+ if (!opt_MOB_ACCESS)
+ do_mob_land(lp, etus);
}
}
sp->sct_mobil = value;
}
-void
-mob_ship(void)
-{
- struct shpstr *sp;
- int n, etus;
- time_t now;
-
- time(&now);
- for (n = 0; NULL != (sp = getshipp(n)); n++) {
- sp->shp_timestamp = now;
- if (opt_MOB_ACCESS)
- etus = game_reset_tick(&sp->shp_access);
- else
- etus = etu_per_update;
- do_mob_ship(sp, etus);
- }
-}
-
static void
do_mob_ship(struct shpstr *sp, int etus)
{
sp->shp_mobil = (signed char)value;
}
-void
-mob_land(void)
-{
- struct lndstr *lp;
- int n, etus;
- time_t now;
-
- time(&now);
- for (n = 0; NULL != (lp = getlandp(n)); n++) {
- lp->lnd_timestamp = now;
- if (opt_MOB_ACCESS)
- etus = game_reset_tick(&lp->lnd_access);
- else
- etus = etu_per_update;
- do_mob_land(lp, etus);
- }
-}
-
static void
do_mob_land(struct lndstr *lp, int etus)
{
lp->lnd_mobil = value;
}
-void
-mob_plane(void)
-{
- struct plnstr *pp;
- int n, etus;
- time_t now;
-
- time(&now);
- for (n = 0; NULL != (pp = getplanep(n)); n++) {
- pp->pln_timestamp = now;
- if (opt_MOB_ACCESS)
- etus = game_reset_tick(&pp->pln_access);
- else
- etus = etu_per_update;
- do_mob_plane(pp, etus);
- }
-}
-
static void
do_mob_plane(struct plnstr *pp, int etus)
{
value = plane_mob_max;
pp->pln_mobil = value;
}
+
+/*
+ * Credit the turn's remaining MOB_ACCESS mobility.
+ * Exactly as if everything was accessed right now.
+ */
+void
+mob_access_all(void)
+{
+ struct sctstr *sectp;
+ struct shpstr *sp;
+ struct plnstr *pp;
+ struct lndstr *lp;
+ int i;
+
+ if (CANT_HAPPEN(!opt_MOB_ACCESS))
+ return;
+
+ for (i = 0; (sectp = getsectid(i)); i++)
+ do_mob_sect(sectp, game_reset_tick(§p->sct_access));
+
+ for (i = 0; (sp = getshipp(i)); i++)
+ do_mob_ship(sp, game_reset_tick(&sp->shp_access));
+
+ for (i = 0; (pp = getplanep(i)); i++)
+ do_mob_plane(pp, game_reset_tick(&pp->pln_access));
+
+ for (i = 0; (lp = getlandp(i)); i++)
+ do_mob_land(lp, game_reset_tick(&lp->lnd_access));
+}