diff --git a/src/openrct2/object/SmallSceneryEntry.h b/src/openrct2/object/SmallSceneryEntry.h index e139bc1904..b8637708e8 100644 --- a/src/openrct2/object/SmallSceneryEntry.h +++ b/src/openrct2/object/SmallSceneryEntry.h @@ -62,6 +62,7 @@ struct SmallSceneryEntry money64 price; money64 removal_price; uint8_t* frame_offsets; + uint16_t FrameOffsetCount; uint16_t animation_delay; uint16_t animation_mask; uint16_t num_frames; diff --git a/src/openrct2/object/SmallSceneryObject.cpp b/src/openrct2/object/SmallSceneryObject.cpp index 26e79d59f5..c8703d204d 100644 --- a/src/openrct2/object/SmallSceneryObject.cpp +++ b/src/openrct2/object/SmallSceneryObject.cpp @@ -76,10 +76,12 @@ void SmallSceneryObject::Load() _legacyType.image = LoadImages(); _legacyType.scenery_tab_id = OBJECT_ENTRY_INDEX_NULL; + _legacyType.FrameOffsetCount = 0; if (_legacyType.HasFlag(SMALL_SCENERY_FLAG_HAS_FRAME_OFFSETS)) { _legacyType.frame_offsets = _frameOffsets.data(); + _legacyType.FrameOffsetCount = static_cast(_frameOffsets.size()); } PerformFixes(); diff --git a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp index 63addceca6..193b84f3d6 100644 --- a/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp +++ b/src/openrct2/paint/tile_element/Paint.SmallScenery.cpp @@ -277,7 +277,7 @@ static void PaintSmallSceneryBody( frame = (frame >> delay) & sceneryEntry->animation_mask; auto imageIndex = 0; - if (frame < sceneryEntry->num_frames) + if (frame < sceneryEntry->FrameOffsetCount) { imageIndex = sceneryEntry->frame_offsets[frame]; }