/*
* Empire - A multi-player, client/server Internet based war game.
- * Copyright (C) 1986-2015, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ * Copyright (C) 1986-2021, 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:
* Steve McClure, 2000
- * Markus Armbruster, 2004-2015
+ * Markus Armbruster, 2004-2021
*/
#include <config.h>
static struct flist *search_flist(struct emp_qelem *, struct empobj *);
int
-multifire(void)
+c_fire(void)
{
static int ef_with_guns[] = { EF_SECTOR, EF_SHIP, EF_LAND, EF_BAD };
char *ptr;
shipdamage(&vship, dam);
if (vship.shp_effic < SHIP_MINEFF)
pr("%s sunk!\n", prsub(&vship));
- putship(vship.shp_uid, &vship);
if (dam && (vship.shp_rflags & RET_INJURED))
- retreat_ship(&vship, vict, 'i');
+ retreat_ship(&vship, vict);
else if (target == targ_sub && (vship.shp_rflags & RET_DCHRGED))
- retreat_ship(&vship, vict, 'd');
+ retreat_ship(&vship, vict);
else if (totaldefdam == 0 && (vship.shp_rflags & RET_HELPLESS))
- retreat_ship(&vship, vict, 'h');
+ retreat_ship(&vship, vict);
+ putship(vship.shp_uid, &vship);
break;
}
switch (attgp->ef_type) {
else
odds = 1.0;
do_defdam(&fired, odds);
+ free_flist(&fired);
return RET_OK;
}
wu(0, vict, "Return fire hit sector %s for %d damage.\n",
xyas(fp->x, fp->y, vict), dam);
}
- emp_remque(&fp->queue);
- free(fp);
}
}
}
static int
-uid_eq(struct emp_qelem *elem, void *key)
+flist_eq(struct emp_qelem *elem, void *key)
{
- return ((struct flist *)elem)->uid == ((struct empobj *)key)->uid;
+ struct flist *e = (struct flist *)elem;
+ struct flist *k = key;
+
+ return e->type == k->type && e->uid == k->uid;
}
static struct flist *
search_flist(struct emp_qelem *list, struct empobj *gp)
{
- return (struct flist *)emp_searchque(list, gp, uid_eq);
+ return (struct flist *)emp_searchque(list, gp, flist_eq);
}