From 313f766faded5001b336d637edef8251173edffe Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 8 Oct 2016 16:33:17 +0100 Subject: [PATCH] Support mirror calls for turn eighth --- src/ride/track_paint.c | 2 ++ src/ride/track_paint.h | 2 ++ test/testpaint/generate.cpp | 13 +++++++++++++ 3 files changed, 17 insertions(+) diff --git a/src/ride/track_paint.c b/src/ride/track_paint.c index 2e4bef1efb..423b5d756e 100644 --- a/src/ride/track_paint.c +++ b/src/ride/track_paint.c @@ -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) { diff --git a/src/ride/track_paint.h b/src/ride/track_paint.h index b1b7d560a1..c28ea17046 100644 --- a/src/ride/track_paint.h +++ b/src/ride/track_paint.h @@ -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); diff --git a/test/testpaint/generate.cpp b/test/testpaint/generate.cpp index e6da523588..6b3006a087 100644 --- a/test/testpaint/generate.cpp +++ b/test/testpaint/generate.cpp @@ -175,6 +175,11 @@ private: { 5, TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN, TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP }, { 6, TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN, TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP }, { 6, TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN, TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP }, + + { 7, TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL, TRACK_ELEM_LEFT_EIGHTH_TO_DIAG }, + { 7, TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL, TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG }, + { 8, TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL, TRACK_ELEM_RIGHT_EIGHTH_TO_DIAG }, + { 8, TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL, TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG }, }; for (int i = 0; i < (sizeof(mirrorTable) / sizeof(mirrorTable[0])); i++) @@ -208,6 +213,14 @@ private: case 6: WriteLine(tabs, "%s(rideIndex, trackSequence, (direction + 1) & 3, height, mapElement);", destFuncName.c_str()); break; + case 7: + WriteLine(tabs, "trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];"); + WriteLine(tabs, "%s(rideIndex, trackSequence, (direction + 3) & 3, height, mapElement);", destFuncName.c_str()); + break; + case 8: + WriteLine(tabs, "trackSequence = mapLeftEighthTurnToOrthogonal[trackSequence];"); + WriteLine(tabs, "%s(rideIndex, trackSequence, (direction + 2) & 3, height, mapElement);", destFuncName.c_str()); + break; } return true; }