Merge pull request #4567 from IntelOrca/paint/generate

Generate ride paint code
This commit is contained in:
Ted John 2016-10-09 12:24:59 +01:00 committed by GitHub
commit 6348f281b7
16 changed files with 1847 additions and 95 deletions

View File

@ -397,6 +397,7 @@
D44272A51CC81B3200D84D28 /* particle.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271EF1CC81B3200D84D28 /* particle.c */; };
D44272A61CC81B3200D84D28 /* scenery.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271F01CC81B3200D84D28 /* scenery.c */; };
D44272A71CC81B3200D84D28 /* sprite.c in Sources */ = {isa = PBXBuildFile; fileRef = D44271F21CC81B3200D84D28 /* sprite.c */; };
D452919B1DAA204200C11788 /* generate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D45291991DAA202C00C11788 /* generate.cpp */; };
D45A38BB1CF3006400659A24 /* engines in Resources */ = {isa = PBXBuildFile; fileRef = D45A38B21CF3006400659A24 /* engines */; };
D45A38BC1CF3006400659A24 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D45A38B31CF3006400659A24 /* libcrypto.dylib */; };
D45A38BE1CF3006400659A24 /* libjansson.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D45A38B51CF3006400659A24 /* libjansson.dylib */; };
@ -914,6 +915,7 @@
D44271F21CC81B3200D84D28 /* sprite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sprite.c; sourceTree = "<group>"; };
D44271F31CC81B3200D84D28 /* sprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sprite.h; sourceTree = "<group>"; };
D44271F41CC81B3200D84D28 /* water.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = water.h; sourceTree = "<group>"; };
D45291991DAA202C00C11788 /* generate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generate.cpp; sourceTree = "<group>"; };
D45A38B21CF3006400659A24 /* engines */ = {isa = PBXFileReference; lastKnownFileType = folder; path = engines; sourceTree = "<group>"; };
D45A38B31CF3006400659A24 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libcrypto.dylib; sourceTree = "<group>"; };
D45A38B41CF3006400659A24 /* libfreetype.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libfreetype.dylib; sourceTree = "<group>"; };
@ -1171,6 +1173,7 @@
C64FDAC41D6DA55E00F259B9 /* compat.c */,
C64FDAC91D6DA92D00F259B9 /* data.c */,
85AFA2141D7DDFA100221B42 /* data.h */,
D45291991DAA202C00C11788 /* generate.cpp */,
85B5C0AF1D81D912001B99A8 /* intercept_2.cpp */,
C64FDAC71D6DA72400F259B9 /* intercept.c */,
85AFA2101D7DB83E00221B42 /* intercept.h */,
@ -2420,6 +2423,7 @@
85060FD31D8C17CC00DFA2B3 /* track_data_old.c in Sources */,
C64FDA871D6D9A2100F259B9 /* dodgems.c in Sources */,
C64FDA881D6D9A2100F259B9 /* ferris_wheel.c in Sources */,
D452919B1DAA204200C11788 /* generate.cpp in Sources */,
C64FDA891D6D9A2100F259B9 /* flying_saucers.c in Sources */,
C64FDA8A1D6D9A2100F259B9 /* ghost_train.c in Sources */,
C64FDA8B1D6D9A2100F259B9 /* haunted_house.c in Sources */,

View File

