Remove option TRADESHIPS, customize table ship-chr instead

Trade ships are now enabled when a ship type with capability trade
exists.  No such type exists by default; to enable trade ships,
deities have to customize table ship-chr.

Before, trade ship types were ignored when option TRADESHIPS was
disabled.  Except for xdump ship-chr, which happily dumped unusable
trade ship types.
This commit is contained in:
Markus Armbruster 2011-05-22 16:49:17 +02:00
parent c4254764bf
commit 352bc320d2
19 changed files with 32 additions and 41 deletions

View file

@ -129,11 +129,8 @@ buil(void)
break;
case 's':
type = ef_elt_byname(EF_SHIP_CHR, p);
if (type >= 0) {
if (type >= 0)
rqtech = mchr[type].m_tech;
if ((mchr[type].m_flags & M_TRADE) && !opt_TRADESHIPS)
type = -1;
}
break;
case 'l':
type = ef_elt_byname(EF_LAND_CHR, p);

View file

@ -131,12 +131,7 @@ orde(void)
if (!*p || !strcmp(p, "-")) {
pr("A one-way order has been accepted.\n");
} else if (!strncmp(p, "s", 1)) {
if (opt_TRADESHIPS) {
if (!(mchr[(int)ship.shp_type].m_flags & M_TRADE)) {
pr("You can't auto-scuttle that ship!\n");
return RET_SYN;
}
} else {
if (!(mchr[(int)ship.shp_type].m_flags & M_TRADE)) {
pr("You can't auto-scuttle that ship!\n");
return RET_SYN;
}

View file

@ -47,10 +47,6 @@ payo(void)
int dist;
float cash = 0.0;
if (!opt_TRADESHIPS) {
pr("Tradeships are not enabled.\n");
return RET_FAIL;
}
if (!snxtitem(&ni, EF_SHIP, player->argp[1], NULL))
return RET_SYN;

View file

@ -143,8 +143,7 @@ scra(void)
prship(&item.ship));
continue;
}
if (opt_TRADESHIPS
&& (mchr[item.ship.shp_type].m_flags & M_TRADE)) {
if (mchr[item.ship.shp_type].m_flags & M_TRADE) {
pr("WARNING: You only collect money from trade ships if you \"scuttle\" them!\n");
sprintf(prompt,
"Are you really sure that you want to scrap %s (n)? ",

View file

@ -125,7 +125,7 @@ scut(void)
if (type == EF_SHIP) {
mp = &mchr[(int)item.ship.shp_type];
if (opt_TRADESHIPS && (mp->m_flags & M_TRADE)) {
if (mp->m_flags & M_TRADE) {
if (!scuttle_tradeship(&item.ship, 1))
continue;
}

View file

@ -33,7 +33,7 @@
* Ken Stevens
* Steve McClure
* Ron Koenderink, 2005-2006
* Markus Armbruster, 2005-2010
* Markus Armbruster, 2005-2011
*/
#include <config.h>
@ -44,6 +44,7 @@
#include "ship.h"
#include "version.h"
static int have_trade_ships(void);
static void show_custom(void);
static void show_opts(int val);
static char *prwrap(char *, char *, int *);
@ -156,7 +157,7 @@ vers(void)
-(etu_per_update / sect_mob_neg_factor));
pr("\n");
pr("Ships on autonavigation may use %i cargo holds per ship.\n", TMAX);
if (opt_TRADESHIPS) {
if (have_trade_ships()) {
pr("Trade-ships that go at least %d sectors get a return of %.1f%% per sector.\n",
trade_1_dist, trade_1 * 100.0);
pr("Trade-ships that go at least %d sectors get a return of %.1f%% per sector.\n",
@ -231,6 +232,18 @@ vers(void)
return RET_OK;
}
static int
have_trade_ships(void)
{
int i;
for (i = ef_nelem(EF_SHIP_CHR) - 1; i >= 0; i--) {
if (mchr[i].m_flags & M_TRADE)
return 1;
}
return 0;
}
static void
show_custom(void)
{

View file

@ -195,7 +195,7 @@ float drnuke_const = 0.0; /* research must be at least drnuke_const*tech */
* drnuke_const is .25, you need a 75 res to
* build a nuke that takes 300 tech
*/
/* opt_TRADESHIPS */
/* trade ships */
int trade_1_dist = 8; /* less than this gets no money */
int trade_2_dist = 14; /* less than this gets trade_1 money */
int trade_3_dist = 25; /* less than this gets trade_2 money */
@ -204,7 +204,6 @@ float trade_2 = 0.035; /* return on trade_2 distance */
float trade_3 = 0.050; /* return on trade_3 distance */
float trade_ally_bonus = 0.20; /* 20% bonus for trading with allies */
float trade_ally_cut = 0.10; /* 10% bonus for ally you trade with */
/* end opt_TRADESHIPS */
int torpedo_damage = 40; /* damage is X + 1dX + 1dX, so 40+1d40+1d40 */

View file

@ -60,5 +60,4 @@ int opt_RES_POP = 0;
int opt_SAIL = 1;
int opt_SUPER_BARS = 0;
int opt_TECH_POP = 0;
int opt_TRADESHIPS = 0;
int opt_TREATIES = 1;

View file

@ -54,7 +54,8 @@ type name l_b h_b tech cost ...
2 "cs cargo ship" 60 40 20 500
3 "os ore ship" 60 40 20 500
4 "ss slave ship" 60 40 0 300
5 "ts trade ship" 200 100 30 1750
# Uncomment to enable trade ships
# 5 "ts trade ship" 200 100 30 1750
6 "frg frigate" 30 30 0 600
7 "oe oil exploration boat" 25 15 40 800
8 "od oil derrick" 60 60 50 1500
@ -95,7 +96,7 @@ type name arm spe vis vrn frn gli nla npl nch nxl ...
2 "cs cargo ship" 20 25 35 3 0 0 2 0 0 1
3 "os ore ship" 20 25 35 3 0 0 0 0 0 1
4 "ss slave ship" 20 10 35 3 0 0 0 0 0 1
5 "ts trade ship" 20 25 35 3 0 0 0 0 0 1
# 5 "ts trade ship" 20 25 35 3 0 0 0 0 0 1
6 "frg frigate" 50 25 25 3 1 1 2 0 0 1
7 "oe oil exploration boat" 10 25 15 2 0 0 0 0 0 0
8 "od oil derrick" 30 15 65 3 0 0 0 0 0 2
@ -136,7 +137,7 @@ type name civ mil she gun pet iro dus bar foo oil lcm hcm
2 "cs cargo ship" 600 50 300 50 0 0 0 0 900 0 1400 900 250 0 (supply)
3 "os ore ship" 30 5 0 0 0 990 990 0 200 0 0 0 45 990 ()
4 "ss slave ship" 20 80 0 0 0 0 0 0 200 0 0 0 1200 0 ()
5 "ts trade ship" 50 50 0 0 0 0 0 0 100 0 0 0 0 0 (trade)
# 5 "ts trade ship" 50 50 0 0 0 0 0 0 100 0 0 0 0 0 (trade)
6 "frg frigate" 0 60 10 2 0 0 0 0 60 0 0 0 0 0 (semi-land)
7 "oe oil exploration boat" 10 5 0 0 0 0 0 0 100 1 0 0 0 0 (oil canal)
8 "od oil derrick" 990 80 0 0 0 0 0 0 990 990 0 0 990 0 (oil)

View file

@ -83,8 +83,6 @@ make_mchr_index(struct chr_index chridx[], int tlev)
continue;
if (mchr[i].m_tech > tlev)
continue;
if ((mchr[i].m_flags & M_TRADE) && !opt_TRADESHIPS)
continue;
chridx[n].type = i;
chridx[n].tech = mchr[i].m_tech;
n++;

View file

@ -53,8 +53,7 @@ scuttle_it(struct shpstr *sp)
sp->shp_x, sp->shp_y, sp->shp_uid);
return;
}
if (CANT_HAPPEN(!opt_TRADESHIPS
|| !(mchr[sp->shp_type].m_flags & M_TRADE)))
if (CANT_HAPPEN(!(mchr[sp->shp_type].m_flags & M_TRADE)))
return;
if (!scuttle_tradeship(sp, 0)) {
wu(0, sp->shp_own,