Add NewGRF object property for flood-resistance

Does not imply being able to be built on water
pull/341/head
Jonathan G Rennison 3 years ago
parent 06fa1ae332
commit 24fb390e9f

@ -4309,6 +4309,11 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, const G
}
break;
case A0RPI_OBJECT_FLOOD_RESISTANT:
if (MappedPropertyLengthMismatch(buf, 1, mapping_entry)) break;
SB(spec->ctrl_flags, OBJECT_CTRL_FLAG_FLOOD_RESISTANT, 1, (buf->ReadByte() != 0 ? 1 : 0));
break;
default:
ret = HandleAction0PropertyDefault(buf, prop);
break;

@ -44,6 +44,7 @@ extern const GRFFeatureInfo _grf_feature_list[] = {
GRFFeatureInfo("action3_signals_custom_signal_sprites", 1),
GRFFeatureInfo("action0_object_use_land_ground", 1),
GRFFeatureInfo("action0_object_edge_foundation_mode", 1),
GRFFeatureInfo("action0_object_flood_resistant", 1),
GRFFeatureInfo(),
};
@ -70,6 +71,7 @@ extern const GRFPropertyMapDefinition _grf_action0_remappable_properties[] = {
GRFPropertyMapDefinition(GSF_SIGNALS, A0RPI_SIGNALS_EXTRA_ASPECTS, "signals_extra_aspects"),
GRFPropertyMapDefinition(GSF_OBJECTS, A0RPI_OBJECT_USE_LAND_GROUND, "object_use_land_ground"),
GRFPropertyMapDefinition(GSF_OBJECTS, A0RPI_OBJECT_EDGE_FOUNDATION_MODE, "object_edge_foundation_mode"),
GRFPropertyMapDefinition(GSF_OBJECTS, A0RPI_OBJECT_FLOOD_RESISTANT, "object_flood_resistant"),
GRFPropertyMapDefinition(),
};

@ -34,6 +34,7 @@ enum Action0RemapPropertyIds {
A0RPI_SIGNALS_EXTRA_ASPECTS,
A0RPI_OBJECT_USE_LAND_GROUND,
A0RPI_OBJECT_EDGE_FOUNDATION_MODE,
A0RPI_OBJECT_FLOOD_RESISTANT,
};

@ -44,6 +44,7 @@ enum ObjectCtrlFlags {
OBJECT_CTRL_FLAG_NONE = 0, ///< Just nothing.
OBJECT_CTRL_FLAG_USE_LAND_GROUND = 1 << 0, ///< Use land for ground sprite.
OBJECT_CTRL_FLAG_EDGE_FOUNDATION = 1 << 2, ///< Use edge foundation mode.
OBJECT_CTRL_FLAG_FLOOD_RESISTANT = 1 << 3, ///< Object is flood-resistant.
};
DECLARE_ENUM_AS_BIT_SET(ObjectCtrlFlags)

@ -717,7 +717,7 @@ static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags)
/* Removing with the cheat costs more in TTDPatch / the specs. */
cost.MultiplyCost(25);
}
} else if ((spec->flags & (OBJECT_FLAG_BUILT_ON_WATER | OBJECT_FLAG_NOT_ON_LAND)) != 0) {
} else if ((spec->flags & (OBJECT_FLAG_BUILT_ON_WATER | OBJECT_FLAG_NOT_ON_LAND)) != 0 || (spec->ctrl_flags & OBJECT_CTRL_FLAG_FLOOD_RESISTANT) != 0) {
/* Water can't remove objects that are buildable on water. */
return CMD_ERROR;
}

@ -902,6 +902,7 @@ class NIHObject : public NIHelper {
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");
check_ctrl_flag(OBJECT_CTRL_FLAG_EDGE_FOUNDATION, "OBJECT_CTRL_FLAG_EDGE_FOUNDATION");
check_ctrl_flag(OBJECT_CTRL_FLAG_FLOOD_RESISTANT, "OBJECT_CTRL_FLAG_FLOOD_RESISTANT");
}
}
}

Loading…
Cancel
Save