@ -38,7 +38,8 @@ enum {
SPR_WILD_MOUSE_ROTATION_CONTROL_TOGGLE_NW_SE = 16909,
SPR_WILD_MOUSE_FLAT_CHAIN_SW_NE = 16910,
SPR_WILD_MOUSE_FLAT_CHAIN_NW_SE = 16911,
SPR_WILD_MOUSE_FLAT_CHAIN_NE_SW = 16912,
SPR_WILD_MOUSE_FLAT_CHAIN_SE_NW = 16913,
SPR_WILD_MOUSE_FLAT_TO_25_DEG_SW_NE = 16914,
SPR_WILD_MOUSE_FLAT_TO_25_DEG_NW_SE = 16915,
SPR_WILD_MOUSE_FLAT_TO_25_DEG_NE_SW = 16916,
@ -172,8 +173,8 @@ static void wild_mouse_track_flat(uint8 rideIndex, uint8 trackSequence, uint8 di
static const uint32 imageIds[4][2] = {
{ SPR_WILD_MOUSE_FLAT_SW_NE, SPR_WILD_MOUSE_FLAT_CHAIN_SW_NE },
{ SPR_WILD_MOUSE_FLAT_NW_SE, SPR_WILD_MOUSE_FLAT_CHAIN_NW_SE },
{ SPR_WILD_MOUSE_FLAT_SW_NE, SPR_WILD_MOUSE_FLAT_CHAIN_SW_NE },
{ SPR_WILD_MOUSE_FLAT_NW_SE, SPR_WILD_MOUSE_FLAT_CHAIN_NW_SE },
{ SPR_WILD_MOUSE_FLAT_SW_NE, SPR_WILD_MOUSE_FLAT_CHAIN_NE_SW },
{ SPR_WILD_MOUSE_FLAT_NW_SE, SPR_WILD_MOUSE_FLAT_CHAIN_SE_NW },
};

View File

@ -2159,6 +2159,11 @@ void track_element_clear_cable_lift(rct_map_element *trackElement) {
trackElement->properties.track.colour &= ~TRACK_ELEMENT_COLOUR_FLAG_CABLE_LIFT;
}
bool track_element_is_inverted(rct_map_element *trackElement)
{
return trackElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED;
}
int track_get_actual_bank(rct_map_element *mapElement, int bank)
{
rct_ride *ride = get_ride(mapElement->properties.track.ride_index);

View File

@ -66,6 +66,11 @@ enum {
enum {
// Not anything to do with colour but uses
// that field in the map element
// Used for multi-dimension coaster
TRACK_ELEMENT_COLOUR_FLAG_INVERTED = (1 << 2),
// Used for giga coaster
TRACK_ELEMENT_COLOUR_FLAG_CABLE_LIFT = (1 << 3),
};
@ -459,6 +464,7 @@ enum {
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,
TRACK_ELEM_255,
};
enum {
@ -518,6 +524,7 @@ bool track_element_is_lift_hill(rct_map_element *trackElement);
bool track_element_is_cable_lift(rct_map_element *trackElement);
void track_element_set_cable_lift(rct_map_element *trackElement);
void track_element_clear_cable_lift(rct_map_element *trackElement);
bool track_element_is_inverted(rct_map_element *trackElement);
int track_get_actual_bank(rct_map_element *mapElement, int bank);
int track_get_actual_bank_2(int rideType, int trackColour, int bank);

View File

@ -227,7 +227,7 @@ bool track_paint_util_has_fence(enum edge edge, rct_xy16 position, rct_map_eleme
uint16 entranceLoc =
((position.x / 32) + offset.x) |
(((position.y / 32) + offset.y) << 8);
(((position.y / 32) + offset.y) * (1 << 8));
int entranceId = map_get_station(mapElement);
@ -861,6 +861,8 @@ const sint8 defaultEighthToDiagThickness[4][4] = {
},
};
const uint8 mapLeftEighthTurnToOrthogonal[] = { 4, 2, 3, 1, 0 };
static const sint8 eighth_to_diag_sprite_map[] = {0, 1, 2, -1, 3};
void track_paint_util_eighth_to_diag_tiles_paint(const sint8 thickness[4][4], sint16 height, int direction, uint8 trackSequence, uint32 colourFlags, const uint32 sprites[4][4], const rct_xy16 offsets[4][4], const rct_xy16 boundsLengths[4][4], const rct_xyz16 boundsOffsets[4][4], uint8 rotation)
{

View File

@ -218,6 +218,8 @@ extern const sint8 defaultEighthToDiagThickness[4][4];
extern const rct_xy16 defaultDiagBoundLengths[4];
extern const rct_xy16 defaultDiagTileOffsets[4];
extern const uint8 mapLeftEighthTurnToOrthogonal[5];
extern bool gUseOriginalRidePaint;
bool track_paint_util_has_fence(enum edge edge, rct_xy16 position, rct_map_element * mapElement, rct_ride * ride, uint8 rotation);

View File

@ -155,3 +155,13 @@ bool track_element_is_lift_hill(rct_map_element *trackElement)
{
return trackElement->type & 0x80;
}
bool track_element_is_cable_lift(rct_map_element *trackElement)
{
return trackElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_CABLE_LIFT;
}
bool track_element_is_inverted(rct_map_element *trackElement)
{
return trackElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED;
}

View File

@ -366,6 +366,7 @@ const utf8string TrackNames[256] = {
"RightQuarterTurn1Tile90DegDown",
"Multidim90DegUpToInvertedFlatQuarterLoop",
"MultidimFlatTo90DegDownQuarterLoop",
"Elem255",
};
const utf8string FlatTrackNames[256] = {
@ -626,3 +627,615 @@ 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_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",
"TRACK_ELEM_255",
};
const utf8string RideCodeNames[91] = {
"spiral_rc",
"stand_up_rc",
"suspended_swinging_rc",
"inverted_rc",
"junior_rc",
"miniature_railway",
"monorail",
"mini_suspended_rc",
"boat_ride",
"wooden_wild_mouse",
"steeplechase",
"car_ride",
"launched_freefall",
"bobsleigh_rc",
"observation_tower",
"looping_rc",
"dinghy_slide",
"mine_train_rc",
"chairlift",
"corkscrew_rc",
"maze",
"spiralslide",
"go_karts",
"log_flume",
"river_rapids",
"dodgems",
"pirate_ship",
"swinging_inverter_ship",
"food_stall",
"1D",
"drink_stall",
"1F",
"shop",
"merry_go_round",
"22",
"information_kiosk",
"toilets",
"ferris_wheel",
"motion_simulator",
"3d_cinema",
"top_spin",
"space_rings",
"reverse_freefall_rc",
"lift",
"vertical_drop_rc",
"cash_machine",
"twist",
"haunted_house",
"first_aid",
"circus_show",
"ghost_train",
"twister_rc",
"wooden_rc",
"side_friction_rc",
"wild_mouse",
"multi_dimension_rc",
"multi_dimension_rc_alt",
"flying_rc",
"flying_rc_alt",
"virginia_reel",
"splash_boats",
"mini_helicopters",
"lay_down_rc",
"suspended_monorail",
"lay_down_rc_alt",
"reverser_rc",
"heartline_twister_rc",
"mini_golf",
"giga_rc",
"roto_drop",
"flying_saucers",
"crooked_house",
"monorail_cycles",
"compact_inverted_rc",
"water_rc",
"air_powered_vertical_rc",
"inverted_hairpin_rc",
"magic_carpet",
"submarine_ride",
"river_rafts",
"50",
"enterprise",
"52",
"53",
"54",
"55",
"inverted_impulse_rc",
"mini_rc",
"mine_ride",
"59",
"lim_launched_rc",
};
const utf8string TrackCodeNames[256] = {
"flat",
"end_station",
"begin_station",
"middle_station",
"25_deg_up",
"60_deg_up",
"flat_to_25_deg_up",
"25_deg_up_to_60_deg_up",
"60_deg_up_to_25_deg_up",
"25_deg_up_to_flat",
"25_deg_down",
"60_deg_down",
"flat_to_25_deg_down",
"25_deg_down_to_60_deg_down",
"60_deg_down_to_25_deg_down",
"25_deg_down_to_flat",
"left_quarter_turn_5",
"right_quarter_turn_5",
"flat_to_left_bank",
"flat_to_right_bank",
"left_bank_to_flat",
"right_bank_to_flat",
"banked_left_quarter_turn_5",
"banked_right_quarter_turn_5",
"left_bank_to_25_deg_up",
"right_bank_to_25_deg_up",
"25_deg_up_to_left_bank",
"25_deg_up_to_right_bank",
"left_bank_to_25_deg_down",
"right_bank_to_25_deg_down",
"25_deg_down_to_left_bank",
"25_deg_down_to_right_bank",
"left_bank",
"right_bank",
"left_quarter_turn_5_25_deg_up",
"right_quarter_turn_5_25_deg_up",
"left_quarter_turn_5_25_deg_down",
"right_quarter_turn_5_25_deg_down",
"s_bend_left",
"s_bend_right",
"left_vertical_loop",
"right_vertical_loop",
"left_quarter_turn_3",
"right_quarter_turn_3",
"left_quarter_turn_3_bank",
"right_quarter_turn_3_bank",
"left_quarter_turn_3_25_deg_up",
"right_quarter_turn_3_25_deg_up",
"left_quarter_turn_3_25_deg_down",
"right_quarter_turn_3_25_deg_down",
"left_quarter_turn_1",
"right_quarter_turn_1",
"left_twist_down_to_up",
"right_twist_down_to_up",
"left_twist_up_to_down",
"right_twist_up_to_down",
"half_loop_up",
"half_loop_down",
"left_corkscrew_up",
"right_corkscrew_up",
"left_corkscrew_down",
"right_corkscrew_down",
"flat_to_60_deg_up",
"60_deg_up_to_flat",
"flat_to_60_deg_down",
"60_deg_down_to_flat",
"tower_base",
"tower_section",
"flat_covered",
"25_deg_up_covered",
"60_deg_up_covered",
"flat_to_25_deg_up_covered",
"25_deg_up_to_60_deg_up_covered",
"60_deg_up_to_25_deg_up_covered",
"25_deg_up_to_flat_covered",
"25_deg_down_covered",
"60_deg_down_covered",
"flat_to_25_deg_down_covered",
"25_deg_down_to_60_deg_down_covered",
"60_deg_down_to_25_deg_down_covered",
"25_deg_down_to_flat_covered",
"left_quarter_turn_5_covered",
"right_quarter_turn_5_covered",
"s_bend_left_covered",
"s_bend_right_covered",
"left_quarter_turn_3_covered",
"right_quarter_turn_3_covered",
"left_half_banked_helix_up_small",
"right_half_banked_helix_up_small",
"left_half_banked_helix_down_small",
"right_half_banked_helix_down_small",
"left_half_banked_helix_up_large",
"right_half_banked_helix_up_large",
"left_half_banked_helix_down_large",
"right_half_banked_helix_down_large",
"left_quarter_turn_1_60_deg_up",
"right_quarter_turn_1_60_deg_up",
"left_quarter_turn_1_60_deg_down",
"right_quarter_turn_1_60_deg_down",
"brakes",
"rotation_control_toggle",
"inverted_90_deg_up_to_flat_quarter_loop_maze",
"left_quarter_banked_helix_large_up",
"right_quarter_banked_helix_large_up",
"left_quarter_banked_helix_large_down",
"right_quarter_banked_helix_large_down",
"left_quarter_helix_large_up",
"right_quarter_helix_large_up",
"left_quarter_helix_large_down",
"right_quarter_helix_large_down",
"25_deg_up_left_banked",
"25_deg_up_right_banked",
"waterfall",
"rapids",
"on_ride_photo",
"25_deg_down_left_banked",
"25_deg_down_right_banked",
"water_splash",
"flat_to_60_deg_up_long_base",
"60_deg_up_to_flat_long_base",
"whirlpool",
"flat_to_60_deg_down_long_base",
"60_deg_up_to_flat_long_base122",
"cable_lift_hill",
"reverse_whoa_belly_slope",
"reverse_whoa_belly_vertical",
"90_deg_up",
"90_deg_down",
"60_deg_up_to_90_deg_up",
"90_deg_down_to_60_deg_down",
"90_deg_up_to_60_deg_up",
"60_deg_down_to_90_deg_down",
"brake_for_drop",
"left_eighth_to_diag",
"right_eighth_to_diag",
"left_eighth_to_orthogonal",
"right_eighth_to_orthogonal",
"left_eighth_bank_to_diag",
"right_eighth_bank_to_diag",
"left_eighth_bank_to_orthogonal",
"right_eighth_bank_to_orthogonal",
"diag_flat",
"diag_25_deg_up",
"diag_60_deg_up",
"diag_flat_to_25_deg_up",
"diag_25_deg_up_to_60_deg_up",
"diag_60_deg_up_to_25_deg_up",
"diag_25_deg_up_to_flat",
"diag_25_deg_down",
"diag_60_deg_down",
"diag_flat_to_25_deg_down",
"diag_25_deg_down_to_60_deg_down",
"diag_60_deg_down_to_25_deg_down",
"diag_25_deg_down_to_flat",
"diag_flat_to_60_deg_up",
"diag_60_deg_up_to_flat",
"diag_flat_to_60_deg_down",
"diag_60_deg_down_to_flat",
"diag_flat_to_left_bank",
"diag_flat_to_right_bank",
"diag_left_bank_to_flat",
"diag_right_bank_to_flat",
"diag_left_bank_to_25_deg_up",
"diag_right_bank_to_25_deg_up",
"diag_25_deg_up_to_left_bank",
"diag_25_deg_up_to_right_bank",
"diag_left_bank_to_25_deg_down",
"diag_right_bank_to_25_deg_down",
"diag_25_deg_down_to_left_bank",
"diag_25_deg_down_to_right_bank",
"diag_left_bank",
"diag_right_bank",
"log_flume_reverser",
"spinning_tunnel",
"left_barrel_roll_up_to_down",
"right_barrel_roll_up_to_down",
"left_barrel_roll_down_to_up",
"right_barrel_roll_down_to_up",
"left_bank_to_left_quarter_turn_3_25_deg_up",
"right_bank_to_right_quarter_turn_3_25_deg_up",
"left_quarter_turn_3_25_deg_down_to_left_bank",
"right_quarter_turn_3_25_deg_down_to_right_bank",
"powered_lift",
"left_large_half_loop_up",
"right_large_half_loop_up",
"right_large_half_loop_down",
"left_large_half_loop_down",
"left_flyer_twist_up",
"right_flyer_twist_up",
"left_flyer_twist_down",
"right_flyer_twist_down",
"flyer_half_loop_up",
"flyer_half_loop_down",
"left_flyer_corkscrew_up",
"right_flyer_corkscrew_up",
"left_flyer_corkscrew_down",
"right_flyer_corkscrew_down",
"heartline_transfer_up",
"heartline_transfer_down",
"left_heartline_roll",
"right_heartline_roll",
"mini_golf_hole_a",
"mini_golf_hole_b",
"mini_golf_hole_c",
"mini_golf_hole_d",
"mini_golf_hole_e",
"multidim_inverted_flat_to_90_deg_quarter_loop_down",
"90_deg_to_inverted_flat_quarter_loop_up",
"inverted_flat_to_90_deg_quarter_loop_down",
"left_curved_lift_hill",
"right_curved_lift_hill",
"left_reverser",
"right_reverser",
"air_thrust_top_cap",
"air_thrust_vertical_down",
"air_thrust_vertical_down_to_level",
"block_brakes",
"left_banked_quarter_turn_3_25_deg_up",
"right_banked_quarter_turn_3_25_deg_up",
"left_banked_quarter_turn_3_25_deg_down",
"right_banked_quarter_turn_3_25_deg_down",
"left_banked_quarter_turn_5_25_deg_up",
"right_banked_quarter_turn_5_25_deg_up",
"left_banked_quarter_turn_5_25_deg_down",
"right_banked_quarter_turn_5_25_deg_down",
"25_deg_up_to_left_banked_25_deg_up",
"25_deg_up_to_right_banked_25_deg_up",
"left_banked_25_deg_up_to_25_deg_up",
"right_banked_25_deg_up_to_25_deg_up",
"25_deg_down_to_left_banked_25_deg_down",
"25_deg_down_to_right_banked_25_deg_down",
"left_banked_25_deg_down_to_25_deg_down",
"right_banked_25_deg_down_to_25_deg_down",
"left_banked_flat_to_left_banked_25_deg_up",
"right_banked_flat_to_right_banked_25_deg_up",
"left_banked_25_deg_up_to_left_banked_flat",
"right_banked_25_deg_up_to_right_banked_flat",
"left_banked_flat_to_left_banked_25_deg_down",
"right_banked_flat_to_right_banked_25_deg_down",
"left_banked_25_deg_down_to_left_banked_flat",
"right_banked_25_deg_down_to_right_banked_flat",
"flat_to_left_banked_25_deg_up",
"flat_to_right_banked_25_deg_up",
"left_banked_25_deg_up_to_flat",
"right_banked_25_deg_up_to_flat",
"flat_to_left_banked_25_deg_down",
"flat_to_right_banked_25_deg_down",
"left_banked_25_deg_down_to_flat",
"right_banked_25_deg_down_to_flat",
"left_quarter_turn_1_90_deg_up",
"right_quarter_turn_1_90_deg_up",
"left_quarter_turn_1_90_deg_down",
"right_quarter_turn_1_90_deg_down",
"multidim_90_deg_up_to_inverted_flat_quarter_loop",
"multidim_flat_to_90_deg_down_quarter_loop",
"elem_255"
};

View File

@ -22,5 +22,8 @@
extern const utf8string RideNames[91];
extern const utf8string TrackNames[256];
extern const utf8string FlatTrackNames[256];
extern const utf8string TrackElemNames[256];
extern const utf8string RideCodeNames[91];
extern const utf8string TrackCodeNames[256];
#endif // #endif _TEST_PAINT_DATA_H_

1048
test/testpaint/generate.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -31,45 +31,21 @@ extern const utf8string RideNames[91];
extern const utf8string TrackNames[256];
extern const utf8string FlatTrackNames[256];
enum
{
PAINT_98196C,
PAINT_98197C,
PAINT_98198C,
PAINT_98199C,
SUPPORTS_METAL_A,
SUPPORTS_METAL_B,
SUPPORTS_WOOD_A,
SUPPORTS_WOOD_B,
};
typedef struct
{
uint8 function;
struct paint
{
uint32 image_id;
rct_xy16 offset;
rct_xyz16 bound_box_length;
sint16 z_offset;
rct_xyz16 bound_box_offset;
uint32 rotation;
} paint;
struct supports
{
int type;
uint8 segment;
int special;
int height;
uint32 colour_flags;
} supports;
} function_call;
static uint8 callCount;
static bool assertFunctionCallEquals(function_call expected, function_call actual);
static function_call calls[256];
void intercept_clear_calls()
{
callCount = 0;
memset(calls, 0, sizeof(calls));
}
int intercept_get_calls(function_call * buffer)
{
memcpy(buffer, calls, 256);
return callCount;
}
bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y) {
return false;
}
@ -290,7 +266,7 @@ static void canonicalizeFunctionCall(function_call *call) {
call->function = PAINT_98196C;
}
static bool assertFunctionCallEquals(function_call expected, function_call actual) {
bool assertFunctionCallEquals(function_call expected, function_call actual) {
canonicalizeFunctionCall(&actual);
canonicalizeFunctionCall(&expected);
@ -454,7 +430,7 @@ static void printFunctionCall(utf8string *out, function_call call) {
static void printFunctionCallArray(utf8string *out, function_call calls[], uint8 count) {
for (int i = 0; i < count; i++) {
utf8string callOut = malloc(128);
utf8string callOut = malloc(1024);
printFunctionCall(&callOut, calls[i]);
sprintf(*out + strlen(*out), "%s\n", callOut);
}

View File

@ -19,17 +19,117 @@
#include "../../src/common.h"
#ifdef __cplusplus
extern "C"
{
#endif
#include "../../src/interface/colour.h"
#include "../../src/paint/paint.h"
#include "../../src/paint/map_element/map_element.h"
#ifdef __cplusplus
}
#endif
#define gRideEntries RCT2_ADDRESS(RCT2_ADDRESS_RIDE_ENTRIES, rct_ride_entry*)
#define gCurrentRotation RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8)
bool testRide(int rideType);
void initHooks();
int getTrackSequenceCount(uint8 rideType, uint8 trackType);
bool rideIsImplemented(int rideType);
bool rideSupportsTrackType(int rideType, int trackType);
bool testTrackPainting(int rideType, int trackType);
bool testSupportSegments(uint8 rideType, uint8 trackType);
bool testTunnels(uint8 rideType, uint8 trackType);
bool testVerticalTunnels(uint8 rideType, uint8 trackType);
enum
{
PAINT_98196C,
PAINT_98197C,
PAINT_98198C,
PAINT_98199C,
SUPPORTS_METAL_A,
SUPPORTS_METAL_B,
SUPPORTS_WOOD_A,
SUPPORTS_WOOD_B,
};
typedef struct
{
uint8 function;
struct paint
{
uint32 image_id;
rct_xy16 offset;
rct_xyz16 bound_box_length;
sint16 z_offset;
rct_xyz16 bound_box_offset;
uint32 rotation;
} paint;
struct supports
{
int type;
uint8 segment;
int special;
int height;
uint32 colour_flags;
} supports;
} function_call;
#ifdef __cplusplus
extern "C"
{
#endif
bool testRide(int rideType);
void initHooks();
int getTrackSequenceCount(uint8 rideType, uint8 trackType);
bool rideIsImplemented(int rideType);
bool rideSupportsTrackType(int rideType, int trackType);
bool testTrackPainting(int rideType, int trackType);
bool testSupportSegments(uint8 rideType, uint8 trackType);
bool testTunnels(uint8 rideType, uint8 trackType);
bool testVerticalTunnels(uint8 rideType, uint8 trackType);
void intercept_clear_calls();
int intercept_get_calls(function_call * buffer);
bool assertFunctionCallEquals(function_call expected, function_call actual);
int generatePaintCode(uint8 rideType);
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
#include <vector>
namespace Intercept2
{
static const uint32 DEFAULT_SCHEME_TRACK = COLOUR_GREY << 19 | COLOUR_WHITE << 24 | 0xA0000000;
static const uint32 DEFAULT_SCHEME_SUPPORTS = COLOUR_LIGHT_BLUE << 19 | COLOUR_ICY_BLUE << 24 | 0xA0000000;
static const uint32 DEFAULT_SCHEME_MISC = COLOUR_DARK_PURPLE << 19 | COLOUR_LIGHT_PURPLE << 24 | 0xA0000000;
static const uint32 DEFAULT_SCHEME_3 = COLOUR_BRIGHT_PURPLE << 19 | COLOUR_DARK_BLUE << 24 | 0xA0000000;
struct SegmentSupportCall
{
uint16 segments;
sint32 height;
sint16 slope;
};
struct SupportCall
{
sint32 height;
sint16 slope;
};
enum {
TUNNELCALL_SKIPPED,
TUNNELCALL_NONE,
TUNNELCALL_CALL,
};
struct TunnelCall {
uint8 call;
sint16 offset;
uint8 type;
};
sint16 getTunnelOffset(uint32 baseHeight, tunnel_entry calls[3]);
std::vector<SegmentSupportCall> getSegmentCalls(support_height supports[9], uint8 rotation);
}
#endif
#endif // #endif _TEST_PAINT_INTERCEPT_H_

View File

@ -17,8 +17,9 @@
#include <vector>
#include <algorithm>
#include "intercept.h"
extern "C" {
#include "intercept.h"
#include "../../src/paint/paint.h"
#include "../../src/paint/supports.h"
#include "../../src/ride/track_data.h"
@ -28,37 +29,6 @@ extern "C" {
namespace Intercept2
{
static const uint32 DEFAULT_SCHEME_TRACK = COLOUR_GREY << 19 | COLOUR_WHITE << 24 | 0xA0000000;
static const uint32 DEFAULT_SCHEME_SUPPORTS = COLOUR_LIGHT_BLUE << 19 | COLOUR_ICY_BLUE << 24 | 0xA0000000;
static const uint32 DEFAULT_SCHEME_MISC = COLOUR_DARK_PURPLE << 19 | COLOUR_LIGHT_PURPLE << 24 | 0xA0000000;
static const uint32 DEFAULT_SCHEME_3 = COLOUR_BRIGHT_PURPLE << 19 | COLOUR_DARK_BLUE << 24 | 0xA0000000;
struct SegmentSupportCall
{
uint16 segments;
sint32 height;
sint16 slope;
};
struct SupportCall
{
sint32 height;
sint16 slope;
};
enum {
TUNNELCALL_SKIPPED,
TUNNELCALL_NONE,
TUNNELCALL_CALL,
};
struct TunnelCall {
uint8 call;
sint16 offset;
uint8 type;
};
static bool SortSegmentSupportCalls(SegmentSupportCall lhs, SegmentSupportCall rhs)
{
if (lhs.height != rhs.height) {
@ -72,7 +42,7 @@ namespace Intercept2
return lhs.segments < rhs.segments;
}
static std::vector<SegmentSupportCall> getSegmentCalls(support_height supports[9], uint8 rotation)
std::vector<SegmentSupportCall> getSegmentCalls(support_height supports[9], uint8 rotation)
{
uint16 positionsRemaining = SEGMENTS_ALL;
@ -487,7 +457,7 @@ namespace Intercept2
return true;
}
static sint16 getTunnelOffset(uint32 baseHeight, tunnel_entry calls[3])
sint16 getTunnelOffset(uint32 baseHeight, tunnel_entry calls[3])
{
for (sint16 offset = -56; offset <= 56; offset += 8) {
if (calls[0].height != (baseHeight - 8 + offset) / 16) continue;
@ -511,10 +481,6 @@ namespace Intercept2
g_currently_drawn_item = &mapElement;
rct_map_element surfaceElement = {0};
surfaceElement.type = MAP_ELEMENT_TYPE_SURFACE;
surfaceElement.base_height = 2;
gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE;
gTrackColours[SCHEME_TRACK] = DEFAULT_SCHEME_TRACK;
gTrackColours[SCHEME_SUPPORTS] = DEFAULT_SCHEME_SUPPORTS;
@ -707,10 +673,6 @@ namespace Intercept2
g_currently_drawn_item = &mapElement;
rct_map_element surfaceElement = {0};
surfaceElement.type = MAP_ELEMENT_TYPE_SURFACE;
surfaceElement.base_height = 2;
gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE;
gTrackColours[SCHEME_TRACK] = DEFAULT_SCHEME_TRACK;
gTrackColours[SCHEME_SUPPORTS] = DEFAULT_SCHEME_SUPPORTS;

View File

@ -23,9 +23,10 @@
#include <sys/mman.h>
#endif // defined(__unix__)
#include "intercept.h"
extern "C" {
#include "data.h"
#include "intercept.h"
#include "../../src/rct2.h"
#include "../../src/ride/ride.h"
#include "../../src/ride/ride_data.h"
@ -352,6 +353,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 +369,21 @@ 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;
}
openrct2_setup_rct2_segment();
initHooks();
return generatePaintCode(specificRideType);
}
for (uint8 rideType = 0; rideType < 91; rideType++) {

View File

@ -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" />

View File

@ -4,8 +4,9 @@
<LocalDebuggerCommand>$(TargetDir)\openrct2.exe</LocalDebuggerCommand>
<LocalDebuggerWorkingDirectory>$(TargetDir)</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerCommandArguments>--ride-type 68 --generate</LocalDebuggerCommandArguments>
</PropertyGroup>
<PropertyGroup>
<ShowAllFiles>true</ShowAllFiles>
<ShowAllFiles>false</ShowAllFiles>
</PropertyGroup>
</Project>