From 424bb406c320ac5c346e6da2d1168729deceef09 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Fri, 13 Jan 2017 22:17:45 +0000 Subject: [PATCH 01/35] Add support for x/y offsets to append command --- src/openrct2/cmdline_sprite.c | 38 ++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 4e3357af12..43340fceb1 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -289,7 +289,8 @@ static sint32 get_palette_index(sint16 *colour) return -1; } -static bool sprite_file_import(const char *path, rct_g1_element *outElement, uint8 **outBuffer, sint32 *outBufferLength, sint32 mode) + +static bool sprite_file_import(const char *path, int x_offset, int y_offset, rct_g1_element *outElement, uint8 **outBuffer, int *outBufferLength, sint32 mode) { uint8 *pixels; uint32 width, height; @@ -433,8 +434,8 @@ static bool sprite_file_import(const char *path, rct_g1_element *outElement, uin outElement->width = width; outElement->height = height; outElement->flags = G1_FLAG_RLE_COMPRESSION; - outElement->x_offset = 0; - outElement->y_offset = 0; + outElement->x_offset = x_offset; + outElement->y_offset = y_offset; outElement->zoomed_offset = 0; *outBuffer = buffer; @@ -595,18 +596,40 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) sprite_file_close(); return 1; } else if (_strcmpi(argv[0], "append") == 0) { - if (argc < 3) { - fprintf(stderr, "usage: sprite append \n"); + if (argc != 3 && argc != 5) { + fprintf(stderr, "usage: sprite append [x_offset y_offset]\n"); return -1; } + const char *spriteFilePath = argv[1]; const char *imagePath = argv[2]; + int x_offset=0; + int y_offset=0; + + if(argc == 5) { + char* endptr; + x_offset=strtol(argv[3],&endptr,0); + if(*endptr!=0) { + fprintf(stderr, "X offset must be an integer\n"); + return -1; + } + y_offset=strtol(argv[4],&endptr,0); + if(*endptr!=0) { + fprintf(stderr, "Y offset must be an integer\n"); + return -1; + } + } rct_g1_element spriteElement; uint8 *buffer; +<<<<<<< HEAD sint32 bufferLength; if (!sprite_file_import(imagePath, &spriteElement, &buffer, &bufferLength, gSpriteMode)) +======= + int bufferLength; + if (!sprite_file_import(imagePath, x_offset, y_offset, &spriteElement, &buffer, &bufferLength, gSpriteMode)) +>>>>>>> Add support for x/y offsets to append command return -1; if (!sprite_file_open(spriteFilePath)) { @@ -665,8 +688,13 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) SDL_RWclose(file); rct_g1_element spriteElement; uint8 *buffer; +<<<<<<< HEAD sint32 bufferLength; if (!sprite_file_import(imagePath, &spriteElement, &buffer, &bufferLength, gSpriteMode)) { +======= + int bufferLength; + if (!sprite_file_import(imagePath, 0, 0, &spriteElement, &buffer, &bufferLength, gSpriteMode)) { +>>>>>>> Add support for x/y offsets to append command fprintf(stderr, "Could not import image file: %s\nCanceling\n", imagePath); return -1; } From 942ea5be4b15c9ed8e2cd37c5ea4cf5857b1a06a Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Fri, 13 Jan 2017 23:05:43 +0000 Subject: [PATCH 02/35] Fix segfault when entered command doesn't exist --- src/openrct2/cmdline/CommandLine.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/openrct2/cmdline/CommandLine.cpp b/src/openrct2/cmdline/CommandLine.cpp index 2337744927..2f613905e7 100644 --- a/src/openrct2/cmdline/CommandLine.cpp +++ b/src/openrct2/cmdline/CommandLine.cpp @@ -568,6 +568,12 @@ extern "C" argEnumerator.TryPop(); const CommandLineCommand * command = CommandLine::FindCommandFor(CommandLine::RootCommands, &argEnumerator); + + if (command == nullptr) + { + return EXITCODE_FAIL; + } + if (command->Options != nullptr) { auto argEnumeratorForOptions = CommandLineArgEnumerator(argEnumerator); @@ -576,6 +582,7 @@ extern "C" return EXITCODE_FAIL; } } + if (command == CommandLine::RootCommands && command->Func == nullptr) { return CommandLine::HandleCommandDefault(); From e496271859e6ca1deadb8aed279c6b5e907f4cc9 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Fri, 13 Jan 2017 23:06:12 +0000 Subject: [PATCH 03/35] Add apparently missing commands to this list --- src/openrct2/cmdline/SpriteCommands.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/openrct2/cmdline/SpriteCommands.cpp b/src/openrct2/cmdline/SpriteCommands.cpp index 241e53438d..1ac6c2050c 100644 --- a/src/openrct2/cmdline/SpriteCommands.cpp +++ b/src/openrct2/cmdline/SpriteCommands.cpp @@ -40,12 +40,12 @@ static exitcode_t HandleSprite(CommandLineArgEnumerator *argEnumerator); const CommandLineCommand CommandLine::SpriteCommands[] { // Main commands - DefineCommand("append", " ", SpriteOptions, HandleSprite), - DefineCommand("build", " [silent]", SpriteOptions, HandleSprite), - DefineCommand("create", "", SpriteOptions, HandleSprite), - DefineCommand("details", " [idx]", SpriteOptions, HandleSprite), - DefineCommand("export", " ", SpriteOptions, HandleSprite), - DefineCommand("exportall", " ", SpriteOptions, HandleSprite), + DefineCommand("append", " [x_offset y_offset]", SpriteOptions, HandleSprite), + DefineCommand("build", " [silent]", SpriteOptions, HandleSprite), + DefineCommand("create", "", SpriteOptions, HandleSprite), + DefineCommand("details", " [idx]", SpriteOptions, HandleSprite), + DefineCommand("export", " ", SpriteOptions, HandleSprite), + DefineCommand("exportall", " ", SpriteOptions, HandleSprite), CommandTableEnd }; From 3b12e4cc66427df505939702b9213b1095d2d399 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 12:39:38 +0000 Subject: [PATCH 04/35] Add function to get an absolute path from a relative one --- src/openrct2/platform/platform.h | 1 + src/openrct2/platform/posix.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/openrct2/platform/platform.h b/src/openrct2/platform/platform.h index ac93a317c5..62f076a89b 100644 --- a/src/openrct2/platform/platform.h +++ b/src/openrct2/platform/platform.h @@ -167,6 +167,7 @@ bool platform_original_game_data_exists(const utf8 *path); time_t platform_file_get_modified_time(const utf8* path); bool platform_ensure_directory_exists(const utf8 *path); bool platform_directory_delete(const utf8 *path); +char* platform_get_absolute_path(const char* relative_path,const char* base_path); bool platform_lock_single_instance(); sint32 platform_enumerate_files_begin(const utf8 *pattern); bool platform_enumerate_files_next(sint32 handle, file_info *outFileInfo); diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index 3891930217..c39d32ae0b 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -262,6 +262,19 @@ bool platform_directory_delete(const utf8 *path) return true; } +char* platform_get_absolute_path(const char* relative_path,const char* base_path) +{ +char path[MAX_PATH]; + +//This is to get around the fact that dirname() doesn't take a const char* +char base_path_copy[MAX_PATH]; +safe_strcpy(base_path_copy,base_path,MAX_PATH); + +snprintf(path,MAX_PATH,"%s/%s",dirname(base_path_copy),relative_path); +return realpath(path,NULL); +} + + bool platform_lock_single_instance() { char pidFilePath[MAX_PATH]; From 4d46a255e0fd7c77c758203bd0efa6d58aa40cf8 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 12:52:09 +0000 Subject: [PATCH 05/35] Load sprite information from JSON file --- src/openrct2/cmdline_sprite.c | 71 ++++++++++++++++++++++++++++------- 1 file changed, 58 insertions(+), 13 deletions(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 43340fceb1..c3cc4cbf63 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -14,6 +14,7 @@ *****************************************************************************/ #pragma endregion +#include #include "cmdline_sprite.h" #include "drawing/drawing.h" #include "Imaging.h" @@ -623,13 +624,10 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) rct_g1_element spriteElement; uint8 *buffer; -<<<<<<< HEAD + sint32 bufferLength; - if (!sprite_file_import(imagePath, &spriteElement, &buffer, &bufferLength, gSpriteMode)) -======= - int bufferLength; if (!sprite_file_import(imagePath, x_offset, y_offset, &spriteElement, &buffer, &bufferLength, gSpriteMode)) ->>>>>>> Add support for x/y offsets to append command + return -1; if (!sprite_file_open(spriteFilePath)) { @@ -656,23 +654,35 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) return 1; } else if (_strcmpi(argv[0], "build") == 0) { if (argc < 3) { - fprintf(stdout, "usage: sprite build [silent]\n"); + fprintf(stdout, "usage: sprite build [silent]\n"); return -1; } const char *spriteFilePath = argv[1]; - const char *resourcePath = argv[2]; - char imagePath[MAX_PATH]; - size_t resourceLength = strlen(resourcePath); + const char *spriteDescriptionPath = argv[2]; + + json_error_t error; + json_t* sprite_list=json_load_file(spriteDescriptionPath, JSON_REJECT_DUPLICATES, &error); + + if(sprite_list == NULL) { + fprintf(stderr,"Error parsing sprite description file: %s at line %d column %d\n",error.text,error.line,error.column); + return -1; + } + + if(!json_is_array(sprite_list)) { + fprintf(stderr,"Error: expected array\n"); + json_decref(sprite_list); + return -1; + } bool silent = (argc >= 4 && strcmp(argv[3], "silent") == 0); - SDL_RWops *file; spriteFileHeader.num_entries = 0; spriteFileHeader.total_size = 0; sprite_file_save(spriteFilePath); fprintf(stdout, "Building: %s\n", spriteFilePath); +<<<<<<< HEAD sint32 i = 0; do { // Create image path @@ -695,12 +705,46 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) int bufferLength; if (!sprite_file_import(imagePath, 0, 0, &spriteElement, &buffer, &bufferLength, gSpriteMode)) { >>>>>>> Add support for x/y offsets to append command +======= + + size_t i; + json_t* sprite_description; + + json_array_foreach(sprite_list,i,sprite_description) { + if(!json_is_object(sprite_description)) { + fprintf(stderr,"Error: expected object for sprite %lu\n",(unsigned long)i); + json_decref(sprite_list); + return -1; + } + + json_t* path=json_object_get(sprite_description,"path"); + if(!path || !json_is_string(path)) { + fprintf(stderr,"Error: no path provided for sprite %lu\n",(unsigned long)i); + json_decref(sprite_list); + return -1; + } + //Get x and y offsets, if present + json_t* x_offset=json_object_get(sprite_description,"x_offset"); + json_t* y_offset=json_object_get(sprite_description,"y_offset"); + + + //Resolve absolute sprite path + char* imagePath=platform_get_absolute_path(json_string_value(path),spriteDescriptionPath); + + rct_g1_element spriteElement; + uint8 *buffer; + int bufferLength; + if (!sprite_file_import(imagePath, x_offset==NULL ? 0 : json_integer_value(x_offset), y_offset==NULL ? 0 : json_integer_value(y_offset), &spriteElement, &buffer, &bufferLength, gSpriteMode)) { +>>>>>>> Load sprite information from JSON file fprintf(stderr, "Could not import image file: %s\nCanceling\n", imagePath); + json_decref(sprite_list); return -1; } + if (!sprite_file_open(spriteFilePath)) { fprintf(stderr, "Unable to open sprite file: %s\nCanceling\n", spriteFilePath); +./ json_decref(sprite_list); return -1; } @@ -720,16 +764,17 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) if (!sprite_file_save(spriteFilePath)) { fprintf(stderr, "Could not save sprite file: %s\nCanceling\n", imagePath); + json_decref(sprite_list); return -1; } if (!silent) fprintf(stdout, "Added: %s\n", imagePath); sprite_file_close(); - } - i++; - } while (file != NULL); + } + json_decref(sprite_list); + fprintf(stdout, "Finished\n"); return 1; } else { From f12889c625fba0fc3549511b74a49f2dd4536cf2 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 12:53:40 +0000 Subject: [PATCH 06/35] Add JSON file to resources/g2 --- resources/g2/sprites.json | 482 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 482 insertions(+) create mode 100644 resources/g2/sprites.json diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json new file mode 100644 index 0000000000..cf8fbf047b --- /dev/null +++ b/resources/g2/sprites.json @@ -0,0 +1,482 @@ +[ + { + "id":0, + "path":"0.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":1, + "path":"1.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":2, + "path":"2.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":3, + "path":"3.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":4, + "path":"4.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":5, + "path":"5.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":6, + "path":"6.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":7, + "path":"7.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":8, + "path":"8.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":9, + "path":"9.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":10, + "path":"10.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":11, + "path":"11.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":12, + "path":"12.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":13, + "path":"13.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":14, + "path":"14.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":15, + "path":"15.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":16, + "path":"16.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":17, + "path":"17.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":18, + "path":"18.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":19, + "path":"19.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":20, + "path":"20.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":21, + "path":"21.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":22, + "path":"22.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":23, + "path":"23.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":24, + "path":"24.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":25, + "path":"25.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":26, + "path":"26.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":27, + "path":"27.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":28, + "path":"28.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":29, + "path":"29.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":30, + "path":"30.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":31, + "path":"31.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":32, + "path":"32.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":33, + "path":"33.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":34, + "path":"34.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":35, + "path":"35.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":36, + "path":"36.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":37, + "path":"37.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":38, + "path":"38.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":39, + "path":"39.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":40, + "path":"40.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":41, + "path":"41.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":42, + "path":"42.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":43, + "path":"43.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":44, + "path":"44.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":45, + "path":"45.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":46, + "path":"46.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":47, + "path":"47.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":48, + "path":"48.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":49, + "path":"49.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":50, + "path":"50.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":51, + "path":"51.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":52, + "path":"52.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":53, + "path":"53.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":54, + "path":"54.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":55, + "path":"55.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":56, + "path":"56.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":57, + "path":"57.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":58, + "path":"58.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":59, + "path":"59.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":60, + "path":"60.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":61, + "path":"61.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":62, + "path":"62.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":63, + "path":"63.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":64, + "path":"64.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":65, + "path":"65.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":66, + "path":"66.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":67, + "path":"67.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":68, + "path":"68.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":69, + "path":"69.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":70, + "path":"70.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":71, + "path":"71.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":72, + "path":"72.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":73, + "path":"73.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":74, + "path":"74.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":75, + "path":"75.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":76, + "path":"76.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":77, + "path":"77.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":78, + "path":"78.png", + "x_offset":0, + "y_offset":0 + }, + { + "id":79, + "path":"79.png", + "x_offset":0, + "y_offset":0 + } +] From 96856028bb90ce90f0ecd679f2cae43cdf44cca5 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 13:03:05 +0000 Subject: [PATCH 07/35] Fix misplaced characters --- src/openrct2/cmdline_sprite.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index c3cc4cbf63..67502a6357 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -744,7 +744,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) if (!sprite_file_open(spriteFilePath)) { fprintf(stderr, "Unable to open sprite file: %s\nCanceling\n", spriteFilePath); -./ json_decref(sprite_list); + json_decref(sprite_list); return -1; } From 7a04cf05f716401e7ca6bb1c3fa3dbc1e3095187 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 14:15:00 +0000 Subject: [PATCH 08/35] Remove redundant paths --- resources/g2/sprites.json | 322 ++++++++++---------------------------- 1 file changed, 81 insertions(+), 241 deletions(-) diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index cf8fbf047b..f763505dde 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -1,482 +1,322 @@ [ { "id":0, - "path":"0.png", - "x_offset":0, - "y_offset":0 + "path":"0.png" }, { "id":1, - "path":"1.png", - "x_offset":0, - "y_offset":0 + "path":"1.png" }, { "id":2, - "path":"2.png", - "x_offset":0, - "y_offset":0 + "path":"2.png" }, { "id":3, - "path":"3.png", - "x_offset":0, - "y_offset":0 + "path":"3.png" }, { "id":4, - "path":"4.png", - "x_offset":0, - "y_offset":0 + "path":"4.png" }, { "id":5, - "path":"5.png", - "x_offset":0, - "y_offset":0 + "path":"5.png" }, { "id":6, - "path":"6.png", - "x_offset":0, - "y_offset":0 + "path":"6.png" }, { "id":7, - "path":"7.png", - "x_offset":0, - "y_offset":0 + "path":"7.png" }, { "id":8, - "path":"8.png", - "x_offset":0, - "y_offset":0 + "path":"8.png" }, { "id":9, - "path":"9.png", - "x_offset":0, - "y_offset":0 + "path":"9.png" }, { "id":10, - "path":"10.png", - "x_offset":0, - "y_offset":0 + "path":"10.png" }, { "id":11, - "path":"11.png", - "x_offset":0, - "y_offset":0 + "path":"11.png" }, { "id":12, - "path":"12.png", - "x_offset":0, - "y_offset":0 + "path":"12.png" }, { "id":13, - "path":"13.png", - "x_offset":0, - "y_offset":0 + "path":"13.png" }, { "id":14, - "path":"14.png", - "x_offset":0, - "y_offset":0 + "path":"14.png" }, { "id":15, - "path":"15.png", - "x_offset":0, - "y_offset":0 + "path":"15.png" }, { "id":16, - "path":"16.png", - "x_offset":0, - "y_offset":0 + "path":"16.png" }, { "id":17, - "path":"17.png", - "x_offset":0, - "y_offset":0 + "path":"17.png" }, { "id":18, - "path":"18.png", - "x_offset":0, - "y_offset":0 + "path":"18.png" }, { "id":19, - "path":"19.png", - "x_offset":0, - "y_offset":0 + "path":"19.png" }, { "id":20, - "path":"20.png", - "x_offset":0, - "y_offset":0 + "path":"20.png" }, { "id":21, - "path":"21.png", - "x_offset":0, - "y_offset":0 + "path":"21.png" }, { "id":22, - "path":"22.png", - "x_offset":0, - "y_offset":0 + "path":"22.png" }, { "id":23, - "path":"23.png", - "x_offset":0, - "y_offset":0 + "path":"23.png" }, { "id":24, - "path":"24.png", - "x_offset":0, - "y_offset":0 + "path":"24.png" }, { "id":25, - "path":"25.png", - "x_offset":0, - "y_offset":0 + "path":"25.png" }, { "id":26, - "path":"26.png", - "x_offset":0, - "y_offset":0 + "path":"26.png" }, { "id":27, - "path":"27.png", - "x_offset":0, - "y_offset":0 + "path":"27.png" }, { "id":28, - "path":"28.png", - "x_offset":0, - "y_offset":0 + "path":"28.png" }, { "id":29, - "path":"29.png", - "x_offset":0, - "y_offset":0 + "path":"29.png" }, { "id":30, - "path":"30.png", - "x_offset":0, - "y_offset":0 + "path":"30.png" }, { "id":31, - "path":"31.png", - "x_offset":0, - "y_offset":0 + "path":"31.png" }, { "id":32, - "path":"32.png", - "x_offset":0, - "y_offset":0 + "path":"32.png" }, { "id":33, - "path":"33.png", - "x_offset":0, - "y_offset":0 + "path":"33.png" }, { "id":34, - "path":"34.png", - "x_offset":0, - "y_offset":0 + "path":"34.png" }, { "id":35, - "path":"35.png", - "x_offset":0, - "y_offset":0 + "path":"35.png" }, { "id":36, - "path":"36.png", - "x_offset":0, - "y_offset":0 + "path":"36.png" }, { "id":37, - "path":"37.png", - "x_offset":0, - "y_offset":0 + "path":"37.png" }, { "id":38, - "path":"38.png", - "x_offset":0, - "y_offset":0 + "path":"38.png" }, { "id":39, - "path":"39.png", - "x_offset":0, - "y_offset":0 + "path":"39.png" }, { "id":40, - "path":"40.png", - "x_offset":0, - "y_offset":0 + "path":"40.png" }, { "id":41, - "path":"41.png", - "x_offset":0, - "y_offset":0 + "path":"41.png" }, { "id":42, - "path":"42.png", - "x_offset":0, - "y_offset":0 + "path":"42.png" }, { "id":43, - "path":"43.png", - "x_offset":0, - "y_offset":0 + "path":"43.png" }, { "id":44, - "path":"44.png", - "x_offset":0, - "y_offset":0 + "path":"44.png" }, { "id":45, - "path":"45.png", - "x_offset":0, - "y_offset":0 + "path":"45.png" }, { "id":46, - "path":"46.png", - "x_offset":0, - "y_offset":0 + "path":"46.png" }, { "id":47, - "path":"47.png", - "x_offset":0, - "y_offset":0 + "path":"47.png" }, { "id":48, - "path":"48.png", - "x_offset":0, - "y_offset":0 + "path":"48.png" }, { "id":49, - "path":"49.png", - "x_offset":0, - "y_offset":0 + "path":"49.png" }, { "id":50, - "path":"50.png", - "x_offset":0, - "y_offset":0 + "path":"50.png" }, { "id":51, - "path":"51.png", - "x_offset":0, - "y_offset":0 + "path":"51.png" }, { "id":52, - "path":"52.png", - "x_offset":0, - "y_offset":0 + "path":"52.png" }, { "id":53, - "path":"53.png", - "x_offset":0, - "y_offset":0 + "path":"53.png" }, { "id":54, - "path":"54.png", - "x_offset":0, - "y_offset":0 + "path":"54.png" }, { "id":55, - "path":"55.png", - "x_offset":0, - "y_offset":0 + "path":"55.png" }, { "id":56, - "path":"56.png", - "x_offset":0, - "y_offset":0 + "path":"56.png" }, { "id":57, - "path":"57.png", - "x_offset":0, - "y_offset":0 + "path":"57.png" }, { "id":58, - "path":"58.png", - "x_offset":0, - "y_offset":0 + "path":"58.png" }, { "id":59, - "path":"59.png", - "x_offset":0, - "y_offset":0 + "path":"59.png" }, { "id":60, - "path":"60.png", - "x_offset":0, - "y_offset":0 + "path":"60.png" }, { "id":61, - "path":"61.png", - "x_offset":0, - "y_offset":0 + "path":"61.png" }, { "id":62, - "path":"62.png", - "x_offset":0, - "y_offset":0 + "path":"62.png" }, { "id":63, - "path":"63.png", - "x_offset":0, - "y_offset":0 + "path":"63.png" }, { "id":64, - "path":"64.png", - "x_offset":0, - "y_offset":0 + "path":"64.png" }, { "id":65, - "path":"65.png", - "x_offset":0, - "y_offset":0 + "path":"65.png" }, { "id":66, - "path":"66.png", - "x_offset":0, - "y_offset":0 + "path":"66.png" }, { "id":67, - "path":"67.png", - "x_offset":0, - "y_offset":0 + "path":"67.png" }, { "id":68, - "path":"68.png", - "x_offset":0, - "y_offset":0 + "path":"68.png" }, { "id":69, - "path":"69.png", - "x_offset":0, - "y_offset":0 + "path":"69.png" }, { "id":70, - "path":"70.png", - "x_offset":0, - "y_offset":0 + "path":"70.png" }, { "id":71, - "path":"71.png", - "x_offset":0, - "y_offset":0 + "path":"71.png" }, { "id":72, - "path":"72.png", - "x_offset":0, - "y_offset":0 + "path":"72.png" }, { "id":73, - "path":"73.png", - "x_offset":0, - "y_offset":0 + "path":"73.png" }, { "id":74, - "path":"74.png", - "x_offset":0, - "y_offset":0 + "path":"74.png" }, { "id":75, - "path":"75.png", - "x_offset":0, - "y_offset":0 + "path":"75.png" }, { "id":76, - "path":"76.png", - "x_offset":0, - "y_offset":0 + "path":"76.png" }, { "id":77, - "path":"77.png", - "x_offset":0, - "y_offset":0 + "path":"77.png" }, { "id":78, - "path":"78.png", - "x_offset":0, - "y_offset":0 + "path":"78.png" }, { "id":79, - "path":"79.png", - "x_offset":0, - "y_offset":0 - } + "path":"79.png" + } ] From 92c8da4091912b87e607a12a91ed80a706334342 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 14:54:19 +0000 Subject: [PATCH 09/35] Use 16 bit integers for offsets --- src/openrct2/cmdline_sprite.c | 33 ++++----------------------------- 1 file changed, 4 insertions(+), 29 deletions(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 67502a6357..0484ec057b 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -291,7 +291,7 @@ static sint32 get_palette_index(sint16 *colour) } -static bool sprite_file_import(const char *path, int x_offset, int y_offset, rct_g1_element *outElement, uint8 **outBuffer, int *outBufferLength, sint32 mode) +static bool sprite_file_import(const char *path, sint16 x_offset, sint16 y_offset, rct_g1_element *outElement, uint8 **outBuffer, int *outBufferLength, sint32 mode) { uint8 *pixels; uint32 width, height; @@ -605,8 +605,8 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) const char *spriteFilePath = argv[1]; const char *imagePath = argv[2]; - int x_offset=0; - int y_offset=0; + sint16 x_offset=0; + sint16 y_offset=0; if(argc == 5) { char* endptr; @@ -682,30 +682,6 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) sprite_file_save(spriteFilePath); fprintf(stdout, "Building: %s\n", spriteFilePath); -<<<<<<< HEAD - sint32 i = 0; - do { - // Create image path - safe_strcpy(imagePath, resourcePath, MAX_PATH); - if (resourcePath[resourceLength - 1] == '/' || resourcePath[resourceLength - 1] == '\\') - imagePath[resourceLength - 1] = 0; - char filename[16]; - snprintf(filename, 16, "%d.png", i); - safe_strcat_path(imagePath, filename, MAX_PATH); - - file = SDL_RWFromFile(imagePath, "r"); - if (file != NULL) { - SDL_RWclose(file); - rct_g1_element spriteElement; - uint8 *buffer; -<<<<<<< HEAD - sint32 bufferLength; - if (!sprite_file_import(imagePath, &spriteElement, &buffer, &bufferLength, gSpriteMode)) { -======= - int bufferLength; - if (!sprite_file_import(imagePath, 0, 0, &spriteElement, &buffer, &bufferLength, gSpriteMode)) { ->>>>>>> Add support for x/y offsets to append command -======= size_t i; json_t* sprite_description; @@ -735,7 +711,6 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) uint8 *buffer; int bufferLength; if (!sprite_file_import(imagePath, x_offset==NULL ? 0 : json_integer_value(x_offset), y_offset==NULL ? 0 : json_integer_value(y_offset), &spriteElement, &buffer, &bufferLength, gSpriteMode)) { ->>>>>>> Load sprite information from JSON file fprintf(stderr, "Could not import image file: %s\nCanceling\n", imagePath); json_decref(sprite_list); return -1; @@ -772,7 +747,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) sprite_file_close(); - } + } json_decref(sprite_list); fprintf(stdout, "Finished\n"); From aaf16a7ec5ee57622d65cc9b17c80e2647c40128 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 14:55:11 +0000 Subject: [PATCH 10/35] Amend usage message --- src/openrct2/cmdline_sprite.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 0484ec057b..b65c69c84e 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -598,7 +598,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) return 1; } else if (_strcmpi(argv[0], "append") == 0) { if (argc != 3 && argc != 5) { - fprintf(stderr, "usage: sprite append [x_offset y_offset]\n"); + fprintf(stderr, "usage: sprite append [ ]\n"); return -1; } From 5e7ca2207ea23c1daf270187056fb68eeeb06a31 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 14:57:44 +0000 Subject: [PATCH 11/35] Fix indentation --- src/openrct2/cmdline/CommandLine.cpp | 8 ++++---- src/openrct2/platform/posix.c | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/openrct2/cmdline/CommandLine.cpp b/src/openrct2/cmdline/CommandLine.cpp index 2f613905e7..47fa2c8d54 100644 --- a/src/openrct2/cmdline/CommandLine.cpp +++ b/src/openrct2/cmdline/CommandLine.cpp @@ -569,10 +569,10 @@ extern "C" const CommandLineCommand * command = CommandLine::FindCommandFor(CommandLine::RootCommands, &argEnumerator); - if (command == nullptr) - { - return EXITCODE_FAIL; - } + if (command == nullptr) + { + return EXITCODE_FAIL; + } if (command->Options != nullptr) { diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index c39d32ae0b..775cb6925d 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -264,14 +264,14 @@ bool platform_directory_delete(const utf8 *path) char* platform_get_absolute_path(const char* relative_path,const char* base_path) { -char path[MAX_PATH]; + char path[MAX_PATH]; -//This is to get around the fact that dirname() doesn't take a const char* -char base_path_copy[MAX_PATH]; -safe_strcpy(base_path_copy,base_path,MAX_PATH); + //This is to get around the fact that dirname() doesn't take a const char* + char base_path_copy[MAX_PATH]; + safe_strcpy(base_path_copy,base_path,MAX_PATH); -snprintf(path,MAX_PATH,"%s/%s",dirname(base_path_copy),relative_path); -return realpath(path,NULL); + snprintf(path,MAX_PATH,"%s/%s",dirname(base_path_copy),relative_path); + return realpath(path,NULL); } From 1a32c73681ba52c432d6316608bf823a71c97ebd Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 15:00:53 +0000 Subject: [PATCH 12/35] Format JSON file --- resources/g2/sprites.json | 640 +++++++++++++++++++------------------- 1 file changed, 320 insertions(+), 320 deletions(-) diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index f763505dde..74811ec933 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -1,322 +1,322 @@ [ - { - "id":0, - "path":"0.png" - }, - { - "id":1, - "path":"1.png" - }, - { - "id":2, - "path":"2.png" - }, - { - "id":3, - "path":"3.png" - }, - { - "id":4, - "path":"4.png" - }, - { - "id":5, - "path":"5.png" - }, - { - "id":6, - "path":"6.png" - }, - { - "id":7, - "path":"7.png" - }, - { - "id":8, - "path":"8.png" - }, - { - "id":9, - "path":"9.png" - }, - { - "id":10, - "path":"10.png" - }, - { - "id":11, - "path":"11.png" - }, - { - "id":12, - "path":"12.png" - }, - { - "id":13, - "path":"13.png" - }, - { - "id":14, - "path":"14.png" - }, - { - "id":15, - "path":"15.png" - }, - { - "id":16, - "path":"16.png" - }, - { - "id":17, - "path":"17.png" - }, - { - "id":18, - "path":"18.png" - }, - { - "id":19, - "path":"19.png" - }, - { - "id":20, - "path":"20.png" - }, - { - "id":21, - "path":"21.png" - }, - { - "id":22, - "path":"22.png" - }, - { - "id":23, - "path":"23.png" - }, - { - "id":24, - "path":"24.png" - }, - { - "id":25, - "path":"25.png" - }, - { - "id":26, - "path":"26.png" - }, - { - "id":27, - "path":"27.png" - }, - { - "id":28, - "path":"28.png" - }, - { - "id":29, - "path":"29.png" - }, - { - "id":30, - "path":"30.png" - }, - { - "id":31, - "path":"31.png" - }, - { - "id":32, - "path":"32.png" - }, - { - "id":33, - "path":"33.png" - }, - { - "id":34, - "path":"34.png" - }, - { - "id":35, - "path":"35.png" - }, - { - "id":36, - "path":"36.png" - }, - { - "id":37, - "path":"37.png" - }, - { - "id":38, - "path":"38.png" - }, - { - "id":39, - "path":"39.png" - }, - { - "id":40, - "path":"40.png" - }, - { - "id":41, - "path":"41.png" - }, - { - "id":42, - "path":"42.png" - }, - { - "id":43, - "path":"43.png" - }, - { - "id":44, - "path":"44.png" - }, - { - "id":45, - "path":"45.png" - }, - { - "id":46, - "path":"46.png" - }, - { - "id":47, - "path":"47.png" - }, - { - "id":48, - "path":"48.png" - }, - { - "id":49, - "path":"49.png" - }, - { - "id":50, - "path":"50.png" - }, - { - "id":51, - "path":"51.png" - }, - { - "id":52, - "path":"52.png" - }, - { - "id":53, - "path":"53.png" - }, - { - "id":54, - "path":"54.png" - }, - { - "id":55, - "path":"55.png" - }, - { - "id":56, - "path":"56.png" - }, - { - "id":57, - "path":"57.png" - }, - { - "id":58, - "path":"58.png" - }, - { - "id":59, - "path":"59.png" - }, - { - "id":60, - "path":"60.png" - }, - { - "id":61, - "path":"61.png" - }, - { - "id":62, - "path":"62.png" - }, - { - "id":63, - "path":"63.png" - }, - { - "id":64, - "path":"64.png" - }, - { - "id":65, - "path":"65.png" - }, - { - "id":66, - "path":"66.png" - }, - { - "id":67, - "path":"67.png" - }, - { - "id":68, - "path":"68.png" - }, - { - "id":69, - "path":"69.png" - }, - { - "id":70, - "path":"70.png" - }, - { - "id":71, - "path":"71.png" - }, - { - "id":72, - "path":"72.png" - }, - { - "id":73, - "path":"73.png" - }, - { - "id":74, - "path":"74.png" - }, - { - "id":75, - "path":"75.png" - }, - { - "id":76, - "path":"76.png" - }, - { - "id":77, - "path":"77.png" - }, - { - "id":78, - "path":"78.png" - }, - { - "id":79, - "path":"79.png" - } + { + "id": 0, + "path": "0.png" + }, + { + "id": 1, + "path": "1.png" + }, + { + "id": 2, + "path": "2.png" + }, + { + "id": 3, + "path": "3.png" + }, + { + "id": 4, + "path": "4.png" + }, + { + "id": 5, + "path": "5.png" + }, + { + "id": 6, + "path": "6.png" + }, + { + "id": 7, + "path": "7.png" + }, + { + "id": 8, + "path": "8.png" + }, + { + "id": 9, + "path": "9.png" + }, + { + "id": 10, + "path": "10.png" + }, + { + "id": 11, + "path": "11.png" + }, + { + "id": 12, + "path": "12.png" + }, + { + "id": 13, + "path": "13.png" + }, + { + "id": 14, + "path": "14.png" + }, + { + "id": 15, + "path": "15.png" + }, + { + "id": 16, + "path": "16.png" + }, + { + "id": 17, + "path": "17.png" + }, + { + "id": 18, + "path": "18.png" + }, + { + "id": 19, + "path": "19.png" + }, + { + "id": 20, + "path": "20.png" + }, + { + "id": 21, + "path": "21.png" + }, + { + "id": 22, + "path": "22.png" + }, + { + "id": 23, + "path": "23.png" + }, + { + "id": 24, + "path": "24.png" + }, + { + "id": 25, + "path": "25.png" + }, + { + "id": 26, + "path": "26.png" + }, + { + "id": 27, + "path": "27.png" + }, + { + "id": 28, + "path": "28.png" + }, + { + "id": 29, + "path": "29.png" + }, + { + "id": 30, + "path": "30.png" + }, + { + "id": 31, + "path": "31.png" + }, + { + "id": 32, + "path": "32.png" + }, + { + "id": 33, + "path": "33.png" + }, + { + "id": 34, + "path": "34.png" + }, + { + "id": 35, + "path": "35.png" + }, + { + "id": 36, + "path": "36.png" + }, + { + "id": 37, + "path": "37.png" + }, + { + "id": 38, + "path": "38.png" + }, + { + "id": 39, + "path": "39.png" + }, + { + "id": 40, + "path": "40.png" + }, + { + "id": 41, + "path": "41.png" + }, + { + "id": 42, + "path": "42.png" + }, + { + "id": 43, + "path": "43.png" + }, + { + "id": 44, + "path": "44.png" + }, + { + "id": 45, + "path": "45.png" + }, + { + "id": 46, + "path": "46.png" + }, + { + "id": 47, + "path": "47.png" + }, + { + "id": 48, + "path": "48.png" + }, + { + "id": 49, + "path": "49.png" + }, + { + "id": 50, + "path": "50.png" + }, + { + "id": 51, + "path": "51.png" + }, + { + "id": 52, + "path": "52.png" + }, + { + "id": 53, + "path": "53.png" + }, + { + "id": 54, + "path": "54.png" + }, + { + "id": 55, + "path": "55.png" + }, + { + "id": 56, + "path": "56.png" + }, + { + "id": 57, + "path": "57.png" + }, + { + "id": 58, + "path": "58.png" + }, + { + "id": 59, + "path": "59.png" + }, + { + "id": 60, + "path": "60.png" + }, + { + "id": 61, + "path": "61.png" + }, + { + "id": 62, + "path": "62.png" + }, + { + "id": 63, + "path": "63.png" + }, + { + "id": 64, + "path": "64.png" + }, + { + "id": 65, + "path": "65.png" + }, + { + "id": 66, + "path": "66.png" + }, + { + "id": 67, + "path": "67.png" + }, + { + "id": 68, + "path": "68.png" + }, + { + "id": 69, + "path": "69.png" + }, + { + "id": 70, + "path": "70.png" + }, + { + "id": 71, + "path": "71.png" + }, + { + "id": 72, + "path": "72.png" + }, + { + "id": 73, + "path": "73.png" + }, + { + "id": 74, + "path": "74.png" + }, + { + "id": 75, + "path": "75.png" + }, + { + "id": 76, + "path": "76.png" + }, + { + "id": 77, + "path": "77.png" + }, + { + "id": 78, + "path": "78.png" + }, + { + "id": 79, + "path": "79.png" + } ] From 27695504154bdd43d5d70fe99a27cba9efa32497 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 15:02:10 +0000 Subject: [PATCH 13/35] Fix more indentation --- src/openrct2/cmdline_sprite.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index b65c69c84e..d768501a3b 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -665,8 +665,8 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) json_t* sprite_list=json_load_file(spriteDescriptionPath, JSON_REJECT_DUPLICATES, &error); if(sprite_list == NULL) { - fprintf(stderr,"Error parsing sprite description file: %s at line %d column %d\n",error.text,error.line,error.column); - return -1; + fprintf(stderr,"Error parsing sprite description file: %s at line %d column %d\n",error.text,error.line,error.column); + return -1; } if(!json_is_array(sprite_list)) { From e3ec934cc52ed00dabcd136079d8f7686021d97d Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 15:21:21 +0000 Subject: [PATCH 14/35] Remove redundant IDs --- resources/g2/sprites.json | 80 --------------------------------------- 1 file changed, 80 deletions(-) diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 74811ec933..3619780dfb 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -1,322 +1,242 @@ [ { - "id": 0, "path": "0.png" }, { - "id": 1, "path": "1.png" }, { - "id": 2, "path": "2.png" }, { - "id": 3, "path": "3.png" }, { - "id": 4, "path": "4.png" }, { - "id": 5, "path": "5.png" }, { - "id": 6, "path": "6.png" }, { - "id": 7, "path": "7.png" }, { - "id": 8, "path": "8.png" }, { - "id": 9, "path": "9.png" }, { - "id": 10, "path": "10.png" }, { - "id": 11, "path": "11.png" }, { - "id": 12, "path": "12.png" }, { - "id": 13, "path": "13.png" }, { - "id": 14, "path": "14.png" }, { - "id": 15, "path": "15.png" }, { - "id": 16, "path": "16.png" }, { - "id": 17, "path": "17.png" }, { - "id": 18, "path": "18.png" }, { - "id": 19, "path": "19.png" }, { - "id": 20, "path": "20.png" }, { - "id": 21, "path": "21.png" }, { - "id": 22, "path": "22.png" }, { - "id": 23, "path": "23.png" }, { - "id": 24, "path": "24.png" }, { - "id": 25, "path": "25.png" }, { - "id": 26, "path": "26.png" }, { - "id": 27, "path": "27.png" }, { - "id": 28, "path": "28.png" }, { - "id": 29, "path": "29.png" }, { - "id": 30, "path": "30.png" }, { - "id": 31, "path": "31.png" }, { - "id": 32, "path": "32.png" }, { - "id": 33, "path": "33.png" }, { - "id": 34, "path": "34.png" }, { - "id": 35, "path": "35.png" }, { - "id": 36, "path": "36.png" }, { - "id": 37, "path": "37.png" }, { - "id": 38, "path": "38.png" }, { - "id": 39, "path": "39.png" }, { - "id": 40, "path": "40.png" }, { - "id": 41, "path": "41.png" }, { - "id": 42, "path": "42.png" }, { - "id": 43, "path": "43.png" }, { - "id": 44, "path": "44.png" }, { - "id": 45, "path": "45.png" }, { - "id": 46, "path": "46.png" }, { - "id": 47, "path": "47.png" }, { - "id": 48, "path": "48.png" }, { - "id": 49, "path": "49.png" }, { - "id": 50, "path": "50.png" }, { - "id": 51, "path": "51.png" }, { - "id": 52, "path": "52.png" }, { - "id": 53, "path": "53.png" }, { - "id": 54, "path": "54.png" }, { - "id": 55, "path": "55.png" }, { - "id": 56, "path": "56.png" }, { - "id": 57, "path": "57.png" }, { - "id": 58, "path": "58.png" }, { - "id": 59, "path": "59.png" }, { - "id": 60, "path": "60.png" }, { - "id": 61, "path": "61.png" }, { - "id": 62, "path": "62.png" }, { - "id": 63, "path": "63.png" }, { - "id": 64, "path": "64.png" }, { - "id": 65, "path": "65.png" }, { - "id": 66, "path": "66.png" }, { - "id": 67, "path": "67.png" }, { - "id": 68, "path": "68.png" }, { - "id": 69, "path": "69.png" }, { - "id": 70, "path": "70.png" }, { - "id": 71, "path": "71.png" }, { - "id": 72, "path": "72.png" }, { - "id": 73, "path": "73.png" }, { - "id": 74, "path": "74.png" }, { - "id": 75, "path": "75.png" }, { - "id": 76, "path": "76.png" }, { - "id": 77, "path": "77.png" }, { - "id": 78, "path": "78.png" }, { - "id": 79, "path": "79.png" } ] From 4214781430b803be7c4a25fc59c12036b5c2f4cf Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 17:11:27 +0000 Subject: [PATCH 15/35] Give sprites meaningful names --- resources/g2/icons/29.png | Bin 0 -> 202 bytes resources/g2/icons/30.png | Bin 0 -> 203 bytes resources/g2/icons/31.png | Bin 0 -> 191 bytes resources/g2/icons/32.png | Bin 0 -> 208 bytes resources/g2/icons/58.png | Bin 0 -> 387 bytes resources/g2/icons/cheats.png | Bin 0 -> 506 bytes resources/g2/icons/copy.png | Bin 0 -> 170 bytes resources/g2/icons/fast_forward.png | Bin 0 -> 352 bytes resources/g2/icons/game_speed_indicator.png | Bin 0 -> 219 bytes .../g2/icons/game_speed_indicator_double.png | Bin 0 -> 229 bytes resources/g2/icons/large_scenery.png | Bin 0 -> 912 bytes resources/g2/icons/map_gen_land.png | Bin 0 -> 585 bytes resources/g2/icons/map_gen_noise.png | Bin 0 -> 443 bytes resources/g2/icons/map_gen_trees.png | Bin 0 -> 497 bytes resources/g2/icons/multiplayer.png | Bin 0 -> 2968 bytes resources/g2/icons/paste.png | Bin 0 -> 1143 bytes resources/g2/icons/paths.png | Bin 0 -> 446 bytes resources/g2/icons/rct1_close_off.png | Bin 0 -> 232 bytes resources/g2/icons/rct1_close_off_pressed.png | Bin 0 -> 229 bytes resources/g2/icons/rct1_close_on.png | Bin 0 -> 271 bytes resources/g2/icons/rct1_close_on_pressed.png | Bin 0 -> 268 bytes resources/g2/icons/rct1_open_off.png | Bin 0 -> 240 bytes resources/g2/icons/rct1_open_off_pressed.png | Bin 0 -> 236 bytes resources/g2/icons/rct1_open_on.png | Bin 0 -> 282 bytes resources/g2/icons/rct1_open_on_pressed.png | Bin 0 -> 282 bytes resources/g2/icons/rct1_test_off.png | Bin 0 -> 242 bytes resources/g2/icons/rct1_test_off_pressed.png | Bin 0 -> 235 bytes resources/g2/icons/rct1_test_on.png | Bin 0 -> 280 bytes resources/g2/icons/rct1_test_on_pressed.png | Bin 0 -> 280 bytes resources/g2/icons/server_password.png | Bin 0 -> 176 bytes resources/g2/icons/small_scenery.png | Bin 0 -> 720 bytes resources/g2/icons/sort.png | Bin 0 -> 201 bytes resources/g2/icons/twitch.png | Bin 0 -> 403 bytes resources/g2/icons/zoom_in.png | Bin 0 -> 557 bytes resources/g2/icons/zoom_in_background.png | Bin 0 -> 335 bytes resources/g2/icons/zoom_out.png | Bin 0 -> 531 bytes resources/g2/icons/zoom_out_background.png | Bin 0 -> 328 bytes resources/g2/logo.png | Bin 0 -> 4582 bytes resources/g2/logo_text.png | Bin 0 -> 5334 bytes resources/g2/sprites.json | 151 +++++++++--------- resources/g2/track/junior/flat_to_steep_1.png | Bin 0 -> 518 bytes .../g2/track/junior/flat_to_steep_2_1.png | Bin 0 -> 255 bytes .../g2/track/junior/flat_to_steep_2_2.png | Bin 0 -> 264 bytes .../g2/track/junior/flat_to_steep_3_1.png | Bin 0 -> 272 bytes .../g2/track/junior/flat_to_steep_3_2.png | Bin 0 -> 254 bytes resources/g2/track/junior/flat_to_steep_4.png | Bin 0 -> 605 bytes .../track/junior/flat_to_steep_diagonal_1.png | Bin 0 -> 1229 bytes .../track/junior/flat_to_steep_diagonal_2.png | Bin 0 -> 970 bytes .../track/junior/flat_to_steep_diagonal_3.png | Bin 0 -> 1217 bytes .../track/junior/flat_to_steep_diagonal_4.png | Bin 0 -> 1112 bytes .../junior/flat_to_steep_diagonal_lift_1.png | Bin 0 -> 1300 bytes .../junior/flat_to_steep_diagonal_lift_2.png | Bin 0 -> 1004 bytes .../junior/flat_to_steep_diagonal_lift_3.png | Bin 0 -> 1312 bytes .../junior/flat_to_steep_diagonal_lift_4.png | Bin 0 -> 1209 bytes .../g2/track/junior/flat_to_steep_lift_1.png | Bin 0 -> 595 bytes .../track/junior/flat_to_steep_lift_2_1.png | Bin 0 -> 326 bytes .../track/junior/flat_to_steep_lift_2_2.png | Bin 0 -> 270 bytes .../track/junior/flat_to_steep_lift_3_1.png | Bin 0 -> 280 bytes .../track/junior/flat_to_steep_lift_3_2.png | Bin 0 -> 275 bytes .../g2/track/junior/flat_to_steep_lift_4.png | Bin 0 -> 721 bytes resources/g2/track/junior/steep_to_flat_1.png | Bin 0 -> 542 bytes .../g2/track/junior/steep_to_flat_2_1.png | Bin 0 -> 250 bytes .../g2/track/junior/steep_to_flat_2_2.png | Bin 0 -> 261 bytes .../g2/track/junior/steep_to_flat_3_1.png | Bin 0 -> 238 bytes .../g2/track/junior/steep_to_flat_3_2.png | Bin 0 -> 265 bytes resources/g2/track/junior/steep_to_flat_4.png | Bin 0 -> 577 bytes .../track/junior/steep_to_flat_diagonal_1.png | Bin 0 -> 1238 bytes .../track/junior/steep_to_flat_diagonal_2.png | Bin 0 -> 956 bytes .../track/junior/steep_to_flat_diagonal_3.png | Bin 0 -> 1248 bytes .../track/junior/steep_to_flat_diagonal_4.png | Bin 0 -> 1110 bytes .../junior/steep_to_flat_diagonal_lift_1.png | Bin 0 -> 1315 bytes .../junior/steep_to_flat_diagonal_lift_2.png | Bin 0 -> 976 bytes .../junior/steep_to_flat_diagonal_lift_3.png | Bin 0 -> 1325 bytes .../junior/steep_to_flat_diagonal_lift_4.png | Bin 0 -> 1210 bytes .../g2/track/junior/steep_to_flat_lift_1.png | Bin 0 -> 614 bytes .../track/junior/steep_to_flat_lift_2_1.png | Bin 0 -> 265 bytes .../track/junior/steep_to_flat_lift_2_2.png | Bin 0 -> 299 bytes .../track/junior/steep_to_flat_lift_3_1.png | Bin 0 -> 238 bytes .../track/junior/steep_to_flat_lift_3_2.png | Bin 0 -> 306 bytes .../g2/track/junior/steep_to_flat_lift_4.png | Bin 0 -> 691 bytes 80 files changed, 74 insertions(+), 77 deletions(-) create mode 100644 resources/g2/icons/29.png create mode 100644 resources/g2/icons/30.png create mode 100644 resources/g2/icons/31.png create mode 100644 resources/g2/icons/32.png create mode 100644 resources/g2/icons/58.png create mode 100644 resources/g2/icons/cheats.png create mode 100644 resources/g2/icons/copy.png create mode 100644 resources/g2/icons/fast_forward.png create mode 100644 resources/g2/icons/game_speed_indicator.png create mode 100644 resources/g2/icons/game_speed_indicator_double.png create mode 100644 resources/g2/icons/large_scenery.png create mode 100644 resources/g2/icons/map_gen_land.png create mode 100644 resources/g2/icons/map_gen_noise.png create mode 100644 resources/g2/icons/map_gen_trees.png create mode 100644 resources/g2/icons/multiplayer.png create mode 100644 resources/g2/icons/paste.png create mode 100644 resources/g2/icons/paths.png create mode 100644 resources/g2/icons/rct1_close_off.png create mode 100644 resources/g2/icons/rct1_close_off_pressed.png create mode 100644 resources/g2/icons/rct1_close_on.png create mode 100644 resources/g2/icons/rct1_close_on_pressed.png create mode 100644 resources/g2/icons/rct1_open_off.png create mode 100644 resources/g2/icons/rct1_open_off_pressed.png create mode 100644 resources/g2/icons/rct1_open_on.png create mode 100644 resources/g2/icons/rct1_open_on_pressed.png create mode 100644 resources/g2/icons/rct1_test_off.png create mode 100644 resources/g2/icons/rct1_test_off_pressed.png create mode 100644 resources/g2/icons/rct1_test_on.png create mode 100644 resources/g2/icons/rct1_test_on_pressed.png create mode 100644 resources/g2/icons/server_password.png create mode 100644 resources/g2/icons/small_scenery.png create mode 100644 resources/g2/icons/sort.png create mode 100644 resources/g2/icons/twitch.png create mode 100644 resources/g2/icons/zoom_in.png create mode 100644 resources/g2/icons/zoom_in_background.png create mode 100644 resources/g2/icons/zoom_out.png create mode 100644 resources/g2/icons/zoom_out_background.png create mode 100644 resources/g2/logo.png create mode 100644 resources/g2/logo_text.png create mode 100644 resources/g2/track/junior/flat_to_steep_1.png create mode 100644 resources/g2/track/junior/flat_to_steep_2_1.png create mode 100644 resources/g2/track/junior/flat_to_steep_2_2.png create mode 100644 resources/g2/track/junior/flat_to_steep_3_1.png create mode 100644 resources/g2/track/junior/flat_to_steep_3_2.png create mode 100644 resources/g2/track/junior/flat_to_steep_4.png create mode 100644 resources/g2/track/junior/flat_to_steep_diagonal_1.png create mode 100644 resources/g2/track/junior/flat_to_steep_diagonal_2.png create mode 100644 resources/g2/track/junior/flat_to_steep_diagonal_3.png create mode 100644 resources/g2/track/junior/flat_to_steep_diagonal_4.png create mode 100644 resources/g2/track/junior/flat_to_steep_diagonal_lift_1.png create mode 100644 resources/g2/track/junior/flat_to_steep_diagonal_lift_2.png create mode 100644 resources/g2/track/junior/flat_to_steep_diagonal_lift_3.png create mode 100644 resources/g2/track/junior/flat_to_steep_diagonal_lift_4.png create mode 100644 resources/g2/track/junior/flat_to_steep_lift_1.png create mode 100644 resources/g2/track/junior/flat_to_steep_lift_2_1.png create mode 100644 resources/g2/track/junior/flat_to_steep_lift_2_2.png create mode 100644 resources/g2/track/junior/flat_to_steep_lift_3_1.png create mode 100644 resources/g2/track/junior/flat_to_steep_lift_3_2.png create mode 100644 resources/g2/track/junior/flat_to_steep_lift_4.png create mode 100644 resources/g2/track/junior/steep_to_flat_1.png create mode 100644 resources/g2/track/junior/steep_to_flat_2_1.png create mode 100644 resources/g2/track/junior/steep_to_flat_2_2.png create mode 100644 resources/g2/track/junior/steep_to_flat_3_1.png create mode 100644 resources/g2/track/junior/steep_to_flat_3_2.png create mode 100644 resources/g2/track/junior/steep_to_flat_4.png create mode 100644 resources/g2/track/junior/steep_to_flat_diagonal_1.png create mode 100644 resources/g2/track/junior/steep_to_flat_diagonal_2.png create mode 100644 resources/g2/track/junior/steep_to_flat_diagonal_3.png create mode 100644 resources/g2/track/junior/steep_to_flat_diagonal_4.png create mode 100644 resources/g2/track/junior/steep_to_flat_diagonal_lift_1.png create mode 100644 resources/g2/track/junior/steep_to_flat_diagonal_lift_2.png create mode 100644 resources/g2/track/junior/steep_to_flat_diagonal_lift_3.png create mode 100644 resources/g2/track/junior/steep_to_flat_diagonal_lift_4.png create mode 100644 resources/g2/track/junior/steep_to_flat_lift_1.png create mode 100644 resources/g2/track/junior/steep_to_flat_lift_2_1.png create mode 100644 resources/g2/track/junior/steep_to_flat_lift_2_2.png create mode 100644 resources/g2/track/junior/steep_to_flat_lift_3_1.png create mode 100644 resources/g2/track/junior/steep_to_flat_lift_3_2.png create mode 100644 resources/g2/track/junior/steep_to_flat_lift_4.png diff --git a/resources/g2/icons/29.png b/resources/g2/icons/29.png new file mode 100644 index 0000000000000000000000000000000000000000..a95bea067328184131659914b85c768755439e2f GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Y!3HERME&^*q*&4&eH|GXHuiJ>Nn{1`ISV`@ ziy0XB4uUY_j)~cCfr1hxt`Q}{`DrEPiAAXl1&Nt?C3<mdKI;Vst0L?u+lK=n! literal 0 HcmV?d00001 diff --git a/resources/g2/icons/30.png b/resources/g2/icons/30.png new file mode 100644 index 0000000000000000000000000000000000000000..4038923eafc98753bafb70abfccdbcf34a9d526b GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Y!3HERME&^*q*&4&eH|GXHuiJ>Nn{1`ISV`@ ziy0XB4uUY_j)~cCfr1hxt`Q}{`DrEPiAAXl1&Nt?C3< zjv*HQZ@V}0GAQsI{>94v<-c^|#|er`O*^OUxoP@m8a;S24e_O?((X Sjn^M&D1)b~pUXO@geCxUpGR&0 literal 0 HcmV?d00001 diff --git a/resources/g2/icons/31.png b/resources/g2/icons/31.png new file mode 100644 index 0000000000000000000000000000000000000000..06b5f195c936f44a3cb9cdd5a4ac99d03aadfacb GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Y!3HERME&^*q*&4&eH|GXHuiJ>Nn{1`ISV`@ ziy0XB4uUY_j)~cCfr1hxt`Q}{`DrEPiAAXl1&Nt?C3<A+stP&I+XPgt|#2T;@3xkok!5DBA&s hqij7)QA})X3>xRP8~aNvOn?S4c)I$ztaD0e0sw&=Hsk;R literal 0 HcmV?d00001 diff --git a/resources/g2/icons/32.png b/resources/g2/icons/32.png new file mode 100644 index 0000000000000000000000000000000000000000..84d69e23372932df5ab7cc7f5922b774cbfcf8f3 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Y!3HERME&^*q*&4&eH|GXHuiJ>Nn{1`ISV`@ ziy0XB4uUY_j)~cCfr1hxt`Q}{`DrEPiAAXl1&Nt?C3<FVdQ&MBb@03>xr Ab^rhX literal 0 HcmV?d00001 diff --git a/resources/g2/icons/58.png b/resources/g2/icons/58.png new file mode 100644 index 0000000000000000000000000000000000000000..38dab8711a2df7d76015e9dc6081c1f65d11d841 GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^5anMpauy~7sn6}@2!&#PCaD6J$0y(p9bGdh}z77RPhrfA7z?hlH2T&v{oc z_fr&8JYQ#v!F*>zpj fjqlsND5_xg@hGi&)v(GM7;p@pu6{1-oD!Ms30001uP)t-s0000N zBO@~}08dK`KRW|KLA532S;x!Z%Y@q+h?QikAs(&S33)TS08UP0F%2@i{Eq8+uOIp!=JCO zOJieqdoPEdUz5kDLt9&0b8~NlgF9a*KT}hWV<#^|Lv|-+5&!@I0d!JMQvg8b*k%9# z0UJp~K~#7FwUB>LgD?<=cWr5RY_%OaJYB28P{)LQ|BvUDEHV7p{_{cz$;0!$?X9i@ zLJC;j9uNR`IDpF3Z4M&SW_?FDXjJ0M9js%%VW_u@`dV7nGeq;Ss4IukTEAP?K@`?$ zw1{rAa514CCF0K8xt^d@N})sasHb|Ol6kK2$)h*>S@D3CcBs9>VL>p_%~iLk_uN;G zb^c+{k@aUNiDvDRb&dYz^#By&ti8zJw0r-k>SF_uCWlvfQRJUr-*r{hNuMm0={U6n2;-9{d|`ayP>Kx0xSP`;!IF9=L?M(T w7-G+FihUydlz(`D6nParaV~!(zWU$!1@VFv(5fDP0ssI207*qoM6N<$f`e(;Z~y=R literal 0 HcmV?d00001 diff --git a/resources/g2/icons/copy.png b/resources/g2/icons/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0f3d7906cfe9d534d1bf1b3c17376f2c485b2c GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wloB=)|uK)l4S7u;%|Nj3G++>;x58w>=TFM1!2F=t}krxbi~Ny9vk3NN8%0fjp@ zwKwgUtvavzr)}&_I(|jtpsRd%erROO(YVGPUM%xlYo;r<@YbswxM$7KnXj4q|IdvN QK%*HvUHx3vIVCg!03dWb9RL6T literal 0 HcmV?d00001 diff --git a/resources/g2/icons/fast_forward.png b/resources/g2/icons/fast_forward.png new file mode 100644 index 0000000000000000000000000000000000000000..674702e55092ec51082459e13474089b1e29e82b GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^B0wy}!3HFwFZ>e#QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKtYKT*NBqf{Irtt#G+J&g2c?c61}|C5(N`I z13lB!R-;s)nv0$;jv*HQy_fb1HaQ5eJ~+$6%cFV7Nap~P&Os+0jb>R zQp+n&e=0s+ZEVhd{QI;-wv91Tfzfrr9LY9qTlT+PZY|2)(`j*S`nUJXA`*O59tSlV z3MTxWCwqIJj)58z&yLUppCcdFmp&=j@og$skK}P*=FhYL*8Oo2kuc_!spC8lnP~HU zv#hYQp~2xj(lvH{Q*O#|Y-s6;tSxerG&lBSEK+1B}!Z)N`mv#O3D+9QW**oGxJLH@={9_O!N%& zOjBEpQh{oGJY5_^B*K#!80)Ir{wJ^*F>vbD-TyD|ETnd^cE3cZ&=E$?rh1|%O$WD@{VEa{HEjtmSN`?>!lvVtTFJR*x3 z82Ao>Fr%o3R|8N`qQo_#Bsf2KzJ3vn^N^7#aYW79fPNN2bZe?^J zG%heMHD!e|WdHyJ4oO5oR7gv;)R9B0VHC&l{(}pH3&Dlp!XOv~K`;n{U=R#~K@bcE zK@bdr;6gA6g5bg+41!>AAqavCgCGb8LHOMFbJkhgU3f2?J@4N4oZt7H-}AihN-5>P z#?p<|My>30I_3PfRW|p(m%Wol=?`}zHe2=bI3CA!yVr}nA18-ptJSJX7j-h?XT8}h zYmG*+CV*JGT`Sw&dbt@Nl&kyw8K8I33{m+B>h}Aeg5pO4z}L04nKMNwVvg@hC)v39OzGNsxN0|CiU-G0_r0_W+7b zVZ9xm2Sg#LYY=M+W{v0%2GP*(L2nTt3FP=-CqN1lpnwI6Z$_ht?A&wDL^RXy#Cm_- z{Q%@1q(y0uF?A}4vWAeH6i!i%y^OEQ?eg*= zIu!1Kc+1tvRRbPJxSDR^6iJeh0GqA|SP_6i)A$eId4~G#>26GUbMqAWOPg#&-yTQt zY;SY6=}v}@(xSn|?o_z?()t)4Ur&#uiM)^rP&Wf8NL$h(!6Ksq@SA}9a^(8(=`;>O zb$kO*P1@;PECSZI*P>9OQ>1hMS*1JOr~mFdVRF2jj&Xi}gxuWx86XAoyt9a}xyiay z$i^AqJ@P#vE{|0|JIxUP6rjL0fC+RRFI9DlJ_867#2a2k3TMQRBA&7cAb}>}alW+x zf}m!s^PzrTT+9H|uBYE07J&#O+hm)U0B<-T!GsC-#1cU0R`(!8h_lGY%(1g^alf)e m4oHfEePx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0lG;c0ug~&5s?ER zB9I6K0ud2`Kq5H63J!ooB60u(A_qX^01*)!A&1!HbY!v=ZNux7 z0(f(}j{RshJ3$wtt~EbWVf61McxIgGAXW%fRR?6+Ux&)mN~_+`{D2#oV_6WQt5gHb3LnlfPna`YPCKA Xf+pKr<30by00000NkvXXu0mjfA{Fs} literal 0 HcmV?d00001 diff --git a/resources/g2/icons/map_gen_noise.png b/resources/g2/icons/map_gen_noise.png new file mode 100644 index 0000000000000000000000000000000000000000..17b58d28c4b06a9fb6ed19f234dd9f89d95f1f3f GIT binary patch literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^@<1%j!3-ofKU^XUqyhtcLR^9L@_hFB+w*s?o-D4c z?44}B*xGve`uN3@>+OSsvxAK%+cWgnXHTE)UvAIPK0iL$TsohhzuaBBUtPUkTDm@5 zzCT&LKbSo`TRz`g++SO`AvgB{&``#bAirP+hi5m^K%69RcNc~ZR#^`qhqJ&VvY3H^ zTNs2H8D`Cq01C2~c>21s-)CduQ|I>*+}#fpdhF@q7@~20@1$7qCIz0hNHwo%iNfyx z{>w{ACpA^=>TVXF^Zf2^{^eKZ^ErIm6LOu&`ETvZWx2PQX5W6bVE3xM_FWmwnyv3j z?%VMfh_K|m{cx(l%FW=G;c-5-2huSXRa;h^D)17Mx@#82BKJt$sQvxj9ErRF){tma!$|djFf!<~CboFyt=akR{0Pu{W`Tzg` literal 0 HcmV?d00001 diff --git a/resources/g2/icons/map_gen_trees.png b/resources/g2/icons/map_gen_trees.png new file mode 100644 index 0000000000000000000000000000000000000000..6c2346466919bb6071c743402dee01a3975f07ce GIT binary patch literal 497 zcmVg&KPGp)19Bb!@&Y|_F}KrUZb}^a0-Duk&l5QgV1#k z%$aB714kC&p6P`dRG2)Ry>&J)CrQlgBUA7Mg*yS{5HhAgkRA%rQ_eBi%lQryJ}M9e z%v?BzUO19nQ-;-;vnmK$R)L~xl!58i0(oCqC2ASLV8Js9+)#)daD>f+Ky@6;q`ej$ z$6E@7zQxPw4QT}WG8PDwv1mq3Z$A6y_q_U|plZ~LC`b_O;|I<2oZ*=%OKnLLTrfX> z`M)yAkY$+als0cS=d`F!nCI>5U(%ESqvbXMlOnZFzb{a$sin5FVXZDT?X6&~t?uD# n{N4GsPk?`2cKty({O5cC71J4rCsoZU00000NkvXXu0mjf(CEfZ literal 0 HcmV?d00001 diff --git a/resources/g2/icons/multiplayer.png b/resources/g2/icons/multiplayer.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4369ea8a9a9aad804d46a001861e3d32e8cd9b GIT binary patch literal 2968 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 literal 0 HcmV?d00001 diff --git a/resources/g2/icons/paths.png b/resources/g2/icons/paths.png new file mode 100644 index 0000000000000000000000000000000000000000..da44df3978278ff51776d35a1d60692e46cac845 GIT binary patch literal 446 zcmV;v0YUzWP)N2bZe?^J zG%heMHD!e|WdHyHJV``BR7gv`l{*f?Knz5EBaT2pNl8h`0Vp^E2VdmGFAR>&QnAvA zjX!U^2}Iu9p53hQF-rPOFtg0^XwoI-?YNGMH&vnXi z1>Q`P+C(ABd49E4^MPMaKv01SaA_U2n$HUSdV)#-Gg!qiRW9(o!8c_?HDRE@o9Ps} zkz!Sq*K78H-~WrcBWJj($_0Ks0YNpZ3^k_lse$X;guuL}s#7x*_|J#jnREv1t04pb z`7UzlG&FKusmlj`|2D0P5d$!3H59qP_um5=DgmitygUQn8=wrx^0V!Z literal 0 HcmV?d00001 diff --git a/resources/g2/icons/rct1_close_off.png b/resources/g2/icons/rct1_close_off.png new file mode 100644 index 0000000000000000000000000000000000000000..e81026a20516ac92bf5e71c5ab1bff6a958c3256 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*%E&ba4!^ z@IN}?E$0CP4%WMCl1nD=U7C1V=0{Yg+Lw4anV%P&FMM0N^;^-Gbd_sCAqzgfiK%m% z672S}Y{&7Fnp0H*gAd-`{~^+Izl&7ZrJ$CXAze{?Axu+FKQun2ylVLh24l{$qi-0G Yd|2~xv-0U(KpPo6UHx3vIVCg!09-Xv-v9sr literal 0 HcmV?d00001 diff --git a/resources/g2/icons/rct1_close_off_pressed.png b/resources/g2/icons/rct1_close_off_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..3c09112bcbc8545ec799cc4167897bddf5211a96 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*%E*ba4!^ z@IN{snu|e^hq>Cge-E*~F%(TEo!`*iCNS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*+-wba4!^ z@IN|nBX5HN56fjk31$Nx)yDxw9LfO!MjaoeZ*QD5!AyUz(24uUn@s#%p46$uUD?E+ zKJ|~l!BjP?vPHRnd!FlYyx6yimu-c4_@s#f9RZB6FWV%54rB0i L^>bP0l+XkKnrKNS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*+-tba4!^ z@IN}?pkRXn56jQU8LSaK{@oim=8GgLiU}1PvP-h;PkYAZvFVAzUvZ_NEw2rCZ|L6| zzQN%|&KJ&Y7fdsyqMoI{ZPZQa{V8zs8k5rdx2A0ZOATZys(G8z^qpord)2fdYME=t z>Sw#dJ{B-rGKxFwGgn_6Z@SU)K+8Ty(feF8y90h}2km0aO?&xhj!=FV&{Yhcu6{1- HoD!M<4WV0e literal 0 HcmV?d00001 diff --git a/resources/g2/icons/rct1_open_off.png b/resources/g2/icons/rct1_open_off.png new file mode 100644 index 0000000000000000000000000000000000000000..55b8ae32970665b4c8f2fd6bf00ea5e608f8c9ad GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1**yOba4!^ z@IN}?Aa8>KhwIG)&FuYsj|BK03h?z;t_%svc)ZrWGLw1F1clFwR!w~>@byPrhp9x2 z|HZdj`W2Q-rheOf;C?>eNfqH-?LCje|28N fXv>-A`h<})dL!#&-Dk}}n;AS^{an^LB{Ts5ayU=> literal 0 HcmV?d00001 diff --git a/resources/g2/icons/rct1_open_off_pressed.png b/resources/g2/icons/rct1_open_off_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..c22e6db1713d739d9309b0f8231a35af09985a61 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1**yNba4!^ z@IN}?Am;%C9_GD{^0g&%_%15$`p=@bC`?yK{fqd)i2|=VZd^Nh*M8gOn2V9(d{Lb~ zN4)~PHfp__{ABNS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*)0h>Eak- z;h!vF@!|jfdW*97_5bXv_S;G{-#Aeu!Jx(%G^gI~&;Li?|Nh_oUcA|`qd#2PmdKI;Vst0K{NlSO5S3 literal 0 HcmV?d00001 diff --git a/resources/g2/icons/rct1_open_on_pressed.png b/resources/g2/icons/rct1_open_on_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..d98274d407999df304af6a496126269731850782 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*)0h>Eak- z;h!vF@!|jfdW&i6(|)YKcb@NNS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*$3Vba4!^ z@IN}?B5#8M2kXyb4)+2Md)WhwGKURiB#X7YxN`rz_SVa7;O4xfzv|bfo<(x^xi_*k z-&Wam{yTRZpXSnJS-l^>&nnJLS(MwF{)hXh&o5P@3zKFkU0D*c<*|dBLzPTdoZiN| g4$}o{j_W(-+^*hzILNun31~Nir>mdKI;Vst0LMB{FaQ7m literal 0 HcmV?d00001 diff --git a/resources/g2/icons/rct1_test_off_pressed.png b/resources/g2/icons/rct1_test_off_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..13c5deff4f0621eeeba2a995a0811fd296ec374c GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1**yPba4!^ z@IN}?B4>jEkIUwEWs8>ieGeu2t+?GkYxk(%UoNS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*)0m>Eak- z;eT}EM&1Sk9+u6Ftg6liLd<~%Y{>xuMhwaZ4qjdA`ELYN9i+Y2Tip2miz9qJgUj1u z?){}o-(IfKkS>sP=bt0|pgnre|3;?7+LQu@_cysUCLXbDG%ApsJxRn}@96~1118tM zE?1i2?6a_nRX5ATz~lV+6*W5?UY)!5&gSiQk)!?b8yxp59QBANS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*)0m>Eak- z;h!vF@!|jfdW(1bY5(`z$TvCWq*(GWOm4`$b^mOC)5k2A>m{{2Km0$xd?`@XI{t+l zGhME;g#Fn4|NsB<9}9XF3Re`d99YTO);P;iuR+V5VTRiTl`gdfY!b&-2|fwgk$Ym+ z0u#UGO*VX!8fNkZahS23V%yCUzM{#%$8b~H47EK{juOwp1=w~odFCx(U}k3MJR-c~ Upy=KgKo>H2y85}Sb4q9e0Qh8Mj{pDw literal 0 HcmV?d00001 diff --git a/resources/g2/icons/server_password.png b/resources/g2/icons/server_password.png new file mode 100644 index 0000000000000000000000000000000000000000..df841457066aa674a74375828249dbe7f47cec68 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXZEKj`94sMo~Mgr zh(>VokN^MeS>E6OFVE_HRB)0(s{xOwvJ+!RBm3kP3^yw@)B+jV?){f%kjS|z>bcUn Q1E`b1)78&qol`;+0HLojR{#J2 literal 0 HcmV?d00001 diff --git a/resources/g2/icons/small_scenery.png b/resources/g2/icons/small_scenery.png new file mode 100644 index 0000000000000000000000000000000000000000..efbe194fa8aa73c709d2b1df1e7cb084b3a2a276 GIT binary patch literal 720 zcmV;>0x$iEP)N2bZe?^J zG%heMHD!e|WdHyIPDw;TR7gv`m7#V5F%U)9Ra77m6$nHHVg&-RqGAOCfk0GLAXZi& z5J)7lA5ekpC-52lq?8-D>1+?Rt=TSwg z=i}6@CTVk6rqlO6&xhkW9Z#FQUUakk-2G+XAn-UDWbkG&ESsWn7|7eEEpX;2$aD9X zVE_Y;&~QG=RmEpiU=-dl!0R(FsiT; z#W*yYJ>|my0V8A;3SnMT8D2*_dB|Xzj87bax@!v1MlyR{QN-+f0;m!Ie%wxPzCj#R z!24EAL91ZRnKC#)fXqL-=bnIB3fFgS*7(4q$QA!v0pME|0O0;0K&j&PvN_*nP3%QJD|&cFd9Oww2Ur3aV-05R8QAJ+;3^Qu_GA>m#HHimcJk4?BR ztBMsEw+}F2A;OK6L37vu7^nwbleKH%T2A6@-v7gb={*3D6WC5R83@Vi7DHpxJW+fQ9!2gkydSe$DtAK5^E3 z*}gS`@!6x5!6t(M_&q{I=*w!AeV=z{__Stws^(8s`s&)WoBw96l@WtLfyMvjx^44X zpV=7u5G4NB%7{S@DS*!!6Rs&hwd3iu_e{IPsHz{*-{XO2QSpQT0000_!@p6YuHb7*Y{8^}=r61_K_J3wPM;I44>u zSFpH!;K*E%_FsOJqu(lzn5XG;V|M5$X&41ms#koQH=&pD!p6@W5ewoTU1+%Ou;sl8 xN3~#W#-Zbl-^3sAcu%;%cwfE5E$!oMc9BkA@3o&E7yzwe@O1TaS?83{1ONuCP22zg literal 0 HcmV?d00001 diff --git a/resources/g2/icons/twitch.png b/resources/g2/icons/twitch.png new file mode 100644 index 0000000000000000000000000000000000000000..05c0c429844714d85c6c48f43fa096ffb08ec4a8 GIT binary patch literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^@<1%j!3HE->_hZ{6id3JuOkD)#(wTUiL5|AXMsm# zF#`kNArNL1)$nQn3QCl?MwA5Srw}V>gA6g(EI5Jtz zsqd}6;Syus&qsEd}&)y@4rNr5lN;@*{Sw_mTg zb=J##Ld)@aTGw*sBp%DOunx88`}DfN?%&xzIqN->^A8&yKmK>4k_>l4vT>&3F%=J~ z!@jAH|Gdhuc;?~%^S8wVHH-h18)mjGwo~c#?OV=b-e}uZaA0W#k6VZgH^b+ol_po^ zw%?ZMQF&N*_i{pqe`j~4q6Ft7yH{e@C9kc!9G2CzBc!~z?c?uXpEG7Bgv4;0v7K;# uy)SI1=CSO=B^>VAi7L|bjl}YWlizuUy)?DB{h<>WfDE3lelF{r5}E*Wsh&vy literal 0 HcmV?d00001 diff --git a/resources/g2/icons/zoom_in.png b/resources/g2/icons/zoom_in.png new file mode 100644 index 0000000000000000000000000000000000000000..283c1fc325c26a0fce80cbd957cdf9237e728bd9 GIT binary patch literal 557 zcmV+|0@D47P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0iH=jK~zXf#gm~@!$1&*<0=sq2xKIpq7Q(m zL`EVi`T!Mugh)hXC9<*-iHPI@cmyOO5^B^IpjG!Puv)8Sxn z3VDy(22r}BxBb-Sjyw$#+C5|Ixqm4F+tcU3ULLPZtf#J*0X?;`11Um`CBgUWN!k_@ zTTh+L9C;do>I4yjqKUw0d7IgK>UtT(JK&u}u}ql9`_Ua-G$2Uo6ns4xQOtXaWx||1 zImCKSbrDXOfq&<~Wx{&^G6Bd5$>~4PT{!A|v`usZ^;|ps4xZ2F-3CN7VYf1o)RqWG z_p8-#6E0Oo>{wu0rPBybp4JUALHhP3;K~7;Ef!`>+juf}M86O$%2O7YZ~{&SoOyfA v=l}>@8^G|_O$ZsF!L8~W(ZpZ0#LT=By}Z;C1rt33 zJ=4@yqg0@p1D-C9Ar}5uCm9MIGT>qPJXu7C{<<2B$M!ogZKe?&>R1VDXIMQyfRPa>g>4X;5e|6cPeNOi)z5jCSg;LqqrCf?H z-)rpVDKoq%DyOnDZH3FR(&_SA-968e=APQ!?ZPYHoETBIC4=F1y@+X(_nnJ2A2V+M ZVms{|Wv0at^&jXL22WQ%mvv4FO#o6_dddI* literal 0 HcmV?d00001 diff --git a/resources/g2/icons/zoom_out.png b/resources/g2/icons/zoom_out.png new file mode 100644 index 0000000000000000000000000000000000000000..296f07c15058ba87437aa1281d709974c679ef74 GIT binary patch literal 531 zcmV+u0_^>XP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0fb3JK~zXf#gna4!$1^;<0=sd1Tqp)(FZ_O zA|nwMeSnHSLL{QH5?NV^L_{JH6@36CA`-FmyX@)Qgr-Rd3}@y{vVY&%o82V;uB$W+ zb;qG$5-fbIzFf|Z9vo!gP?&GCEZi@bVUg$dq-{ZOvi67yRF1ZOt@fwPeQHd8I@ zcAHCUM`TqDX!pDmpqs+(c=u0W&kq-7=CiI-0N>Q!9q5z+Zx*Al%0@Pybqb5fssvR9 z9wPfTU_84?Y(DEc1^6?dugU&=bOvVw5QD0s?e;JZ7&D)$&ccxe91c}gG==C2Gp7GQ zXA!3~s~!@&zv&b_olM#TkPo5!*j*9*9**zk^Zp@RRRytQfpw!ioN+!~uMk}SA9PzV zu<>+i!F)EJv?HRM1oMtVCPJuy%7D|Z&lxO$z_kGae?0^#0Qde>UFAb!*Iz10J^^0h VQw))k!0G@1002ovPDHLkV1hi!*gyaP literal 0 HcmV?d00001 diff --git a/resources/g2/icons/zoom_out_background.png b/resources/g2/icons/zoom_out_background.png new file mode 100644 index 0000000000000000000000000000000000000000..4d7afd5519717a64c843636e2d2c1add38bd92c9 GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ=4@yqg0@pot`d^Ar}5uCm9Mg8}P9F27Bl8t3wo%>pPm2Y%d UUrYXEpeGnSUHx3vIVCg!08pcR7XSbN literal 0 HcmV?d00001 diff --git a/resources/g2/logo.png b/resources/g2/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f99b17660d0c4cde90a5b3cd5e5d349d1512628b GIT binary patch literal 4582 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 F{sTW+^ico+ literal 0 HcmV?d00001 diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 3619780dfb..caf905a824 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -1,90 +1,90 @@ [ { - "path": "0.png" + "path": "logo.png" }, { - "path": "1.png" + "path": "logo_text.png" }, { - "path": "2.png" + "path": "icons/fast_forward.png" }, { - "path": "3.png" + "path": "icons/game_speed_indicator.png" }, { - "path": "4.png" + "path": "icons/game_speed_indicator_double.png" }, { - "path": "5.png" + "path": "icons/twitch.png" }, { - "path": "6.png" + "path": "icons/map_gen_land.png" }, { "path": "7.png" }, { - "path": "8.png" + "path": "icons/zoom_in.png" }, { - "path": "9.png" + "path": "icons/zoom_in_background.png" }, { - "path": "10.png" + "path": "icons/zoom_out.png" }, { - "path": "11.png" + "path": "icons/zoom_out_background.png" }, { - "path": "12.png" + "path": "icons/map_gen_trees.png" }, { - "path": "13.png" + "path": "icons/map_gen_noise.png" }, { - "path": "14.png" + "path": "icons/large_scenery.png" }, { - "path": "15.png" + "path": "icons/small_scenery.png" }, { - "path": "16.png" + "path": "icons/paths.png" }, { - "path": "17.png" + "path": "icons/rct1_close_off.png" }, { - "path": "18.png" + "path": "icons/rct1_close_off_pressed.png" }, { - "path": "19.png" + "path": "icons/rct1_close_on.png" }, { - "path": "20.png" + "path": "icons/rct1_close_off_pressed.png" }, { - "path": "21.png" + "path": "icons/rct1_test_off.png" }, { - "path": "22.png" + "path": "icons/rct1_test_off_pressed.png" }, { - "path": "23.png" + "path": "icons/rct1_test_on.png" }, { - "path": "24.png" + "path": "icons/rct1_test_on_pressed.png" }, { - "path": "25.png" + "path": "icons/rct1_open_off.png" }, { - "path": "26.png" + "path": "icons/rct1_open_off_pressed.png" }, { - "path": "27.png" + "path": "icons/rct1_open_on.png" }, { - "path": "28.png" + "path": "icons/rct1_open_on_pressed.png" }, { "path": "29.png" @@ -99,144 +99,141 @@ "path": "32.png" }, { - "path": "33.png" + "path": "icons/cheats.png" }, { - "path": "34.png" + "path": "track/junior/flat_to_steep_1.png" }, { - "path": "35.png" + "path": "track/junior/flat_to_steep_2_1.png" }, { - "path": "36.png" + "path": "track/junior/flat_to_steep_3_1.png" }, { - "path": "37.png" + "path": "track/junior/flat_to_steep_4.png" }, { - "path": "38.png" + "path": "track/junior/flat_to_steep_2_2.png" }, { - "path": "39.png" + "path": "track/junior/flat_to_steep_3_2.png" }, { - "path": "40.png" + "path": "track/junior/steep_to_flat_1.png" }, { - "path": "41.png" + "path": "track/junior/steep_to_flat_2_1.png" }, { - "path": "42.png" + "path": "track/junior/steep_to_flat_3_1.png" }, { - "path": "43.png" + "path": "track/junior/steep_to_flat_4.png" }, { - "path": "44.png" + "path": "track/junior/steep_to_flat_2_2.png" }, { - "path": "45.png" + "path": "track/junior/steep_to_flat_3_2.png" }, { - "path": "46.png" + "path": "track/junior/flat_to_steep_lift_1.png" }, { - "path": "47.png" + "path": "track/junior/flat_to_steep_lift_2_1.png" }, { - "path": "48.png" + "path": "track/junior/flat_to_steep_lift_3_1.png" }, { - "path": "49.png" + "path": "track/junior/flat_to_steep_lift_4.png" }, { - "path": "50.png" + "path": "track/junior/flat_to_steep_lift_2_2.png" }, { - "path": "51.png" + "path": "track/junior/flat_to_steep_lift_3_2.png" }, { - "path": "52.png" + "path": "track/junior/steep_to_flat_lift_1.png" }, { - "path": "53.png" + "path": "track/junior/steep_to_flat_lift_2_1.png" }, { - "path": "54.png" + "path": "track/junior/steep_to_flat_lift_3_1.png" }, { - "path": "55.png" + "path": "track/junior/steep_to_flat_lift_4.png" }, { - "path": "56.png" + "path": "track/junior/steep_to_flat_lift_2_2.png" }, { - "path": "57.png" + "path": "track/junior/steep_to_flat_lift_3_2.png" }, { - "path": "58.png" + "path": "icons/server_password.png" }, { - "path": "59.png" + "path": "icons/multiplayer.png" }, { - "path": "60.png" + "path": "track/junior/flat_to_steep_diagonal_1.png" }, { - "path": "61.png" + "path": "track/junior/flat_to_steep_diagonal_2.png" }, { - "path": "62.png" + "path": "track/junior/flat_to_steep_diagonal_3.png" }, { - "path": "63.png" + "path": "track/junior/flat_to_steep_diagonal_4.png" }, { - "path": "64.png" + "path": "track/junior/steep_to_flat_diagonal_1.png" }, { - "path": "65.png" + "path": "track/junior/steep_to_flat_diagonal_2.png" }, { - "path": "66.png" + "path": "track/junior/steep_to_flat_diagonal_3.png" }, { - "path": "67.png" + "path": "track/junior/steep_to_flat_diagonal_4.png" }, { - "path": "68.png" + "path": "track/junior/flat_to_steep_diagonal_lift_1.png" }, { - "path": "69.png" + "path": "track/junior/flat_to_steep_diagonal_lift_2.png" }, { - "path": "70.png" + "path": "track/junior/flat_to_steep_diagonal_lift_3.png" }, { - "path": "71.png" + "path": "track/junior/flat_to_steep_diagonal_lift_4.png" }, { - "path": "72.png" + "path": "track/junior/steep_to_flat_diagonal_lift_1.png" }, { - "path": "73.png" + "path": "track/junior/steep_to_flat_diagonal_lift_2.png" }, { - "path": "74.png" + "path": "track/junior/steep_to_flat_diagonal_lift_3.png" }, { - "path": "75.png" + "path": "track/junior/steep_to_flat_diagonal_lift_4.png" }, { - "path": "76.png" + "path": "icons/sort.png" }, { - "path": "77.png" + "path": "icons/copy.png" }, { - "path": "78.png" - }, - { - "path": "79.png" + "path": "icons/paste.png" } ] diff --git a/resources/g2/track/junior/flat_to_steep_1.png b/resources/g2/track/junior/flat_to_steep_1.png new file mode 100644 index 0000000000000000000000000000000000000000..992c5bdad436f723ad5cf0d75d2c2a5f2227e671 GIT binary patch literal 518 zcmV+h0{Q)kP)j0000gP)t-s0001w z7f+)fU$-Z3dka5j05g|AGlMrTt3xx>PbMkGovK+_A*g?bE2$yzFz zzw`o(JwXprhQeCzQrj%}V-Fxbf4~3U^LK!(s2D?N#bO%7CwUMC(G9{$aTBKJZTt7o zru4%8wge|Qvu(3?%9aQNWVqslC*}r6%><>tpMuggqb5v01E+%07lQ_Ch&aJ3js}K` zX2cY}S~ljxDR*!p`b6ceu3gkb{p1QaPAsMAW@aN5`FWOaxQPlv!}4!{2EVwkGU4ug z!%Aw()kT#4=%%$2{-7M)w2(<6-pXijLChxH&?u}cqO#%xQ0p3mPm>C^#PxY*5x>Tz z?Lsn}AkN&eGIUW;6+@3*=2N9@x%9GmF1u!$w0RVLT5iWoGhh5;>4rXg@w>*`^2pke zr{&3EcWHBKjXB6rg+-*nnY1-@i+>VB4Fl1^ae<8FMJNgy*2h%`Ul&pZqasU7T07*qo IM6N<$f~mRXoB#j- literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_2_1.png b/resources/g2/track/junior/flat_to_steep_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fffe5fa9f06d6031cf70c04922f96ff28a7d912f GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^DnKmC!3-oNf9zQVq>KZ6LR^7#v$=jXxBchx-TS@u z?HQyO%g6t}{{DHma=*C$cJ=(}_Qv0*pZ;I3zS`ONwsn6xgR!DgqykVIV@Z%-FoVOh z8)-mJm8XkiNCji>#f!TR8E`N^xL7Q9`ofFf_G_0`aT{*`yKo>?|rQoP0n0k`_8_QXHJT_zujY=Pg!QS+Dum0bJ(dJy7iiIwc0Q4 z!;jl%rFwn5bL4g5=htdqKVEvXN2Kumx05EKGtIxJvTQi4vg0Ap6%3xPelF{r5}E+c CyJ%ei literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_2_2.png b/resources/g2/track/junior/flat_to_steep_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1dd09956fd38142265bfa277e441e6450ae989 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5eZ!3-q5rDLmrludw7h%1n;=CSrto@(X5gcy=QV$f@#laSW+oES>Oh-C+feRzYp{EqlwO@BfcwkD9!;@VWR$?i%$= z?n0N>7u+j~YE)9%vm}5cVXCbAj&q{9yTn&q)jq(mds~^v{Xd`e92q&kPx~+L-#gLe zcqd=Sn$^d3j%(-n)V|q$B0{DK)Ap4~_TawdAZ zIEGX(rk*$CaxxTPx$r~q$hm_?`!{UZ%(ZFnH8Zb>)_N|-JYUV61GkdA}fYYWs zbFS}C38T&H%nP3-=H>2;m6m>S@6sp* z&0is9ix(k{Ic@9}d~#Qlk5sI%uRD8}QRCUCNT+DKJ;Dvoe=S>^wd&W)zo+cEW=Naf TGUh)8bR2`HtDnm{r-UW|X#8t; literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_3_2.png b/resources/g2/track/junior/flat_to_steep_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d47ffca2e2f45c0584ab64fdcfd0aaa42954a10a GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3^!3-pq+%$6mQf2`@A+A8Wn%jQ6dj9+9)wiwt z`^Eh~m+!vpul>JX{eQgtesBH7^6}{m#{Xv=ZqhGZXf+ zNvIU_F?{ZQEUb9Jkp0VRwcezX>gG^(?1<+ewz^;e^hI z3)kdhYRhGQhcX=>oJL8WW!BpmH}B=>mmYtp=WN5abr4T%$tb00000NkvXXu0mjf{|6^G literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_diagonal_1.png b/resources/g2/track/junior/flat_to_steep_diagonal_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6b999209c6eb1f6d3e843f006e1c662e2b84e9 GIT binary patch literal 1229 zcmaJ>@sHDV6#pJ)+;PXH=wgOfVZ=!qtx&a`JKZHcEM#1YSD>de?m{&+3^QYe8U~r6 zU?r1GEjq%YQwEI7A{8o}T42D$$(>|@2A6Y?MP^*Q2?R?RxtZL-*YXee@_Fxl-Y@Ty zy!Y~UtQ_!nws*Ay06P1ZFI{ctKHEKQt#)*lr{@6B3RbQdTxOU5V=j-!Ly`ndQyj+# zLQs-KMNyK;w5}V4La9=*8V!;Fln<~>M=~SARqR6+~9tRN$sGK7!I`VO(oOL#eD6A8(!NVyP z!h#0?769Ji5D`R1Q5C~7KHmt-j)g*HS-zf5!+ahkogT_Xux=lZ`9(Y+lY;7#QnaEm zi5!I3f)|bW@p!=xU4S+EKY7PKxur!QHP|LtdnZK&Kd7((asY}h7$;$dg+>?_ zW3Z9|_ZII33=IOTBP_V&2%b>=*^H3ODW<8_>n60d&=4S_9hB-~Gj86%#EMU~f?6Yz zYbJ|RMirJV%n7`1ho3-#lsn9k(Ga7`;Y>o#X$iBS)hh+qsCpR&8UR)RguvFafvGW6 ziQ2@QO4>-(YErRi6FL~=!eJpA6-h$z5=n~GXfn?bB^Iv-Jdk%o8G|Vj8Wc1c`|{6M z|2Sx;mUmYVaG-DE(psBG`cXoYr#@IXR;?dTdZR$^i(7UjS@4U60Ep0tHH2-|$FFgNq%jVmwX5EZT^qp<_ z{mJ`3eBe&cjFwIHo+E2dY;#^6A67Od77d;9bk-k5t?2p^fAr?~FMIxM9o(|<%ej-g z`Spvhtoq^Uzjunq)KM)l_ZBj%?Z)ZRsd=0CDbFtI>Ra4B{YCG6!-vGl^RvyjiHY{N zhDq+D-FwlGJN@z2S3O#2 z-Qly}T^ijd483vj+l4*)r`PtUdWeZN(%rqA=6^D|rt!gG`->;L(nk*uA=zWUC6hN6 z99m{P@(@mq#9p3yvo^8Ih*>MT)m!@3Tnan3;oO$v-;6)=bwB#>qKnZPPYmB!w+U4k zk3MtW@%K(0P{04Y^Yp)GP9kTnTnPW#eI@qeiOadGU6boCs2S!TaT@Ho{ov|ziM`wI QJ*EC-14|FT@Y?(T0lJhYGynhq literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_diagonal_2.png b/resources/g2/track/junior/flat_to_steep_diagonal_2.png new file mode 100644 index 0000000000000000000000000000000000000000..95e1c35c8d9b9aa2c941c121e6b294bfd4b15df8 GIT binary patch literal 970 zcmaJ=(W~2Z6h3mr%$1Q{3#*uiTiVSso$;R-_LRB6Kqk zfmJ9PFlf;Z3KkZyV89}s2JL3lJY2AoJoG|`8Dvnn0f!V;r0RY6nf(JEzH`p^y_|F4 zob%zO-P(!cFB}Je6ZO}3E*E*TaQxUt5zm+hRe%k+bYbs&A^*oJ)oPVx8Br7zMKTP{ zvdnh7-RliTqcDzVX}VmkSOx?hWT~WSWl3_>P{4Ys)uQV z6c*>br=K$t-FFm{NG6GEBNjZEw;G(T@mmfmbN%8%x2RHAX5t5j-aRiPP!=PgO@ z=tVJm-)xq%t4{kXb=4i+mY{O*HMG)Q2aF=Rgucm9eH#aawfO zs||f)GHEACkmm_1dJzp^?ULYCWS`VS%1n80sRgUnWZjz{g&CSJsWNaRR%38YAe#zn zHzdz#`dw!dbdxy9(-^HXPLfavCiJ8fCu2zvwB8NhK7KH*zq~h{_%N~AJq^I7yysN;u!~0hYajm}d%HH#z zUHrKI+)rD_p8f}=H-6QAIov+|&8KJIx_{-u#`fQh&69uL-M;#g^5z@24mV3D-+BDn z&du)W&+lZ}7Z2{e|M111AN%iqa{Z$-t>oE_yFWY#?E`P?+xXz(*nwNO>!qz{uIDfB qxgXrT{oSeW|M+YC|8Em@7=HPp9SrEOnkonBpp#3ugvu_YBsJW&8{C#NyRif7Qm`{eC|dM1r)jX@ z3B@$C$f?zoSVGa0RaQdLu{5rP25Vfj$_bSetXgLW9m80(=#+sUkAJ{7&-*^l`^)?M z@VC97IZ(hah=}&PnfM%D@odDn&Np@ z5L}WZ1_FUdB$iC3ve|sGSgqAa8&D45*m{@Cy7ep@i)h(x(~(w)voIW1Hwt2AM7 zI_gE%EITcVfX5_qC_rZ-&RkL~js`15b*h?WFmMy#qd?&eanXgYO27_oc${42Lxax2WaoniKQ;_BBu^7r^Fw$hD%r?&AaN~?fIAu~$98#1H zB-n78S99)E(POb=Hpc4U30APXL|P1T!I(Ri5>uL-Erzv9yfl?DQefi2>;a1(aK&Jc znVBT+%21-_43#9cs$|g+N0Di z9*Xwyd`J+YK3_5v%EV$?DpktotJNw3Oawe)Amc_ljqy3cQ=)@qms;_qt4h9>tV|cC zP(5KZ+RbLhV&w^&;BZJR7j)~x{K-&wG@dMGwOWY+H*1i1qwKaQULxwJ5!NYyhN#qmf@i2^AF!91bE0VG2?V6gfaVAkmCMBvLt) z@}gW26;-&qcssB(I5~q?Fv~t7tT1s^NT&mumZ(%Tq@15?fQo<+=w3Q- zC5Q$5y0AwhI-=#Wl*{RYcDZ=3SMd8q(iX7WA{3dR$qZ}Db40~yMQ#g{aTFy{ib5Kz zU;a0xp9giC@nTOG4=q!@*Z1w1xNod?`45MW9*O?5 zd*SA;b36K!`PR(iCuTLGv9^|vc~6LYiNuQJT<=iaNGC&?|xNxaBFD)@!L7a z=DHQC>61Mhmc4m}zsEJObX};fy=BJ9u~vMIapwcgzt)*1TTLGhcAsfm75@9?Lo*>Z z(9@8=_xXin|4+|wJ+ohEp3EGve;#t^-IQx;*GQXuMGv|XXYf}m1Z_}s#eB-Ugz8#Yb)`TYq_iSiB z6#IShiu_2=zK72!=^Ib_UupYp%l6yT8}{CQBI3TBT*e6Nf1J6vmwGgJ=Yn?Y*t2&Z OQRlj@_7iP=d;bHP#TsJ( literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_diagonal_4.png b/resources/g2/track/junior/flat_to_steep_diagonal_4.png new file mode 100644 index 0000000000000000000000000000000000000000..0db6b59516a9b6b7f6ab442106770c0e4923f983 GIT binary patch literal 1112 zcmaJ>@oO7(6n}Gc8LeGrqs#Ebvxa$-8^&?Y+jc*k^HQ_!+Fsj>M9JW$r%Oj1H@Rwr z2&bl+x*(?p%^+wx4;R-!gI2j|ko*u>r`b4Nm8_my#8l&$7)Hdv3Vyx)13o_QeLnA( z_xa&H-kalN!T#PmdjX(-czKHm-N-{LDKi0M^6!NNC7u|0ldYpO2#a9LI_x zFUt{CRg%eMHk&V%%xZPnw%eT!bW)U3KaG(mwX)0KSQGR?;Fa=YC|fGI#^T~xu%l`*kKMjKqJ88KS%a$8^Slv-=`F6txQ zZrbY&;y#h|%M7FPLP~OmB}(bcQlVs5txkgliFc`@Ta$1-M&=T1F(sCB(WRnRujE?w zYNvAzu>fHJ6+j0l0xSVEU4R@297?FDXdt^T5TH+H1HgR1y@Y=YH>272MdN=E+;Lk*lJnG@xr1&CHh$1D;T(B5{k{}?MSf`FL$%G zHM4>0ZNdXI?h5+d5f+b$R3ggjTFl63~f1oXx=3@tK!j zmG*ECSX+~`tAn?HbJ_2CF827D&>t(U*@G7{y`kWJAD-GhFns8t(8YmQt}G3Xyfizp z`Qz;ms(aSG_iIn+cpyK%)4S!$=->ZT-(9=Zvn%uO=iRx`>NBVA9@=P}n|gtNAOCsB z3i={26?k%WW_WMs-XDx7u!$4j4$e(Z9Sbq1N3Toi1BJ^Q&Yzt!pNjANar?uO%_qN9 zg)=X{@#l?gcdcAKw@Le~Ngr7|tn7$?Iy?KxuyV)PPrrR&%+HNJ%|F}U3Y3mcOn|8Em@82-$mMGDlUh9ZYFP|a;tsCdKzH+F;DD9e!@aKl2XmgK-f8o7|eG*V1; zCzjd35j%HgH6EscDg`>eBo*3GphDe>tD!(4jTBc|2g8)nWF5}rKV?~?~ zkV2U9$CzN+9?d)SX2fJM;Ea)C%{GqYytG%g%TX?x@g(#9Oes{TCNu=lGC=15dN)8t zm08wVBB(7va2czwzz54>5}u)rTGouXEJmLd53yv7XEFktllWp-C?}+9CJc*7jn<4B zt(e(CkS>Ptv24KQiuim9S1H5E<=ED0F_i&NJGXDCT(;SNN>>=EV*K3Fy-Y0N zNQFJQM4*&QRw|>A0Kf_W4}b_j7=RQ2MHPSwXcD@47!JaGjz$580Y3qv7Lca_WB}xJ z(1*bw4Wmw&_QHG+JX^dOP$aO@DkrP+xQu?$5(=`hn2^bYOQj4{ybuS#+-gG9(LudE zigI~eEZf2rSF9?fC!+=5$1rTAW$sw>9it9n~iZgS+|?ROoG`Y5m=bS5|k-R8%tILwCkY< zg#ipk37Daj%m1x#@0db0yEn8kplSH_hl;-3+Pt!TP3MtsTED*h*7TOXtKHB^}{ty{=ZF` z9y~My9T@&=mGx=;V3V(UQ2n-iOnvGRzTjwS|E;m1<4=|?sULs5RDEFNd1*@5Peb@o z-KHIl%T8asn?BcdY{iA1#%m)h+VAXBNt^e07yijNy!Z3NeaXoq7hl@8zO$}>%EqUu ziI(}Dzy5&X&&_T-+Q0LiUF=};_nvHBSIxwh!S4>&6=qd;k8gW5{_n~ArH}jf9{-;I z_H6G*6F2(~AhmZV<-V>6l6$%M8SR{Ze2Hggyy4F4>*VWu60PYimo9ByvIFhyTl&gM z{r0|5c%y&Wu1j%W_Z~r-@?iABk3>=S4xRKBZI$|ka?bhwh$&wEAn@YwaL4NM`R+Ne s;c))Z-t5>P?b`U`r|)(g+^N4});5lu*xWcU{n>A8ZE0&hxoS(te|e);0RR91 literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_diagonal_lift_2.png b/resources/g2/track/junior/flat_to_steep_diagonal_lift_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d41e3cfdebf0f6dcace8317f5b0dffcc1c4bbfb4 GIT binary patch literal 1004 zcmaJ=(Tm%39RF@ZbL=+DU11r^Lk2~IMu;+TD_Ba^WR!l5XS=l5i}S1u1N>#)^AVMwsqoPaYj$*WYspo)9DleVF2Y~Y&#=%38hb$M`C?k@+Ot;)EUe=lf`h3mg!7}!|?){Q)oux zc~g?>YC5diu^YX1CyCFVSwvM6`5sD!G6e<;4FQ4zBr+fckbxtcMV^cT9rf!d@!;X&Igmss%9yU< zR)uajg|?@4yR|s>CzBYZUPKw#>ayVAvPY@`WhA^aE%~!bckcEV!3YhfR2DcAD=?Xo zKem@mrsif$- zR;?N=Q{xy{V11DdC1xPglVT33B(f;fWKkfXSV}Md_UPwpDIIz9!j=NhAKZO4Z7y%F zuU$O7n|EGXjm|Eu|NGd}KcTI2JC!51%WKK+AKdu+(MNWc9(?;=Yvn$6b@2X|_di;H zC;z>BWdna^@5C=R^0)T?TsgPhd*X5G$J77p^S?GP?Hb#kKe_tp8PbN!tM6{zTwL`p z`L7=yU3>1UQ!8f=?tcBr&A+6hPra6ZdG*8H@2+p`zcISDvHjL>U)))mvzENLrypGZ d=9IO7dmmqUpx^o9*@r*7ncrIf?1fj}{tuX%wDbS~ literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_diagonal_lift_3.png b/resources/g2/track/junior/flat_to_steep_diagonal_lift_3.png new file mode 100644 index 0000000000000000000000000000000000000000..347c8f3c4a4f64c0508a333a4b557a3596453fb3 GIT binary patch literal 1312 zcmaJ>@oy7#6#ou{mJKMQ#44RDtU`f8N^;_XMGtqK-PUC{cf+DpIxV4_1#axX3PlT4 zQrH0(SD~ghsOoqY_xPz=;8tl!PfsoROu%@?260Gdh^F z!Z8-Ygc<+>0INho$z*P&lGSKJdVMEBbldGIw|h7kgz>l%k*hI3ESrFxgjQ}tl}@9UG3&!NJVuke$CmQbgAq?Q?jPkNa4;d0 zqZ+LlLG2jsBuU0*3pkxohKUD*JjbQ``m)(91WF2M{1PNA!(&P^skNtZ@1P}=amKQ2 zUoM&%OO3(;txSe06h@Vr)aq<{J#8YqR&kgs%J{m&Q6a(S(ipIsBs3{=TUD$>8*pI} zFBuEiyCd#YJdjBxa=BrM0bmAz27m=10zfwagAxEm5IA(vFcN}7iqHTG0X__HMj#LX zk^oW)$RIF8K+XY^UMPgXv&Eypgab1nao7}Yr`E?B!y#KN=HdBBCc{I~OKAs)s{msa zL`Y@jG?bucvzAEC85{K{$G9|1Wi@husw768%z~*LB;vB0ShpkObH^e+J`u?X37AWx zCKKcU6aa)k^b(75Ppt%gnR zV&iw=1DBX&R$aBcQS*h+{$>AuSJA+_IW09)H+w@r8GdVJD$UE5&)xdfl2+!ElJnm$ zk(RDsSaR{|qS4Lo9xpW%HrE&RTp2#!tgP5^Z1u*Eu1{(hH*H*A*ON=O?KrXU^<&cy z;${{(QY}66W1nPx!^g_mZxr=@di=SPr@L#4cCXzU9&TTq{{tmm(cE;R{gCvC zH+;Ejr>f>Om$zrntlF)I=QgDW8j+Eg#-s8L^EM1EUe>ruw^IJuKabG2q?4*A9{+W) zXVt`^!lkmz&wDiw$Y1h!nC*0?~SJz)ZTs&=i{zGod9|f@H-p^AO+P6LX Oa}{OPhI6I$d;bHEM?;PP literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_diagonal_lift_4.png b/resources/g2/track/junior/flat_to_steep_diagonal_lift_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b2cd5dc98b7e545421adc9e7199c5585b9b1dc5f GIT binary patch literal 1209 zcmaJ>@oy7#6#wEdWgAdPGn!DPgEDUMeyHIlM?BS8mMN025)4>!Y-`FjunGR4aGDvjbd@avg(Zn<_9DJ7`i0G`bmdsS8s#2&U zM6?UETMBt)9?6Q>Xo4yzp^`3GW67GOHtWTJ2XH8ekw9i0Il)m#Im)0>8Vs9n>7uiGBHuF*CFr-08t!R&PnAxYzd82sAM&))?)d(Jkii=v*jji zN1aaG?GAW-Eb8Y8LZq1_XAg_(sq|P*w~A(?LIRFni~&$}0BD1uU|fWn3av7O009GO5*PtsF#xgv3T~Lfpvpia z3QI|7so>$_aX?cb#5kh7TZ*A+IgnHNd_G~CTCHY6+shLHSiGH--Hhtx3`DR9xgORU zv3yf0%^DS0t|KmhdmRD4GfaA;EEbQ@vJ_R*QeI1&MXhEPVWWc6G&BIT0EEEyvVq7+ zPac#f8VX#ANS8aZ=EPxAJ)GKzB+y3=A=n4+f*UAi>t%C*X>)MBh2k_u|26=iqm(3pXzAyYk$X>!*(m3|}7ozI5fOx%$1g xOY(W)!LeHO_!l?#YG-z9yKZoQH%>^m+}qE_M?ThD=RJHtTQ>)LM>g#`^dGO07N!6I literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_lift_1.png b/resources/g2/track/junior/flat_to_steep_lift_1.png new file mode 100644 index 0000000000000000000000000000000000000000..995693fab846505a69df0d8f162304c83e72eee2 GIT binary patch literal 595 zcmV-Z0<8UsP)Uym10dka6eCvTTOGpj>0gEucfQ&UT0V0004WQchC9TOMLPFWIeu%JM+pP;=!kAh$lb) z&&4zb;Lxk3m|aIqal)mZ*M2TH0l>Mw8~a#jEe+Fb(sFE z>&qcFVq$)cRL5hWT!;=_#-gprd8U$S{Y6BNbEMaOiWkC1#$V}LwF0Z4VWx;9}ivTxF%j&)?+&Q(O+k*D`s~!5j3chTy70bT2E*$QP_cgWj!3VnC}y^wY{7FT+Ya z?tKI|>Q-W4W_slo&a~6-0=G=9^g8<(2kNrT5iBBXRK5pwK@da4Ws&%N4CBgFWQ1*p zOF;)Z9mfb|>qu?m&NeOU$p|5|o3wdpTtd1pv({ygp-P`AM194SuIZ7Jldic4ePtZ6 zcsa?k{oe|W=TC?s<^js~YgFhEdS82=D4tqQa}qm$f3LmOpQ h5tHTPteWc$>JLnx5b+T&MMwYu002ovPDHLkV1g?y3WERu literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_lift_2_1.png b/resources/g2/track/junior/flat_to_steep_lift_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4dac4d418eb3c39185d90264ee24542fd5706b92 GIT binary patch literal 326 zcmV-M0lEH(P)*L_t(|0fmx5 z7K0!RL;<5hgj%ts?foy>0o#ob$@c$D2A}GBwCM-~jZ;UUkvakmSHdg{Q>ix_A~TD- z#|cTmuC`gAwxDvjW0p&n2Ur*lVOjoyXKP)>9f#W*aDo_fulN>2+#ey=GZ5UyrC>D**=kAFjF9nS$ei+}KwK#=aLm(T~f23ZQ9pKaIbF YUxI%Hpg0Z=SpWb407*qoM6N<$g5er}EC2ui literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_lift_2_2.png b/resources/g2/track/junior/flat_to_steep_lift_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..94f060add967d6bdaef954298b7612428111c214 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{e!3-pqi<@x-|wyeJY2b7+&{m$dAhyv|9JUkbNzG%W0U$l z>OdnHOM?7@862M7NCR?eJzX3_Dj0qH0;jbYaImoY9BA02bMOBe=aM<;wPCZ~>6kZc zQQCTKy1B<0l`FTe9TQf$(77SveQAKW*Ke&Q3=3*@h#Id9`Li&K<^S^!tACZa1gwnX zvlD7szIEq=NvXztTnDxsKDGUCq({_=0a`9J-a&))yUoS)6Q(4%?Q RZ=gdMJYD@<);T3K0RW1AYB2x+ literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_lift_3_1.png b/resources/g2/track/junior/flat_to_steep_lift_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb20f7ecf87aebe9271bc0944ac785af255ad30 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^N zzqr4BaIklBvc9wPYG>nSbN%V|#@p5N?HQyO%g4WuUVYoTf4{dr|BICGK%I;wL4Lsu z4$p3+0XY*qT^vIy7+WtmPC9JB;S!j*)0D%culE0Gwl^VVB@z3Z^tY;Q`nq=GO~Wc4 zWu^LCp;L1wSuXEeICp`9v1?9}iuua}8XY^UrQ{tdPZdZrtTy>?+*2*F@_uS(L4dN5 zhVR|advsWgXU?%?x%o$G)A6^(Z;m$G%r4xdv|WA0zhh~f2Y0`}xv@@p_qyb@pO?JY bck|x6*{oZS@IPJvbQ^=GtDnm{r-UW|E;?(< literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_lift_3_2.png b/resources/g2/track/junior/flat_to_steep_lift_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..21ee9e0ddd232d3abfb7f31f828ee3b58a4470a3 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5ej!3-qBRN@8+#`wM;8}g_Se>TcD4@=PG>OAZ*Kk{FaN(@z1dv<|7_#u;mZ5H^;bI^ zpKCkg0yKrOB*-tA!Qt7BG$5zm)5S5Qf-$x~P^ejf$K@ugh@$S&BfsOfO3GRv`~I`+ z#)gM{5|f1$6_l literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/flat_to_steep_lift_4.png b/resources/g2/track/junior/flat_to_steep_lift_4.png new file mode 100644 index 0000000000000000000000000000000000000000..08c8af888d4c4c1aaf4ff19829b9bb2c831f5195 GIT binary patch literal 721 zcmV;?0xtcDP)a@x8L`d z%Y&Df?^~;T3qRXCk3UmW|6d=E7f-80Gyj`2ze_Lkce~S1D?b1m=T{@QCvRJGbN{zL zmT>G&00001bW%=J06^y0W&i*J6G=otRCocEl--u2AP|K8r2&;0jSw+vGQXS+0|8)RaMoOX#o{LEibW3Hv-BQ`3rJ71Mt;V<@dGm0!$00 z3~G7~&IeW9TBthodK)=4*7epH1EwhMQz?69yp@9|@hZ#aN8{P?ejHSHM><;`nU_6d z7Kt@HG~0Lf^lNRC`12z`?=5ZSvb3i^y*)4|9G~W&GLF~#9<4KOtqTM7GzTw^9Y55b za{MIAxQ+gnh~FKj-l9L>kW*|YHU}<@k4~}oc*IPRLwu7kSTX@OV2e!trf{K3gMYpz zPL8V=0Rm!?x0y)?#~+F=RHcfp+a@l2?*=Q-<%?eSZ^@)-kOL}@^GhF(fKYzO0P<<>Gm60E+hHIX(3p~joz0JITwx{Ih=R7@c^!lpn zba~G2>y5-HsNMj5iuZxn^Q@HWD)VTe9#TBT?e#{bFR?rTw>8D*#BUqGy9I%bHe%xV z-U(y&H{3d0^Wu}dl}-vpS8CBskqdQ+)InPnZPZ2ASYv9w#0WIPz3JLGBNZA2<@f z4neN7zj0>K*KxyD{FBFi5swG#j>~x1@EdlAD2Hf=T{>?02`}A zGfUkSFaQ7m0d!JMQvg8b*k%9#0h38YK~#7Fjg(Oi;~)$~?EgWQ^8XstWhIyVb34lEG3vzw{@Vv6|aHWxka2 zd*HuT5s|s(mfM7LPL=@?azt8ft@ZGd*Q^G6v|1FOvsx@MgQZq=HsIp12x9nkSaHVz z5-d8)gz@ULq7PkHoop7TA>-g`yPQlmB6k#8uOf_oRYHb@!o_E`wd+s;>u_SSkf>`T zS`kl}SjL$R*k>byoeP2PnAsM_bRf%xL)iK{N5!2RxZ7~A?OICUV?&%^DVK0@ThrQf zF=rXRMBn1IKIAshjgN82Gnjm1TJYRyKNvln+rf~2mHx$U1Ot8+y^drjnA#hg>DERo z7#G_cwRyo@C#sB~S07*qoM6N<$f<;I4Jpcdz literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_2_1.png b/resources/g2/track/junior/steep_to_flat_2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1aab1c2aad780d50b140c6ccea8cc976513e6b5d GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5el!VDxi>JME7Qd$8%A+A8Wn%jQ6dj99~-S4AU z-?r{wEFYiFVB9b6zuMV&y1ns!Z~bO-{mcH^&jt5Q1FB{$3GxeOaCmkj4alkUba4!+ zVD#|-M6e8TDQ(-WV7A7+TpF!OBaFsJ(iCq%&ThPdUxyG8lI$c>i;mdKI;Vst0J|Mwr2qf` literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_2_2.png b/resources/g2/track/junior/steep_to_flat_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..075dae7638a5ed80e91a52b7f7b51011b3106f97 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^l0eMO!VDxUZdxAzQU(D&A+A8WU)+DOeEfFx{M*+3 z@1s{&bK9?WHcn?S-tVnH-QM_lxN@_({$+pd|Mlwsx7)jMoDT)+VJr#q3ubV5b|VeQ zY4&t+45?sr?cK=9kltqEpjm=GGeRLd6ekiDgB`UBjJO0#ctCJxEcSj{MV;HCn^M#J8m^nqZDTyJ zbL;h=ijhZk_k~9;W-Qck^Ip7fc7v2yd}ii9uWg!7|1ta&kzOp8EjJhF90pHUKbLh* G2~7a6!eJKx literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_3_1.png b/resources/g2/track/junior/steep_to_flat_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..303ef490ee9fee7a81e983683b06ea6d6aaed3fd GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5el!VDxi>JME7QtAOdA+A9Bee~+v*8TnB{@c~_ z7t6<2bK5tY>#ue;-tVoS&R{&<-q@Z&nuqJFI8Z5LNswPKgTu2MX+Tb?r;B4q1!L$L zL#}263DyVuMT}bfY@J>*GWF}kPJY+As@P#q^X|o)cRyfdIo|VVZ_k4IN$%77zkd?G z8|UvTlbvv1{GCP6TrID^rVV8_dF=t4m%MM_-~4jAy_??09QxCmGJNZT!rF3v is7|^$MQys*3R#&sA_-L!qZ)w@VDNPHb6Mw<&;$Sh-&7y~ literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_3_2.png b/resources/g2/track/junior/steep_to_flat_3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..16f8ca9e62677dc5e70eea1344fc18607509b2a7 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5ej!VDxQziT)QqznRlLR^7#HMjk3>;CuAtGBD? z_lx^4mXE*euf5+}|9`#uYG>pB@$%2ZmD3rFr`sDho9io0Ih735!&nmJ7tG-B>_!@p z)9&fw7*fHgduAi=AqO7T0At4hwgo3#uV~y;c=W3w$4lx6k07h6t5%tV)ypT*Et3Q# znqFzWiK+X(?<+5Z_VW$4>k|EXqn~|ryjSq@PiFnz-bQ|{M{&1B?w|S6xS8kHQXRu3 z);UjB&r*1FuI;A9)f>~6E1f@8TBotfC64zy>nWKPk$%(e8~tL|%vCzGEOd@A&`AuQ Lu6{1-oD!M1r;P)_(=S-!t<00001bW%=J06^y0W&i*Ir%6OXRCoccluOpEAPj^N zBmympNYne@=}qwQ>wv)EGRrxY&!R{ak2AU_{`o4 zfpRAoR~L?>uzsG`P^v8=ey?8^t)}SG$(dvl$V2n53pY*z% ztS)jffF}enNV>n^$aPQgak zl4p{ubzY$)lNkBWAuXC|{+JT|&&hf)$1A4%HP+$#_BekQ2Z?1dhFF zp*agz19fxT5lN2ou8xj|^-EqFf-0#8_NMzG7dSLvAh2-qDzAbXcrWDjmXjkk7nJY$ zF7UQ|E*SF#59eQ3cSdm(JgxqiU05{>hMH_sa`{x2Lu%>C*O;m`UXfZG_*V@qAM P00000NkvXXu0mjfJUI*N literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_diagonal_1.png b/resources/g2/track/junior/steep_to_flat_diagonal_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b856b344c404c094bf00e9204fa93ca8c77c59e9 GIT binary patch literal 1238 zcmaJ>@sHDV6#pXT2As#h{V;F`^BiH3noQDQg9UohBjYGs&nr5$rz5E{aR~*BH^U_L z*ulIkSac`*VYv($*gzA9LMSrAqC33Ez!Dan+LIj&Hw;LTp$l2yYxxI!`Mme}ykFku zhxhV^dwaZXGoF|M0BGx8-PLDur z;jKJn7ky5NbEgFKScJ?ae1#0Jk4I~Ix?$wK4&X;XhyW5}k$FolW-ZCKdcgr}9$5Fo zrUYT$1pp0z-(umdR?*>*-0n1vAEW8%Q;Y+i?DlWC+>H9dBi88oP-NW zGNMrNER!zyRXyOu93HO=XAp|RSf1pgbTs8psl2L*c|ESxftC4h|q_5g5(fm^a* zDZ4l0W^)9u`C?@uZAf`|j7Dr6<_LL_m=BjZGAl4zgexV4iV`t$iH4@YO5SS2+=vgw z0t6Xim>9<;L!nG8mP@5HRV^2bhG9V9;DI|~L1inMbua}aP$r`lHeCy44XIeq)S9IR zY(=bA%x?EOT@2#ka9p71sNWnG&cx#5az@W<^)dnclto~yqTeY6kz|-qqD(d!7+1tn zE?Fz(>-8Iu0Kf-;0DuI50>C%`6$^kSXcC46sHCA@qTPT;L7V`p7w9yA41l~H#!#51 zp&EpRDAd#7;o>nsk-$e=f}C9pA#uqor@3r4qG?L4ra{xo5ddhom5}Uo+UZx_ypBr- ztJFi;MxxME%dlj)Z2)sxydEn{ID-rt4p5R9OvlBn64&xdP0z!68KWqu0;mHBf$3$! zEkzxXuqm))!bGxC5efxUkSxmtgIqYwqn-%nNf4+)qB+V_q>-A>1^rGax?vK9Dgiah zy!;F0$s;CB+1A&?fX?bK8%;gb-Sxuy)x(EIf}4k)eQan4RA%GZK*!ekNBidC$JxW% z$lJ~ZBN{r_0jjb2eYW=P@Zz0o!wY*qzqp8B^7`QNj>?N&htDjk%vrle9$R|gT%mB9 z-!w1Xy4Q{3!B#g{OkVC->^-#W znI$XvCvPG7tL&&TSU+(7>37Zrj|^OS<=oX2%|247j(w2-WGQlD-)k=)?OyZ||BrlX zbVK#ibz|X%V9+%RGT(=DI%{{|-BtB;0ejV=3e^24w3J%NLB+sDF9ZE??= zfwsM&d)KNHY~ypyaxaW$5&g|Yd);=#oe8{{>x$a0e0ZpyEl&N_J4wCHk%yBN|LCmvT5qJ zZT0*8AP6UuB+ut%S#35P3!(suysztxZkOsg?7$O(kushbX=cv~Z@G#j2GfLnOD0^6 z@=ZFlxwF2M1=?(4mD9nxjJ8$YCc$8!CxWkHV++eXd@*ipW+Ym(Xk(yrAECSnpa2*c zX5qL?l0HpGf^eoN(@tmMy3fK8Wf{penj*m}lwiHvlPLQFbazp;Q2=fGh%e9Euc_bkS^p$_Sn>o(EY1O~JY*;r5uJ-yTP1 zn)Zt#Uat#OdyyUBoPE(Jl!!7C+A0OV(&J4p-3GJsWQi6P-2k4#+AOY%R9EGkj_kYL zXy~T#u*l|9~iS`!%*a%nW;P$Hs2t}p-R<(PK<6} U`W5}~{0EPZPFml*^Wok909rPco&W#< literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_diagonal_3.png b/resources/g2/track/junior/steep_to_flat_diagonal_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b17eae0ad225c646e73956284dfa31afb62ce915 GIT binary patch literal 1248 zcmaJ>|8Em@82${B-NGQ9*3iOb9IU!iFHqzRl~la38+P@So4aX^6%IUOfkI9=OpzM8 z*u^qSJX|q#R;+S{0tFhr=na}!u)|@hDKeHS7cE*snV>}qX~L!-kAJ{7&-*^l`^)?M z@VlaW9?XVX9Tq!BFoMl3(qf1W#re1@s`)@xi{#6RVl88!fRO_x55W8Yml0ds z`W!^qWlsonTH^9Sp%9fy$zUZDt>u%jlr5~ z9*XvHTv!ldK3^&v&cx$+RV|K=Rw@+;P!Zr!giILdG|J@&PmvCl+)CM(uE?X+RC%IM zgN=m2U^AH3x~`BUM@NFt?W^VK2+cm|O;Lx9I*FA?)o$q<*0c}9|f zLMB!&WUJNdkOII3fCPXHKoWov07?jeI#?R|C74v8R$y@;k|06>)d4gXKn_6B1j8g$ zSg3koE(A3N+*`a2Ff?$nh*vNLd_+WcBorZ?4(9X8aybumFVq7_eA>X>8uaVJ7K`eLl}b`BrwiKc=Dc3P?-xmH&}NNNWRfN`jCGVH$}S7!F&MyMjD#u$ z^NfD^KNK$?)TwSu_X-ZQUH$2GUBB<_Sk}|oe|WcdbKl&izLRjQ>#Yq>I$zthZ2!XE zBS(KfGBn7yjeA(uA}o4g|z@r~@*jH~pUpV;S=RM(;o8x0^%y;LJ=W9QGTFGVi?u~eCI)oenFCr)fRc4@$T_e)Ff zC$q4r?Mpv8L^Q72dG^XVqIuW!(U+-}8rZqUEKHwy=wf-t0$G0VSex_Q{Dq4i-{v`U z`o@6|$&O6wduM+)FPxsWZ?bRj=o8!4*IPwHHbQSaETg@*X8parwQu&~&gQ+}J+t-s zO^?iWyIYVm7hn9iX=3i$jZS32yuM9aZauf)-`>uD%)-q%KQ4(5Y@he3}0S z9^;f{9@sHDV6n_UKJvm|OE?H!e5r+1TaxA97D*d5C4|Zp{>v27^#07U=6ZXSGYAj*u zqBRa2*kGf(bC4MqQgntA_5)(0lMGYIei+!u5hhkMa7YvJoMbUeAm(fN2YmUw_xZeE z-sgw+@{UYRMpvy|vl0MSjgO5^d;F-EbpLX%o;vv9F@WVTwQFXF*Zxlg!r?GUMp%{+ z1Wpv=vMgn@*+QXIshF0v=s2Bjmy7^I1J4b_6L?f2VhSm0v|MDf z2A8i2dLv;v$q*HcM8mW|a3U3#SSiQnN{NywnYLm%dD|_wdNm°OhW2xS1*Fsc-Y zR`7U@k?fe-lJ$;ep|d>U7pY)6N~kfqEV5Nuu(M*bAh(Tdr&j3M25MVAKZO%9l1egc zS`buGET+>HRjrjuwrRE&7dxE}f}jL=0VB&kwi*-~M6$)^+Hu`YS3BBbx8mM!_Rs*~ z^HG67G!zzyh)B~i$LA8>uuMhG*UJ^hvb!w?5*#KAJ|z*-QbaMs7&)O@Ox6vhSu46t ztJ}SU7=Rdn44?rR0Cj*i2FL@?qKu3T9XU-N2Z@9{17;K)9*_V?3Luq4I*-g0YUGfk z!-K_Bz_AeHv6L84(nMa1mUXdO&Dyr%x;FB>f=M7V1B@2n^-#jZC5P5Jaig2A_6m*r zW(zetxF4tx7LEAgOeiIgnIxwvDLt=Ljl69cu4AEYi{dzB0&)N$@Vq?WS}vH)c!DYx zJQUk)xzX?h8;=XAl$gm#WF$*P3JhtmWQ~g~@`M`;qeKWPI4Y9JWRT5ymw&l+eZJdp*5ke01B)vqwL>!Y#Ab^{<%vOEK>~r>^_z*TF~h4UKQQht}o$&t3TX zg+nhL{(^FzS)YG?~U}oGylpUq0Zrl=O4xwmYrMu z)SjX2fraUvV<&#=+6yn9{P@h|#>an{6|U_sU-;+qvB}iz>Mc9(?epE;yY0)@oy7#6#wFeg^f|QghphM25+Gi4+g%+6X^Kk1Lq5rGv%Z%PV^ax_;?s&Sy9fYt$Y9$?^9 zSVU`$8|+D(6>Wi>i!X2~*iRZY42HO^#(>QnWh@C7CHk0b$d!-z3dvAejKO?Lt-%aN z8;Ut_i<_bX3=?*{;(=f~8kbUHF^2=1P`N0zm)3DkW7vbo{8S?B zNXNX{WLVCoip2*I2fzk^3jhv)7yxMi@+trokQV51!59yvENK8N3W7KgtUw|GqyS{K zFn~gygn|=h{7~Y-v&Cb8umBsWaxz-4+Zg1mQJzU8e4-eWWf3Y~hy$RWYMj%Oyp9$O ztYqd2_E^!KD2Fm*LJnpN1`WV;DyvCt$8}B$^*9L5>*RypL@X$#VzQKi#T-TuPykQ@ z5CX+Zfr0ZQK93@>a7aNopLb<4im=%2l+($0JS=MRVWtp{#w=)(Fb$DL*`|lI4tfnR zj6wm2BB5OV_1wrwg(mE3Z=*odz1#08`bKN>%8r(<-Y-|~OwF3IdZV`M+(p<`TQT@n z(`G|pZPQP?j~=^ybB@NdXS7s0)1J1S?GbF1EeB|IxF*OkyY^BN{!pGi%rIyFBOlUn!m zE}6CP>CO|gj}I^J6>s(LsQIR3W?#59?ZL6y*@e2rr$4SE+v3LN#itz~U7t4hdHU*D z?vKfhckV6Q(pF!&$wYKrs`!fDh;`2!Tytc`bDyX51LFuhI#W2f;pNvVYizuV6(y HwfVq*tQ1iw literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_diagonal_lift_2.png b/resources/g2/track/junior/steep_to_flat_diagonal_lift_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9dee6ef127779b58bcc58b3e967ae486bc42dc15 GIT binary patch literal 976 zcmaJ=!He8<6n?UYlwH=KBSg$0$RIhSkYZLMrZl$MbzD*=wJ8iTs}Tc^GD?Ij%wcp> zI^ZZH2ARqfbC^RagAH_GSBwxPha5&2N=jFp+JI389cT|Z1ewBsKhuA}$M@d*zRP2s8%-DpIHZh&D~eGFBbWU!toPpMSQ{dr3|nJ7tUYWDdhhcQ7)G`j+G=)Rb^eT zo2Jp}bOwXrc7mITb);}mn~sfS(p@C(GK(rCXbiMOuvKhiU||oRjY|2HL<<(>8d}*1Ma9?( zfQDfPj$0&Y)3hrHM~X6OG-j6dU^ql!NOGmJNU#beXmrJ3Y8I#4g6T*dPwoe*JJtN8 zLGdJ8DGMqi>wMjijIPohYD3@fV=GGf@nV!NLtKQC3Pb~_HqbW44~fc{u7{!#*Ltbx zW_E;*6sDx}WUIpTYQjjD0#l7U`fOm%y-pSmma&KC5nkeHrpECNQEI7bPuHDRYuxLF z!(r_E>G5%vWe7+E=mEx!a48_wDbq-$?!4|UT0v$X=i|j{wnQ5Yj`IXjp~@=5>Vja( zN>?k2wa2~wWHe5qI8Q~;WXx1?OQY;2UFi*)Z1-? zV>>)M5IIlcLYX~Qm_@COGzwWXayaCRD3*)Mzm@)RqezeKU#zO|^51vgDa66<_Ss8M zfAz-auRXc;>G19W`z8~1-adi)+Uss4HX^{qE&KfHbA)8%(Jugy(kEB*G%)3;7jXHT8E xcis6%JACT)wY~N4UveLQe6V}+-_qV+oA0vw-~9H8aqiJy?(S5#Z=QSW%758_rUw83 literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_diagonal_lift_3.png b/resources/g2/track/junior/steep_to_flat_diagonal_lift_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2f7bbb70f80d3f687625c4b9fce922bcdc6bb6 GIT binary patch literal 1325 zcmaJ>;d2vp5dC$^5NUxF0-iL%D}?co6T@&|EI|$$Y6<}kd&M9bn#u{m$-n_8#2Pi# zR6+@ON=m~JhKvLZHq?N%Mm#h$`Ov`tL0V1as<8yfFsPBaGKDGlGyDVYyxsTq%f1i0 zvn{Jv8OD{AmjD39Evs2tTj0foR6kK%sEYK%rvNAht5?)j7ux>`M6Fg6ghsC?Y1+sz zW{zWBE|JuWlp zN?9Y~G@(3$1vsM9rH}bc$p|amfdvP467aMv#L8kGc{-$!l1iAHruo z(*_Vj1T)7-Hf8c;xL}@7z)lKRFj}SEfO|~35Th43I^|;0J}w(}g_b`VHm&N9`Sf$fj}x6&Gh!>^LYrAEWms+A|%%fN;-*KGkSN{9L(8;Jl`ut zawF+sSc=Q#S_CnmY8uxtIvr=E+?K*HN5tdp2}Q(2O3IMHVw7>T+-X618}4_IVK*)K ztvz99I_A%%6OwcXk^qF->8BC4iR%Q3DVu0BHbO z1bPS-;t=*?!@W@8)80?TNewM1 zbYjp?z$gh*#=_-a%KXt@prW^GSJ7bct^Q2~EiPNSq^_o=qjhj=wxX>0kuW;3;~Xr$ zxk0%tzj6;V=jHXMfBSrm_wdlG?aiyDjk`A0R8PKq_MP{^!ltY1@cqYsP@TVju$b)~ zda))Rn^--6@cia<*LtD$2vRk6-Bc4e()Zx)ts`%K?8&O8J+o!!C~=$(i`?_DN z<-iB#dq1ig=BeQK-HA!puSdRVub;W4{Hxi`W2OF256^4vL(uHPU+*n{f|Sa&*G|26 zin(}q3Ny4(XdH}Jc3-{QH$3a1ClNl&_g^ZEBd8w{PZhOzWb-vmg@Md)9?!c(dKDC@fi<^@W}=&BTDGknJmo$h*tcsj09{aZJw{ET|2>BK+W+O{3zY$xx} znZ4-1_OEX?UD|u3`}V-1;{N)BjemD)ryuQyo;~pePW{XdDOdRjjkBO}f2OEC_Lp+* XmA(n%k%pGXPj6ZEs-<66HGKFVcSlos literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_diagonal_lift_4.png b/resources/g2/track/junior/steep_to_flat_diagonal_lift_4.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5c6f6ef7e79f4cf28cf4beb3d3cfaa10ceeb1e GIT binary patch literal 1210 zcmaJ>@oy7#6o0~!E)3GJCS2r5y3vt~7HQ;=LoRTZ+bqptZ|u+-8!hGt6&rGa5*ult z!2%r=Ia!g06ltHwOradRjVIfU$G2eD)g>e)1$Tj6PU?lB1sF&GJ?Q~ zqRZ!#LZMJBmPn^F`Fyclt~VN_1sEE5uFd5#c)dn{z!Hwou{fVhyR$i8L5)5(ytU6k>BRXCW<>$HKL;(yZrgIJnK=XFwKoNlBNB=u1gMqkyBD1vT7g zQbs6m0^kAMI-R7~2XR~`2!*DHcz(>|DFuTQi3G~!aMEC6Fbi*_-GogtJA_uI@7C!G}8tWQuwVkzdUrb6{xtf{6@HLo{NgxN__ z9)|S`LPQkfet$X=$t4nMCQ~UE>-9PUTmmAdBa?bIiwgy_r^1G-E~Vzr*5zU&U7IX5 zQJYz>r!dTBGzn&lNYg%!54*KtfpjD~mQ0uPYNNt{o74FOeb8-`z2}^gE9|D03=~3LL!An z880e?QCWfKi>H8N!O82qA{O+Uqp~fjh}mpNRa3Q^iZn0W17x6$kuhE|x-*1SrscXT z)$nJVvBG4gf=YG50F+T@v*=xn(JPPv4<`q`N;H^FMb&(&R?eeFh2l7r0aONrK=aZ- z$YDGb&;%8aX^2;=zCuA0tji^My<#9Bk(Ll;i7{k~C3Bpm$eU|U6LK3-kU((~Wf-J# z+T~xa+&-bv3tRde0=#km`g%=&Wbd}FS@QY&1J>c49n(YELuW2Mt#>W)A6PmR*pOO2 zXYr#aGX{G1^mo7Aw`Ipjc4VXy8+a%7$6NTVUsrqWn@%nK{nDW+f89E^cE`?^SI^#f zc>YfNI%+<#z}oNlPCwlG<8H!@?RjM~`u*jjUGE+_z46}h!@bJ2sd9b6<40@e9sgq5 zsgp17UeVRrv8^X@VqxE?c<2?VDgnF76swH;Vs| zyt?mZ@&0e*>%m=zk4;!d|LNNQI0{eOXFIMPzH$RW@1a2F!?Syzekt_ z)x^kiz+h?0stNZCBM1sJ7O907SVNn#jwEz?ebPGSwG)2U^!D&Js&=O&nfRP|8M%N9%%S~ii?3o+Qa2^5FnoMnF>-OM?7@862M7NCR?8JzX3_Dj0LmM!b`cWf`z_4 zpL{MlCC1BB?eNPvpNc-#oc&pL{kUCth($ literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_lift_2_2.png b/resources/g2/track/junior/steep_to_flat_lift_2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..17e96bbd20999f19745e57bc7a9025e90885531b GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^GC<73!3-qbSaofIly`tnh%1m5S5|H|*VlJ;UhQlg zU0ghW{rc_d`M0h6-$$=jHa4~o4!(T*cE7m)V)^)LZu|V^X7A+W?S~Ifw>NH{K7GHp z{_}9<%l_Kw48}_A|E2(qV=M{s3ubV5b|VeQ>GO1P45?r&?Z3FGS%JqT+2e>e%fXna z|Np(EkCbI)pHDuQQYL;+lFebqAxkB>zgK?D{&SL5OuXXR45@p6Hr=1euJTZzDaDh0 zUu8k6TUBZ{dIvXbP%-4Cd|3+}6ap2k&tEO6=RB?Etnpa-cxMD-j-ahkL>&vdZ vSKa&g%f^SEJ?;CqFr0o@@6n(;?+Nq$b8M$mw$2Rzx{Sfo)z4*}Q$iB}$3}L3 literal 0 HcmV?d00001 diff --git a/resources/g2/track/junior/steep_to_flat_lift_3_1.png b/resources/g2/track/junior/steep_to_flat_lift_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8625707ee2a2442cfbb7adb3cc1eb266ad6c70 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6G!3-o%eH76GQpN#3A+A7L-`Tm@Tz|WIzI|}8 zcXG10vU0z;|847jWn<&T^6{&kji=ii@AuYEXE3&Bkgn#ozao288K{l1B*-tA!Qt7B zG$1F_)5S5Qg0Xc%ARn_Lhl}Hu1rcxm`bRIy-J~^puKn}Wd4V$yGWcm6YgxZHHBCwI z%#Q2(6V8aUiwiDf^omN23cX*v`R+v?pG#o^A=#-`jH}sREMMKfnEBt25Zi_%{*QI5 i@AB~M*t*j011l3F^XqDbH9vutGI+ZBxvX3^!3-pq+%$6mQceLrA+A7ryL$d@>;CuAtM#3o zy_1vod+Rrw>sNEz_lx_lb~aWvHqLKujxH{K9 zHszZQJb#KkX*m+};OwNo5p!KVL??3iPcD9~{ryRlnOmuMY~0PPlrw9OZ@=TpW2m#x zZo#kh9XDE8E5whNw1p;iN*#53eeKZ3{c@{6<;Wh+K9gN_J9V9}yY2O!)yI_zjy&>q z6qK}cG~5=(zm!G3;zrDlR{1-Dr`Z22?fFz&#q_|2?Qq94u}MIeGI+ZBxvX2%Lo zz-?+C73eG z7}Z2y8)=N;++j37Q``|P`Z00+)mgaI$n#z0rC5Y~Ht&|{tkn|;T- zdAq&1Ue|V@zs?G_f$qX;e^P=`m_k0V5`B6PtAwZ=mkW?@``g;A&xw z`|CcwN8I(L@ExvS9}zD-N0k2fX>YsJ(zw*A2+K-W1?gIW^m-abX?Y&5EbgDWjPi51 Ze*tiWDT`)`1GoSH002ovPDHLkV1n9CN6!EN literal 0 HcmV?d00001 From c2a1cf8b4594c340d229c8ae63708c9d8a2cef3f Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 17:16:54 +0000 Subject: [PATCH 16/35] Remove old files from repository --- resources/g2/0.png | Bin 4582 -> 0 bytes resources/g2/1.png | Bin 5334 -> 0 bytes resources/g2/10.png | Bin 531 -> 0 bytes resources/g2/11.png | Bin 328 -> 0 bytes resources/g2/12.png | Bin 497 -> 0 bytes resources/g2/13.png | Bin 443 -> 0 bytes resources/g2/14.png | Bin 912 -> 0 bytes resources/g2/15.png | Bin 720 -> 0 bytes resources/g2/16.png | Bin 446 -> 0 bytes resources/g2/17.png | Bin 232 -> 0 bytes resources/g2/18.png | Bin 229 -> 0 bytes resources/g2/19.png | Bin 271 -> 0 bytes resources/g2/2.png | Bin 352 -> 0 bytes resources/g2/20.png | Bin 268 -> 0 bytes resources/g2/21.png | Bin 242 -> 0 bytes resources/g2/22.png | Bin 235 -> 0 bytes resources/g2/23.png | Bin 280 -> 0 bytes resources/g2/24.png | Bin 280 -> 0 bytes resources/g2/25.png | Bin 240 -> 0 bytes resources/g2/26.png | Bin 236 -> 0 bytes resources/g2/27.png | Bin 282 -> 0 bytes resources/g2/28.png | Bin 282 -> 0 bytes resources/g2/29.png | Bin 202 -> 0 bytes resources/g2/3.png | Bin 219 -> 0 bytes resources/g2/30.png | Bin 203 -> 0 bytes resources/g2/31.png | Bin 191 -> 0 bytes resources/g2/32.png | Bin 208 -> 0 bytes resources/g2/33.png | Bin 506 -> 0 bytes resources/g2/34.png | Bin 518 -> 0 bytes resources/g2/35.png | Bin 255 -> 0 bytes resources/g2/36.png | Bin 272 -> 0 bytes resources/g2/37.png | Bin 605 -> 0 bytes resources/g2/38.png | Bin 264 -> 0 bytes resources/g2/39.png | Bin 254 -> 0 bytes resources/g2/4.png | Bin 229 -> 0 bytes resources/g2/40.png | Bin 542 -> 0 bytes resources/g2/41.png | Bin 250 -> 0 bytes resources/g2/42.png | Bin 238 -> 0 bytes resources/g2/43.png | Bin 577 -> 0 bytes resources/g2/44.png | Bin 261 -> 0 bytes resources/g2/45.png | Bin 265 -> 0 bytes resources/g2/46.png | Bin 595 -> 0 bytes resources/g2/47.png | Bin 326 -> 0 bytes resources/g2/48.png | Bin 280 -> 0 bytes resources/g2/49.png | Bin 721 -> 0 bytes resources/g2/5.png | Bin 403 -> 0 bytes resources/g2/50.png | Bin 270 -> 0 bytes resources/g2/51.png | Bin 275 -> 0 bytes resources/g2/52.png | Bin 614 -> 0 bytes resources/g2/53.png | Bin 265 -> 0 bytes resources/g2/54.png | Bin 238 -> 0 bytes resources/g2/55.png | Bin 691 -> 0 bytes resources/g2/56.png | Bin 299 -> 0 bytes resources/g2/57.png | Bin 306 -> 0 bytes resources/g2/58.png | Bin 387 -> 0 bytes resources/g2/59.png | Bin 176 -> 0 bytes resources/g2/6.png | Bin 585 -> 0 bytes resources/g2/60.png | Bin 2968 -> 0 bytes resources/g2/61.png | Bin 1229 -> 0 bytes resources/g2/62.png | Bin 970 -> 0 bytes resources/g2/63.png | Bin 1217 -> 0 bytes resources/g2/64.png | Bin 1112 -> 0 bytes resources/g2/65.png | Bin 1238 -> 0 bytes resources/g2/66.png | Bin 956 -> 0 bytes resources/g2/67.png | Bin 1248 -> 0 bytes resources/g2/68.png | Bin 1110 -> 0 bytes resources/g2/69.png | Bin 1300 -> 0 bytes resources/g2/70.png | Bin 1004 -> 0 bytes resources/g2/71.png | Bin 1312 -> 0 bytes resources/g2/72.png | Bin 1209 -> 0 bytes resources/g2/73.png | Bin 1315 -> 0 bytes resources/g2/74.png | Bin 976 -> 0 bytes resources/g2/75.png | Bin 1325 -> 0 bytes resources/g2/76.png | Bin 1210 -> 0 bytes resources/g2/77.png | Bin 201 -> 0 bytes resources/g2/78.png | Bin 170 -> 0 bytes resources/g2/79.png | Bin 1143 -> 0 bytes resources/g2/8.png | Bin 557 -> 0 bytes resources/g2/9.png | Bin 335 -> 0 bytes 79 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/g2/0.png delete mode 100644 resources/g2/1.png delete mode 100644 resources/g2/10.png delete mode 100644 resources/g2/11.png delete mode 100644 resources/g2/12.png delete mode 100644 resources/g2/13.png delete mode 100644 resources/g2/14.png delete mode 100644 resources/g2/15.png delete mode 100644 resources/g2/16.png delete mode 100644 resources/g2/17.png delete mode 100644 resources/g2/18.png delete mode 100644 resources/g2/19.png delete mode 100644 resources/g2/2.png delete mode 100644 resources/g2/20.png delete mode 100644 resources/g2/21.png delete mode 100644 resources/g2/22.png delete mode 100644 resources/g2/23.png delete mode 100644 resources/g2/24.png delete mode 100644 resources/g2/25.png delete mode 100644 resources/g2/26.png delete mode 100644 resources/g2/27.png delete mode 100644 resources/g2/28.png delete mode 100644 resources/g2/29.png delete mode 100644 resources/g2/3.png delete mode 100644 resources/g2/30.png delete mode 100644 resources/g2/31.png delete mode 100644 resources/g2/32.png delete mode 100644 resources/g2/33.png delete mode 100644 resources/g2/34.png delete mode 100644 resources/g2/35.png delete mode 100644 resources/g2/36.png delete mode 100644 resources/g2/37.png delete mode 100644 resources/g2/38.png delete mode 100644 resources/g2/39.png delete mode 100644 resources/g2/4.png delete mode 100644 resources/g2/40.png delete mode 100644 resources/g2/41.png delete mode 100644 resources/g2/42.png delete mode 100644 resources/g2/43.png delete mode 100644 resources/g2/44.png delete mode 100644 resources/g2/45.png delete mode 100644 resources/g2/46.png delete mode 100644 resources/g2/47.png delete mode 100644 resources/g2/48.png delete mode 100644 resources/g2/49.png delete mode 100644 resources/g2/5.png delete mode 100644 resources/g2/50.png delete mode 100644 resources/g2/51.png delete mode 100644 resources/g2/52.png delete mode 100644 resources/g2/53.png delete mode 100644 resources/g2/54.png delete mode 100644 resources/g2/55.png delete mode 100644 resources/g2/56.png delete mode 100644 resources/g2/57.png delete mode 100644 resources/g2/58.png delete mode 100644 resources/g2/59.png delete mode 100644 resources/g2/6.png delete mode 100644 resources/g2/60.png delete mode 100644 resources/g2/61.png delete mode 100644 resources/g2/62.png delete mode 100644 resources/g2/63.png delete mode 100644 resources/g2/64.png delete mode 100644 resources/g2/65.png delete mode 100644 resources/g2/66.png delete mode 100644 resources/g2/67.png delete mode 100644 resources/g2/68.png delete mode 100644 resources/g2/69.png delete mode 100644 resources/g2/70.png delete mode 100644 resources/g2/71.png delete mode 100644 resources/g2/72.png delete mode 100644 resources/g2/73.png delete mode 100644 resources/g2/74.png delete mode 100644 resources/g2/75.png delete mode 100644 resources/g2/76.png delete mode 100644 resources/g2/77.png delete mode 100644 resources/g2/78.png delete mode 100644 resources/g2/79.png delete mode 100644 resources/g2/8.png delete mode 100644 resources/g2/9.png diff --git a/resources/g2/0.png b/resources/g2/0.png deleted file mode 100644 index f99b17660d0c4cde90a5b3cd5e5d349d1512628b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4582 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 F{sTW+^ico+ diff --git a/resources/g2/10.png b/resources/g2/10.png deleted file mode 100644 index 296f07c15058ba87437aa1281d709974c679ef74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^>XP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0fb3JK~zXf#gna4!$1^;<0=sd1Tqp)(FZ_O zA|nwMeSnHSLL{QH5?NV^L_{JH6@36CA`-FmyX@)Qgr-Rd3}@y{vVY&%o82V;uB$W+ zb;qG$5-fbIzFf|Z9vo!gP?&GCEZi@bVUg$dq-{ZOvi67yRF1ZOt@fwPeQHd8I@ zcAHCUM`TqDX!pDmpqs+(c=u0W&kq-7=CiI-0N>Q!9q5z+Zx*Al%0@Pybqb5fssvR9 z9wPfTU_84?Y(DEc1^6?dugU&=bOvVw5QD0s?e;JZ7&D)$&ccxe91c}gG==C2Gp7GQ zXA!3~s~!@&zv&b_olM#TkPo5!*j*9*9**zk^Zp@RRRytQfpw!ioN+!~uMk}SA9PzV zu<>+i!F)EJv?HRM1oMtVCPJuy%7D|Z&lxO$z_kGae?0^#0Qde>UFAb!*Iz10J^^0h VQw))k!0G@1002ovPDHLkV1hi!*gyaP diff --git a/resources/g2/11.png b/resources/g2/11.png deleted file mode 100644 index 4d7afd5519717a64c843636e2d2c1add38bd92c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ=4@yqg0@pot`d^Ar}5uCm9Mg8}P9F27Bl8t3wo%>pPm2Y%d UUrYXEpeGnSUHx3vIVCg!08pcR7XSbN diff --git a/resources/g2/12.png b/resources/g2/12.png deleted file mode 100644 index 6c2346466919bb6071c743402dee01a3975f07ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 497 zcmVg&KPGp)19Bb!@&Y|_F}KrUZb}^a0-Duk&l5QgV1#k z%$aB714kC&p6P`dRG2)Ry>&J)CrQlgBUA7Mg*yS{5HhAgkRA%rQ_eBi%lQryJ}M9e z%v?BzUO19nQ-;-;vnmK$R)L~xl!58i0(oCqC2ASLV8Js9+)#)daD>f+Ky@6;q`ej$ z$6E@7zQxPw4QT}WG8PDwv1mq3Z$A6y_q_U|plZ~LC`b_O;|I<2oZ*=%OKnLLTrfX> z`M)yAkY$+als0cS=d`F!nCI>5U(%ESqvbXMlOnZFzb{a$sin5FVXZDT?X6&~t?uD# n{N4GsPk?`2cKty({O5cC71J4rCsoZU00000NkvXXu0mjf(CEfZ diff --git a/resources/g2/13.png b/resources/g2/13.png deleted file mode 100644 index 17b58d28c4b06a9fb6ed19f234dd9f89d95f1f3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^@<1%j!3-ofKU^XUqyhtcLR^9L@_hFB+w*s?o-D4c z?44}B*xGve`uN3@>+OSsvxAK%+cWgnXHTE)UvAIPK0iL$TsohhzuaBBUtPUkTDm@5 zzCT&LKbSo`TRz`g++SO`AvgB{&``#bAirP+hi5m^K%69RcNc~ZR#^`qhqJ&VvY3H^ zTNs2H8D`Cq01C2~c>21s-)CduQ|I>*+}#fpdhF@q7@~20@1$7qCIz0hNHwo%iNfyx z{>w{ACpA^=>TVXF^Zf2^{^eKZ^ErIm6LOu&`ETvZWx2PQX5W6bVE3xM_FWmwnyv3j z?%VMfh_K|m{cx(l%FW=G;c-5-2huSXRa;h^D)17Mx@#82BKJt$sQvxj9ErRF){tma!$|djFf!<~CboFyt=akR{0Pu{W`Tzg` diff --git a/resources/g2/14.png b/resources/g2/14.png deleted file mode 100644 index 39d0aae67906f2e047c40538ee59aadea4293987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912 zcmV;B18@9^P)N2bZe?^J zG%heMHD!e|WdHyJ4oO5oR7gv;)R9B0VHC&l{(}pH3&Dlp!XOv~K`;n{U=R#~K@bcE zK@bdr;6gA6g5bg+41!>AAqavCgCGb8LHOMFbJkhgU3f2?J@4N4oZt7H-}AihN-5>P z#?p<|My>30I_3PfRW|p(m%Wol=?`}zHe2=bI3CA!yVr}nA18-ptJSJX7j-h?XT8}h zYmG*+CV*JGT`Sw&dbt@Nl&kyw8K8I33{m+B>h}Aeg5pO4z}L04nKMNwVvg@hC)v39OzGNsxN0|CiU-G0_r0_W+7b zVZ9xm2Sg#LYY=M+W{v0%2GP*(L2nTt3FP=-CqN1lpnwI6Z$_ht?A&wDL^RXy#Cm_- z{Q%@1q(y0uF?A}4vWAeH6i!i%y^OEQ?eg*= zIu!1Kc+1tvRRbPJxSDR^6iJeh0GqA|SP_6i)A$eId4~G#>26GUbMqAWOPg#&-yTQt zY;SY6=}v}@(xSn|?o_z?()t)4Ur&#uiM)^rP&Wf8NL$h(!6Ksq@SA}9a^(8(=`;>O zb$kO*P1@;PECSZI*P>9OQ>1hMS*1JOr~mFdVRF2jj&Xi}gxuWx86XAoyt9a}xyiay z$i^AqJ@P#vE{|0|JIxUP6rjL0fC+RRFI9DlJ_867#2a2k3TMQRBA&7cAb}>}alW+x zf}m!s^PzrTT+9H|uBYE07J&#O+hm)U0B<-T!GsC-#1cU0R`(!8h_lGY%(1g^alf)e m4oHfEe0x$iEP)N2bZe?^J zG%heMHD!e|WdHyIPDw;TR7gv`m7#V5F%U)9Ra77m6$nHHVg&-RqGAOCfk0GLAXZi& z5J)7lA5ekpC-52lq?8-D>1+?Rt=TSwg z=i}6@CTVk6rqlO6&xhkW9Z#FQUUakk-2G+XAn-UDWbkG&ESsWn7|7eEEpX;2$aD9X zVE_Y;&~QG=RmEpiU=-dl!0R(FsiT; z#W*yYJ>|my0V8A;3SnMT8D2*_dB|Xzj87bax@!v1MlyR{QN-+f0;m!Ie%wxPzCj#R z!24EAL91ZRnKC#)fXqL-=bnIB3fFgS*7(4q$QA!v0pME|0O0;0K&j&PvN_*nP3%QJD|&cFd9Oww2Ur3aV-05R8QAJ+;3^Qu_GA>m#HHimcJk4?BR ztBMsEw+}F2A;OK6L37vu7^nwbleKH%T2A6@-v7gb={*3D6WC5R83@Vi7DHpxJW+fQ9!2gkydSe$DtAK5^E3 z*}gS`@!6x5!6t(M_&q{I=*w!AeV=z{__Stws^(8s`s&)WoBw96l@WtLfyMvjx^44X zpV=7u5G4NB%7{S@DS*!!6Rs&hwd3iu_e{IPsHz{*-{XO2QSpQT0000N2bZe?^J zG%heMHD!e|WdHyHJV``BR7gv`l{*f?Knz5EBaT2pNl8h`0Vp^E2VdmGFAR>&QnAvA zjX!U^2}Iu9p53hQF-rPOFtg0^XwoI-?YNGMH&vnXi z1>Q`P+C(ABd49E4^MPMaKv01SaA_U2n$HUSdV)#-Gg!qiRW9(o!8c_?HDRE@o9Ps} zkz!Sq*K78H-~WrcBWJj($_0Ks0YNpZ3^k_lse$X;guuL}s#7x*_|J#jnREv1t04pb z`7UzlG&FKusmlj`|2D0P5d$!3H59qP_um5=DgmitygUQn8=wrx^0V!Z diff --git a/resources/g2/17.png b/resources/g2/17.png deleted file mode 100644 index e81026a20516ac92bf5e71c5ab1bff6a958c3256..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*%E&ba4!^ z@IN}?E$0CP4%WMCl1nD=U7C1V=0{Yg+Lw4anV%P&FMM0N^;^-Gbd_sCAqzgfiK%m% z672S}Y{&7Fnp0H*gAd-`{~^+Izl&7ZrJ$CXAze{?Axu+FKQun2ylVLh24l{$qi-0G Yd|2~xv-0U(KpPo6UHx3vIVCg!09-Xv-v9sr diff --git a/resources/g2/18.png b/resources/g2/18.png deleted file mode 100644 index 3c09112bcbc8545ec799cc4167897bddf5211a96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*%E*ba4!^ z@IN{snu|e^hq>Cge-E*~F%(TEo!`*iCNS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*+-wba4!^ z@IN|nBX5HN56fjk31$Nx)yDxw9LfO!MjaoeZ*QD5!AyUz(24uUn@s#%p46$uUD?E+ zKJ|~l!BjP?vPHRnd!FlYyx6yimu-c4_@s#f9RZB6FWV%54rB0i L^>bP0l+XkKnrKe#QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKtYKT*NBqf{Irtt#G+J&g2c?c61}|C5(N`I z13lB!R-;s)nv0$;jv*HQy_fb1HaQ5eJ~+$6%cFV7Nap~P&Os+0jb>R zQp+n&e=0s+ZEVhd{QI;-wv91Tfzfrr9LY9qTlT+PZY|2)(`j*S`nUJXA`*O59tSlV z3MTxWCwqIJj)58z&yLUppCcdFmp&=j@og$skK}P*=FhYL*8Oo2kuc_!spC8lnP~HU zv#hYQp~2xj(lvH{Q*O#|Y-s6;tSxerG&NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*+-tba4!^ z@IN}?pkRXn56jQU8LSaK{@oim=8GgLiU}1PvP-h;PkYAZvFVAzUvZ_NEw2rCZ|L6| zzQN%|&KJ&Y7fdsyqMoI{ZPZQa{V8zs8k5rdx2A0ZOATZys(G8z^qpord)2fdYME=t z>Sw#dJ{B-rGKxFwGgn_6Z@SU)K+8Ty(feF8y90h}2km0aO?&xhj!=FV&{Yhcu6{1- HoD!M<4WV0e diff --git a/resources/g2/21.png b/resources/g2/21.png deleted file mode 100644 index 3ef302396b82c22584173bd33fe81142d7948301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*$3Vba4!^ z@IN}?B5#8M2kXyb4)+2Md)WhwGKURiB#X7YxN`rz_SVa7;O4xfzv|bfo<(x^xi_*k z-&Wam{yTRZpXSnJS-l^>&nnJLS(MwF{)hXh&o5P@3zKFkU0D*c<*|dBLzPTdoZiN| g4$}o{j_W(-+^*hzILNun31~Nir>mdKI;Vst0LMB{FaQ7m diff --git a/resources/g2/22.png b/resources/g2/22.png deleted file mode 100644 index 13c5deff4f0621eeeba2a995a0811fd296ec374c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1**yPba4!^ z@IN}?B4>jEkIUwEWs8>ieGeu2t+?GkYxk(%UoNS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*)0m>Eak- z;eT}EM&1Sk9+u6Ftg6liLd<~%Y{>xuMhwaZ4qjdA`ELYN9i+Y2Tip2miz9qJgUj1u z?){}o-(IfKkS>sP=bt0|pgnre|3;?7+LQu@_cysUCLXbDG%ApsJxRn}@96~1118tM zE?1i2?6a_nRX5ATz~lV+6*W5?UY)!5&gSiQk)!?b8yxp59QBANS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*)0m>Eak- z;h!vF@!|jfdW(1bY5(`z$TvCWq*(GWOm4`$b^mOC)5k2A>m{{2Km0$xd?`@XI{t+l zGhME;g#Fn4|NsB<9}9XF3Re`d99YTO);P;iuR+V5VTRiTl`gdfY!b&-2|fwgk$Ym+ z0u#UGO*VX!8fNkZahS23V%yCUzM{#%$8b~H47EK{juOwp1=w~odFCx(U}k3MJR-c~ Upy=KgKo>H2y85}Sb4q9e0Qh8Mj{pDw diff --git a/resources/g2/25.png b/resources/g2/25.png deleted file mode 100644 index 55b8ae32970665b4c8f2fd6bf00ea5e608f8c9ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1**yOba4!^ z@IN}?Aa8>KhwIG)&FuYsj|BK03h?z;t_%svc)ZrWGLw1F1clFwR!w~>@byPrhp9x2 z|HZdj`W2Q-rheOf;C?>eNfqH-?LCje|28N fXv>-A`h<})dL!#&-Dk}}n;AS^{an^LB{Ts5ayU=> diff --git a/resources/g2/26.png b/resources/g2/26.png deleted file mode 100644 index c22e6db1713d739d9309b0f8231a35af09985a61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1**yNba4!^ z@IN}?Am;%C9_GD{^0g&%_%15$`p=@bC`?yK{fqd)i2|=VZd^Nh*M8gOn2V9(d{Lb~ zN4)~PHfp__{ABNS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*)0h>Eak- z;h!vF@!|jfdW*97_5bXv_S;G{-#Aeu!Jx(%G^gI~&;Li?|Nh_oUcA|`qd#2PmdKI;Vst0K{NlSO5S3 diff --git a/resources/g2/28.png b/resources/g2/28.png deleted file mode 100644 index d98274d407999df304af6a496126269731850782..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xamUKs7M+SzC{oH>NS%G}c0*}aI zpqfJ<%qXhi)c_QfC~=J_3C>R|DNig)Whh9@%q!8$OD$0_(KFC9O>H$w1*)0h>Eak- z;h!vF@!|jfdW&i6(|)YKcb@NNn{1`ISV`@ ziy0XB4uUY_j)~cCfr1hxt`Q}{`DrEPiAAXl1&Nt?C3<mdKI;Vst0L?u+lK=n! diff --git a/resources/g2/3.png b/resources/g2/3.png deleted file mode 100644 index 20432f67df0771919c1388f0001b63e0d0bbd87e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ(0U`xw#m)s%jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCf`#@Q5sCVBk9p!i>lBSEK+1B}!Z)N`mv#O3D+9QW**oGxJLH@={9_O!N%& zOjBEpQh{oGJY5_^B*K#!80)Ir{wJ^*F>vbD-TyD|ETnd^cE3cZ&=E$?rhNn{1`ISV`@ ziy0XB4uUY_j)~cCfr1hxt`Q}{`DrEPiAAXl1&Nt?C3< zjv*HQZ@V}0GAQsI{>94v<-c^|#|er`O*^OUxoP@m8a;S24e_O?((X Sjn^M&D1)b~pUXO@geCxUpGR&0 diff --git a/resources/g2/31.png b/resources/g2/31.png deleted file mode 100644 index 06b5f195c936f44a3cb9cdd5a4ac99d03aadfacb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Y!3HERME&^*q*&4&eH|GXHuiJ>Nn{1`ISV`@ ziy0XB4uUY_j)~cCfr1hxt`Q}{`DrEPiAAXl1&Nt?C3<A+stP&I+XPgt|#2T;@3xkok!5DBA&s hqij7)QA})X3>xRP8~aNvOn?S4c)I$ztaD0e0sw&=Hsk;R diff --git a/resources/g2/32.png b/resources/g2/32.png deleted file mode 100644 index 84d69e23372932df5ab7cc7f5922b774cbfcf8f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Y!3HERME&^*q*&4&eH|GXHuiJ>Nn{1`ISV`@ ziy0XB4uUY_j)~cCfr1hxt`Q}{`DrEPiAAXl1&Nt?C3<FVdQ&MBb@03>xr Ab^rhX diff --git a/resources/g2/33.png b/resources/g2/33.png deleted file mode 100644 index c6d2c04941c9c2f223b32ce5abe327cff100f7aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVs30001uP)t-s0000N zBO@~}08dK`KRW|KLA532S;x!Z%Y@q+h?QikAs(&S33)TS08UP0F%2@i{Eq8+uOIp!=JCO zOJieqdoPEdUz5kDLt9&0b8~NlgF9a*KT}hWV<#^|Lv|-+5&!@I0d!JMQvg8b*k%9# z0UJp~K~#7FwUB>LgD?<=cWr5RY_%OaJYB28P{)LQ|BvUDEHV7p{_{cz$;0!$?X9i@ zLJC;j9uNR`IDpF3Z4M&SW_?FDXjJ0M9js%%VW_u@`dV7nGeq;Ss4IukTEAP?K@`?$ zw1{rAa514CCF0K8xt^d@N})sasHb|Ol6kK2$)h*>S@D3CcBs9>VL>p_%~iLk_uN;G zb^c+{k@aUNiDvDRb&dYz^#By&ti8zJw0r-k>SF_uCWlvfQRJUr-*r{hNuMm0={U6n2;-9{d|`ayP>Kx0xSP`;!IF9=L?M(T w7-G+FihUydlz(`D6nParaV~!(zWU$!1@VFv(5fDP0ssI207*qoM6N<$f`e(;Z~y=R diff --git a/resources/g2/34.png b/resources/g2/34.png deleted file mode 100644 index 992c5bdad436f723ad5cf0d75d2c2a5f2227e671..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)j0000gP)t-s0001w z7f+)fU$-Z3dka5j05g|AGlMrTt3xx>PbMkGovK+_A*g?bE2$yzFz zzw`o(JwXprhQeCzQrj%}V-Fxbf4~3U^LK!(s2D?N#bO%7CwUMC(G9{$aTBKJZTt7o zru4%8wge|Qvu(3?%9aQNWVqslC*}r6%><>tpMuggqb5v01E+%07lQ_Ch&aJ3js}K` zX2cY}S~ljxDR*!p`b6ceu3gkb{p1QaPAsMAW@aN5`FWOaxQPlv!}4!{2EVwkGU4ug z!%Aw()kT#4=%%$2{-7M)w2(<6-pXijLChxH&?u}cqO#%xQ0p3mPm>C^#PxY*5x>Tz z?Lsn}AkN&eGIUW;6+@3*=2N9@x%9GmF1u!$w0RVLT5iWoGhh5;>4rXg@w>*`^2pke zr{&3EcWHBKjXB6rg+-*nnY1-@i+>VB4Fl1^ae<8FMJNgy*2h%`Ul&pZqasU7T07*qo IM6N<$f~mRXoB#j- diff --git a/resources/g2/35.png b/resources/g2/35.png deleted file mode 100644 index fffe5fa9f06d6031cf70c04922f96ff28a7d912f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^DnKmC!3-oNf9zQVq>KZ6LR^7#v$=jXxBchx-TS@u z?HQyO%g6t}{{DHma=*C$cJ=(}_Qv0*pZ;I3zS`ONwsn6xgR!DgqykVIV@Z%-FoVOh z8)-mJm8XkiNCji>#f!TR8E`N^xL7Q9`ofFf_G_0`aT{*`yKo>?|rQoP0n0k`_8_QXHJT_zujY=Pg!QS+Dum0bJ(dJy7iiIwc0Q4 z!;jl%rFwn5bL4g5=htdqKVEvXN2Kumx05EKGtIxJvTQi4vg0Ap6%3xPelF{r5}E+c CyJ%ei diff --git a/resources/g2/36.png b/resources/g2/36.png deleted file mode 100644 index c83d1eba746364a7ca70563abe02aa35a220d8a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^sz5Bl!VDyTOnYeoq;vy(LR^7#zqo%jxBYZ`<8%h& z)y~Gx!B0{DK)Ap4~_TawdAZ zIEGX(rk*$CaxxTPx$r~q$hm_?`!{UZ%(ZFnH8Zb>)_N|-JYUV61GkdA}fYYWs zbFS}C38T&H%nP3-=H>2;m6m>S@6sp* z&0is9ix(k{Ic@9}d~#Qlk5sI%uRD8}QRCUCNT+DKJ;Dvoe=S>^wd&W)zo+cEW=Naf TGUh)8bR2`HtDnm{r-UW|X#8t; diff --git a/resources/g2/37.png b/resources/g2/37.png deleted file mode 100644 index f4579749ea9b0fa7c53ddd3c0f47ee19085380da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 605 zcmV-j0;2tiP)RwcezX>gG^(?1<+ewz^;e^hI z3)kdhYRhGQhcX=>oJL8WW!BpmH}B=>mmYtp=WN5abr4T%$tb00000NkvXXu0mjf{|6^G diff --git a/resources/g2/38.png b/resources/g2/38.png deleted file mode 100644 index fa1dd09956fd38142265bfa277e441e6450ae989..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5eZ!3-q5rDLmrludw7h%1n;=CSrto@(X5gcy=QV$f@#laSW+oES>Oh-C+feRzYp{EqlwO@BfcwkD9!;@VWR$?i%$= z?n0N>7u+j~YE)9%vm}5cVXCbAj&q{9yTn&q)jq(mds~^v{Xd`e92q&kPx~+L-#gLe zcqd=Sn$^d3j%(-n)V|q$3^!3-pq+%$6mQf2`@A+A8Wn%jQ6dj9+9)wiwt z`^Eh~m+!vpul>JX{eQgtesBH7^6}{m#{Xv=ZqhGZXf+ zNvIU_F?{ZQEUb9Jkp0V1|%O$WD@{VEa{HEjtmSN`?>!lvVtTFJR*x3 z82Ao>Fr%o3R|8N`qQo_#Bsf2KzJ3vn^N^7#aYW79fPNdlAD2Hf=T{>?02`}A zGfUkSFaQ7m0d!JMQvg8b*k%9#0h38YK~#7Fjg(Oi;~)$~?EgWQ^8XstWhIyVb34lEG3vzw{@Vv6|aHWxka2 zd*HuT5s|s(mfM7LPL=@?azt8ft@ZGd*Q^G6v|1FOvsx@MgQZq=HsIp12x9nkSaHVz z5-d8)gz@ULq7PkHoop7TA>-g`yPQlmB6k#8uOf_oRYHb@!o_E`wd+s;>u_SSkf>`T zS`kl}SjL$R*k>byoeP2PnAsM_bRf%xL)iK{N5!2RxZ7~A?OICUV?&%^DVK0@ThrQf zF=rXRMBn1IKIAshjgN82Gnjm1TJYRyKNvln+rf~2mHx$U1Ot8+y^drjnA#hg>DERo z7#G_cwRyo@C#sB~S07*qoM6N<$f<;I4Jpcdz diff --git a/resources/g2/41.png b/resources/g2/41.png deleted file mode 100644 index 1aab1c2aad780d50b140c6ccea8cc976513e6b5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5el!VDxi>JME7Qd$8%A+A8Wn%jQ6dj99~-S4AU z-?r{wEFYiFVB9b6zuMV&y1ns!Z~bO-{mcH^&jt5Q1FB{$3GxeOaCmkj4alkUba4!+ zVD#|-M6e8TDQ(-WV7A7+TpF!OBaFsJ(iCq%&ThPdUxyG8lI$c>i;mdKI;Vst0J|Mwr2qf` diff --git a/resources/g2/42.png b/resources/g2/42.png deleted file mode 100644 index 303ef490ee9fee7a81e983683b06ea6d6aaed3fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5el!VDxi>JME7QtAOdA+A9Bee~+v*8TnB{@c~_ z7t6<2bK5tY>#ue;-tVoS&R{&<-q@Z&nuqJFI8Z5LNswPKgTu2MX+Tb?r;B4q1!L$L zL#}263DyVuMT}bfY@J>*GWF}kPJY+As@P#q^X|o)cRyfdIo|VVZ_k4IN$%77zkd?G z8|UvTlbvv1{GCP6TrID^rVV8_dF=t4m%MM_-~4jAy_??09QxCmGJNZT!rF3v is7|^$MQys*3R#&sA_-L!qZ)w@VDNPHb6Mw<&;$Sh-&7y~ diff --git a/resources/g2/43.png b/resources/g2/43.png deleted file mode 100644 index 1bedcf6fd3d24d8571a6ba73b1eb6cde7451fc51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)_(=S-!t<00001bW%=J06^y0W&i*Ir%6OXRCoccluOpEAPj^N zBmympNYne@=}qwQ>wv)EGRrxY&!R{ak2AU_{`o4 zfpRAoR~L?>uzsG`P^v8=ey?8^t)}SG$(dvl$V2n53pY*z% ztS)jffF}enNV>n^$aPQgak zl4p{ubzY$)lNkBWAuXC|{+JT|&&hf)$1A4%HP+$#_BekQ2Z?1dhFF zp*agz19fxT5lN2ou8xj|^-EqFf-0#8_NMzG7dSLvAh2-qDzAbXcrWDjmXjkk7nJY$ zF7UQ|E*SF#59eQ3cSdm(JgxqiU05{>hMH_sa`{x2Lu%>C*O;m`UXfZG_*V@qAM P00000NkvXXu0mjfJUI*N diff --git a/resources/g2/44.png b/resources/g2/44.png deleted file mode 100644 index 075dae7638a5ed80e91a52b7f7b51011b3106f97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^l0eMO!VDxUZdxAzQU(D&A+A8WU)+DOeEfFx{M*+3 z@1s{&bK9?WHcn?S-tVnH-QM_lxN@_({$+pd|Mlwsx7)jMoDT)+VJr#q3ubV5b|VeQ zY4&t+45?sr?cK=9kltqEpjm=GGeRLd6ekiDgB`UBjJO0#ctCJxEcSj{MV;HCn^M#J8m^nqZDTyJ zbL;h=ijhZk_k~9;W-Qck^Ip7fc7v2yd}ii9uWg!7|1ta&kzOp8EjJhF90pHUKbLh* G2~7a6!eJKx diff --git a/resources/g2/45.png b/resources/g2/45.png deleted file mode 100644 index 16f8ca9e62677dc5e70eea1344fc18607509b2a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5ej!VDxQziT)QqznRlLR^7#HMjk3>;CuAtGBD? z_lx^4mXE*euf5+}|9`#uYG>pB@$%2ZmD3rFr`sDho9io0Ih735!&nmJ7tG-B>_!@p z)9&fw7*fHgduAi=AqO7T0At4hwgo3#uV~y;c=W3w$4lx6k07h6t5%tV)ypT*Et3Q# znqFzWiK+X(?<+5Z_VW$4>k|EXqn~|ryjSq@PiFnz-bQ|{M{&1B?w|S6xS8kHQXRu3 z);UjB&r*1FuI;A9)f>~6E1f@8TBotfC64zy>nWKPk$%(e8~tL|%vCzGEOd@A&`AuQ Lu6{1-oD!MUym10dka6eCvTTOGpj>0gEucfQ&UT0V0004WQchC9TOMLPFWIeu%JM+pP;=!kAh$lb) z&&4zb;Lxk3m|aIqal)mZ*M2TH0l>Mw8~a#jEe+Fb(sFE z>&qcFVq$)cRL5hWT!;=_#-gprd8U$S{Y6BNbEMaOiWkC1#$V}LwF0Z4VWx;9}ivTxF%j&)?+&Q(O+k*D`s~!5j3chTy70bT2E*$QP_cgWj!3VnC}y^wY{7FT+Ya z?tKI|>Q-W4W_slo&a~6-0=G=9^g8<(2kNrT5iBBXRK5pwK@da4Ws&%N4CBgFWQ1*p zOF;)Z9mfb|>qu?m&NeOU$p|5|o3wdpTtd1pv({ygp-P`AM194SuIZ7Jldic4ePtZ6 zcsa?k{oe|W=TC?s<^js~YgFhEdS82=D4tqQa}qm$f3LmOpQ h5tHTPteWc$>JLnx5b+T&MMwYu002ovPDHLkV1g?y3WERu diff --git a/resources/g2/47.png b/resources/g2/47.png deleted file mode 100644 index 4dac4d418eb3c39185d90264ee24542fd5706b92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmV-M0lEH(P)*L_t(|0fmx5 z7K0!RL;<5hgj%ts?foy>0o#ob$@c$D2A}GBwCM-~jZ;UUkvakmSHdg{Q>ix_A~TD- z#|cTmuC`gAwxDvjW0p&n2Ur*lVOjoyXKP)>9f#W*aDo_fulN>2+#ey=GZ5UyrC>D**=kAFjF9nS$ei+}KwK#=aLm(T~f23ZQ9pKaIbF YUxI%Hpg0Z=SpWb407*qoM6N<$g5er}EC2ui diff --git a/resources/g2/48.png b/resources/g2/48.png deleted file mode 100644 index 9cb20f7ecf87aebe9271bc0944ac785af255ad30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^N zzqr4BaIklBvc9wPYG>nSbN%V|#@p5N?HQyO%g4WuUVYoTf4{dr|BICGK%I;wL4Lsu z4$p3+0XY*qT^vIy7+WtmPC9JB;S!j*)0D%culE0Gwl^VVB@z3Z^tY;Q`nq=GO~Wc4 zWu^LCp;L1wSuXEeICp`9v1?9}iuua}8XY^UrQ{tdPZdZrtTy>?+*2*F@_uS(L4dN5 zhVR|advsWgXU?%?x%o$G)A6^(Z;m$G%r4xdv|WA0zhh~f2Y0`}xv@@p_qyb@pO?JY bck|x6*{oZS@IPJvbQ^=GtDnm{r-UW|E;?(< diff --git a/resources/g2/49.png b/resources/g2/49.png deleted file mode 100644 index 08c8af888d4c4c1aaf4ff19829b9bb2c831f5195..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 zcmV;?0xtcDP)a@x8L`d z%Y&Df?^~;T3qRXCk3UmW|6d=E7f-80Gyj`2ze_Lkce~S1D?b1m=T{@QCvRJGbN{zL zmT>G&00001bW%=J06^y0W&i*J6G=otRCocEl--u2AP|K8r2&;0jSw+vGQXS+0|8)RaMoOX#o{LEibW3Hv-BQ`3rJ71Mt;V<@dGm0!$00 z3~G7~&IeW9TBthodK)=4*7epH1EwhMQz?69yp@9|@hZ#aN8{P?ejHSHM><;`nU_6d z7Kt@HG~0Lf^lNRC`12z`?=5ZSvb3i^y*)4|9G~W&GLF~#9<4KOtqTM7GzTw^9Y55b za{MIAxQ+gnh~FKj-l9L>kW*|YHU}<@k4~}oc*IPRLwu7kSTX@OV2e!trf{K3gMYpz zPL8V=0Rm!?x0y)?#~+F=RHcfp+a@l2?*=Q-<%?eSZ^@)-kOL}@^GhF(fKYzO0P<<>Gm60E+hHIX(3p~joz0JITwx{Ih=R7@c^!lpn zba~G2>y5-HsNMj5iuZxn^Q@HWD)VTe9#TBT?e#{bFR?rTw>8D*#BUqGy9I%bHe%xV z-U(y&H{3d0^Wu}dl}-vpS8CBskqdQ+)InPnZPZ2ASYv9w#0WIPz3JLGBNZA2<@f z4neN7zj0>K*KxyD{FBFi5swG#j>~x1@E_hZ{6id3JuOkD)#(wTUiL5|AXMsm# zF#`kNArNL1)$nQn3QCl?MwA5Srw}V>gA6g(EI5Jtz zsqd}6;Syus&qsEd}&)y@4rNr5lN;@*{Sw_mTg zb=J##Ld)@aTGw*sBp%DOunx88`}DfN?%&xzIqN->^A8&yKmK>4k_>l4vT>&3F%=J~ z!@jAH|Gdhuc;?~%^S8wVHH-h18)mjGwo~c#?OV=b-e}uZaA0W#k6VZgH^b+ol_po^ zw%?ZMQF&N*_i{pqe`j~4q6Ft7yH{e@C9kc!9G2CzBc!~z?c?uXpEG7Bgv4;0v7K;# uy)SI1=CSO=B^>VAi7L|bjl}YWlizuUy)?DB{h<>WfDE3lelF{r5}E*Wsh&vy diff --git a/resources/g2/50.png b/resources/g2/50.png deleted file mode 100644 index 94f060add967d6bdaef954298b7612428111c214..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{e!3-pqi<@x-|wyeJY2b7+&{m$dAhyv|9JUkbNzG%W0U$l z>OdnHOM?7@862M7NCR?eJzX3_Dj0qH0;jbYaImoY9BA02bMOBe=aM<;wPCZ~>6kZc zQQCTKy1B<0l`FTe9TQf$(77SveQAKW*Ke&Q3=3*@h#Id9`Li&K<^S^!tACZa1gwnX zvlD7szIEq=NvXztTnDxsKDGUCq({_=0a`9J-a&))yUoS)6Q(4%?Q RZ=gdMJYD@<);T3K0RW1AYB2x+ diff --git a/resources/g2/51.png b/resources/g2/51.png deleted file mode 100644 index 21ee9e0ddd232d3abfb7f31f828ee3b58a4470a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5ej!3-qBRN@8+#`wM;8}g_Se>TcD4@=PG>OAZ*Kk{FaN(@z1dv<|7_#u;mZ5H^;bI^ zpKCkg0yKrOB*-tA!Qt7BG$5zm)5S5Qf-$x~P^ejf$K@ugh@$S&BfsOfO3GRv`~I`+ z#)gM{5|f1$6_l diff --git a/resources/g2/52.png b/resources/g2/52.png deleted file mode 100644 index 5fd0252a14feb85622415f8e2ef1f71b006904d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)kt_ z)x^kiz+h?0stNZCBM1sJ7O907SVNn#jwEz?ebPGSwG)2U^!D&Js&=O&nfRP|8M%N9%%S~ii?3o+Qa2^5FnoMnF>-OM?7@862M7NCR?8JzX3_Dj0LmM!b`cWf`z_4 zpL{MlCC1BB?eNPvpNc-#oc&pL{kUCth($ diff --git a/resources/g2/54.png b/resources/g2/54.png deleted file mode 100644 index cd8625707ee2a2442cfbb7adb3cc1eb266ad6c70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6G!3-o%eH76GQpN#3A+A7L-`Tm@Tz|WIzI|}8 zcXG10vU0z;|847jWn<&T^6{&kji=ii@AuYEXE3&Bkgn#ozao288K{l1B*-tA!Qt7B zG$1F_)5S5Qg0Xc%ARn_Lhl}Hu1rcxm`bRIy-J~^puKn}Wd4V$yGWcm6YgxZHHBCwI z%#Q2(6V8aUiwiDf^omN23cX*v`R+v?pG#o^A=#-`jH}sREMMKfnEBt25Zi_%{*QI5 i@AB~M*t*j011l3F^XqDbH9vutGI+ZBxvX2%Lo zz-?+C73eG z7}Z2y8)=N;++j37Q``|P`Z00+)mgaI$n#z0rC5Y~Ht&|{tkn|;T- zdAq&1Ue|V@zs?G_f$qX;e^P=`m_k0V5`B6PtAwZ=mkW?@``g;A&xw z`|CcwN8I(L@ExvS9}zD-N0k2fX>YsJ(zw*A2+K-W1?gIW^m-abX?Y&5EbgDWjPi51 Ze*tiWDT`)`1GoSH002ovPDHLkV1n9CN6!EN diff --git a/resources/g2/56.png b/resources/g2/56.png deleted file mode 100644 index 17e96bbd20999f19745e57bc7a9025e90885531b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^GC<73!3-qbSaofIly`tnh%1m5S5|H|*VlJ;UhQlg zU0ghW{rc_d`M0h6-$$=jHa4~o4!(T*cE7m)V)^)LZu|V^X7A+W?S~Ifw>NH{K7GHp z{_}9<%l_Kw48}_A|E2(qV=M{s3ubV5b|VeQ>GO1P45?r&?Z3FGS%JqT+2e>e%fXna z|Np(EkCbI)pHDuQQYL;+lFebqAxkB>zgK?D{&SL5OuXXR45@p6Hr=1euJTZzDaDh0 zUu8k6TUBZ{dIvXbP%-4Cd|3+}6ap2k&tEO6=RB?Etnpa-cxMD-j-ahkL>&vdZ vSKa&g%f^SEJ?;CqFr0o@@6n(;?+Nq$b8M$mw$2Rzx{Sfo)z4*}Q$iB}$3}L3 diff --git a/resources/g2/57.png b/resources/g2/57.png deleted file mode 100644 index 6a1c64c248580416188aa80c7689df4aa26a3a31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^(m>3^!3-pq+%$6mQceLrA+A7ryL$d@>;CuAtM#3o zy_1vod+Rrw>sNEz_lx_lb~aWvHqLKujxH{K9 zHszZQJb#KkX*m+};OwNo5p!KVL??3iPcD9~{ryRlnOmuMY~0PPlrw9OZ@=TpW2m#x zZo#kh9XDE8E5whNw1p;iN*#53eeKZ3{c@{6<;Wh+K9gN_J9V9}yY2O!)yI_zjy&>q z6qK}cG~5=(zm!G3;zrDlR{1-Dr`Z22?fFz&#q_|2?Qq94u}MIeGI+ZBxvXanMpauy~7sn6}@2!&#PCaD6J$0y(p9bGdh}z77RPhrfA7z?hlH2T&v{oc z_fr&8JYQ#v!F*>zpj fjqlsND5_xg@hGi&)v(GM7;p@pu6{1-oD!M!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXZEKj`94sMo~Mgr zh(>VokN^MeS>E6OFVE_HRB)0(s{xOwvJ+!RBm3kP3^yw@)B+jV?){f%kjS|z>bcUn Q1E`b1)78&qol`;+0HLojR{#J2 diff --git a/resources/g2/6.png b/resources/g2/6.png deleted file mode 100644 index a441a6c73d3938cc4a45399a518230ed79ab6ede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0lG;c0ug~&5s?ER zB9I6K0ud2`Kq5H63J!ooB60u(A_qX^01*)!A&1!HbY!v=ZNux7 z0(f(}j{RshJ3$wtt~EbWVf61McxIgGAXW%fRR?6+Ux&)mN~_+`{D2#oV_6WQt5gHb3LnlfPna`YPCKA Xf+pKr<30by00000NkvXXu0mjfA{Fs} diff --git a/resources/g2/60.png b/resources/g2/60.png deleted file mode 100644 index 2b4369ea8a9a9aad804d46a001861e3d32e8cd9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2968 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 QJ*EC-14|FT@Y?(T0lJhYGynhq diff --git a/resources/g2/62.png b/resources/g2/62.png deleted file mode 100644 index 95e1c35c8d9b9aa2c941c121e6b294bfd4b15df8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 970 zcmaJ=(W~2Z6h3mr%$1Q{3#*uiTiVSso$;R-_LRB6Kqk zfmJ9PFlf;Z3KkZyV89}s2JL3lJY2AoJoG|`8Dvnn0f!V;r0RY6nf(JEzH`p^y_|F4 zob%zO-P(!cFB}Je6ZO}3E*E*TaQxUt5zm+hRe%k+bYbs&A^*oJ)oPVx8Br7zMKTP{ zvdnh7-RliTqcDzVX}VmkSOx?hWT~WSWl3_>P{4Ys)uQV z6c*>br=K$t-FFm{NG6GEBNjZEw;G(T@mmfmbN%8%x2RHAX5t5j-aRiPP!=PgO@ z=tVJm-)xq%t4{kXb=4i+mY{O*HMG)Q2aF=Rgucm9eH#aawfO zs||f)GHEACkmm_1dJzp^?ULYCWS`VS%1n80sRgUnWZjz{g&CSJsWNaRR%38YAe#zn zHzdz#`dw!dbdxy9(-^HXPLfavCiJ8fCu2zvwB8NhK7KH*zq~h{_%N~AJq^I7yysN;u!~0hYajm}d%HH#z zUHrKI+)rD_p8f}=H-6QAIov+|&8KJIx_{-u#`fQh&69uL-M;#g^5z@24mV3D-+BDn z&du)W&+lZ}7Z2{e|M111AN%iqa{Z$-t>oE_yFWY#?E`P?+xXz(*nwNO>!qz{uIDfB qxgXrT{oSeW|M+YC|8Em@7=HPp9SrEOnkonBpp#3ugvu_YBsJW&8{C#NyRif7Qm`{eC|dM1r)jX@ z3B@$C$f?zoSVGa0RaQdLu{5rP25Vfj$_bSetXgLW9m80(=#+sUkAJ{7&-*^l`^)?M z@VC97IZ(hah=}&PnfM%D@odDn&Np@ z5L}WZ1_FUdB$iC3ve|sGSgqAa8&D45*m{@Cy7ep@i)h(x(~(w)voIW1Hwt2AM7 zI_gE%EITcVfX5_qC_rZ-&RkL~js`15b*h?WFmMy#qd?&eanXgYO27_oc${42Lxax2WaoniKQ;_BBu^7r^Fw$hD%r?&AaN~?fIAu~$98#1H zB-n78S99)E(POb=Hpc4U30APXL|P1T!I(Ri5>uL-Erzv9yfl?DQefi2>;a1(aK&Jc znVBT+%21-_43#9cs$|g+N0Di z9*Xwyd`J+YK3_5v%EV$?DpktotJNw3Oawe)Amc_ljqy3cQ=)@qms;_qt4h9>tV|cC zP(5KZ+RbLhV&w^&;BZJR7j)~x{K-&wG@dMGwOWY+H*1i1qwKaQULxwJ5!NYyhN#qmf@i2^AF!91bE0VG2?V6gfaVAkmCMBvLt) z@}gW26;-&qcssB(I5~q?Fv~t7tT1s^NT&mumZ(%Tq@15?fQo<+=w3Q- zC5Q$5y0AwhI-=#Wl*{RYcDZ=3SMd8q(iX7WA{3dR$qZ}Db40~yMQ#g{aTFy{ib5Kz zU;a0xp9giC@nTOG4=q!@*Z1w1xNod?`45MW9*O?5 zd*SA;b36K!`PR(iCuTLGv9^|vc~6LYiNuQJT<=iaNGC&?|xNxaBFD)@!L7a z=DHQC>61Mhmc4m}zsEJObX};fy=BJ9u~vMIapwcgzt)*1TTLGhcAsfm75@9?Lo*>Z z(9@8=_xXin|4+|wJ+ohEp3EGve;#t^-IQx;*GQXuMGv|XXYf}m1Z_}s#eB-Ugz8#Yb)`TYq_iSiB z6#IShiu_2=zK72!=^Ib_UupYp%l6yT8}{CQBI3TBT*e6Nf1J6vmwGgJ=Yn?Y*t2&Z OQRlj@_7iP=d;bHP#TsJ( diff --git a/resources/g2/64.png b/resources/g2/64.png deleted file mode 100644 index 0db6b59516a9b6b7f6ab442106770c0e4923f983..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 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 U`W5}~{0EPZPFml*^Wok909rPco&W#< diff --git a/resources/g2/67.png b/resources/g2/67.png deleted file mode 100644 index b17eae0ad225c646e73956284dfa31afb62ce915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1248 zcmaJ>|8Em@82${B-NGQ9*3iOb9IU!iFHqzRl~la38+P@So4aX^6%IUOfkI9=OpzM8 z*u^qSJX|q#R;+S{0tFhr=na}!u)|@hDKeHS7cE*snV>}qX~L!-kAJ{7&-*^l`^)?M z@VlaW9?XVX9Tq!BFoMl3(qf1W#re1@s`)@xi{#6RVl88!fRO_x55W8Yml0ds z`W!^qWlsonTH^9Sp%9fy$zUZDt>u%jlr5~ z9*XvHTv!ldK3^&v&cx$+RV|K=Rw@+;P!Zr!giILdG|J@&PmvCl+)CM(uE?X+RC%IM zgN=m2U^AH3x~`BUM@NFt?W^VK2+cm|O;Lx9I*FA?)o$q<*0c}9|f zLMB!&WUJNdkOII3fCPXHKoWov07?jeI#?R|C74v8R$y@;k|06>)d4gXKn_6B1j8g$ zSg3koE(A3N+*`a2Ff?$nh*vNLd_+WcBorZ?4(9X8aybumFVq7_eA>X>8uaVJ7K`eLl}b`BrwiKc=Dc3P?-xmH&}NNNWRfN`jCGVH$}S7!F&MyMjD#u$ z^NfD^KNK$?)TwSu_X-ZQUH$2GUBB<_Sk}|oe|WcdbKl&izLRjQ>#Yq>I$zthZ2!XE zBS(KfGBn7yjeA(uA}o4g|z@r~@*jH~pUpV;S=RM(;o8x0^%y;LJ=W9QGTFGVi?u~eCI)oenFCr)fRc4@$T_e)Ff zC$q4r?Mpv8L^Q72dG^XVqIuW!(U+-}8rZqUEKHwy=wf-t0$G0VSex_Q{Dq4i-{v`U z`o@6|$&O6wduM+)FPxsWZ?bRj=o8!4*IPwHHbQSaETg@*X8parwQu&~&gQ+}J+t-s zO^?iWyIYVm7hn9iX=3i$jZS32yuM9aZauf)-`>uD%)-q%KQ4(5Y@he3}0S z9^;f{9@sHDV6n_UKJvm|OE?H!e5r+1TaxA97D*d5C4|Zp{>v27^#07U=6ZXSGYAj*u zqBRa2*kGf(bC4MqQgntA_5)(0lMGYIei+!u5hhkMa7YvJoMbUeAm(fN2YmUw_xZeE z-sgw+@{UYRMpvy|vl0MSjgO5^d;F-EbpLX%o;vv9F@WVTwQFXF*Zxlg!r?GUMp%{+ z1Wpv=vMgn@*+QXIshF0v=s2Bjmy7^I1J4b_6L?f2VhSm0v|MDf z2A8i2dLv;v$q*HcM8mW|a3U3#SSiQnN{NywnYLm%dD|_wdNm°OhW2xS1*Fsc-Y zR`7U@k?fe-lJ$;ep|d>U7pY)6N~kfqEV5Nuu(M*bAh(Tdr&j3M25MVAKZO%9l1egc zS`buGET+>HRjrjuwrRE&7dxE}f}jL=0VB&kwi*-~M6$)^+Hu`YS3BBbx8mM!_Rs*~ z^HG67G!zzyh)B~i$LA8>uuMhG*UJ^hvb!w?5*#KAJ|z*-QbaMs7&)O@Ox6vhSu46t ztJ}SU7=Rdn44?rR0Cj*i2FL@?qKu3T9XU-N2Z@9{17;K)9*_V?3Luq4I*-g0YUGfk z!-K_Bz_AeHv6L84(nMa1mUXdO&Dyr%x;FB>f=M7V1B@2n^-#jZC5P5Jaig2A_6m*r zW(zetxF4tx7LEAgOeiIgnIxwvDLt=Ljl69cu4AEYi{dzB0&)N$@Vq?WS}vH)c!DYx zJQUk)xzX?h8;=XAl$gm#WF$*P3JhtmWQ~g~@`M`;qeKWPI4Y9JWRT5ymw&l+eZJdp*5ke01B)vqwL>!Y#Ab^{<%vOEK>~r>^_z*TF~h4UKQQht}o$&t3TX zg+nhL{(^FzS)YG?~U}oGylpUq0Zrl=O4xwmYrMu z)SjX2fraUvV<&#=+6yn9{P@h|#>an{6|U_sU-;+qvB}iz>Mc9(?epE;yY0)|8Em@82-$mMGDlUh9ZYFP|a;tsCdKzH+F;DD9e!@aKl2XmgK-f8o7|eG*V1; zCzjd35j%HgH6EscDg`>eBo*3GphDe>tD!(4jTBc|2g8)nWF5}rKV?~?~ zkV2U9$CzN+9?d)SX2fJM;Ea)C%{GqYytG%g%TX?x@g(#9Oes{TCNu=lGC=15dN)8t zm08wVBB(7va2czwzz54>5}u)rTGouXEJmLd53yv7XEFktllWp-C?}+9CJc*7jn<4B zt(e(CkS>Ptv24KQiuim9S1H5E<=ED0F_i&NJGXDCT(;SNN>>=EV*K3Fy-Y0N zNQFJQM4*&QRw|>A0Kf_W4}b_j7=RQ2MHPSwXcD@47!JaGjz$580Y3qv7Lca_WB}xJ z(1*bw4Wmw&_QHG+JX^dOP$aO@DkrP+xQu?$5(=`hn2^bYOQj4{ybuS#+-gG9(LudE zigI~eEZf2rSF9?fC!+=5$1rTAW$sw>9it9n~iZgS+|?ROoG`Y5m=bS5|k-R8%tILwCkY< zg#ipk37Daj%m1x#@0db0yEn8kplSH_hl;-3+Pt!TP3MtsTED*h*7TOXtKHB^}{ty{=ZF` z9y~My9T@&=mGx=;V3V(UQ2n-iOnvGRzTjwS|E;m1<4=|?sULs5RDEFNd1*@5Peb@o z-KHIl%T8asn?BcdY{iA1#%m)h+VAXBNt^e07yijNy!Z3NeaXoq7hl@8zO$}>%EqUu ziI(}Dzy5&X&&_T-+Q0LiUF=};_nvHBSIxwh!S4>&6=qd;k8gW5{_n~ArH}jf9{-;I z_H6G*6F2(~AhmZV<-V>6l6$%M8SR{Ze2Hggyy4F4>*VWu60PYimo9ByvIFhyTl&gM z{r0|5c%y&Wu1j%W_Z~r-@?iABk3>=S4xRKBZI$|ka?bhwh$&wEAn@YwaL4NM`R+Ne s;c))Z-t5>P?b`U`r|)(g+^N4});5lu*xWcU{n>A8ZE0&hxoS(te|e);0RR91 diff --git a/resources/g2/70.png b/resources/g2/70.png deleted file mode 100644 index d41e3cfdebf0f6dcace8317f5b0dffcc1c4bbfb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 zcmaJ=(Tm%39RF@ZbL=+DU11r^Lk2~IMu;+TD_Ba^WR!l5XS=l5i}S1u1N>#)^AVMwsqoPaYj$*WYspo)9DleVF2Y~Y&#=%38hb$M`C?k@+Ot;)EUe=lf`h3mg!7}!|?){Q)oux zc~g?>YC5diu^YX1CyCFVSwvM6`5sD!G6e<;4FQ4zBr+fckbxtcMV^cT9rf!d@!;X&Igmss%9yU< zR)uajg|?@4yR|s>CzBYZUPKw#>ayVAvPY@`WhA^aE%~!bckcEV!3YhfR2DcAD=?Xo zKem@mrsif$- zR;?N=Q{xy{V11DdC1xPglVT33B(f;fWKkfXSV}Md_UPwpDIIz9!j=NhAKZO4Z7y%F zuU$O7n|EGXjm|Eu|NGd}KcTI2JC!51%WKK+AKdu+(MNWc9(?;=Yvn$6b@2X|_di;H zC;z>BWdna^@5C=R^0)T?TsgPhd*X5G$J77p^S?GP?Hb#kKe_tp8PbN!tM6{zTwL`p z`L7=yU3>1UQ!8f=?tcBr&A+6hPra6ZdG*8H@2+p`zcISDvHjL>U)))mvzENLrypGZ d=9IO7dmmqUpx^o9*@r*7ncrIf?1fj}{tuX%wDbS~ diff --git a/resources/g2/71.png b/resources/g2/71.png deleted file mode 100644 index 347c8f3c4a4f64c0508a333a4b557a3596453fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1312 zcmaJ>@oy7#6#ou{mJKMQ#44RDtU`f8N^;_XMGtqK-PUC{cf+DpIxV4_1#axX3PlT4 zQrH0(SD~ghsOoqY_xPz=;8tl!PfsoROu%@?260Gdh^F z!Z8-Ygc<+>0INho$z*P&lGSKJdVMEBbldGIw|h7kgz>l%k*hI3ESrFxgjQ}tl}@9UG3&!NJVuke$CmQbgAq?Q?jPkNa4;d0 zqZ+LlLG2jsBuU0*3pkxohKUD*JjbQ``m)(91WF2M{1PNA!(&P^skNtZ@1P}=amKQ2 zUoM&%OO3(;txSe06h@Vr)aq<{J#8YqR&kgs%J{m&Q6a(S(ipIsBs3{=TUD$>8*pI} zFBuEiyCd#YJdjBxa=BrM0bmAz27m=10zfwagAxEm5IA(vFcN}7iqHTG0X__HMj#LX zk^oW)$RIF8K+XY^UMPgXv&Eypgab1nao7}Yr`E?B!y#KN=HdBBCc{I~OKAs)s{msa zL`Y@jG?bucvzAEC85{K{$G9|1Wi@husw768%z~*LB;vB0ShpkObH^e+J`u?X37AWx zCKKcU6aa)k^b(75Ppt%gnR zV&iw=1DBX&R$aBcQS*h+{$>AuSJA+_IW09)H+w@r8GdVJD$UE5&)xdfl2+!ElJnm$ zk(RDsSaR{|qS4Lo9xpW%HrE&RTp2#!tgP5^Z1u*Eu1{(hH*H*A*ON=O?KrXU^<&cy z;${{(QY}66W1nPx!^g_mZxr=@di=SPr@L#4cCXzU9&TTq{{tmm(cE;R{gCvC zH+;Ejr>f>Om$zrntlF)I=QgDW8j+Eg#-s8L^EM1EUe>ruw^IJuKabG2q?4*A9{+W) zXVt`^!lkmz&wDiw$Y1h!nC*0?~SJz)ZTs&=i{zGod9|f@H-p^AO+P6LX Oa}{OPhI6I$d;bHEM?;PP diff --git a/resources/g2/72.png b/resources/g2/72.png deleted file mode 100644 index b2cd5dc98b7e545421adc9e7199c5585b9b1dc5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209 zcmaJ>@oy7#6#wEdWgAdPGn!DPgEDUMeyHIlM?BS8mMN025)4>!Y-`FjunGR4aGDvjbd@avg(Zn<_9DJ7`i0G`bmdsS8s#2&U zM6?UETMBt)9?6Q>Xo4yzp^`3GW67GOHtWTJ2XH8ekw9i0Il)m#Im)0>8Vs9n>7uiGBHuF*CFr-08t!R&PnAxYzd82sAM&))?)d(Jkii=v*jji zN1aaG?GAW-Eb8Y8LZq1_XAg_(sq|P*w~A(?LIRFni~&$}0BD1uU|fWn3av7O009GO5*PtsF#xgv3T~Lfpvpia z3QI|7so>$_aX?cb#5kh7TZ*A+IgnHNd_G~CTCHY6+shLHSiGH--Hhtx3`DR9xgORU zv3yf0%^DS0t|KmhdmRD4GfaA;EEbQ@vJ_R*QeI1&MXhEPVWWc6G&BIT0EEEyvVq7+ zPac#f8VX#ANS8aZ=EPxAJ)GKzB+y3=A=n4+f*UAi>t%C*X>)MBh2k_u|26=iqm(3pXzAyYk$X>!*(m3|}7ozI5fOx%$1g xOY(W)!LeHO_!l?#YG-z9yKZoQH%>^m+}qE_M?ThD=RJHtTQ>)LM>g#`^dGO07N!6I diff --git a/resources/g2/73.png b/resources/g2/73.png deleted file mode 100644 index 64579a3a4a7b77eea649ac96ad7b636aa21b61bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1315 zcmaJ>@oy7#6#wFeg^f|QghphM25+Gi4+g%+6X^Kk1Lq5rGv%Z%PV^ax_;?s&Sy9fYt$Y9$?^9 zSVU`$8|+D(6>Wi>i!X2~*iRZY42HO^#(>QnWh@C7CHk0b$d!-z3dvAejKO?Lt-%aN z8;Ut_i<_bX3=?*{;(=f~8kbUHF^2=1P`N0zm)3DkW7vbo{8S?B zNXNX{WLVCoip2*I2fzk^3jhv)7yxMi@+trokQV51!59yvENK8N3W7KgtUw|GqyS{K zFn~gygn|=h{7~Y-v&Cb8umBsWaxz-4+Zg1mQJzU8e4-eWWf3Y~hy$RWYMj%Oyp9$O ztYqd2_E^!KD2Fm*LJnpN1`WV;DyvCt$8}B$^*9L5>*RypL@X$#VzQKi#T-TuPykQ@ z5CX+Zfr0ZQK93@>a7aNopLb<4im=%2l+($0JS=MRVWtp{#w=)(Fb$DL*`|lI4tfnR zj6wm2BB5OV_1wrwg(mE3Z=*odz1#08`bKN>%8r(<-Y-|~OwF3IdZV`M+(p<`TQT@n z(`G|pZPQP?j~=^ybB@NdXS7s0)1J1S?GbF1EeB|IxF*OkyY^BN{!pGi%rIyFBOlUn!m zE}6CP>CO|gj}I^J6>s(LsQIR3W?#59?ZL6y*@e2rr$4SE+v3LN#itz~U7t4hdHU*D z?vKfhckV6Q(pF!&$wYKrs`!fDh;`2!Tytc`bDyX51LFuhI#W2f;pNvVYizuV6(y HwfVq*tQ1iw diff --git a/resources/g2/74.png b/resources/g2/74.png deleted file mode 100644 index 9dee6ef127779b58bcc58b3e967ae486bc42dc15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 976 zcmaJ=!He8<6n?UYlwH=KBSg$0$RIhSkYZLMrZl$MbzD*=wJ8iTs}Tc^GD?Ij%wcp> zI^ZZH2ARqfbC^RagAH_GSBwxPha5&2N=jFp+JI389cT|Z1ewBsKhuA}$M@d*zRP2s8%-DpIHZh&D~eGFBbWU!toPpMSQ{dr3|nJ7tUYWDdhhcQ7)G`j+G=)Rb^eT zo2Jp}bOwXrc7mITb);}mn~sfS(p@C(GK(rCXbiMOuvKhiU||oRjY|2HL<<(>8d}*1Ma9?( zfQDfPj$0&Y)3hrHM~X6OG-j6dU^ql!NOGmJNU#beXmrJ3Y8I#4g6T*dPwoe*JJtN8 zLGdJ8DGMqi>wMjijIPohYD3@fV=GGf@nV!NLtKQC3Pb~_HqbW44~fc{u7{!#*Ltbx zW_E;*6sDx}WUIpTYQjjD0#l7U`fOm%y-pSmma&KC5nkeHrpECNQEI7bPuHDRYuxLF z!(r_E>G5%vWe7+E=mEx!a48_wDbq-$?!4|UT0v$X=i|j{wnQ5Yj`IXjp~@=5>Vja( zN>?k2wa2~wWHe5qI8Q~;WXx1?OQY;2UFi*)Z1-? zV>>)M5IIlcLYX~Qm_@COGzwWXayaCRD3*)Mzm@)RqezeKU#zO|^51vgDa66<_Ss8M zfAz-auRXc;>G19W`z8~1-adi)+Uss4HX^{qE&KfHbA)8%(Jugy(kEB*G%)3;7jXHT8E xcis6%JACT)wY~N4UveLQe6V}+-_qV+oA0vw-~9H8aqiJy?(S5#Z=QSW%758_rUw83 diff --git a/resources/g2/75.png b/resources/g2/75.png deleted file mode 100644 index ba2f7bbb70f80d3f687625c4b9fce922bcdc6bb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1325 zcmaJ>;d2vp5dC$^5NUxF0-iL%D}?co6T@&|EI|$$Y6<}kd&M9bn#u{m$-n_8#2Pi# zR6+@ON=m~JhKvLZHq?N%Mm#h$`Ov`tL0V1as<8yfFsPBaGKDGlGyDVYyxsTq%f1i0 zvn{Jv8OD{AmjD39Evs2tTj0foR6kK%sEYK%rvNAht5?)j7ux>`M6Fg6ghsC?Y1+sz zW{zWBE|JuWlp zN?9Y~G@(3$1vsM9rH}bc$p|amfdvP467aMv#L8kGc{-$!l1iAHruo z(*_Vj1T)7-Hf8c;xL}@7z)lKRFj}SEfO|~35Th43I^|;0J}w(}g_b`VHm&N9`Sf$fj}x6&Gh!>^LYrAEWms+A|%%fN;-*KGkSN{9L(8;Jl`ut zawF+sSc=Q#S_CnmY8uxtIvr=E+?K*HN5tdp2}Q(2O3IMHVw7>T+-X618}4_IVK*)K ztvz99I_A%%6OwcXk^qF->8BC4iR%Q3DVu0BHbO z1bPS-;t=*?!@W@8)80?TNewM1 zbYjp?z$gh*#=_-a%KXt@prW^GSJ7bct^Q2~EiPNSq^_o=qjhj=wxX>0kuW;3;~Xr$ zxk0%tzj6;V=jHXMfBSrm_wdlG?aiyDjk`A0R8PKq_MP{^!ltY1@cqYsP@TVju$b)~ zda))Rn^--6@cia<*LtD$2vRk6-Bc4e()Zx)ts`%K?8&O8J+o!!C~=$(i`?_DN z<-iB#dq1ig=BeQK-HA!puSdRVub;W4{Hxi`W2OF256^4vL(uHPU+*n{f|Sa&*G|26 zin(}q3Ny4(XdH}Jc3-{QH$3a1ClNl&_g^ZEBd8w{PZhOzWb-vmg@Md)9?!c(dKDC@fi<^@W}=&BTDGknJmo$h*tcsj09{aZJw{ET|2>BK+W+O{3zY$xx} znZ4-1_OEX?UD|u3`}V-1;{N)BjemD)ryuQyo;~pePW{XdDOdRjjkBO}f2OEC_Lp+* XmA(n%k%pGXPj6ZEs-<66HGKFVcSlos diff --git a/resources/g2/76.png b/resources/g2/76.png deleted file mode 100644 index 1a5c6f6ef7e79f4cf28cf4beb3d3cfaa10ceeb1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmaJ>@oy7#6o0~!E)3GJCS2r5y3vt~7HQ;=LoRTZ+bqptZ|u+-8!hGt6&rGa5*ult z!2%r=Ia!g06ltHwOradRjVIfU$G2eD)g>e)1$Tj6PU?lB1sF&GJ?Q~ zqRZ!#LZMJBmPn^F`Fyclt~VN_1sEE5uFd5#c)dn{z!Hwou{fVhyR$i8L5)5(ytU6k>BRXCW<>$HKL;(yZrgIJnK=XFwKoNlBNB=u1gMqkyBD1vT7g zQbs6m0^kAMI-R7~2XR~`2!*DHcz(>|DFuTQi3G~!aMEC6Fbi*_-GogtJA_uI@7C!G}8tWQuwVkzdUrb6{xtf{6@HLo{NgxN__ z9)|S`LPQkfet$X=$t4nMCQ~UE>-9PUTmmAdBa?bIiwgy_r^1G-E~Vzr*5zU&U7IX5 zQJYz>r!dTBGzn&lNYg%!54*KtfpjD~mQ0uPYNNt{o74FOeb8-`z2}^gE9|D03=~3LL!An z880e?QCWfKi>H8N!O82qA{O+Uqp~fjh}mpNRa3Q^iZn0W17x6$kuhE|x-*1SrscXT z)$nJVvBG4gf=YG50F+T@v*=xn(JPPv4<`q`N;H^FMb&(&R?eeFh2l7r0aONrK=aZ- z$YDGb&;%8aX^2;=zCuA0tji^My<#9Bk(Ll;i7{k~C3Bpm$eU|U6LK3-kU((~Wf-J# z+T~xa+&-bv3tRde0=#km`g%=&Wbd}FS@QY&1J>c49n(YELuW2Mt#>W)A6PmR*pOO2 zXYr#aGX{G1^mo7Aw`Ipjc4VXy8+a%7$6NTVUsrqWn@%nK{nDW+f89E^cE`?^SI^#f zc>YfNI%+<#z}oNlPCwlG<8H!@?RjM~`u*jjUGE+_z46}h!@bJ2sd9b6<40@e9sgq5 zsgp17UeVRrv8^X@VqxE?c<2?VDgnF76swH;Vs| zyt?mZ@&0e*>%m=zk4;!d|LNNQI0{eOXFIMPzH$RW@1a2F!?Syze_!@p6YuHb7*Y{8^}=r61_K_J3wPM;I44>u zSFpH!;K*E%_FsOJqu(lzn5XG;V|M5$X&41ms#koQH=&pD!p6@W5ewoTU1+%Ou;sl8 xN3~#W#-Zbl-^3sAcu%;%cwfE5E$!oMc9BkA@3o&E7yzwe@O1TaS?83{1ONuCP22zg diff --git a/resources/g2/78.png b/resources/g2/78.png deleted file mode 100644 index 7e0f3d7906cfe9d534d1bf1b3c17376f2c485b2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaP3?%1DUd;wloB=)|uK)l4S7u;%|Nj3G++>;x58w>=TFM1!2F=t}krxbi~Ny9vk3NN8%0fjp@ zwKwgUtvavzr)}&_I(|jtpsRd%erROO(YVGPUM%xlYo;r<@YbswxM$7KnXj4q|IdvN QK%*HvUHx3vIVCg!03dWb9RL6T diff --git a/resources/g2/79.png b/resources/g2/79.png deleted file mode 100644 index a69189ee3e8590bcc659e22c5e66389056dd4aae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1143 zcmaJ=TWHfz7!C|{6DKI5Oa>lO@P=)gcI|9fEnCyLg5646S$$BT zI1$;4BHj=g`k>$*HdjGm!W0n&oj!OOPQ(X&D_BwSLOhx46tNzXoZI((|98&+=V-ER zNA0q8%P5MfjkoeC(ywve>MHUr^`5ICT^){PaT;~uyl6nGSw@`@#8t5yrl2Sf?7t72 zD5{E9GFhBW?Bpb*dPE1~u~eO~DXJ-A>7tZ_7<9sJMGMo#n^QDUNjoD`Dj$ac_VaYR6cSOk{ZrP2l}#i;6d4c% zJbt(2Wmymmdf0|QFvxBNJ}>KIyyOYG*#<5UYo3`~9b|nHkU_lY%DdHzbm{E|(KZ=b{D_ zF)}g;^_6ci*@G}Ldyo#I=^)tDp=dJ7o15qHi3AtdOe|^=jPqfdD0mb_=3A5CAqFgEsdcGiA7ZO@L54@C=w*LLZ3 zu~f2cyQwf(O>|b{R9l)%|87)!`@5B7e<;p3XRMbKGqbCP!1CD4;o%K;=RVr@b*mao zj=gGsc*eiYHF0qA<=p7yE4{9>r+c65DqS4E^}%=P&R+3_HeAE*fAjg!y6(uA6~|AG zyKoJ|}jlc&v@T*0S%=Pg-r77XSbN diff --git a/resources/g2/8.png b/resources/g2/8.png deleted file mode 100644 index 283c1fc325c26a0fce80cbd957cdf9237e728bd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D47P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;VI^GGzb&0iH=jK~zXf#gm~@!$1&*<0=sq2xKIpq7Q(m zL`EVi`T!Mugh)hXC9<*-iHPI@cmyOO5^B^IpjG!Puv)8Sxn z3VDy(22r}BxBb-Sjyw$#+C5|Ixqm4F+tcU3ULLPZtf#J*0X?;`11Um`CBgUWN!k_@ zTTh+L9C;do>I4yjqKUw0d7IgK>UtT(JK&u}u}ql9`_Ua-G$2Uo6ns4xQOtXaWx||1 zImCKSbrDXOfq&<~Wx{&^G6Bd5$>~4PT{!A|v`usZ^;|ps4xZ2F-3CN7VYf1o)RqWG z_p8-#6E0Oo>{wu0rPBybp4JUALHhP3;K~7;Ef!`>+juf}M86O$%2O7YZ~{&SoOyfA v=l}>@8^G|_O$ZsF!L8~W(ZpZ0#LT=By}Z;C1rt33 zJ=4@yqg0@p1D-C9Ar}5uCm9MIGT>qPJXu7C{<<2B$M!ogZKe?&>R1VDXIMQyfRPa>g>4X;5e|6cPeNOi)z5jCSg;LqqrCf?H z-)rpVDKoq%DyOnDZH3FR(&_SA-968e=APQ!?ZPYHoETBIC4=F1y@+X(_nnJ2A2V+M ZVms{|Wv0at^&jXL22WQ%mvv4FO#o6_dddI* From 3131e883f440f559c96b6d5068d277f2699ab831 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 17:19:57 +0000 Subject: [PATCH 17/35] Correct filenames --- resources/g2/sprites.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index caf905a824..d9249ae663 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -87,16 +87,16 @@ "path": "icons/rct1_open_on_pressed.png" }, { - "path": "29.png" + "path": "icons/29.png" }, { - "path": "30.png" + "path": "icons/30.png" }, { - "path": "31.png" + "path": "icons/31.png" }, { - "path": "32.png" + "path": "icons/32.png" }, { "path": "icons/cheats.png" From b0bf1c9d7c2908f818b24eb0f55bca2049d2b295 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Sat, 14 Jan 2017 17:43:18 +0000 Subject: [PATCH 18/35] Add missing file --- resources/g2/sprites.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index d9249ae663..d7d684acb2 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -173,6 +173,9 @@ { "path": "track/junior/steep_to_flat_lift_3_2.png" }, + { + "path": "icons/58.png" + }, { "path": "icons/server_password.png" }, From afb85fa3d7999e811c15f6cf55ce13982da5025c Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 16 Jan 2017 22:46:45 +0000 Subject: [PATCH 19/35] Fix warning in cmdline_sprite.c --- src/openrct2/cmdline_sprite.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index d768501a3b..8a47ee1313 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -14,6 +14,8 @@ *****************************************************************************/ #pragma endregion +#pragma warning(disable : 4706) // assignment within conditional expression + #include #include "cmdline_sprite.h" #include "drawing/drawing.h" From 7380c789e0c9ae6c2ebc0bfd85badde28bb3f477 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 16 Jan 2017 22:46:59 +0000 Subject: [PATCH 20/35] Implement platform_get_absolute_path for Windows --- src/openrct2/platform/windows.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/openrct2/platform/windows.c b/src/openrct2/platform/windows.c index cc528147ab..b35896a688 100644 --- a/src/openrct2/platform/windows.c +++ b/src/openrct2/platform/windows.c @@ -1057,6 +1057,26 @@ bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer, size_t size) #endif } +char * platform_get_absolute_path(const utf8 * relativePath, const utf8 * basePath) +{ + utf8 path[MAX_PATH]; + safe_strcpy(path, basePath, sizeof(path)); + safe_strcat_path(path, relativePath, sizeof(path)); + + wchar_t * pathW = utf8_to_widechar(path); + wchar_t fullPathW[MAX_PATH]; + DWORD fullPathLen = GetFullPathNameW(pathW, countof(fullPathW), fullPathW, NULL); + + free(pathW); + + if (fullPathLen == 0) + { + return NULL; + } + + return widechar_to_utf8(fullPathW); +} + datetime64 platform_get_datetime_now_utc() { // Get file time From d89fc32864964fed6197605417bb9b2ec019c8bd Mon Sep 17 00:00:00 2001 From: X123M3-256 Date: Tue, 17 Jan 2017 21:33:24 +0000 Subject: [PATCH 21/35] Use get_directory_path instead of dirname() --- src/openrct2/cmdline_sprite.c | 8 +++++--- src/openrct2/platform/posix.c | 12 ++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 8a47ee1313..b584536322 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -662,6 +662,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) const char *spriteFilePath = argv[1]; const char *spriteDescriptionPath = argv[2]; + const char* directoryPath = path_get_directory(argv[1]); json_error_t error; json_t* sprite_list=json_load_file(spriteDescriptionPath, JSON_REJECT_DUPLICATES, &error); @@ -707,7 +708,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) //Resolve absolute sprite path - char* imagePath=platform_get_absolute_path(json_string_value(path),spriteDescriptionPath); + char* imagePath=platform_get_absolute_path(json_string_value(path),directoryPath); rct_g1_element spriteElement; uint8 *buffer; @@ -717,7 +718,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) json_decref(sprite_list); return -1; } - + free(imagePath); if (!sprite_file_open(spriteFilePath)) { fprintf(stderr, "Unable to open sprite file: %s\nCanceling\n", spriteFilePath); @@ -751,7 +752,8 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) } json_decref(sprite_list); - + free(directoryPath); + fprintf(stdout, "Finished\n"); return 1; } else { diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index 775cb6925d..42025fcdc2 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -265,12 +265,12 @@ bool platform_directory_delete(const utf8 *path) char* platform_get_absolute_path(const char* relative_path,const char* base_path) { char path[MAX_PATH]; - - //This is to get around the fact that dirname() doesn't take a const char* - char base_path_copy[MAX_PATH]; - safe_strcpy(base_path_copy,base_path,MAX_PATH); - - snprintf(path,MAX_PATH,"%s/%s",dirname(base_path_copy),relative_path); + + if(base_path!=NULL) { + snprintf(path,MAX_PATH,"%s/%s",base_path,relative_path); + } else { + safe_strcpy(path,base_path,MAX_PATH); + } return realpath(path,NULL); } From 7d2490710c94d978ecc0f196969e6a50bb8fb593 Mon Sep 17 00:00:00 2001 From: X123M3-256 Date: Tue, 17 Jan 2017 22:23:08 +0000 Subject: [PATCH 22/35] Remove const --- src/openrct2/cmdline_sprite.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index b584536322..9174c158ea 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -662,7 +662,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) const char *spriteFilePath = argv[1]; const char *spriteDescriptionPath = argv[2]; - const char* directoryPath = path_get_directory(argv[1]); + char* directoryPath = path_get_directory(argv[1]); json_error_t error; json_t* sprite_list=json_load_file(spriteDescriptionPath, JSON_REJECT_DUPLICATES, &error); From 7f74e07f2d1db2b7b8f945259730057df0352dc2 Mon Sep 17 00:00:00 2001 From: X123M3-256 Date: Tue, 17 Jan 2017 23:17:00 +0000 Subject: [PATCH 23/35] Log path to sprite file --- src/openrct2/cmdline_sprite.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 9174c158ea..4aa076d603 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -665,6 +665,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) char* directoryPath = path_get_directory(argv[1]); json_error_t error; + log_verbose("Sprite description file path: %s\n",spriteDescriptionPath); json_t* sprite_list=json_load_file(spriteDescriptionPath, JSON_REJECT_DUPLICATES, &error); if(sprite_list == NULL) { From edd830293c53890d199e3131b1d282f7ef793f43 Mon Sep 17 00:00:00 2001 From: X123M3-256 Date: Wed, 18 Jan 2017 10:24:19 +0000 Subject: [PATCH 24/35] Correct path to sprite file --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ea3731916c..e32db47621 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -406,7 +406,7 @@ else (WIN32) endif (NOT DISABLE_RCT2) add_custom_command( OUTPUT g2.dat - COMMAND ./openrct2 sprite build ${CMAKE_BINARY_DIR}/g2.dat ${CMAKE_CURRENT_SOURCE_DIR}/resources/g2/ + COMMAND ./openrct2 --verbose sprite build ${CMAKE_BINARY_DIR}/g2.dat ${CMAKE_CURRENT_SOURCE_DIR}/resources/g2/sprites.json WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) add_custom_target(g2 DEPENDS ${PROJECT} g2.dat) From dbd00670910e6929aff023ab6fd79edc8fdeda07 Mon Sep 17 00:00:00 2001 From: X123M3-256 Date: Wed, 18 Jan 2017 10:47:16 +0000 Subject: [PATCH 25/35] Remove logging --- CMakeLists.txt | 2 +- src/openrct2/cmdline_sprite.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e32db47621..4f1d03669d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -406,7 +406,7 @@ else (WIN32) endif (NOT DISABLE_RCT2) add_custom_command( OUTPUT g2.dat - COMMAND ./openrct2 --verbose sprite build ${CMAKE_BINARY_DIR}/g2.dat ${CMAKE_CURRENT_SOURCE_DIR}/resources/g2/sprites.json + COMMAND ./openrct2 sprite build ${CMAKE_BINARY_DIR}/g2.dat ${CMAKE_CURRENT_SOURCE_DIR}/resources/g2/sprites.json WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) add_custom_target(g2 DEPENDS ${PROJECT} g2.dat) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 4aa076d603..9174c158ea 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -665,7 +665,6 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) char* directoryPath = path_get_directory(argv[1]); json_error_t error; - log_verbose("Sprite description file path: %s\n",spriteDescriptionPath); json_t* sprite_list=json_load_file(spriteDescriptionPath, JSON_REJECT_DUPLICATES, &error); if(sprite_list == NULL) { From dbfd8982588493c89f8b42c1a1b81f122f32c5f9 Mon Sep 17 00:00:00 2001 From: X123M3-256 Date: Thu, 19 Jan 2017 14:24:45 +0000 Subject: [PATCH 26/35] Correct sprite paths in project files --- OpenRCT2.xcodeproj/project.pbxproj | 2 +- openrct2.proj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenRCT2.xcodeproj/project.pbxproj b/OpenRCT2.xcodeproj/project.pbxproj index c95cfabaf2..82fb2485eb 100644 --- a/OpenRCT2.xcodeproj/project.pbxproj +++ b/OpenRCT2.xcodeproj/project.pbxproj @@ -2504,7 +2504,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${TARGET_BUILD_DIR}/${EXECUTABLE_PATH}\" sprite build \"${SRCROOT}/data/g2.dat\" \"${SRCROOT}/resources/g2/\""; + shellScript = "\"${TARGET_BUILD_DIR}/${EXECUTABLE_PATH}\" sprite build \"${SRCROOT}/data/g2.dat\" \"${SRCROOT}/resources/g2/sprites.json\""; }; D4CA88671D4E962100060C11 /* Get Git Variables */ = { isa = PBXShellScriptBuildPhase; diff --git a/openrct2.proj b/openrct2.proj index fa6652969b..f9abece593 100644 --- a/openrct2.proj +++ b/openrct2.proj @@ -199,7 +199,7 @@ - From 52d2997a9fd793d68f16684c480893ac24c6df21 Mon Sep 17 00:00:00 2001 From: X123M3-256 Date: Thu, 19 Jan 2017 14:30:44 +0000 Subject: [PATCH 27/35] Fix more indentation --- src/openrct2/cmdline_sprite.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 9174c158ea..6d5b8ed3b9 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -673,9 +673,9 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) } if(!json_is_array(sprite_list)) { - fprintf(stderr,"Error: expected array\n"); - json_decref(sprite_list); - return -1; + fprintf(stderr,"Error: expected array\n"); + json_decref(sprite_list); + return -1; } bool silent = (argc >= 4 && strcmp(argv[3], "silent") == 0); @@ -691,16 +691,16 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) json_array_foreach(sprite_list,i,sprite_description) { if(!json_is_object(sprite_description)) { - fprintf(stderr,"Error: expected object for sprite %lu\n",(unsigned long)i); - json_decref(sprite_list); - return -1; + fprintf(stderr,"Error: expected object for sprite %lu\n",(unsigned long)i); + json_decref(sprite_list); + return -1; } json_t* path=json_object_get(sprite_description,"path"); if(!path || !json_is_string(path)) { - fprintf(stderr,"Error: no path provided for sprite %lu\n",(unsigned long)i); - json_decref(sprite_list); - return -1; + fprintf(stderr,"Error: no path provided for sprite %lu\n",(unsigned long)i); + json_decref(sprite_list); + return -1; } //Get x and y offsets, if present json_t* x_offset=json_object_get(sprite_description,"x_offset"); From 9a42edc695d3babd516728aaa2621b61d0626aea Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 19 Jan 2017 18:08:37 +0000 Subject: [PATCH 28/35] Fix return of exit code --- src/openrct2/platform/posix.c | 12 +++++------- src/openrct2/platform/windows.c | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index 42025fcdc2..587754a9fa 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -47,21 +47,19 @@ utf8 _userDataDirectoryPath[MAX_PATH] = { 0 }; utf8 _openrctDataDirectoryPath[MAX_PATH] = { 0 }; /** - * The function that is called directly from the host application (rct2.exe)'s WinMain. - * This will be removed when OpenRCT2 can be built as a stand alone application. + * The main entry point for non-Windows platforms. */ sint32 main(sint32 argc, const char **argv) { core_init(); - sint32 run_game = cmdline_run(argv, argc); - if (run_game == 1) - { + sint32 exitCode = cmdline_run(argv, argc); + if (exitCode == 1) { openrct2_launch(); + exitCode = gExitCode; } - exit(gExitCode); - return gExitCode; + return exitCode; } void platform_get_date_utc(rct2_date *out_date) diff --git a/src/openrct2/platform/windows.c b/src/openrct2/platform/windows.c index b35896a688..7f8856234f 100644 --- a/src/openrct2/platform/windows.c +++ b/src/openrct2/platform/windows.c @@ -67,12 +67,13 @@ sint32 RunOpenRCT2(int argc, char * * argv) core_init(); - int runGame = cmdline_run((const char **)argv, argc); - if (runGame == 1) { + sint32 exitCode = cmdline_run((const char **)argv, argc); + if (exitCode == 1) { openrct2_launch(); + exitCode = gExitCode; } - return gExitCode; + return exitCode; } #ifdef NO_RCT2 @@ -109,7 +110,7 @@ BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) */ __declspec(dllexport) sint32 StartOpenRCT(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, sint32 nCmdShow) { - sint32 argc, runGame; + sint32 argc; char **argv; if (_dllModule == NULL) { @@ -118,9 +119,8 @@ __declspec(dllexport) sint32 StartOpenRCT(HINSTANCE hInstance, HINSTANCE hPrevIn core_init(); - // argv = CommandLineToArgvA(lpCmdLine, &argc); argv = (char**)windows_get_command_line_args(&argc); - runGame = cmdline_run((const char **)argv, argc); + sint32 exitCode = cmdline_run((const char **)argv, argc); // Free argv for (sint32 i = 0; i < argc; i++) { @@ -128,11 +128,14 @@ __declspec(dllexport) sint32 StartOpenRCT(HINSTANCE hInstance, HINSTANCE hPrevIn } free(argv); - if (runGame == 1) { + if (exitCode == 1) { openrct2_launch(); + exitCode = gExitCode; } - exit(gExitCode); + + exit(exitCode); + return exitCode; } #endif // NO_RCT2 From 3d9e6a4e2ddf4b235a90099ff131ea597ba5a88b Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 25 Jan 2017 17:48:00 +0100 Subject: [PATCH 29/35] Fix formatting --- src/openrct2/cmdline/CommandLine.cpp | 2 +- src/openrct2/cmdline_sprite.c | 153 +++++++++++++++------------ src/openrct2/platform/platform.h | 2 +- src/openrct2/platform/posix.c | 16 +-- 4 files changed, 97 insertions(+), 76 deletions(-) diff --git a/src/openrct2/cmdline/CommandLine.cpp b/src/openrct2/cmdline/CommandLine.cpp index 47fa2c8d54..dae2f01696 100644 --- a/src/openrct2/cmdline/CommandLine.cpp +++ b/src/openrct2/cmdline/CommandLine.cpp @@ -571,7 +571,7 @@ extern "C" if (command == nullptr) { - return EXITCODE_FAIL; + return EXITCODE_FAIL; } if (command->Options != nullptr) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 6d5b8ed3b9..02a9fab659 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -607,22 +607,27 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) const char *spriteFilePath = argv[1]; const char *imagePath = argv[2]; - sint16 x_offset=0; - sint16 y_offset=0; + sint16 x_offset = 0; + sint16 y_offset = 0; - if(argc == 5) { + if(argc == 5) + { char* endptr; - x_offset=strtol(argv[3],&endptr,0); - if(*endptr!=0) { + + x_offset = strtol(argv[3], &endptr, 0); + if (*endptr != 0) + { fprintf(stderr, "X offset must be an integer\n"); return -1; - } - y_offset=strtol(argv[4],&endptr,0); - if(*endptr!=0) { + } + + y_offset = strtol(argv[4], &endptr, 0); + if (*endptr != 0) + { fprintf(stderr, "Y offset must be an integer\n"); return -1; - } } + } rct_g1_element spriteElement; uint8 *buffer; @@ -667,16 +672,18 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) json_error_t error; json_t* sprite_list=json_load_file(spriteDescriptionPath, JSON_REJECT_DUPLICATES, &error); - if(sprite_list == NULL) { - fprintf(stderr,"Error parsing sprite description file: %s at line %d column %d\n",error.text,error.line,error.column); - return -1; - } + if (sprite_list == NULL) + { + fprintf(stderr, "Error parsing sprite description file: %s at line %d column %d\n", error.text, error.line, error.column); + return -1; + } - if(!json_is_array(sprite_list)) { - fprintf(stderr,"Error: expected array\n"); - json_decref(sprite_list); - return -1; - } + if (!json_is_array(sprite_list)) + { + fprintf(stderr, "Error: expected array\n"); + json_decref(sprite_list); + return -1; + } bool silent = (argc >= 4 && strcmp(argv[3], "silent") == 0); @@ -689,68 +696,78 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) size_t i; json_t* sprite_description; - json_array_foreach(sprite_list,i,sprite_description) { - if(!json_is_object(sprite_description)) { - fprintf(stderr,"Error: expected object for sprite %lu\n",(unsigned long)i); - json_decref(sprite_list); - return -1; - } + json_array_foreach(sprite_list, i, sprite_description) + { + if(!json_is_object(sprite_description)) + { + fprintf(stderr, "Error: expected object for sprite %lu\n", (unsigned long)i); + json_decref(sprite_list); + return -1; + } - json_t* path=json_object_get(sprite_description,"path"); - if(!path || !json_is_string(path)) { - fprintf(stderr,"Error: no path provided for sprite %lu\n",(unsigned long)i); - json_decref(sprite_list); - return -1; - } + json_t* path = json_object_get(sprite_description,"path"); + if(!path || !json_is_string(path)) + { + fprintf(stderr, "Error: no path provided for sprite %lu\n", (unsigned long)i); + json_decref(sprite_list); + return -1; + } //Get x and y offsets, if present - json_t* x_offset=json_object_get(sprite_description,"x_offset"); - json_t* y_offset=json_object_get(sprite_description,"y_offset"); + json_t* x_offset = json_object_get(sprite_description, "x_offset"); + json_t* y_offset = json_object_get(sprite_description, "y_offset"); //Resolve absolute sprite path - char* imagePath=platform_get_absolute_path(json_string_value(path),directoryPath); + char* imagePath = platform_get_absolute_path(json_string_value(path), directoryPath); rct_g1_element spriteElement; uint8 *buffer; int bufferLength; - if (!sprite_file_import(imagePath, x_offset==NULL ? 0 : json_integer_value(x_offset), y_offset==NULL ? 0 : json_integer_value(y_offset), &spriteElement, &buffer, &bufferLength, gSpriteMode)) { - fprintf(stderr, "Could not import image file: %s\nCanceling\n", imagePath); - json_decref(sprite_list); - return -1; - } + + if (!sprite_file_import(imagePath, x_offset==NULL ? 0 : json_integer_value(x_offset), y_offset==NULL ? 0 : json_integer_value(y_offset), &spriteElement, &buffer, &bufferLength, gSpriteMode)) + { + fprintf(stderr, "Could not import image file: %s\nCanceling\n", imagePath); + json_decref(sprite_list); + return -1; + } + free(imagePath); - if (!sprite_file_open(spriteFilePath)) { - fprintf(stderr, "Unable to open sprite file: %s\nCanceling\n", spriteFilePath); - json_decref(sprite_list); - return -1; - } - - spriteFileHeader.num_entries++; - spriteFileHeader.total_size += bufferLength; - spriteFileEntries = realloc(spriteFileEntries, spriteFileHeader.num_entries * sizeof(rct_g1_element)); - - sprite_entries_make_relative(); - spriteFileData = realloc(spriteFileData, spriteFileHeader.total_size); - sprite_entries_make_absolute(); - - spriteFileEntries[spriteFileHeader.num_entries - 1] = spriteElement; - memcpy(spriteFileData + (spriteFileHeader.total_size - bufferLength), buffer, bufferLength); - spriteFileEntries[spriteFileHeader.num_entries - 1].offset = spriteFileData + (spriteFileHeader.total_size - bufferLength); - - free(buffer); - - if (!sprite_file_save(spriteFilePath)) { - fprintf(stderr, "Could not save sprite file: %s\nCanceling\n", imagePath); - json_decref(sprite_list); - return -1; - } - if (!silent) - fprintf(stdout, "Added: %s\n", imagePath); - sprite_file_close(); - - + if (!sprite_file_open(spriteFilePath)) + { + fprintf(stderr, "Unable to open sprite file: %s\nCanceling\n", spriteFilePath); + json_decref(sprite_list); + return -1; } + + spriteFileHeader.num_entries++; + spriteFileHeader.total_size += bufferLength; + spriteFileEntries = realloc(spriteFileEntries, spriteFileHeader.num_entries * sizeof(rct_g1_element)); + + sprite_entries_make_relative(); + spriteFileData = realloc(spriteFileData, spriteFileHeader.total_size); + sprite_entries_make_absolute(); + + spriteFileEntries[spriteFileHeader.num_entries - 1] = spriteElement; + memcpy(spriteFileData + (spriteFileHeader.total_size - bufferLength), buffer, bufferLength); + spriteFileEntries[spriteFileHeader.num_entries - 1].offset = spriteFileData + (spriteFileHeader.total_size - bufferLength); + + free(buffer); + + if (!sprite_file_save(spriteFilePath)) + { + fprintf(stderr, "Could not save sprite file: %s\nCanceling\n", imagePath); + json_decref(sprite_list); + return -1; + } + + if (!silent) + fprintf(stdout, "Added: %s\n", imagePath); + + sprite_file_close(); + + } + json_decref(sprite_list); free(directoryPath); diff --git a/src/openrct2/platform/platform.h b/src/openrct2/platform/platform.h index 62f076a89b..86941d1f5f 100644 --- a/src/openrct2/platform/platform.h +++ b/src/openrct2/platform/platform.h @@ -167,7 +167,7 @@ bool platform_original_game_data_exists(const utf8 *path); time_t platform_file_get_modified_time(const utf8* path); bool platform_ensure_directory_exists(const utf8 *path); bool platform_directory_delete(const utf8 *path); -char* platform_get_absolute_path(const char* relative_path,const char* base_path); +char* platform_get_absolute_path(const char* relative_path, const char* base_path); bool platform_lock_single_instance(); sint32 platform_enumerate_files_begin(const utf8 *pattern); bool platform_enumerate_files_next(sint32 handle, file_info *outFileInfo); diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index 587754a9fa..ada8793db8 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -54,7 +54,8 @@ sint32 main(sint32 argc, const char **argv) core_init(); sint32 exitCode = cmdline_run(argv, argc); - if (exitCode == 1) { + if (exitCode == 1) + { openrct2_launch(); exitCode = gExitCode; } @@ -264,11 +265,14 @@ char* platform_get_absolute_path(const char* relative_path,const char* base_path { char path[MAX_PATH]; - if(base_path!=NULL) { - snprintf(path,MAX_PATH,"%s/%s",base_path,relative_path); - } else { - safe_strcpy(path,base_path,MAX_PATH); - } + if (base_path != NULL) + { + snprintf(path, MAX_PATH, "%s/%s", base_path, relative_path); + } + else + { + safe_strcpy(path, base_path, MAX_PATH); + } return realpath(path,NULL); } From 03606adbebff09b4f70a8bf0d6efdcd5e1bd15b5 Mon Sep 17 00:00:00 2001 From: X7123M3-256 Date: Fri, 27 Jan 2017 23:06:34 +0000 Subject: [PATCH 30/35] Fix more formatting --- src/openrct2/cmdline_sprite.c | 6 +++--- src/openrct2/platform/posix.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index 02a9fab659..b930457bcd 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -610,9 +610,9 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) sint16 x_offset = 0; sint16 y_offset = 0; - if(argc == 5) + if (argc == 5) { - char* endptr; + char *endptr; x_offset = strtol(argv[3], &endptr, 0); if (*endptr != 0) @@ -718,7 +718,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) //Resolve absolute sprite path - char* imagePath = platform_get_absolute_path(json_string_value(path), directoryPath); + char *imagePath = platform_get_absolute_path(json_string_value(path), directoryPath); rct_g1_element spriteElement; uint8 *buffer; diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index ada8793db8..d48efed209 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -261,7 +261,7 @@ bool platform_directory_delete(const utf8 *path) return true; } -char* platform_get_absolute_path(const char* relative_path,const char* base_path) +char* platform_get_absolute_path(const char * relative_path,const char * base_path) { char path[MAX_PATH]; From ae3110e09d931710492164a4fb6d121127ceefd8 Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 31 Jan 2017 20:50:39 +0000 Subject: [PATCH 31/35] Remove exit call, probably no longer necessary --- src/openrct2/OpenRCT2.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/openrct2/OpenRCT2.cpp b/src/openrct2/OpenRCT2.cpp index 1816f98ac7..bfa3e6721f 100644 --- a/src/openrct2/OpenRCT2.cpp +++ b/src/openrct2/OpenRCT2.cpp @@ -299,9 +299,6 @@ extern "C" OpenRCT2::RunGameLoop(); } openrct2_dispose(); - - // HACK Some threads are still running which causes the game to not terminate. Investigation required! - exit(gExitCode); } void openrct2_dispose() From 428a3d6569d14842cf811d6463c4f4f8891ec686 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 7 May 2017 16:19:35 +0100 Subject: [PATCH 32/35] Organise new sprites and add JSON --- resources/g2/{87.png => icons/mute.png} | Bin .../g2/{88.png => icons/mute_pressed.png} | Bin .../g2/{80.png => icons/tab_disabled.png} | Bin resources/g2/{90.png => icons/unmute.png} | Bin .../g2/{89.png => icons/unmute_pressed.png} | Bin resources/g2/sprites.json | 39 ++++++++++++++++++ .../g2/{83.png => track/bm/booster_1.png} | Bin .../g2/{84.png => track/bm/booster_2.png} | Bin .../{81.png => track/intamin/booster_1.png} | Bin .../{82.png => track/intamin/booster_2.png} | Bin .../g2/{85.png => track/junior/booster_1.png} | Bin .../g2/{86.png => track/junior/booster_2.png} | Bin .../g2/{91.png => track/mini/booster_1.png} | Bin .../g2/{92.png => track/mini/booster_2.png} | Bin 14 files changed, 39 insertions(+) rename resources/g2/{87.png => icons/mute.png} (100%) rename resources/g2/{88.png => icons/mute_pressed.png} (100%) rename resources/g2/{80.png => icons/tab_disabled.png} (100%) rename resources/g2/{90.png => icons/unmute.png} (100%) rename resources/g2/{89.png => icons/unmute_pressed.png} (100%) rename resources/g2/{83.png => track/bm/booster_1.png} (100%) rename resources/g2/{84.png => track/bm/booster_2.png} (100%) rename resources/g2/{81.png => track/intamin/booster_1.png} (100%) rename resources/g2/{82.png => track/intamin/booster_2.png} (100%) rename resources/g2/{85.png => track/junior/booster_1.png} (100%) rename resources/g2/{86.png => track/junior/booster_2.png} (100%) rename resources/g2/{91.png => track/mini/booster_1.png} (100%) rename resources/g2/{92.png => track/mini/booster_2.png} (100%) diff --git a/resources/g2/87.png b/resources/g2/icons/mute.png similarity index 100% rename from resources/g2/87.png rename to resources/g2/icons/mute.png diff --git a/resources/g2/88.png b/resources/g2/icons/mute_pressed.png similarity index 100% rename from resources/g2/88.png rename to resources/g2/icons/mute_pressed.png diff --git a/resources/g2/80.png b/resources/g2/icons/tab_disabled.png similarity index 100% rename from resources/g2/80.png rename to resources/g2/icons/tab_disabled.png diff --git a/resources/g2/90.png b/resources/g2/icons/unmute.png similarity index 100% rename from resources/g2/90.png rename to resources/g2/icons/unmute.png diff --git a/resources/g2/89.png b/resources/g2/icons/unmute_pressed.png similarity index 100% rename from resources/g2/89.png rename to resources/g2/icons/unmute_pressed.png diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index d7d684acb2..19db0371c4 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -238,5 +238,44 @@ }, { "path": "icons/paste.png" + }, + { + "path": "icons/tab_disabled.png" + }, + { + "path": "track/intamin/booster_1.png" + }, + { + "path": "track/intamin/booster_2.png" + }, + { + "path": "track/bm/booster_1.png" + }, + { + "path": "track/bm/booster_2.png" + }, + { + "path": "track/junior/booster_1.png" + }, + { + "path": "track/junior/booster_2.png" + }, + { + "path": "icons/mute.png" + }, + { + "path": "icons/mute_pressed.png" + }, + { + "path": "icons/unmute.png" + }, + { + "path": "icons/unmute_pressed.png" + }, + { + "path": "track/mini/booster_1.png" + }, + { + "path": "track/mini/booster_2.png" } ] diff --git a/resources/g2/83.png b/resources/g2/track/bm/booster_1.png similarity index 100% rename from resources/g2/83.png rename to resources/g2/track/bm/booster_1.png diff --git a/resources/g2/84.png b/resources/g2/track/bm/booster_2.png similarity index 100% rename from resources/g2/84.png rename to resources/g2/track/bm/booster_2.png diff --git a/resources/g2/81.png b/resources/g2/track/intamin/booster_1.png similarity index 100% rename from resources/g2/81.png rename to resources/g2/track/intamin/booster_1.png diff --git a/resources/g2/82.png b/resources/g2/track/intamin/booster_2.png similarity index 100% rename from resources/g2/82.png rename to resources/g2/track/intamin/booster_2.png diff --git a/resources/g2/85.png b/resources/g2/track/junior/booster_1.png similarity index 100% rename from resources/g2/85.png rename to resources/g2/track/junior/booster_1.png diff --git a/resources/g2/86.png b/resources/g2/track/junior/booster_2.png similarity index 100% rename from resources/g2/86.png rename to resources/g2/track/junior/booster_2.png diff --git a/resources/g2/91.png b/resources/g2/track/mini/booster_1.png similarity index 100% rename from resources/g2/91.png rename to resources/g2/track/mini/booster_1.png diff --git a/resources/g2/92.png b/resources/g2/track/mini/booster_2.png similarity index 100% rename from resources/g2/92.png rename to resources/g2/track/mini/booster_2.png From b789b17c145919ca0c4d721c050b457827438e88 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 7 May 2017 16:19:55 +0100 Subject: [PATCH 33/35] Fix sprite building --- src/openrct2/cmdline_sprite.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/openrct2/cmdline_sprite.c b/src/openrct2/cmdline_sprite.c index b930457bcd..4753ae7b5e 100644 --- a/src/openrct2/cmdline_sprite.c +++ b/src/openrct2/cmdline_sprite.c @@ -667,7 +667,7 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) const char *spriteFilePath = argv[1]; const char *spriteDescriptionPath = argv[2]; - char* directoryPath = path_get_directory(argv[1]); + char* directoryPath = path_get_directory(spriteDescriptionPath); json_error_t error; json_t* sprite_list=json_load_file(spriteDescriptionPath, JSON_REJECT_DUPLICATES, &error); @@ -728,15 +728,15 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) { fprintf(stderr, "Could not import image file: %s\nCanceling\n", imagePath); json_decref(sprite_list); + free(imagePath); return -1; } - free(imagePath); - if (!sprite_file_open(spriteFilePath)) { fprintf(stderr, "Unable to open sprite file: %s\nCanceling\n", spriteFilePath); json_decref(sprite_list); + free(imagePath); return -1; } @@ -758,12 +758,14 @@ sint32 cmdline_for_sprite(const char **argv, sint32 argc) { fprintf(stderr, "Could not save sprite file: %s\nCanceling\n", imagePath); json_decref(sprite_list); + free(imagePath); return -1; } if (!silent) fprintf(stdout, "Added: %s\n", imagePath); + free(imagePath); sprite_file_close(); } From e310956e818cfaf2c4fa18c54df4be2b74289cdc Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 7 May 2017 19:15:27 +0100 Subject: [PATCH 34/35] Update command line help --- src/openrct2/cmdline/SpriteCommands.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openrct2/cmdline/SpriteCommands.cpp b/src/openrct2/cmdline/SpriteCommands.cpp index 1ac6c2050c..52758066c0 100644 --- a/src/openrct2/cmdline/SpriteCommands.cpp +++ b/src/openrct2/cmdline/SpriteCommands.cpp @@ -24,7 +24,7 @@ extern "C" { - sint32 gSpriteMode = 0; + sint32 gSpriteMode = 0; } static const char * _mode; @@ -41,7 +41,7 @@ const CommandLineCommand CommandLine::SpriteCommands[] { // Main commands DefineCommand("append", " [x_offset y_offset]", SpriteOptions, HandleSprite), - DefineCommand("build", " [silent]", SpriteOptions, HandleSprite), + DefineCommand("build", " [silent]", SpriteOptions, HandleSprite), DefineCommand("create", "", SpriteOptions, HandleSprite), DefineCommand("details", " [idx]", SpriteOptions, HandleSprite), DefineCommand("export", " ", SpriteOptions, HandleSprite), From c4d2cd175d518d7f1fb601b880f140180a75c31d Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 7 May 2017 19:17:11 +0100 Subject: [PATCH 35/35] Use utf8 instead of char for platform_get_absolute_path --- src/openrct2/platform/platform.h | 2 +- src/openrct2/platform/posix.c | 4 ++-- src/openrct2/platform/windows.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openrct2/platform/platform.h b/src/openrct2/platform/platform.h index 86941d1f5f..fb0edc5a7d 100644 --- a/src/openrct2/platform/platform.h +++ b/src/openrct2/platform/platform.h @@ -167,7 +167,7 @@ bool platform_original_game_data_exists(const utf8 *path); time_t platform_file_get_modified_time(const utf8* path); bool platform_ensure_directory_exists(const utf8 *path); bool platform_directory_delete(const utf8 *path); -char* platform_get_absolute_path(const char* relative_path, const char* base_path); +utf8 * platform_get_absolute_path(const utf8 * relative_path, const utf8 * base_path); bool platform_lock_single_instance(); sint32 platform_enumerate_files_begin(const utf8 *pattern); bool platform_enumerate_files_next(sint32 handle, file_info *outFileInfo); diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index d48efed209..49236ea78a 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -261,9 +261,9 @@ bool platform_directory_delete(const utf8 *path) return true; } -char* platform_get_absolute_path(const char * relative_path,const char * base_path) +utf8 * platform_get_absolute_path(const utf8 * relative_path, const utf8 * base_path) { - char path[MAX_PATH]; + utf8 path[MAX_PATH]; if (base_path != NULL) { diff --git a/src/openrct2/platform/windows.c b/src/openrct2/platform/windows.c index 7f8856234f..4fe901d10a 100644 --- a/src/openrct2/platform/windows.c +++ b/src/openrct2/platform/windows.c @@ -1060,7 +1060,7 @@ bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer, size_t size) #endif } -char * platform_get_absolute_path(const utf8 * relativePath, const utf8 * basePath) +utf8 * platform_get_absolute_path(const utf8 * relativePath, const utf8 * basePath) { utf8 path[MAX_PATH]; safe_strcpy(path, basePath, sizeof(path));