Add NewGRF object property/flag to use land as object ground sprite

This handles variable ground densities, snow/desert, etc.
This commit is contained in:
Jonathan G Rennison
2021-12-04 21:45:33 +00:00
parent 906fde15c7
commit 924ffb013f
11 changed files with 289 additions and 8 deletions

View File

@@ -868,11 +868,15 @@ class NIHObject : public NIHelper {
seprintf(buffer, lastof(buffer), " [%c] flags: 0x%X", output.flags & 1 ? '-' : '+', spec->flags);
output.print(buffer);
if (output.flags & 1) {
auto print = [&](const char *name) {
seprintf(buffer, lastof(buffer), " %s", name);
output.print(buffer);
};
auto check_flag = [&](ObjectFlags flag, const char *name) {
if (spec->flags & flag) {
seprintf(buffer, lastof(buffer), " %s", name);
output.print(buffer);
}
if (spec->flags & flag) print(name);
};
auto check_ctrl_flag = [&](ObjectCtrlFlags flag, const char *name) {
if (spec->ctrl_flags & flag) print(name);
};
check_flag(OBJECT_FLAG_ONLY_IN_SCENEDIT, "OBJECT_FLAG_ONLY_IN_SCENEDIT");
check_flag(OBJECT_FLAG_CANNOT_REMOVE, "OBJECT_FLAG_CANNOT_REMOVE");
@@ -888,6 +892,7 @@ class NIHObject : public NIHelper {
check_flag(OBJECT_FLAG_ALLOW_UNDER_BRIDGE, "OBJECT_FLAG_ALLOW_UNDER_BRIDGE");
check_flag(OBJECT_FLAG_ANIM_RANDOM_BITS, "OBJECT_FLAG_ANIM_RANDOM_BITS");
check_flag(OBJECT_FLAG_SCALE_BY_WATER, "OBJECT_FLAG_SCALE_BY_WATER");
check_ctrl_flag(OBJECT_CTRL_FLAG_USE_LAND_GROUND, "OBJECT_CTRL_FLAG_USE_LAND_GROUND");
}
}
}

View File

@@ -121,7 +121,7 @@ static const DrawTileSprites _object_hq[] = {
#undef TILE_SPRITE_LINE
#define M(name, size, build_cost_multiplier, clear_cost_multiplier, height, climate, gen_amount, flags) { GRFFilePropsBase<2>(), INVALID_OBJECT_CLASS, name, climate, size, build_cost_multiplier, clear_cost_multiplier, 0, MAX_DAY + 1, flags, {0, 0, 0, 0}, 0, height, 1, gen_amount, true }
#define M(name, size, build_cost_multiplier, clear_cost_multiplier, height, climate, gen_amount, flags) { GRFFilePropsBase<2>(), INVALID_OBJECT_CLASS, name, climate, size, build_cost_multiplier, clear_cost_multiplier, 0, MAX_DAY + 1, flags, OBJECT_CTRL_FLAG_NONE, {0, 0, 0, 0}, 0, height, 1, gen_amount, true }
/* Climates
* T = Temperate