/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2016, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2018, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure, Markus Armbruster
*
* Empire is free software: you can redistribute it and/or modify
#include "unit.h"
static int only_spies(struct combat[], struct emp_qelem *);
-static void sneak_ashore(struct emp_qelem *, struct combat *);
+static void sneak_ashore(struct combat[], struct emp_qelem *,
+ struct combat *);
int
assa(void)
return RET_OK;
}
+ /* If only spies assault, try to sneak them ashore */
+ if (only_spies(off, &olist)) {
+ sneak_ashore(off, &olist, def);
+ return RET_OK;
+ }
+
ototal = att_get_offense(A_ASSAULT, off, &olist, def);
if (att_abort(A_ASSAULT, off, def)) {
pr("Assault aborted\n");
* happening in the game.
*/
- /* First, we check to see if the only thing we have are spies
- * assaulting. If so, we try to sneak them on land. If they
- * make it, the defenders don't see a thing. If they fail, well,
- * the spies die, and the defenders see them. */
-
- /* If no attacking forces (i.e. we got here with only spies)
- * then try to sneak on-land. */
- if (only_spies(off, &olist)) {
- sneak_ashore(&olist, def);
- return RET_OK;
- }
-
/* Get the real defense */
att_get_defense(&olist, def, &dlist, a_spy, ototal);
}
static void
-sneak_ashore(struct emp_qelem *olist, struct combat *def)
+sneak_ashore(struct combat off[], struct emp_qelem *olist,
+ struct combat *def)
{
- struct emp_qelem *qp, *next;
+ struct emp_qelem *qp;
struct ulist *llp;
struct lndstr *lp;
- int rel;
+ enum relations rel;
pr("Trying to sneak on shore...\n");
- for (qp = olist->q_forw; qp != olist; qp = next) {
- next = qp->q_forw;
+ att_move_land(A_ASSAULT, off, olist, def);
+
+ for (qp = olist->q_forw; qp != olist; qp = qp->q_forw) {
llp = (struct ulist *)qp;
lp = &llp->unit.land;
rel = relations_with(def->own, player->cnum);
- if (chance(0.10) || rel == ALLIED || !def->own) {
+ if (rel == ALLIED || !def->own
+ || !chance(LND_SPY_DETECT_CHANCE(lp->lnd_effic / 2))) {
+ /* eff/2 because this is hard */
pr("%s made it on shore safely.\n", prland(lp));
- lp->lnd_x = def->x;
- lp->lnd_y = def->y;
- lp->lnd_ship = -1;
- putland(lp->lnd_uid, lp);
} else {
pr("%s was spotted", prland(lp));
if (rel <= HOSTILE) {
def->own));
pr(" and was killed in the attempt.\n");
lp->lnd_effic = 0;
- putland(lp->lnd_uid, lp);
- lnd_put_one(llp);
} else {
wu(0, def->own, "%s spy spotted in %s.\n",
cname(player->cnum), xyas(def->x, def->y,
def->own));
- pr(" but made it ok.\n");
- lp->lnd_x = def->x;
- lp->lnd_y = def->y;
- lp->lnd_ship = -1;
- putland(lp->lnd_uid, lp);
+ pr(" but made it OK.\n");
}
}
}
+
+ lnd_put(olist);
}