SV4 Structures

Back to SV4 file format

The SV4 file format contains numerous types of structures. This is an incomplete document listing information about all the different structures within the SV4 file format. Note that every structure is of a fixed size.
All offsets are in hex.


Ride Structure

Each ride structure contains 608 bytes. Some of the items are the same as described under the TD4 documentation.

000 : ride type (FF if not used)
001 : vehicle type
002,3 : bit 0 = train(s) on track, bit 1 = tested; bit 2 = test in progress; bit 3 = don't show raw stats; bit 4 = pass through station without stopping; bit 5 = On-Ride photo; bit 6 = ?; bit 7 = broken down; bit 10 = crashed; bit 12 = ever been opened; bit 13 = play music; bit 14 = construction/demolition prohibited (indestructible ride); bit 15 = demolition prohibited (used when there are indestructible track pieces)
004 : operating mode
005 : color scheme (in original RCT code)
006..01D : body and trim colors
01E..020 : Track primary, secondary, and support colors (original RCT)
021 : ride status - 0 = closed, 1 = open, 2 = test
022..023 : text string index .if MSB of this word is set, use lower 10 bits for user defined string index
024..027 : string numerator (all 4 bytes for guest #, two bytes for "rides been on" etc.) 026 is ride # if generic name used
028..029 : Final station entry segment(row, col)
02A..031 : four sets of row-col bytes for station departure segments
032..035 : Station height (one byte for each station)
036..039 : Station length (one byte for each station)
03A..03D : Station signal (one byte for each station) [80 = green light, the lower nibble specifies if train moving through signal, waiting for departure control, track not clear, etc.]
03E..041 : train in loading position (FF = none) (4 stations)
042..049 : four sets of ride Entrance map location (row, col)
04A..051 : four sets of ride Exit map location (row, col)
052..059 : index (2 bytes) of last peep in queue line at station (4 stations)
05A..05D : Num of peeps in queue line (one byte for each station)
05E..075 : address of sprite data structure for each train. Set to FF for unavailable train numbers.
076 : departure flags
077 : # of stations
078 : # of trains
079 : # of cars per train
07A..07B : ?
07C : max # of trains for current # of cars
07D: ?
07E : minimum wait time
07F : maximum wait time
080 : speed of powered launch/laps/#peeps
081..083 : ?
084 : index of Data Logging structure (FF if none)
085 : special track elements: bits 0 through 4: number of helix sections; bit 5= spinning tunnel,water splash, rapids; bit 6= log reverser,waterfall; bit 7= whirlpool
086,087 : ?
088,089 : max speed lower word
08A,08B : max speed upper word ~2.25 mph per bit
08C,8D : avg speed lower word
08E,8F : avg speed upper word ~2.25 mph per bit
090..93 : ?
094..097 : ride length (1st section) - use upper word
098..09B : ride length (2nd section) - use upper word
09C..09F : ride length (3rd section) - use upper word
0A0..0A3 : ride length (4th section) - use upper word
0A4, 0A5 : ride time (1st section)
0A6, 0A7 : ride time (2nd section)
0A8, 0A9 : ride time (3rd section)
0AA, 0AB : ride time (4th section)
0AC, 0AD : Maximum positive G force
0AE, 0AF : Maximum negative G force
0B0, 0B1 : Maximum lateral G force
0B2..0BD: ?
0BE,0BF : ?related to "curvature" of track
0C0,0C1 : ?
0C2,C3 : ?
0C4: num of inversions (lower 5 bits)
0C5 : num of drops (lower six bits)
C6 : ?
0C7 : max drop height (in 1/3 meters ~ 1 ft)
0C8..CB : underground track length?
CC,CD : ?
CE : ?
CF..D1 : ?
0D2..D3 : ?
0D4..D5 : customer per hour (multiply by twelve)
0D6..E7 : ?
0E8,E9: ticket price
0EA..0EF : ?
0F0, 0F1 : Excitement (divide by 100)
0F2, 0F3 : Intensity (divide by 100)
0F4, 0F5 : Nausea (divide by 100)
0F6..0F9 : ?
0FA : satisfaction (multiply by 5%) (-1 for unknown)
0FB..0FF : ?
100..103 : total customers
104..107 : total profit
108 : popularity (multiply by 4)
109 : number of guests "thinking" about ride
10A : ?
10B : #people on ride
10C..12F : ?
130..131 : Month of construction (used to determine ride age)
132, 133 : running cost (multiply by $1.60)
134..142 : ?
143 : Break Down type: -1=not broken, 0="safety cut-out", 1="restraints stuck closed", 2="restraints stuck open", 3="doors stuck closed", 4="doors stuck open", 5="vehicle malfunction", 6="station brakes failure", 7="control failure"
144..145 : ?
146 : Reliability count down - when zero, Reliability is decremented
147 : Reliability (%)
148: Cheat detection flag?
149 : down time (%)
14A: Inspection interval (0 = 10 min, 1 = 20 min, 2 = 30 min, 3 = 45 min, 4 = 1 hr, 5 = 2 hr, 6 = never) 
14B : time since last inspection (minutes)
14C..15F : ?
160..163 : Income per hour
164..167 : profit
168 : queue time
169..16B : ?
16C..177 : track color schemes
178 : music selection (00=Dodgems, 01=Fairground organ, 02=Roman Fanfare, 03=Oriental, 04=Martian, 05=Jungle Drums, 06=Egyptian, 07=Toyland, 08=?, 09=Space, 0A=Horror, 0B=Techno, 0C=Gentle, 0D=summer, 0E=water, 0F=Wild West, 10=Jurassic, 11=Rock, 12=Ragtime, 13=Fantasy
179 : station theming (00=standard, 01=wooden, 02=canvas tent, 03=castle[grey], 04=castle[brown], 05=jungle, 06=log cabin, 07=classical, 08=abstract, 09=snow, 0A=pagoda, 0B=space)
17A..25F : ?


Sprite Data Structure

256 bytes for each sprite. This data structure is used for peeps, ducks, vomit, vehicles (each car of a train, etc.)

00 : Sprite Identifier (00=vehicle [includes golfer & golf ball], 01=peep, 02=duck & 'flying text', 03=vomit/trash, FF=unused)
01 : trash type: 0,1=vomit; 2=drink can, 3=fries box, 4=brown?, 5=white?, 6=purple?, 7=green?
02, 03 : Used to remember pointer so that a new members of staff can be put back into chains in the same place as sacked members of staff, thus preserving the integrity of the Patrol Area Map?
04, 05: Pointer to next sprite of this type. (FF FF if end of chain)
06, 07: Pointer to previous sprite of this type. (FF FF if beginning of chain)
08 (?) 2= test, 4=peep, 6=vehicle

09: ?
0A,0B : peep data structure counter
0C,0D : ?
0E,0F : X coordinate (32 units per tile, increases to the East)
10,11 : Y coordinate (32 units per tile, increases to the North)
12,13 : Z coordinate (16 units per height mark)
14..1D : ?
1E : Direction sprite is facing
1F..21 : ?
22,23 : Text string index: 00 – Handyman, 01 – Mechanic, 02 – Security, 03 – Entertainer, FF - Guest. - look up custom string if upper four bits are: 1000. (use only the lower 10 bits for index into string table). If the upper byte is between A0 and DF then it is a "real name" and the lower 10 bits indicate the first name while the upper 6 bits are processed to determine the last initial. An easy way is to shift the word right by 10(decimal), then subtract 28(hex). The result will be between zero and fifteen and is used to look up a Capital letter. (vowels and less common letters are not used)
24,25 : next X coordinate for peeps
26,27 : next Y coordinate for peeps
28,29 : money amount for 'flying text'; speed of vehicles; next Z coordinate for peeps
2A : ?
2B : current state (0=walking, 1=walking*, 2=in line for*, 3=on*, 4=on*, 5=walking, 6=in line for, 7=on*, 8=sitting, 9="(select location)", A=walking, B=mowing grass, C=sweeping footpath, D=walking*, E=walking*, F=heading for, 10=fixing*, 11=at*, 12=ERROR,  [*= pincers inactive]
2C : ?
2D : peep graphics (0=guest, 1=handyman, 2=mechanic, 3=security, 4=panda, 5=tiger, 6=elephant, 7=roman, 8=gorilla, 9=snowman, A=Knight, B=Astronaut, 10=guest w balloon, 11=guest w cotton candy, 12=guest w umbrella, 13=guest w pizza?, {14=security}, 15=guest w popcorn,16=guest w arms crossed, 17=guest w head down, 18=guest w hand over mouth, 19=green faced guest w hand over mouth, 1A=guest w hand over crotch, 1B=guest w hat, 1C=guest w burger?, 1D=guest w tentacle, 1E=guest w candy apple

2E : Guest type: 0=guest, 1=staff
2F : # of rides been on
30 : Shirt color
31 : Pants color for peeps, or, vehicle type
32, 33 : vehicles:body and trim color; peeps: x coordinate tile center
34, 35 : peeps: y coodinate tile center
36, 37 : ?
38 : Energy
39 : target value for Energy
3A : Happiness
3B : target value for Happiness
3C : Nausea
3D : target value for Nausea
3E : Hunger (higher value is less hungry)
3F : Thirst (higher value is less thirsty)
40 : bathroom urgency
41..42 : ?
43 : preferred ride intensity: upper nibble = max, lower nibble = min
44 : nausea tolerance (0=none, 1=low, 2=average, 3=high)
45, 47: ?
48, 49: ?
4A..51: ?
52, 53: for vehicles: index of guests in vehicle (thirtytwo word values) FFFF if unused
54..6D: ?
6E : animation type (0 = walking, 10 = sweeping, etc)
6F : ?
70 : animation sequence; 0=first image of sequence, 1=second image, etc
71..73 : ?
74, 75 : index of guest in front of this guest while in queue (FFFF if first in line)
76..79 : ?
7A..7B : ?
7C..9B : ?
9C..9F : peep identifier number (ie. Guest 301 would have 2D, 01, 00, 00 at these bytes)
A0..A3 : cash in pocket
A4..A7 : cash spent
A8..AB : time that the peep entered the park
AC: ?
AD: (?) FF for guest, 0 for staff?
AE, AF : ?
B0..C3 : 5 sets of 4 byte structures listing the peep's thoughts: byte 0 = thought, byte 1 = item, byte3,4 = boolean (0 = no thought)

C4 : ?
C5 : attraction headed for
C6 : assignments...handyman: bit0=sweep paths, bit1=water gardens, bit2=empty trash, bit3=mow; machanic: bit0=inspect, bit1=repair
C7 : ride associated with on-ride photo
C8 : 8 if 'Tracking' turned On
C9..E3 : ?
E4,E5 : paid to enter park
E6,E7 : spent on rides
E8,E9 : spent on food/drinks
EA,EB : spent on souveniers
EC : items eaten
ED : items drunk
EE : souveniers bought
EF : ?
F0 : coupon type: 0=free entry to park, 1 = free ride on ___, 2 = half price entry to park, 3=free item ___
F1 : ride/item associated with coupon
F2 : ?
F3 : Vandal flag (0 = normal, not zero= vandal)
F4..F5 : ?
F6 : balloon color
F7 : umbrella color
F8 : hat color
F9 : favorite ride
FA..FB : ?
FC : carrying : bit 0=balloon, bit 1=cuddly toy, bit 2=map, bit 3=on-ride photo of ___, bit 4=umbrella, bit 5=drink, bit 6=burger, bit 7=fries,
FD : carrying : bit 0=ice cream, bit 1=cotton candy, bit 2=empty can, bit 3=rubbish, bit 4=empty burger box, bit 5=pizza, bit 6=coupon, bit 7=popcorn
FE : carrying : bit 0=hot dog, bit 1=tentacle, bit 2=hat, bit 3=candy apple, bit 4=T-shirt, bit 5=donut, bit 6=coffee, bit 7=empty cup
FF : carrying: bit 0=fried chicken, bit 1=lemonade, bit 2=empty box, bit 3=empty bottle, bit 4-7 unused