]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/fly.c
Update copyright notice.
[empserver] / src / lib / commands / fly.c
index c3869ef8ad05213813791f0feac6221ee28c35a7..c82dd2867c5584c93aa0a57ff901b3dfb6c4b694 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2004, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                           Ken Stevens, Steve McClure
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -53,7 +53,6 @@ fly(void)
 {
     s_char *p;
     int mission_flags;
-    int tech;
     coord tx, ty;
     coord ax, ay;
     int ap_to_target;
@@ -76,8 +75,8 @@ fly(void)
     wantflags = 0;
     if (!snxtitem(&ni_bomb, EF_PLANE, player->argp[1]))
        return RET_SYN;
-    if (!snxtitem
-       (&ni_esc, EF_PLANE, getstarg(player->argp[2], "escort(s)? ", buf)))
+    if (!snxtitem(&ni_esc, EF_PLANE,
+                 getstarg(player->argp[2], "escort(s)? ", buf)))
        pr("No escorts...\n");
     if ((p = getstarg(player->argp[3], "assembly point? ", buf)) == 0
        || *p == 0)
@@ -98,10 +97,10 @@ fly(void)
     ty = ay;
     (void)pathtoxy(flightpath, &tx, &ty, fcost);
     pr("Ending sector is %s\n", xyas(tx, ty, player->cnum));
+    ip = whatitem(player->argp[5], "transport what? ");
     getsect(tx, ty, &target);
+
     cno = -1;
-    ip = whatitem(player->argp[5], "transport what? ");
-    mission_flags = 0;
     if (pln_onewaymission(&target, &cno, &wantflags) < 0)
        return RET_SYN;
     if (cno < 0) {
@@ -112,6 +111,12 @@ fly(void)
        dst_ptr = (s_char *)&ship;
        dst_type = EF_SHIP;
     }
+
+    if (ip && ip->i_vtype == I_CIVIL && target.sct_own != target.sct_oldown) {
+       pr("Can't fly civilians into occupied sectors.\n");
+       return RET_FAIL;
+    }
+
     ap_to_target = strlen(flightpath);
     if (*(flightpath + strlen(flightpath) - 1) == 'h')
        ap_to_target--;
@@ -119,30 +124,34 @@ fly(void)
     /*
      * select planes within range
      */
+    mission_flags = 0;
     pln_sel(&ni_bomb, &bomb_list, &ap_sect, ap_to_target,
            1, wantflags, P_M | P_O);
+    if (QEMPTY(&bomb_list)) {
+       pr("No planes could be equipped for the mission.\n");
+       return RET_FAIL;
+    }
     wantflags |= P_F;
     wantflags |= P_ESC;
     pln_sel(&ni_esc, &esc_list, &ap_sect, ap_to_target,
            1, wantflags, P_M | P_O);
+    if (cno >= 0 && !pln_oneway_to_carrier_ok(&bomb_list, &esc_list, cno)) {
+       pr("Not enough room on ship #%d!\n", cno);
+       return RET_FAIL;
+    }
     /*
      * now arm and equip the bombers, transports, whatever.
-     * tech is stored in high 16 bits of mission_flags.
-     * yuck.
      */
-    tech = 0;
     mission_flags |= P_X;      /* stealth (shhh) */
     mission_flags |= P_H;      /* gets turned off if not all choppers */
-    mission_flags =
-       pln_arm(&bomb_list, ap_to_target, 't', ip, 0, mission_flags,
-               &tech);
+    mission_flags = pln_arm(&bomb_list, ap_to_target, 't',
+                           ip, 0, mission_flags);
     if (QEMPTY(&bomb_list)) {
        pr("No planes could be equipped for the mission.\n");
        return RET_FAIL;
     }
-    mission_flags =
-       pln_arm(&esc_list, ap_to_target, 't', ip, P_ESC | P_F,
-               mission_flags, &tech);
+    mission_flags = pln_arm(&esc_list, ap_to_target, 't',
+                           ip, P_ESC | P_F, mission_flags);
     ac_encounter(&bomb_list, &esc_list, ax, ay, flightpath, mission_flags,
                 0, 0, 0);
     if (QEMPTY(&bomb_list)) {