diff --git a/include/sect.h b/include/sect.h index 60fb72b7..d8a109af 100644 --- a/include/sect.h +++ b/include/sect.h @@ -103,6 +103,7 @@ enum d_navigation { struct dchrstr { unsigned char d_uid; char d_mnem; /* map symbol */ + unsigned char d_terrain; /* terrain sector type */ int d_prd; /* product type */ int d_peffic; /* process efficiency, in percent */ float d_mob0, d_mob1; /* movement cost at 0 and 100% eff */ diff --git a/src/lib/commands/add.c b/src/lib/commands/add.c index eba4d33e..fb83eacb 100644 --- a/src/lib/commands/add.c +++ b/src/lib/commands/add.c @@ -154,13 +154,8 @@ add(void) sect.sct_defense = 0; sect.sct_own = 0; sect.sct_oldown = 0; - if (sect.sct_type == SCT_BSPAN || - sect.sct_type == SCT_BTOWER) - sect.sct_newtype = sect.sct_type = SCT_WATER; - else if (sect.sct_type != SCT_MOUNT && - sect.sct_type != SCT_PLAINS) - sect.sct_newtype = sect.sct_type = SCT_RURAL; - /* No dist path */ + sect.sct_newtype = sect.sct_type + = dchr[sect.sct_type].d_terrain; sect.sct_dist_x = sect.sct_x; sect.sct_dist_y = sect.sct_y; memset(sect.sct_item, 0, sizeof(sect.sct_item)); diff --git a/src/lib/commands/desi.c b/src/lib/commands/desi.c index ce14be61..20e27863 100644 --- a/src/lib/commands/desi.c +++ b/src/lib/commands/desi.c @@ -92,6 +92,11 @@ desi(void) pr("Only %s can make a %s!\n", cname(0), dchr[des].d_name); continue; } + if (dchr[des].d_terrain != dchr[sect.sct_type].d_terrain) { + pr("You can't change a %s into a %s\n", + dchr[sect.sct_type].d_name, dchr[des].d_name); + continue; + } } if (sect.sct_type == des && sect.sct_newtype == des) continue; diff --git a/src/lib/global/nsc.c b/src/lib/global/nsc.c index a67edc5c..c2bd8faa 100644 --- a/src/lib/global/nsc.c +++ b/src/lib/global/nsc.c @@ -179,6 +179,7 @@ struct castr dchr_ca[] = { {"uid", fldoff(d_uid), NSC_UCHAR, 0, NULL, EF_SECTOR_CHR, 0}, {"name", fldoff(d_name), NSC_STRING, 0, NULL, EF_BAD, 0}, {"mnem", fldoff(d_mnem), NSC_STRINGY, 1, NULL, EF_BAD, NSC_CONST}, + {"terrain", fldoff(d_terrain), NSC_UCHAR, 0, NULL, EF_SECTOR_CHR, 0}, {"prd", fldoff(d_prd), NSC_INT, 0, NULL, EF_PRODUCT, 0}, {"peffic", fldoff(d_peffic), NSC_INT, 0, NULL, EF_BAD, 0}, {"mob0", fldoff(d_mob0), NSC_FLOAT, 0, NULL, EF_BAD, 0}, diff --git a/src/lib/global/sect.config b/src/lib/global/sect.config index 2e4032fd..4608ce6e 100644 --- a/src/lib/global/sect.config +++ b/src/lib/global/sect.config @@ -28,7 +28,7 @@ # sect.config: Sector characteristics # # Known contributors to this file: -# Markus Armbruster, 2006 +# Markus Armbruster, 2006-2008 # # Derived from sect.c; known contributors: # Dave Pare, 1986 @@ -38,14 +38,19 @@ # Steve McClure, 1998 # +# Sector terrain (column terra) is the uid of the underlying terrain +# sector type. Sector types that occur in that column are terrain +# types, and must have themselves as terrain. + # Available products (column prd) are in product.config. Navigation # types (column nav) are in sector_navigation[]. Packing types # (column pkg) are in packing[]. # Players can only designate sectors with a non-negative value in -# column cost. All such sectors should have the same population limit -# (column maxp), or else players can abuse redesignation to -# mass-murder people. +# column cost, and only to something with the same terrain. All +# sectors with the same terrain and non-negative cost should have the +# same population limit (column maxp), or else players can abuse +# redesignation to mass-murder people. # A sector with urban packing (urba in column pkg) is a big city. # Column maxp applies at 0% efficiency. The limit at 100% is ten @@ -56,41 +61,41 @@ # econfig key custom_tables. config sect-chr -uid mnem prd peff mob0 mob1 nav pkg ostr dstr val cost bui lcm hcm maxp name - 0 "." -1 0 -1 -1 sea norm 0.0 0.0 0 -1 0 0 0 0 "sea" - 1 "^" dust 75 2.4 1.2 land norm 1.0 4.0 5 -1 1 0 0 100 "mountain" - 2 "s" -1 0 -1 -1 land norm 0.0 99.0 127 -1 0 0 0 1000 "sanctuary" - 3 "\134" -1 0 -1 -1 land norm 0.0 99.0 0 -1 0 0 0 0 "wasteland" - 4 "-" -1 0 0.4 0.4 land norm 1.0 2.0 1 0 0 0 0 1000 "wilderness" +uid mnem terra prd peff mob0 mob1 nav pkg ostr dstr val cost bui lcm hcm maxp name + 0 "." 0 -1 0 -1 -1 sea norm 0.0 0.0 0 -1 0 0 0 0 "sea" + 1 "^" 1 dust 75 2.4 1.2 land norm 1.0 4.0 5 -1 1 0 0 100 "mountain" + 2 "s" 4 -1 0 -1 -1 land norm 0.0 99.0 127 -1 0 0 0 1000 "sanctuary" + 3 "\134" 3 -1 0 -1 -1 land norm 0.0 99.0 0 -1 0 0 0 0 "wasteland" + 4 "-" 4 -1 0 0.4 0.4 land norm 1.0 2.0 1 0 0 0 0 1000 "wilderness" # Uncomment one of the following two. The second one is for big cities. - 5 "c" -1 0 0.4 0.2 land norm 1.0 2.0 30 0 1 0 0 1000 "capital" -# 5 "c" -1 0 0.4 0.2 cana urba 1.0 2.0 30 0 10 1 2 1000 "city" - 6 "u" rad 100 0.4 0.2 land norm 1.0 2.0 15 0 1 0 0 1000 "uranium mine" - 7 "p" hap 100 0.4 0.2 land norm 1.0 1.5 5 0 1 0 0 1000 "park" - 8 "d" gun 100 0.4 0.2 land norm 1.0 1.5 7 0 1 0 0 1000 "defense plant" - 9 "i" sh 100 0.4 0.2 land norm 1.0 1.5 6 0 1 0 0 1000 "shell industry" - 10 "m" iron 100 0.4 0.2 land norm 1.0 2.0 5 0 1 0 0 1000 "mine" - 11 "g" dust 100 0.4 0.2 land norm 1.0 2.0 8 0 1 0 0 1000 "gold mine" - 12 "h" -1 0 0.4 0.2 harb ware 1.0 1.5 12 0 1 0 0 1000 "harbor" - 13 "w" -1 0 0.4 0.2 land ware 1.0 1.5 7 0 1 0 0 1000 "warehouse" - 14 "*" -1 0 0.4 0.2 land norm 1.0 1.25 12 0 1 0 0 1000 "airfield" - 15 "a" food 900 0.4 0.2 land norm 1.0 1.5 2 0 1 0 0 1000 "agribusiness" - 16 "o" oil 100 0.4 0.2 land norm 1.0 1.5 5 0 1 0 0 1000 "oil field" - 17 "j" lcm 100 0.4 0.2 land norm 1.0 1.5 3 0 1 0 0 1000 "light manufacturing" - 18 "k" hcm 100 0.4 0.2 land norm 1.0 1.5 4 0 1 0 0 1000 "heavy manufacturing" - 19 "f" -1 0 0.4 0.2 land norm 2.0 4.0 10 0 5 0 1 1000 "fortress" - 20 "t" tech 100 0.4 0.2 land norm 1.0 1.5 10 0 1 0 0 1000 "technical center" - 21 "r" med 100 0.4 0.2 land norm 1.0 1.5 9 0 1 0 0 1000 "research lab" - 22 "n" -1 0 0.4 0.2 land norm 1.0 2.0 10 0 1 0 0 1000 "nuclear plant" - 23 "l" edu 100 0.4 0.2 land norm 1.0 1.5 4 0 1 0 0 1000 "library/school" - 24 "+" -1 0 0.4 0.0 land norm 1.0 1.0 3 0 1 0 0 1000 "highway" - 25 ")" -1 0 0.4 0.2 land norm 1.0 1.5 4 0 1 0 0 1000 "radar installation" - 26 "!" -1 0 0.4 0.2 land norm 1.0 1.5 12 0 1 0 0 1000 "headquarters" - 27 "#" -1 0 0.4 0.0 land norm 1.0 1.0 3 0 1 0 0 1000 "bridge head" - 28 "=" -1 0 0.4 0.0 brid norm 1.0 1.0 5 -1 1 0 0 100 "bridge span" - 29 "b" bars 100 0.4 0.2 land bank 1.0 2.25 10 0 1 0 0 1000 "bank" - 30 "%" pet 1000 0.4 0.2 land norm 1.0 1.5 2 0 1 0 0 1000 "refinery" - 31 "e" -1 0 0.4 0.2 land norm 1.0 2.0 7 0 1 0 0 1000 "enlistment center" - 32 "~" -1 0 0.4 0.2 land norm 1.0 1.5 1 -1 1 0 0 100 "plains" - 33 "@" -1 0 0.4 0.0 land norm 1.0 1.5 4 -1 1 0 0 100 "bridge tower" + 5 "c" 4 -1 0 0.4 0.2 land norm 1.0 2.0 30 0 1 0 0 1000 "capital" +# 5 "c" 4 -1 0 0.4 0.2 cana urba 1.0 2.0 30 0 10 1 2 1000 "city" + 6 "u" 4 rad 100 0.4 0.2 land norm 1.0 2.0 15 0 1 0 0 1000 "uranium mine" + 7 "p" 4 hap 100 0.4 0.2 land norm 1.0 1.5 5 0 1 0 0 1000 "park" + 8 "d" 4 gun 100 0.4 0.2 land norm 1.0 1.5 7 0 1 0 0 1000 "defense plant" + 9 "i" 4 sh 100 0.4 0.2 land norm 1.0 1.5 6 0 1 0 0 1000 "shell industry" + 10 "m" 4 iron 100 0.4 0.2 land norm 1.0 2.0 5 0 1 0 0 1000 "mine" + 11 "g" 4 dust 100 0.4 0.2 land norm 1.0 2.0 8 0 1 0 0 1000 "gold mine" + 12 "h" 4 -1 0 0.4 0.2 harb ware 1.0 1.5 12 0 1 0 0 1000 "harbor" + 13 "w" 4 -1 0 0.4 0.2 land ware 1.0 1.5 7 0 1 0 0 1000 "warehouse" + 14 "*" 4 -1 0 0.4 0.2 land norm 1.0 1.25 12 0 1 0 0 1000 "airfield" + 15 "a" 4 food 900 0.4 0.2 land norm 1.0 1.5 2 0 1 0 0 1000 "agribusiness" + 16 "o" 4 oil 100 0.4 0.2 land norm 1.0 1.5 5 0 1 0 0 1000 "oil field" + 17 "j" 4 lcm 100 0.4 0.2 land norm 1.0 1.5 3 0 1 0 0 1000 "light manufacturing" + 18 "k" 4 hcm 100 0.4 0.2 land norm 1.0 1.5 4 0 1 0 0 1000 "heavy manufacturing" + 19 "f" 4 -1 0 0.4 0.2 land norm 2.0 4.0 10 0 5 0 1 1000 "fortress" + 20 "t" 4 tech 100 0.4 0.2 land norm 1.0 1.5 10 0 1 0 0 1000 "technical center" + 21 "r" 4 med 100 0.4 0.2 land norm 1.0 1.5 9 0 1 0 0 1000 "research lab" + 22 "n" 4 -1 0 0.4 0.2 land norm 1.0 2.0 10 0 1 0 0 1000 "nuclear plant" + 23 "l" 4 edu 100 0.4 0.2 land norm 1.0 1.5 4 0 1 0 0 1000 "library/school" + 24 "+" 4 -1 0 0.4 0.0 land norm 1.0 1.0 3 0 1 0 0 1000 "highway" + 25 ")" 4 -1 0 0.4 0.2 land norm 1.0 1.5 4 0 1 0 0 1000 "radar installation" + 26 "!" 4 -1 0 0.4 0.2 land norm 1.0 1.5 12 0 1 0 0 1000 "headquarters" + 27 "#" 4 -1 0 0.4 0.0 land norm 1.0 1.0 3 0 1 0 0 1000 "bridge head" + 28 "=" 0 -1 0 0.4 0.0 brid norm 1.0 1.0 5 -1 1 0 0 100 "bridge span" + 29 "b" 4 bars 100 0.4 0.2 land bank 1.0 2.25 10 0 1 0 0 1000 "bank" + 30 "%" 4 pet 1000 0.4 0.2 land norm 1.0 1.5 2 0 1 0 0 1000 "refinery" + 31 "e" 4 -1 0 0.4 0.2 land norm 1.0 2.0 7 0 1 0 0 1000 "enlistment center" + 32 "~" 32 -1 0 0.4 0.2 land norm 1.0 1.5 1 -1 1 0 0 100 "plains" + 33 "@" 0 -1 0 0.4 0.0 land norm 1.0 1.5 4 -1 1 0 0 100 "bridge tower" /config