From 7b7fe69c4679736d25781635dc931e1140e3cea3 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 27 Sep 2009 18:03:13 -0400 Subject: [PATCH] Revise rules for cargo plane loads There are three ways to fly cargo: transport (fly command with a commodity argument), cargo drops (drop command that isn't a sea mine drop), and paradrops. A cargo flight can be either an airlift or an airdrop. Airlifts carry more cargo than airdrops. A cargo drop or paradrop with a non-VTOL plane is an airdrop. Anything else is an airlift. Before, paradrop always behaved like an airdrop, regardless of VTOL, and drop always like an airlift. This made little sense. Effect of the change on the stock game: paradrop with tc carries twice the punch, and np/tr/jt can drop less than they can fly. In particular, tr can't drop guns anymore, and jt can drop only one instead of three. --- src/lib/subs/mission.c | 10 +++++++++- src/lib/subs/plnsub.c | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/lib/subs/mission.c b/src/lib/subs/mission.c index bfa57e82..f28ed6fc 100644 --- a/src/lib/subs/mission.c +++ b/src/lib/subs/mission.c @@ -908,16 +908,24 @@ mission_pln_equip(struct plist *plp, struct ichrstr *ip, char mission) itype = I_SHELL; break; case 't': /* transport */ - case 'd': /* drop */ if (!(pcp->pl_flags & P_C) || !ip) break; itype = ip->i_uid; load *= 2; break; + case 'd': /* drop */ + if (!(pcp->pl_flags & P_C) || CANT_HAPPEN(!ip)) + break; + itype = ip->i_uid; + if (pcp->pl_flags & P_V) + load *= 2; + break; case 'a': /* paradrop */ if (!(pcp->pl_flags & P_P)) break; itype = I_MILIT; + if (pcp->pl_flags & P_V) + load *= 2; break; case 'i': /* missile interception */ if (load) diff --git a/src/lib/subs/plnsub.c b/src/lib/subs/plnsub.c index 293fefee..71e09f37 100644 --- a/src/lib/subs/plnsub.c +++ b/src/lib/subs/plnsub.c @@ -658,7 +658,6 @@ pln_equip(struct plist *plp, struct ichrstr *ip, char mission) itype = I_SHELL; break; case 't': /* transport */ - case 'd': /* drop */ if (!(pcp->pl_flags & P_C) || !ip) break; itype = ip->i_uid; @@ -670,10 +669,19 @@ pln_equip(struct plist *plp, struct ichrstr *ip, char mission) itype = I_SHELL; load *= 2; break; + case 'd': /* drop */ + if (!(pcp->pl_flags & P_C) || CANT_HAPPEN(!ip)) + break; + itype = ip->i_uid; + if (pcp->pl_flags & P_V) + load *= 2; + break; case 'a': /* paradrop */ if (!(pcp->pl_flags & P_P)) break; itype = I_MILIT; + if (pcp->pl_flags & P_V) + load *= 2; break; case 'r': /* reconnaissance */ case 'e': /* escort */