diff --git a/projects/openrct2.vcxproj b/projects/openrct2.vcxproj
index 5e35558d42..5944dcba2e 100644
--- a/projects/openrct2.vcxproj
+++ b/projects/openrct2.vcxproj
@@ -22,6 +22,7 @@
+
@@ -59,7 +60,6 @@
-
@@ -176,7 +176,6 @@
-
diff --git a/projects/openrct2.vcxproj.filters b/projects/openrct2.vcxproj.filters
index 4ac5e713de..657a0d8858 100644
--- a/projects/openrct2.vcxproj.filters
+++ b/projects/openrct2.vcxproj.filters
@@ -201,9 +201,6 @@
Source\Localisation
-
- Source\Platform
-
Source\Ride
@@ -334,7 +331,6 @@
Source
-
Source\World
@@ -356,7 +352,7 @@
Source\Windows
-
+
Source\Windows
@@ -423,9 +419,12 @@
Source\Windows
-
+
Source\Ride
+
+ Source
+
@@ -497,9 +496,6 @@
Source\Localisation
-
- Source\Platform
-
Source\Ride
diff --git a/src/audio/audio.c b/src/audio/audio.c
index 53ef39c54c..227550767c 100644
--- a/src/audio/audio.c
+++ b/src/audio/audio.c
@@ -23,7 +23,7 @@
#include "../config.h"
#include "../interface/viewport.h"
#include "../interface/window.h"
-#include "../platform/osinterface.h"
+#include "../platform/platform.h"
#include "../world/map.h"
#include "../world/sprite.h"
#include "audio.h"
@@ -1329,7 +1329,7 @@ int dsound_create_primary_buffer(int a, int device, int channels, int samples, i
if (FAILED(DirectSoundCreate(&dsdevice->guid, &RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), 0))) {
return 0;
}
- if (FAILED(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->SetCooperativeLevel(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), RCT2_GLOBAL(0x009E2D70, HWND), DSSCL_NORMAL)) ||
+ if (FAILED(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->SetCooperativeLevel(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), windows_get_window_handle(), DSSCL_NORMAL)) ||
FAILED(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->CreateSoundBuffer(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), &bufferdesc, &RCT2_GLOBAL(0x009E2BA8, LPDIRECTSOUNDBUFFER), 0))) {
RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->Release(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND));
RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND) = 0;
@@ -1374,7 +1374,7 @@ int dsound_create_primary_buffer(int a, int device, int channels, int samples, i
if (FAILED(DirectSoundCreate(&dsdevice->guid, &RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), 0))) {
return 0;
}
- if (FAILED(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->SetCooperativeLevel(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), RCT2_GLOBAL(0x009E2D70, HWND), DSSCL_PRIORITY))) {
+ if (FAILED(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->SetCooperativeLevel(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND), windows_get_window_handle(), DSSCL_PRIORITY))) {
RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND)->lpVtbl->Release(RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND));
RCT2_GLOBAL(RCT2_ADDRESS_DIRECTSOUND, LPDIRECTSOUND) = 0;
return 0;
@@ -1702,13 +1702,10 @@ void audio_init1()
do {
rct_ride_music_info* ride_music_info = &RCT2_GLOBAL(0x009AF1C8, rct_ride_music_info*)[m];
const char* path = get_file_path(ride_music_info->pathid);
- RCT2_GLOBAL(0x014241BC, uint32) = 3;
- HANDLE hfile = osinterface_file_open(path);
- RCT2_GLOBAL(0x014241BC, uint32) = 0;
- if (hfile != INVALID_HANDLE_VALUE) {
- RCT2_GLOBAL(0x014241BC, uint32) = 3;
- osinterface_file_read(hfile, &RCT2_GLOBAL(0x009AF47E, uint32), 4);
- osinterface_file_close(hfile);
+ FILE *file = fopen(path, "rb");
+ if (file != NULL) {
+ fread(&RCT2_GLOBAL(0x009AF47E, uint32), 4, 1, file);
+ fclose(file);
RCT2_GLOBAL(0x014241BC, uint32) = 0;
if (RCT2_GLOBAL(0x009AF47E, uint32) == 0x78787878) {
ride_music_info->var_0 = 0;
diff --git a/src/config.c b/src/config.c
index 52a3afa50f..f1e91ddf38 100644
--- a/src/config.c
+++ b/src/config.c
@@ -22,7 +22,6 @@
#include "addresses.h"
#include "config.h"
#include "localisation/localisation.h"
-#include "platform/osinterface.h"
#include "platform/platform.h"
// Current keyboard shortcuts
@@ -309,7 +308,7 @@ void config_apply_to_old_addresses()
*/
void config_load()
{
- char *path = osinterface_get_orct2_homefolder();
+ char *path = platform_get_orct2_homefolder();
FILE* fp;
memcpy(&gGeneral_config, &gGeneral_config_default, sizeof(general_configuration_t));
@@ -320,7 +319,7 @@ void config_load()
return;
}
- sprintf(path, "%s%c%s", path, osinterface_get_path_separator(), "config.ini");
+ sprintf(path, "%s%c%s", path, platform_get_path_separator(), "config.ini");
fp = fopen(path, "r");
if (!fp) {
@@ -342,9 +341,9 @@ void config_load()
void config_save()
{
- char *configIniPath = osinterface_get_orct2_homefolder();;
+ char *configIniPath = platform_get_orct2_homefolder();;
- sprintf(configIniPath, "%s%c%s", configIniPath, osinterface_get_path_separator(), "config.ini");
+ sprintf(configIniPath, "%s%c%s", configIniPath, platform_get_path_separator(), "config.ini");
config_save_ini(configIniPath);
config_apply_to_old_addresses();
@@ -387,8 +386,8 @@ int config_find_or_browse_install_directory()
char *installPath;
if (!config_find_rct2_path(gGeneral_config.game_path)) {
- osinterface_show_messagebox("Unable to find RCT2 installation directory. Please select the directory where you installed RCT2!");
- installPath = osinterface_open_directory_browser("Please select your RCT2 directory");
+ platform_show_messagebox("Unable to find RCT2 installation directory. Please select the directory where you installed RCT2!");
+ installPath = platform_open_directory_browser("Please select your RCT2 directory");
if (installPath == NULL)
return 0;
@@ -779,7 +778,7 @@ static int config_parse_currency(char *currency)
*/
static void config_error(char *msg){
- osinterface_show_messagebox(msg);
+ platform_show_messagebox(msg);
//TODO:SHUT DOWN EVERYTHING!
}
diff --git a/src/cursors.c b/src/cursors.c
new file mode 100644
index 0000000000..720f40833a
--- /dev/null
+++ b/src/cursors.c
@@ -0,0 +1,533 @@
+/*****************************************************************************
+* Copyright (c) 2014 Ted John, Duncan Frost
+* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
+*
+* This file is part of OpenRCT2.
+*
+* OpenRCT2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+*****************************************************************************/
+
+#include "cursors.h"
+
+unsigned char blank_cursor_data[32 * 4] = {
+ 0
+};
+unsigned char blank_cursor_mask[32 * 4] = {
+ 0
+};
+
+unsigned char up_arrow_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x04, 0x10, 0x00,
+ 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x02, 0x20, 0x00,
+ 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00,
+ 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+unsigned char up_arrow_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00,
+ 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x03, 0xE0, 0x00,
+ 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00,
+ 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+unsigned char up_down_arrow_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0xA0, 0x00,
+ 0x00, 0x05, 0x50, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x17, 0x74, 0x00, 0x00, 0x21, 0x42, 0x00,
+ 0x00, 0x1D, 0xDC, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00,
+ 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0xE0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 0xD0, 0x00, 0x00, 0x1D, 0x5C, 0x00,
+ 0x00, 0x21, 0x42, 0x00, 0x00, 0x17, 0x74, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x05, 0x50, 0x00,
+ 0x00, 0x02, 0xA0, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+unsigned char up_down_arrow_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00,
+ 0x00, 0x07, 0x70, 0x00, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x3F, 0x7E, 0x00,
+ 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00,
+ 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0x7C, 0x00,
+ 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x07, 0x70, 0x00,
+ 0x00, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+
+unsigned char zzz_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
+ 0x00, 0x00, 0x03, 0xE2, 0x00, 0x00, 0xFC, 0x34, 0x00, 0x01, 0x07, 0x62, 0x00, 0x3F, 0xEA, 0xDC,
+ 0x00, 0x40, 0xD4, 0x20, 0x00, 0x3D, 0xBB, 0xC0, 0x3F, 0xCB, 0x04, 0x00, 0x40, 0x34, 0xF8, 0x00,
+ 0x40, 0x2F, 0x00, 0x00, 0x3C, 0x40, 0x80, 0x00, 0x08, 0xBF, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+ 0x23, 0xC0, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+unsigned char zzz_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
+ 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFB, 0xDC,
+ 0x00, 0x7F, 0xF7, 0xE0, 0x00, 0x3F, 0xFB, 0xC0, 0x3F, 0xCF, 0xFC, 0x00, 0x7F, 0xFC, 0xF8, 0x00,
+ 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
+ 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+unsigned char diagonal_arrow_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
+ 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00,
+ 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+unsigned char diagonal_arrow_cursor_mask[32 * 4] = {
+ 0xFE, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00,
+ 0xFC, 0x00, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00,
+ 0x01, 0xC2, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00,
+ 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+unsigned char picker_cursor_data[32 * 4] = {
+ 0x00, 0x07, 0xC0, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, 0x17, 0xB0, 0x00,
+ 0x00, 0x17, 0xB0, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x0F, 0xE0, 0x00,
+ 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x17, 0x30, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, 0x21, 0x18, 0x00,
+ 0x00, 0x23, 0x18, 0x00, 0x00, 0x44, 0x8C, 0x00, 0x00, 0x44, 0x8C, 0x00, 0x00, 0x88, 0x46, 0x00,
+ 0x00, 0x90, 0x26, 0x00, 0x01, 0x10, 0x23, 0x00, 0x01, 0x20, 0x13, 0x00, 0x02, 0x40, 0x09, 0x80,
+ 0x02, 0x40, 0x09, 0x80, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0,
+ 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x40, 0x08, 0xC0, 0x02, 0x40, 0x09, 0x80,
+ 0x01, 0x20, 0x13, 0x00, 0x00, 0x90, 0x26, 0x00, 0x00, 0x68, 0x5C, 0x00, 0x00, 0x1C, 0xF0, 0x00,
+};
+unsigned char picker_cursor_mask[32 * 4] = {
+ 0x00, 0x07, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00,
+ 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x00,
+ 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF8, 0x00,
+ 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x00, 0xF8, 0x7E, 0x00,
+ 0x00, 0xF0, 0x3E, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x01, 0xE0, 0x1F, 0x00, 0x03, 0xC0, 0x0F, 0x80,
+ 0x03, 0xC0, 0x0F, 0x80, 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0,
+ 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0, 0x07, 0xC0, 0x0F, 0xC0, 0x03, 0xC0, 0x0F, 0x80,
+ 0x01, 0xE0, 0x1F, 0x00, 0x00, 0xF0, 0x3E, 0x00, 0x00, 0x78, 0x7C, 0x00, 0x00, 0x1C, 0xF0, 0x00,
+};
+
+unsigned char tree_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0x89, 0xC0, 0x00, 0x02, 0x06, 0x20,
+ 0x00, 0x07, 0x00, 0x18, 0x00, 0x07, 0x40, 0x04, 0x00, 0x03, 0x80, 0x04, 0x00, 0x01, 0xC0, 0x02,
+ 0x00, 0x03, 0x82, 0x02, 0x00, 0x03, 0xD0, 0x04, 0x00, 0x07, 0xF9, 0x08, 0x00, 0x0F, 0x6E, 0x04,
+ 0x00, 0x0E, 0xB8, 0x82, 0x00, 0x0F, 0x44, 0x22, 0x00, 0x0F, 0xA8, 0x46, 0x00, 0x0F, 0xFC, 0x16,
+ 0x00, 0x07, 0xEE, 0x8C, 0x0F, 0x81, 0xFF, 0xD8, 0x08, 0x80, 0x7D, 0xF0, 0x08, 0x80, 0x3A, 0x00,
+ 0x08, 0x80, 0x1A, 0x00, 0x08, 0x80, 0x1A, 0x00, 0x08, 0x80, 0x12, 0x00, 0x08, 0x80, 0x12, 0x00,
+ 0x08, 0x80, 0x11, 0x00, 0xF8, 0xF8, 0x60, 0x80, 0x40, 0x11, 0x80, 0x60, 0x20, 0x22, 0x09, 0x90,
+ 0x10, 0x41, 0xD5, 0x60, 0x08, 0x80, 0x22, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char tree_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0xF9, 0xC0, 0x00, 0x03, 0xFF, 0xE0,
+ 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFE,
+ 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFC,
+ 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE,
+ 0x00, 0x07, 0xFF, 0xFC, 0x0F, 0x81, 0xFF, 0xF8, 0x0F, 0x80, 0x7F, 0xF0, 0x0F, 0x80, 0x3E, 0x00,
+ 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00,
+ 0x0F, 0x80, 0x1F, 0x00, 0xFF, 0xF8, 0x7F, 0x80, 0x7F, 0xF1, 0xFF, 0xE0, 0x3F, 0xE3, 0xFF, 0xF0,
+ 0x1F, 0xC1, 0xF7, 0x60, 0x0F, 0x80, 0x22, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char fountain_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x00,
+ 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x01, 0x8B, 0x30, 0x00, 0x02, 0x17, 0xC8,
+ 0x00, 0x02, 0x0F, 0x88, 0x0F, 0x83, 0x80, 0x38, 0x08, 0x82, 0x7F, 0xD8, 0x08, 0x81, 0x01, 0xF0,
+ 0x08, 0x80, 0xE3, 0xE0, 0x08, 0x80, 0x3F, 0x80, 0x08, 0x80, 0x17, 0x00, 0x08, 0x80, 0x13, 0x00,
+ 0x08, 0x80, 0x13, 0x00, 0xF8, 0xF8, 0x27, 0x80, 0x40, 0x10, 0x4E, 0xC0, 0x20, 0x20, 0x80, 0xE0,
+ 0x10, 0x40, 0xC1, 0xA0, 0x08, 0x80, 0x7F, 0xC0, 0x05, 0x00, 0x1F, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char fountain_down_cursor_mask[32 * 4] = {
+ 0x00, 0x01, 0x04, 0x00, 0x00, 0x10, 0x10, 0x81, 0x00, 0x00, 0x41, 0x14, 0x00, 0x05, 0x08, 0x20,
+ 0x00, 0x00, 0x22, 0x81, 0x00, 0x00, 0x88, 0x10, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x00,
+ 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF8,
+ 0x00, 0x03, 0xFF, 0xF8, 0x0F, 0x83, 0xFF, 0xF8, 0x0F, 0x83, 0xFF, 0xF8, 0x0F, 0x81, 0xFF, 0xF0,
+ 0x0F, 0x80, 0xFF, 0xE0, 0x0F, 0x80, 0x3F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x0F, 0x80, 0x1F, 0x00,
+ 0x0F, 0x80, 0x1F, 0x00, 0xFF, 0xF8, 0x3F, 0x80, 0x7F, 0xF0, 0x7F, 0xC0, 0x3F, 0xE0, 0xFF, 0xE0,
+ 0x1F, 0xC0, 0xFF, 0xE0, 0x0F, 0x80, 0x7F, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char statue_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x07, 0x03, 0x30,
+ 0x00, 0x02, 0x84, 0x98, 0x00, 0x01, 0x44, 0x98, 0x00, 0x00, 0xB5, 0xA8, 0x00, 0x00, 0x4A, 0xD0,
+ 0x00, 0x00, 0x21, 0x20, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x10, 0x80,
+ 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x0F, 0x80, 0x08, 0x80, 0x08, 0x80, 0x04, 0x80, 0x08, 0x80, 0x05, 0x00,
+ 0x08, 0x80, 0x0D, 0x00, 0x08, 0x80, 0x09, 0x00, 0x08, 0x80, 0x3F, 0x80, 0x08, 0x80, 0x20, 0x80,
+ 0x08, 0x80, 0x20, 0x80, 0xF8, 0xF8, 0x20, 0x80, 0x40, 0x10, 0x20, 0x80, 0x20, 0x20, 0x20, 0x80,
+ 0x10, 0x40, 0x7F, 0xC0, 0x08, 0x80, 0x80, 0x20, 0x05, 0x00, 0xFF, 0xE0, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char statue_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x07, 0x03, 0x30,
+ 0x00, 0x03, 0x87, 0x98, 0x00, 0x01, 0xC7, 0x98, 0x00, 0x00, 0xF7, 0xB8, 0x00, 0x00, 0x7E, 0xF0,
+ 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x1F, 0x80,
+ 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00,
+ 0x00, 0x00, 0x07, 0x00, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x07, 0x80, 0x0F, 0x80, 0x07, 0x00,
+ 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x80, 0x3F, 0x80, 0x0F, 0x80, 0x3F, 0x80,
+ 0x0F, 0x80, 0x3F, 0x80, 0xFF, 0xF8, 0x3F, 0x80, 0x7F, 0xF0, 0x3F, 0x80, 0x3F, 0xE0, 0x3F, 0x80,
+ 0x1F, 0xC0, 0x7F, 0xC0, 0x0F, 0x80, 0xFF, 0xE0, 0x07, 0x00, 0xFF, 0xE0, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char bench_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00,
+ 0x00, 0x04, 0x60, 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x05, 0x81, 0x80,
+ 0x00, 0x05, 0x60, 0x60, 0x00, 0x0D, 0x18, 0x18, 0x00, 0x33, 0x06, 0x04, 0x00, 0xC0, 0xC1, 0x84,
+ 0x00, 0xF0, 0x30, 0x64, 0x00, 0xAC, 0x0C, 0x1C, 0x00, 0xA7, 0x03, 0x14, 0x00, 0x40, 0xC0, 0xD4,
+ 0x00, 0x00, 0xF0, 0x34, 0x0F, 0x80, 0xAC, 0x0C, 0x08, 0x80, 0xA3, 0x3C, 0x08, 0x80, 0x41, 0xD4,
+ 0x08, 0x80, 0x01, 0xD4, 0x08, 0x80, 0x01, 0x48, 0x08, 0x80, 0x01, 0x40, 0x08, 0x80, 0x00, 0x80,
+ 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char bench_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00,
+ 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0x80,
+ 0x00, 0x07, 0x7F, 0xE0, 0x00, 0x0F, 0x1F, 0xF8, 0x00, 0x3F, 0x07, 0xFC, 0x00, 0xFF, 0xC1, 0xFC,
+ 0x00, 0xFF, 0xF0, 0x7C, 0x00, 0xEF, 0xFC, 0x1C, 0x00, 0xE7, 0xFF, 0x1C, 0x00, 0x40, 0xFF, 0xDC,
+ 0x00, 0x00, 0xFF, 0xFC, 0x0F, 0x80, 0xEF, 0xFC, 0x0F, 0x80, 0xE3, 0xFC, 0x0F, 0x80, 0x41, 0xDC,
+ 0x0F, 0x80, 0x01, 0xDC, 0x0F, 0x80, 0x01, 0xC8, 0x0F, 0x80, 0x01, 0xC0, 0x0F, 0x80, 0x00, 0x80,
+ 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char cross_hair_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x3F, 0x80,
+ 0x10, 0x15, 0x40, 0x40, 0x0F, 0xE2, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+unsigned char cross_hair_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x3F, 0x80,
+ 0x1F, 0xF7, 0x7F, 0xC0, 0x0F, 0xE2, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+unsigned char bin_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00,
+ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xC3, 0x80, 0x00, 0x01, 0x00, 0xC0, 0x00, 0x02, 0x57, 0xE0,
+ 0x00, 0x02, 0x00, 0x60, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0x01, 0xC0, 0x00, 0x01, 0x40, 0xC0,
+ 0x00, 0x01, 0x50, 0xC0, 0x0F, 0x81, 0x50, 0x40, 0x08, 0x81, 0x51, 0x40, 0x08, 0x81, 0x51, 0x40,
+ 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40,
+ 0x08, 0x81, 0x55, 0x40, 0xF8, 0xF9, 0x55, 0x40, 0x40, 0x11, 0x55, 0x40, 0x20, 0x21, 0xFF, 0xC0,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char bin_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00,
+ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xE0,
+ 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xC0,
+ 0x00, 0x01, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0,
+ 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0,
+ 0x0F, 0x81, 0xFF, 0xC0, 0xFF, 0xF9, 0xFF, 0xC0, 0x7F, 0xF1, 0xFF, 0xC0, 0x3F, 0xE1, 0xFF, 0xC0,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char lamppost_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0xFF, 0x80,
+ 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x32, 0x00,
+ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x94, 0x80,
+ 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x00, 0x94, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x0F, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00,
+ 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x1C, 0x00,
+ 0x08, 0x80, 0x1C, 0x00, 0xF8, 0xF8, 0x32, 0x00, 0x40, 0x10, 0x61, 0x00, 0x20, 0x20, 0x61, 0x00,
+ 0x10, 0x40, 0x71, 0x00, 0x08, 0x80, 0x7D, 0x00, 0x05, 0x00, 0xFF, 0x80, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char lamppost_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x80,
+ 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3E, 0x00,
+ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x9C, 0x80,
+ 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x9C, 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00,
+ 0x00, 0x00, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00,
+ 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00,
+ 0x0F, 0x80, 0x1C, 0x00, 0xFF, 0xF8, 0x3E, 0x00, 0x7F, 0xF0, 0x7F, 0x00, 0x3F, 0xE0, 0x7F, 0x00,
+ 0x1F, 0xC0, 0x7F, 0x00, 0x0F, 0x80, 0x7F, 0x00, 0x07, 0x00, 0xFF, 0x80, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char fence_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x4E, 0x60, 0x00, 0x00,
+ 0x43, 0xB0, 0x00, 0x00, 0x20, 0xB1, 0x80, 0x00, 0x2C, 0x3A, 0xC0, 0x00, 0x2F, 0x0E, 0xC6, 0x00,
+ 0x2C, 0x82, 0xCB, 0x00, 0x2C, 0xB0, 0x6B, 0x18, 0x6C, 0xBC, 0x1B, 0x2C, 0x7C, 0xB2, 0x83, 0x2C,
+ 0x1E, 0xB2, 0xE1, 0xAC, 0x07, 0xB2, 0xD8, 0x6C, 0x01, 0xF2, 0xCA, 0x0C, 0x00, 0x7A, 0xCB, 0x86,
+ 0x00, 0x1E, 0xCB, 0x66, 0x0F, 0x87, 0xCB, 0x2E, 0x08, 0x81, 0xEB, 0x2C, 0x08, 0x80, 0x7B, 0x2C,
+ 0x08, 0x80, 0x1F, 0x2C, 0x08, 0x80, 0x07, 0xAC, 0x08, 0x80, 0x01, 0xEC, 0x08, 0x80, 0x00, 0x78,
+ 0x08, 0x80, 0x00, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char fence_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7E, 0x60, 0x00, 0x00,
+ 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xF1, 0x80, 0x00, 0x3F, 0xFB, 0xC0, 0x00, 0x3F, 0xFF, 0xC6, 0x00,
+ 0x3C, 0xFF, 0xCF, 0x00, 0x3C, 0xFF, 0xEF, 0x18, 0x7C, 0xFF, 0xFF, 0x3C, 0x7C, 0xF3, 0xFF, 0x3C,
+ 0x1E, 0xF3, 0xFF, 0xBC, 0x07, 0xF3, 0xDF, 0xFC, 0x01, 0xF3, 0xCF, 0xFC, 0x00, 0x7B, 0xCF, 0xFE,
+ 0x00, 0x1F, 0xCF, 0x7E, 0x0F, 0x87, 0xCF, 0x3E, 0x0F, 0x81, 0xEF, 0x3C, 0x0F, 0x80, 0x7F, 0x3C,
+ 0x0F, 0x80, 0x1F, 0x3C, 0x0F, 0x80, 0x07, 0xBC, 0x0F, 0x80, 0x01, 0xFC, 0x0F, 0x80, 0x00, 0x78,
+ 0x0F, 0x80, 0x00, 0x18, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char flower_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x18, 0x44, 0x30,
+ 0x00, 0x24, 0x54, 0x48, 0x00, 0x22, 0x54, 0x88, 0x00, 0x11, 0x55, 0x10, 0x00, 0x0A, 0xBA, 0xA0,
+ 0x00, 0x05, 0xBB, 0x40, 0x00, 0x03, 0xC7, 0x80, 0x00, 0x7C, 0x92, 0x7C, 0x00, 0x83, 0x47, 0x82,
+ 0x01, 0x1D, 0x89, 0xF1, 0x00, 0x83, 0x23, 0x82, 0x00, 0x7C, 0x8A, 0x7C, 0x00, 0x03, 0xE7, 0x80,
+ 0x00, 0x05, 0xBB, 0x40, 0x0F, 0x8A, 0xBA, 0xA0, 0x08, 0x91, 0x55, 0x10, 0x08, 0x92, 0x54, 0x90,
+ 0x08, 0x8C, 0x44, 0x6C, 0x08, 0x98, 0x44, 0x32, 0x08, 0xA6, 0x44, 0x42, 0x08, 0xA1, 0x28, 0x82,
+ 0x08, 0xA0, 0xB9, 0x24, 0xF8, 0xFA, 0xBA, 0x44, 0x40, 0x11, 0x6A, 0x88, 0x20, 0x28, 0xED, 0x10,
+ 0x10, 0x46, 0x4A, 0x60, 0x08, 0x81, 0x81, 0x80, 0x05, 0x00, 0x7E, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char flower_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x18, 0x7C, 0x30,
+ 0x00, 0x3C, 0x7C, 0x78, 0x00, 0x3E, 0x7C, 0xF8, 0x00, 0x1F, 0x7D, 0xF0, 0x00, 0x0F, 0xBB, 0xE0,
+ 0x00, 0x07, 0xBB, 0xC0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x7C, 0xFE, 0x7C, 0x00, 0xFF, 0xFF, 0xFE,
+ 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7C, 0xFE, 0x7C, 0x00, 0x03, 0xFF, 0x80,
+ 0x00, 0x07, 0xBB, 0xC0, 0x0F, 0x8F, 0xBB, 0xE0, 0x0F, 0x9F, 0x7D, 0xF0, 0x0F, 0x9E, 0x7C, 0xF0,
+ 0x0F, 0x8C, 0x7C, 0x6C, 0x0F, 0x98, 0x7C, 0x3E, 0x0F, 0xBE, 0x7C, 0x7E, 0x0F, 0xBF, 0x38, 0xFE,
+ 0x0F, 0xBF, 0xB9, 0xFC, 0xFF, 0xFF, 0xBB, 0xFC, 0x7F, 0xFF, 0xFB, 0xF8, 0x3F, 0xEF, 0xFF, 0xF0,
+ 0x1F, 0xC7, 0xFF, 0xE0, 0x0F, 0x81, 0xFF, 0x80, 0x07, 0x00, 0x7E, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char path_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x01, 0x85, 0x80, 0x00,
+ 0x06, 0x48, 0x60, 0x00, 0x1A, 0x24, 0x58, 0x00, 0x62, 0x3A, 0x46, 0x00, 0x79, 0xC1, 0x45, 0x80,
+ 0x1E, 0x27, 0xFC, 0x60, 0x07, 0x98, 0x82, 0x58, 0x01, 0xE0, 0x82, 0x46, 0x00, 0x79, 0x45, 0x79,
+ 0x00, 0x1E, 0x28, 0x87, 0x0F, 0x87, 0x94, 0x9E, 0x08, 0x81, 0xE2, 0x78, 0x08, 0x80, 0x79, 0xE0,
+ 0x08, 0x80, 0x1F, 0x80, 0x08, 0x80, 0x06, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00,
+ 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char path_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00,
+ 0x07, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0x80,
+ 0x1F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF,
+ 0x00, 0x1F, 0xFF, 0xFF, 0x0F, 0x87, 0xFF, 0xFE, 0x0F, 0x81, 0xFF, 0xF8, 0x0F, 0x80, 0x7F, 0xE0,
+ 0x0F, 0x80, 0x1F, 0x80, 0x0F, 0x80, 0x06, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
+ 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char dig_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0xA4,
+ 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, 0x8B, 0x00, 0x00, 0x02, 0x96, 0x00, 0x00, 0x02, 0x6C,
+ 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x08, 0xF0, 0x00, 0x00, 0x11, 0x80, 0x00, 0x03, 0x2A, 0x00,
+ 0x00, 0x04, 0xC6, 0x00, 0x00, 0x09, 0x8C, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x22, 0x30, 0x00,
+ 0x00, 0x24, 0x78, 0x00, 0x0F, 0xC5, 0xE4, 0x00, 0x08, 0xC7, 0xC4, 0x00, 0x08, 0xC3, 0x28, 0x00,
+ 0x08, 0xA0, 0x10, 0x00, 0x08, 0x90, 0x20, 0x00, 0x08, 0x88, 0xC0, 0x00, 0x08, 0x87, 0x00, 0x00,
+ 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char dig_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xFC,
+ 0x00, 0x00, 0x01, 0xDE, 0x00, 0x00, 0x03, 0x8F, 0x00, 0x00, 0x03, 0x9E, 0x00, 0x00, 0x03, 0xFC,
+ 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0x3E, 0x00,
+ 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00,
+ 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xF8, 0x00,
+ 0x0F, 0xBF, 0xF0, 0x00, 0x0F, 0x9F, 0xE0, 0x00, 0x0F, 0x8F, 0xC0, 0x00, 0x0F, 0x87, 0x00, 0x00,
+ 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char water_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x82, 0x00,
+ 0x08, 0x20, 0x82, 0x00, 0x14, 0x51, 0x45, 0x00, 0x63, 0x8E, 0x38, 0xC0, 0x88, 0x20, 0x82, 0x20,
+ 0x77, 0xDF, 0x7D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x08, 0x00, 0x20, 0x82, 0x08,
+ 0x00, 0x51, 0x45, 0x14, 0x00, 0x8E, 0x38, 0xE2, 0x0F, 0xA0, 0x82, 0x09, 0x08, 0xDF, 0x7D, 0xF6,
+ 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x82, 0x00, 0x08, 0x80, 0x82, 0x00, 0x08, 0x81, 0x45, 0x00,
+ 0x08, 0x86, 0x38, 0xC0, 0xF8, 0xF8, 0x82, 0x20, 0x40, 0x17, 0x7D, 0xC0, 0x20, 0x20, 0x00, 0x00,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char water_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x82, 0x00,
+ 0x08, 0x20, 0x82, 0x00, 0x1C, 0x71, 0xC7, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x77, 0xDF, 0x7D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x08, 0x00, 0x20, 0x82, 0x08,
+ 0x00, 0x71, 0xC7, 0x1C, 0x00, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xDF, 0x7D, 0xF6,
+ 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x82, 0x00, 0x0F, 0x80, 0x82, 0x00, 0x0F, 0x81, 0xC7, 0x00,
+ 0x0F, 0x87, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xF7, 0x7D, 0xC0, 0x3F, 0xE0, 0x00, 0x00,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char house_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xF0, 0x00, 0x00, 0x2A, 0x10,
+ 0x00, 0x00, 0x45, 0xE0, 0x00, 0x00, 0x93, 0x20, 0x00, 0x01, 0x19, 0x20, 0x00, 0x02, 0x0C, 0x20,
+ 0x00, 0x04, 0x7E, 0x20, 0x00, 0x08, 0x03, 0x20, 0x00, 0x10, 0xFF, 0x90, 0x00, 0x20, 0x00, 0xC8,
+ 0x00, 0x47, 0xFF, 0xE4, 0x00, 0xF0, 0x00, 0x7E, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
+ 0x00, 0x11, 0xEF, 0xD0, 0x00, 0x11, 0x28, 0x50, 0x0F, 0x91, 0x28, 0x50, 0x08, 0x91, 0x28, 0x50,
+ 0x08, 0x91, 0x2F, 0xD0, 0x08, 0x91, 0x20, 0x10, 0x08, 0x91, 0x20, 0x10, 0x08, 0x9F, 0xFF, 0xF0,
+ 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char house_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xF0, 0x00, 0x00, 0x3B, 0xF0,
+ 0x00, 0x00, 0x7D, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0,
+ 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF8,
+ 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0,
+ 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0x38, 0x70, 0x0F, 0x9F, 0x38, 0x70, 0x0F, 0x9F, 0x38, 0x70,
+ 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0xFF, 0xF0,
+ 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char volcano_down_cursor_data[32 * 4] = {
+ 0x00, 0x08, 0xA0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00,
+ 0x00, 0x07, 0xB0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x17, 0x84, 0x00, 0x00, 0x30, 0x1E, 0x00,
+ 0x00, 0x76, 0x72, 0x00, 0x00, 0x5A, 0x89, 0x00, 0x00, 0x81, 0x1C, 0x80, 0x03, 0x08, 0x0A, 0x70,
+ 0x04, 0x18, 0x17, 0x88, 0x18, 0x30, 0x0A, 0xA6, 0x23, 0xC2, 0x07, 0x7F, 0x7C, 0x5F, 0x8F, 0xEC,
+ 0x40, 0xF0, 0xD8, 0xC0, 0x00, 0x40, 0x20, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00,
+ 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00,
+ 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char volcano_down_cursor_mask[32 * 4] = {
+ 0x00, 0x08, 0xA0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00,
+ 0x00, 0x07, 0xB0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00,
+ 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xF0,
+ 0x07, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0x7C, 0x7F, 0xFF, 0xEC,
+ 0x40, 0xF0, 0xF8, 0xC0, 0x00, 0x40, 0x20, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
+ 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
+ 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char walk_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00,
+ 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00,
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x1C, 0x00,
+ 0x02, 0x20, 0x22, 0x00, 0x02, 0x10, 0x21, 0x00, 0x01, 0x08, 0x10, 0x80, 0x00, 0x88, 0x08, 0x80,
+ 0x00, 0x72, 0x07, 0x20, 0x00, 0x0D, 0x00, 0xD0, 0x0F, 0x89, 0x00, 0x90, 0x08, 0x86, 0x00, 0x60,
+ 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x0E, 0x00, 0x08, 0x80, 0x11, 0x00, 0x08, 0x80, 0x10, 0x80,
+ 0x08, 0x80, 0x08, 0x40, 0xF8, 0xF8, 0x04, 0x40, 0x40, 0x10, 0x03, 0x90, 0x20, 0x20, 0x00, 0x68,
+ 0x10, 0x40, 0x00, 0x48, 0x08, 0x80, 0x00, 0x30, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char walk_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00,
+ 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00,
+ 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x1C, 0x00,
+ 0x03, 0xE0, 0x3E, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, 0xF8, 0x0F, 0x80,
+ 0x00, 0x72, 0x07, 0x20, 0x00, 0x0F, 0x00, 0xF0, 0x0F, 0x8F, 0x00, 0xF0, 0x0F, 0x86, 0x00, 0x60,
+ 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x0E, 0x00, 0x0F, 0x80, 0x1F, 0x00, 0x0F, 0x80, 0x1F, 0x80,
+ 0x0F, 0x80, 0x0F, 0xC0, 0xFF, 0xF8, 0x07, 0xC0, 0x7F, 0xF0, 0x03, 0x90, 0x3F, 0xE0, 0x00, 0x78,
+ 0x1F, 0xC0, 0x00, 0x78, 0x0F, 0x80, 0x00, 0x30, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char paint_down_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFA,
+ 0x00, 0x00, 0x01, 0xF6, 0x00, 0x00, 0x03, 0xE4, 0x00, 0x03, 0x07, 0xCC, 0x00, 0x07, 0x84, 0x98,
+ 0x00, 0x0F, 0xC8, 0x70, 0x00, 0x1B, 0xF8, 0x60, 0x00, 0x3D, 0xE0, 0xC0, 0x00, 0x7E, 0xE3, 0x00,
+ 0x00, 0xFF, 0x62, 0x00, 0x00, 0xDF, 0xBE, 0x00, 0x00, 0x7F, 0xDF, 0x00, 0x00, 0x37, 0xEF, 0x80,
+ 0x00, 0x1B, 0xF7, 0xC0, 0x07, 0xCF, 0xFB, 0xC0, 0x04, 0x46, 0x9D, 0xC0, 0x04, 0x43, 0x07, 0x80,
+ 0x04, 0x41, 0x83, 0x00, 0x04, 0x40, 0xC6, 0x00, 0x04, 0x40, 0x6C, 0x00, 0x04, 0x40, 0x28, 0x00,
+ 0x7C, 0x7C, 0x10, 0x00, 0x20, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00,
+ 0x04, 0x40, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+unsigned char paint_down_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFE,
+ 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x03, 0x07, 0xFC, 0x00, 0x07, 0x87, 0xF8,
+ 0x00, 0x0F, 0xCF, 0xF0, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x00,
+ 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80,
+ 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xCF, 0xFF, 0xC0, 0x07, 0xC7, 0xFF, 0xC0, 0x07, 0xC3, 0xFF, 0x80,
+ 0x07, 0xC1, 0xFF, 0x00, 0x07, 0xC0, 0xFE, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x07, 0xC0, 0x38, 0x00,
+ 0x7F, 0xFC, 0x10, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00,
+ 0x07, 0xC0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+unsigned char entrance_down_cursor_data[32 * 4] = {
+ 0x20, 0x00, 0x00, 0x08, 0x50, 0x00, 0x00, 0x14, 0x88, 0x00, 0x00, 0x22, 0x50, 0x00, 0x00, 0x14,
+ 0x7F, 0xFF, 0xFF, 0xFC, 0x58, 0x00, 0x00, 0x34, 0x54, 0x00, 0x00, 0x54, 0x54, 0x00, 0x00, 0x54,
+ 0x54, 0x00, 0x00, 0x54, 0x5C, 0x00, 0x00, 0x34, 0x5F, 0xFF, 0xFF, 0xF4, 0x50, 0x00, 0x00, 0x14,
+ 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14,
+ 0x50, 0x00, 0x00, 0x14, 0x5F, 0x80, 0x00, 0x14, 0xD8, 0x80, 0x00, 0x14, 0x58, 0x80, 0x02, 0xB5,
+ 0x58, 0x80, 0x00, 0x14, 0xD8, 0x80, 0x00, 0x14, 0x58, 0x80, 0x05, 0x74, 0x08, 0x80, 0x00, 0x00,
+ 0x08, 0x80, 0x00, 0xD2, 0xF8, 0xF8, 0x0E, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
+ 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+unsigned char entrance_down_cursor_mask[32 * 4] = {
+ 0x20, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x1C, 0xF8, 0x00, 0x00, 0x3E, 0x70, 0x00, 0x00, 0x1C,
+ 0x7F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFC, 0x77, 0xFF, 0xFF, 0xDC, 0x77, 0xFF, 0xFF, 0xDC,
+ 0x77, 0xFF, 0xFF, 0xDC, 0x7F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFC, 0x70, 0x00, 0x00, 0x1C,
+ 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C,
+ 0x70, 0x00, 0x00, 0x1C, 0x7F, 0x80, 0x00, 0x1C, 0xFF, 0x80, 0x00, 0x1C, 0x7F, 0x80, 0x02, 0xBD,
+ 0x7F, 0x80, 0x00, 0x1C, 0xFF, 0x80, 0x00, 0x1C, 0x7F, 0x80, 0x05, 0x7C, 0x0F, 0x80, 0x00, 0x00,
+ 0x0F, 0x80, 0x00, 0xD2, 0xFF, 0xF8, 0x0E, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
+ 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+};
+
+unsigned char hand_open_cursor_data[32 * 4] = {
+ 0x00, 0x06, 0x10, 0x00, 0x00, 0x09, 0x38, 0x00, 0x00, 0x09, 0x24, 0x00, 0x03, 0x08, 0xA4, 0x00,
+ 0x04, 0x88, 0xA4, 0xC0, 0x04, 0x48, 0x63, 0x20, 0x04, 0x24, 0x63, 0x10, 0x06, 0x24, 0x61, 0x90,
+ 0x02, 0x14, 0x21, 0x90, 0x03, 0x0C, 0x21, 0x10, 0x01, 0x04, 0x21, 0x10, 0x01, 0x86, 0x01, 0x10,
+ 0x00, 0x82, 0x00, 0x08, 0x00, 0xC0, 0x00, 0x08, 0x00, 0x60, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08,
+ 0x00, 0x30, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08,
+ 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10,
+ 0x0F, 0xC0, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 0x08, 0x12, 0x00, 0x00, 0x08,
+ 0x0F, 0x0F, 0x00, 0x04, 0x01, 0xF9, 0x80, 0x04, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x7F, 0xE0,
+};
+unsigned char hand_open_cursor_mask[32 * 4] = {
+ 0x00, 0x06, 0x10, 0x00, 0x00, 0x0F, 0x38, 0x00, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0x0F, 0xBC, 0x00,
+ 0x07, 0x8F, 0xBC, 0xC0, 0x07, 0xCF, 0xFF, 0xE0, 0x07, 0xE7, 0xFF, 0xF0, 0x07, 0xE7, 0xFF, 0xF0,
+ 0x03, 0xF7, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0,
+ 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8,
+ 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8,
+ 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF0,
+ 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8,
+ 0x0F, 0xFF, 0xFF, 0xFC, 0x01, 0xF9, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xE0,
+};
+
+unsigned char hand_closed_cursor_data[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xE0, 0x00, 0x00, 0x43, 0x10, 0x00, 0x00, 0x41, 0x8C, 0x00,
+ 0x00, 0x20, 0x87, 0x00, 0x0E, 0x20, 0x42, 0x80, 0x11, 0x98, 0x62, 0x40, 0x10, 0x6C, 0x61, 0x20,
+ 0x18, 0x14, 0x21, 0x20, 0x0C, 0x0C, 0x21, 0x10, 0x06, 0x04, 0x21, 0x10, 0x03, 0x06, 0x01, 0x10,
+ 0x00, 0x82, 0x00, 0x08, 0x00, 0xC0, 0x00, 0x08, 0x00, 0x60, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08,
+ 0x00, 0x30, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08,
+ 0x07, 0x10, 0x00, 0x10, 0x08, 0x90, 0x00, 0x10, 0x08, 0x60, 0x00, 0x10, 0x0A, 0x00, 0x00, 0x10,
+ 0x0A, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x08, 0x03, 0x80, 0x00, 0x08,
+ 0x00, 0x7F, 0x00, 0x04, 0x00, 0x01, 0x80, 0x04, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x7F, 0xE0,
+};
+unsigned char hand_closed_cursor_mask[32 * 4] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xE0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, 0xFC, 0x00,
+ 0x00, 0x3F, 0xFF, 0x00, 0x0E, 0x3F, 0xFF, 0x80, 0x1F, 0x9F, 0xFF, 0xC0, 0x1F, 0xEF, 0xFF, 0xE0,
+ 0x1F, 0xF7, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF0,
+ 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8,
+ 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8,
+ 0x07, 0x1F, 0xFF, 0xF0, 0x0F, 0x9F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0,
+ 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xE0,
+};
\ No newline at end of file
diff --git a/src/cursors.h b/src/cursors.h
index 531abf7e62..19b19a2448 100644
--- a/src/cursors.h
+++ b/src/cursors.h
@@ -21,571 +21,164 @@
#ifndef _CURSORS_H_
#define _CURSORS_H_
-#define NO_CURSORS 27
+enum {
+ CURSOR_ARROW = 0,
+ CURSOR_BLANK = 1,
+ CURSOR_UP_ARROW = 2,
+ CURSOR_UP_DOWN_ARROW = 3,
+ CURSOR_HAND_POINT = 4,
+ CURSOR_ZZZ = 5,
+ CURSOR_DIAGONAL_ARROWS = 6,
+ CURSOR_PICKER = 7,
+ CURSOR_TREE_DOWN = 8,
+ CURSOR_FOUNTAIN_DOWN = 9,
+ CURSOR_STATUE_DOWN = 10,
+ CURSOR_BENCH_DOWN = 11,
+ CURSOR_CROSS_HAIR = 12,
+ CURSOR_BIN_DOWN = 13,
+ CURSOR_LAMPPOST_DOWN = 14,
+ CURSOR_FENCE_DOWN = 15,
+ CURSOR_FLOWER_DOWN = 16,
+ CURSOR_PATH_DOWN = 17,
+ CURSOR_DIG_DOWN = 18,
+ CURSOR_WATER_DOWN = 19,
+ CURSOR_HOUSE_DOWN = 20,
+ CURSOR_VOLCANO_DOWN = 21,
+ CURSOR_WALK_DOWN = 22,
+ CURSOR_PAINT_DOWN = 23,
+ CURSOR_ENTRANCE_DOWN = 24,
+ CURSOR_HAND_OPEN = 25,
+ CURSOR_HAND_CLOSED = 26,
+ CURSOR_COUNT
+};
-unsigned char blank_cursor_data[32 * 4] = {
- 0
-};
-unsigned char blank_cursor_mask[32 * 4] = {
- 0
-};
+extern unsigned char blank_cursor_data[32 * 4];
+extern unsigned char blank_cursor_mask[32 * 4];
#define BLANK_CURSOR_HOTX 0
#define BLANK_CURSOR_HOTY 0
-unsigned char up_arrow_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x04, 0x10, 0x00,
- 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x02, 0x20, 0x00,
- 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00,
- 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-unsigned char up_arrow_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00,
- 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x03, 0xE0, 0x00,
- 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00,
- 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+extern unsigned char up_arrow_cursor_data[32 * 4];
+extern unsigned char up_arrow_cursor_mask[32 * 4];
#define UP_ARROW_CURSOR_HOTX 15
#define UP_ARROW_CURSOR_HOTY 0
-unsigned char up_down_arrow_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0xA0, 0x00,
- 0x00, 0x05, 0x50, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x17, 0x74, 0x00, 0x00, 0x21, 0x42, 0x00,
- 0x00, 0x1D, 0xDC, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00,
- 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0xE0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 0xD0, 0x00, 0x00, 0x1D, 0x5C, 0x00,
- 0x00, 0x21, 0x42, 0x00, 0x00, 0x17, 0x74, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x05, 0x50, 0x00,
- 0x00, 0x02, 0xA0, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-unsigned char up_down_arrow_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00,
- 0x00, 0x07, 0x70, 0x00, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x3F, 0x7E, 0x00,
- 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00,
- 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0x7C, 0x00,
- 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x07, 0x70, 0x00,
- 0x00, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+extern unsigned char up_down_arrow_cursor_data[32 * 4];
+extern unsigned char up_down_arrow_cursor_mask[32 * 4];
#define UP_DOWN_ARROW_CURSOR_HOTX 7
#define UP_DOWN_ARROW_CURSOR_HOTY 31
-unsigned char zzz_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
- 0x00, 0x00, 0x03, 0xE2, 0x00, 0x00, 0xFC, 0x34, 0x00, 0x01, 0x07, 0x62, 0x00, 0x3F, 0xEA, 0xDC,
- 0x00, 0x40, 0xD4, 0x20, 0x00, 0x3D, 0xBB, 0xC0, 0x3F, 0xCB, 0x04, 0x00, 0x40, 0x34, 0xF8, 0x00,
- 0x40, 0x2F, 0x00, 0x00, 0x3C, 0x40, 0x80, 0x00, 0x08, 0xBF, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
- 0x23, 0xC0, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-unsigned char zzz_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
- 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFB, 0xDC,
- 0x00, 0x7F, 0xF7, 0xE0, 0x00, 0x3F, 0xFB, 0xC0, 0x3F, 0xCF, 0xFC, 0x00, 0x7F, 0xFC, 0xF8, 0x00,
- 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
- 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+extern unsigned char zzz_cursor_data[32 * 4];
+extern unsigned char zzz_cursor_mask[32 * 4];
#define ZZZ_CURSOR_HOTX 0
#define ZZZ_CURSOR_HOTY 0
-unsigned char diagonal_arrow_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
- 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00,
- 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-unsigned char diagonal_arrow_cursor_mask[32 * 4] = {
- 0xFE, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00,
- 0xFC, 0x00, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00,
- 0x01, 0xC2, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00,
- 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+extern unsigned char diagonal_arrow_cursor_data[32 * 4];
+extern unsigned char diagonal_arrow_cursor_mask[32 * 4];
#define DIAGONAL_ARROW_CURSOR_HOTX 0
#define DIAGONAL_ARROW_CURSOR_HOTY 0
-unsigned char picker_cursor_data[32 * 4] = {
- 0x00, 0x07, 0xC0, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, 0x17, 0xB0, 0x00,
- 0x00, 0x17, 0xB0, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x0F, 0xE0, 0x00,
- 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x17, 0x30, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, 0x21, 0x18, 0x00,
- 0x00, 0x23, 0x18, 0x00, 0x00, 0x44, 0x8C, 0x00, 0x00, 0x44, 0x8C, 0x00, 0x00, 0x88, 0x46, 0x00,
- 0x00, 0x90, 0x26, 0x00, 0x01, 0x10, 0x23, 0x00, 0x01, 0x20, 0x13, 0x00, 0x02, 0x40, 0x09, 0x80,
- 0x02, 0x40, 0x09, 0x80, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0,
- 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x40, 0x08, 0xC0, 0x02, 0x40, 0x09, 0x80,
- 0x01, 0x20, 0x13, 0x00, 0x00, 0x90, 0x26, 0x00, 0x00, 0x68, 0x5C, 0x00, 0x00, 0x1C, 0xF0, 0x00,
-};
-unsigned char picker_cursor_mask[32 * 4] = {
- 0x00, 0x07, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00,
- 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x00,
- 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF8, 0x00,
- 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x00, 0xF8, 0x7E, 0x00,
- 0x00, 0xF0, 0x3E, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x01, 0xE0, 0x1F, 0x00, 0x03, 0xC0, 0x0F, 0x80,
- 0x03, 0xC0, 0x0F, 0x80, 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0,
- 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0, 0x07, 0xC0, 0x0F, 0xC0, 0x03, 0xC0, 0x0F, 0x80,
- 0x01, 0xE0, 0x1F, 0x00, 0x00, 0xF0, 0x3E, 0x00, 0x00, 0x78, 0x7C, 0x00, 0x00, 0x1C, 0xF0, 0x00,
-};
+extern unsigned char picker_cursor_data[32 * 4];
+extern unsigned char picker_cursor_mask[32 * 4];
#define PICKER_CURSOR_HOTX 15
#define PICKER_CURSOR_HOTY 31
-unsigned char tree_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0x89, 0xC0, 0x00, 0x02, 0x06, 0x20,
- 0x00, 0x07, 0x00, 0x18, 0x00, 0x07, 0x40, 0x04, 0x00, 0x03, 0x80, 0x04, 0x00, 0x01, 0xC0, 0x02,
- 0x00, 0x03, 0x82, 0x02, 0x00, 0x03, 0xD0, 0x04, 0x00, 0x07, 0xF9, 0x08, 0x00, 0x0F, 0x6E, 0x04,
- 0x00, 0x0E, 0xB8, 0x82, 0x00, 0x0F, 0x44, 0x22, 0x00, 0x0F, 0xA8, 0x46, 0x00, 0x0F, 0xFC, 0x16,
- 0x00, 0x07, 0xEE, 0x8C, 0x0F, 0x81, 0xFF, 0xD8, 0x08, 0x80, 0x7D, 0xF0, 0x08, 0x80, 0x3A, 0x00,
- 0x08, 0x80, 0x1A, 0x00, 0x08, 0x80, 0x1A, 0x00, 0x08, 0x80, 0x12, 0x00, 0x08, 0x80, 0x12, 0x00,
- 0x08, 0x80, 0x11, 0x00, 0xF8, 0xF8, 0x60, 0x80, 0x40, 0x11, 0x80, 0x60, 0x20, 0x22, 0x09, 0x90,
- 0x10, 0x41, 0xD5, 0x60, 0x08, 0x80, 0x22, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char tree_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0xF9, 0xC0, 0x00, 0x03, 0xFF, 0xE0,
- 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFE,
- 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFC,
- 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE,
- 0x00, 0x07, 0xFF, 0xFC, 0x0F, 0x81, 0xFF, 0xF8, 0x0F, 0x80, 0x7F, 0xF0, 0x0F, 0x80, 0x3E, 0x00,
- 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00,
- 0x0F, 0x80, 0x1F, 0x00, 0xFF, 0xF8, 0x7F, 0x80, 0x7F, 0xF1, 0xFF, 0xE0, 0x3F, 0xE3, 0xFF, 0xF0,
- 0x1F, 0xC1, 0xF7, 0x60, 0x0F, 0x80, 0x22, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char tree_down_cursor_data[32 * 4];
+extern unsigned char tree_down_cursor_mask[32 * 4];
#define TREE_DOWN_CURSOR_HOTX 7
#define TREE_DOWN_CURSOR_HOTY 31
-unsigned char fountain_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x00,
- 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x01, 0x8B, 0x30, 0x00, 0x02, 0x17, 0xC8,
- 0x00, 0x02, 0x0F, 0x88, 0x0F, 0x83, 0x80, 0x38, 0x08, 0x82, 0x7F, 0xD8, 0x08, 0x81, 0x01, 0xF0,
- 0x08, 0x80, 0xE3, 0xE0, 0x08, 0x80, 0x3F, 0x80, 0x08, 0x80, 0x17, 0x00, 0x08, 0x80, 0x13, 0x00,
- 0x08, 0x80, 0x13, 0x00, 0xF8, 0xF8, 0x27, 0x80, 0x40, 0x10, 0x4E, 0xC0, 0x20, 0x20, 0x80, 0xE0,
- 0x10, 0x40, 0xC1, 0xA0, 0x08, 0x80, 0x7F, 0xC0, 0x05, 0x00, 0x1F, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char fountain_down_cursor_mask[32 * 4] = {
- 0x00, 0x01, 0x04, 0x00, 0x00, 0x10, 0x10, 0x81, 0x00, 0x00, 0x41, 0x14, 0x00, 0x05, 0x08, 0x20,
- 0x00, 0x00, 0x22, 0x81, 0x00, 0x00, 0x88, 0x10, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 0x00,
- 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x00,
- 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF8,
- 0x00, 0x03, 0xFF, 0xF8, 0x0F, 0x83, 0xFF, 0xF8, 0x0F, 0x83, 0xFF, 0xF8, 0x0F, 0x81, 0xFF, 0xF0,
- 0x0F, 0x80, 0xFF, 0xE0, 0x0F, 0x80, 0x3F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x0F, 0x80, 0x1F, 0x00,
- 0x0F, 0x80, 0x1F, 0x00, 0xFF, 0xF8, 0x3F, 0x80, 0x7F, 0xF0, 0x7F, 0xC0, 0x3F, 0xE0, 0xFF, 0xE0,
- 0x1F, 0xC0, 0xFF, 0xE0, 0x0F, 0x80, 0x7F, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char fountain_down_cursor_data[32 * 4];
+extern unsigned char fountain_down_cursor_mask[32 * 4];
#define FOUNTAIN_DOWN_CURSOR_HOTX 7
#define FOUNTAIN_DOWN_CURSOR_HOTY 31
-unsigned char statue_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x07, 0x03, 0x30,
- 0x00, 0x02, 0x84, 0x98, 0x00, 0x01, 0x44, 0x98, 0x00, 0x00, 0xB5, 0xA8, 0x00, 0x00, 0x4A, 0xD0,
- 0x00, 0x00, 0x21, 0x20, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x10, 0x80,
- 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00,
- 0x00, 0x00, 0x05, 0x00, 0x0F, 0x80, 0x08, 0x80, 0x08, 0x80, 0x04, 0x80, 0x08, 0x80, 0x05, 0x00,
- 0x08, 0x80, 0x0D, 0x00, 0x08, 0x80, 0x09, 0x00, 0x08, 0x80, 0x3F, 0x80, 0x08, 0x80, 0x20, 0x80,
- 0x08, 0x80, 0x20, 0x80, 0xF8, 0xF8, 0x20, 0x80, 0x40, 0x10, 0x20, 0x80, 0x20, 0x20, 0x20, 0x80,
- 0x10, 0x40, 0x7F, 0xC0, 0x08, 0x80, 0x80, 0x20, 0x05, 0x00, 0xFF, 0xE0, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char statue_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x07, 0x03, 0x30,
- 0x00, 0x03, 0x87, 0x98, 0x00, 0x01, 0xC7, 0x98, 0x00, 0x00, 0xF7, 0xB8, 0x00, 0x00, 0x7E, 0xF0,
- 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x1F, 0x80,
- 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00,
- 0x00, 0x00, 0x07, 0x00, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x07, 0x80, 0x0F, 0x80, 0x07, 0x00,
- 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x80, 0x3F, 0x80, 0x0F, 0x80, 0x3F, 0x80,
- 0x0F, 0x80, 0x3F, 0x80, 0xFF, 0xF8, 0x3F, 0x80, 0x7F, 0xF0, 0x3F, 0x80, 0x3F, 0xE0, 0x3F, 0x80,
- 0x1F, 0xC0, 0x7F, 0xC0, 0x0F, 0x80, 0xFF, 0xE0, 0x07, 0x00, 0xFF, 0xE0, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char statue_down_cursor_data[32 * 4];
+extern unsigned char statue_down_cursor_mask[32 * 4];
#define STATUE_DOWN_CURSOR_HOTX 7
#define STATUE_DOWN_CURSOR_HOTY 31
-unsigned char bench_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00,
- 0x00, 0x04, 0x60, 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x05, 0x81, 0x80,
- 0x00, 0x05, 0x60, 0x60, 0x00, 0x0D, 0x18, 0x18, 0x00, 0x33, 0x06, 0x04, 0x00, 0xC0, 0xC1, 0x84,
- 0x00, 0xF0, 0x30, 0x64, 0x00, 0xAC, 0x0C, 0x1C, 0x00, 0xA7, 0x03, 0x14, 0x00, 0x40, 0xC0, 0xD4,
- 0x00, 0x00, 0xF0, 0x34, 0x0F, 0x80, 0xAC, 0x0C, 0x08, 0x80, 0xA3, 0x3C, 0x08, 0x80, 0x41, 0xD4,
- 0x08, 0x80, 0x01, 0xD4, 0x08, 0x80, 0x01, 0x48, 0x08, 0x80, 0x01, 0x40, 0x08, 0x80, 0x00, 0x80,
- 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char bench_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00,
- 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0x80,
- 0x00, 0x07, 0x7F, 0xE0, 0x00, 0x0F, 0x1F, 0xF8, 0x00, 0x3F, 0x07, 0xFC, 0x00, 0xFF, 0xC1, 0xFC,
- 0x00, 0xFF, 0xF0, 0x7C, 0x00, 0xEF, 0xFC, 0x1C, 0x00, 0xE7, 0xFF, 0x1C, 0x00, 0x40, 0xFF, 0xDC,
- 0x00, 0x00, 0xFF, 0xFC, 0x0F, 0x80, 0xEF, 0xFC, 0x0F, 0x80, 0xE3, 0xFC, 0x0F, 0x80, 0x41, 0xDC,
- 0x0F, 0x80, 0x01, 0xDC, 0x0F, 0x80, 0x01, 0xC8, 0x0F, 0x80, 0x01, 0xC0, 0x0F, 0x80, 0x00, 0x80,
- 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char bench_down_cursor_data[32 * 4];
+extern unsigned char bench_down_cursor_mask[32 * 4];
#define BENCH_DOWN_CURSOR_HOTX 7
#define BENCH_DOWN_CURSOR_HOTY 31
-unsigned char cross_hair_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
- 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
- 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x3F, 0x80,
- 0x10, 0x15, 0x40, 0x40, 0x0F, 0xE2, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
- 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-unsigned char cross_hair_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x3F, 0x80,
- 0x1F, 0xF7, 0x7F, 0xC0, 0x0F, 0xE2, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
- 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+extern unsigned char cross_hair_cursor_data[32 * 4];
+extern unsigned char cross_hair_cursor_mask[32 * 4];
#define CROSS_HAIR_CURSOR_HOTX 15
#define CROSS_HAIR_CURSOR_HOTY 15
-unsigned char bin_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00,
- 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xC3, 0x80, 0x00, 0x01, 0x00, 0xC0, 0x00, 0x02, 0x57, 0xE0,
- 0x00, 0x02, 0x00, 0x60, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0x01, 0xC0, 0x00, 0x01, 0x40, 0xC0,
- 0x00, 0x01, 0x50, 0xC0, 0x0F, 0x81, 0x50, 0x40, 0x08, 0x81, 0x51, 0x40, 0x08, 0x81, 0x51, 0x40,
- 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40,
- 0x08, 0x81, 0x55, 0x40, 0xF8, 0xF9, 0x55, 0x40, 0x40, 0x11, 0x55, 0x40, 0x20, 0x21, 0xFF, 0xC0,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char bin_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00,
- 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xE0,
- 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xC0,
- 0x00, 0x01, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0,
- 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0,
- 0x0F, 0x81, 0xFF, 0xC0, 0xFF, 0xF9, 0xFF, 0xC0, 0x7F, 0xF1, 0xFF, 0xC0, 0x3F, 0xE1, 0xFF, 0xC0,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char bin_down_cursor_data[32 * 4];
+extern unsigned char bin_down_cursor_mask[32 * 4];
#define BIN_DOWN_CURSOR_HOTX 7
#define BIN_DOWN_CURSOR_HOTY 31
-unsigned char lamppost_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0xFF, 0x80,
- 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x32, 0x00,
- 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x94, 0x80,
- 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x00, 0x94, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00,
- 0x00, 0x00, 0x14, 0x00, 0x0F, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00,
- 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x1C, 0x00,
- 0x08, 0x80, 0x1C, 0x00, 0xF8, 0xF8, 0x32, 0x00, 0x40, 0x10, 0x61, 0x00, 0x20, 0x20, 0x61, 0x00,
- 0x10, 0x40, 0x71, 0x00, 0x08, 0x80, 0x7D, 0x00, 0x05, 0x00, 0xFF, 0x80, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char lamppost_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x80,
- 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3E, 0x00,
- 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x9C, 0x80,
- 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x9C, 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00,
- 0x00, 0x00, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00,
- 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00,
- 0x0F, 0x80, 0x1C, 0x00, 0xFF, 0xF8, 0x3E, 0x00, 0x7F, 0xF0, 0x7F, 0x00, 0x3F, 0xE0, 0x7F, 0x00,
- 0x1F, 0xC0, 0x7F, 0x00, 0x0F, 0x80, 0x7F, 0x00, 0x07, 0x00, 0xFF, 0x80, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char lamppost_down_cursor_data[32 * 4];
+extern unsigned char lamppost_down_cursor_mask[32 * 4];
#define LAMPPOST_DOWN_CURSOR_HOTX 7
#define LAMPPOST_DOWN_CURSOR_HOTY 31
-unsigned char fence_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x4E, 0x60, 0x00, 0x00,
- 0x43, 0xB0, 0x00, 0x00, 0x20, 0xB1, 0x80, 0x00, 0x2C, 0x3A, 0xC0, 0x00, 0x2F, 0x0E, 0xC6, 0x00,
- 0x2C, 0x82, 0xCB, 0x00, 0x2C, 0xB0, 0x6B, 0x18, 0x6C, 0xBC, 0x1B, 0x2C, 0x7C, 0xB2, 0x83, 0x2C,
- 0x1E, 0xB2, 0xE1, 0xAC, 0x07, 0xB2, 0xD8, 0x6C, 0x01, 0xF2, 0xCA, 0x0C, 0x00, 0x7A, 0xCB, 0x86,
- 0x00, 0x1E, 0xCB, 0x66, 0x0F, 0x87, 0xCB, 0x2E, 0x08, 0x81, 0xEB, 0x2C, 0x08, 0x80, 0x7B, 0x2C,
- 0x08, 0x80, 0x1F, 0x2C, 0x08, 0x80, 0x07, 0xAC, 0x08, 0x80, 0x01, 0xEC, 0x08, 0x80, 0x00, 0x78,
- 0x08, 0x80, 0x00, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char fence_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7E, 0x60, 0x00, 0x00,
- 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xF1, 0x80, 0x00, 0x3F, 0xFB, 0xC0, 0x00, 0x3F, 0xFF, 0xC6, 0x00,
- 0x3C, 0xFF, 0xCF, 0x00, 0x3C, 0xFF, 0xEF, 0x18, 0x7C, 0xFF, 0xFF, 0x3C, 0x7C, 0xF3, 0xFF, 0x3C,
- 0x1E, 0xF3, 0xFF, 0xBC, 0x07, 0xF3, 0xDF, 0xFC, 0x01, 0xF3, 0xCF, 0xFC, 0x00, 0x7B, 0xCF, 0xFE,
- 0x00, 0x1F, 0xCF, 0x7E, 0x0F, 0x87, 0xCF, 0x3E, 0x0F, 0x81, 0xEF, 0x3C, 0x0F, 0x80, 0x7F, 0x3C,
- 0x0F, 0x80, 0x1F, 0x3C, 0x0F, 0x80, 0x07, 0xBC, 0x0F, 0x80, 0x01, 0xFC, 0x0F, 0x80, 0x00, 0x78,
- 0x0F, 0x80, 0x00, 0x18, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char fence_down_cursor_data[32 * 4];
+extern unsigned char fence_down_cursor_mask[32 * 4];
#define FENCE_DOWN_CURSOR_HOTX 7
#define FENCE_DOWN_CURSOR_HOTY 31
-unsigned char flower_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x18, 0x44, 0x30,
- 0x00, 0x24, 0x54, 0x48, 0x00, 0x22, 0x54, 0x88, 0x00, 0x11, 0x55, 0x10, 0x00, 0x0A, 0xBA, 0xA0,
- 0x00, 0x05, 0xBB, 0x40, 0x00, 0x03, 0xC7, 0x80, 0x00, 0x7C, 0x92, 0x7C, 0x00, 0x83, 0x47, 0x82,
- 0x01, 0x1D, 0x89, 0xF1, 0x00, 0x83, 0x23, 0x82, 0x00, 0x7C, 0x8A, 0x7C, 0x00, 0x03, 0xE7, 0x80,
- 0x00, 0x05, 0xBB, 0x40, 0x0F, 0x8A, 0xBA, 0xA0, 0x08, 0x91, 0x55, 0x10, 0x08, 0x92, 0x54, 0x90,
- 0x08, 0x8C, 0x44, 0x6C, 0x08, 0x98, 0x44, 0x32, 0x08, 0xA6, 0x44, 0x42, 0x08, 0xA1, 0x28, 0x82,
- 0x08, 0xA0, 0xB9, 0x24, 0xF8, 0xFA, 0xBA, 0x44, 0x40, 0x11, 0x6A, 0x88, 0x20, 0x28, 0xED, 0x10,
- 0x10, 0x46, 0x4A, 0x60, 0x08, 0x81, 0x81, 0x80, 0x05, 0x00, 0x7E, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char flower_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x18, 0x7C, 0x30,
- 0x00, 0x3C, 0x7C, 0x78, 0x00, 0x3E, 0x7C, 0xF8, 0x00, 0x1F, 0x7D, 0xF0, 0x00, 0x0F, 0xBB, 0xE0,
- 0x00, 0x07, 0xBB, 0xC0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x7C, 0xFE, 0x7C, 0x00, 0xFF, 0xFF, 0xFE,
- 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7C, 0xFE, 0x7C, 0x00, 0x03, 0xFF, 0x80,
- 0x00, 0x07, 0xBB, 0xC0, 0x0F, 0x8F, 0xBB, 0xE0, 0x0F, 0x9F, 0x7D, 0xF0, 0x0F, 0x9E, 0x7C, 0xF0,
- 0x0F, 0x8C, 0x7C, 0x6C, 0x0F, 0x98, 0x7C, 0x3E, 0x0F, 0xBE, 0x7C, 0x7E, 0x0F, 0xBF, 0x38, 0xFE,
- 0x0F, 0xBF, 0xB9, 0xFC, 0xFF, 0xFF, 0xBB, 0xFC, 0x7F, 0xFF, 0xFB, 0xF8, 0x3F, 0xEF, 0xFF, 0xF0,
- 0x1F, 0xC7, 0xFF, 0xE0, 0x0F, 0x81, 0xFF, 0x80, 0x07, 0x00, 0x7E, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char flower_down_cursor_data[32 * 4];
+extern unsigned char flower_down_cursor_mask[32 * 4];
#define FLOWER_DOWN_CURSOR_HOTX 7
#define FLOWER_DOWN_CURSOR_HOTY 31
-unsigned char path_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x01, 0x85, 0x80, 0x00,
- 0x06, 0x48, 0x60, 0x00, 0x1A, 0x24, 0x58, 0x00, 0x62, 0x3A, 0x46, 0x00, 0x79, 0xC1, 0x45, 0x80,
- 0x1E, 0x27, 0xFC, 0x60, 0x07, 0x98, 0x82, 0x58, 0x01, 0xE0, 0x82, 0x46, 0x00, 0x79, 0x45, 0x79,
- 0x00, 0x1E, 0x28, 0x87, 0x0F, 0x87, 0x94, 0x9E, 0x08, 0x81, 0xE2, 0x78, 0x08, 0x80, 0x79, 0xE0,
- 0x08, 0x80, 0x1F, 0x80, 0x08, 0x80, 0x06, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00,
- 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char path_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00,
- 0x07, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0x80,
- 0x1F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF,
- 0x00, 0x1F, 0xFF, 0xFF, 0x0F, 0x87, 0xFF, 0xFE, 0x0F, 0x81, 0xFF, 0xF8, 0x0F, 0x80, 0x7F, 0xE0,
- 0x0F, 0x80, 0x1F, 0x80, 0x0F, 0x80, 0x06, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
- 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char path_down_cursor_data[32 * 4];
+extern unsigned char path_down_cursor_mask[32 * 4];
#define PATH_DOWN_CURSOR_HOTX 7
#define PATH_DOWN_CURSOR_HOTY 31
-unsigned char dig_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0xA4,
- 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, 0x8B, 0x00, 0x00, 0x02, 0x96, 0x00, 0x00, 0x02, 0x6C,
- 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x08, 0xF0, 0x00, 0x00, 0x11, 0x80, 0x00, 0x03, 0x2A, 0x00,
- 0x00, 0x04, 0xC6, 0x00, 0x00, 0x09, 0x8C, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x22, 0x30, 0x00,
- 0x00, 0x24, 0x78, 0x00, 0x0F, 0xC5, 0xE4, 0x00, 0x08, 0xC7, 0xC4, 0x00, 0x08, 0xC3, 0x28, 0x00,
- 0x08, 0xA0, 0x10, 0x00, 0x08, 0x90, 0x20, 0x00, 0x08, 0x88, 0xC0, 0x00, 0x08, 0x87, 0x00, 0x00,
- 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char dig_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xFC,
- 0x00, 0x00, 0x01, 0xDE, 0x00, 0x00, 0x03, 0x8F, 0x00, 0x00, 0x03, 0x9E, 0x00, 0x00, 0x03, 0xFC,
- 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0x3E, 0x00,
- 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00,
- 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xF8, 0x00,
- 0x0F, 0xBF, 0xF0, 0x00, 0x0F, 0x9F, 0xE0, 0x00, 0x0F, 0x8F, 0xC0, 0x00, 0x0F, 0x87, 0x00, 0x00,
- 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char dig_down_cursor_data[32 * 4];
+extern unsigned char dig_down_cursor_mask[32 * 4];
#define DIG_DOWN_CURSOR_HOTX 7
#define DIG_DOWN_CURSOR_HOTY 31
-unsigned char water_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x82, 0x00,
- 0x08, 0x20, 0x82, 0x00, 0x14, 0x51, 0x45, 0x00, 0x63, 0x8E, 0x38, 0xC0, 0x88, 0x20, 0x82, 0x20,
- 0x77, 0xDF, 0x7D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x08, 0x00, 0x20, 0x82, 0x08,
- 0x00, 0x51, 0x45, 0x14, 0x00, 0x8E, 0x38, 0xE2, 0x0F, 0xA0, 0x82, 0x09, 0x08, 0xDF, 0x7D, 0xF6,
- 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x82, 0x00, 0x08, 0x80, 0x82, 0x00, 0x08, 0x81, 0x45, 0x00,
- 0x08, 0x86, 0x38, 0xC0, 0xF8, 0xF8, 0x82, 0x20, 0x40, 0x17, 0x7D, 0xC0, 0x20, 0x20, 0x00, 0x00,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char water_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x82, 0x00,
- 0x08, 0x20, 0x82, 0x00, 0x1C, 0x71, 0xC7, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xE0,
- 0x77, 0xDF, 0x7D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x08, 0x00, 0x20, 0x82, 0x08,
- 0x00, 0x71, 0xC7, 0x1C, 0x00, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xDF, 0x7D, 0xF6,
- 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x82, 0x00, 0x0F, 0x80, 0x82, 0x00, 0x0F, 0x81, 0xC7, 0x00,
- 0x0F, 0x87, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xF7, 0x7D, 0xC0, 0x3F, 0xE0, 0x00, 0x00,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char water_down_cursor_data[32 * 4];
+extern unsigned char water_down_cursor_mask[32 * 4];
#define WATER_DOWN_CURSOR_HOTX 7
#define WATER_DOWN_CURSOR_HOTY 31
-unsigned char house_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xF0, 0x00, 0x00, 0x2A, 0x10,
- 0x00, 0x00, 0x45, 0xE0, 0x00, 0x00, 0x93, 0x20, 0x00, 0x01, 0x19, 0x20, 0x00, 0x02, 0x0C, 0x20,
- 0x00, 0x04, 0x7E, 0x20, 0x00, 0x08, 0x03, 0x20, 0x00, 0x10, 0xFF, 0x90, 0x00, 0x20, 0x00, 0xC8,
- 0x00, 0x47, 0xFF, 0xE4, 0x00, 0xF0, 0x00, 0x7E, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
- 0x00, 0x11, 0xEF, 0xD0, 0x00, 0x11, 0x28, 0x50, 0x0F, 0x91, 0x28, 0x50, 0x08, 0x91, 0x28, 0x50,
- 0x08, 0x91, 0x2F, 0xD0, 0x08, 0x91, 0x20, 0x10, 0x08, 0x91, 0x20, 0x10, 0x08, 0x9F, 0xFF, 0xF0,
- 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char house_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xF0, 0x00, 0x00, 0x3B, 0xF0,
- 0x00, 0x00, 0x7D, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0,
- 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF8,
- 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0,
- 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0x38, 0x70, 0x0F, 0x9F, 0x38, 0x70, 0x0F, 0x9F, 0x38, 0x70,
- 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0xFF, 0xF0,
- 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char house_down_cursor_data[32 * 4];
+extern unsigned char house_down_cursor_mask[32 * 4];
#define HOUSE_DOWN_CURSOR_HOTX 7
#define HOUSE_DOWN_CURSOR_HOTY 31
-unsigned char volcano_down_cursor_data[32 * 4] = {
- 0x00, 0x08, 0xA0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00,
- 0x00, 0x07, 0xB0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x17, 0x84, 0x00, 0x00, 0x30, 0x1E, 0x00,
- 0x00, 0x76, 0x72, 0x00, 0x00, 0x5A, 0x89, 0x00, 0x00, 0x81, 0x1C, 0x80, 0x03, 0x08, 0x0A, 0x70,
- 0x04, 0x18, 0x17, 0x88, 0x18, 0x30, 0x0A, 0xA6, 0x23, 0xC2, 0x07, 0x7F, 0x7C, 0x5F, 0x8F, 0xEC,
- 0x40, 0xF0, 0xD8, 0xC0, 0x00, 0x40, 0x20, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00,
- 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00,
- 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char volcano_down_cursor_mask[32 * 4] = {
- 0x00, 0x08, 0xA0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00,
- 0x00, 0x07, 0xB0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00,
- 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xF0,
- 0x07, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0x7C, 0x7F, 0xFF, 0xEC,
- 0x40, 0xF0, 0xF8, 0xC0, 0x00, 0x40, 0x20, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
- 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
- 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char volcano_down_cursor_data[32 * 4];
+extern unsigned char volcano_down_cursor_mask[32 * 4];
#define VOLCANO_DOWN_CURSOR_HOTX 7
#define VOLCANO_DOWN_CURSOR_HOTY 31
-unsigned char walk_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00,
- 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00,
- 0x00, 0x12, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x1C, 0x00,
- 0x02, 0x20, 0x22, 0x00, 0x02, 0x10, 0x21, 0x00, 0x01, 0x08, 0x10, 0x80, 0x00, 0x88, 0x08, 0x80,
- 0x00, 0x72, 0x07, 0x20, 0x00, 0x0D, 0x00, 0xD0, 0x0F, 0x89, 0x00, 0x90, 0x08, 0x86, 0x00, 0x60,
- 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x0E, 0x00, 0x08, 0x80, 0x11, 0x00, 0x08, 0x80, 0x10, 0x80,
- 0x08, 0x80, 0x08, 0x40, 0xF8, 0xF8, 0x04, 0x40, 0x40, 0x10, 0x03, 0x90, 0x20, 0x20, 0x00, 0x68,
- 0x10, 0x40, 0x00, 0x48, 0x08, 0x80, 0x00, 0x30, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char walk_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00,
- 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00,
- 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x1C, 0x00,
- 0x03, 0xE0, 0x3E, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, 0xF8, 0x0F, 0x80,
- 0x00, 0x72, 0x07, 0x20, 0x00, 0x0F, 0x00, 0xF0, 0x0F, 0x8F, 0x00, 0xF0, 0x0F, 0x86, 0x00, 0x60,
- 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x0E, 0x00, 0x0F, 0x80, 0x1F, 0x00, 0x0F, 0x80, 0x1F, 0x80,
- 0x0F, 0x80, 0x0F, 0xC0, 0xFF, 0xF8, 0x07, 0xC0, 0x7F, 0xF0, 0x03, 0x90, 0x3F, 0xE0, 0x00, 0x78,
- 0x1F, 0xC0, 0x00, 0x78, 0x0F, 0x80, 0x00, 0x30, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char walk_down_cursor_data[32 * 4];
+extern unsigned char walk_down_cursor_mask[32 * 4];
#define WALK_DOWN_CURSOR_HOTX 7
#define WALK_DOWN_CURSOR_HOTY 31
-unsigned char paint_down_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFA,
- 0x00, 0x00, 0x01, 0xF6, 0x00, 0x00, 0x03, 0xE4, 0x00, 0x03, 0x07, 0xCC, 0x00, 0x07, 0x84, 0x98,
- 0x00, 0x0F, 0xC8, 0x70, 0x00, 0x1B, 0xF8, 0x60, 0x00, 0x3D, 0xE0, 0xC0, 0x00, 0x7E, 0xE3, 0x00,
- 0x00, 0xFF, 0x62, 0x00, 0x00, 0xDF, 0xBE, 0x00, 0x00, 0x7F, 0xDF, 0x00, 0x00, 0x37, 0xEF, 0x80,
- 0x00, 0x1B, 0xF7, 0xC0, 0x07, 0xCF, 0xFB, 0xC0, 0x04, 0x46, 0x9D, 0xC0, 0x04, 0x43, 0x07, 0x80,
- 0x04, 0x41, 0x83, 0x00, 0x04, 0x40, 0xC6, 0x00, 0x04, 0x40, 0x6C, 0x00, 0x04, 0x40, 0x28, 0x00,
- 0x7C, 0x7C, 0x10, 0x00, 0x20, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00,
- 0x04, 0x40, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-unsigned char paint_down_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFE,
- 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x03, 0x07, 0xFC, 0x00, 0x07, 0x87, 0xF8,
- 0x00, 0x0F, 0xCF, 0xF0, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x00,
- 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80,
- 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xCF, 0xFF, 0xC0, 0x07, 0xC7, 0xFF, 0xC0, 0x07, 0xC3, 0xFF, 0x80,
- 0x07, 0xC1, 0xFF, 0x00, 0x07, 0xC0, 0xFE, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x07, 0xC0, 0x38, 0x00,
- 0x7F, 0xFC, 0x10, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00,
- 0x07, 0xC0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
+extern unsigned char paint_down_cursor_data[32 * 4];
+extern unsigned char paint_down_cursor_mask[32 * 4];
#define PAINT_DOWN_CURSOR_HOTX 8
#define PAINT_DOWN_CURSOR_HOTY 30
-unsigned char entrance_down_cursor_data[32 * 4] = {
- 0x20, 0x00, 0x00, 0x08, 0x50, 0x00, 0x00, 0x14, 0x88, 0x00, 0x00, 0x22, 0x50, 0x00, 0x00, 0x14,
- 0x7F, 0xFF, 0xFF, 0xFC, 0x58, 0x00, 0x00, 0x34, 0x54, 0x00, 0x00, 0x54, 0x54, 0x00, 0x00, 0x54,
- 0x54, 0x00, 0x00, 0x54, 0x5C, 0x00, 0x00, 0x34, 0x5F, 0xFF, 0xFF, 0xF4, 0x50, 0x00, 0x00, 0x14,
- 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14,
- 0x50, 0x00, 0x00, 0x14, 0x5F, 0x80, 0x00, 0x14, 0xD8, 0x80, 0x00, 0x14, 0x58, 0x80, 0x02, 0xB5,
- 0x58, 0x80, 0x00, 0x14, 0xD8, 0x80, 0x00, 0x14, 0x58, 0x80, 0x05, 0x74, 0x08, 0x80, 0x00, 0x00,
- 0x08, 0x80, 0x00, 0xD2, 0xF8, 0xF8, 0x0E, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00,
- 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
-unsigned char entrance_down_cursor_mask[32 * 4] = {
- 0x20, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x1C, 0xF8, 0x00, 0x00, 0x3E, 0x70, 0x00, 0x00, 0x1C,
- 0x7F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFC, 0x77, 0xFF, 0xFF, 0xDC, 0x77, 0xFF, 0xFF, 0xDC,
- 0x77, 0xFF, 0xFF, 0xDC, 0x7F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFC, 0x70, 0x00, 0x00, 0x1C,
- 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C,
- 0x70, 0x00, 0x00, 0x1C, 0x7F, 0x80, 0x00, 0x1C, 0xFF, 0x80, 0x00, 0x1C, 0x7F, 0x80, 0x02, 0xBD,
- 0x7F, 0x80, 0x00, 0x1C, 0xFF, 0x80, 0x00, 0x1C, 0x7F, 0x80, 0x05, 0x7C, 0x0F, 0x80, 0x00, 0x00,
- 0x0F, 0x80, 0x00, 0xD2, 0xFF, 0xF8, 0x0E, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00,
- 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-};
+extern unsigned char entrance_down_cursor_data[32 * 4];
+extern unsigned char entrance_down_cursor_mask[32 * 4];
#define ENTRANCE_DOWN_CURSOR_HOTX 7
#define ENTRANCE_DOWN_CURSOR_HOTY 31
-unsigned char hand_open_cursor_data[32 * 4] = {
- 0x00, 0x06, 0x10, 0x00, 0x00, 0x09, 0x38, 0x00, 0x00, 0x09, 0x24, 0x00, 0x03, 0x08, 0xA4, 0x00,
- 0x04, 0x88, 0xA4, 0xC0, 0x04, 0x48, 0x63, 0x20, 0x04, 0x24, 0x63, 0x10, 0x06, 0x24, 0x61, 0x90,
- 0x02, 0x14, 0x21, 0x90, 0x03, 0x0C, 0x21, 0x10, 0x01, 0x04, 0x21, 0x10, 0x01, 0x86, 0x01, 0x10,
- 0x00, 0x82, 0x00, 0x08, 0x00, 0xC0, 0x00, 0x08, 0x00, 0x60, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08,
- 0x00, 0x30, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08,
- 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10,
- 0x0F, 0xC0, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 0x08, 0x12, 0x00, 0x00, 0x08,
- 0x0F, 0x0F, 0x00, 0x04, 0x01, 0xF9, 0x80, 0x04, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x7F, 0xE0,
-};
-unsigned char hand_open_cursor_mask[32 * 4] = {
- 0x00, 0x06, 0x10, 0x00, 0x00, 0x0F, 0x38, 0x00, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0x0F, 0xBC, 0x00,
- 0x07, 0x8F, 0xBC, 0xC0, 0x07, 0xCF, 0xFF, 0xE0, 0x07, 0xE7, 0xFF, 0xF0, 0x07, 0xE7, 0xFF, 0xF0,
- 0x03, 0xF7, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0,
- 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8,
- 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8,
- 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF0,
- 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8,
- 0x0F, 0xFF, 0xFF, 0xFC, 0x01, 0xF9, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xE0,
-};
+extern unsigned char hand_open_cursor_data[32 * 4];
+extern unsigned char hand_open_cursor_mask[32 * 4];
#define HAND_OPEN_CURSOR_HOTX 0
#define HAND_OPEN_CURSOR_HOTY 0
-unsigned char hand_closed_cursor_data[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xE0, 0x00, 0x00, 0x43, 0x10, 0x00, 0x00, 0x41, 0x8C, 0x00,
- 0x00, 0x20, 0x87, 0x00, 0x0E, 0x20, 0x42, 0x80, 0x11, 0x98, 0x62, 0x40, 0x10, 0x6C, 0x61, 0x20,
- 0x18, 0x14, 0x21, 0x20, 0x0C, 0x0C, 0x21, 0x10, 0x06, 0x04, 0x21, 0x10, 0x03, 0x06, 0x01, 0x10,
- 0x00, 0x82, 0x00, 0x08, 0x00, 0xC0, 0x00, 0x08, 0x00, 0x60, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08,
- 0x00, 0x30, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08,
- 0x07, 0x10, 0x00, 0x10, 0x08, 0x90, 0x00, 0x10, 0x08, 0x60, 0x00, 0x10, 0x0A, 0x00, 0x00, 0x10,
- 0x0A, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x08, 0x03, 0x80, 0x00, 0x08,
- 0x00, 0x7F, 0x00, 0x04, 0x00, 0x01, 0x80, 0x04, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x7F, 0xE0,
-};
-unsigned char hand_closed_cursor_mask[32 * 4] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xE0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, 0xFC, 0x00,
- 0x00, 0x3F, 0xFF, 0x00, 0x0E, 0x3F, 0xFF, 0x80, 0x1F, 0x9F, 0xFF, 0xC0, 0x1F, 0xEF, 0xFF, 0xE0,
- 0x1F, 0xF7, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF0,
- 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8,
- 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8,
- 0x07, 0x1F, 0xFF, 0xF0, 0x0F, 0x9F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0,
- 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xF8,
- 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xE0,
-};
+extern unsigned char hand_closed_cursor_data[32 * 4];
+extern unsigned char hand_closed_cursor_mask[32 * 4];
#define HAND_CLOSED_CURSOR_HOTX 0
#define HAND_CLOSED_CURSOR_HOTY 0
diff --git a/src/drawing/drawing.c b/src/drawing/drawing.c
index ee625ec7fe..99b9988fd4 100644
--- a/src/drawing/drawing.c
+++ b/src/drawing/drawing.c
@@ -22,7 +22,7 @@
#include "../common.h"
#include "../localisation/localisation.h"
#include "../interface/window.h"
-#include "../platform/osinterface.h"
+#include "../platform/platform.h"
#include "../object.h"
#include "drawing.h"
@@ -147,7 +147,7 @@ void gfx_transpose_palette(int pal, unsigned char product)
source_pointer += 3;
dest_pointer += 4;
}
- osinterface_update_palette((char*)0x01424680, 10, 236);
+ platform_update_palette((char*)0x01424680, 10, 236);
}
/* rct2: 0x006837E3 */
@@ -173,7 +173,7 @@ void load_palette(){
source_pointer += 3;
dest_pointer += 4;
}
- osinterface_update_palette((char*)0x01424680, 10, 236);
+ platform_update_palette((char*)0x01424680, 10, 236);
}
/**
diff --git a/src/editor.c b/src/editor.c
index 493a655b18..63b6ecf030 100644
--- a/src/editor.c
+++ b/src/editor.c
@@ -31,7 +31,7 @@
#include "management/news_item.h"
#include "object.h"
#include "peep/staff.h"
-#include "platform/osinterface.h"
+#include "platform/platform.h"
#include "rct1.h"
#include "ride/ride.h"
#include "scenario.h"
@@ -107,7 +107,7 @@ static int show_convert_saved_game_to_scenario_dialog(char *resultPath)
format_string(filterName, STR_RCT2_SAVED_GAME, NULL);
pause_sounds();
- result = osinterface_open_common_file_dialog(1, title, filename, "*.SV6", filterName);
+ result = platform_open_common_file_dialog(1, title, filename, "*.SV6", filterName);
unpause_sounds();
if (result)
diff --git a/src/game.c b/src/game.c
index c25f8c264c..4919e4db44 100644
--- a/src/game.c
+++ b/src/game.c
@@ -37,7 +37,7 @@
#include "object.h"
#include "peep/peep.h"
#include "peep/staff.h"
-#include "platform/osinterface.h"
+#include "platform/platform.h"
#include "ride/ride.h"
#include "ride/ride_ratings.h"
#include "ride/vehicle.h"
@@ -97,7 +97,7 @@ void update_palette_effects()
RCT2_ADDRESS(0x01424680 + xoffset, uint8)[(i * 4) + 2] = -((0xFF - g1_element.offset[(i * 3) + 2]) / 2) - 1;
}
RCT2_GLOBAL(0x014241BC, uint32) = 2;
- osinterface_update_palette(RCT2_ADDRESS(0x01424680, uint8), 10, 236);
+ platform_update_palette(RCT2_ADDRESS(0x01424680, uint8), 10, 236);
RCT2_GLOBAL(0x014241BC, uint32) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_LIGHTNING_ACTIVE, uint8)++;
} else {
@@ -183,11 +183,11 @@ void update_palette_effects()
}
RCT2_GLOBAL(0x014241BC, uint32) = 2;
- osinterface_update_palette(RCT2_ADDRESS(0x01424680, uint8), 230, 16);
+ platform_update_palette(RCT2_ADDRESS(0x01424680, uint8), 230, 16);
RCT2_GLOBAL(0x014241BC, uint32) = 0;
if (RCT2_GLOBAL(RCT2_ADDRESS_LIGHTNING_ACTIVE, uint8) == 2) {
RCT2_GLOBAL(0x014241BC, uint32) = 2;
- osinterface_update_palette(RCT2_ADDRESS(0x01424680, uint8), 10, 236);
+ platform_update_palette(RCT2_ADDRESS(0x01424680, uint8), 10, 236);
RCT2_GLOBAL(0x014241BC, uint32) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_LIGHTNING_ACTIVE, uint8) = 0;
}
@@ -512,7 +512,7 @@ static int open_landscape_file_dialog()
strcpy((char*)0x0141EF68, (char*)RCT2_ADDRESS_LANDSCAPES_PATH);
format_string((char*)0x0141EE68, STR_RCT2_LANDSCAPE_FILE, 0);
pause_sounds();
- result = osinterface_open_common_file_dialog(1, (char*)RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, (char*)0x0141EF68, "*.SV6;*.SV4;*.SC6", (char*)0x0141EE68);
+ result = platform_open_common_file_dialog(1, (char*)RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, (char*)0x0141EF68, "*.SV6;*.SV4;*.SC6", (char*)0x0141EE68);
unpause_sounds();
// window_proc
return result;
@@ -529,7 +529,7 @@ static int open_load_game_dialog()
strcpy((char*)0x0141EF68, (char*)RCT2_ADDRESS_SAVED_GAMES_PATH);
format_string((char*)0x0141EE68, STR_RCT2_SAVED_GAME, 0);
pause_sounds();
- result = osinterface_open_common_file_dialog(1, (char*)RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, (char*)0x0141EF68, "*.SV6", (char*)0x0141EE68);
+ result = platform_open_common_file_dialog(1, (char*)RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, (char*)0x0141EF68, "*.SV6", (char*)0x0141EE68);
unpause_sounds();
// window_proc
return result;
@@ -748,7 +748,7 @@ static int show_save_game_dialog(char *resultPath)
format_string(filterName, STR_RCT2_SAVED_GAME, NULL);
pause_sounds();
- result = osinterface_open_common_file_dialog(0, title, filename, "*.SV6", filterName);
+ result = platform_open_common_file_dialog(0, title, filename, "*.SV6", filterName);
unpause_sounds();
if (result)
diff --git a/src/input.c b/src/input.c
index 646d960714..e72a5fb393 100644
--- a/src/input.c
+++ b/src/input.c
@@ -22,6 +22,7 @@
#include "addresses.h"
#include "audio/audio.h"
#include "config.h"
+#include "cursors.h"
#include "game.h"
#include "input.h"
#include "interface/keyboard_shortcut.h"
@@ -29,7 +30,7 @@
#include "interface/widget.h"
#include "interface/window.h"
#include "localisation/localisation.h"
-#include "platform/osinterface.h"
+#include "platform/platform.h"
#include "ride/ride_data.h"
#include "scenario.h"
#include "tutorial.h"
@@ -1237,7 +1238,7 @@ void sub_6ED990(char cursor_id){
}
RCT2_GLOBAL(RCT2_ADDRESS_CURENT_CURSOR, uint8) = cursor_id;
RCT2_GLOBAL(0x14241BC, uint32) = 2;
- osinterface_set_cursor(cursor_id);
+ platform_set_cursor(cursor_id);
RCT2_GLOBAL(0x14241BC, uint32) = 0;
}
diff --git a/src/interface/screenshot.c b/src/interface/screenshot.c
index cef28b0290..b44a3cc0f9 100644
--- a/src/interface/screenshot.c
+++ b/src/interface/screenshot.c
@@ -25,7 +25,6 @@
#include "../drawing/drawing.h"
#include "../game.h"
#include "../localisation/localisation.h"
-#include "../platform/osinterface.h"
#include "../platform/platform.h"
#include "../windows/error.h"
#include "screenshot.h"
@@ -71,7 +70,7 @@ void screenshot_check()
static int screenshot_get_next_path(char *path, int format)
{
- char *screenshotPath = osinterface_get_orct2_homesubfolder("screenshot");
+ char *screenshotPath = platform_get_orct2_homesubfolder("screenshot");
if (!platform_ensure_directory_exists(screenshotPath)) {
free(screenshotPath);
@@ -84,7 +83,7 @@ static int screenshot_get_next_path(char *path, int format)
RCT2_GLOBAL(0x013CE952, uint16) = i;
// Glue together path and filename
- sprintf(path, "%s%cSCR%d%s", screenshotPath, osinterface_get_path_separator(), i, _screenshot_format_extension[format]);
+ sprintf(path, "%s%cSCR%d%s", screenshotPath, platform_get_path_separator(), i, _screenshot_format_extension[format]);
if (!platform_file_exists(path)) {
return i;
diff --git a/src/interface/window.c b/src/interface/window.c
index 19f1b37688..69b9ca1b44 100644
--- a/src/interface/window.c
+++ b/src/interface/window.c
@@ -23,7 +23,7 @@
#include "../game.h"
#include "../drawing/drawing.h"
#include "../input.h"
-#include "../platform/osinterface.h"
+#include "../platform/platform.h"
#include "../world/map.h"
#include "../world/sprite.h"
#include "widget.h"
diff --git a/src/intro.c b/src/intro.c
index 2ce2c8f7ce..e5d9e09bef 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -23,7 +23,7 @@
#include "drawing/drawing.h"
#include "intro.h"
#include "localisation/localisation.h"
-#include "platform/osinterface.h"
+#include "platform/platform.h"
#include "sprites.h"
static void screen_intro_process_mouse_input();
diff --git a/src/object.c b/src/object.c
index 1c35c22076..3637bda5ed 100644
--- a/src/object.c
+++ b/src/object.c
@@ -21,7 +21,6 @@
#include "addresses.h"
#include "localisation/localisation.h"
#include "object.h"
-#include "platform/osinterface.h"
#include "platform/platform.h"
#include "util/sawyercoding.h"
diff --git a/src/object_list.c b/src/object_list.c
index 5015e6cc05..abb7ef2278 100644
--- a/src/object_list.c
+++ b/src/object_list.c
@@ -22,7 +22,6 @@
#include "localisation/localisation.h"
#include "object.h"
#include "platform/platform.h"
-#include "platform/osinterface.h"
#include "ride/track.h"
#include "util/sawyercoding.h"
@@ -90,8 +89,8 @@ static uint32 install_object_entry(rct_object_entry* entry, rct_object_entry* in
static void get_plugin_path(char *path)
{
- char *homePath = osinterface_get_orct2_homefolder();
- sprintf(path, "%s%c%s", homePath, osinterface_get_path_separator(), "plugin.dat");
+ char *homePath = platform_get_orct2_homefolder();
+ sprintf(path, "%s%c%s", homePath, platform_get_path_separator(), "plugin.dat");
free(homePath);
}
diff --git a/src/openrct2.c b/src/openrct2.c
index 6c5d4f7bbc..98d0c49375 100644
--- a/src/openrct2.c
+++ b/src/openrct2.c
@@ -27,7 +27,6 @@
#include "localisation/localisation.h"
#include "openrct2.h"
#include "platform/platform.h"
-#include "platform/osinterface.h"
#include "util/sawyercoding.h"
#include "world/mapgen.h"
@@ -88,7 +87,7 @@ void openrct2_launch()
log_verbose("begin openrct2 loop");
openrct2_loop();
- osinterface_free();
+ platform_free();
// HACK Some threads are still running which causes the game to not terminate. Investigation required!
exit(gExitCode);
@@ -113,9 +112,9 @@ static void openrct2_loop()
lastTick = currentTick;
- osinterface_process_messages();
+ platform_process_messages();
rct2_update();
- osinterface_draw();
+ platform_draw();
} while (!_finished);
}
diff --git a/src/platform/osinterface.c b/src/platform/osinterface.c
deleted file mode 100644
index 36726dab1f..0000000000
--- a/src/platform/osinterface.c
+++ /dev/null
@@ -1,902 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2014 Ted John, Alexander Overvoorde
- * OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
- *
- * This file is part of OpenRCT2.
- *
- * OpenRCT2 is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *****************************************************************************/
-
-#include
-#include
-#include
-#include
-#include
-
-#include "../addresses.h"
-#include "../config.h"
-#include "../cursors.h"
-#include "../drawing/drawing.h"
-#include "../input.h"
-#include "../interface/keyboard_shortcut.h"
-#include "../interface/screenshot.h"
-#include "../interface/window.h"
-#include "osinterface.h"
-
-typedef void(*update_palette_func)(char*, int, int);
-
-openrct2_cursor gCursorState;
-const unsigned char *gKeysState;
-unsigned char *gKeysPressed;
-unsigned int gLastKeyPressed;
-char* gTextInput;
-int gTextInputLength;
-int gTextInputMaxLength;
-int gTextInputCursorPosition = 0;
-
-static void osinterface_create_window();
-static void osinterface_close_window();
-static void osinterface_resize(int width, int height);
-
-static SDL_Surface *_surface;
-static SDL_Palette *_palette;
-
-static int _screenBufferSize;
-static void *_screenBuffer;
-
-static SDL_Cursor* _cursors[NO_CURSORS];
-
-static const int _fullscreen_modes[] = { 0, SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP };
-
-static unsigned int _lastGestureTimestamp;
-static float _gestureRadius;
-
-void osinterface_init()
-{
- osinterface_create_window();
-
- gKeysPressed = malloc(sizeof(unsigned char) * 256);
- memset(gKeysPressed, 0, sizeof(unsigned char) * 256);
-
- // RCT2_CALLPROC(0x00404584); // dinput_init()
-}
-
-int osinterface_scancode_to_rct_keycode(int sdl_key){
- char keycode = (char)SDL_GetKeyFromScancode((SDL_Scancode)sdl_key);
-
- // Until we reshufle the text files to use the new positions
- // this will suffice to move the majority to the correct positions.
- // Note any special buttons PgUp PgDwn are mapped wrong.
- if (keycode >= 'a' && keycode <= 'z')keycode = toupper(keycode);
-
- return keycode;
-}
-
-void osinterface_start_text_input(char* buffer, int max_length){
- SDL_StartTextInput();
- gTextInputMaxLength = max_length - 1;
- gTextInput = buffer;
- gTextInputCursorPosition = strnlen(gTextInput, max_length);
- gTextInputLength = gTextInputCursorPosition;
-}
-
-void osinterface_stop_text_input(){
- SDL_StopTextInput();
- gTextInput = NULL;
-}
-
-/**
- * This is not quite the same as the below function as we don't want to
- * derfererence the cursor before the function.
- * rct2: 0x0407956
- */
-void osinterface_set_cursor(char cursor){
- //HCURSOR hCurs = RCT2_ADDRESS(RCT2_ADDRESS_HCURSOR_START, HCURSOR)[cursor];
- //SetCursor((HCURSOR)hCurs);
- SDL_SetCursor(_cursors[cursor]);
-}
-/**
- *rct2: 0x0068352C
- */
-static void osinterface_load_cursors(){
-
- RCT2_GLOBAL(0x14241BC, uint32) = 2;
- HINSTANCE hInst = RCT2_GLOBAL(RCT2_ADDRESS_HINSTANCE, HINSTANCE);
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_ARROW, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x74));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_BLANK, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA1));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_UP_ARROW, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x6D));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_UP_DOWN_ARROW, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x6E));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HAND_POINT, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x70));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_ZZZ, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x78));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_DIAGONAL_ARROWS, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x77));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_PICKER, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x7C));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_TREE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x83));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_FOUNTAIN_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x7F));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_STATUE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x80));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_BENCH_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x81));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_CROSS_HAIR, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x82));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_BIN_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x84));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_LAMPPOST_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x85));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_FENCE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8A));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_FLOWER_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x89));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_PATH_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8B));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_DIG_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8D));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_WATER_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8E));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HOUSE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8F));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_VOLCANO_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x90));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_WALK_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x91));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_PAINT_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x9E));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_ENTRANCE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x9F));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HAND_OPEN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA6));
- RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HAND_CLOSED, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA5));
-
- _cursors[0] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
- _cursors[1] = SDL_CreateCursor(blank_cursor_data, blank_cursor_mask, 32, 32, BLANK_CURSOR_HOTX, BLANK_CURSOR_HOTY);
- _cursors[2] = SDL_CreateCursor(up_arrow_cursor_data, up_arrow_cursor_mask, 32, 32, UP_ARROW_CURSOR_HOTX, UP_ARROW_CURSOR_HOTY);
- _cursors[3] = SDL_CreateCursor(up_down_arrow_cursor_data, up_down_arrow_cursor_mask, 32, 32, UP_DOWN_ARROW_CURSOR_HOTX, UP_DOWN_ARROW_CURSOR_HOTY);
- _cursors[4] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
- _cursors[5] = SDL_CreateCursor(zzz_cursor_data, zzz_cursor_mask, 32, 32, ZZZ_CURSOR_HOTX, ZZZ_CURSOR_HOTY);
- _cursors[6] = SDL_CreateCursor(diagonal_arrow_cursor_data, diagonal_arrow_cursor_mask, 32, 32, DIAGONAL_ARROW_CURSOR_HOTX, DIAGONAL_ARROW_CURSOR_HOTY);
- _cursors[7] = SDL_CreateCursor(picker_cursor_data, picker_cursor_mask, 32, 32, PICKER_CURSOR_HOTX, PICKER_CURSOR_HOTY);
- _cursors[8] = SDL_CreateCursor(tree_down_cursor_data, tree_down_cursor_mask, 32, 32, TREE_DOWN_CURSOR_HOTX, TREE_DOWN_CURSOR_HOTY);
- _cursors[9] = SDL_CreateCursor(fountain_down_cursor_data, fountain_down_cursor_mask, 32, 32, FOUNTAIN_DOWN_CURSOR_HOTX, FOUNTAIN_DOWN_CURSOR_HOTY);
- _cursors[10] = SDL_CreateCursor(statue_down_cursor_data, statue_down_cursor_mask, 32, 32, STATUE_DOWN_CURSOR_HOTX, STATUE_DOWN_CURSOR_HOTY);
- _cursors[11] = SDL_CreateCursor(bench_down_cursor_data, bench_down_cursor_mask, 32, 32, BENCH_DOWN_CURSOR_HOTX, BENCH_DOWN_CURSOR_HOTY);
- _cursors[12] = SDL_CreateCursor(cross_hair_cursor_data, cross_hair_cursor_mask, 32, 32, CROSS_HAIR_CURSOR_HOTX, CROSS_HAIR_CURSOR_HOTY);
- _cursors[13] = SDL_CreateCursor(bin_down_cursor_data, bin_down_cursor_mask, 32, 32, BIN_DOWN_CURSOR_HOTX, BIN_DOWN_CURSOR_HOTY);
- _cursors[14] = SDL_CreateCursor(lamppost_down_cursor_data, lamppost_down_cursor_mask, 32, 32, LAMPPOST_DOWN_CURSOR_HOTX, LAMPPOST_DOWN_CURSOR_HOTY);
- _cursors[15] = SDL_CreateCursor(fence_down_cursor_data, fence_down_cursor_mask, 32, 32, FENCE_DOWN_CURSOR_HOTX, FENCE_DOWN_CURSOR_HOTY);
- _cursors[16] = SDL_CreateCursor(flower_down_cursor_data, flower_down_cursor_mask, 32, 32, FLOWER_DOWN_CURSOR_HOTX, FLOWER_DOWN_CURSOR_HOTY);
- _cursors[17] = SDL_CreateCursor(path_down_cursor_data, path_down_cursor_mask, 32, 32, PATH_DOWN_CURSOR_HOTX, PATH_DOWN_CURSOR_HOTY);
- _cursors[18] = SDL_CreateCursor(dig_down_cursor_data, dig_down_cursor_mask, 32, 32, DIG_DOWN_CURSOR_HOTX, DIG_DOWN_CURSOR_HOTY);
- _cursors[19] = SDL_CreateCursor(water_down_cursor_data, water_down_cursor_mask, 32, 32, WATER_DOWN_CURSOR_HOTX, WATER_DOWN_CURSOR_HOTY);
- _cursors[20] = SDL_CreateCursor(house_down_cursor_data, house_down_cursor_mask, 32, 32, HOUSE_DOWN_CURSOR_HOTX, HOUSE_DOWN_CURSOR_HOTY);
- _cursors[21] = SDL_CreateCursor(volcano_down_cursor_data, volcano_down_cursor_mask, 32, 32, VOLCANO_DOWN_CURSOR_HOTX, VOLCANO_DOWN_CURSOR_HOTY);
- _cursors[22] = SDL_CreateCursor(walk_down_cursor_data, walk_down_cursor_mask, 32, 32, WALK_DOWN_CURSOR_HOTX, WALK_DOWN_CURSOR_HOTY);
- _cursors[23] = SDL_CreateCursor(paint_down_cursor_data, paint_down_cursor_mask, 32, 32, PAINT_DOWN_CURSOR_HOTX, PAINT_DOWN_CURSOR_HOTY);
- _cursors[24] = SDL_CreateCursor(entrance_down_cursor_data, entrance_down_cursor_mask, 32, 32, ENTRANCE_DOWN_CURSOR_HOTX, ENTRANCE_DOWN_CURSOR_HOTY);
- _cursors[25] = SDL_CreateCursor(hand_open_cursor_data, hand_open_cursor_mask, 32, 32, HAND_OPEN_CURSOR_HOTX, HAND_OPEN_CURSOR_HOTY);
- _cursors[26] = SDL_CreateCursor(hand_closed_cursor_data, hand_closed_cursor_mask, 32, 32, HAND_CLOSED_CURSOR_HOTX, HAND_CLOSED_CURSOR_HOTY);
- osinterface_set_cursor(CURSOR_ARROW);
- RCT2_GLOBAL(0x14241BC, uint32) = 0;
-}
-
-static void osinterface_unload_cursors(){
- for (int i = 0; i < NO_CURSORS; ++i){
- if (_cursors[i] != NULL)SDL_FreeCursor(_cursors[i]);
- }
-}
-
-static void osinterface_create_window()
-{
- SDL_SysWMinfo wmInfo;
- HWND hWnd;
- int width, height;
-
- if (SDL_Init(SDL_INIT_VIDEO) < 0) {
- RCT2_ERROR("SDL_Init %s", SDL_GetError());
- exit(-1);
- }
-
- osinterface_load_cursors();
- RCT2_CALLPROC_EBPSAFE(0x0068371D);
-
- // Get window size
- width = gGeneral_config.window_width;
- height = gGeneral_config.window_height;
- if (width == -1) width = 640;
- if (height == -1) height = 480;
-
- RCT2_GLOBAL(0x009E2D8C, sint32) = 0;
-
- // Create window in window first rather than fullscreen so we have the display the window is on first
- gWindow = SDL_CreateWindow(
- "OpenRCT2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_RESIZABLE
- );
- if (!gWindow) {
- RCT2_ERROR("SDL_CreateWindow failed %s", SDL_GetError());
- exit(-1);
- }
-
- SDL_VERSION(&wmInfo.version);
-
- // Get the HWND context
- if (SDL_GetWindowWMInfo(gWindow, &wmInfo) != SDL_TRUE) {
- RCT2_ERROR("SDL_GetWindowWMInfo failed %s", SDL_GetError());
- exit(-1);
- }
- hWnd = wmInfo.info.win.window;
- RCT2_GLOBAL(0x009E2D70, HWND) = hWnd;
-
- // Set the update palette function pointer
- RCT2_GLOBAL(0x009E2BE4, update_palette_func) = osinterface_update_palette;
-
- // Initialise the surface, palette and draw buffer
- osinterface_resize(width, height);
-
- platform_update_fullscreen_resolutions();
- osinterface_set_fullscreen_mode(gGeneral_config.fullscreen_mode);
-}
-
-void osinterface_set_fullscreen_mode(int mode)
-{
- int width, height;
-
- mode = _fullscreen_modes[mode];
-
- // HACK Changing window size when in fullscreen usually has no effect
- if (mode == SDL_WINDOW_FULLSCREEN)
- SDL_SetWindowFullscreen(gWindow, 0);
-
- // Set window size
- if (mode == SDL_WINDOW_FULLSCREEN) {
- platform_update_fullscreen_resolutions();
- platform_get_closest_resolution(gGeneral_config.fullscreen_width, gGeneral_config.fullscreen_height, &width, &height);
- SDL_SetWindowSize(gWindow, width, height);
- } else if (mode == 0) {
- SDL_SetWindowSize(gWindow, gGeneral_config.window_width, gGeneral_config.window_height);
- }
-
- if (SDL_SetWindowFullscreen(gWindow, mode)) {
- RCT2_ERROR("SDL_SetWindowFullscreen %s", SDL_GetError());
- exit(1);
-
- // TODO try another display mode rather than just exiting the game
- }
-}
-
-static void osinterface_resize(int width, int height)
-{
- rct_drawpixelinfo *screenDPI;
- int newScreenBufferSize;
- void *newScreenBuffer;
-
- if (_surface != NULL)
- SDL_FreeSurface(_surface);
- if (_palette != NULL)
- SDL_FreePalette(_palette);
-
- _surface = SDL_CreateRGBSurface(0, width, height, 8, 0, 0, 0, 0);
- _palette = SDL_AllocPalette(256);
-
- if (!_surface || !_palette) {
- RCT2_ERROR("%p || %p == NULL %s", _surface, _palette, SDL_GetError());
- exit(-1);
- }
-
- if (SDL_SetSurfacePalette(_surface, _palette)) {
- RCT2_ERROR("SDL_SetSurfacePalette failed %s", SDL_GetError());
- exit(-1);
- }
-
- newScreenBufferSize = _surface->pitch * _surface->h;
- newScreenBuffer = malloc(newScreenBufferSize);
- if (_screenBuffer == NULL) {
- memset(newScreenBuffer, 0, newScreenBufferSize);
- } else {
- memcpy(newScreenBuffer, _screenBuffer, min(_screenBufferSize, newScreenBufferSize));
- if (newScreenBufferSize - _screenBufferSize > 0)
- memset((uint8*)newScreenBuffer + _screenBufferSize, 0, newScreenBufferSize - _screenBufferSize);
- free(_screenBuffer);
- }
-
- _screenBuffer = newScreenBuffer;
- _screenBufferSize = newScreenBufferSize;
-
- RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16) = width;
- RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, sint16) = height;
-
- screenDPI = RCT2_ADDRESS(RCT2_ADDRESS_SCREEN_DPI, rct_drawpixelinfo);
- screenDPI->bits = _screenBuffer;
- screenDPI->x = 0;
- screenDPI->y = 0;
- screenDPI->width = width;
- screenDPI->height = height;
- screenDPI->pitch = _surface->pitch - _surface->w;
-
- RCT2_GLOBAL(0x009ABDF0, uint8) = 6;
- RCT2_GLOBAL(0x009ABDF1, uint8) = 3;
- RCT2_GLOBAL(0x009ABDF2, uint8) = 1;
- RCT2_GLOBAL(RCT2_ADDRESS_DIRTY_BLOCK_WIDTH, sint16) = 64;
- RCT2_GLOBAL(RCT2_ADDRESS_DIRTY_BLOCK_HEIGHT, sint16) = 8;
- RCT2_GLOBAL(RCT2_ADDRESS_DIRTY_BLOCK_COLUMNS, sint32) = (width >> 6) + 1;
- RCT2_GLOBAL(RCT2_ADDRESS_DIRTY_BLOCK_ROWS, sint32) = (height >> 3) + 1;
-
- window_resize_gui(width, height);
- window_relocate_windows(width, height);
-
- gfx_invalidate_screen();
-}
-
-void osinterface_update_palette(char* colours, int start_index, int num_colours)
-{
- SDL_Color base[256];
- SDL_Surface *surface;
- int i;
-
- surface = SDL_GetWindowSurface(gWindow);
- if (!surface) {
- RCT2_ERROR("SDL_GetWindowSurface failed %s", SDL_GetError());
- exit(1);
- }
-
- for (i = 0; i < 256; i++) {
- base[i].r = colours[2];
- base[i].g = colours[1];
- base[i].b = colours[0];
- base[i].a = 0;
- colours += 4;
- }
-
- if (SDL_SetPaletteColors(_palette, base, 0, 256)) {
- RCT2_ERROR("SDL_SetPaletteColors failed %s", SDL_GetError());
- exit(1);
- }
-}
-
-void osinterface_draw()
-{
- // Lock the surface before setting its pixels
- if (SDL_MUSTLOCK(_surface))
- if (SDL_LockSurface(_surface) < 0) {
- RCT2_ERROR("locking failed %s", SDL_GetError());
- return;
- }
-
- // Copy pixels from the virtual screen buffer to the surface
- memcpy(_surface->pixels, _screenBuffer, _surface->pitch * _surface->h);
-
- // Unlock the surface
- if (SDL_MUSTLOCK(_surface))
- SDL_UnlockSurface(_surface);
-
- // Copy the surface to the window
- if (SDL_BlitSurface(_surface, NULL, SDL_GetWindowSurface(gWindow), NULL)) {
- RCT2_ERROR("SDL_BlitSurface %s", SDL_GetError());
- exit(1);
- }
- if (SDL_UpdateWindowSurface(gWindow)) {
- RCT2_ERROR("SDL_UpdateWindowSurface %s", SDL_GetError());
- exit(1);
- }
-}
-
-void osinterface_process_messages()
-{
- SDL_Event e;
-
- gLastKeyPressed = 0;
- // gCursorState.wheel = 0;
- gCursorState.left &= ~CURSOR_CHANGED;
- gCursorState.middle &= ~CURSOR_CHANGED;
- gCursorState.right &= ~CURSOR_CHANGED;
- gCursorState.old = 0;
-
- while (SDL_PollEvent(&e)) {
- switch (e.type) {
- case SDL_QUIT:
-// rct2_finish();
- rct2_quit();
- break;
- case SDL_WINDOWEVENT:
- if (e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
- osinterface_resize(e.window.data1, e.window.data2);
- break;
- case SDL_MOUSEMOTION:
- RCT2_GLOBAL(0x0142406C, int) = e.motion.x;
- RCT2_GLOBAL(0x01424070, int) = e.motion.y;
-
- gCursorState.x = e.motion.x;
- gCursorState.y = e.motion.y;
- break;
- case SDL_MOUSEWHEEL:
- gCursorState.wheel += e.wheel.y * 128;
- break;
- case SDL_MOUSEBUTTONDOWN:
- RCT2_GLOBAL(0x01424318, int) = e.button.x;
- RCT2_GLOBAL(0x0142431C, int) = e.button.y;
- switch (e.button.button) {
- case SDL_BUTTON_LEFT:
- store_mouse_input(1);
- gCursorState.left = CURSOR_PRESSED;
- gCursorState.old = 1;
- break;
- case SDL_BUTTON_MIDDLE:
- gCursorState.middle = CURSOR_PRESSED;
- break;
- case SDL_BUTTON_RIGHT:
- store_mouse_input(3);
- gCursorState.right = CURSOR_PRESSED;
- gCursorState.old = 2;
- break;
- }
- break;
- case SDL_MOUSEBUTTONUP:
- RCT2_GLOBAL(0x01424318, int) = e.button.x;
- RCT2_GLOBAL(0x0142431C, int) = e.button.y;
- switch (e.button.button) {
- case SDL_BUTTON_LEFT:
- store_mouse_input(2);
- gCursorState.left = CURSOR_RELEASED;
- gCursorState.old = 3;
- break;
- case SDL_BUTTON_MIDDLE:
- gCursorState.middle = CURSOR_RELEASED;
- break;
- case SDL_BUTTON_RIGHT:
- store_mouse_input(4);
- gCursorState.right = CURSOR_RELEASED;
- gCursorState.old = 4;
- break;
- }
- break;
- case SDL_KEYDOWN:
- if (e.key.keysym.sym == SDLK_KP_ENTER){
- // Map Keypad enter to regular enter.
- e.key.keysym.scancode = SDL_SCANCODE_RETURN;
- }
-
- gLastKeyPressed = e.key.keysym.sym;
- gKeysPressed[e.key.keysym.scancode] = 1;
- if (e.key.keysym.sym == SDLK_RETURN && e.key.keysym.mod & KMOD_ALT) {
- int targetMode = gGeneral_config.fullscreen_mode == 0 ? 2 : 0;
- osinterface_set_fullscreen_mode(targetMode);
- gGeneral_config.fullscreen_mode = targetMode;
- config_save();
- break;
- }
-
- // Text input
-
- // If backspace and we have input text with a cursor position none zero
- if (e.key.keysym.sym == SDLK_BACKSPACE && gTextInputLength > 0 && gTextInput && gTextInputCursorPosition){
- // When at max length don't shift the data left
- // as it would buffer overflow.
- if (gTextInputCursorPosition != gTextInputMaxLength)
- memmove(gTextInput + gTextInputCursorPosition - 1, gTextInput + gTextInputCursorPosition, gTextInputMaxLength - gTextInputCursorPosition - 1);
- gTextInput[gTextInputLength - 1] = '\0';
- gTextInputCursorPosition--;
- gTextInputLength--;
- }
- if (e.key.keysym.sym == SDLK_END){
- gTextInputCursorPosition = gTextInputLength;
- }
- if (e.key.keysym.sym == SDLK_HOME){
- gTextInputCursorPosition = 0;
- }
- if (e.key.keysym.sym == SDLK_DELETE && gTextInputLength > 0 && gTextInput && gTextInputCursorPosition != gTextInputLength){
- memmove(gTextInput + gTextInputCursorPosition, gTextInput + gTextInputCursorPosition + 1, gTextInputMaxLength - gTextInputCursorPosition - 1);
- gTextInput[gTextInputMaxLength - 1] = '\0';
- gTextInputLength--;
- }
- if (e.key.keysym.sym == SDLK_LEFT && gTextInput){
- if (gTextInputCursorPosition) gTextInputCursorPosition--;
- }
- else if (e.key.keysym.sym == SDLK_RIGHT && gTextInput){
- if (gTextInputCursorPosition < gTextInputLength) gTextInputCursorPosition++;
- }
- break;
- case SDL_MULTIGESTURE:
- if (e.mgesture.numFingers == 2) {
- if (e.mgesture.timestamp > _lastGestureTimestamp + 1000)
- _gestureRadius = 0;
- _lastGestureTimestamp = e.mgesture.timestamp;
- _gestureRadius += e.mgesture.dDist;
-
- // Zoom gesture
- const int tolerance = 128;
- int gesturePixels = (int)(_gestureRadius * RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16));
- if (gesturePixels > tolerance) {
- _gestureRadius = 0;
- keyboard_shortcut_handle_command(SHORTCUT_ZOOM_VIEW_IN);
- } else if (gesturePixels < -tolerance) {
- _gestureRadius = 0;
- keyboard_shortcut_handle_command(SHORTCUT_ZOOM_VIEW_OUT);
- }
- }
- break;
-
- case SDL_TEXTINPUT:
- if (gTextInputLength < gTextInputMaxLength && gTextInput){
- // Convert the utf-8 code into rct ascii
- char new_char;
- if (!(e.text.text[0] & 0x80))
- new_char = *e.text.text;
- else if (!(e.text.text[0] & 0x20))
- new_char = ((e.text.text[0] & 0x1F) << 6) | (e.text.text[1] & 0x3F);
-
- // If inserting in center of string make space for new letter
- if (gTextInputLength > gTextInputCursorPosition){
- memmove(gTextInput + gTextInputCursorPosition + 1, gTextInput + gTextInputCursorPosition, gTextInputMaxLength - gTextInputCursorPosition - 1);
- gTextInput[gTextInputCursorPosition] = new_char;
- gTextInputLength++;
- }
- else gTextInput[gTextInputLength++] = new_char;
-
- gTextInputCursorPosition++;
- }
- break;
- default:
- break;
- }
- }
-
- gCursorState.any = gCursorState.left | gCursorState.middle | gCursorState.right;
-
- // Updates the state of the keys
- int numKeys = 256;
- gKeysState = SDL_GetKeyboardState(&numKeys);
-}
-
-static void osinterface_close_window()
-{
- if (gWindow != NULL)
- SDL_DestroyWindow(gWindow);
- if (_surface != NULL)
- SDL_FreeSurface(_surface);
- if (_palette != NULL)
- SDL_FreePalette(_palette);
- osinterface_unload_cursors();
-}
-
-void osinterface_free()
-{
- free(gKeysPressed);
-
- osinterface_close_window();
- SDL_Quit();
-}
-
-/**
- *
- * rct2: 0x00407D80
- */
-int osinterface_get_cursor_pos(int* x, int* y)
-{
- POINT point;
- GetCursorPos(&point);
- *x = point.x;
- *y = point.y;
-}
-
-/**
- *
- * rct2: 0x00407E15
- */
-int osinterface_print_window_message(UINT msg, WPARAM wparam, LPARAM lparam)
-{
- const char* msgname = "NULL";
- // get the string representation of the msg id, from 190 different values in 0x009A61D8 - 0x009A8873
- // not going to bother reading those since this function is going to be unused and taken out anyways
- char temp[1024];
- sprintf(temp, "Message id = %s (%i), wParam = 0x%x, lParam = 0x%x\n", msgname, msg, wparam, lparam);
- OutputDebugStringA(temp);
- return 1;
-}
-
-/**
- *
- * rct2: 0x00407E6E
- */
-int osinterface_progressbar_create(char* title, int a2)
-{
- DWORD style = WS_VISIBLE | WS_BORDER | WS_DLGFRAME;
- if (a2) {
- style = WS_VISIBLE | WS_BORDER | WS_DLGFRAME | PBS_SMOOTH;
- }
- int width = 340;
- int height = GetSystemMetrics(SM_CYCAPTION) + 24;
- HWND hwnd = CreateWindowExA(WS_EX_TOPMOST | WS_EX_DLGMODALFRAME, "msctls_progress32", title, style, (RCT2_GLOBAL(0x01423C08, sint32) - width) / 2, (RCT2_GLOBAL(0x01423C0C, sint32) - height) / 2, width, height, 0, 0, RCT2_GLOBAL(RCT2_ADDRESS_HINSTANCE, HINSTANCE), 0);
- RCT2_GLOBAL(RCT2_ADDRESS_PROGRESSBAR_HWND, HWND) = hwnd;
- if (hwnd) {
- RCT2_GLOBAL(0x009E2DFC, uint32) = 1;
- if (RCT2_GLOBAL(RCT2_ADDRESS_HFONT, HFONT)) {
- SendMessageA(hwnd, WM_SETFONT, (WPARAM)RCT2_GLOBAL(RCT2_ADDRESS_HFONT, HFONT), 1);
- }
- SetWindowTextA(hwnd, title);
- osinterface_progressbar_setmax(0xFF);
- osinterface_progressbar_setpos(0);
- return 1;
- } else {
- return 0;
- }
-}
-
-/**
- *
- * rct2: 0x00407F16
- */
-int osinterface_progressbar_destroy()
-{
- if (DestroyWindow(RCT2_GLOBAL(RCT2_ADDRESS_PROGRESSBAR_HWND, HWND))) {
- RCT2_GLOBAL(0x009E2DFC, uint32) = 0;
- return 1;
- } else {
- return 0;
- }
-}
-
-/**
- *
- * rct2: 0x00407F2E
- */
-void osinterface_progressbar_setmax(int max)
-{
- SendMessageA(RCT2_GLOBAL(RCT2_ADDRESS_PROGRESSBAR_HWND, HWND), PBM_SETRANGE, MAKEWPARAM(0, max), 0);
- SendMessageA(RCT2_GLOBAL(RCT2_ADDRESS_PROGRESSBAR_HWND, HWND), PBM_SETSTEP, 1, 0);
-}
-
-/**
- *
- * rct2: 0x00407F60
- */
-void osinterface_progressbar_setpos(int pos)
-{
- SendMessageA(RCT2_GLOBAL(RCT2_ADDRESS_PROGRESSBAR_HWND, HWND), PBM_SETPOS, MAKEWPARAM(pos, 0), 0);
-}
-
-/**
- *
- * rct2: 0x00407F78
- */
-int osinterface_file_seek_from_begin(HANDLE handle, int offset)
-{
- return SetFilePointer(handle, offset, 0, FILE_BEGIN);
-}
-
-/**
- *
- * rct2: 0x00407F8B
- */
-int osinterface_file_seek_from_current(HANDLE handle, int offset)
-{
- return SetFilePointer(handle, offset, 0, FILE_CURRENT);
-}
-
-/**
- *
- * rct2: 0x00407F9E
- */
-int osinterface_file_seek_from_end(HANDLE handle, int offset)
-{
- return SetFilePointer(handle, offset, 0, FILE_END);
-}
-
-/**
- *
- * rct2: 0x00407FB1
- */
-int osinterface_file_read(HANDLE handle, void* data, int size)
-{
- DWORD read;
- BOOL result;
- if (size == -1) {
- DWORD current = SetFilePointer(handle, 0, 0, FILE_CURRENT);
- DWORD remaining = SetFilePointer(handle, 0, 0, FILE_END) - current;
- result = ReadFile(handle, data, remaining, &read, 0);
- } else {
- result = ReadFile(handle, data, size, &read, 0);
- }
- if (result) {
- return read;
- } else {
- return -1;
- }
-}
-
-/**
- *
- * rct2: 0x00408024
- */
-int osinterface_file_write(HANDLE handle, const void* data, int size)
-{
- DWORD written;
- if (WriteFile(handle, data, size, &written, 0)) {
- return written;
- } else {
- return -1;
- }
-}
-
-/**
- *
- * rct2: 0x0040804A
- */
-int osinterface_file_close(HANDLE handle)
-{
- if (handle) {
- return CloseHandle(handle);
- } else {
- return 1;
- }
-}
-
-/**
- *
- * rct2: 0x00408060
- */
-HANDLE osinterface_file_open(const char* filename)
-{
- return CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS | FILE_ATTRIBUTE_NORMAL, 0);
-}
-
-/**
- *
- * rct2: 0x0040807D
- */
-HANDLE osinterface_file_create(const char* filename)
-{
- return CreateFileA(filename, GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
-}
-
-/**
- *
- * rct2: 0x00408099
- */
-int osinterface_file_move(const char* srcfilename, const char* dstfilename)
-{
- return (MoveFileA(srcfilename, dstfilename) != 0) - 1;
-}
-
-/**
- *
- * rct2: 0x004080AF
- */
-int osinterface_file_delete(const char* filename)
-{
- return (DeleteFileA(filename) != 0) - 1;
-}
-
-/**
- *
- * rct2: 0x004080EA
- */
-int osinterface_open_common_file_dialog(int type, char *title, char *filename, char *filterPattern, char *filterName)
-{
- char initialDirectory[MAX_PATH], *dotAddress, *slashAddress;
- OPENFILENAME openFileName;
- BOOL result;
- int tmp;
- DWORD commonFlags;
-
- // Get directory path from given filename
- strcpy(initialDirectory, filename);
- dotAddress = strrchr(initialDirectory, '.');
- if (dotAddress != NULL) {
- slashAddress = strrchr(initialDirectory, '\\');
- if (slashAddress < dotAddress)
- *(slashAddress + 1) = 0;
- }
-
- // Clear filename
- if (type != 0)
- *filename = 0;
-
- // Set open file name options
- memset(&openFileName, 0, sizeof(OPENFILENAME));
- openFileName.lStructSize = sizeof(OPENFILENAME);
- openFileName.hwndOwner = RCT2_GLOBAL(0x009E2D70, HWND);
- openFileName.lpstrFile = filename;
- openFileName.nMaxFile = MAX_PATH;
- openFileName.lpstrInitialDir = initialDirectory;
- openFileName.lpstrTitle = title;
-
- // Copy filter name
- strcpy((char*)0x01423800, filterName);
-
- // Copy filter pattern
- strcpy((char*)0x01423800 + strlen(filterName) + 1, filterPattern);
- *((char*)(0x01423800 + strlen(filterName) + 1 + strlen(filterPattern) + 1)) = 0;
- openFileName.lpstrFilter = (char*)0x01423800;
-
- //
- tmp = RCT2_GLOBAL(0x009E2C74, uint32);
- if (RCT2_GLOBAL(0x009E2BB8, uint32) == 2 && RCT2_GLOBAL(0x009E1AF8, uint32) == 1)
- RCT2_GLOBAL(0x009E2C74, uint32) = 1;
-
- // Open dialog
- commonFlags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
- if (type == 0) {
- openFileName.Flags = commonFlags | OFN_CREATEPROMPT | OFN_OVERWRITEPROMPT;
- result = GetSaveFileName(&openFileName);
- } else if (type == 1) {
- openFileName.Flags = commonFlags | OFN_NONETWORKBUTTON | OFN_FILEMUSTEXIST;
- result = GetOpenFileName(&openFileName);
- }
-
- //
- RCT2_GLOBAL(0x009E2C74, uint32) = tmp;
-
- return result;
-}
-
-void osinterface_show_messagebox(char* message)
-{
- MessageBox(NULL, message, "OpenRCT2", MB_OK);
-}
-
-char* osinterface_open_directory_browser(char *title)
-{
- BROWSEINFO bi;
- char pszBuffer[MAX_PATH];
- LPITEMIDLIST pidl;
- LPMALLOC lpMalloc;
-
- // Initialize COM
- if (FAILED(CoInitializeEx(0, COINIT_APARTMENTTHREADED))) {
- CoUninitialize();
-
- log_error("Error opening directory browse window");
- return 0;
- }
-
- // Get a pointer to the shell memory allocator
- if (FAILED(SHGetMalloc(&lpMalloc))) {
- CoUninitialize();
-
- log_error("Error opening directory browse window");
- return 0;
- }
-
- bi.hwndOwner = NULL;
- bi.pidlRoot = NULL;
- bi.pszDisplayName = pszBuffer;
- bi.lpszTitle = _T(title);
- bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
- bi.lpfn = NULL;
- bi.lParam = 0;
-
- char *outPath = NULL;
-
- if (pidl = SHBrowseForFolder(&bi)) {
- // Copy the path directory to the buffer
- if (SHGetPathFromIDList(pidl, pszBuffer)) {
- // Store pszBuffer (and the path) in the outPath
- outPath = (char*) malloc(strlen(pszBuffer)+1);
- strcpy(outPath, pszBuffer);
- }
- }
- CoUninitialize();
- return outPath;
-}
-
-char* osinterface_get_orct2_homefolder()
-{
- char *path=NULL;
- path = malloc(sizeof(char) * MAX_PATH);
- if (path == NULL){
- log_fatal("Error allocating memory!");
- exit(EXIT_FAILURE);
- }
-
- path[0] = '\0';
-
- if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL | CSIDL_FLAG_CREATE, NULL, 0, path)))
- strcat(path, "\\OpenRCT2");
-
- return path;
-}
-
-char *osinterface_get_orct2_homesubfolder(const char *subFolder)
-{
- char *path = osinterface_get_orct2_homefolder();
- strcat(path, "\\");
- strcat(path, subFolder);
- return path;
-}
-
-char osinterface_get_path_separator()
-{
- return '\\';
-}
diff --git a/src/platform/osinterface.h b/src/platform/osinterface.h
deleted file mode 100644
index 557a16fb1c..0000000000
--- a/src/platform/osinterface.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2014 Ted John
- * OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
- *
- * This file is part of OpenRCT2.
- *
- * OpenRCT2 is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *****************************************************************************/
-
-#ifndef _SDL_INTERFACE_H_
-#define _SDL_INTERFACE_H_
-
-#include
-#include "../common.h"
-
-enum {
- CURSOR_UP = 0,
- CURSOR_DOWN = 1,
- CURSOR_CHANGED = 2,
- CURSOR_RELEASED = CURSOR_UP | CURSOR_CHANGED,
- CURSOR_PRESSED = CURSOR_DOWN | CURSOR_CHANGED,
-};
-
-enum{
- CURSOR_ARROW = 0,
- CURSOR_BLANK = 1,
- CURSOR_UP_ARROW = 2,
- CURSOR_UP_DOWN_ARROW = 3,
- CURSOR_HAND_POINT = 4,
- CURSOR_ZZZ = 5,
- CURSOR_DIAGONAL_ARROWS = 6,
- CURSOR_PICKER = 7,
- CURSOR_TREE_DOWN = 8,
- CURSOR_FOUNTAIN_DOWN = 9,
- CURSOR_STATUE_DOWN = 10,
- CURSOR_BENCH_DOWN = 11,
- CURSOR_CROSS_HAIR = 12,
- CURSOR_BIN_DOWN = 13,
- CURSOR_LAMPPOST_DOWN = 14,
- CURSOR_FENCE_DOWN = 15,
- CURSOR_FLOWER_DOWN = 16,
- CURSOR_PATH_DOWN = 17,
- CURSOR_DIG_DOWN = 18,
- CURSOR_WATER_DOWN = 19,
- CURSOR_HOUSE_DOWN = 20,
- CURSOR_VOLCANO_DOWN = 21,
- CURSOR_WALK_DOWN = 22,
- CURSOR_PAINT_DOWN = 23,
- CURSOR_ENTRANCE_DOWN = 24,
- CURSOR_HAND_OPEN = 25,
- CURSOR_HAND_CLOSED = 26
-};
-
-typedef struct {
- int x, y;
- unsigned char left, middle, right, any;
- int wheel;
- int old;
-} openrct2_cursor;
-
-extern openrct2_cursor gCursorState;
-extern const unsigned char *gKeysState;
-extern unsigned char *gKeysPressed;
-extern unsigned int gLastKeyPressed;
-extern int gTextInputCursorPosition;
-
-void osinterface_start_text_input(char* buffer, int max_length);
-void osinterface_stop_text_input();
-void osinterface_init();
-void osinterface_process_messages();
-void osinterface_draw();
-void osinterface_free();
-void osinterface_update_palette(char* colours, int start_index, int num_colours);
-
-void osinterface_set_fullscreen_mode(int mode);
-
-void osinterface_progressbar_setmax(int max);
-void osinterface_progressbar_setpos(int pos);
-
-void osinterface_set_cursor(char cursor);
-
-HANDLE osinterface_file_open(const char* filename);
-int osinterface_file_read(HANDLE handle, void* data, int size);
-int osinterface_file_close(HANDLE handle);
-int osinterface_file_move(const char* srcfilename, const char* dstfilename);
-int osinterface_file_delete(const char* filename);
-
-int osinterface_open_common_file_dialog(int type, char *title, char *filename, char *filterPattern, char *filterName);
-void osinterface_show_messagebox(char* message);
-char* osinterface_open_directory_browser(char *title);
-
-char* osinterface_get_orct2_homefolder();
-char *osinterface_get_orct2_homesubfolder(const char *subFolder);
-
-char osinterface_get_path_separator();
-int osinterface_scancode_to_rct_keycode(int sdl_key);
-
-#endif
diff --git a/src/platform/platform.h b/src/platform/platform.h
index edc385787b..1ceead246a 100644
--- a/src/platform/platform.h
+++ b/src/platform/platform.h
@@ -41,6 +41,27 @@ typedef struct {
uint64 last_modified;
} file_info;
+typedef struct {
+ int x, y;
+ unsigned char left, middle, right, any;
+ int wheel;
+ int old;
+} openrct2_cursor;
+
+enum {
+ CURSOR_UP = 0,
+ CURSOR_DOWN = 1,
+ CURSOR_CHANGED = 2,
+ CURSOR_RELEASED = CURSOR_UP | CURSOR_CHANGED,
+ CURSOR_PRESSED = CURSOR_DOWN | CURSOR_CHANGED,
+};
+
+extern openrct2_cursor gCursorState;
+extern const unsigned char *gKeysState;
+extern unsigned char *gKeysPressed;
+extern unsigned int gLastKeyPressed;
+extern int gTextInputCursorPosition;
+
extern int gResolutionsAllowAnyAspectRatio;
extern int gNumResolutions;
extern resolution *gResolutions;
@@ -49,6 +70,17 @@ extern SDL_Window *gWindow;
// Platform shared definitions
void platform_update_fullscreen_resolutions();
void platform_get_closest_resolution(int inWidth, int inHeight, int *outWidth, int *outHeight);
+void platform_init();
+void platform_draw();
+void platform_free();
+void platform_update_palette(char* colours, int start_index, int num_colours);
+void platform_set_fullscreen_mode(int mode);
+void platform_set_cursor(char cursor);
+void platform_process_messages();
+char *platform_get_orct2_homesubfolder();
+int platform_scancode_to_rct_keycode(int sdl_key);
+void platform_start_text_input(char* buffer, int max_length);
+void platform_stop_text_input();
// Platform specific definitions
char platform_get_path_separator();
@@ -59,14 +91,28 @@ int platform_lock_single_instance();
int platform_enumerate_files_begin(const char *pattern);
int platform_enumerate_files_next(int handle, file_info *outFileInfo);
void platform_enumerate_files_end(int handle);
+int platform_file_move(const char *srcPath, const char *dstPath);
+int platform_file_delete(const char *path);
void platform_hide_cursor();
void platform_show_cursor();
void platform_get_cursor_position(int *x, int *y);
void platform_set_cursor_position(int x, int y);
unsigned int platform_get_ticks();
+char *platform_get_orct2_homefolder();
+void platform_show_messagebox(char *message);
+int platform_open_common_file_dialog(int type, char *title, char *filename, char *filterPattern, char *filterName);
+char *platform_open_directory_browser(char *title);
+// Windows specific definitions
#ifdef _WIN32
+ // Defining WIN32_LEAN_AND_MEAN breaks dsound.h in audio.h (uncomment when dsound is finally removed)
+ // #ifndef WIN32_LEAN_AND_MEAN
+ // #define WIN32_LEAN_AND_MEAN
+ // #endif
+ #include
+
int windows_get_registry_install_info(rct2_install_info *installInfo, char *source, char *font, uint8 charset);
+ HWND windows_get_window_handle();
#endif
#endif
\ No newline at end of file
diff --git a/src/platform/shared.c b/src/platform/shared.c
index a1e44ab4d5..01ca5114db 100644
--- a/src/platform/shared.c
+++ b/src/platform/shared.c
@@ -20,15 +20,44 @@
#include
#include
+#include "../addresses.h"
#include "../config.h"
+#include "../cursors.h"
+#include "../drawing/drawing.h"
+#include "../interface/keyboard_shortcut.h"
+#include "../interface/window.h"
+#include "../input.h"
#include "platform.h"
+typedef void(*update_palette_func)(char*, int, int);
+
+openrct2_cursor gCursorState;
+const unsigned char *gKeysState;
+unsigned char *gKeysPressed;
+unsigned int gLastKeyPressed;
+char* gTextInput;
+int gTextInputLength;
+int gTextInputMaxLength;
+int gTextInputCursorPosition = 0;
+
int gNumResolutions = 0;
resolution *gResolutions = NULL;
+int gResolutionsAllowAnyAspectRatio = 0;
SDL_Window *gWindow;
-int gResolutionsAllowAnyAspectRatio = 0;
+static SDL_Surface *_surface;
+static SDL_Palette *_palette;
+static int _screenBufferSize;
+static void *_screenBuffer;
+static SDL_Cursor* _cursors[CURSOR_COUNT];
+static const int _fullscreen_modes[] = { 0, SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP };
+static unsigned int _lastGestureTimestamp;
+static float _gestureRadius;
+
+static void platform_create_window();
+static void platform_load_cursors();
+static void platform_unload_cursors();
int resolution_sort_func(const void *pa, const void *pb)
{
@@ -127,4 +156,513 @@ void platform_get_closest_resolution(int inWidth, int inHeight, int *outWidth, i
*outWidth = 640;
*outHeight = 480;
}
+}
+
+void platform_draw()
+{
+ // Lock the surface before setting its pixels
+ if (SDL_MUSTLOCK(_surface))
+ if (SDL_LockSurface(_surface) < 0) {
+ RCT2_ERROR("locking failed %s", SDL_GetError());
+ return;
+ }
+
+ // Copy pixels from the virtual screen buffer to the surface
+ memcpy(_surface->pixels, _screenBuffer, _surface->pitch * _surface->h);
+
+ // Unlock the surface
+ if (SDL_MUSTLOCK(_surface))
+ SDL_UnlockSurface(_surface);
+
+ // Copy the surface to the window
+ if (SDL_BlitSurface(_surface, NULL, SDL_GetWindowSurface(gWindow), NULL)) {
+ RCT2_ERROR("SDL_BlitSurface %s", SDL_GetError());
+ exit(1);
+ }
+ if (SDL_UpdateWindowSurface(gWindow)) {
+ RCT2_ERROR("SDL_UpdateWindowSurface %s", SDL_GetError());
+ exit(1);
+ }
+}
+
+static void platform_resize(int width, int height)
+{
+ rct_drawpixelinfo *screenDPI;
+ int newScreenBufferSize;
+ void *newScreenBuffer;
+
+ if (_surface != NULL)
+ SDL_FreeSurface(_surface);
+ if (_palette != NULL)
+ SDL_FreePalette(_palette);
+
+ _surface = SDL_CreateRGBSurface(0, width, height, 8, 0, 0, 0, 0);
+ _palette = SDL_AllocPalette(256);
+
+ if (!_surface || !_palette) {
+ RCT2_ERROR("%p || %p == NULL %s", _surface, _palette, SDL_GetError());
+ exit(-1);
+ }
+
+ if (SDL_SetSurfacePalette(_surface, _palette)) {
+ RCT2_ERROR("SDL_SetSurfacePalette failed %s", SDL_GetError());
+ exit(-1);
+ }
+
+ newScreenBufferSize = _surface->pitch * _surface->h;
+ newScreenBuffer = malloc(newScreenBufferSize);
+ if (_screenBuffer == NULL) {
+ memset(newScreenBuffer, 0, newScreenBufferSize);
+ } else {
+ memcpy(newScreenBuffer, _screenBuffer, min(_screenBufferSize, newScreenBufferSize));
+ if (newScreenBufferSize - _screenBufferSize > 0)
+ memset((uint8*)newScreenBuffer + _screenBufferSize, 0, newScreenBufferSize - _screenBufferSize);
+ free(_screenBuffer);
+ }
+
+ _screenBuffer = newScreenBuffer;
+ _screenBufferSize = newScreenBufferSize;
+
+ RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16) = width;
+ RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, sint16) = height;
+
+ screenDPI = RCT2_ADDRESS(RCT2_ADDRESS_SCREEN_DPI, rct_drawpixelinfo);
+ screenDPI->bits = _screenBuffer;
+ screenDPI->x = 0;
+ screenDPI->y = 0;
+ screenDPI->width = width;
+ screenDPI->height = height;
+ screenDPI->pitch = _surface->pitch - _surface->w;
+
+ RCT2_GLOBAL(0x009ABDF0, uint8) = 6;
+ RCT2_GLOBAL(0x009ABDF1, uint8) = 3;
+ RCT2_GLOBAL(0x009ABDF2, uint8) = 1;
+ RCT2_GLOBAL(RCT2_ADDRESS_DIRTY_BLOCK_WIDTH, sint16) = 64;
+ RCT2_GLOBAL(RCT2_ADDRESS_DIRTY_BLOCK_HEIGHT, sint16) = 8;
+ RCT2_GLOBAL(RCT2_ADDRESS_DIRTY_BLOCK_COLUMNS, sint32) = (width >> 6) + 1;
+ RCT2_GLOBAL(RCT2_ADDRESS_DIRTY_BLOCK_ROWS, sint32) = (height >> 3) + 1;
+
+ window_resize_gui(width, height);
+ window_relocate_windows(width, height);
+
+ gfx_invalidate_screen();
+}
+
+void platform_update_palette(char* colours, int start_index, int num_colours)
+{
+ SDL_Color base[256];
+ SDL_Surface *surface;
+ int i;
+
+ surface = SDL_GetWindowSurface(gWindow);
+ if (!surface) {
+ RCT2_ERROR("SDL_GetWindowSurface failed %s", SDL_GetError());
+ exit(1);
+ }
+
+ for (i = 0; i < 256; i++) {
+ base[i].r = colours[2];
+ base[i].g = colours[1];
+ base[i].b = colours[0];
+ base[i].a = 0;
+ colours += 4;
+ }
+
+ if (SDL_SetPaletteColors(_palette, base, 0, 256)) {
+ RCT2_ERROR("SDL_SetPaletteColors failed %s", SDL_GetError());
+ exit(1);
+ }
+}
+
+void platform_process_messages()
+{
+ SDL_Event e;
+
+ gLastKeyPressed = 0;
+ // gCursorState.wheel = 0;
+ gCursorState.left &= ~CURSOR_CHANGED;
+ gCursorState.middle &= ~CURSOR_CHANGED;
+ gCursorState.right &= ~CURSOR_CHANGED;
+ gCursorState.old = 0;
+
+ while (SDL_PollEvent(&e)) {
+ switch (e.type) {
+ case SDL_QUIT:
+// rct2_finish();
+ rct2_quit();
+ break;
+ case SDL_WINDOWEVENT:
+ if (e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
+ platform_resize(e.window.data1, e.window.data2);
+ break;
+ case SDL_MOUSEMOTION:
+ RCT2_GLOBAL(0x0142406C, int) = e.motion.x;
+ RCT2_GLOBAL(0x01424070, int) = e.motion.y;
+
+ gCursorState.x = e.motion.x;
+ gCursorState.y = e.motion.y;
+ break;
+ case SDL_MOUSEWHEEL:
+ gCursorState.wheel += e.wheel.y * 128;
+ break;
+ case SDL_MOUSEBUTTONDOWN:
+ RCT2_GLOBAL(0x01424318, int) = e.button.x;
+ RCT2_GLOBAL(0x0142431C, int) = e.button.y;
+ switch (e.button.button) {
+ case SDL_BUTTON_LEFT:
+ store_mouse_input(1);
+ gCursorState.left = CURSOR_PRESSED;
+ gCursorState.old = 1;
+ break;
+ case SDL_BUTTON_MIDDLE:
+ gCursorState.middle = CURSOR_PRESSED;
+ break;
+ case SDL_BUTTON_RIGHT:
+ store_mouse_input(3);
+ gCursorState.right = CURSOR_PRESSED;
+ gCursorState.old = 2;
+ break;
+ }
+ break;
+ case SDL_MOUSEBUTTONUP:
+ RCT2_GLOBAL(0x01424318, int) = e.button.x;
+ RCT2_GLOBAL(0x0142431C, int) = e.button.y;
+ switch (e.button.button) {
+ case SDL_BUTTON_LEFT:
+ store_mouse_input(2);
+ gCursorState.left = CURSOR_RELEASED;
+ gCursorState.old = 3;
+ break;
+ case SDL_BUTTON_MIDDLE:
+ gCursorState.middle = CURSOR_RELEASED;
+ break;
+ case SDL_BUTTON_RIGHT:
+ store_mouse_input(4);
+ gCursorState.right = CURSOR_RELEASED;
+ gCursorState.old = 4;
+ break;
+ }
+ break;
+ case SDL_KEYDOWN:
+ if (e.key.keysym.sym == SDLK_KP_ENTER){
+ // Map Keypad enter to regular enter.
+ e.key.keysym.scancode = SDL_SCANCODE_RETURN;
+ }
+
+ gLastKeyPressed = e.key.keysym.sym;
+ gKeysPressed[e.key.keysym.scancode] = 1;
+ if (e.key.keysym.sym == SDLK_RETURN && e.key.keysym.mod & KMOD_ALT) {
+ int targetMode = gGeneral_config.fullscreen_mode == 0 ? 2 : 0;
+ platform_set_fullscreen_mode(targetMode);
+ gGeneral_config.fullscreen_mode = targetMode;
+ config_save();
+ break;
+ }
+
+ // Text input
+
+ // If backspace and we have input text with a cursor position none zero
+ if (e.key.keysym.sym == SDLK_BACKSPACE && gTextInputLength > 0 && gTextInput && gTextInputCursorPosition){
+ // When at max length don't shift the data left
+ // as it would buffer overflow.
+ if (gTextInputCursorPosition != gTextInputMaxLength)
+ memmove(gTextInput + gTextInputCursorPosition - 1, gTextInput + gTextInputCursorPosition, gTextInputMaxLength - gTextInputCursorPosition - 1);
+ gTextInput[gTextInputLength - 1] = '\0';
+ gTextInputCursorPosition--;
+ gTextInputLength--;
+ }
+ if (e.key.keysym.sym == SDLK_END){
+ gTextInputCursorPosition = gTextInputLength;
+ }
+ if (e.key.keysym.sym == SDLK_HOME){
+ gTextInputCursorPosition = 0;
+ }
+ if (e.key.keysym.sym == SDLK_DELETE && gTextInputLength > 0 && gTextInput && gTextInputCursorPosition != gTextInputLength){
+ memmove(gTextInput + gTextInputCursorPosition, gTextInput + gTextInputCursorPosition + 1, gTextInputMaxLength - gTextInputCursorPosition - 1);
+ gTextInput[gTextInputMaxLength - 1] = '\0';
+ gTextInputLength--;
+ }
+ if (e.key.keysym.sym == SDLK_LEFT && gTextInput){
+ if (gTextInputCursorPosition) gTextInputCursorPosition--;
+ }
+ else if (e.key.keysym.sym == SDLK_RIGHT && gTextInput){
+ if (gTextInputCursorPosition < gTextInputLength) gTextInputCursorPosition++;
+ }
+ break;
+ case SDL_MULTIGESTURE:
+ if (e.mgesture.numFingers == 2) {
+ if (e.mgesture.timestamp > _lastGestureTimestamp + 1000)
+ _gestureRadius = 0;
+ _lastGestureTimestamp = e.mgesture.timestamp;
+ _gestureRadius += e.mgesture.dDist;
+
+ // Zoom gesture
+ const int tolerance = 128;
+ int gesturePixels = (int)(_gestureRadius * RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16));
+ if (gesturePixels > tolerance) {
+ _gestureRadius = 0;
+ keyboard_shortcut_handle_command(SHORTCUT_ZOOM_VIEW_IN);
+ } else if (gesturePixels < -tolerance) {
+ _gestureRadius = 0;
+ keyboard_shortcut_handle_command(SHORTCUT_ZOOM_VIEW_OUT);
+ }
+ }
+ break;
+
+ case SDL_TEXTINPUT:
+ if (gTextInputLength < gTextInputMaxLength && gTextInput){
+ // Convert the utf-8 code into rct ascii
+ char new_char;
+ if (!(e.text.text[0] & 0x80))
+ new_char = *e.text.text;
+ else if (!(e.text.text[0] & 0x20))
+ new_char = ((e.text.text[0] & 0x1F) << 6) | (e.text.text[1] & 0x3F);
+
+ // If inserting in center of string make space for new letter
+ if (gTextInputLength > gTextInputCursorPosition){
+ memmove(gTextInput + gTextInputCursorPosition + 1, gTextInput + gTextInputCursorPosition, gTextInputMaxLength - gTextInputCursorPosition - 1);
+ gTextInput[gTextInputCursorPosition] = new_char;
+ gTextInputLength++;
+ }
+ else gTextInput[gTextInputLength++] = new_char;
+
+ gTextInputCursorPosition++;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ gCursorState.any = gCursorState.left | gCursorState.middle | gCursorState.right;
+
+ // Updates the state of the keys
+ int numKeys = 256;
+ gKeysState = SDL_GetKeyboardState(&numKeys);
+}
+
+static void platform_close_window()
+{
+ if (gWindow != NULL)
+ SDL_DestroyWindow(gWindow);
+ if (_surface != NULL)
+ SDL_FreeSurface(_surface);
+ if (_palette != NULL)
+ SDL_FreePalette(_palette);
+ platform_unload_cursors();
+}
+
+void platform_init()
+{
+ platform_create_window();
+ gKeysPressed = malloc(sizeof(unsigned char) * 256);
+ memset(gKeysPressed, 0, sizeof(unsigned char) * 256);
+ // RCT2_CALLPROC(0x00404584); // dinput_init()
+}
+
+static void platform_create_window()
+{
+ int width, height;
+
+ if (SDL_Init(SDL_INIT_VIDEO) < 0) {
+ RCT2_ERROR("SDL_Init %s", SDL_GetError());
+ exit(-1);
+ }
+
+ platform_load_cursors();
+ RCT2_CALLPROC_EBPSAFE(0x0068371D);
+
+ // Get window size
+ width = gGeneral_config.window_width;
+ height = gGeneral_config.window_height;
+ if (width == -1) width = 640;
+ if (height == -1) height = 480;
+
+ RCT2_GLOBAL(0x009E2D8C, sint32) = 0;
+
+ // Create window in window first rather than fullscreen so we have the display the window is on first
+ gWindow = SDL_CreateWindow(
+ "OpenRCT2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_RESIZABLE
+ );
+ if (!gWindow) {
+ log_fatal("SDL_CreateWindow failed %s", SDL_GetError());
+ exit(-1);
+ }
+
+ // Set the update palette function pointer
+ RCT2_GLOBAL(0x009E2BE4, update_palette_func) = platform_update_palette;
+
+ // Initialise the surface, palette and draw buffer
+ platform_resize(width, height);
+
+ platform_update_fullscreen_resolutions();
+ platform_set_fullscreen_mode(gGeneral_config.fullscreen_mode);
+}
+
+int platform_scancode_to_rct_keycode(int sdl_key)
+{
+ char keycode = (char)SDL_GetKeyFromScancode((SDL_Scancode)sdl_key);
+
+ // Until we reshufle the text files to use the new positions
+ // this will suffice to move the majority to the correct positions.
+ // Note any special buttons PgUp PgDwn are mapped wrong.
+ if (keycode >= 'a' && keycode <= 'z')
+ keycode = toupper(keycode);
+
+ return keycode;
+}
+
+void platform_free()
+{
+ free(gKeysPressed);
+
+ platform_close_window();
+ SDL_Quit();
+}
+
+void platform_start_text_input(char* buffer, int max_length)
+{
+ SDL_StartTextInput();
+ gTextInputMaxLength = max_length - 1;
+ gTextInput = buffer;
+ gTextInputCursorPosition = strnlen(gTextInput, max_length);
+ gTextInputLength = gTextInputCursorPosition;
+}
+
+void platform_stop_text_input()
+{
+ SDL_StopTextInput();
+ gTextInput = NULL;
+}
+
+static void platform_unload_cursors()
+{
+ for (int i = 0; i < CURSOR_COUNT; i++)
+ if (_cursors[i] != NULL)
+ SDL_FreeCursor(_cursors[i]);
+}
+
+void platform_set_fullscreen_mode(int mode)
+{
+ int width, height;
+
+ mode = _fullscreen_modes[mode];
+
+ // HACK Changing window size when in fullscreen usually has no effect
+ if (mode == SDL_WINDOW_FULLSCREEN)
+ SDL_SetWindowFullscreen(gWindow, 0);
+
+ // Set window size
+ if (mode == SDL_WINDOW_FULLSCREEN) {
+ platform_update_fullscreen_resolutions();
+ platform_get_closest_resolution(gGeneral_config.fullscreen_width, gGeneral_config.fullscreen_height, &width, &height);
+ SDL_SetWindowSize(gWindow, width, height);
+ } else if (mode == 0) {
+ SDL_SetWindowSize(gWindow, gGeneral_config.window_width, gGeneral_config.window_height);
+ }
+
+ if (SDL_SetWindowFullscreen(gWindow, mode)) {
+ log_fatal("SDL_SetWindowFullscreen %s", SDL_GetError());
+ exit(1);
+
+ // TODO try another display mode rather than just exiting the game
+ }
+}
+
+char *platform_get_orct2_homesubfolder(const char *subFolder)
+{
+ char seperator = platform_get_path_separator();
+
+ char *path = platform_get_orct2_homefolder();
+ strcat(path, &seperator);
+ strcat(path, subFolder);
+ return path;
+}
+
+/**
+ * This is not quite the same as the below function as we don't want to
+ * derfererence the cursor before the function.
+ * rct2: 0x0407956
+ */
+void platform_set_cursor(char cursor)
+{
+ SDL_SetCursor(_cursors[cursor]);
+}
+/**
+ *
+ * rct2: 0x0068352C
+ */
+static void platform_load_cursors()
+{
+ RCT2_GLOBAL(0x14241BC, uint32) = 2;
+ HINSTANCE hInst = RCT2_GLOBAL(RCT2_ADDRESS_HINSTANCE, HINSTANCE);
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_ARROW, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x74));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_BLANK, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA1));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_UP_ARROW, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x6D));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_UP_DOWN_ARROW, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x6E));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HAND_POINT, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x70));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_ZZZ, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x78));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_DIAGONAL_ARROWS, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x77));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_PICKER, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x7C));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_TREE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x83));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_FOUNTAIN_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x7F));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_STATUE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x80));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_BENCH_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x81));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_CROSS_HAIR, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x82));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_BIN_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x84));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_LAMPPOST_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x85));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_FENCE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8A));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_FLOWER_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x89));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_PATH_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8B));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_DIG_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8D));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_WATER_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8E));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HOUSE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x8F));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_VOLCANO_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x90));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_WALK_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x91));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_PAINT_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x9E));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_ENTRANCE_DOWN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0x9F));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HAND_OPEN, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA6));
+ RCT2_GLOBAL(RCT2_ADDRESS_HCURSOR_HAND_CLOSED, HCURSOR) = LoadCursor(hInst, MAKEINTRESOURCE(0xA5));
+
+ _cursors[0] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
+ _cursors[1] = SDL_CreateCursor(blank_cursor_data, blank_cursor_mask, 32, 32, BLANK_CURSOR_HOTX, BLANK_CURSOR_HOTY);
+ _cursors[2] = SDL_CreateCursor(up_arrow_cursor_data, up_arrow_cursor_mask, 32, 32, UP_ARROW_CURSOR_HOTX, UP_ARROW_CURSOR_HOTY);
+ _cursors[3] = SDL_CreateCursor(up_down_arrow_cursor_data, up_down_arrow_cursor_mask, 32, 32, UP_DOWN_ARROW_CURSOR_HOTX, UP_DOWN_ARROW_CURSOR_HOTY);
+ _cursors[4] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
+ _cursors[5] = SDL_CreateCursor(zzz_cursor_data, zzz_cursor_mask, 32, 32, ZZZ_CURSOR_HOTX, ZZZ_CURSOR_HOTY);
+ _cursors[6] = SDL_CreateCursor(diagonal_arrow_cursor_data, diagonal_arrow_cursor_mask, 32, 32, DIAGONAL_ARROW_CURSOR_HOTX, DIAGONAL_ARROW_CURSOR_HOTY);
+ _cursors[7] = SDL_CreateCursor(picker_cursor_data, picker_cursor_mask, 32, 32, PICKER_CURSOR_HOTX, PICKER_CURSOR_HOTY);
+ _cursors[8] = SDL_CreateCursor(tree_down_cursor_data, tree_down_cursor_mask, 32, 32, TREE_DOWN_CURSOR_HOTX, TREE_DOWN_CURSOR_HOTY);
+ _cursors[9] = SDL_CreateCursor(fountain_down_cursor_data, fountain_down_cursor_mask, 32, 32, FOUNTAIN_DOWN_CURSOR_HOTX, FOUNTAIN_DOWN_CURSOR_HOTY);
+ _cursors[10] = SDL_CreateCursor(statue_down_cursor_data, statue_down_cursor_mask, 32, 32, STATUE_DOWN_CURSOR_HOTX, STATUE_DOWN_CURSOR_HOTY);
+ _cursors[11] = SDL_CreateCursor(bench_down_cursor_data, bench_down_cursor_mask, 32, 32, BENCH_DOWN_CURSOR_HOTX, BENCH_DOWN_CURSOR_HOTY);
+ _cursors[12] = SDL_CreateCursor(cross_hair_cursor_data, cross_hair_cursor_mask, 32, 32, CROSS_HAIR_CURSOR_HOTX, CROSS_HAIR_CURSOR_HOTY);
+ _cursors[13] = SDL_CreateCursor(bin_down_cursor_data, bin_down_cursor_mask, 32, 32, BIN_DOWN_CURSOR_HOTX, BIN_DOWN_CURSOR_HOTY);
+ _cursors[14] = SDL_CreateCursor(lamppost_down_cursor_data, lamppost_down_cursor_mask, 32, 32, LAMPPOST_DOWN_CURSOR_HOTX, LAMPPOST_DOWN_CURSOR_HOTY);
+ _cursors[15] = SDL_CreateCursor(fence_down_cursor_data, fence_down_cursor_mask, 32, 32, FENCE_DOWN_CURSOR_HOTX, FENCE_DOWN_CURSOR_HOTY);
+ _cursors[16] = SDL_CreateCursor(flower_down_cursor_data, flower_down_cursor_mask, 32, 32, FLOWER_DOWN_CURSOR_HOTX, FLOWER_DOWN_CURSOR_HOTY);
+ _cursors[17] = SDL_CreateCursor(path_down_cursor_data, path_down_cursor_mask, 32, 32, PATH_DOWN_CURSOR_HOTX, PATH_DOWN_CURSOR_HOTY);
+ _cursors[18] = SDL_CreateCursor(dig_down_cursor_data, dig_down_cursor_mask, 32, 32, DIG_DOWN_CURSOR_HOTX, DIG_DOWN_CURSOR_HOTY);
+ _cursors[19] = SDL_CreateCursor(water_down_cursor_data, water_down_cursor_mask, 32, 32, WATER_DOWN_CURSOR_HOTX, WATER_DOWN_CURSOR_HOTY);
+ _cursors[20] = SDL_CreateCursor(house_down_cursor_data, house_down_cursor_mask, 32, 32, HOUSE_DOWN_CURSOR_HOTX, HOUSE_DOWN_CURSOR_HOTY);
+ _cursors[21] = SDL_CreateCursor(volcano_down_cursor_data, volcano_down_cursor_mask, 32, 32, VOLCANO_DOWN_CURSOR_HOTX, VOLCANO_DOWN_CURSOR_HOTY);
+ _cursors[22] = SDL_CreateCursor(walk_down_cursor_data, walk_down_cursor_mask, 32, 32, WALK_DOWN_CURSOR_HOTX, WALK_DOWN_CURSOR_HOTY);
+ _cursors[23] = SDL_CreateCursor(paint_down_cursor_data, paint_down_cursor_mask, 32, 32, PAINT_DOWN_CURSOR_HOTX, PAINT_DOWN_CURSOR_HOTY);
+ _cursors[24] = SDL_CreateCursor(entrance_down_cursor_data, entrance_down_cursor_mask, 32, 32, ENTRANCE_DOWN_CURSOR_HOTX, ENTRANCE_DOWN_CURSOR_HOTY);
+ _cursors[25] = SDL_CreateCursor(hand_open_cursor_data, hand_open_cursor_mask, 32, 32, HAND_OPEN_CURSOR_HOTX, HAND_OPEN_CURSOR_HOTY);
+ _cursors[26] = SDL_CreateCursor(hand_closed_cursor_data, hand_closed_cursor_mask, 32, 32, HAND_CLOSED_CURSOR_HOTX, HAND_CLOSED_CURSOR_HOTY);
+ platform_set_cursor(CURSOR_ARROW);
+ RCT2_GLOBAL(0x14241BC, uint32) = 0;
+}
+
+/**
+ *
+ * rct2: 0x00407D80
+ */
+int platform_get_cursor_pos(int* x, int* y)
+{
+ POINT point;
+ GetCursorPos(&point);
+ *x = point.x;
+ *y = point.y;
}
\ No newline at end of file
diff --git a/src/platform/windows.c b/src/platform/windows.c
index c8f2377e06..308b75e050 100644
--- a/src/platform/windows.c
+++ b/src/platform/windows.c
@@ -20,7 +20,9 @@
#ifdef _WIN32
+#include
#include
+#include
#include "../addresses.h"
#include "../cmdline.h"
#include "../openrct2.h"
@@ -190,6 +192,16 @@ void platform_enumerate_files_end(int handle)
enumFileInfo->active = 0;
}
+int platform_file_move(const char *srcPath, const char *dstPath)
+{
+ return MoveFileA(srcPath, dstPath);
+}
+
+int platform_file_delete(const char *path)
+{
+ return DeleteFileA(path);
+}
+
void platform_hide_cursor()
{
ShowCursor(FALSE);
@@ -223,6 +235,136 @@ unsigned int platform_get_ticks()
return GetTickCount();
}
+char* platform_get_orct2_homefolder()
+{
+ char *path = NULL;
+ path = malloc(sizeof(char) * MAX_PATH);
+ if (path == NULL){
+ log_fatal("Error allocating memory!");
+ exit(EXIT_FAILURE);
+ }
+
+ path[0] = '\0';
+
+ if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_PERSONAL | CSIDL_FLAG_CREATE, NULL, 0, path)))
+ strcat(path, "\\OpenRCT2");
+
+ return path;
+}
+
+void platform_show_messagebox(char *message)
+{
+ MessageBoxA(windows_get_window_handle(), message, "OpenRCT2", MB_OK);
+}
+
+/**
+ *
+ * rct2: 0x004080EA
+ */
+int platform_open_common_file_dialog(int type, char *title, char *filename, char *filterPattern, char *filterName)
+{
+ char initialDirectory[MAX_PATH], *dotAddress, *slashAddress;
+ OPENFILENAME openFileName;
+ BOOL result;
+ int tmp;
+ DWORD commonFlags;
+
+ // Get directory path from given filename
+ strcpy(initialDirectory, filename);
+ dotAddress = strrchr(initialDirectory, '.');
+ if (dotAddress != NULL) {
+ slashAddress = strrchr(initialDirectory, '\\');
+ if (slashAddress < dotAddress)
+ *(slashAddress + 1) = 0;
+ }
+
+ // Clear filename
+ if (type != 0)
+ *filename = 0;
+
+ // Set open file name options
+ memset(&openFileName, 0, sizeof(OPENFILENAME));
+ openFileName.lStructSize = sizeof(OPENFILENAME);
+ openFileName.hwndOwner = windows_get_window_handle();
+ openFileName.lpstrFile = filename;
+ openFileName.nMaxFile = MAX_PATH;
+ openFileName.lpstrInitialDir = initialDirectory;
+ openFileName.lpstrTitle = title;
+
+ // Copy filter name
+ strcpy((char*)0x01423800, filterName);
+
+ // Copy filter pattern
+ strcpy((char*)0x01423800 + strlen(filterName) + 1, filterPattern);
+ *((char*)(0x01423800 + strlen(filterName) + 1 + strlen(filterPattern) + 1)) = 0;
+ openFileName.lpstrFilter = (char*)0x01423800;
+
+ //
+ tmp = RCT2_GLOBAL(0x009E2C74, uint32);
+ if (RCT2_GLOBAL(0x009E2BB8, uint32) == 2 && RCT2_GLOBAL(0x009E1AF8, uint32) == 1)
+ RCT2_GLOBAL(0x009E2C74, uint32) = 1;
+
+ // Open dialog
+ commonFlags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
+ if (type == 0) {
+ openFileName.Flags = commonFlags | OFN_CREATEPROMPT | OFN_OVERWRITEPROMPT;
+ result = GetSaveFileName(&openFileName);
+ } else if (type == 1) {
+ openFileName.Flags = commonFlags | OFN_NONETWORKBUTTON | OFN_FILEMUSTEXIST;
+ result = GetOpenFileName(&openFileName);
+ }
+
+ //
+ RCT2_GLOBAL(0x009E2C74, uint32) = tmp;
+
+ return result;
+}
+
+char *platform_open_directory_browser(char *title)
+{
+ BROWSEINFO bi;
+ char pszBuffer[MAX_PATH];
+ LPITEMIDLIST pidl;
+ LPMALLOC lpMalloc;
+
+ // Initialize COM
+ if (FAILED(CoInitializeEx(0, COINIT_APARTMENTTHREADED))) {
+ CoUninitialize();
+
+ log_error("Error opening directory browse window");
+ return 0;
+ }
+
+ // Get a pointer to the shell memory allocator
+ if (FAILED(SHGetMalloc(&lpMalloc))) {
+ CoUninitialize();
+
+ log_error("Error opening directory browse window");
+ return 0;
+ }
+
+ bi.hwndOwner = NULL;
+ bi.pidlRoot = NULL;
+ bi.pszDisplayName = pszBuffer;
+ bi.lpszTitle = title;
+ bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
+ bi.lpfn = NULL;
+ bi.lParam = 0;
+
+ char *outPath = NULL;
+
+ if (pidl = SHBrowseForFolder(&bi)) {
+ // Copy the path directory to the buffer
+ if (SHGetPathFromIDList(pidl, pszBuffer)) {
+ // Store pszBuffer (and the path) in the outPath
+ outPath = (char*) malloc(strlen(pszBuffer)+1);
+ strcpy(outPath, pszBuffer);
+ }
+ }
+ CoUninitialize();
+ return outPath;
+}
+
/**
*
* rct2: 0x00407978
@@ -275,6 +417,21 @@ int windows_get_registry_install_info(rct2_install_info *installInfo, char *sour
return 1;
}
+HWND windows_get_window_handle()
+{
+ SDL_SysWMinfo wmInfo;
+
+ if (gWindow == NULL)
+ return NULL;
+
+ SDL_VERSION(&wmInfo.version);
+ if (SDL_GetWindowWMInfo(gWindow, &wmInfo) != SDL_TRUE) {
+ log_error("SDL_GetWindowWMInfo failed %s", SDL_GetError());
+ exit(-1);
+ }
+ return wmInfo.info.win.window;
+}
+
/**
* http://alter.org.ua/en/docs/win/args/
*/
diff --git a/src/rct2.c b/src/rct2.c
index 7a8a4234a7..db2247fc84 100644
--- a/src/rct2.c
+++ b/src/rct2.c
@@ -35,7 +35,6 @@
#include "management/news_item.h"
#include "object.h"
#include "openrct2.h"
-#include "platform/osinterface.h"
#include "platform/platform.h"
#include "ride/ride.h"
#include "ride/track.h"
@@ -93,7 +92,7 @@ int rct2_init()
gfx_load_g1();
gfx_load_character_widths();
- osinterface_init();
+ platform_init();
audio_init1();//RCT2_CALLPROC_EBPSAFE(0x006BA8E0); // init_audio();
viewport_init_all();
news_item_init_queue();
diff --git a/src/ride/ride.c b/src/ride/ride.c
index 6d55e105e8..3c14be80e8 100644
--- a/src/ride/ride.c
+++ b/src/ride/ride.c
@@ -30,7 +30,6 @@
#include "../management/news_item.h"
#include "../peep/peep.h"
#include "../peep/staff.h"
-#include "../platform/osinterface.h"
#include "../scenario.h"
#include "../util/util.h"
#include "../windows/error.h"
diff --git a/src/ride/track.c b/src/ride/track.c
index 7652f02836..0207b387b0 100644
--- a/src/ride/track.c
+++ b/src/ride/track.c
@@ -19,17 +19,16 @@
*****************************************************************************/
#include "../addresses.h"
-#include "../platform/osinterface.h"
+#include "../game.h"
+#include "../interface/viewport.h"
+#include "../localisation/localisation.h"
+#include "../platform/platform.h"
+#include "../rct1.h"
#include "../util/sawyercoding.h"
#include "../util/util.h"
-#include "../rct1.h"
+#include "../world/park.h"
#include "ride.h"
#include "track.h"
-#include "../platform/platform.h"
-#include "../game.h"
-#include "../localisation/localisation.h"
-#include "../world/park.h"
-#include "../interface/viewport.h"
/**
*
@@ -237,8 +236,8 @@ uint32* sub_6AB49A(rct_object_entry* entry){
static void get_track_idx_path(char *path)
{
- char *homePath = osinterface_get_orct2_homefolder();
- sprintf(path, "%s%c%s", homePath, osinterface_get_path_separator(), "Tracks.IDX");
+ char *homePath = platform_get_orct2_homefolder();
+ sprintf(path, "%s%c%s", homePath, platform_get_path_separator(), "tracks.idx");
free(homePath);
}
@@ -1080,7 +1079,7 @@ int track_rename(const char *text)
char old_path[MAX_PATH];
subsitute_path(old_path, RCT2_ADDRESS(RCT2_ADDRESS_TRACKS_PATH, char), &RCT2_ADDRESS(RCT2_ADDRESS_TRACK_LIST, char)[128 * w->track_list.var_482]);
- if (osinterface_file_move(old_path, new_path)){
+ if (!platform_file_move(old_path, new_path)) {
RCT2_GLOBAL(0x141E9AC, uint16) = 3354;
return 0;
}
@@ -1109,7 +1108,7 @@ int track_delete()
char path[MAX_PATH];
subsitute_path(path, RCT2_ADDRESS(RCT2_ADDRESS_TRACKS_PATH, char), &RCT2_ADDRESS(RCT2_ADDRESS_TRACK_LIST, char)[128 * w->track_list.var_482]);
- if (osinterface_file_delete(path)){
+ if (!platform_file_delete(path)) {
RCT2_GLOBAL(0x141E9AC, uint16) = 3355;
return 0;
}
diff --git a/src/scenario_list.c b/src/scenario_list.c
index 1711767570..a05868efb9 100644
--- a/src/scenario_list.c
+++ b/src/scenario_list.c
@@ -19,7 +19,6 @@
*****************************************************************************/
#include "addresses.h"
-#include "platform/osinterface.h"
#include "platform/platform.h"
#include "scenario.h"
@@ -157,8 +156,8 @@ static int scenario_list_sort_compare(const void *a, const void *b)
*/
static void scenario_scores_get_path(char *outPath)
{
- char *homePath = osinterface_get_orct2_homefolder();
- sprintf(outPath, "%s%c%s", homePath, osinterface_get_path_separator(), "scores.dat");
+ char *homePath = platform_get_orct2_homefolder();
+ sprintf(outPath, "%s%c%s", homePath, platform_get_path_separator(), "scores.dat");
free(homePath);
}
diff --git a/src/windows/editor_bottom_toolbar.c b/src/windows/editor_bottom_toolbar.c
index 54a43155fa..934b6e0920 100644
--- a/src/windows/editor_bottom_toolbar.c
+++ b/src/windows/editor_bottom_toolbar.c
@@ -28,7 +28,7 @@
#include "../interface/viewport.h"
#include "../interface/widget.h"
#include "../interface/window.h"
-#include "../platform/osinterface.h"
+#include "../platform/platform.h"
#include "../title.h"
#include "../util/util.h"
#include "error.h"
@@ -274,7 +274,7 @@ static int show_save_scenario_dialog(char *resultPath)
format_string(filterName, STR_RCT2_SCENARIO_FILE, NULL);
pause_sounds();
- result = osinterface_open_common_file_dialog(0, title, filename, "*.SC6", filterName);
+ result = platform_open_common_file_dialog(0, title, filename, "*.SC6", filterName);
unpause_sounds();
if (result)
diff --git a/src/windows/editor_inventions_list.c b/src/windows/editor_inventions_list.c
index 0d94c6f080..fc2fd22967 100644
--- a/src/windows/editor_inventions_list.c
+++ b/src/windows/editor_inventions_list.c
@@ -19,13 +19,13 @@
*****************************************************************************/
#include "../addresses.h"
+#include "../cursors.h"
#include "../input.h"
#include "../interface/widget.h"
#include "../interface/window.h"
#include "../localisation/localisation.h"
#include "../management/research.h"
#include "../object.h"
-#include "../platform/osinterface.h"
#include "../world/scenery.h"
#pragma region Widgets
diff --git a/src/windows/options.c b/src/windows/options.c
index 81bad88992..61527ed013 100644
--- a/src/windows/options.c
+++ b/src/windows/options.c
@@ -35,8 +35,8 @@
#include "../interface/widget.h"
#include "../interface/window.h"
#include "../localisation/localisation.h"
+#include "../platform/platform.h"
#include "../sprites.h"
-#include "../platform/osinterface.h"
#include "dropdown.h"
#include "error.h"
@@ -585,7 +585,7 @@ static void window_options_dropdown()
gGeneral_config.fullscreen_height = resolution->height;
if (gGeneral_config.fullscreen_mode == SDL_WINDOW_FULLSCREEN)
- osinterface_set_fullscreen_mode(SDL_WINDOW_FULLSCREEN);
+ platform_set_fullscreen_mode(SDL_WINDOW_FULLSCREEN);
config_save();
gfx_invalidate_screen();
@@ -601,7 +601,7 @@ static void window_options_dropdown()
w->disabled_widgets &= ~(1 << WIDX_RESOLUTION_DROPDOWN);
w->disabled_widgets &= ~(1 << WIDX_RESOLUTION);
}
- osinterface_set_fullscreen_mode(dropdownIndex);
+ platform_set_fullscreen_mode(dropdownIndex);
gGeneral_config.fullscreen_mode = (uint8)dropdownIndex;
config_save();
diff --git a/src/windows/shortcut_keys.c b/src/windows/shortcut_keys.c
index 42b482d716..509dc02afa 100644
--- a/src/windows/shortcut_keys.c
+++ b/src/windows/shortcut_keys.c
@@ -23,7 +23,7 @@
#include "../interface/window.h"
#include "../interface/widget.h"
#include "../localisation/localisation.h"
-#include "../platform/osinterface.h"
+#include "../platform/platform.h"
#define WW 340
#define WH 240
@@ -257,7 +257,7 @@ static void window_shortcut_scrollpaint()
uint16 shortcut_entry = gShortcutKeys[i];
if (shortcut_entry != 0xFFFF){
- RCT2_GLOBAL(0x13CE958, uint16) = STR_INDIVIDUAL_KEYS_BASE + osinterface_scancode_to_rct_keycode(shortcut_entry & 0xFF);
+ RCT2_GLOBAL(0x13CE958, uint16) = STR_INDIVIDUAL_KEYS_BASE + platform_scancode_to_rct_keycode(shortcut_entry & 0xFF);
//Display the modifer
if (shortcut_entry & 0x100){
RCT2_GLOBAL(0x13CE956, uint16) = STR_SHIFT_PLUS;
diff --git a/src/windows/text_input.c b/src/windows/text_input.c
index 7fda03eecf..ed0d953afa 100644
--- a/src/windows/text_input.c
+++ b/src/windows/text_input.c
@@ -27,7 +27,7 @@
#include "../addresses.h"
#include "../config.h"
-#include "../platform/osinterface.h"
+#include "../platform/platform.h"
#include "../interface/window.h"
#include "../interface/widget.h"
#include "../localisation/localisation.h"
@@ -150,7 +150,7 @@ void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id t
calling_number = call_w->number;
calling_widget = call_widget;
- osinterface_start_text_input(text_input, maxLength);
+ platform_start_text_input(text_input, maxLength);
window_init_scroll_widgets(w);
w->colours[0] = call_w->colours[0];
@@ -172,7 +172,7 @@ static void window_text_input_mouseup(){
switch (widgetIndex){
case WIDX_CANCEL:
case WIDX_CLOSE:
- osinterface_stop_text_input();
+ platform_stop_text_input();
// Pass back the text that has been entered.
// ecx when zero means text input failed
if (calling_w != NULL)
@@ -180,7 +180,7 @@ static void window_text_input_mouseup(){
window_close(w);
break;
case WIDX_OKAY:
- osinterface_stop_text_input();
+ platform_stop_text_input();
// Pass back the text that has been entered.
// ecx when none zero means text input success
if (calling_w != NULL)
@@ -265,11 +265,11 @@ static void window_text_input_paint(){
static void window_text_input_text(int key, rct_window* w){
int text = key;
- char new_char = osinterface_scancode_to_rct_keycode(0xFF&key);
+ char new_char = platform_scancode_to_rct_keycode(0xFF&key);
// If the return button is pressed stop text input
if (new_char == '\r'){
- osinterface_stop_text_input();
+ platform_stop_text_input();
window_close(w);
rct_window* calling_w = window_find_by_number(calling_class, calling_number);
// Pass back the text that has been entered.
@@ -300,10 +300,11 @@ void window_text_input_update7()
window_invalidate(w);
}
-static void window_text_input_close(){
+static void window_text_input_close()
+{
// Make sure that we take it out of the text input
// mode otherwise problems may occur.
- osinterface_stop_text_input();
+ platform_stop_text_input();
}
static void window_text_input_invalidate(){