X-Git-Url: http://git.pond.sub.org/?p=empserver;a=blobdiff_plain;f=src%2Flib%2Fcommands%2Fboar.c;h=2df694ea3cd13562242553b1d600fe4fec062ca8;hp=4352cc02c0a68673b91f26a85e46262d8c67c8e6;hb=9b7adfbe;hpb=5f263a7753dc728809ff85c993af975f6c76e61e diff --git a/src/lib/commands/boar.c b/src/lib/commands/boar.c index 4352cc02c..2df694ea3 100644 --- a/src/lib/commands/boar.c +++ b/src/lib/commands/boar.c @@ -53,135 +53,133 @@ int boar(void) { - struct combat off[1]; /* boarding ship or sector */ - struct combat def[1]; /* defending ship */ - struct emp_qelem olist; /* boarding units */ - struct emp_qelem dlist; /* defending units */ - int ototal; /* total boarding strength */ - int a_engineer = 0; /* boarder engineers are present */ - int a_spy = 0; /* the best boarder scout */ - struct shpstr ship; /* for retreating */ - struct sctstr sect; - struct lndstr land; - struct nstr_item ni; - int foundland; - s_char *p; - s_char buf[1024]; - - att_combat_init(def, EF_SHIP); - /* - * Collect input from the boarder - */ - - /* What are we boarding? */ - - if (!(p = getstarg(player->argp[1], "Victim ship #? ", buf)) || - (def->shp_uid = atoi(p)) < 0) - return RET_SYN; - - /* - * Ask the boarder what he wants to board with - */ - - if (!(p = getstarg(player->argp[2], "Boarding party from? ", buf))) - return RET_SYN; - if (issector(p)) { - att_combat_init(off, EF_SECTOR); - if (!sarg_xy(p, &off->x, &off->y)) - return RET_SYN; - getsect(off->x, off->y, §); - if (sect.sct_own != player->cnum) { - pr("You don't own %s!\n", - xyas(off->x, off->y, player->cnum)); - return RET_SYN; - } - if (sect.sct_mobil <= 0) { - /* Look for land units with mobility */ - snxtitem_xy(&ni, EF_LAND, off->x, off->y); - foundland = 0; - while (nxtitem(&ni, (s_char *)&land)) { - if (land.lnd_own != player->cnum) - continue; - if (land.lnd_ship >= 0) - continue; - if (land.lnd_mobil <= 0) - continue; - /* Only land units with assault can board */ - if (!(lchr[(int)land.lnd_type].l_flags & L_ASSAULT)) - continue; - foundland = 1; - } - if (!foundland) { - pr("You don't have any mobility (sector or land units) in %s!\n", - xyas(off->x, off->y, player->cnum)); - return RET_SYN; - } - } - } else { - att_combat_init(off, EF_SHIP); - if ((off->shp_uid = atoi(p)) < 0) - return RET_SYN; + struct combat off[1]; /* boarding ship or sector */ + struct combat def[1]; /* defending ship */ + struct emp_qelem olist; /* boarding units */ + struct emp_qelem dlist; /* defending units */ + int ototal; /* total boarding strength */ + int a_engineer = 0; /* boarder engineers are present */ + int a_spy = 0; /* the best boarder scout */ + struct shpstr ship; /* for retreating */ + struct sctstr sect; + struct lndstr land; + struct nstr_item ni; + int foundland; + s_char *p; + s_char buf[1024]; + + att_combat_init(def, EF_SHIP); + /* + * Collect input from the boarder + */ + + /* What are we boarding? */ + + if (!(p = getstarg(player->argp[1], "Victim ship #? ", buf)) || + (def->shp_uid = atoi(p)) < 0) + return RET_SYN; + + /* + * Ask the boarder what he wants to board with + */ + + if (!(p = getstarg(player->argp[2], "Boarding party from? ", buf))) + return RET_SYN; + if (issector(p)) { + att_combat_init(off, EF_SECTOR); + if (!sarg_xy(p, &off->x, &off->y)) + return RET_SYN; + getsect(off->x, off->y, §); + if (sect.sct_own != player->cnum) { + pr("You don't own %s!\n", xyas(off->x, off->y, player->cnum)); + return RET_SYN; } - if (att_abort(A_BOARD, off, def)) { - pr("Board aborted\n"); - return RET_OK; + if (sect.sct_mobil <= 0) { + /* Look for land units with mobility */ + snxtitem_xy(&ni, EF_LAND, off->x, off->y); + foundland = 0; + while (nxtitem(&ni, (s_char *)&land)) { + if (land.lnd_own != player->cnum) + continue; + if (land.lnd_ship >= 0) + continue; + if (land.lnd_mobil <= 0) + continue; + /* Only land units with assault can board */ + if (!(lchr[(int)land.lnd_type].l_flags & L_ASSAULT)) + continue; + foundland = 1; + } + if (!foundland) { + pr("You don't have any mobility (sector or land units) in %s!\n", xyas(off->x, off->y, player->cnum)); + return RET_SYN; + } } + } else { + att_combat_init(off, EF_SHIP); + if ((off->shp_uid = atoi(p)) < 0) + return RET_SYN; + } + if (att_abort(A_BOARD, off, def)) { + pr("Board aborted\n"); + return RET_OK; + } - /* Fire at the attacking ship */ + /* Fire at the attacking ship */ - att_approach(off, def); - if (att_abort(A_BOARD, off, def)) { - pr("Board aborted\n"); - att_empty_attack(A_BOARD, 0, def); - return RET_OK; - } + att_approach(off, def); + if (att_abort(A_BOARD, off, def)) { + pr("Board aborted\n"); + att_empty_attack(A_BOARD, 0, def); + return RET_OK; + } - /* Show what we're boarding, and check treaties */ + /* Show what we're boarding, and check treaties */ - if (att_show(def)) - return RET_FAIL; + if (att_show(def)) + return RET_FAIL; - /* Ask the player what he wants to board with */ + /* Ask the player what he wants to board with */ - att_ask_offense(A_BOARD, off, def, &olist, &a_spy, &a_engineer); - if (att_abort(A_BOARD, off, def)) { - pr("Board aborted\n"); - att_empty_attack(A_BOARD, 0, def); - return att_free_lists(&olist, 0); - } + att_ask_offense(A_BOARD, off, def, &olist, &a_spy, &a_engineer); + if (att_abort(A_BOARD, off, def)) { + pr("Board aborted\n"); + att_empty_attack(A_BOARD, 0, def); + return att_free_lists(&olist, 0); + } - /* - * Estimate the defense strength and give the player a chance to abort - */ + /* + * Estimate the defense strength and give the player a chance to abort + */ - ototal = att_estimate_defense(A_BOARD, off, &olist, def, a_spy); - if (att_abort(A_BOARD, off, def)) { - pr("Board aborted\n"); - att_empty_attack(A_BOARD, 0, def); - return att_free_lists(&olist, 0); - } + ototal = att_estimate_defense(A_BOARD, off, &olist, def, a_spy); + if (att_abort(A_BOARD, off, def)) { + pr("Board aborted\n"); + att_empty_attack(A_BOARD, 0, def); + return att_free_lists(&olist, 0); + } - /* - * We have now got all the answers from the boarder. From this point - * forward, we can assume that this battle is the _only_ thing - * happening in the game. - */ + /* + * We have now got all the answers from the boarder. From this point + * forward, we can assume that this battle is the _only_ thing + * happening in the game. + */ - /* Get the real defense */ + /* Get the real defense */ - att_get_defense(&olist, def, &dlist, a_spy, ototal); + att_get_defense(&olist, def, &dlist, a_spy, ototal); - /* - * Death, carnage, and destruction. - */ + /* + * Death, carnage, and destruction. + */ - if (!(att_fight(A_BOARD,off,&olist,1.0,def,&dlist,1.0))) { - getship(def->shp_uid, &ship); - if (ship.shp_rflags & RET_BOARDED) { - retreat_ship(&ship, 'u'); - putship(def->shp_uid, &ship); - } + if (!(att_fight(A_BOARD, off, &olist, 1.0, def, &dlist, 1.0))) { + getship(def->shp_uid, &ship); + if (ship.shp_rflags & RET_BOARDED) { + retreat_ship(&ship, 'u'); + putship(def->shp_uid, &ship); } + } - return RET_OK; + return RET_OK; }