-
Notifications
You must be signed in to change notification settings - Fork 15
Small Scenery
- height :
integer
- Height of the object, where there are 8 units per height step (for reference, a "quarter" height wall is one step = 8 units high). Therefore this value is generally a multiple of eight.
- cursor :
enum (of string)
-
Cursor icon to use when placing this object
Must be one of:
"CURSOR_BLANK"
,"CURSOR_UP_ARROW"
,"CURSOR_UP_DOWN_ARROW"
,"CURSOR_HAND_POINT"
,"CURSOR_ZZZ"
,"CURSOR_DIAGONAL_ARROWS"
,"CURSOR_PICKER"
,"CURSOR_TREE_DOWN"
,"CURSOR_FOUNTAIN_DOWN"
,"CURSOR_STATUE_DOWN"
,"CURSOR_BENCH_DOWN"
,"CURSOR_CROSS_HAIR"
,"CURSOR_BIN_DOWN"
,"CURSOR_LAMPPOST_DOWN"
,"CURSOR_FENCE_DOWN"
,"CURSOR_FLOWER_DOWN"
,"CURSOR_PATH_DOWN"
,"CURSOR_DIG_DOWN"
,"CURSOR_WATER_DOWN"
,"CURSOR_HOUSE_DOWN"
,"CURSOR_VOLCANO_DOWN"
,"CURSOR_WALK_DOWN"
,"CURSOR_PAINT_DOWN"
,"CURSOR_ENTRANCE_DOWN"
,"CURSOR_HAND_OPEN"
,"CURSOR_HAND_CLOSED"
,"CURSOR_ARROW"
, - price :
integer
- The cost of building this object.
- removalPrice :
integer
- The cost of removing this object. This value is negative if the object gives a refund.
- SMALL_SCENERY_FLAG_VOFFSET_CENTRE :
boolean
- This flag should be true for any object that fills the entire tile. One of the effects of this is that if this object is above flower gardens, it blocks rain from watering them (and resetting their withering status). Also be aware that if true, the object is vertically offset upward by 12 pixels (or 14 pixels if
prohibitWalls
is also true). Not sure what this does otherwise. Object editor calls it "Overlap" and claims it has to do with drawing priority, especially for objects that extend all the way to the edge. - requiresFlatSurface :
boolean
- If true, this object can only be built on flat ground.
- isRotatable :
boolean
- When true, user can set rotation, otherwise rotation is automatic. This is usually used for foliage, for example.
- canWither :
boolean
- If true, this object ages/withers over time (used for flower gardens). This requires two more sets of 4 angles, for the first and second level of aging.
- canBeWatered :
boolean
- This is used in conjunction with
canWither
(again, intended for flower gardens). If true, staff members (who are told to water plants) will water this object. The aging/withering process will be reset whenever this happens. It will also be reset whenever it precipitates, unless it is blocked above by an object withSMALL_SCENERY_FLAG_VOFFSET_CENTRE
set (i.e, full tiles). - hasGlass :
boolean
- True for objects that have glass elements. Requires a second set of 4 angles for the glass itself. These images are just a mask and should be a flat color.
- hasPrimaryColour :
boolean
- True for objects that have at least one remappable colors.
- isStackable :
boolean
- If true, this object can be placed in the air or above water (i.e., by holding shift).
- prohibitWalls :
boolean
- If true, no walls can be placed against this object on the same tile. If
SMALL_SCENERY_FLAG_VOFFSET_CENTRE
is also set, this object is offset upward vertically a total of 14 pixels. - hasSecondaryColour :
boolean
- True for objects that have two remappable colors;
hasPrimaryColour
must also be set. - hasNoSupports :
boolean
- True for objects that don't have supports when they are placed in the air.
- allowSupportsAbove :
boolean
- If true, supports from other objects will be built on top of this one.
- supportsHavePrimaryColour :
boolean
- If true, the supports for this item will be painted the primary color as well. This is very useful for objects that are themselves support structures.
- SMALL_SCENERY_FLAG27 :
boolean
- A quarter-tile object with this flag set will block supports in the same way that a full-tile object would. Only Pole (SUPPLEG1.DAT) has this flag enabled in RCT2.
- isTree :
boolean
- Obviously, this flag is true for trees. This is used in scenarios where tree removal is forbidden. This flag was not explicitly present in vanilla RCT2. Instead, all small scenery objects above a certain height (64) were considered trees. OpenRCT2 uses this behavior when loading DAT objects.
- sceneryGroup :
string
- OpenRCT2
id
of the primary scenery group this object should be included in. - shape :
enum (of string)
-
The shape of this object. Only need to set this if it is not a pure quarter tile.
Must be one of:
"1/4"
(1/4 tile, default if not set),"2/4"
(1/2 tile),"3/4+D"
(3/4 tile),"4/4"
(full tile),"4/4+D"
(diagonal tile),"1/4+D"
("diagonal" 1/4 tile, but functions identically to regular 1/4 tile).
- isAnimated :
boolean
- If true, this object is animated. It may have an animation sequence defined by
frameOffsets
, or it may use one of the other special animation modes (SMALL_SCENERY_FLAG_FOUNTAIN_SPRAY_1
,SMALL_SCENERY_FLAG_FOUNTAIN_SPRAY_4
,isClock
, orSMALL_SCENERY_FLAG_SWAMP_GOO
). - frameOffsets :
array of integer
-
For animated objects that don't use one of the special animation modes, this list (of frame indexes) makes up the animation sequence for this object. These are indexes into the list of images, starting at zero, where each index is for a set of 4 images (for the 4 angles).
Note that, depending on
SMALL_SCENERY_FLAG_HAS_FRAME_OFFSETS
andSMALL_SCENERY_FLAG17
, the first set of images may or may not be part of the animation sequence, so the indexes might not start until the second sequence.*items* :
integer
- animationDelay :
integer
- Divides the animation speed in half this many times. For example, if this value was 1, 2, or 3, the animation would update every 2 ticks, every 4 ticks, or every 8 ticks, respectively. At normal speed, the game targets a rate of 40 ticks per second.
- animationMask :
integer
-
A bitmask used to set when the animation loops. Calculate this by choosing the desired animation length as a power of 2 and then subtracting one. If this value is greater than numFrames-1, the animation will have an extra delay before repeating.
For example, if a smoothly looping animation is 16 frames long, this value should be 15.
While it's possible to set this to a value other than a power of 2 minus 1, this will result in strange behavior, since this value is used as a bitmask, and not as a maximum.
- numFrames :
integer
- The number of frames specified for this animation. This is normally equal to the length of
frameOffsets
, and MUST not be longer than it. Note that this is not necessarily the length of the animation (seeanimationMask
). It's also not necessarily the number of unique images used in the animation, since - SMALL_SCENERY_FLAG_VISIBLE_WHEN_ZOOMED :
boolean
-
True for animated objects that continue to animate when zoomed out (do not set this on non-animated objects, or they WILL NOT SHOW UP AT ALL). When this is set for objects that use the normal animation mode with a list of
frameOffsets
, the first set of 4 images act only as preview images, and are not drawn when placed (ifhasOverlay
is set, the first frame of the animation will also be drawn on top, when previewing). The rest of the sets of images act as the actual animation frames thatframeOffsets
indexes into.For objects that do not have this flag set, see
SMALL_SCENERY_FLAG17
. - SMALL_SCENERY_FLAG17 :
boolean
- This is only used for animated objects that use the normal animation mode (i.e., with
frameOffsets
), and do not haveSMALL_SCENERY_FLAG_VISIBLE_WHEN_ZOOMED
set. Normally, the images for these objects contain _only_ the animation frames. This would mean that the first frame is always drawn (even when zoomed out, and for previewing), and then the animation is drawn on top of that. This would cause problems for some objects if that first frame isn't always completely covered. If this flag is true, this object instead has the first four images separated out as a base set of images, and the animation frames only start after that (just like objects withSMALL_SCENERY_FLAG_VISIBLE_WHEN_ZOOMED
set). The only objects in the game that have this flag use blank images as the first four, and also havehasOverlay
set so that the first frame of animation is still used for previewing (this also means that they disappear entirely when zoomed out, so I'm not sure why they don't just useSMALL_SCENERY_FLAG_VISIBLE_WHEN_ZOOMED
instead. I guess Chris Sawyer _really_ _really_ did not want them animating when zoomed out, and didn't care/notice the consequences). In the end, this flag is probably not useful. It basically replicatesSMALL_SCENERY_FLAG_FOUNTAIN_SPRAY_1
, but you can set a custom frame sequence. - hasOverlayImage :
boolean
- If true, this object has an additional foreground image that is drawn over it when previewing. This is used for certain animated objects that may use a separate set of images on top of a static base. This uses the second set of 4 angles added after the first, and draws them on top when previewing.
- SMALL_SCENERY_FLAG_COG :
boolean
- True for frame-offset-animated objects whose animations should be synchronized across the entire map. Normally, the timing of these animations are offset depending on the tile the object is on, but this flag disables that behavior so the animations always play in-sync.
- SMALL_SCENERY_FLAG_FOUNTAIN_SPRAY_1 :
boolean
- True for objects that use the first special fountain animation mode. This requires four frames of animation (4 angles each) that are overlayed on top of the base images.
- SMALL_SCENERY_FLAG_FOUNTAIN_SPRAY_4 :
boolean
-
True for objects that use the second special fountain animation mode. This requires nine extra sets of images (4 angles each) that are overlayed on top of the base images. The first set is a static overlay. The next four sets are a 4-frame animation that is overlayed on top of the base images, but underneath the static overlay. The next four sets are another 4-frame animation, that is overlayed on top of everything. So the layering order is the base set, the first 4-animation on top, then a static overlay on top of that, and then the second 4-frame animation on top.
The only vanilla object that uses this mode is the Cupid Fountains (TQF.DAT), and it allows the static centerpiece to be rendered separately, between the sets of animated fountains.
- isClock :
boolean
-
True for objects that use the second special animation mode for the clock (TCK.DAT). This requires a bunch of extra images. First is a static overlay (4 angles, with both hands pointing at 12) that's used just for previewing. After that is 60 images, which are 60 frames of the minute hand going around the clock, and then another 48 frames of the hour hand doing the same, all starting facing the upper right and continuing around, well, clockwise of course. (Note that these are not duplicated for all 4 angles, the game just offsets by the right amount to account for direction).
The game uses real-world time to figure out where to point the hands. Neat!
- SMALL_SCENERY_FLAG_SWAMP_GOO :
boolean
- True for objects that use the special animation mode for swamp goo (TSG.DAT). This is just a 16 frame animation from a single angle.
rct2.scenery_small.corroof2
(Corrugated Steel Base)
"properties": {
"price": 20,
"removalPrice": -15,
"cursor": "CURSOR_HOUSE_DOWN",
"height": 8,
"shape": "4/4",
"SMALL_SCENERY_FLAG_VOFFSET_CENTRE": true,
"requiresFlatSurface": true,
"isRotatable": true,
"hasPrimaryColour": true,
"isStackable": true,
"prohibitWalls": true,
"hasNoSupports": true,
"allowSupportsAbove": true
}
rct2.scenery_small.tsc
(Cactus)
"properties": {
"price": 9,
"removalPrice": 5,
"cursor": "CURSOR_TREE_DOWN",
"height": 44,
"shape": "1/4",
"isRotatable": true,
"isStackable": true
}
rct2.scenery_small.fire1
(Flames)
"properties": {
"price": 40,
"removalPrice": -30,
"cursor": "CURSOR_STATUE_DOWN",
"height": 88,
"animationDelay": 1,
"animationMask": 31,
"numFrames": 32,
"shape": "1/4",
"SMALL_SCENERY_FLAG_VOFFSET_CENTRE": true,
"isAnimated": true,
"hasPrimaryColour": true,
"isStackable": true,
"hasNoSupports": true,
"SMALL_SCENERY_FLAG_VISIBLE_WHEN_ZOOMED": true,
"frameOffsets": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
}
rct2.scenery_small.georoof2
(Glass Roof)
"properties": {
"price": 20,
"removalPrice": -15,
"cursor": "CURSOR_STATUE_DOWN",
"height": 8,
"sceneryGroup": "rct2.scenery_group.scgwalls",
"shape": "4/4",
"SMALL_SCENERY_FLAG_VOFFSET_CENTRE": true,
"requiresFlatSurface": true,
"isRotatable": true,
"hasGlass": true,
"hasPrimaryColour": true,
"isStackable": true,
"prohibitWalls": true,
"hasSecondaryColour": true,
"hasNoSupports": true,
"allowSupportsAbove": true
}