mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
(svn r18736) -Feature [NewGRF]: implement varaction2houses vars 66 ad 67
This commit is contained in:
parent
5f06c7fd62
commit
5e85f1a7aa
@ -113,7 +113,7 @@ struct HouseSpec {
|
|||||||
byte random_colour[4]; ///< 4 "random" colours
|
byte random_colour[4]; ///< 4 "random" colours
|
||||||
byte probability; ///< Relative probability of appearing (16 is the standard value)
|
byte probability; ///< Relative probability of appearing (16 is the standard value)
|
||||||
HouseExtraFlags extra_flags; ///< some more flags
|
HouseExtraFlags extra_flags; ///< some more flags
|
||||||
HouseClassID class_id; ///< defines the class this house has (grf file based) @See HouseGetVariable, prop 0x44
|
HouseClassID class_id; ///< defines the class this house has (not grf file based)
|
||||||
byte animation_frames; ///< number of animation frames
|
byte animation_frames; ///< number of animation frames
|
||||||
byte animation_speed; ///< amount of time between each of those frames
|
byte animation_speed; ///< amount of time between each of those frames
|
||||||
byte processing_time; ///< Periodic refresh multiplier
|
byte processing_time; ///< Periodic refresh multiplier
|
||||||
|
@ -308,6 +308,39 @@ static uint32 HouseGetVariable(const ResolverObject *object, byte variable, byte
|
|||||||
|
|
||||||
/* Distance test for some house types */
|
/* Distance test for some house types */
|
||||||
case 0x65: return GetDistanceFromNearbyHouse(parameter, tile, object->u.house.house_id);
|
case 0x65: return GetDistanceFromNearbyHouse(parameter, tile, object->u.house.house_id);
|
||||||
|
|
||||||
|
/* Class and ID of nearby house tile */
|
||||||
|
case 0x66: {
|
||||||
|
TileIndex testtile = GetNearbyTile(parameter, tile);
|
||||||
|
if (!IsTileType(testtile, MP_HOUSE)) return 0xFFFFFFFF;
|
||||||
|
HouseSpec *hs = HouseSpec::Get(GetHouseType(testtile));
|
||||||
|
/* Information about the grf local classid if the house has a class */
|
||||||
|
uint houseclass = 0;
|
||||||
|
if (hs->class_id != HOUSE_NO_CLASS) {
|
||||||
|
houseclass = (hs->grffile == object->grffile ? 1 : 2) << 8;
|
||||||
|
houseclass |= _class_mapping[hs->class_id].class_id;
|
||||||
|
}
|
||||||
|
/* old house type or grf-local houseid */
|
||||||
|
uint local_houseid = 0;
|
||||||
|
if (house_id < NEW_HOUSE_OFFSET) {
|
||||||
|
local_houseid = house_id;
|
||||||
|
} else {
|
||||||
|
local_houseid = (hs->grffile == object->grffile ? 1 : 2) << 8;
|
||||||
|
local_houseid |= hs->local_id;
|
||||||
|
}
|
||||||
|
return houseclass << 16 | local_houseid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GRFID of nearby house tile */
|
||||||
|
case 0x67: {
|
||||||
|
TileIndex testtile = GetNearbyTile(parameter, tile);
|
||||||
|
if (!IsTileType(testtile, MP_HOUSE)) return 0xFFFFFFFF;
|
||||||
|
HouseID house_id = GetHouseType(testtile);
|
||||||
|
if (house_id < NEW_HOUSE_OFFSET) return 0;
|
||||||
|
/* Checking the grffile information via HouseSpec doesn't work
|
||||||
|
* in case the newgrf was removed. */
|
||||||
|
return _house_mngr.mapping_ID[house_id].grfid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG(grf, 1, "Unhandled house property 0x%X", variable);
|
DEBUG(grf, 1, "Unhandled house property 0x%X", variable);
|
||||||
|
Loading…
Reference in New Issue
Block a user