mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-04 13:42:55 +01:00
Start initial generation of ride and general support calls
This commit is contained in:
@@ -626,3 +626,262 @@ const utf8string FlatTrackNames[256] = {
|
||||
"",
|
||||
"",
|
||||
};
|
||||
|
||||
const utf8string TrackElemNames[] = {
|
||||
"TRACK_ELEM_FLAT",
|
||||
"TRACK_ELEM_END_STATION",
|
||||
"TRACK_ELEM_BEGIN_STATION",
|
||||
"TRACK_ELEM_MIDDLE_STATION",
|
||||
"TRACK_ELEM_25_DEG_UP",
|
||||
"TRACK_ELEM_60_DEG_UP",
|
||||
"TRACK_ELEM_FLAT_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP",
|
||||
"TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_25_DEG_UP_TO_FLAT",
|
||||
"TRACK_ELEM_25_DEG_DOWN",
|
||||
"TRACK_ELEM_60_DEG_DOWN",
|
||||
"TRACK_ELEM_FLAT_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN",
|
||||
"TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_25_DEG_DOWN_TO_FLAT",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES",
|
||||
"TRACK_ELEM_FLAT_TO_LEFT_BANK",
|
||||
"TRACK_ELEM_FLAT_TO_RIGHT_BANK",
|
||||
"TRACK_ELEM_LEFT_BANK_TO_FLAT",
|
||||
"TRACK_ELEM_RIGHT_BANK_TO_FLAT",
|
||||
"TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES",
|
||||
"TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES",
|
||||
"TRACK_ELEM_LEFT_BANK_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_BANK_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_25_DEG_UP_TO_LEFT_BANK",
|
||||
"TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANK",
|
||||
"TRACK_ELEM_LEFT_BANK_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_BANK_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANK",
|
||||
"TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANK",
|
||||
"TRACK_ELEM_LEFT_BANK",
|
||||
"TRACK_ELEM_RIGHT_BANK",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN",
|
||||
"TRACK_ELEM_S_BEND_LEFT",
|
||||
"TRACK_ELEM_S_BEND_RIGHT",
|
||||
"TRACK_ELEM_LEFT_VERTICAL_LOOP",
|
||||
"TRACK_ELEM_RIGHT_VERTICAL_LOOP",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_BANK",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE",
|
||||
"TRACK_ELEM_LEFT_TWIST_DOWN_TO_UP",
|
||||
"TRACK_ELEM_RIGHT_TWIST_DOWN_TO_UP",
|
||||
"TRACK_ELEM_LEFT_TWIST_UP_TO_DOWN",
|
||||
"TRACK_ELEM_RIGHT_TWIST_UP_TO_DOWN",
|
||||
"TRACK_ELEM_HALF_LOOP_UP",
|
||||
"TRACK_ELEM_HALF_LOOP_DOWN",
|
||||
"TRACK_ELEM_LEFT_CORKSCREW_UP",
|
||||
"TRACK_ELEM_RIGHT_CORKSCREW_UP",
|
||||
"TRACK_ELEM_LEFT_CORKSCREW_DOWN",
|
||||
"TRACK_ELEM_RIGHT_CORKSCREW_DOWN",
|
||||
"TRACK_ELEM_FLAT_TO_60_DEG_UP",
|
||||
"TRACK_ELEM_60_DEG_UP_TO_FLAT",
|
||||
"TRACK_ELEM_FLAT_TO_60_DEG_DOWN",
|
||||
"TRACK_ELEM_60_DEG_DOWN_TO_FLAT",
|
||||
"TRACK_ELEM_TOWER_BASE",
|
||||
"TRACK_ELEM_TOWER_SECTION",
|
||||
"TRACK_ELEM_FLAT_COVERED",
|
||||
"TRACK_ELEM_25_DEG_UP_COVERED",
|
||||
"TRACK_ELEM_60_DEG_UP_COVERED",
|
||||
"TRACK_ELEM_FLAT_TO_25_DEG_UP_COVERED",
|
||||
"TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED",
|
||||
"TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED",
|
||||
"TRACK_ELEM_25_DEG_UP_TO_FLAT_COVERED",
|
||||
"TRACK_ELEM_25_DEG_DOWN_COVERED",
|
||||
"TRACK_ELEM_60_DEG_DOWN_COVERED",
|
||||
"TRACK_ELEM_FLAT_TO_25_DEG_DOWN_COVERED",
|
||||
"TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED",
|
||||
"TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED",
|
||||
"TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED",
|
||||
"TRACK_ELEM_S_BEND_LEFT_COVERED",
|
||||
"TRACK_ELEM_S_BEND_RIGHT_COVERED",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED",
|
||||
"TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL",
|
||||
"TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL",
|
||||
"TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL",
|
||||
"TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL",
|
||||
"TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE",
|
||||
"TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE",
|
||||
"TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE",
|
||||
"TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN",
|
||||
"TRACK_ELEM_BRAKES",
|
||||
"TRACK_ELEM_ROTATION_CONTROL_TOGGLE",
|
||||
"TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP",
|
||||
"TRACK_ELEM_MAZE",
|
||||
"TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP",
|
||||
"TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN",
|
||||
"TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_UP",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP",
|
||||
"TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN",
|
||||
"TRACK_ELEM_25_DEG_UP_LEFT_BANKED",
|
||||
"TRACK_ELEM_25_DEG_UP_RIGHT_BANKED",
|
||||
"TRACK_ELEM_WATERFALL",
|
||||
"TRACK_ELEM_RAPIDS",
|
||||
"TRACK_ELEM_ON_RIDE_PHOTO",
|
||||
"TRACK_ELEM_25_DEG_DOWN_LEFT_BANKED",
|
||||
"TRACK_ELEM_25_DEG_DOWN_RIGHT_BANKED",
|
||||
"TRACK_ELEM_WATER_SPLASH",
|
||||
"TRACK_ELEM_FLAT_TO_60_DEG_UP_LONG_BASE",
|
||||
"TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE",
|
||||
"TRACK_ELEM_WHIRLPOOL",
|
||||
"TRACK_ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE",
|
||||
"TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122",
|
||||
"TRACK_ELEM_CABLE_LIFT_HILL",
|
||||
"TRACK_ELEM_REVERSE_WHOA_BELLY_SLOPE",
|
||||
"TRACK_ELEM_REVERSE_WHOA_BELLY_VERTICAL",
|
||||
"TRACK_ELEM_90_DEG_UP",
|
||||
"TRACK_ELEM_90_DEG_DOWN",
|
||||
"TRACK_ELEM_60_DEG_UP_TO_90_DEG_UP",
|
||||
"TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN",
|
||||
"TRACK_ELEM_90_DEG_UP_TO_60_DEG_UP",
|
||||
"TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN",
|
||||
"TRACK_ELEM_BRAKE_FOR_DROP",
|
||||
"TRACK_ELEM_LEFT_EIGHTH_TO_DIAG",
|
||||
"TRACK_ELEM_RIGHT_EIGHTH_TO_DIAG",
|
||||
"TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL",
|
||||
"TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL",
|
||||
"TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG",
|
||||
"TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG",
|
||||
"TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL",
|
||||
"TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL",
|
||||
"TRACK_ELEM_DIAG_FLAT",
|
||||
"TRACK_ELEM_DIAG_25_DEG_UP",
|
||||
"TRACK_ELEM_DIAG_60_DEG_UP",
|
||||
"TRACK_ELEM_DIAG_FLAT_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP",
|
||||
"TRACK_ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT",
|
||||
"TRACK_ELEM_DIAG_25_DEG_DOWN",
|
||||
"TRACK_ELEM_DIAG_60_DEG_DOWN",
|
||||
"TRACK_ELEM_DIAG_FLAT_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN",
|
||||
"TRACK_ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_DIAG_25_DEG_DOWN_TO_FLAT",
|
||||
"TRACK_ELEM_DIAG_FLAT_TO_60_DEG_UP",
|
||||
"TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT",
|
||||
"TRACK_ELEM_DIAG_FLAT_TO_60_DEG_DOWN",
|
||||
"TRACK_ELEM_DIAG_60_DEG_DOWN_TO_FLAT",
|
||||
"TRACK_ELEM_DIAG_FLAT_TO_LEFT_BANK",
|
||||
"TRACK_ELEM_DIAG_FLAT_TO_RIGHT_BANK",
|
||||
"TRACK_ELEM_DIAG_LEFT_BANK_TO_FLAT",
|
||||
"TRACK_ELEM_DIAG_RIGHT_BANK_TO_FLAT",
|
||||
"TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK",
|
||||
"TRACK_ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK",
|
||||
"TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK",
|
||||
"TRACK_ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK",
|
||||
"TRACK_ELEM_DIAG_LEFT_BANK",
|
||||
"TRACK_ELEM_DIAG_RIGHT_BANK",
|
||||
"TRACK_ELEM_LOG_FLUME_REVERSER",
|
||||
"TRACK_ELEM_SPINNING_TUNNEL",
|
||||
"TRACK_ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN",
|
||||
"TRACK_ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN",
|
||||
"TRACK_ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP",
|
||||
"TRACK_ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP",
|
||||
"TRACK_ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK",
|
||||
"TRACK_ELEM_POWERED_LIFT",
|
||||
"TRACK_ELEM_LEFT_LARGE_HALF_LOOP_UP",
|
||||
"TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_UP",
|
||||
"TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_DOWN",
|
||||
"TRACK_ELEM_LEFT_LARGE_HALF_LOOP_DOWN",
|
||||
"TRACK_ELEM_LEFT_FLYER_TWIST_UP",
|
||||
"TRACK_ELEM_RIGHT_FLYER_TWIST_UP",
|
||||
"TRACK_ELEM_LEFT_FLYER_TWIST_DOWN",
|
||||
"TRACK_ELEM_RIGHT_FLYER_TWIST_DOWN",
|
||||
"TRACK_ELEM_FLYER_HALF_LOOP_UP",
|
||||
"TRACK_ELEM_FLYER_HALF_LOOP_DOWN",
|
||||
"TRACK_ELEM_LEFT_FLYER_CORKSCREW_UP",
|
||||
"TRACK_ELEM_RIGHT_FLYER_CORKSCREW_UP",
|
||||
"TRACK_ELEM_LEFT_FLYER_CORKSCREW_DOWN",
|
||||
"TRACK_ELEM_RIGHT_FLYER_CORKSCREW_DOWN",
|
||||
"TRACK_ELEM_HEARTLINE_TRANSFER_UP",
|
||||
"TRACK_ELEM_HEARTLINE_TRANSFER_DOWN",
|
||||
"TRACK_ELEM_LEFT_HEARTLINE_ROLL",
|
||||
"TRACK_ELEM_RIGHT_HEARTLINE_ROLL",
|
||||
"TRACK_ELEM_MINI_GOLF_HOLE_A",
|
||||
"TRACK_ELEM_MINI_GOLF_HOLE_B",
|
||||
"TRACK_ELEM_MINI_GOLF_HOLE_C",
|
||||
"TRACK_ELEM_MINI_GOLF_HOLE_D",
|
||||
"TRACK_ELEM_MINI_GOLF_HOLE_E",
|
||||
"TRACK_ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN",
|
||||
"TRACK_ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP",
|
||||
"TRACK_ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN",
|
||||
"TRACK_ELEM_LEFT_CURVED_LIFT_HILL",
|
||||
"TRACK_ELEM_RIGHT_CURVED_LIFT_HILL",
|
||||
"TRACK_ELEM_LEFT_REVERSER",
|
||||
"TRACK_ELEM_RIGHT_REVERSER",
|
||||
"TRACK_ELEM_AIR_THRUST_TOP_CAP",
|
||||
"TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN",
|
||||
"TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL",
|
||||
"TRACK_ELEM_BLOCK_BRAKES",
|
||||
"TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN",
|
||||
"TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN",
|
||||
"TRACK_ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP",
|
||||
"TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP",
|
||||
"TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN",
|
||||
"TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN",
|
||||
"TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN",
|
||||
"TRACK_ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT",
|
||||
"TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT",
|
||||
"TRACK_ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN",
|
||||
"TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT",
|
||||
"TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT",
|
||||
"TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP",
|
||||
"TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT",
|
||||
"TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT",
|
||||
"TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN",
|
||||
"TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN",
|
||||
"TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT",
|
||||
"TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP",
|
||||
"TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN",
|
||||
"TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN",
|
||||
"TRACK_ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP",
|
||||
"TRACK_ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP",
|
||||
};
|
||||
|
||||
@@ -22,5 +22,6 @@
|
||||
extern const utf8string RideNames[91];
|
||||
extern const utf8string TrackNames[256];
|
||||
extern const utf8string FlatTrackNames[256];
|
||||
extern const utf8string TrackElemNames[256];
|
||||
|
||||
#endif // #endif _TEST_PAINT_DATA_H_
|
||||
|
||||
252
test/testpaint/generate.cpp
Normal file
252
test/testpaint/generate.cpp
Normal file
@@ -0,0 +1,252 @@
|
||||
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
|
||||
/*****************************************************************************
|
||||
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||
*
|
||||
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
|
||||
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
|
||||
*
|
||||
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* A full copy of the GNU General Public License can be found in licence.txt
|
||||
*****************************************************************************/
|
||||
#pragma endregion
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include "data.h"
|
||||
#include "intercept.h"
|
||||
#include "../../src/interface/viewport.h"
|
||||
#include "../../src/rct2.h"
|
||||
#include "../../src/ride/ride.h"
|
||||
#include "../../src/ride/ride_data.h"
|
||||
#include "../../src/ride/track.h"
|
||||
#include "../../src/ride/track_data.h"
|
||||
}
|
||||
|
||||
class PaintCodeGenerator
|
||||
{
|
||||
public:
|
||||
int Generate(uint8 rideType)
|
||||
{
|
||||
auto filename = "paint_" + std::to_string(rideType) + ".c";
|
||||
FILE * file = fopen(filename.c_str(), "w");
|
||||
if (file == nullptr)
|
||||
{
|
||||
fprintf(stderr, "Unable to save to ./%s\n", filename.c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
_file = file;
|
||||
_rideType = rideType;
|
||||
_rideName = std::string(RideNames[rideType]);
|
||||
Generate();
|
||||
|
||||
fclose(file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string _rideName;
|
||||
uint8 _rideType;
|
||||
FILE * _file;
|
||||
|
||||
void Generate()
|
||||
{
|
||||
GenerateTrackFunctions();
|
||||
GenerateMainFunction();
|
||||
}
|
||||
|
||||
void GenerateTrackFunctions()
|
||||
{
|
||||
for (int trackType = 0; trackType < 256; trackType++)
|
||||
{
|
||||
if (IsTrackTypeSupported(trackType))
|
||||
{
|
||||
GenerateTrackFunction(trackType);
|
||||
WriteLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GenerateTrackFunction(int trackType)
|
||||
{
|
||||
std::string trackName = TrackNames[trackType];
|
||||
int numSequences = getTrackSequenceCount(_rideType, trackType);
|
||||
int height = 48;
|
||||
|
||||
WriteLine(0, "static void " + _rideName + "_track_" + trackName + "(uint8 rideIndex, uint8 trackSequence, uint8 direction, int height, rct_map_element * mapElement)");
|
||||
WriteLine(0, "{");
|
||||
|
||||
support_height generalSupports[4] = { 0 };
|
||||
|
||||
for (int direction = 0; direction < 4; direction++) {
|
||||
int trackSequence = 0;
|
||||
|
||||
rct_map_element mapElement = { 0 };
|
||||
mapElement.flags |= MAP_ELEMENT_FLAG_LAST_TILE;
|
||||
mapElement.properties.track.type = trackType;
|
||||
mapElement.base_height = 3;
|
||||
g_currently_drawn_item = &mapElement;
|
||||
|
||||
CallOriginal(trackType, direction, trackSequence, height, &mapElement);
|
||||
|
||||
generalSupports[direction] = gSupport;
|
||||
}
|
||||
|
||||
if (AllMatch(generalSupports, 4))
|
||||
{
|
||||
WriteLine(1, "paint_util_set_general_support_height(height + %d, 0x%02X);", generalSupports[0].height - height, generalSupports[0].slope);
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteLine(1, "#error Unsupported: different directional general supports");
|
||||
}
|
||||
|
||||
WriteLine(0, "}");
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool AllMatch(T * arr, size_t count)
|
||||
{
|
||||
for (size_t i = 1; i < count; i++)
|
||||
{
|
||||
if (memcmp((const void *)&arr[i], (const void *)&arr[0], sizeof(T)) != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void CallOriginal(int trackType, int direction, int trackSequence, int height, rct_map_element *mapElement)
|
||||
{
|
||||
constexpr uint32 DEFAULT_SCHEME_TRACK = COLOUR_GREY << 19 | COLOUR_WHITE << 24 | 0xA0000000;
|
||||
constexpr uint32 DEFAULT_SCHEME_SUPPORTS = COLOUR_LIGHT_BLUE << 19 | COLOUR_ICY_BLUE << 24 | 0xA0000000;
|
||||
constexpr uint32 DEFAULT_SCHEME_MISC = COLOUR_DARK_PURPLE << 19 | COLOUR_LIGHT_PURPLE << 24 | 0xA0000000;
|
||||
constexpr uint32 DEFAULT_SCHEME_3 = COLOUR_BRIGHT_PURPLE << 19 | COLOUR_DARK_BLUE << 24 | 0xA0000000;
|
||||
|
||||
gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE;
|
||||
gTrackColours[SCHEME_TRACK] = DEFAULT_SCHEME_TRACK;
|
||||
gTrackColours[SCHEME_SUPPORTS] = DEFAULT_SCHEME_SUPPORTS;
|
||||
gTrackColours[SCHEME_MISC] = DEFAULT_SCHEME_MISC;
|
||||
gTrackColours[SCHEME_3] = DEFAULT_SCHEME_3;
|
||||
|
||||
rct_drawpixelinfo dpi = { 0 };
|
||||
dpi.zoom_level = 1;
|
||||
unk_140E9A8 = &dpi;
|
||||
|
||||
rct_ride ride = {0};
|
||||
|
||||
rct_ride_entry rideEntry = {0};
|
||||
rct_ride_entry_vehicle vehicleEntry { 0 };
|
||||
vehicleEntry.base_image_id = 0x70000;
|
||||
rideEntry.vehicles[0] = vehicleEntry;
|
||||
|
||||
gRideList[0] = ride;
|
||||
gRideEntries[0] = &rideEntry;
|
||||
|
||||
for (int s = 0; s < 9; ++s)
|
||||
{
|
||||
gSupportSegments[s].height = 0;
|
||||
gSupportSegments[s].slope = 0xFF;
|
||||
}
|
||||
|
||||
gSupport.height = 0;
|
||||
gSupport.slope = 0xFF;
|
||||
g141E9DB = G141E9DB_FLAG_1 | G141E9DB_FLAG_2;
|
||||
|
||||
uint32 *trackDirectionList = (uint32 *)RideTypeTrackPaintFunctionsOld[_rideType][trackType];
|
||||
// Have to call from this point as it pushes esi and expects callee to pop it
|
||||
RCT2_CALLPROC_X(
|
||||
0x006C4934,
|
||||
_rideType,
|
||||
(int) trackDirectionList,
|
||||
direction,
|
||||
height,
|
||||
(int) &mapElement,
|
||||
0 * sizeof(rct_ride),
|
||||
trackSequence
|
||||
);
|
||||
}
|
||||
|
||||
void GenerateMainFunction()
|
||||
{
|
||||
WriteLine(0, "TRACK_PAINT_FUNCTION get_track_paint_function_" + _rideName + "(int trackType, int direction)");
|
||||
WriteLine(0, "{");
|
||||
WriteLine(1, "switch (trackType) {");
|
||||
for (int trackType = 0; trackType < 256; trackType++)
|
||||
{
|
||||
if (IsTrackTypeSupported(trackType))
|
||||
{
|
||||
WriteLine(1, "case " + std::string(TrackElemNames[trackType]) + ":");
|
||||
WriteLine(2, "return NULL;");
|
||||
}
|
||||
}
|
||||
WriteLine(1, "}");
|
||||
WriteLine(1, "return NULL;");
|
||||
WriteLine(0, "}");
|
||||
}
|
||||
|
||||
bool IsTrackTypeSupported(int trackType)
|
||||
{
|
||||
if (trackType == TRACK_ELEM_BEGIN_STATION ||
|
||||
trackType == TRACK_ELEM_MIDDLE_STATION ||
|
||||
trackType == TRACK_ELEM_END_STATION)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (RideTypeTrackPaintFunctionsOld[_rideType][trackType] != 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void WriteLine()
|
||||
{
|
||||
WriteLine(0, "");
|
||||
}
|
||||
|
||||
void WriteLine(int tabs, const char * format, ...)
|
||||
{
|
||||
va_list args;
|
||||
char buffer[512];
|
||||
|
||||
va_start(args, format);
|
||||
vsprintf(buffer, format, args);
|
||||
va_end(args);
|
||||
|
||||
WriteLine(tabs, std::string(buffer));
|
||||
}
|
||||
|
||||
void WriteLine(int tabs, std::string s)
|
||||
{
|
||||
for (int i = 0; i < tabs; i++)
|
||||
{
|
||||
fprintf(_file, "\t");
|
||||
}
|
||||
fprintf(_file, s.c_str());
|
||||
fprintf(_file, "\n");
|
||||
}
|
||||
};
|
||||
|
||||
extern "C"
|
||||
{
|
||||
int generatePaintCode(uint8 rideType)
|
||||
{
|
||||
if (ride_type_has_flag(rideType, RIDE_TYPE_FLAG_FLAT_RIDE))
|
||||
{
|
||||
fprintf(stderr, "Flat rides not supported.\n");
|
||||
}
|
||||
|
||||
auto pcg = PaintCodeGenerator();
|
||||
return pcg.Generate(rideType);
|
||||
}
|
||||
}
|
||||
@@ -32,4 +32,6 @@ bool testSupportSegments(uint8 rideType, uint8 trackType);
|
||||
bool testTunnels(uint8 rideType, uint8 trackType);
|
||||
bool testVerticalTunnels(uint8 rideType, uint8 trackType);
|
||||
|
||||
int generatePaintCode(uint8 rideType);
|
||||
|
||||
#endif // #endif _TEST_PAINT_INTERCEPT_H_
|
||||
|
||||
@@ -352,6 +352,7 @@ static void PrintRideTypes()
|
||||
int main(int argc, char *argv[]) {
|
||||
std::vector<TestCase> testCases;
|
||||
|
||||
bool generate = false;
|
||||
uint8 specificRideType = 0xFF;
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
char *arg = argv[i];
|
||||
@@ -367,6 +368,17 @@ int main(int argc, char *argv[]) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
else if (strcmp(arg, "--generate") == 0) {
|
||||
generate = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (generate) {
|
||||
if (specificRideType > 90) {
|
||||
fprintf(stderr, "No ride or invalid ride specified.\n");
|
||||
return 1;
|
||||
}
|
||||
return generatePaintCode(specificRideType);
|
||||
}
|
||||
|
||||
for (uint8 rideType = 0; rideType < 91; rideType++) {
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
<ClCompile Include="..\..\src\paint\paint_helpers.c" />
|
||||
<ClCompile Include="compat.c" />
|
||||
<ClCompile Include="data.c" />
|
||||
<ClCompile Include="generate.cpp" />
|
||||
<ClCompile Include="intercept.c" />
|
||||
<ClCompile Include="intercept_2.cpp" />
|
||||
<ClCompile Include="main.cpp" />
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
<LocalDebuggerCommand>$(TargetDir)\openrct2.exe</LocalDebuggerCommand>
|
||||
<LocalDebuggerWorkingDirectory>$(TargetDir)</LocalDebuggerWorkingDirectory>
|
||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||
<LocalDebuggerCommandArguments>--ride-type 88 --generate</LocalDebuggerCommandArguments>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ShowAllFiles>true</ShowAllFiles>
|
||||
<ShowAllFiles>false</ShowAllFiles>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
Reference in New Issue
Block a user