1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

Put all upkeep costs together (as an intermediate step)

This commit is contained in:
Gymnasiast
2020-04-19 20:13:44 +02:00
parent cee24312d6
commit f17014877a
3 changed files with 120 additions and 597 deletions

View File

@@ -110,583 +110,98 @@
#include <iterator>
// clang-format off
const bool hasRunningTrack[RIDE_TYPE_COUNT] = {
true, // 0 Spiral Roller coaster
true, // 1 Stand Up Coaster
true, // 2 Suspended Swinging
true, // 3 Inverted
true, // 4 Steel Mini Coaster
true, // 5 Mini Railway
true, // 6 Monorail
true, // 7 Mini Suspended Coaster
false, // 8 Boat Hire
true, // 9 Wooden Wild Mine/Mouse
true, // a Steeplechase/Motorbike/Soap Box Derby
true, // b Car Ride
true, // c Launched Freefall
true, // d Bobsleigh Coaster
true, // e Observation Tower
true, // f Looping Roller Coaster
true, // 10 Dinghy Slide
true, // 11 Mine Train Coaster
true, // 12 Chairlift
true, // 13 Corkscrew Roller Coaster
false, // 14 Maze
false, // 15 Spiral Slide
true, // 16 Go Karts
true, // 17 Log Flume
true, // 18 River Rapids
false, // 19 Dodgems
false, // 1a Pirate Ship
false, // 1b Swinging Inverter Ship
false, // 1c Food Stall
false, // 1d (none)
false, // 1e Drink Stall
false, // 1f (none)
false, // 20 Shop (all types)
false, // 21 Merry Go Round
false, // 22 Balloon Stall (maybe)
false, // 23 Information Kiosk
false, // 24 Bathroom
false, // 25 Ferris Wheel
false, // 26 Motion Simulator
false, // 27 3D Cinema
false, // 28 Topspin
false, // 29 Space Rings
true, // 2a Reverse Freefall Coaster
true, // 2b Elevator
true, // 2c Vertical Drop Roller Coaster
false, // 2d ATM
false, // 2e Twist
false, // 2f Haunted House
false, // 30 First Aid
false, // 31 Circus Show
true, // 32 Ghost Train
true, // 33 Twister Roller Coaster
true, // 34 Wooden Roller Coaster
true, // 35 Side-Friction Roller Coaster
true, // 36 Wild Mouse
true, // 37 Multi Dimension Coaster
true, // 38 (none)
true, // 39 Flying Roller Coaster
true, // 3a (none)
true, // 3b Virginia Reel
true, // 3c Splash Boats
true, // 3d Mini Helicopters
true, // 3e Lay-down Roller Coaster
true, // 3f Suspended Monorail
true, // 40 (none)
true, // 41 Reverser Roller Coaster
true, // 42 Heartline Twister Roller Coaster
true, // 43 Mini Golf
true, // 44 Giga Coaster
true, // 45 Roto-Drop
false, // 46 Flying Saucers
false, // 47 Crooked House
true, // 48 Monorail Cycles
true, // 49 Compact Inverted Coaster
true, // 4a Water Coaster
true, // 4b Air Powered Vertical Coaster
true, // 4c Inverted Hairpin Coaster
false, // 4d Magic Carpet
false, // 4e Submarine Ride
true, // 4f River Rafts
false, // 50 (none)
false, // 51 Enterprise
false, // 52 (none)
false, // 53 (none)
false, // 54 (none)
true, // 55 (none)
true, // 56 Inverted Impulse Coaster
true, // 57 Mini Roller Coaster
true, // 58 Mine Ride
true, // 59 (none)
true, // 5a LIM Launched Roller Coaster
};
/**
* Data about ride running costs. This is widely adjusted by the upkeep
* function, so values that don't make much sense here (a roller coaster having
* cheaper upkeep than a car ride) are fixed later on.
*
* data generation script: https://gist.github.com/kevinburke/6bcf4a8fcc95faad7bac
*/
const uint8_t initialUpkeepCosts[RIDE_TYPE_COUNT] = {
41, // 00 Spiral Roller coaster
40, // 01 Stand Up Coaster
40, // 02 Suspended Swinging
40, // 03 Inverted
40, // 04 Steel Mini Coaster
60, // 05 Mini Railway
65, // 06 Monorail
40, // 07 Mini Suspended Coaster
50, // 08 Boat Hire
40, // 09 Wooden Wild Mine/Mouse
40, // 0a Steeplechase/Motorbike/Soap Box Derby
70, // 0b Car Ride
50, // 0c Launched Freefall
40, // 0d Bobsleigh Coaster
50, // 0e Observation Tower
40, // 0f Looping Roller Coaster
40, // 10 Dinghy Slide
40, // 11 Mine Train Coaster
60, // 12 Chairlift
40, // 13 Corkscrew Roller Coaster
50, // 14 Maze
50, // 15 Spiral Slide
50, // 16 Go Karts
80, // 17 Log Flume
82, // 18 River Rapids
50, // 19 Dodgems
50, // 1a Pirate Ship
50, // 1b Swinging Inverter Ship
50, // 1c Food Stall
50, // 1d (none)
50, // 1e Drink Stall
50, // 1f (none)
50, // 20 Shop (all types)
50, // 21 Merry Go Round
50, // 22 Balloon Stall (maybe)
50, // 23 Information Kiosk
50, // 24 Bathroom
50, // 25 Ferris Wheel
50, // 26 Motion Simulator
50, // 27 3D Cinema
50, // 28 Topspin
50, // 29 Space Rings
80, // 2a Reverse Freefall Coaster
50, // 2b Elevator
44, // 2c Vertical Drop Roller Coaster
40, // 2d ATM
50, // 2e Twist
50, // 2f Haunted House
45, // 30 First Aid
50, // 31 Circus Show
80, // 32 Ghost Train
43, // 33 Twister Roller Coaster
40, // 34 Wooden Roller Coaster
39, // 35 Side-Friction Roller Coaster
40, // 36 Wild Mouse
75, // 37 Multi Dimension Coaster
75, // 38 (none)
49, // 39 Flying Roller Coaster
49, // 3a (none)
39, // 3b Virginia Reel
70, // 3c Splash Boats
70, // 3d Mini Helicopters
49, // 3e Lay-down Roller Coaster
70, // 3f Suspended Monorail
49, // 40 (none)
39, // 41 Reverser Roller Coaster
47, // 42 Heartline Twister Roller Coaster
30, // 43 Mini Golf
10, // 44 Giga Coaster
50, // 45 Roto-Drop
90, // 46 Flying Saucers
30, // 47 Crooked House
47, // 48 Monorail Cycles
40, // 49 Compact Inverted Coaster
60, // 4a Water Coaster
90, // 4b Air Powered Vertical Coaster
40, // 4c Inverted Hairpin Coaster
50, // 4d Magic Carpet
50, // 4e Submarine Ride
50, // 4f River Rafts
50, // 50 (none)
50, // 51 Enterprise
50, // 52 (none)
50, // 53 (none)
50, // 54 (none)
40, // 55 (none)
180,// 56 Inverted Impulse Coaster
35, // 57 Mini Roller Coaster
50, // 58 Mine Ride
42, // 59 (none)
42, // 5a LIM Launched Roller Coaster
};
const uint8_t costPerTrackPiece[RIDE_TYPE_COUNT] = {
80, // 00 Spiral Roller coaster
80, // 01 Stand Up Coaster
80, // 02 Suspended Swinging
80, // 03 Inverted
80, // 04 Steel Mini Coaster
0, // 05 Mini Railway
0, // 06 Monorail
80, // 07 Mini Suspended Coaster
0, // 08 Boat Hire
80, // 09 Wooden Wild Mine/Mouse
80, // 0a Steeplechase/Motorbike/Soap Box Derby
0, // 0b Car Ride
0, // 0c Launched Freefall
80, // 0d Bobsleigh Coaster
0, // 0e Observation Tower
80, // 0f Looping Roller Coaster
80, // 10 Dinghy Slide
80, // 11 Mine Train Coaster
0, // 12 Chairlift
80, // 13 Corkscrew Roller Coaster
0, // 14 Maze
0, // 15 Spiral Slide
0, // 16 Go Karts
0, // 17 Log Flume
0, // 18 River Rapids
0, // 19 Dodgems
0, // 1a Pirate Ship
0, // 1b Swinging Inverter Ship
0, // 1c Food Stall
0, // 1d (none)
0, // 1e Drink Stall
0, // 1f (none)
0, // 20 Shop (all types)
0, // 21 Merry Go Round
0, // 22 Balloon Stall (maybe)
0, // 23 Information Kiosk
0, // 24 Bathroom
0, // 25 Ferris Wheel
0, // 26 Motion Simulator
0, // 27 3D Cinema
0, // 28 Topspin
0, // 29 Space Rings
0, // 2a Reverse Freefall Coaster
0, // 2b Elevator
80, // 2c Vertical Drop Roller Coaster
0, // 2d ATM
0, // 2e Twist
0, // 2f Haunted House
0, // 30 First Aid
0, // 31 Circus Show
0, // 32 Ghost Train
80, // 33 Twister Roller Coaster
80, // 34 Wooden Roller Coaster
80, // 35 Side-Friction Roller Coaster
80, // 36 Wild Mouse
90, // 37 Multi Dimension Coaster
90, // 38 (none)
90, // 39 Flying Roller Coaster
90, // 3a (none)
80, // 3b Virginia Reel
0, // 3c Splash Boats
0, // 3d Mini Helicopters
90, // 3e Lay-down Roller Coaster
0, // 3f Suspended Monorail
90, // 40 (none)
80, // 41 Reverser Roller Coaster
80, // 42 Heartline Twister Roller Coaster
80, // 43 Mini Golf
80, // 44 Giga Coaster
0, // 45 Roto-Drop
0, // 46 Flying Saucers
0, // 47 Crooked House
0, // 48 Monorail Cycles
80, // 49 Compact Inverted Coaster
80, // 4a Water Coaster
0, // 4b Air Powered Vertical Coaster
80, // 4c Inverted Hairpin Coaster
0, // 4d Magic Carpet
0, // 4e Submarine Ride
0, // 4f River Rafts
0, // 50 (none)
0, // 51 Enterprise
0, // 52 (none)
0, // 53 (none)
0, // 54 (none)
80, // 55 (none)
80, // 56 Inverted Impulse Coaster
80, // 57 Mini Roller Coaster
80, // 58 Mine Ride
80, // 59 (none)
80, // 5a LIM Launched Roller Coaster
};
/**
* Data initially at 0x0097E3B4
*/
const uint8_t costPerVehicle[RIDE_TYPE_COUNT] = {
10, // 00 Spiral Roller coaster
10, // 01 Stand Up Coaster
20, // 02 Suspended Swinging
13, // 03 Inverted
8, // 04 Steel Mini Coaster
10, // 05 Mini Railway
10, // 06 Monorail
10, // 07 Mini Suspended Coaster
4, // 08 Boat Hire
9, // 09 Wooden Wild Mine/Mouse
10, // 0a Steeplechase/Motorbike/Soap Box Derby
8, // 0b Car Ride
10, // 0c Launched Freefall
10, // 0d Bobsleigh Coaster
10, // 0e Observation Tower
10, // 0f Looping Roller Coaster
4, // 10 Dinghy Slide
10, // 11 Mine Train Coaster
4, // 12 Chairlift
11, // 13 Corkscrew Roller Coaster
0, // 14 Maze
0, // 15 Spiral Slide
8, // 16 Go Karts
9, // 17 Log Flume
10, // 18 River Rapids
5, // 19 Dodgems
0, // 1a Pirate Ship
0, // 1b Swinging Inverter Ship
0, // 1c Food Stall
0, // 1d (none)
0, // 1e Drink Stall
0, // 1f (none)
0, // 20 Shop (all types)
0, // 21 Merry Go Round
0, // 22 Balloon Stall (maybe)
0, // 23 Information Kiosk
0, // 24 Bathroom
0, // 25 Ferris Wheel
0, // 26 Motion Simulator
0, // 27 3D Cinema
0, // 28 Topspin
0, // 29 Space Rings
0, // 2a Reverse Freefall Coaster
10, // 2b Elevator
11, // 2c Vertical Drop Roller Coaster
0, // 2d ATM
0, // 2e Twist
0, // 2f Haunted House
0, // 30 First Aid
0, // 31 Circus Show
8, // 32 Ghost Train
11, // 33 Twister Roller Coaster
10, // 34 Wooden Roller Coaster
10, // 35 Side-Friction Roller Coaster
9, // 36 Wild Mouse
11, // 37 Multi Dimension Coaster
11, // 38 (none)
11, // 39 Flying Roller Coaster
11, // 3a (none)
10, // 3b Virginia Reel
9, // 3c Splash Boats
8, // 3d Mini Helicopters
11, // 3e Lay-down Roller Coaster
10, // 3f Suspended Monorail
11, // 40 (none)
10, // 41 Reverser Roller Coaster
11, // 42 Heartline Twister Roller Coaster
11, // 43 Mini Golf
12, // 44 Giga Coaster
10, // 45 Roto-Drop
5, // 46 Flying Saucers
0, // 47 Crooked House
8, // 48 Monorail Cycles
13, // 49 Compact Inverted Coaster
8, // 4a Water Coaster
0, // 4b Air Powered Vertical Coaster
9, // 4c Inverted Hairpin Coaster
0, // 4d Magic Carpet
4, // 4e Submarine Ride
9, // 4f River Rafts
0, // 50 (none)
0, // 51 Enterprise
0, // 52 (none)
0, // 53 (none)
0, // 54 (none)
11, // 55 (none)
11, // 56 Inverted Impulse Coaster
8, // 57 Mini Roller Coaster
10, // 58 Mine Ride
9, // 59 (none)
9, // 5a LIM Launched Roller Coaster
};
/**
* Data at 0x0097E3B6, originally set to either be 3 or 0 and replaced here by
* a boolean table. This may be exactly the same as hasRunningTrack above.
*/
const bool chargeUpkeepForTrainLength[RIDE_TYPE_COUNT] = {
true, // 00 Spiral Roller coaster
true, // 01 Stand Up Coaster
true, // 02 Suspended Swinging
true, // 03 Inverted
true, // 04 Steel Mini Coaster
true, // 05 Mini Railway
true, // 06 Monorail
true, // 07 Mini Suspended Coaster
false, // 08 Boat Hire
true, // 09 Wooden Wild Mine/Mouse
true, // 0a Steeplechase/Motorbike/Soap Box Derby
true, // 0b Car Ride
false, // 0c Launched Freefall
true, // 0d Bobsleigh Coaster
false, // 0e Observation Tower
true, // 0f Looping Roller Coaster
true, // 10 Dinghy Slide
true, // 11 Mine Train Coaster
true, // 12 Chairlift
true, // 13 Corkscrew Roller Coaster
false, // 14 Maze
false, // 15 Spiral Slide
false, // 16 Go Karts
false, // 17 Log Flume
false, // 18 River Rapids
false, // 19 Dodgems
false, // 1a Pirate Ship
false, // 1b Swinging Inverter Ship
false, // 1c Food Stall
false, // 1d (none)
false, // 1e Drink Stall
false, // 1f (none)
false, // 20 Shop (all types)
false, // 21 Merry Go Round
false, // 22 Balloon Stall (maybe)
false, // 23 Information Kiosk
false, // 24 Bathroom
false, // 25 Ferris Wheel
false, // 26 Motion Simulator
false, // 27 3D Cinema
false, // 28 Topspin
false, // 29 Space Rings
false, // 2a Reverse Freefall Coaster
false, // 2b Elevator
true, // 2c Vertical Drop Roller Coaster
false, // 2d ATM
false, // 2e Twist
false, // 2f Haunted House
false, // 30 First Aid
false, // 31 Circus Show
true, // 32 Ghost Train
true, // 33 Twister Roller Coaster
true, // 34 Wooden Roller Coaster
true, // 35 Side-Friction Roller Coaster
true, // 36 Wild Mouse
true, // 37 Multi Dimension Coaster
true, // 38 (none)
true, // 39 Flying Roller Coaster
true, // 3a (none)
true, // 3b Virginia Reel
false, // 3c Splash Boats
true, // 3d Mini Helicopters
true, // 3e Lay-down Roller Coaster
true, // 3f Suspended Monorail
true, // 40 (none)
true, // 41 Reverser Roller Coaster
true, // 42 Heartline Twister Roller Coaster
true, // 43 Mini Golf
true, // 44 Giga Coaster
false, // 45 Roto-Drop
false, // 46 Flying Saucers
false, // 47 Crooked House
true, // 48 Monorail Cycles
true, // 49 Compact Inverted Coaster
true, // 4a Water Coaster
false, // 4b Air Powered Vertical Coaster
true, // 4c Inverted Hairpin Coaster
false, // 4d Magic Carpet
false, // 4e Submarine Ride
false, // 4f River Rafts
false, // 50 (none)
false, // 51 Enterprise
false, // 52 (none)
false, // 53 (none)
false, // 54 (none)
true, // 55 (none)
true, // 56 Inverted Impulse Coaster
true, // 57 Mini Roller Coaster
true, // 58 Mine Ride
true, // 59 (none)
true, // 5a LIM Launched Roller Coaster
};
/* Data at 0x0097E3B8 */
const uint8_t costPerStation[RIDE_TYPE_COUNT] = {
10, // 00 Spiral Roller coaster
10, // 01 Stand Up Coaster
10, // 02 Suspended Swinging
10, // 03 Inverted
5, // 04 Steel Mini Coaster
5, // 05 Mini Railway
10, // 06 Monorail
10, // 07 Mini Suspended Coaster
0, // 08 Boat Hire
10, // 09 Wooden Wild Mine/Mouse
10, // 0a Steeplechase/Motorbike/Soap Box Derby
5, // 0b Car Ride
0, // 0c Launched Freefall
10, // 0d Bobsleigh Coaster
0, // 0e Observation Tower
10, // 0f Looping Roller Coaster
10, // 10 Dinghy Slide
10, // 11 Mine Train Coaster
10, // 12 Chairlift
10, // 13 Corkscrew Roller Coaster
0, // 14 Maze
0, // 15 Spiral Slide
0, // 16 Go Karts
10, // 17 Log Flume
10, // 18 River Rapids
0, // 19 Dodgems
0, // 1a Pirate Ship
0, // 1b Swinging Inverter Ship
0, // 1c Food Stall
0, // 1d (none)
0, // 1e Drink Stall
0, // 1f (none)
0, // 20 Shop (all types)
0, // 21 Merry Go Round
0, // 22 Balloon Stall (maybe)
0, // 23 Information Kiosk
0, // 24 Bathroom
0, // 25 Ferris Wheel
0, // 26 Motion Simulator
0, // 27 3D Cinema
0, // 28 Topspin
0, // 29 Space Rings
10, // 2a Reverse Freefall Coaster
0, // 2b Elevator
10, // 2c Vertical Drop Roller Coaster
0, // 2d ATM
0, // 2e Twist
0, // 2f Haunted House
0, // 30 First Aid
0, // 31 Circus Show
5, // 32 Ghost Train
10, // 33 Twister Roller Coaster
10, // 34 Wooden Roller Coaster
10, // 35 Side-Friction Roller Coaster
10, // 36 Wild Mouse
15, // 37 Multi Dimension Coaster
15, // 38 (none)
15, // 39 Flying Roller Coaster
15, // 3a (none)
10, // 3b Virginia Reel
10, // 3c Splash Boats
5, // 3d Mini Helicopters
15, // 3e Lay-down Roller Coaster
10, // 3f Suspended Monorail
15, // 40 (none)
10, // 41 Reverser Roller Coaster
10, // 42 Heartline Twister Roller Coaster
10, // 43 Mini Golf
40, // 44 Giga Coaster
0, // 45 Roto-Drop
0, // 46 Flying Saucers
0, // 47 Crooked House
5, // 48 Monorail Cycles
10, // 49 Compact Inverted Coaster
10, // 4a Water Coaster
10, // 4b Air Powered Vertical Coaster
10, // 4c Inverted Hairpin Coaster
0, // 4d Magic Carpet
0, // 4e Submarine Ride
10, // 4f River Rafts
0, // 50 (none)
0, // 51 Enterprise
0, // 52 (none)
0, // 53 (none)
0, // 54 (none)
10, // 55 (none)
10, // 56 Inverted Impulse Coaster
10, // 57 Mini Roller Coaster
10, // 58 Mine Ride
10, // 59 (none)
10, // 5a LIM Launched Roller Coaster
const UpkeepCosts UpkeepCostsDescriptor[RIDE_TYPE_COUNT] = {
{ 41, 20, 80, 10, 3, 10, }, // RIDE_TYPE_SPIRAL_ROLLER_COASTER
{ 40, 20, 80, 10, 3, 10, }, // RIDE_TYPE_STAND_UP_ROLLER_COASTER
{ 40, 20, 80, 20, 3, 10, }, // RIDE_TYPE_SUSPENDED_SWINGING_COASTER
{ 40, 20, 80, 13, 3, 10, }, // RIDE_TYPE_INVERTED_ROLLER_COASTER
{ 40, 20, 80, 8, 3, 5, }, // RIDE_TYPE_JUNIOR_ROLLER_COASTER
{ 60, 20, 0, 10, 3, 5, }, // RIDE_TYPE_MINIATURE_RAILWAY
{ 65, 20, 0, 10, 3, 10, }, // RIDE_TYPE_MONORAIL
{ 40, 20, 80, 10, 3, 10, }, // RIDE_TYPE_MINI_SUSPENDED_COASTER
{ 50, 1, 0, 4, 0, 0, } , // RIDE_TYPE_BOAT_HIRE
{ 40, 20, 80, 9, 3, 10, }, // RIDE_TYPE_WOODEN_WILD_MOUSE
{ 40, 20, 80, 10, 3, 10, }, // RIDE_TYPE_STEEPLECHASE
{ 70, 20, 0, 8, 3, 5, }, // RIDE_TYPE_CAR_RIDE
{ 50, 20, 0, 10, 0, 0, }, // RIDE_TYPE_LAUNCHED_FREEFALL
{ 40, 20, 80, 10, 3, 10, }, // RIDE_TYPE_BOBSLEIGH_COASTER
{ 50, 20, 0, 10, 0, 0, }, // RIDE_TYPE_OBSERVATION_TOWER
{ 40, 20, 80, 10, 3, 10, }, // RIDE_TYPE_LOOPING_ROLLER_COASTER
{ 40, 20, 80, 4, 3, 10, }, // RIDE_TYPE_DINGHY_SLIDE
{ 40, 20, 80, 10, 3, 10, }, // RIDE_TYPE_MINE_TRAIN_COASTER
{ 60, 20, 0, 4, 3, 10, }, // RIDE_TYPE_CHAIRLIFT
{ 40, 20, 80, 11, 3, 10, }, // RIDE_TYPE_CORKSCREW_ROLLER_COASTER
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_MAZE
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_SPIRAL_SLIDE
{ 50, 20, 0, 8, 0, 0, }, // RIDE_TYPE_GO_KARTS
{ 80, 20, 0, 9, 0, 10, }, // RIDE_TYPE_LOG_FLUME
{ 82, 20, 0, 10, 0, 10, }, // RIDE_TYPE_RIVER_RAPIDS
{ 50, 1, 0, 5, 0, 0, } , // RIDE_TYPE_DODGEMS
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_SWINGING_SHIP
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_SWINGING_INVERTER_SHIP
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_FOOD_STALL
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_1D
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_DRINK_STALL
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_1F
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_SHOP
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_MERRY_GO_ROUND
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_22
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_INFORMATION_KIOSK
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_TOILETS
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_FERRIS_WHEEL
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_MOTION_SIMULATOR
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_3D_CINEMA
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_TOP_SPIN
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_SPACE_RINGS
{ 80, 20, 0, 0, 0, 10, }, // RIDE_TYPE_REVERSE_FREEFALL_COASTER
{ 50, 20, 0, 10, 0, 0, }, // RIDE_TYPE_LIFT
{ 44, 20, 80, 11, 3, 10, }, // RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER
{ 40, 1, 0, 0, 0, 0, } , // RIDE_TYPE_CASH_MACHINE
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_TWIST
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_HAUNTED_HOUSE
{ 45, 1, 0, 0, 0, 0, } , // RIDE_TYPE_FIRST_AID
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_CIRCUS
{ 80, 20, 0, 8, 3, 5, }, // RIDE_TYPE_GHOST_TRAIN
{ 43, 20, 80, 11, 3, 10, }, // RIDE_TYPE_TWISTER_ROLLER_COASTER
{ 40, 20, 80, 10, 3, 10, }, // RIDE_TYPE_WOODEN_ROLLER_COASTER
{ 39, 20, 80, 10, 3, 10, }, // RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER
{ 40, 20, 80, 9, 3, 10, }, // RIDE_TYPE_STEEL_WILD_MOUSE
{ 75, 20, 90, 11, 3, 15, }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER
{ 75, 20, 90, 11, 3, 15, }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_
{ 49, 20, 90, 11, 3, 15, }, // RIDE_TYPE_FLYING_ROLLER_COASTER
{ 49, 20, 90, 11, 3, 15, }, // RIDE_TYPE_FLYING_ROLLER_COASTER_ALT
{ 39, 20, 80, 10, 3, 10, }, // RIDE_TYPE_VIRGINIA_REEL
{ 70, 20, 0, 9, 0, 10, }, // RIDE_TYPE_SPLASH_BOATS
{ 70, 20, 0, 8, 3, 5, }, // RIDE_TYPE_MINI_HELICOPTERS
{ 49, 20, 90, 11, 3, 15, }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER
{ 70, 20, 0, 10, 3, 10, }, // RIDE_TYPE_SUSPENDED_MONORAIL
{ 49, 20, 90, 11, 3, 15, }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT
{ 39, 20, 80, 10, 3, 10, }, // RIDE_TYPE_REVERSER_ROLLER_COASTER
{ 47, 20, 80, 11, 3, 10, }, // RIDE_TYPE_HEARTLINE_TWISTER_COASTER
{ 30, 20, 80, 11, 3, 10, }, // RIDE_TYPE_MINI_GOLF
{ 10, 20, 80, 12, 3, 40, }, // RIDE_TYPE_GIGA_COASTER
{ 50, 20, 0, 10, 0, 0, }, // RIDE_TYPE_ROTO_DROP
{ 90, 1, 0, 5, 0, 0, } , // RIDE_TYPE_FLYING_SAUCERS
{ 30, 1, 0, 0, 0, 0, } , // RIDE_TYPE_CROOKED_HOUSE
{ 47, 20, 0, 8, 3, 5, }, // RIDE_TYPE_MONORAIL_CYCLES
{ 40, 20, 80, 13, 3, 10, }, // RIDE_TYPE_COMPACT_INVERTED_COASTER
{ 60, 20, 80, 8, 3, 10, }, // RIDE_TYPE_WATER_COASTER
{ 90, 20, 0, 0, 0, 10, }, // RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER
{ 40, 20, 80, 9, 3, 10, }, // RIDE_TYPE_INVERTED_HAIRPIN_COASTER
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_MAGIC_CARPET
{ 50, 1, 0, 4, 0, 0, } , // RIDE_TYPE_SUBMARINE_RIDE
{ 50, 20, 0, 9, 0, 10, }, // RIDE_TYPE_RIVER_RAFTS
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_50
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_ENTERPRISE
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_52
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_53
{ 50, 1, 0, 0, 0, 0, } , // RIDE_TYPE_54
{ 40, 20, 80, 11, 3, 10, }, // RIDE_TYPE_55
{ 180, 20, 80, 11, 3, 10, }, // RIDE_TYPE_INVERTED_IMPULSE_COASTER
{ 35, 20, 80, 8, 3, 10, }, // RIDE_TYPE_MINI_ROLLER_COASTER
{ 50, 20, 80, 10, 3, 10, }, // RIDE_TYPE_MINE_RIDE
{ 42, 20, 80, 9, 3, 10, }, // RIDE_TYPE_59
{ 42, 20, 80, 9, 3, 10, }, // RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER
};
// Data at 0x0097D21E

View File

@@ -197,13 +197,29 @@ constexpr const uint64_t RIDE_TYPE_FLAGS_COMMON_COASTER = RIDE_TYPE_FLAG_HAS_G_F
constexpr const uint64_t RIDE_TYPE_FLAGS_COMMON_COASTER_NON_ALT = RIDE_TYPE_FLAG_SHOW_IN_TRACK_DESIGNER
| RIDE_TYPE_FLAG_HAS_AIR_TIME | RIDE_TYPE_FLAG_HAS_ENTRANCE_EXIT;
extern const bool hasRunningTrack[RIDE_TYPE_COUNT];
extern const uint8_t initialUpkeepCosts[RIDE_TYPE_COUNT];
extern const uint8_t costPerTrackPiece[RIDE_TYPE_COUNT];
struct UpkeepCosts
{
/**
* Data about ride running costs. This is widely adjusted by the upkeep
* function, so values that don't make much sense here (a roller coaster having
* cheaper upkeep than a car ride) are fixed later on.
*
* Data generation script: https://gist.github.com/kevinburke/6bcf4a8fcc95faad7bac
*/
uint8_t BaseCost;
/** rct2: 0x0097E3AC */
uint8_t TrackLengthMultiplier;
uint8_t CostPerTrackPiece;
/** rct2: 0x0097E3B4 */
uint8_t CostPerTrain;
/** rct2: 0x0097E3B6 */
uint8_t CostPerCar;
/** rct2: 0x0097E3B8 */
uint8_t CostPerStation;
};
extern const UpkeepCosts UpkeepCostsDescriptor[RIDE_TYPE_COUNT];
extern const uint8_t costPerVehicle[RIDE_TYPE_COUNT];
extern const bool chargeUpkeepForTrainLength[RIDE_TYPE_COUNT];
extern const uint8_t costPerStation[RIDE_TYPE_COUNT];
extern const uint8_t rideBonusValue[RIDE_TYPE_COUNT];
// clang-format off

View File

@@ -867,9 +867,9 @@ static void ride_ratings_calculate_value(Ride* ride)
static uint16_t ride_compute_upkeep(Ride* ride)
{
// data stored at 0x0057E3A8, incrementing 18 bytes at a time
uint16_t upkeep = initialUpkeepCosts[ride->type];
uint16_t upkeep = UpkeepCostsDescriptor[ride->type].BaseCost;
uint16_t trackCost = costPerTrackPiece[ride->type];
uint16_t trackCost = UpkeepCostsDescriptor[ride->type].CostPerTrackPiece;
uint8_t dropFactor = ride->drops;
dropFactor >>= 6;
@@ -882,10 +882,7 @@ static uint16_t ride_compute_upkeep(Ride* ride)
// rides that had tracks. The 0's were fixed rides like crooked house or
// dodgems.
// Data source is 0x0097E3AC
if (hasRunningTrack[ride->type])
{
totalLength *= 20;
}
totalLength *= UpkeepCostsDescriptor[ride->type].TrackLengthMultiplier;
upkeep += static_cast<uint16_t>(totalLength >> 10);
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)
@@ -912,17 +909,12 @@ static uint16_t ride_compute_upkeep(Ride* ride)
// various variables set on the ride itself.
// https://gist.github.com/kevinburke/e19b803cd2769d96c540
upkeep += costPerVehicle[ride->type] * ride->num_vehicles;
// either set to 3 or 0, extra boosts for some rides including mini golf
if (chargeUpkeepForTrainLength[ride->type])
{
upkeep += 3 * ride->num_cars_per_train;
}
upkeep += UpkeepCostsDescriptor[ride->type].CostPerTrain * ride->num_vehicles;
upkeep += UpkeepCostsDescriptor[ride->type].CostPerCar * ride->num_cars_per_train;
// slight upkeep boosts for some rides - 5 for mini railway, 10 for log
// flume/rapids, 10 for roller coaster, 28 for giga coaster
upkeep += costPerStation[ride->type] * ride->num_stations;
upkeep += UpkeepCostsDescriptor[ride->type].CostPerStation * ride->num_stations;
if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE)
{