mirror of https://github.com/OpenTTD/OpenTTD
(svn r10005) -Codechange: Merge two flags (2cc and newhouses) indicating some newgrf features have been loaded, and introduce the newindustry one.
parent
01f80cf343
commit
4af692558a
|
@ -74,12 +74,8 @@ static uint32 _ttdpatch_flags[8];
|
|||
/* Used by Action 0x06 to preload a pseudo sprite and modify its content */
|
||||
static byte *_preload_sprite = NULL;
|
||||
|
||||
/* Set if any vehicle is loaded which uses 2cc (two company colours) */
|
||||
bool _have_2cc = false;
|
||||
|
||||
/* Set if there are any newhouses loaded. */
|
||||
bool _have_newhouses = false;
|
||||
|
||||
/* Indicates which are the newgrf features currently loaded ingame */
|
||||
uint8 _loaded_newgrf_features;
|
||||
|
||||
enum GrfDataType {
|
||||
GDT_SOUND,
|
||||
|
@ -539,7 +535,7 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
|||
case 0x27: // Miscellaneous flags
|
||||
FOR_EACH_OBJECT {
|
||||
ei[i].misc_flags = grf_load_byte(&buf);
|
||||
if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) _have_2cc = true;
|
||||
if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -661,7 +657,7 @@ static bool RoadVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
|||
case 0x1C: // Miscellaneous flags
|
||||
FOR_EACH_OBJECT {
|
||||
ei[i].misc_flags = grf_load_byte(&buf);
|
||||
if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) _have_2cc = true;
|
||||
if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -772,7 +768,7 @@ static bool ShipVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
|||
case 0x17: // Miscellaneous flags
|
||||
FOR_EACH_OBJECT {
|
||||
ei[i].misc_flags = grf_load_byte(&buf);
|
||||
if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) _have_2cc = true;
|
||||
if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -888,7 +884,7 @@ static bool AircraftVehicleChangeInfo(uint engine, int numinfo, int prop, byte *
|
|||
case 0x17: // Miscellaneous flags
|
||||
FOR_EACH_OBJECT {
|
||||
ei[i].misc_flags = grf_load_byte(&buf);
|
||||
if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) _have_2cc = true;
|
||||
if (HASBIT(ei[i].misc_flags, EF_USES_2CC)) SETBIT(_loaded_newgrf_features, GRFLOADED_2CC);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1297,7 +1293,7 @@ static bool TownHouseChangeInfo(uint hid, int numinfo, int prop, byte **bufp, in
|
|||
* FinaliseHouseArray() for more details. */
|
||||
if (housespec[i]->min_date < 1930) housespec[i]->min_date = 1930;
|
||||
}
|
||||
_have_newhouses = true;
|
||||
SETBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES);
|
||||
break;
|
||||
|
||||
case 0x09: // Building flags
|
||||
|
@ -4459,8 +4455,9 @@ static void ResetNewGRFData()
|
|||
_misc_grf_features = 0;
|
||||
_traininfo_vehicle_pitch = 0;
|
||||
_traininfo_vehicle_width = 29;
|
||||
_have_2cc = false;
|
||||
_have_newhouses = false;
|
||||
|
||||
_loaded_newgrf_features = 0;
|
||||
|
||||
_signal_base = 0;
|
||||
_coast_base = 0;
|
||||
|
||||
|
|
11
src/newgrf.h
11
src/newgrf.h
|
@ -87,8 +87,15 @@ extern GRFFile *_first_grffile;
|
|||
|
||||
extern SpriteID _signal_base;
|
||||
extern SpriteID _coast_base;
|
||||
extern bool _have_2cc;
|
||||
extern bool _have_newhouses;
|
||||
|
||||
enum GRFLoadedFeatures {
|
||||
GRFLOADED_2CC, // Set if any vehicle is loaded which uses 2cc (two company colours).
|
||||
GRFLOADED_NEWHOUSES, // Set if there are any newhouses loaded.
|
||||
GRFLOADED_NEWINDUSTRIES, // Set if there are any newindustries loaded.
|
||||
};
|
||||
|
||||
/* Indicates which are the newgrf features currently loaded ingame */
|
||||
extern uint8 _loaded_newgrf_features;
|
||||
|
||||
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage);
|
||||
void LoadNewGRF(uint load_index, uint file_index);
|
||||
|
|
|
@ -83,7 +83,7 @@ void IncreaseBuildingCount(Town *t, HouseID house_id)
|
|||
{
|
||||
HouseClassID class_id = GetHouseSpecs(house_id)->class_id;
|
||||
|
||||
if (!_have_newhouses) return;
|
||||
if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
|
||||
|
||||
/* If there are 255 buildings of this type in this town, there are also
|
||||
* at least that many houses of the same class in the town, and
|
||||
|
@ -111,7 +111,7 @@ void DecreaseBuildingCount(Town *t, HouseID house_id)
|
|||
{
|
||||
HouseClassID class_id = GetHouseSpecs(house_id)->class_id;
|
||||
|
||||
if (!_have_newhouses) return;
|
||||
if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
|
||||
|
||||
if (t->building_counts.id_count[house_id] > 0) t->building_counts.id_count[house_id]--;
|
||||
if (_building_counts.id_count[house_id] > 0) _building_counts.id_count[house_id]--;
|
||||
|
@ -129,7 +129,7 @@ void DecreaseBuildingCount(Town *t, HouseID house_id)
|
|||
*/
|
||||
void AfterLoadCountBuildings()
|
||||
{
|
||||
if (!_have_newhouses) return;
|
||||
if (!HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) return;
|
||||
|
||||
for (TileIndex t = 0; t < MapSize(); t++) {
|
||||
if (!IsTileType(t, MP_HOUSE)) continue;
|
||||
|
|
|
@ -324,7 +324,7 @@ static void SelectPlayerLiveryWndProc(Window *w, WindowEvent *e)
|
|||
switch (e->event) {
|
||||
case WE_CREATE:
|
||||
LowerWindowWidget(w, WP(w, livery_d).livery_class + 2);
|
||||
if (!_have_2cc) {
|
||||
if (!HASBIT(_loaded_newgrf_features, GRFLOADED_2CC)) {
|
||||
HideWindowWidget(w, 11);
|
||||
HideWindowWidget(w, 12);
|
||||
}
|
||||
|
@ -366,7 +366,7 @@ static void SelectPlayerLiveryWndProc(Window *w, WindowEvent *e)
|
|||
DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOR(p->livery[scheme].colour1), 152, y);
|
||||
DrawString(165, y, STR_00D1_DARK_BLUE + p->livery[scheme].colour1, sel ? 0xC : 2);
|
||||
|
||||
if (_have_2cc) {
|
||||
if (HASBIT(_loaded_newgrf_features, GRFLOADED_2CC)) {
|
||||
DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOR(p->livery[scheme].colour2), 277, y);
|
||||
DrawString(290, y, STR_00D1_DARK_BLUE + p->livery[scheme].colour2, sel ? 0xC : 2);
|
||||
}
|
||||
|
@ -794,7 +794,7 @@ static void PlayerCompanyWndProc(Window *w, WindowEvent *e)
|
|||
}
|
||||
|
||||
case PCW_WIDGET_COLOR_SCHEME: {
|
||||
Window *wf = AllocateWindowDescFront(_have_2cc ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number);
|
||||
Window *wf = AllocateWindowDescFront(HASBIT(_loaded_newgrf_features, GRFLOADED_2CC) ? &_select_player_livery_2cc_desc : &_select_player_livery_desc, w->window_number);
|
||||
if (wf != NULL) {
|
||||
wf->caption_color = wf->window_number;
|
||||
WP(wf, livery_d).livery_class = LC_OTHER;
|
||||
|
|
|
@ -1668,7 +1668,7 @@ static void DoBuildTownHouse(Town *t, TileIndex tile)
|
|||
for (i = 0; i < HOUSE_MAX; i++) {
|
||||
hs = GetHouseSpecs(i);
|
||||
if ((~hs->building_availability & bitmask) == 0 && hs->enabled) {
|
||||
if (_have_newhouses) {
|
||||
if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
|
||||
probability_max += hs->probability;
|
||||
cumulative_probs[num] = probability_max;
|
||||
}
|
||||
|
@ -1677,7 +1677,7 @@ static void DoBuildTownHouse(Town *t, TileIndex tile)
|
|||
}
|
||||
|
||||
for (;;) {
|
||||
if (_have_newhouses) {
|
||||
if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
|
||||
uint r = RandomRange(probability_max);
|
||||
for (i = 0; i < num; i++) if (cumulative_probs[i] >= r) break;
|
||||
|
||||
|
@ -1688,7 +1688,7 @@ static void DoBuildTownHouse(Town *t, TileIndex tile)
|
|||
|
||||
hs = GetHouseSpecs(house);
|
||||
|
||||
if (_have_newhouses) {
|
||||
if (HASBIT(_loaded_newgrf_features, GRFLOADED_NEWHOUSES)) {
|
||||
if (hs->override != 0) hs = GetHouseSpecs(hs->override);
|
||||
|
||||
if ((hs->extra_flags & BUILDING_IS_HISTORICAL) && !_generating_world) continue;
|
||||
|
|
Loading…
Reference in New Issue