OpenRCT2/src/window_park.c

2098 lines
55 KiB
C
Raw Normal View History

2014-04-14 22:25:20 +02:00
/*****************************************************************************
* 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 <http://www.gnu.org/licenses/>.
*****************************************************************************/
#include "addresses.h"
#include "config.h"
2014-04-14 22:25:20 +02:00
#include "date.h"
2014-04-16 03:05:49 +02:00
#include "park.h"
#include "peep.h"
#include "ride.h"
#include "scenario.h"
2014-04-14 22:25:20 +02:00
#include "strings.h"
2014-04-17 04:19:30 +02:00
#include "sprite.h"
2014-04-14 22:25:20 +02:00
#include "sprites.h"
2014-04-16 03:05:49 +02:00
#include "util.h"
#include "viewport.h"
2014-04-14 22:25:20 +02:00
#include "widget.h"
#include "window.h"
2014-04-17 16:12:41 +02:00
#include "window_dropdown.h"
2014-04-14 22:25:20 +02:00
enum WINDOW_PARK_PAGE {
WINDOW_PARK_PAGE_ENTRANCE,
2014-04-16 03:05:49 +02:00
WINDOW_PARK_PAGE_RATING,
WINDOW_PARK_PAGE_GUESTS,
2014-04-14 22:25:20 +02:00
WINDOW_PARK_PAGE_PRICE,
WINDOW_PARK_PAGE_STATS,
WINDOW_PARK_PAGE_OBJECTIVE,
WINDOW_PARK_PAGE_AWARDS
};
enum WINDOW_PARK_WIDGET_IDX {
WIDX_BACKGROUND,
WIDX_TITLE,
WIDX_CLOSE,
WIDX_PAGE_BACKGROUND,
WIDX_TAB_1,
WIDX_TAB_2,
WIDX_TAB_3,
WIDX_TAB_4,
WIDX_TAB_5,
WIDX_TAB_6,
WIDX_TAB_7,
2014-04-16 03:05:49 +02:00
WIDX_VIEWPORT = 11,
WIDX_STATUS,
WIDX_OPEN_OR_CLOSE,
WIDX_BUY_LAND_RIGHTS,
WIDX_BUY_CONSTRUCTION_RIGHTS,
WIDX_LOCATE,
WIDX_RENAME,
WIDX__ = 11,
WIDX_PRICE,
WIDX_INCREASE_PRICE,
WIDX_DECREASE_PRICE,
WIDX_ENTER_NAME = 11
};
#pragma region Widgets
static rct_widget window_park_entrance_widgets[] = {
{ WWT_FRAME, 0, 0, 229, 0, 223, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 228, 1, 14, 0x361, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 217, 227, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_RESIZE, 1, 0, 229, 43, 173, 0x0FFFFFFFF, STR_NONE }, // tab content panel
2014-04-16 03:05:49 +02:00
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_PARK_ENTRANCE_TAB_TIP }, // tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_PARK_RATING_TAB_TIP }, // tab 2
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_PARK_GUESTS_TAB_TIP }, // tab 3
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_PARK_PRICE_TAB_TIP }, // tab 4
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_PARK_STATS_TAB_TIP }, // tab 5
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_PARK_OBJECTIVE_TAB_TIP }, // tab 6
{ WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_PARK_AWARDS_TAB_TIP }, // tab 7
{ WWT_VIEWPORT, 1, 3, 204, 46, 160, 0x0FFFFFFFF, STR_NONE }, // viewport
2014-04-17 04:19:30 +02:00
{ WWT_12, 1, 3, 204, 161, 171, 0x0FFFFFFFF, STR_NONE }, // status
2014-04-16 03:05:49 +02:00
{ WWT_FLATBTN, 1, 205, 228, 49, 72, 0x0FFFFFFFF, STR_OPEN_OR_CLOSE_PARK_TIP }, // open / close
{ WWT_FLATBTN, 1, 205, 228, 73, 96, SPR_BUY_LAND_RIGHTS, SPR_BUY_LAND_RIGHTS_TIP }, // buy land rights
{ WWT_FLATBTN, 1, 205, 228, 97, 120, SPR_BUY_CONSTRUCTION_RIGHTS, SPR_BUY_CONSTRUCTION_RIGHTS_TIP }, // buy construction rights
{ WWT_FLATBTN, 1, 205, 228, 121, 144, SPR_LOCATE, STR_LOCATE_SUBJECT_TIP }, // locate
{ WWT_FLATBTN, 1, 205, 228, 145, 168, SPR_RENAME, STR_NAME_PARK_TIP }, // rename
{ WIDGETS_END },
};
static rct_widget window_park_rating_widgets[] = {
{ WWT_FRAME, 0, 0, 229, 0, 223, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 228, 1, 14, 0x361, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 217, 227, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_IMGBTN, 1, 0, 229, 43, 173, 0x0FFFFFFFF, STR_NONE }, // tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_PARK_ENTRANCE_TAB_TIP }, // tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_PARK_RATING_TAB_TIP }, // tab 2
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_PARK_GUESTS_TAB_TIP }, // tab 3
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_PARK_PRICE_TAB_TIP }, // tab 4
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_PARK_STATS_TAB_TIP }, // tab 5
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_PARK_OBJECTIVE_TAB_TIP }, // tab 6
{ WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_PARK_AWARDS_TAB_TIP }, // tab 7
{ WIDGETS_END },
};
static rct_widget window_park_guests_widgets[] = {
{ WWT_FRAME, 0, 0, 229, 0, 223, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 228, 1, 14, 0x361, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 217, 227, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_IMGBTN, 1, 0, 229, 43, 173, 0x0FFFFFFFF, STR_NONE }, // tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_PARK_ENTRANCE_TAB_TIP }, // tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_PARK_RATING_TAB_TIP }, // tab 2
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_PARK_GUESTS_TAB_TIP }, // tab 3
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_PARK_PRICE_TAB_TIP }, // tab 4
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_PARK_STATS_TAB_TIP }, // tab 5
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_PARK_OBJECTIVE_TAB_TIP }, // tab 6
{ WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_PARK_AWARDS_TAB_TIP }, // tab 7
{ WIDGETS_END },
};
static rct_widget window_park_price_widgets[] = {
{ WWT_FRAME, 0, 0, 229, 0, 223, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 228, 1, 14, 0x361, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 217, 227, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_IMGBTN, 1, 0, 229, 43, 173, 0x0FFFFFFFF, STR_NONE }, // tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_PARK_ENTRANCE_TAB_TIP }, // tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_PARK_RATING_TAB_TIP }, // tab 2
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_PARK_GUESTS_TAB_TIP }, // tab 3
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_PARK_PRICE_TAB_TIP }, // tab 4
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_PARK_STATS_TAB_TIP }, // tab 5
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_PARK_OBJECTIVE_TAB_TIP }, // tab 6
{ WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_PARK_AWARDS_TAB_TIP }, // tab 7
{ WWT_24, 1, 7, 146, 50, 61, STR_ADMISSION_PRICE, STR_NONE }, //
{ WWT_15, 1, 147, 222, 50, 61, 0x595, STR_NONE }, // price
{ WWT_DROPDOWN_BUTTON, 1, 211, 221, 51, 55, STR_NUMERIC_UP, STR_NONE }, // increase price
{ WWT_DROPDOWN_BUTTON, 1, 211, 221, 56, 60, STR_NUMERIC_DOWN, STR_NONE }, // decrease price
{ WIDGETS_END },
};
static rct_widget window_park_stats_widgets[] = {
{ WWT_FRAME, 0, 0, 229, 0, 223, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 228, 1, 14, 0x361, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 217, 227, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_IMGBTN, 1, 0, 229, 43, 173, 0x0FFFFFFFF, STR_NONE }, // tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_PARK_ENTRANCE_TAB_TIP }, // tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_PARK_RATING_TAB_TIP }, // tab 2
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_PARK_GUESTS_TAB_TIP }, // tab 3
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_PARK_PRICE_TAB_TIP }, // tab 4
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_PARK_STATS_TAB_TIP }, // tab 5
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_PARK_OBJECTIVE_TAB_TIP }, // tab 6
{ WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_PARK_AWARDS_TAB_TIP }, // tab 7
{ WIDGETS_END },
2014-04-14 22:25:20 +02:00
};
static rct_widget window_park_objective_widgets[] = {
2014-04-16 03:05:49 +02:00
{ WWT_FRAME, 0, 0, 229, 0, 223, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 228, 1, 14, 0x361, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 217, 227, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_IMGBTN, 1, 0, 229, 43, 173, 0x0FFFFFFFF, STR_NONE }, // tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_PARK_ENTRANCE_TAB_TIP }, // tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_PARK_RATING_TAB_TIP }, // tab 2
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_PARK_GUESTS_TAB_TIP }, // tab 3
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_PARK_PRICE_TAB_TIP }, // tab 4
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_PARK_STATS_TAB_TIP }, // tab 5
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_PARK_OBJECTIVE_TAB_TIP }, // tab 6
{ WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_PARK_AWARDS_TAB_TIP }, // tab 7
{ WWT_DROPDOWN_BUTTON, 1, 7, 222, 209, 220, STR_ENTER_NAME_INTO_SCENARIO_CHART, STR_NONE }, // enter name
2014-04-14 22:25:20 +02:00
{ WIDGETS_END },
};
2014-04-16 03:05:49 +02:00
static rct_widget window_park_awards_widgets[] = {
{ WWT_FRAME, 0, 0, 229, 0, 223, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 228, 1, 14, 0x361, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 217, 227, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_IMGBTN, 1, 0, 229, 43, 173, 0x0FFFFFFFF, STR_NONE }, // tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_PARK_ENTRANCE_TAB_TIP }, // tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_PARK_RATING_TAB_TIP }, // tab 2
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_PARK_GUESTS_TAB_TIP }, // tab 3
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_PARK_PRICE_TAB_TIP }, // tab 4
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_PARK_STATS_TAB_TIP }, // tab 5
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_PARK_OBJECTIVE_TAB_TIP }, // tab 6
{ WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_PARK_AWARDS_TAB_TIP }, // tab 7
{ WIDGETS_END },
};
static rct_widget *window_park_page_widgets[] = {
window_park_entrance_widgets,
window_park_rating_widgets,
window_park_guests_widgets,
window_park_price_widgets,
window_park_stats_widgets,
window_park_objective_widgets,
window_park_awards_widgets
};
#pragma endregion
#pragma region Events
static void window_park_emptysub() { }
static void window_park_entrance_close();
static void window_park_entrance_mouseup();
static void window_park_entrance_resize();
2014-04-17 16:12:41 +02:00
static void window_park_entrance_mousedown();
static void window_park_entrance_dropdown();
2014-04-16 03:05:49 +02:00
static void window_park_entrance_update();
2014-04-17 16:12:41 +02:00
static void window_park_entrance_toolupdate();
static void window_park_entrance_tooldown();
static void window_park_entrance_tooldrag();
static void window_park_entrance_toolabort();
2014-04-17 04:19:30 +02:00
static void window_park_entrance_textinput();
2014-04-16 03:05:49 +02:00
static void window_park_entrance_invalidate();
static void window_park_entrance_paint();
static void window_park_rating_mouseup();
2014-04-18 01:07:06 +02:00
static void window_park_rating_resize();
2014-04-16 03:05:49 +02:00
static void window_park_rating_update();
static void window_park_rating_invalidate();
static void window_park_rating_paint();
static void window_park_guests_mouseup();
2014-04-18 01:07:06 +02:00
static void window_park_guests_resize();
2014-04-16 03:05:49 +02:00
static void window_park_guests_update();
static void window_park_guests_invalidate();
static void window_park_guests_paint();
static void window_park_price_mouseup();
2014-04-18 01:07:06 +02:00
static void window_park_price_resize();
static void window_park_price_mousedown();
2014-04-16 03:05:49 +02:00
static void window_park_price_update();
static void window_park_price_invalidate();
static void window_park_price_paint();
static void window_park_stats_mouseup();
2014-04-18 01:07:06 +02:00
static void window_park_stats_resize();
2014-04-16 03:05:49 +02:00
static void window_park_stats_update();
static void window_park_stats_invalidate();
static void window_park_stats_paint();
2014-04-14 22:25:20 +02:00
static void window_park_objective_mouseup();
2014-04-18 01:07:06 +02:00
static void window_park_objective_resize();
2014-04-14 22:25:20 +02:00
static void window_park_objective_update();
static void window_park_objective_invalidate();
static void window_park_objective_paint();
2014-04-16 03:05:49 +02:00
static void window_park_awards_mouseup();
2014-04-18 01:07:06 +02:00
static void window_park_awards_resize();
2014-04-16 03:05:49 +02:00
static void window_park_awards_update();
static void window_park_awards_invalidate();
static void window_park_awards_paint();
static uint32 window_park_entrance_events[] = {
window_park_entrance_close,
window_park_entrance_mouseup,
window_park_entrance_resize,
2014-04-17 16:12:41 +02:00
window_park_entrance_mousedown,
window_park_entrance_dropdown,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_entrance_update,
window_park_emptysub,
window_park_emptysub,
2014-04-17 16:12:41 +02:00
window_park_entrance_toolupdate,
window_park_entrance_tooldown,
window_park_entrance_tooldrag,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
2014-04-17 16:12:41 +02:00
window_park_entrance_toolabort,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
2014-04-17 04:19:30 +02:00
window_park_entrance_textinput,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_entrance_invalidate,
window_park_entrance_paint,
window_park_emptysub
};
static uint32 window_park_rating_events[] = {
window_park_emptysub,
window_park_rating_mouseup,
2014-04-18 01:07:06 +02:00
window_park_rating_resize,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_rating_update,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_rating_invalidate,
window_park_rating_paint,
window_park_emptysub
};
static uint32 window_park_guests_events[] = {
window_park_emptysub,
window_park_guests_mouseup,
2014-04-18 01:07:06 +02:00
window_park_guests_resize,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_guests_update,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_guests_invalidate,
window_park_guests_paint,
window_park_emptysub
};
static uint32 window_park_price_events[] = {
window_park_emptysub,
window_park_price_mouseup,
2014-04-18 01:07:06 +02:00
window_park_price_resize,
window_park_price_mousedown,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_price_update,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_price_invalidate,
window_park_price_paint,
window_park_emptysub
};
static uint32 window_park_stats_events[] = {
window_park_emptysub,
window_park_stats_mouseup,
2014-04-18 01:07:06 +02:00
window_park_stats_resize,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_stats_update,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_stats_invalidate,
window_park_stats_paint,
window_park_emptysub
};
2014-04-14 22:25:20 +02:00
static uint32 window_park_objective_events[] = {
2014-04-16 03:05:49 +02:00
window_park_emptysub,
2014-04-14 22:25:20 +02:00
window_park_objective_mouseup,
2014-04-18 01:07:06 +02:00
window_park_objective_resize,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
2014-04-14 22:25:20 +02:00
window_park_objective_update,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
2014-04-14 22:25:20 +02:00
window_park_objective_invalidate,
window_park_objective_paint,
2014-04-16 03:05:49 +02:00
window_park_emptysub
2014-04-14 22:25:20 +02:00
};
2014-04-16 03:05:49 +02:00
static uint32 window_park_awards_events[] = {
window_park_emptysub,
window_park_awards_mouseup,
2014-04-18 01:07:06 +02:00
window_park_awards_resize,
2014-04-16 03:05:49 +02:00
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_awards_update,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_awards_invalidate,
window_park_awards_paint,
window_park_emptysub
};
static uint32 *window_park_page_events[] = {
window_park_entrance_events,
window_park_rating_events,
window_park_guests_events,
window_park_price_events,
window_park_stats_events,
window_park_objective_events,
window_park_awards_events
};
#pragma endregion
#pragma region Enabled widgets
static uint32 window_park_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7) |
(1 << WIDX_OPEN_OR_CLOSE) |
(1 << WIDX_BUY_LAND_RIGHTS) |
(1 << WIDX_BUY_CONSTRUCTION_RIGHTS) |
(1 << WIDX_LOCATE) |
(1 << WIDX_RENAME),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7) |
(1 << WIDX_INCREASE_PRICE) |
(1 << WIDX_DECREASE_PRICE),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7) |
(1 << WIDX_ENTER_NAME),
(1 << WIDX_CLOSE) |
(1 << WIDX_TAB_1) |
(1 << WIDX_TAB_2) |
(1 << WIDX_TAB_3) |
(1 << WIDX_TAB_4) |
(1 << WIDX_TAB_5) |
(1 << WIDX_TAB_6) |
(1 << WIDX_TAB_7)
};
#pragma endregion
static void window_park_init_viewport(rct_window *w);
static void window_park_scroll_to_viewport(rct_window *w);
2014-04-16 03:05:49 +02:00
static void window_park_set_page(rct_window *w, int page);
static void window_park_anchor_border_widgets(rct_window *w);
2014-04-14 22:25:20 +02:00
static void window_park_align_tabs(rct_window *w);
2014-04-16 03:05:49 +02:00
static void window_park_set_pressed_tab(rct_window *w);
2014-04-14 22:25:20 +02:00
static void window_park_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w);
2014-04-18 23:47:25 +02:00
static void window_park_graph_draw_months(rct_drawpixelinfo *dpi, uint8 *history, int baseX, int baseY);
static void window_park_graph_draw_line_a(rct_drawpixelinfo *dpi, uint8 *history, int baseX, int baseY);
static void window_park_graph_draw_line_b(rct_drawpixelinfo *dpi, uint8 *history, int baseX, int baseY);
2014-04-14 22:25:20 +02:00
/**
*
* rct2: 0x00667F11
*/
rct_window *window_park_open()
{
rct_window* w;
2014-04-19 04:16:20 +02:00
w = window_create_auto_pos(230, 174, window_park_entrance_events, WC_PARK_INFORMATION, 0x0400);
2014-04-17 04:19:30 +02:00
w->widgets = window_park_entrance_widgets;
w->enabled_widgets = window_park_page_enabled_widgets[WINDOW_PARK_PAGE_ENTRANCE];
2014-04-14 22:25:20 +02:00
w->number = 0;
2014-04-16 03:05:49 +02:00
w->page = WINDOW_PARK_PAGE_ENTRANCE;
2014-04-14 22:25:20 +02:00
w->var_482 = 0;
w->var_48E = 0;
w->var_490 = -1;
w->var_48C = -1;
w->var_492 = 0;
RCT2_CALLPROC_X(0x00667F8B, 0, 0, 0, 0, w, 0, 0);
w->colours[0] = 1;
w->colours[1] = 19;
w->colours[2] = 19;
return w;
}
2014-04-16 03:05:49 +02:00
#pragma region Entrance page
2014-04-17 04:19:30 +02:00
/**
*
* rct2: 0x00667C48
*/
void window_park_entrance_open()
{
rct_window* window;
window = window_bring_to_front_by_id(WC_PARK_INFORMATION, 0);
if (window == NULL) {
window = window_park_open();
window->var_482 = -1;
window->var_484 = -1;
}
window->page = WINDOW_PARK_PAGE_ENTRANCE;
window_invalidate(window);
window->widgets = window_park_entrance_widgets;
window->enabled_widgets = window_park_page_enabled_widgets[WINDOW_PARK_PAGE_ENTRANCE];
window->event_handlers = window_park_entrance_events;
window->pressed_widgets = 0;
window_init_scroll_widgets(window);
window_park_init_viewport(window);
2014-04-17 04:19:30 +02:00
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x0066860C
*/
static void window_park_entrance_close()
{
rct_window *w;
__asm mov w, esi
if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3))
if (w->classification == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, rct_windowclass) && w->number == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWNUMBER, rct_windownumber))
2014-04-16 03:05:49 +02:00
RCT2_CALLPROC_EBPSAFE(0x006EE281);
}
/**
*
* rct2: 0x0066817C
*/
static void window_park_entrance_mouseup()
{
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB_1:
case WIDX_TAB_2:
case WIDX_TAB_3:
case WIDX_TAB_4:
case WIDX_TAB_5:
case WIDX_TAB_6:
case WIDX_TAB_7:
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_BUY_LAND_RIGHTS:
2014-04-17 16:12:41 +02:00
RCT2_CALLPROC_X(0x006682F7, 0, 0, 0, widgetIndex, w, 0, 0);
2014-04-16 03:05:49 +02:00
break;
case WIDX_BUY_CONSTRUCTION_RIGHTS:
2014-04-17 16:12:41 +02:00
RCT2_CALLPROC_X(0x00668393, 0, 0, 0, widgetIndex, w, 0, 0);
2014-04-16 03:05:49 +02:00
break;
case WIDX_LOCATE:
window_park_scroll_to_viewport(w);
2014-04-16 03:05:49 +02:00
break;
case WIDX_RENAME:
2014-04-17 04:19:30 +02:00
RCT2_GLOBAL(0x013CE962, uint32) = RCT2_GLOBAL(0x013573D8, uint32);
window_show_textinput(w, WIDX_RENAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, RCT2_GLOBAL(0x013573D4, uint32));
2014-04-16 03:05:49 +02:00
break;
}
}
/**
*
* rct2: 0x00668637
*/
static void window_park_entrance_resize()
{
rct_window *w;
__asm mov w, esi
w->flags |= WF_RESIZABLE;
2014-04-25 04:02:06 +02:00
window_set_resize(w, 230, 174 + 9, 230 * 3, (274 + 9) * 3);
window_park_init_viewport(w);
}
2014-04-17 16:12:41 +02:00
/**
*
* rct2: 0x006681BF
*/
static void window_park_entrance_mousedown()
{
short widgetIndex;
rct_window *w;
rct_widget *widget;
__asm mov widgetIndex, dx
__asm mov w, esi
__asm mov widget, edi
if (widgetIndex == WIDX_OPEN_OR_CLOSE) {
gDropdownItemsFormat[0] = 1142;
gDropdownItemsFormat[1] = 1142;
gDropdownItemsArgs[0] = STR_CLOSE_PARK;
gDropdownItemsArgs[1] = STR_OPEN_PARK;
window_dropdown_show_text(
w->x + widget->left,
w->y + widget->top,
widget->bottom - widget->top + 1,
w->colours[1],
0,
2
);
if (park_is_open()) {
RCT2_GLOBAL(0x009DEBA2, sint16) = 0;
gDropdownItemsChecked |= (1 << 1);
} else {
RCT2_GLOBAL(0x009DEBA2, sint16) = 1;
gDropdownItemsChecked |= (1 << 0);
}
}
}
/**
*
* rct2: 0x006682B8
*/
static void window_park_entrance_dropdown()
{
short widgetIndex, dropdownIndex;
__asm mov dropdownIndex, ax
__asm mov widgetIndex, dx
if (widgetIndex == WIDX_OPEN_OR_CLOSE) {
if (dropdownIndex == -1)
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
if (dropdownIndex != 0) {
dropdownIndex &= 0x00FF;
dropdownIndex |= 0x0100;
RCT2_GLOBAL(0x0141E9AE, uint16) = 1724;
} else {
dropdownIndex &= 0x00FF;
RCT2_GLOBAL(0x0141E9AE, uint16) = 1723;
}
RCT2_CALLPROC_X(0x006677F2, 0, 1, 0, dropdownIndex, 34, 0, 0);
}
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x006686B5
*/
static void window_park_entrance_update()
{
rct_window *w;
__asm mov w, esi
w->var_48E++;
window_invalidate_by_id(w->classification, 1179);
}
2014-04-17 16:12:41 +02:00
/**
*
* rct2: 0x006681D1
*/
static void window_park_entrance_toolupdate()
{
int x, y;
short widgetIndex;
rct_window *w, *mainWindow;
__asm mov x, eax
__asm mov y, ebx
__asm mov widgetIndex, dx
__asm mov w, esi
if (widgetIndex == WIDX_BUY_LAND_RIGHTS) {
RCT2_CALLPROC_X(0x0068AAE1, x, y, 0, 0, w, 0, 0);
RCT2_GLOBAL(0x009DE58A, uint16) &= 0xFFFE;
screen_pos_to_map_pos(&x, &y);
if (x != 0x8000) {
RCT2_GLOBAL(0x009DE58A, uint16) |= 1;
RCT2_GLOBAL(0x009DE594, uint16) = 4;
RCT2_GLOBAL(0x009DE58C, uint16) = x;
RCT2_GLOBAL(0x009DE58E, uint16) = x;
RCT2_GLOBAL(0x009DE590, uint16) = y;
RCT2_GLOBAL(0x009DE592, uint16) = y;
RCT2_CALLPROC_X(0x0068AAE1, x, y, 0, 0, w, 0, 0);
}
}
}
/**
*
* rct2: 0x006681E6
*/
static void window_park_entrance_tooldown()
{
short x, y, widgetIndex;
rct_window *w, *mainWindow;
__asm mov x, ax
__asm mov y, bx
__asm mov widgetIndex, dx
__asm mov w, esi
RCT2_CALLPROC_X(0x006681E6, x, y, 0, widgetIndex, w, 0, 0);
}
/**
*
* rct2: 0x006681FB
*/
static void window_park_entrance_tooldrag()
{
short x, y, widgetIndex;
rct_window *w, *mainWindow;
__asm mov x, ax
__asm mov y, bx
__asm mov widgetIndex, dx
__asm mov w, esi
RCT2_CALLPROC_X(0x006681FB, x, y, 0, widgetIndex, w, 0, 0);
}
/**
*
* rct2: 0x0066822A
*/
static void window_park_entrance_toolabort()
{
short widgetIndex;
rct_window *w, *mainWindow;
__asm mov widgetIndex, dx
__asm mov w, esi
if (widgetIndex == WIDX_BUY_LAND_RIGHTS) {
hide_gridlines();
hide_land_rights();
} else if (widgetIndex == WIDX_BUY_CONSTRUCTION_RIGHTS) {
hide_gridlines();
hide_construction_rights();
}
}
2014-04-17 04:19:30 +02:00
/**
*
* rct2: 0x0066848B
*/
static void window_park_entrance_textinput()
{
uint8 result;
short widgetIndex;
rct_window *w;
char *text;
__asm mov result, cl
__asm mov widgetIndex, dx
__asm mov w, esi
__asm mov text, edi
if (widgetIndex == WIDX_RENAME) {
if (result) {
RCT2_GLOBAL(0x0141E9AE, uint16) = STR_CANT_RENAME_PARK;
RCT2_CALLPROC_X(0x006677F2, 1, 1, 0, *((int*)(text + 0)), '!', *((int*)(text + 8)), *((int*)(text + 4)));
RCT2_CALLPROC_X(0x006677F2, 2, 1, 0, *((int*)(text + 12)), '!', *((int*)(text + 20)), *((int*)(text + 16)));
RCT2_CALLPROC_X(0x006677F2, 0, 1, 0, *((int*)(text + 24)), '!', *((int*)(text + 32)), *((int*)(text + 28)));
}
}
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x00667FDC
*/
static void window_park_entrance_invalidate()
{
int i;
rct_window *w;
__asm mov w, esi
w->widgets = window_park_page_widgets[w->page];
window_init_scroll_widgets(w);
window_park_set_pressed_tab(w);
// Set open / close park button state
RCT2_GLOBAL(0x013CE952, uint16) = RCT2_GLOBAL(0x013573D4, uint16);
RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x013573D8, uint32);
window_park_entrance_widgets[WIDX_OPEN_OR_CLOSE].image = park_is_open() ? SPR_OPEN : SPR_CLOSED;
// Only allow closing of park for guest / rating objective
if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) == OBJECTIVE_GUESTS_AND_RATING)
w->disabled_widgets |= (1 << WIDX_OPEN_OR_CLOSE);
window_park_align_tabs(w);
window_park_anchor_border_widgets(w);
// Anchor entrance page specific widgets
window_park_entrance_widgets[WIDX_VIEWPORT].right = w->width - 26;
window_park_entrance_widgets[WIDX_VIEWPORT].bottom = w->height - 14;
window_park_entrance_widgets[WIDX_STATUS].right = w->width - 26;
window_park_entrance_widgets[WIDX_STATUS].top = w->height - 13;
window_park_entrance_widgets[WIDX_STATUS].bottom = w->height - 3;
for (i = WIDX_OPEN_OR_CLOSE; i <= WIDX_RENAME; i++) {
window_park_entrance_widgets[i].left = w->width - 25;
window_park_entrance_widgets[i].right = w->width - 2;
}
2014-04-16 03:05:49 +02:00
// Only allow closing of park and purchase of land when there is money
if (RCT2_GLOBAL(RCT2_ADDRESS_GAME_FLAGS, uint32) & GAME_FLAGS_NO_MONEY) {
window_park_entrance_widgets[WIDX_OPEN_OR_CLOSE].type = WWT_EMPTY;
window_park_entrance_widgets[WIDX_BUY_LAND_RIGHTS].type = WWT_EMPTY;
window_park_entrance_widgets[WIDX_BUY_CONSTRUCTION_RIGHTS].type = WWT_EMPTY;
} else {
window_park_entrance_widgets[WIDX_OPEN_OR_CLOSE].type = WWT_FLATBTN;
window_park_entrance_widgets[WIDX_BUY_LAND_RIGHTS].type = WWT_FLATBTN;
window_park_entrance_widgets[WIDX_BUY_CONSTRUCTION_RIGHTS].type = WWT_FLATBTN;
}
}
/**
*
* rct2: 0x006680D0
*/
static void window_park_entrance_paint()
{
int i, x, y;
rct_window *w;
rct_drawpixelinfo *dpi;
rct_widget *labelWidget;
__asm mov w, esi
__asm mov dpi, edi
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
// Draw viewport
if (w->viewport != NULL) {
2014-04-17 04:19:30 +02:00
window_draw_viewport(dpi, w);
2014-04-16 03:05:49 +02:00
if (w->viewport->flags & VIEWPORT_FLAG_SOUND_ON)
gfx_draw_sprite(dpi, SPR_HEARING_VIEWPORT, w->x + 2, w->y + 2);
}
// Draw park closed / open label
RCT2_GLOBAL(0x013CE952, uint16) = park_is_open() ? STR_PARK_OPEN : STR_PARK_CLOSED;
labelWidget = &window_park_entrance_widgets[WIDX_STATUS];
gfx_draw_string_centred_clipped(
dpi,
1191,
0x013CE952,
0,
w->x + (labelWidget->left + labelWidget->right) / 2,
w->y + labelWidget->top,
labelWidget->right - labelWidget->left
);
}
/**
*
* rct2: 0x00669B55
*/
static void window_park_init_viewport(rct_window *w)
{
int i, x, y, z, r, xy, zr, viewportFlags;
rct_viewport *viewport;
rct_widget *viewportWidget;
if (w->page != WINDOW_PARK_PAGE_ENTRANCE)
return;
for (i = 0; i < 4; i++) {
if (RCT2_ADDRESS(RCT2_ADDRESS_PARK_ENTRANCE_X, uint16)[i] != 0x8000) {
x = RCT2_ADDRESS(RCT2_ADDRESS_PARK_ENTRANCE_X, uint16)[i] + 16;
y = RCT2_ADDRESS(RCT2_ADDRESS_PARK_ENTRANCE_Y, uint16)[i] + 16;
z = RCT2_ADDRESS(RCT2_ADDRESS_PARK_ENTRANCE_Z, uint16)[i] + 32;
r = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8);
xy = 0x40000000 | (y << 16) | x;
zr = (z << 16) | (r << 8);
break;
}
}
if (w->viewport == NULL) {
viewportFlags = (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES) ? VIEWPORT_FLAG_GRIDLINES : 0;
} else {
// if (w->var_482 == x && w->var_484 == y && w->var_486 == z && (uint16)w->var_488 >> 8 == r)
// return;
viewport = w->viewport;
w->viewport = NULL;
viewportFlags = viewport->flags;
viewport->width = 0;
viewport_update_pointers();
}
// Call invalidate event
RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, w, 0, 0);
w->var_482 = x;
w->var_484 = y;
w->var_486 = z;
w->var_488 = r << 8;
if (zr != 0xFFFF) {
// Create viewport
if (w->viewport == NULL) {
viewportWidget = &window_park_entrance_widgets[WIDX_VIEWPORT];
viewport_create(
w,
w->x + viewportWidget->left + 1,
w->y + viewportWidget->top + 1,
(viewportWidget->right - viewportWidget->left) - 2,
(viewportWidget->bottom - viewportWidget->top) - 2,
zr,
xy
);
w->flags |= (1 << 2);
window_invalidate(w);
}
}
if (w->viewport != NULL)
w->viewport->flags = viewportFlags;
window_invalidate(w);
}
static void window_park_scroll_to_viewport(rct_window *w)
{
int x, y, z;
rct_window *mainWindow;
if (w->viewport == NULL || *((sint32*)&w->var_482) == -1)
return;
if (*((uint32*)&w->var_486) & 0x80000000) {
rct_sprite *sprite = &(RCT2_ADDRESS(RCT2_ADDRESS_SPRITE_LIST, rct_sprite)[w->var_482]);
x = sprite->unknown.x;
y = sprite->unknown.y;
z = sprite->unknown.z;
} else {
x = w->var_482;
y = w->var_484;
z = w->var_486;
}
mainWindow = window_get_main();
if (mainWindow != NULL)
window_scroll_to_location(mainWindow, x, y, z);
}
2014-04-16 03:05:49 +02:00
#pragma endregion
#pragma region Rating page
/**
*
* rct2: 0x00668A06
*/
static void window_park_rating_mouseup()
{
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
if (widgetIndex == WIDX_CLOSE)
window_close(w);
else if (widgetIndex >= WIDX_TAB_1 && widgetIndex <= WIDX_TAB_7)
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
}
2014-04-18 01:07:06 +02:00
/**
*
* rct2: 0x00668A36
*/
static void window_park_rating_resize()
{
rct_window *w;
__asm mov w, esi
2014-04-25 04:02:06 +02:00
window_set_resize(w, 230, 182, 230, 182);
2014-04-18 01:07:06 +02:00
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x00668A21
*/
static void window_park_rating_update()
{
rct_window *w;
__asm mov w, esi
w->var_48E++;
widget_invalidate(w->classification, w->number, WIDX_TAB_2);
}
/**
*
* rct2: 0x006686CB
*/
static void window_park_rating_invalidate()
{
int i;
rct_window *w;
rct_widget **widgets;
__asm mov w, esi
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
w->widgets = widgets;
window_init_scroll_widgets(w);
}
window_park_set_pressed_tab(w);
RCT2_GLOBAL(0x013CE952, uint16) = RCT2_GLOBAL(0x013573D4, uint16);
RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x013573D8, uint32);
window_park_align_tabs(w);
window_park_anchor_border_widgets(w);
}
/**
*
* rct2: 0x0066875D
*/
static void window_park_rating_paint()
{
2014-04-18 23:47:25 +02:00
int x, y;
2014-04-16 03:05:49 +02:00
rct_window *w;
rct_drawpixelinfo *dpi;
2014-04-18 23:47:25 +02:00
rct_widget *widget;
uint8 *history;
2014-04-16 03:05:49 +02:00
__asm mov w, esi
__asm mov dpi, edi
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
2014-04-18 23:47:25 +02:00
x = w->x;
y = w->y;
widget = &window_park_rating_widgets[WIDX_PAGE_BACKGROUND];
// Current value
gfx_draw_string_left(dpi, STR_PARK_RATING_LABEL, RCT2_ADDRESS_CURRENT_PARK_RATING, 0, x + widget->left + 3, y + widget->top + 2);
// Graph border
gfx_fill_rect_inset(dpi, x + widget->left + 4, y + widget->top + 15, x + widget->right - 4, y + widget->bottom - 4, w->colours[1], 0x30);
// Graph
x += widget->left + 22;
y += widget->top + 26;
history = RCT2_ADDRESS(RCT2_ADDRESS_PARK_RATING_HISTORY, uint8);
window_park_graph_draw_months(dpi, history, x, y);
window_park_graph_draw_line_a(dpi, history, x, y);
window_park_graph_draw_line_b(dpi, history, x, y);
2014-04-16 03:05:49 +02:00
}
#pragma endregion
#pragma region Guests page
/**
*
* rct2: 0x00668DEB
*/
static void window_park_guests_mouseup()
{
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
if (widgetIndex == WIDX_CLOSE)
window_close(w);
else if (widgetIndex >= WIDX_TAB_1 && widgetIndex <= WIDX_TAB_7)
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
}
2014-04-18 01:07:06 +02:00
/**
*
* rct2: 0x00668E33
*/
static void window_park_guests_resize()
{
rct_window *w;
__asm mov w, esi
2014-04-25 04:02:06 +02:00
window_set_resize(w, 230, 182, 230, 182);
2014-04-18 01:07:06 +02:00
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x00668E06
*/
static void window_park_guests_update()
{
rct_window *w;
__asm mov w, esi
w->var_48E++;
w->var_492 = (w->var_492 + 1) % 24;
widget_invalidate(w->classification, w->number, WIDX_TAB_3);
}
/**
*
* rct2: 0x00668AB0
*/
static void window_park_guests_invalidate()
{
int i;
rct_window *w;
rct_widget **widgets;
__asm mov w, esi
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
w->widgets = widgets;
window_init_scroll_widgets(w);
}
window_park_set_pressed_tab(w);
RCT2_GLOBAL(0x013CE952, uint16) = RCT2_GLOBAL(0x013573D4, uint16);
RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x013573D8, uint32);
window_park_align_tabs(w);
window_park_anchor_border_widgets(w);
}
/**
*
* rct2: 0x00668B42
*/
static void window_park_guests_paint()
{
2014-04-18 23:47:25 +02:00
int x, y;
2014-04-16 03:05:49 +02:00
rct_window *w;
rct_drawpixelinfo *dpi;
2014-04-18 23:47:25 +02:00
rct_widget *widget;
uint8 *history;
2014-04-16 03:05:49 +02:00
__asm mov w, esi
__asm mov dpi, edi
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
2014-04-18 23:47:25 +02:00
x = w->x;
y = w->y;
widget = &window_park_guests_widgets[WIDX_PAGE_BACKGROUND];
// Current value
gfx_draw_string_left(dpi, STR_GUESTS_IN_PARK_LABEL, RCT2_ADDRESS_GUESTS_IN_PARK, 0, x + widget->left + 3, y + widget->top + 2);
// Graph border
gfx_fill_rect_inset(dpi, x + widget->left + 4, y + widget->top + 15, x + widget->right - 4, y + widget->bottom - 4, w->colours[1], 0x30);
// Graph
x += widget->left + 22;
y += widget->top + 26;
history = RCT2_ADDRESS(RCT2_ADDRESS_GUESTS_IN_PARK_HISTORY, uint8);
window_park_graph_draw_months(dpi, history, x, y);
window_park_graph_draw_line_a(dpi, history, x, y);
window_park_graph_draw_line_b(dpi, history, x, y);
2014-04-16 03:05:49 +02:00
}
#pragma endregion
#pragma region Price page
/**
*
* rct2: 0x00669011
*/
static void window_park_price_mouseup()
{
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
if (widgetIndex == WIDX_CLOSE)
window_close(w);
else if (widgetIndex >= WIDX_TAB_1 && widgetIndex <= WIDX_TAB_7)
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
}
2014-04-18 01:07:06 +02:00
/**
*
* rct2: 0x0066908C
*/
static void window_park_price_resize()
{
rct_window *w;
__asm mov w, esi
2014-04-25 04:02:06 +02:00
window_set_resize(w, 230, 124, 230, 124);
2014-04-18 01:07:06 +02:00
}
/**
*
* rct2: 0x0066902C
*/
static void window_park_price_mousedown()
{
int newFee;
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB_1:
case WIDX_TAB_2:
case WIDX_TAB_3:
case WIDX_TAB_4:
case WIDX_TAB_5:
case WIDX_TAB_6:
case WIDX_TAB_7:
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_INCREASE_PRICE:
newFee = min(1000, RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, uint16) + 10);
RCT2_CALLPROC_X(0x006677F2, 0, 1, 0, 0, 39, newFee, 0);
break;
case WIDX_DECREASE_PRICE:
newFee = max(0, RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, uint16) - 10);
RCT2_CALLPROC_X(0x006677F2, 0, 1, 0, 0, 39, newFee, 0);
break;
}
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x00669077
*/
static void window_park_price_update()
{
rct_window *w;
__asm mov w, esi
w->var_48E++;
widget_invalidate(w->classification, w->number, WIDX_TAB_4);
}
/**
*
* rct2: 0x00668EAD
*/
static void window_park_price_invalidate()
{
int i;
rct_window *w;
rct_widget **widgets;
__asm mov w, esi
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
w->widgets = widgets;
window_init_scroll_widgets(w);
}
window_park_set_pressed_tab(w);
RCT2_GLOBAL(0x013CE952, uint16) = RCT2_GLOBAL(0x013573D4, uint16);
RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x013573D8, uint32);
if (RCT2_GLOBAL(RCT2_ADDRESS_GAME_FLAGS, uint32) & GAME_FLAGS_PARK_FREE_ENTRY) {
window_park_price_widgets[WIDX_PRICE].type = WWT_12;
window_park_price_widgets[WIDX_INCREASE_PRICE].type = WWT_EMPTY;
window_park_price_widgets[WIDX_DECREASE_PRICE].type = WWT_EMPTY;
} else {
window_park_price_widgets[WIDX_PRICE].type = WWT_15;
window_park_price_widgets[WIDX_INCREASE_PRICE].type = WWT_DROPDOWN_BUTTON;
window_park_price_widgets[WIDX_DECREASE_PRICE].type = WWT_DROPDOWN_BUTTON;
}
RCT2_GLOBAL(0x013CE952 + 6, uint32) = RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, uint16);
window_park_price_widgets[WIDX_PRICE].image = RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, uint16) == 0 ? STR_FREE : 1429;
2014-04-16 03:05:49 +02:00
window_park_align_tabs(w);
window_park_anchor_border_widgets(w);
}
/**
*
* rct2: 0x00668F99
*/
static void window_park_price_paint()
{
int x, y;
2014-04-16 03:05:49 +02:00
rct_window *w;
rct_drawpixelinfo *dpi;
__asm mov w, esi
__asm mov dpi, edi
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
x = w->x + window_park_price_widgets[WIDX_PAGE_BACKGROUND].left + 4;
y = w->y + window_park_price_widgets[WIDX_PAGE_BACKGROUND].top + 30;
gfx_draw_string_left(dpi, STR_TOTAL_ADMISSIONS, RCT2_ADDRESS_TOTAL_ADMISSIONS, 0, x, y);
y += 10;
gfx_draw_string_left(dpi, STR_INCOME_FROM_ADMISSIONS, RCT2_ADDRESS_INCOME_FROM_ADMISSIONS, 0, x, y);
2014-04-16 03:05:49 +02:00
}
#pragma endregion
#pragma region Stats page
/**
*
* rct2: 0x0066928C
*/
static void window_park_stats_mouseup()
{
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
if (widgetIndex == WIDX_CLOSE)
window_close(w);
else if (widgetIndex >= WIDX_TAB_1 && widgetIndex <= WIDX_TAB_7)
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
}
2014-04-18 01:07:06 +02:00
/**
*
* rct2: 0x00669338
*/
static void window_park_stats_resize()
{
rct_window *w;
__asm mov w, esi
2014-04-25 04:02:06 +02:00
window_set_resize(w, 230, 109, 230, 109);
2014-04-18 01:07:06 +02:00
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x006692A8
*/
static void window_park_stats_update()
{
int i;
rct_window *w;
__asm mov w, esi
w->var_48E++;
widget_invalidate(w->classification, w->number, WIDX_TAB_5);
// Invalidate ride count if changed
i = ride_get_count();
if (w->var_490 != i) {
w->var_490 = i;
widget_invalidate(w->classification, w->number, WIDX_PAGE_BACKGROUND);
}
// Invalidate number of staff if changed
i = peep_get_staff_count();
if (w->var_48C != i) {
w->var_48C = i;
widget_invalidate(w->classification, w->number, WIDX_PAGE_BACKGROUND);
}
}
/**
*
* rct2: 0x00669106
*/
static void window_park_stats_invalidate()
{
int i;
rct_window *w;
rct_widget **widgets;
__asm mov w, esi
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
w->widgets = widgets;
window_init_scroll_widgets(w);
}
window_park_set_pressed_tab(w);
RCT2_GLOBAL(0x013CE952, uint16) = RCT2_GLOBAL(0x013573D4, uint16);
RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x013573D8, uint32);
window_park_align_tabs(w);
window_park_anchor_border_widgets(w);
}
/**
*
* rct2: 0x00669198
*/
static void window_park_stats_paint()
{
int x, y, parkSize, stringIndex;
rct_window *w;
rct_drawpixelinfo *dpi;
rct_award *award;
__asm mov w, esi
__asm mov dpi, edi
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
x = w->x + window_park_awards_widgets[WIDX_PAGE_BACKGROUND].left + 4;
y = w->y + window_park_awards_widgets[WIDX_PAGE_BACKGROUND].top + 4;
// Draw park size
parkSize = RCT2_GLOBAL(0x013580EA, sint16) * 10;
stringIndex = STR_PARK_SIZE_METRIC_LABEL;
if (!RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_METRIC, uint8)) {
stringIndex = STR_PARK_SIZE_IMPERIAL_LABEL;
parkSize = squaredmetres_to_squaredfeet(parkSize);
}
RCT2_GLOBAL(0x013CE952, uint32) = parkSize;
gfx_draw_string_left(dpi, stringIndex, 0x013CE952, 0, x, y);
y += 10;
// Draw number of rides / attractions
if (w->var_490 != -1) {
RCT2_GLOBAL(0x013CE952, uint32) = w->var_490;
gfx_draw_string_left(dpi, STR_NUMBER_OF_RIDES_LABEL, 0x013CE952, 0, x, y);
}
y += 10;
// Draw number of staff
if (w->var_48C != -1) {
RCT2_GLOBAL(0x013CE952, uint32) = w->var_48C;
gfx_draw_string_left(dpi, STR_STAFF_LABEL, 0x013CE952, 0, x, y);
}
y += 10;
// Draw number of guests in park
gfx_draw_string_left(dpi, STR_GUESTS_IN_PARK_LABEL, RCT2_ADDRESS_GUESTS_IN_PARK, 0, x, y);
}
#pragma endregion
#pragma region Objective page
2014-04-14 22:25:20 +02:00
/**
*
* rct2: 0x00667E57
*/
void window_park_objective_open()
{
rct_window* window;
window = window_bring_to_front_by_id(WC_PARK_INFORMATION, 0);
if (window == NULL) {
window = window_park_open();
window->var_482 = -1;
window->var_484 = -1;
}
if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3))
if (window->classification == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, rct_windowclass) && window->number == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWNUMBER, rct_windownumber))
2014-04-14 22:25:20 +02:00
RCT2_CALLPROC_EBPSAFE(0x006EE281);
window->viewport = NULL;
2014-04-16 03:05:49 +02:00
window->page = WINDOW_PARK_PAGE_OBJECTIVE;
2014-04-14 22:25:20 +02:00
window_invalidate(window);
window->widgets = window_park_objective_widgets;
2014-04-16 03:05:49 +02:00
window->enabled_widgets = window_park_page_enabled_widgets[WINDOW_PARK_PAGE_OBJECTIVE];
2014-04-14 22:25:20 +02:00
window->var_020 = 0;
window->event_handlers = window_park_objective_events;
window_init_scroll_widgets(window);
window->x = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16) / 2 - 115;
window->y = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, sint16) / 2 - 87;
window_invalidate(window);
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x006695AA
*/
2014-04-14 22:25:20 +02:00
static void window_park_objective_mouseup()
{
2014-04-16 03:05:49 +02:00
int tabIndex;
2014-04-14 22:25:20 +02:00
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB_1:
case WIDX_TAB_2:
case WIDX_TAB_3:
case WIDX_TAB_4:
case WIDX_TAB_5:
case WIDX_TAB_6:
case WIDX_TAB_7:
2014-04-16 03:05:49 +02:00
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
2014-04-14 22:25:20 +02:00
break;
case WIDX_ENTER_NAME:
RCT2_CALLPROC_X(0x006EE308, 2791, 2792, 0, 0, 0, 0, 0);
break;
}
}
2014-04-18 01:07:06 +02:00
/**
*
* rct2: 0x00669681
*/
static void window_park_objective_resize()
{
rct_window *w;
__asm mov w, esi
2014-04-25 04:02:06 +02:00
window_set_resize(w, 230, 224, 230, 224);
2014-04-18 01:07:06 +02:00
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x0066966C
*/
2014-04-14 22:25:20 +02:00
static void window_park_objective_update()
{
rct_window *w;
__asm mov w, esi
w->var_48E++;
widget_invalidate(w->classification, w->number, WIDX_TAB_6);
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x006693B2
*/
2014-04-14 22:25:20 +02:00
static void window_park_objective_invalidate()
{
int i;
rct_window *w;
__asm mov w, esi
2014-04-16 03:05:49 +02:00
window_park_set_pressed_tab(w);
2014-04-14 22:25:20 +02:00
// Set window title arguments
*((short*)0x013CE952) = RCT2_GLOBAL(0x013573D4, uint16);
*((short*)0x013CE954) = RCT2_GLOBAL(0x013573D8, uint32);
//
if (RCT2_GLOBAL(RCT2_ADDRESS_GAME_FLAGS, uint32) & 0x02)
2014-04-14 22:25:20 +02:00
window_park_objective_widgets[WIDX_ENTER_NAME].type = WWT_DROPDOWN_BUTTON;
else
window_park_objective_widgets[WIDX_ENTER_NAME].type = WWT_EMPTY;
window_park_align_tabs(w);
2014-04-16 03:05:49 +02:00
window_park_anchor_border_widgets(w);
2014-04-14 22:25:20 +02:00
}
/**
*
* rct2: 0x0066945C
*/
static void window_park_objective_paint()
{
int i, x, y;
rct_window *w;
rct_drawpixelinfo *dpi;
__asm mov w, esi
__asm mov dpi, edi
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
// Scenario description
x = w->x + window_park_objective_widgets[WIDX_PAGE_BACKGROUND].left + 4;
y = w->y + window_park_objective_widgets[WIDX_PAGE_BACKGROUND].top + 7;
strcpy((char*)0x009BC677, RCT2_ADDRESS(RCT2_ADDRESS_SCENARIO_DETAILS, char));
*((short*)0x013CE952) = 3165;
y += gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, 222, 1191, 0);
y += 5;
// Your objective:
gfx_draw_string_left(dpi, 2384, NULL, 0, x, y);
y += 10;
// Objective
*((short*)0x013CE952) = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16);
*((short*)0x013CE954) = date_get_total_months(MONTH_OCTOBER, RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8));
*((int*)0x013CE956) = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, sint32);
gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, 221, 2385 + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8), 0);
y += 5;
// Objective outcome
if (RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32) != 0x80000000) {
if (RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32) == 0x80000001) {
// Objective failed
gfx_draw_string_left_wrapped(dpi, NULL, x, y, 222, 2789, 0);
} else {
// Objective completed
*((int*)0x013CE952) = RCT2_GLOBAL(RCT2_ADDRESS_COMPLETED_COMPANY_VALUE, uint32);
gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, 222, 2788, 0);
}
}
}
2014-04-16 03:05:49 +02:00
#pragma endregion
#pragma region Awards page
/**
*
* rct2: 0x00669851
*/
static void window_park_awards_mouseup()
{
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
if (widgetIndex == WIDX_CLOSE)
window_close(w);
else if (widgetIndex >= WIDX_TAB_1 && widgetIndex <= WIDX_TAB_7)
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
}
2014-04-18 01:07:06 +02:00
/**
*
* rct2: 0x00669882
*/
static void window_park_awards_resize()
{
rct_window *w;
__asm mov w, esi
2014-04-25 04:02:06 +02:00
window_set_resize(w, 230, 182, 230, 182);
2014-04-18 01:07:06 +02:00
}
2014-04-16 03:05:49 +02:00
/**
*
* rct2: 0x0066986D
*/
static void window_park_awards_update()
{
rct_window *w;
__asm mov w, esi
w->var_48E++;
window_invalidate_by_id(w->classification, 1179);
}
/**
*
* rct2: 0x006696FB
*/
static void window_park_awards_invalidate()
{
int i;
rct_window *w;
rct_widget **widgets;
__asm mov w, esi
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
w->widgets = widgets;
window_init_scroll_widgets(w);
}
window_park_set_pressed_tab(w);
RCT2_GLOBAL(0x013CE952, uint16) = RCT2_GLOBAL(0x013573D4, uint16);
RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x013573D8, uint32);
window_park_align_tabs(w);
window_park_anchor_border_widgets(w);
}
/**
*
* rct2: 0x0066978D
*/
static void window_park_awards_paint()
{
int i, count, x, y;
rct_window *w;
rct_drawpixelinfo *dpi;
rct_award *award;
__asm mov w, esi
__asm mov dpi, edi
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
x = w->x + window_park_awards_widgets[WIDX_PAGE_BACKGROUND].left + 4;
y = w->y + window_park_awards_widgets[WIDX_PAGE_BACKGROUND].top + 4;
count = 0;
for (i = 0; i < 4; i++) {
award = &RCT2_ADDRESS(RCT2_ADDRESS_AWARD_LIST, rct_award)[i];
if (award->time == 0)
continue;
gfx_draw_sprite(dpi, SPR_AWARD_MOST_UNTIDY + award->type, x, y);
gfx_draw_string_left_wrapped(dpi, STR_AWARD_MOST_UNTIDY, x + 34, y + 6, 180, 0, 0);
y += 32;
count++;
}
if (count == 0)
gfx_draw_string_left(dpi, STR_NO_RECENT_AWARDS, 0, 0, x + 6, y + 6);
}
#pragma endregion
2014-04-18 23:47:25 +02:00
#pragma region Common
2014-04-26 16:49:44 +02:00
/**
*
* rct2: 0x00668496
*/
2014-04-16 03:05:49 +02:00
static void window_park_set_page(rct_window *w, int page)
{
2014-04-26 16:49:44 +02:00
int listen;
2014-04-16 03:05:49 +02:00
if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3))
2014-04-26 16:49:44 +02:00
if (w->classification == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, rct_windowclass) && w->number == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWNUMBER, rct_windownumber))
2014-04-16 03:05:49 +02:00
RCT2_CALLPROC_EBPSAFE(0x006EE281);
2014-04-17 04:19:30 +02:00
// Set listen only to viewport
2014-04-26 16:49:44 +02:00
listen = 0;
2014-04-16 03:05:49 +02:00
if (page == WINDOW_PARK_PAGE_ENTRANCE && w->page == WINDOW_PARK_PAGE_ENTRANCE && w->viewport != NULL && !(w->viewport->flags & VIEWPORT_FLAG_SOUND_ON))
2014-04-26 16:49:44 +02:00
listen++;
2014-04-17 04:19:30 +02:00
2014-04-16 03:05:49 +02:00
w->page = page;
w->var_48E = 0;
w->var_492 = 0;
if (w->viewport != NULL) {
2014-04-26 16:49:44 +02:00
w->viewport->width = 0;
2014-04-16 03:05:49 +02:00
w->viewport = NULL;
}
w->enabled_widgets = window_park_page_enabled_widgets[page];
w->var_020 = RCT2_GLOBAL(0x0097BAE0 + (page * 4), uint32);
w->event_handlers = window_park_page_events[page];
w->widgets = window_park_page_widgets[page];
RCT2_CALLPROC_X(0x00667F8B, 0, 0, 0, 0, w, 0, 0);
window_invalidate(w);
2014-04-18 04:04:46 +02:00
RCT2_CALLPROC_X(w->event_handlers[WE_RESIZE], 0, 0, 0, 0, w, 0, 0);
2014-04-16 03:05:49 +02:00
RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, w, 0, 0);
2014-04-26 16:49:44 +02:00
if (listen != 0 && w->viewport != NULL)
2014-04-16 03:05:49 +02:00
w->viewport->flags |= VIEWPORT_FLAG_SOUND_ON;
}
static void window_park_anchor_border_widgets(rct_window *w)
{
w->widgets[WIDX_BACKGROUND].right = w->width - 1;
w->widgets[WIDX_BACKGROUND].bottom = w->height - 1;
w->widgets[WIDX_PAGE_BACKGROUND].right = w->width - 1;
w->widgets[WIDX_PAGE_BACKGROUND].bottom = w->height - 1;
w->widgets[WIDX_TITLE].right = w->width - 2;
w->widgets[WIDX_CLOSE].left = w->width - 13;
w->widgets[WIDX_CLOSE].right = w->width - 3;
}
2014-04-14 22:25:20 +02:00
static void window_park_align_tabs(rct_window *w)
{
int i, x, tab_width;
x = w->widgets[WIDX_TAB_1].left;
tab_width = w->widgets[WIDX_TAB_1].right - w->widgets[WIDX_TAB_1].left;
for (i = 0; i < 7; i++) {
if (w->disabled_widgets & (1 << (WIDX_TAB_1 + i)))
continue;
w->widgets[WIDX_TAB_1 + i].left = x;
w->widgets[WIDX_TAB_1 + i].right = x + tab_width;
x += tab_width + 1;
}
}
2014-04-16 03:05:49 +02:00
static void window_park_set_pressed_tab(rct_window *w)
{
int i;
for (i = 0; i < 7; i++)
w->pressed_widgets &= ~(1 << (WIDX_TAB_1 + i));
w->pressed_widgets |= 1 << (WIDX_TAB_1 + w->page);
}
2014-04-14 22:25:20 +02:00
static void window_park_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w)
{
int sprite_idx;
// Entrance tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_1)))
gfx_draw_sprite(dpi, 5200, w->x + w->widgets[WIDX_TAB_1].left, w->y + w->widgets[WIDX_TAB_1].top);
// Rating tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_2))) {
2014-04-16 03:05:49 +02:00
sprite_idx = SPR_TAB_GRAPH_0;
if (w->page == WINDOW_PARK_PAGE_RATING)
2014-04-14 22:25:20 +02:00
sprite_idx += (w->var_48E / 8) % 8;
gfx_draw_sprite(dpi, sprite_idx, w->x + w->widgets[WIDX_TAB_2].left, w->y + w->widgets[WIDX_TAB_2].top);
gfx_draw_sprite(dpi, SPR_RATING_HIGH, w->x + w->widgets[WIDX_TAB_2].left + 7, w->y + w->widgets[WIDX_TAB_2].top + 1);
gfx_draw_sprite(dpi, SPR_RATING_LOW, w->x + w->widgets[WIDX_TAB_2].left + 16, w->y + w->widgets[WIDX_TAB_2].top + 12);
}
2014-04-16 03:05:49 +02:00
// Guests tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_3))) {
sprite_idx = SPR_TAB_GRAPH_0;
if (w->page == WINDOW_PARK_PAGE_GUESTS)
sprite_idx += (w->var_48E / 8) % 8;
gfx_draw_sprite(dpi, sprite_idx, w->x + w->widgets[WIDX_TAB_3].left, w->y + w->widgets[WIDX_TAB_3].top);
sprite_idx = *RCT2_GLOBAL(0x00982708, sint32*) + 1;
if (w->page == WINDOW_PARK_PAGE_GUESTS)
sprite_idx += w->var_492 & 0xFFFFFFFC;
sprite_idx |= 0xA9E00000;
gfx_draw_sprite(
dpi,
sprite_idx,
w->x + (w->widgets[WIDX_TAB_3].left + w->widgets[WIDX_TAB_3].right) / 2,
w->y + w->widgets[WIDX_TAB_3].bottom - 9
);
}
2014-04-14 22:25:20 +02:00
// Price tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_4))) {
2014-04-16 03:05:49 +02:00
sprite_idx = SPR_TAB_ADMISSION_0;
if (w->page == WINDOW_PARK_PAGE_PRICE)
2014-04-14 22:25:20 +02:00
sprite_idx += (w->var_48E / 2) % 8;
gfx_draw_sprite(dpi, sprite_idx, w->x + w->widgets[WIDX_TAB_4].left, w->y + w->widgets[WIDX_TAB_4].top);
}
// Statistics tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_5))) {
2014-04-16 03:05:49 +02:00
sprite_idx = SPR_TAB_STATS_0;
if (w->page == WINDOW_PARK_PAGE_STATS)
2014-04-14 22:25:20 +02:00
sprite_idx += (w->var_48E / 4) % 7;
gfx_draw_sprite(dpi, sprite_idx, w->x + w->widgets[WIDX_TAB_5].left, w->y + w->widgets[WIDX_TAB_5].top);
}
// Objective tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_6))) {
2014-04-16 03:05:49 +02:00
sprite_idx = SPR_TAB_OBJECTIVE_0;
if (w->page == WINDOW_PARK_PAGE_OBJECTIVE)
2014-04-14 22:25:20 +02:00
sprite_idx += (w->var_48E / 4) % 16;
gfx_draw_sprite(dpi, sprite_idx, w->x + w->widgets[WIDX_TAB_6].left, w->y + w->widgets[WIDX_TAB_6].top);
}
// Awards tab
if (!(w->disabled_widgets & (1 << WIDX_TAB_7)))
2014-04-16 03:05:49 +02:00
gfx_draw_sprite(dpi, SPR_TAB_AWARDS, w->x + w->widgets[WIDX_TAB_7].left, w->y + w->widgets[WIDX_TAB_7].top);
2014-04-18 23:47:25 +02:00
}
static void window_park_graph_draw_months(rct_drawpixelinfo *dpi, uint8 *history, int baseX, int baseY)
{
int i, x, y, yearOver32, currentMonth, currentDay;
currentMonth = date_get_month(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint16));
currentDay = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_DAY, uint16);
yearOver32 = (currentMonth * 4) + (currentDay >> 14) - 31;
x = baseX;
y = baseY;
for (i = 31; i >= 0; i--) {
if (history[i] != 0 && history[i] != 255 && yearOver32 % 4 == 0) {
// Draw month text
RCT2_GLOBAL(0x013CE952, uint32) = ((yearOver32 / 4) + 8) % 8 + STR_MONTH_SHORT_MAR;
gfx_draw_string_centred(dpi, 2222, x, y - 10, 0, 0x013CE952);
// Draw month mark
gfx_fill_rect(dpi, x, y, x, y + 3, 10);
}
yearOver32 = (yearOver32 + 1) % 32;
x += 6;
}
}
static void window_park_graph_draw_line_a(rct_drawpixelinfo *dpi, uint8 *history, int baseX, int baseY)
{
int i, x, y, lastX, lastY;
lastX = -1;
x = baseX;
for (i = 31; i >= 0; i--) {
if (history[i] != 0 && history[i] != 255) {
y = baseY + (history[i] * 100) / 256;
if (lastX != -1) {
gfx_draw_line(dpi, lastX + 1, lastY + 1, x + 1, y + 1, 10);
gfx_draw_line(dpi, lastX, lastY + 1, x, y + 1, 10);
}
if (i == 0)
gfx_fill_rect(dpi, x, y, x + 2, y + 2, 10);
lastX = x;
lastY = y;
}
x += 6;
}
}
static void window_park_graph_draw_line_b(rct_drawpixelinfo *dpi, uint8 *history, int baseX, int baseY)
{
int i, x, y, lastX, lastY;
lastX = -1;
x = baseX;
for (i = 31; i >= 0; i--) {
if (history[i] != 0 && history[i] != 255) {
y = baseY + (history[i] * 100) / 256;
if (lastX != -1)
gfx_draw_line(dpi, lastX, lastY, x, y, 21);
if (i == 0)
gfx_fill_rect(dpi, x - 1, y - 1, x + 1, y + 1, 21);
lastX = x;
lastY = y;
}
x += 6;
}
}
#pragma endregion