1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-20 05:23:04 +01:00

map window work + identified window var 4AC (selected tab idx)

This commit is contained in:
ddevrien
2014-05-14 15:58:14 +02:00
parent a8a0dbc073
commit 9fc3756c92
7 changed files with 96 additions and 20 deletions

View File

@@ -203,6 +203,23 @@ enum {
SPR_TAB_AWARDS = 5527,
SPR_TAB_GUESTS_0 = 5568,
SPR_TAB_GUESTS_1 = SPR_TAB_GUESTS_0 + 1,
SPR_TAB_GUESTS_2 = SPR_TAB_GUESTS_0 + 2,
SPR_TAB_GUESTS_3 = SPR_TAB_GUESTS_0 + 3,
SPR_TAB_GUESTS_4 = SPR_TAB_GUESTS_0 + 4,
SPR_TAB_GUESTS_5 = SPR_TAB_GUESTS_0 + 5,
SPR_TAB_GUESTS_6 = SPR_TAB_GUESTS_0 + 6,
SPR_TAB_GUESTS_7 = SPR_TAB_GUESTS_0 + 7,
SPR_TAB_GUESTS_8 = SPR_TAB_GUESTS_0 + 8,
SPR_TAB_GUESTS_9 = SPR_TAB_GUESTS_0 + 9,
SPR_TAB_GUESTS_10 = SPR_TAB_GUESTS_0 + 10,
SPR_TAB_GUESTS_11 = SPR_TAB_GUESTS_0 + 11,
SPR_TAB_GUESTS_12 = SPR_TAB_GUESTS_0 + 12,
SPR_TAB_GUESTS_13 = SPR_TAB_GUESTS_0 + 13,
SPR_TAB_GUESTS_14 = SPR_TAB_GUESTS_0 + 14,
SPR_TAB_GUESTS_15 = SPR_TAB_GUESTS_0 + 15,
SPR_FLOOR_TEXTURE_GRASS = 5579,
SPR_FLOOR_TEXTURE_SAND = SPR_FLOOR_TEXTURE_GRASS + 1,
SPR_FLOOR_TEXTURE_DIRT = SPR_FLOOR_TEXTURE_GRASS + 2,

View File

@@ -378,7 +378,7 @@ rct_window *window_create(int x, int y, int width, int height, uint32 *event_han
w->var_48E = 0;
w->var_490 = 0;
w->var_492 = 0;
w->var_4AC = 0;
w->selected_tab = 0;
w->var_4AE = 0;
RCT2_NEW_WINDOW++;

View File

@@ -133,7 +133,7 @@ typedef struct rct_window {
sint16 var_492;
uint32 var_494;
uint8 var_498[0x14];
sint16 var_4AC;
sint16 selected_tab; // 0x4AC
sint16 var_4AE;
sint16 var_4B0; // viewport target sprite?
sint16 saved_view_x; // 0x4B2

View File

@@ -171,8 +171,8 @@ static void window_game_top_toolbar_mouseup()
window_rotate_camera(mainWindow);
break;
case WIDX_MAP:
//RCT2_CALLPROC_EBPSAFE(0x0068C88A);
window_map_open();
RCT2_CALLPROC_EBPSAFE(0x0068C88A);
//window_map_open();
break;
case WIDX_CLEAR_SCENERY:
if ((RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, uint8) == 1 && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WIDGETINDEX, uint16) == 16) {

View File

@@ -195,7 +195,7 @@ static void window_guest_list_mouseup()
window_close(w);
break;
case WIDX_MAP:
RCT2_CALLPROC_EBPSAFE(0x0068C88A);
window_map_open();
break;
}
}

View File

@@ -28,6 +28,8 @@ static enum WINDOW_MAP_WIDGET_IDX {
WIDX_BACKGROUND,
WIDX_TITLE,
WIDX_CLOSE,
WIDX_PEOPLE_TAB = 4,
WIDX_RIDES_TAB = 5
};
static rct_widget window_map_widgets[] = {
@@ -103,13 +105,51 @@ static void* window_map_events[] = {
*/
void window_map_open()
{
RCT2_CALLPROC_EBPSAFE(0x0068C88A);
//rct_window* w;
rct_window* w;
int* var;
// Check if window is already open
//w = window_bring_to_front_by_id(WC_OPTIONS, 0);
//if (w != NULL)
// return;
w = window_bring_to_front_by_id(WC_MAP, 0);
if (w != NULL) {
w->selected_tab = 0;
w->var_490 = 0;
return;
}
var = (int*)rct2_malloc(0x40000);
if (var == NULL)
return;
RCT2_GLOBAL(0x00F1AD68, uint32) = (uint32)var;
w = window_create_auto_pos(245, 259, (uint32*)window_map_events, WC_MAP, 0x0400);
w->widgets = window_map_widgets;
w->enabled_widgets =
(1 << 2) |
(1 << 4) |
(1 << 5) |
(1 << 8) |
(1 << 9) |
(1 << 14) |
(1 << 15) |
(1 << 10) |
(1 << 16) |
(1 << 17) |
(1 << 18) |
(1 << 19) |
(1 << 11) |
(1 << 20) |
(1 << 12);
//TODO: .text:0068C943 or dword ptr [esi+20h], 300h
window_init_scroll_widgets(w);
w->var_480 = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint16);
RCT2_CALLPROC_EBPSAFE(0x0068CA6C);
RCT2_GLOBAL(0x00F64F05, uint8) = 0;
RCT2_CALLPROC_EBPSAFE(0x0068C990);
w->colours[0] = 12;
w->colours[1] = 24;
}
/**
@@ -192,14 +232,33 @@ static void window_map_invalidate()
*/
static void window_map_paint()
{
RCT2_CALLPROC_EBPSAFE(0x0068CDA9);
/*rct_window *w;
//RCT2_CALLPROC_EBPSAFE(0x0068CDA9);
rct_window *w;
rct_drawpixelinfo *dpi;
int image_id;
__asm mov w, esi
__asm mov dpi, edi
window_draw_widgets(w, dpi);*/
window_draw_widgets(w, dpi);
// guest tab image (animated)
image_id = SPR_TAB_GUESTS_0;
if (w->selected_tab == 0)
image_id += w->var_490 / 4;
gfx_draw_sprite(dpi, image_id,
w->x + w->widgets[WIDX_PEOPLE_TAB].left,
w->y + w->widgets[WIDX_PEOPLE_TAB].top);
// ride/stall tab image (animated)
image_id = SPR_TAB_RIDE_0;
if (w->selected_tab == 1)
image_id += w->var_490 / 4;
gfx_draw_sprite(dpi, image_id,
w->x + w->widgets[WIDX_RIDES_TAB].left,
w->y + w->widgets[WIDX_RIDES_TAB].top);
}
/**

View File

@@ -132,7 +132,7 @@ void window_scenarioselect_open()
window_scenarioselect_init_tabs();
window->var_4AC = 0;
window->selected_tab = 0;
}
/**
@@ -188,7 +188,7 @@ static void window_scenarioselect_mousedown()
__asm mov w, esi
if (widgetIndex >= WIDX_TAB1 && widgetIndex <= WIDX_TAB5) {
w->var_4AC = widgetIndex - 4;
w->selected_tab = widgetIndex - 4;
w->var_494 = 0;
window_invalidate(w);
RCT2_CALLPROC_X(w->event_handlers[WE_RESIZE], 0, 0, 0, 0, (int)w, 0, 0);
@@ -209,7 +209,7 @@ static void window_scenarioselect_scrollgetsize()
height = 0;
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
if (scenario->category != w->var_4AC)
if (scenario->category != w->selected_tab)
continue;
if (scenario->flags & SCENARIO_FLAGS_VISIBLE)
height += 24;
@@ -232,7 +232,7 @@ static void window_scenarioselect_scrollmousedown()
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
if (scenario->category != w->var_4AC)
if (scenario->category != w->selected_tab)
continue;
if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE))
continue;
@@ -261,7 +261,7 @@ static void window_scenarioselect_scrollmouseover()
selected = NULL;
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
if (scenario->category != w->var_4AC)
if (scenario->category != w->selected_tab)
continue;
if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE))
continue;
@@ -286,7 +286,7 @@ static void window_scenarioselect_invalidate()
__asm mov w, esi
w->pressed_widgets &= ~(0x10 | 0x20 | 0x40 | 0x80 | 0x100);
w->pressed_widgets |= 1LL << (w->var_4AC + 4);
w->pressed_widgets |= 1LL << (w->selected_tab + 4);
}
static void window_scenarioselect_paint()
@@ -369,7 +369,7 @@ static void window_scenarioselect_scrollpaint()
y = 0;
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
if (scenario->category != w->var_4AC)
if (scenario->category != w->selected_tab)
continue;
if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE))
continue;