mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r9579) -Codechange: Cleanup of industry_cmd (Step-11). Use industry's spec appear_creation during random map creation.
This commit is contained in:
parent
93acc50678
commit
ec03c72afb
|
@ -1551,16 +1551,16 @@ static const byte _numof_industry_table[4][12] = {
|
||||||
{0, 2, 3, 4, 6, 7, 8, 9, 10, 10, 10}, //high
|
{0, 2, 3, 4, 6, 7, 8, 9, 10, 10, 10}, //high
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** This function is the one who really do the creation work
|
||||||
|
* of random industries during game creation
|
||||||
|
* @param type IndustryType of the desired industry
|
||||||
|
* @param amount of industries that need to be built */
|
||||||
static void PlaceInitialIndustry(IndustryType type, int amount)
|
static void PlaceInitialIndustry(IndustryType type, int amount)
|
||||||
{
|
{
|
||||||
int num = _numof_industry_table[_opt.diff.number_industries][amount];
|
int num = _numof_industry_table[_opt.diff.number_industries][amount];
|
||||||
|
|
||||||
if (type == IT_OIL_REFINERY || type == IT_OIL_RIG) {
|
/* These are always placed next to the coastline, so we scale by the perimeter instead. */
|
||||||
/* These are always placed next to the coastline, so we scale by the perimeter instead. */
|
num = (type == IT_OIL_REFINERY || type == IT_OIL_RIG) ? ScaleByMapSize1D(num) : ScaleByMapSize(num);
|
||||||
num = ScaleByMapSize1D(num);
|
|
||||||
} else {
|
|
||||||
num = ScaleByMapSize(num);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_opt.diff.number_industries != 0) {
|
if (_opt.diff.number_industries != 0) {
|
||||||
PlayerID old_player = _current_player;
|
PlayerID old_player = _current_player;
|
||||||
|
@ -1581,31 +1581,45 @@ static void PlaceInitialIndustry(IndustryType type, int amount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** This function will create ramdon industries during game creation.
|
||||||
|
* It will scale the amount of industries by map size as well as difficulty level */
|
||||||
void GenerateIndustries()
|
void GenerateIndustries()
|
||||||
{
|
{
|
||||||
const byte *b;
|
|
||||||
uint i = 0;
|
uint i = 0;
|
||||||
|
uint8 chance;
|
||||||
|
IndustryType it;
|
||||||
|
const IndustrySpec *ind_spc;
|
||||||
|
|
||||||
/* Find the total amount of industries */
|
/* Find the total amount of industries */
|
||||||
b = _industry_create_table[_opt.landscape];
|
for (it = IT_COAL_MINE; it < IT_END; it++) {
|
||||||
do {
|
int num;
|
||||||
int num = _numof_industry_table[_opt.diff.number_industries][b[0]];
|
|
||||||
|
ind_spc = GetIndustrySpec(it);
|
||||||
|
chance = ind_spc->appear_creation[_opt.landscape];
|
||||||
|
|
||||||
|
if (chance > 0) {
|
||||||
|
/* once the chance of appearance is determind, it have to be scaled by
|
||||||
|
* the difficulty level. The "chance" in question is more an index into
|
||||||
|
* the _numof_industry_table,in fact */
|
||||||
|
num = _numof_industry_table[_opt.diff.number_industries][chance];
|
||||||
|
|
||||||
if (b[1] == IT_OIL_REFINERY || b[1] == IT_OIL_RIG) {
|
|
||||||
/* These are always placed next to the coastline, so we scale by the perimeter instead. */
|
/* These are always placed next to the coastline, so we scale by the perimeter instead. */
|
||||||
num = ScaleByMapSize1D(num);
|
num = (it == IT_OIL_REFINERY || it == IT_OIL_RIG) ? ScaleByMapSize1D(num) : ScaleByMapSize(num);
|
||||||
} else {
|
i += num;
|
||||||
num = ScaleByMapSize(num);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
i += num;
|
|
||||||
} while ( (b+=2)[0] != 0);
|
|
||||||
SetGeneratingWorldProgress(GWP_INDUSTRY, i);
|
SetGeneratingWorldProgress(GWP_INDUSTRY, i);
|
||||||
|
|
||||||
b = _industry_create_table[_opt.landscape];
|
for (it = IT_COAL_MINE; it < IT_END; it++) {
|
||||||
do {
|
/* Once the number of industries has been determined, let's really create them.
|
||||||
PlaceInitialIndustry(b[1], b[0]);
|
* The test for chance allows us to try create industries that are available only
|
||||||
} while ( (b+=2)[0] != 0);
|
* for this landscape.
|
||||||
|
* @todo : Do we really have to pass chance as un-scaled value, since we've already
|
||||||
|
* processed that scaling above? No, don't think so. Will find a way. */
|
||||||
|
chance = GetIndustrySpec(it)->appear_creation[_opt.landscape];
|
||||||
|
if (chance > 0) PlaceInitialIndustry(it, chance);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Change industry production or do closure */
|
/* Change industry production or do closure */
|
||||||
|
|
|
@ -1418,75 +1418,6 @@ static const IndustrySpec _industry_specs[] = {
|
||||||
};
|
};
|
||||||
#undef MK
|
#undef MK
|
||||||
|
|
||||||
|
|
||||||
static const byte _industry_create_table_0[] = {
|
|
||||||
4, 4,
|
|
||||||
5, 3,
|
|
||||||
5, 2,
|
|
||||||
8, 0,
|
|
||||||
5, 1,
|
|
||||||
4, 11,
|
|
||||||
5, 18,
|
|
||||||
9, 9,
|
|
||||||
5, 8,
|
|
||||||
5, 6,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const byte _industry_create_table_1[] = {
|
|
||||||
4, 4,
|
|
||||||
5, 3,
|
|
||||||
5, 14,
|
|
||||||
8, 0,
|
|
||||||
5, 1,
|
|
||||||
5, 11,
|
|
||||||
5, 13,
|
|
||||||
9, 9,
|
|
||||||
4, 15,
|
|
||||||
5, 7,
|
|
||||||
6, 16,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const byte _industry_create_table_2[] = {
|
|
||||||
4, 4,
|
|
||||||
5, 11,
|
|
||||||
5, 16,
|
|
||||||
4, 13,
|
|
||||||
4, 17,
|
|
||||||
4, 10,
|
|
||||||
4, 19,
|
|
||||||
4, 20,
|
|
||||||
4, 21,
|
|
||||||
8, 22,
|
|
||||||
4, 13,
|
|
||||||
4, 23,
|
|
||||||
2, 24,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const byte _industry_create_table_3[] = {
|
|
||||||
5, 26,
|
|
||||||
5, 27,
|
|
||||||
4, 28,
|
|
||||||
5, 29,
|
|
||||||
4, 30,
|
|
||||||
5, 31,
|
|
||||||
5, 32,
|
|
||||||
4, 33,
|
|
||||||
5, 34,
|
|
||||||
5, 35,
|
|
||||||
4, 36,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const byte * const _industry_create_table[4] = {
|
|
||||||
_industry_create_table_0,
|
|
||||||
_industry_create_table_1,
|
|
||||||
_industry_create_table_2,
|
|
||||||
_industry_create_table_3,
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Writes the properties of a industry tile into the IndustryTileSpec struct.
|
/** Writes the properties of a industry tile into the IndustryTileSpec struct.
|
||||||
* @param c1 first type of cargo accepted for this tile
|
* @param c1 first type of cargo accepted for this tile
|
||||||
* @param c2 second cargo
|
* @param c2 second cargo
|
||||||
|
|
Loading…
Reference in New Issue