From c6615b942e21e808f19597b9651df569dcb75ba9 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 17 Apr 2016 22:37:20 +0100 Subject: [PATCH] fix fences type mapping --- src/rct1/S4Importer.cpp | 27 ++++++++++++++++++--------- src/rct1/S4Importer.h | 6 +++--- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/rct1/S4Importer.cpp b/src/rct1/S4Importer.cpp index 2b132a0976..eb83286839 100644 --- a/src/rct1/S4Importer.cpp +++ b/src/rct1/S4Importer.cpp @@ -231,9 +231,24 @@ void S4Importer::AddAvailableEntriesFromMap() AddEntryForLargeScenery(mapElement->properties.scenerymultiple.type & MAP_ELEMENT_LARGE_TYPE_MASK); break; case MAP_ELEMENT_TYPE_FENCE: - AddEntryForWall(mapElement->properties.fence.type); + { + uint8 var_05 = mapElement->properties.fence.item[0]; + uint16 var_06 = mapElement->properties.fence.item[1] | + (mapElement->properties.fence.item[2] << 8); + + for (int edge = 0; edge < 4; edge++) + { + int typeA = (var_05 >> (edge * 2)) & 3; + int typeB = (var_06 >> (edge * 4)) & 0x0F; + if (typeB != 0x0F) + { + uint8 type = typeA | (typeB << 2); + AddEntryForWall(type); + } + } break; } + } if (map_element_is_last_for_tile(mapElement++)) { @@ -1117,6 +1132,8 @@ void S4Importer::FixWalls() int colourB = 0; int colourC = 0; ConvertWall(&type, &colourA, &colourB, &colourC); + + type = _wallTypeToEntryMap[type]; map_place_fence(type, x * 32, y * 32, 0, edge, colourA, colourB, colourC, 169); } } @@ -1266,14 +1283,6 @@ void S4Importer::FixMapElementEntryTypes() mapElement->properties.scenerymultiple.type |= _largeSceneryTypeToEntryMap[type]; break; } - case MAP_ELEMENT_TYPE_FENCE: - mapElement->properties.fence.type = _wallTypeToEntryMap[mapElement->properties.fence.type]; - if (mapElement->properties.fence.type == 255) - { - // map_element_remove(mapElement); - // map_element_iterator_restart_for_tile(&it); - } - break; } } } diff --git a/src/rct1/S4Importer.h b/src/rct1/S4Importer.h index 09b744d367..511140267b 100644 --- a/src/rct1/S4Importer.h +++ b/src/rct1/S4Importer.h @@ -33,9 +33,9 @@ private: // Lookup tables for converting from RCT1 hard coded types to the new dynamic object entries uint8 _rideTypeToRideEntryMap[96]; uint8 _vehicleTypeToRideEntryMap[96]; - uint8 _smallSceneryTypeToEntryMap[96]; - uint8 _largeSceneryTypeToEntryMap[96]; - uint8 _wallTypeToEntryMap[96]; + uint8 _smallSceneryTypeToEntryMap[256]; + uint8 _largeSceneryTypeToEntryMap[256]; + uint8 _wallTypeToEntryMap[256]; uint8 _sceneryThemeTypeToEntryMap[24]; // Research