diff --git a/projects/openrct2.vcxproj b/projects/openrct2.vcxproj
index 76a1fdfc39..b145af069c 100644
--- a/projects/openrct2.vcxproj
+++ b/projects/openrct2.vcxproj
@@ -134,6 +134,7 @@
+
diff --git a/projects/openrct2.vcxproj.filters b/projects/openrct2.vcxproj.filters
index 7f24637b5d..363f9b199e 100644
--- a/projects/openrct2.vcxproj.filters
+++ b/projects/openrct2.vcxproj.filters
@@ -377,6 +377,9 @@
Source Files
+
+ Windows
+
diff --git a/src/string_ids.h b/src/string_ids.h
index aabbb8442c..1a367fccce 100644
--- a/src/string_ids.h
+++ b/src/string_ids.h
@@ -798,6 +798,10 @@ enum {
STR_REAL_PARKS = STR_BEGINNER_PARKS + 3,
STR_OTHER_PARKS = STR_BEGINNER_PARKS + 4,
+ STR_SELECT_COLOUR = 3099,
+ STR_SELECT_SECONDARY_COLOUR = 3100,
+ STR_SELECT_TERNARY_COLOUR = 3101,
+
STR_LIST_RIDES_TIP = 3104,
STR_LIST_SHOPS_AND_STALLS_TIP = 3105,
STR_LIST_KIOSKS_AND_FACILITIES_TIP = 3106,
diff --git a/src/window.h b/src/window.h
index e7880dc636..d879a4790a 100644
--- a/src/window.h
+++ b/src/window.h
@@ -379,6 +379,7 @@ void window_new_ride_open();
void window_banner_open();
void window_cheats_open();
void window_research_open();
+void window_scenery_open();
void window_guest_list_init_vars_a();
void window_guest_list_init_vars_b();
diff --git a/src/window_game_top_toolbar.c b/src/window_game_top_toolbar.c
index b7f624a598..6f12939ed2 100644
--- a/src/window_game_top_toolbar.c
+++ b/src/window_game_top_toolbar.c
@@ -258,7 +258,8 @@ static void window_game_top_toolbar_mouseup()
case WIDX_SCENERY:
if (!tool_set(w, WIDX_SCENERY, 0)) {
RCT2_GLOBAL(0x009DE518, uint32) |= (1 << 6);
- RCT2_CALLPROC_EBPSAFE(0x006E0FEF);
+ window_scenery_open();
+ //RCT2_CALLPROC_EBPSAFE(006E0FEF);
}
break;
case WIDX_PATH:
diff --git a/src/window_scenery.c b/src/window_scenery.c
new file mode 100644
index 0000000000..4415e9dcf0
--- /dev/null
+++ b/src/window_scenery.c
@@ -0,0 +1,230 @@
+/*****************************************************************************
+* Copyright (c) 2014 Dániel Tar
+* 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 "addresses.h"
+#include "game.h"
+#include "gfx.h"
+#include "peep.h"
+#include "sprite.h"
+#include "string_ids.h"
+#include "viewport.h"
+#include "widget.h"
+#include "window.h"
+
+#define WINDOW_SCENERY_WIDTH 0x27A
+#define WINDOW_SCENERY_HEIGHT 0x8E
+
+enum {
+ WINDOW_SCENERY_TAB_1,
+ WINDOW_SCENERY_TAB_2,
+ WINDOW_SCENERY_TAB_3,
+ WINDOW_SCENERY_TAB_4,
+ WINDOW_SCENERY_TAB_5,
+ WINDOW_SCENERY_TAB_6,
+ WINDOW_SCENERY_TAB_7,
+ WINDOW_SCENERY_TAB_8,
+ WINDOW_SCENERY_TAB_9,
+ WINDOW_SCENERY_TAB_10,
+ WINDOW_SCENERY_TAB_11,
+ WINDOW_SCENERY_TAB_12,
+ WINDOW_SCENERY_TAB_13,
+ WINDOW_SCENERY_TAB_14,
+ WINDOW_SCENERY_TAB_15,
+ WINDOW_SCENERY_TAB_16,
+ WINDOW_SCENERY_TAB_17,
+ WINDOW_SCENERY_TAB_18,
+ WINDOW_SCENERY_TAB_19,
+ WINDOW_SCENERY_TAB_20
+} WINDOW_SCENERY_LIST_TAB;
+
+static void window_scenery_emptysub() { }
+
+static void* window_scenery_events[] = {
+ (void*)0x006E1A73, // window_scenery_close
+ (void*)0x006E19FC, // window_scenery_mouseup
+ (void*)0x006E1E48, // window_scenery_resize,
+ (void*)0x006E1A25, // window_scenery_mousedown,
+ (void*)0x006E1A54, // window_scenery_dropdown,
+ window_scenery_emptysub,
+ (void*)0x006E1CD3, // window_scenery_update,
+ (void*)0x006E1B9F, // window_scenery_emptysub,
+ window_scenery_emptysub,
+ window_scenery_emptysub,
+ window_scenery_emptysub, // window_scenery_tooldown
+ window_scenery_emptysub,
+ window_scenery_emptysub,
+ window_scenery_emptysub,
+ window_scenery_emptysub,
+ (void*)0x006E1A91, // window_scenery_scrollgetsize,
+ (void*)0x006E1C4A, // window_scenery_scrollmousedown,
+ window_scenery_emptysub,
+ (void*)0x006E1BB8, // window_scenery_scrollmouseover,
+ window_scenery_emptysub,
+ window_scenery_emptysub,
+ window_scenery_emptysub,
+ (void*)0x006E1C05, // window_scenery_tooltip,
+ window_scenery_emptysub,
+ window_scenery_emptysub,
+ (void*)0x006E118B, // window_scenery_invalidate,
+ (void*)0x006E1462, // window_scenery_paint,
+ (void*)0x006E15ED, // window_scenery_scrollpaint,
+};
+
+
+enum WINDOW_SCENERY_LIST_WIDGET_IDX {
+ WIDX_SCENERY_BACKGROUND, // 1
+ WIDX_SCENERY_TITLE, // 2
+ WIDX_SCENERY_CLOSE, // 4
+ WIDX_SCENERY_TAB_CONTENT_PANEL, // 8
+ WIDX_SCENERY_TAB_1, // 10
+ WIDX_SCENERY_TAB_2, // 20
+ WIDX_SCENERY_TAB_3, // 40
+ WIDX_SCENERY_TAB_4, // 80
+ WIDX_SCENERY_TAB_5, // 100
+ WIDX_SCENERY_TAB_6, // 200
+ WIDX_SCENERY_TAB_7, // 400
+ WIDX_SCENERY_TAB_8, // 800
+ WIDX_SCENERY_TAB_9, // 1000
+ WIDX_SCENERY_TAB_10, // 2000
+ WIDX_SCENERY_TAB_11, // 4000
+ WIDX_SCENERY_TAB_12, // 8000
+ WIDX_SCENERY_TAB_13, // 10000
+ WIDX_SCENERY_TAB_14, // 20000
+ WIDX_SCENERY_TAB_15, // 40000
+ WIDX_SCENERY_TAB_16, // 80000
+ WIDX_SCENERY_TAB_17, // 100000
+ WIDX_SCENERY_TAB_18, // 200000
+ WIDX_SCENERY_TAB_19, // 400000
+ WIDX_SCENERY_TAB_20, // 800000
+ WIDX_SCENERY_LIST, // 1000000
+ WIDX_SCENERY_FLATBUTTON1, // 2000000
+ WIDX_SCENERY_FLATBUTTON2, // 4000000
+ WIDX_SCENERY_COLORBUTTON1, // 8000000
+ WIDX_SCENERY_COLORBUTTON2, // 10000000
+ WIDX_SCENERY_COLORBUTTON3, // 20000000
+ WIDX_SCENERY_FLATBUTTON3, // 40000000
+};
+
+static rct_widget window_scenery_widgets[] = {
+ { WWT_FRAME, 0, 0, 633, 0, 141, 0xFFFFFFFF, STR_NONE }, // 1
+ { WWT_CAPTION, 0, 1, 632, 1, 14, 0xFFFFFFFF, STR_WINDOW_TITLE_TIP }, // 2
+ { WWT_CLOSEBOX, 0, 621, 631, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // 4
+ { WWT_RESIZE, 1, 0, 633, 43, 141, 0xFFFFFFFF, STR_NONE }, // 8
+ { WWT_TAB, 1, 3, 33, 17, 43, 0xFFFFFFFF, 1812 }, // 10
+ { WWT_TAB, 1, 34, 64, 17, 43, 0xFFFFFFFF, 1812 }, // 20
+ { WWT_TAB, 1, 65, 95, 17, 43, 0xFFFFFFFF, 1812 }, // 40
+ { WWT_TAB, 1, 96, 126, 17, 43, 0xFFFFFFFF, 1812 }, // 80
+ { WWT_TAB, 1, 127, 157, 17, 43, 0xFFFFFFFF, 1812 }, // 100
+ { WWT_TAB, 1, 158, 188, 17, 43, 0xFFFFFFFF, 1812 }, // 200
+ { WWT_TAB, 1, 189, 219, 17, 43, 0xFFFFFFFF, 1812 }, // 400
+ { WWT_TAB, 1, 220, 250, 17, 43, 0xFFFFFFFF, 1812 }, // 800
+ { WWT_TAB, 1, 251, 281, 17, 43, 0xFFFFFFFF, 1812 }, // 1000
+ { WWT_TAB, 1, 282, 312, 17, 43, 0xFFFFFFFF, 1812 }, // 2000
+ { WWT_TAB, 1, 313, 343, 17, 43, 0xFFFFFFFF, 1812 }, // 4000
+ { WWT_TAB, 1, 344, 374, 17, 43, 0xFFFFFFFF, 1812 }, // 8000
+ { WWT_TAB, 1, 375, 405, 17, 43, 0xFFFFFFFF, 1812 }, // 10000
+ { WWT_TAB, 1, 406, 436, 17, 43, 0xFFFFFFFF, 1812 }, // 20000
+ { WWT_TAB, 1, 437, 467, 17, 43, 0xFFFFFFFF, 1812 }, // 40000
+ { WWT_TAB, 1, 468, 498, 17, 43, 0xFFFFFFFF, 1812 }, // 80000
+ { WWT_TAB, 1, 468, 498, 17, 43, 0xFFFFFFFF, 1812 }, // 100000
+ { WWT_TAB, 1, 468, 498, 17, 43, 0xFFFFFFFF, 1812 }, // 200000
+ { WWT_TAB, 1, 468, 498, 17, 43, 0xFFFFFFFF, 1812 }, // 400000
+ { WWT_TAB, 1, 468, 498, 17, 43, 0x20001598, 1812 }, // 800000
+ { WWT_SCROLL, 1, 2, 608, 47, 126, 2, STR_NONE }, // 1000000
+ { WWT_FLATBTN, 1, 609, 632, 44, 67, 5169, STR_ROTATE_OBJECTS_90 }, // 2000000
+ { WWT_FLATBTN, 1, 609, 632, 68, 91, 5173, 3102 }, // 4000000
+ { WWT_COLORBTN, 1, 615, 626, 93, 104, 0xFFFFFFFF, STR_SELECT_COLOUR }, // 8000000
+ { WWT_COLORBTN, 1, 615, 626, 105, 116, 0xFFFFFFFF, STR_SELECT_SECONDARY_COLOUR }, // 10000000
+ { WWT_COLORBTN, 1, 615, 626, 117, 128, 0xFFFFFFFF, STR_SELECT_TERNARY_COLOUR }, // 20000000
+ { WWT_FLATBTN, 1, 609, 632, 117, 140, 5172, 3225 }, // 40000000
+ { WIDGETS_END },
+};
+
+/*
+* rct2: 0x006E0FEF
+**/
+void window_scenery_open()
+{
+ rct_window* window;
+
+ // Check if window is already open
+ window = window_bring_to_front_by_id(WC_SCENERY, 0);
+ if (window != NULL)
+ return;
+
+ RCT2_CALLPROC_EBPSAFE(0x006DFA00);
+
+ window = window_create(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16) - WINDOW_SCENERY_WIDTH, 0x1D, WINDOW_SCENERY_WIDTH, WINDOW_SCENERY_HEIGHT,
+ window_scenery_events, WC_SCENERY, WF_2);
+ window->widgets = window_scenery_widgets;
+
+ window->enabled_widgets =
+ (1 << WIDX_SCENERY_CLOSE) |
+ (1 << WIDX_SCENERY_FLATBUTTON1) |
+ (1 << WIDX_SCENERY_TAB_1) |
+ (1 << WIDX_SCENERY_TAB_2) |
+ (1 << WIDX_SCENERY_TAB_3) |
+ (1 << WIDX_SCENERY_TAB_4) |
+ (1 << WIDX_SCENERY_TAB_5) |
+ (1 << WIDX_SCENERY_TAB_6) |
+ (1 << WIDX_SCENERY_TAB_7) |
+ (1 << WIDX_SCENERY_TAB_8) |
+ (1 << WIDX_SCENERY_TAB_9) |
+ (1 << WIDX_SCENERY_TAB_10) |
+ (1 << WIDX_SCENERY_TAB_11) |
+ (1 << WIDX_SCENERY_TAB_12) |
+ (1 << WIDX_SCENERY_TAB_13) |
+ (1 << WIDX_SCENERY_TAB_14) |
+ (1 << WIDX_SCENERY_TAB_15) |
+ (1 << WIDX_SCENERY_TAB_16) |
+ (1 << WIDX_SCENERY_TAB_17) |
+ (1 << WIDX_SCENERY_TAB_18) |
+ (1 << WIDX_SCENERY_TAB_19) |
+ (1 << WIDX_SCENERY_TAB_20) |
+ (1 << WIDX_SCENERY_COLORBUTTON1) |
+ (1 << WIDX_SCENERY_COLORBUTTON2) |
+ (1 << WIDX_SCENERY_FLATBUTTON2) |
+ (1 << WIDX_SCENERY_COLORBUTTON3) |
+ (1 << WIDX_SCENERY_FLATBUTTON3);
+
+ window_init_scroll_widgets(window);
+ RCT2_CALLPROC_X(0x006E1EB4, 0, 0, 0, 0, (int)window, 0, 0);
+ show_gridlines();
+ RCT2_GLOBAL(0x00F64F05, uint8) = 3;
+ RCT2_GLOBAL(0x00F64F12, uint8) = 0;
+ RCT2_GLOBAL(0x00F64F13, uint8) = 0;
+ window->var_480 = 0xFFFF;
+ window->var_482 = 0;
+ window_push_others_below(window);
+ RCT2_GLOBAL(0x00F64F0D, uint8) = 0;
+ RCT2_GLOBAL(0x00F64EB4, uint32) = 0x80000000;
+ RCT2_GLOBAL(0x00F64EC0, uint16) = 0;
+ RCT2_GLOBAL(0x00F64F19, uint8) = 0;
+ RCT2_GLOBAL(0x00F64F1A, uint8) = 0;
+
+ window->min_width = WINDOW_SCENERY_WIDTH;
+ window->max_width = WINDOW_SCENERY_WIDTH;
+ window->min_height = WINDOW_SCENERY_HEIGHT;
+ window->max_height = WINDOW_SCENERY_HEIGHT;
+ window->colours[0] = 0x18;
+ window->colours[1] = 0x0C;
+ window->colours[2] = 0x0C;
+}
\ No newline at end of file