mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-23 15:52:55 +01:00
add more drawing of bottom toolbar
This commit is contained in:
@@ -87,6 +87,10 @@
|
||||
#define RCT2_ADDRESS_TOOLTIP_TIMEOUT 0x009DE53C
|
||||
#define RCT2_ADDRESS_TOOLTIP_NOT_SHOWN_TICKS 0x009DE53E
|
||||
|
||||
#define RCT2_ADDRESS_CURSOR_OVER_WINDOWCLASS 0x009DE55C
|
||||
#define RCT2_ADDRESS_CURSOR_OVER_WINDOWNUMBER 0x009DE55E
|
||||
#define RCT2_ADDRESS_CURSOR_OVER_WIDGETINDEX 0x009DE560
|
||||
|
||||
#define RCT2_ADDRESS_SCREEN_FLAGS 0x009DEA68
|
||||
#define RCT2_ADDRESS_PLACE_OBJECT_MODIFIER 0x009DEA70
|
||||
#define RCT2_ADDRESS_ON_TUTORIAL 0x009DEA71
|
||||
@@ -113,6 +117,7 @@
|
||||
#define RCT2_ADDRESS_GUESTS_IN_PARK 0x01357844
|
||||
#define RCT2_ADDRESS_CURRENT_PARK_RATING 0x01357CB0
|
||||
#define RCT2_ADDRESS_PARK_RATING_HISTORY 0x01357CB2
|
||||
#define RCT2_ADDRESS_CURRENT_PROFIT 0x01358330
|
||||
#define RCT2_ADDRESS_CURRENT_PARK_VALUE 0x0135853C
|
||||
#define RCT2_ADDRESS_CURRENT_COMPANY_VALUE 0x0135874C
|
||||
#define RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED 0x013587F8
|
||||
|
||||
@@ -64,7 +64,7 @@ void editor_load()
|
||||
news_item_init_queue();
|
||||
RCT2_CALLPROC_EBPSAFE(0x0066EF38); // window_main_editor_create
|
||||
mainWindow = window_get_main();
|
||||
RCT2_CALLPROC_X(0x006E7C9C, 0x960, 0, 0x960, 0x70, mainWindow, 0, 0);
|
||||
window_scroll_to_location(mainWindow, 2400, 2400, 112);
|
||||
mainWindow->flags &= ~0x08;
|
||||
RCT2_CALLPROC_EBPSAFE(0x006837E3);
|
||||
gfx_invalidate_screen();
|
||||
@@ -111,7 +111,7 @@ void trackdesigner_load()
|
||||
news_item_init_queue();
|
||||
RCT2_CALLPROC_EBPSAFE(0x0066EF38); // window_main_editor_create
|
||||
mainWindow = window_get_main();
|
||||
RCT2_CALLPROC_X(0x006E7C9C, 0x960, 0, 0x960, 0x70, mainWindow, 0, 0);
|
||||
window_scroll_to_location(mainWindow, 2400, 2400, 112);
|
||||
mainWindow->flags &= ~0x08;
|
||||
RCT2_CALLPROC_EBPSAFE(0x006837E3);
|
||||
gfx_invalidate_screen();
|
||||
@@ -149,7 +149,7 @@ void trackmanager_load()
|
||||
news_item_init_queue();
|
||||
RCT2_CALLPROC_EBPSAFE(0x0066EF38); // window_main_editor_create
|
||||
mainWindow = window_get_main();
|
||||
RCT2_CALLPROC_X(0x006E7C9C, 0x960, 0, 0x960, 0x70, mainWindow, 0, 0);
|
||||
window_scroll_to_location(mainWindow, 2400, 2400, 112);
|
||||
mainWindow->flags &= ~0x08;
|
||||
RCT2_CALLPROC_EBPSAFE(0x006837E3);
|
||||
gfx_invalidate_screen();
|
||||
|
||||
@@ -39,6 +39,13 @@ void park_init()
|
||||
*/
|
||||
int calculate_park_rating()
|
||||
{
|
||||
{
|
||||
int eax, ebx, ecx, edx, esi, edi, ebp;
|
||||
RCT2_CALLFUNC_X(0x00669EAA, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||
return eax & 0xFFFF;
|
||||
}
|
||||
|
||||
|
||||
int result;
|
||||
|
||||
result = 1150;
|
||||
|
||||
@@ -206,7 +206,7 @@ static void title_update_showcase()
|
||||
// Update viewport
|
||||
w = window_get_main();
|
||||
if (w != NULL) {
|
||||
RCT2_CALLPROC_X(0x006E7C9C, x, 0, y, _edx, w, 0, 0);
|
||||
window_scroll_to_location(w, x, y, _edx);
|
||||
w->flags &= ~0x08;
|
||||
viewport_update_position(w);
|
||||
}
|
||||
|
||||
137
src/widget.c
137
src/widget.c
@@ -33,6 +33,7 @@ static void widget_closebox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widg
|
||||
static void widget_scroll_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
static void widget_hscrollbar_draw(rct_drawpixelinfo *dpi, rct_scroll *scroll, int l, int t, int r, int b, int colour);
|
||||
static void widget_vscrollbar_draw(rct_drawpixelinfo *dpi, rct_scroll *scroll, int l, int t, int r, int b, int colour);
|
||||
static void widget_draw_image(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex);
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -208,34 +209,16 @@ static void widget_button_draw(rct_drawpixelinfo *dpi, rct_window *w, int widget
|
||||
// Get the colour
|
||||
colour = w->colours[widget->colour];
|
||||
|
||||
// ?
|
||||
if (widget->image == -2) {
|
||||
// Draw border with no fill
|
||||
gfx_fill_rect_inset(dpi, l, t, r, b, colour, press | 0x10);
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw the button
|
||||
// Draw the border with fill
|
||||
gfx_fill_rect_inset(dpi, l, t, r, b, colour, press);
|
||||
|
||||
if (widget->image == -1)
|
||||
return;
|
||||
|
||||
// Draw the image
|
||||
image = widget->image;
|
||||
if (!widget_is_disabled(w, widgetIndex)) {
|
||||
if (image & 0x80000000) {
|
||||
// ?
|
||||
}
|
||||
|
||||
if (image & 0x40000000)
|
||||
image &= ~0x40000000;
|
||||
else
|
||||
image |= colour << 19;
|
||||
|
||||
gfx_draw_sprite(dpi, image, l, t);
|
||||
} else {
|
||||
// ?
|
||||
}
|
||||
widget_draw_image(dpi, w, widgetIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -257,8 +240,18 @@ static void widget_tab_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetInd
|
||||
return;
|
||||
|
||||
// Check if tab is disabled
|
||||
if (widget_is_disabled(w, widgetIndex))
|
||||
if (!widget_is_disabled(w, widgetIndex)) {
|
||||
widget_draw_image(dpi, w, widgetIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
if (widget->type == WWT_TAB)
|
||||
return;
|
||||
|
||||
if (widget->type != WWT_TRNBTN) {
|
||||
widget_draw_image(dpi, w, widgetIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
// Resolve the absolute ltrb
|
||||
l = w->x + widget->left;
|
||||
@@ -266,20 +259,12 @@ static void widget_tab_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetInd
|
||||
r = w->x + widget->right;
|
||||
b = w->y + widget->bottom;
|
||||
|
||||
// Get the colour
|
||||
colour = w->colours[widget->colour];
|
||||
// Get the colour and image
|
||||
colour = w->colours[widget->colour] << 19;
|
||||
image = widget->image + 2;
|
||||
|
||||
// Check if the tab is pressed down
|
||||
image = widget->image;
|
||||
if (widget_is_pressed(w, widgetIndex))
|
||||
image++;
|
||||
|
||||
if (image & 0x40000000)
|
||||
image &= ~0x40000000;
|
||||
else
|
||||
image |= colour << 19;
|
||||
|
||||
gfx_draw_sprite(dpi, image, l, t);
|
||||
// Draw coloured image
|
||||
gfx_draw_sprite(dpi, image | colour, l, t);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -289,10 +274,15 @@ static void widget_tab_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetInd
|
||||
static void widget_flat_button_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex)
|
||||
{
|
||||
rct_widget* widget;
|
||||
int l, t, r, b, state;
|
||||
int l, t, r, b, press;
|
||||
uint32 image;
|
||||
uint8 colour;
|
||||
|
||||
if (!widget_is_disabled(w, widgetIndex) && widget_is_highlighted(w, widgetIndex)) {
|
||||
widget_button_draw(dpi, w, widgetIndex);
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the widget
|
||||
widget = &w->widgets[widgetIndex];
|
||||
|
||||
@@ -302,22 +292,23 @@ static void widget_flat_button_draw(rct_drawpixelinfo *dpi, rct_window *w, int w
|
||||
r = w->x + widget->right;
|
||||
b = w->y + widget->bottom;
|
||||
|
||||
// Check if the button is pressed down
|
||||
state = 0;
|
||||
if (widget_is_pressed(w, widgetIndex))
|
||||
state = 1;
|
||||
|
||||
// Check if the button is highlighted
|
||||
if (state == 0 && widget_is_highlighted(w, widgetIndex))
|
||||
state = 2;
|
||||
|
||||
// Get the colour
|
||||
colour = w->colours[widget->colour];
|
||||
|
||||
if (state == 1)
|
||||
// Check if the button is pressed down
|
||||
if (widget_is_pressed(w, widgetIndex)) {
|
||||
if (widget->image == -2) {
|
||||
// Draw border with no fill
|
||||
gfx_fill_rect_inset(dpi, l, t, r, b, colour, 0x20 | 0x10);
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw the border with fill
|
||||
gfx_fill_rect_inset(dpi, l, t, r, b, colour, 0x20);
|
||||
else if (state == 2)
|
||||
gfx_fill_rect_inset(dpi, l, t, r, b, colour, 0x10);
|
||||
}
|
||||
|
||||
// Draw image
|
||||
widget_draw_image(dpi, w, widgetIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -551,6 +542,48 @@ static void widget_vscrollbar_draw(rct_drawpixelinfo *dpi, rct_scroll *scroll, i
|
||||
gfx_draw_string(dpi, (char*)0x009DED69, 0, l + 1, b - 8);
|
||||
}
|
||||
|
||||
static void widget_draw_image(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex)
|
||||
{
|
||||
int l, t, r, b, colour, image;
|
||||
rct_widget *widget;
|
||||
|
||||
// Get the widget
|
||||
widget = &w->widgets[widgetIndex];
|
||||
|
||||
// Get the image
|
||||
image = widget->image;
|
||||
if (image == -1)
|
||||
return;
|
||||
|
||||
// Resolve the absolute ltrb
|
||||
l = w->x + widget->left;
|
||||
t = w->y + widget->top;
|
||||
r = w->x + widget->right;
|
||||
b = w->y + widget->bottom;
|
||||
|
||||
// Get the colour
|
||||
colour = w->colours[widget->colour];
|
||||
|
||||
if (widget->type == WWT_4 || widget->type == WWT_6 || widget->type == WWT_TRNBTN || widget->type == WWT_TAB)
|
||||
if (widget_is_pressed(w, widgetIndex))
|
||||
image++;
|
||||
|
||||
if (!widget_is_disabled(w, widgetIndex)) {
|
||||
if (image & 0x80000000) {
|
||||
// ?
|
||||
}
|
||||
|
||||
if (image & 0x40000000)
|
||||
image &= ~0x40000000;
|
||||
else
|
||||
image |= colour << 19;
|
||||
|
||||
gfx_draw_sprite(dpi, image, l, t);
|
||||
} else {
|
||||
// ?
|
||||
}
|
||||
}
|
||||
|
||||
int widget_is_disabled(rct_window *w, int widgetIndex)
|
||||
{
|
||||
return w->disabled_widgets & (1LL << widgetIndex);
|
||||
@@ -577,5 +610,11 @@ int widget_is_pressed(rct_window *w, int widgetIndex)
|
||||
|
||||
int widget_is_highlighted(rct_window *w, int widgetIndex)
|
||||
{
|
||||
return 0;
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WINDOWCLASS, rct_windowclass) != w->classification)
|
||||
return 0;
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WINDOWNUMBER, rct_windownumber) != w->number)
|
||||
return 0;
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_CURSOR_OVER_WIDGETINDEX, sint32) != widgetIndex)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
@@ -439,6 +439,15 @@ rct_window *window_get_main()
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006E7C9C
|
||||
*/
|
||||
void window_scroll_to_location(rct_window *w, int x, int y, int z)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x006E7C9C, x, 0, y, z , w, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0068881A
|
||||
|
||||
83
src/window.h
83
src/window.h
@@ -29,6 +29,19 @@ union rct_window_event;
|
||||
|
||||
typedef void wndproc(struct rct_window*, union rct_window_event*);
|
||||
|
||||
typedef sint8 rct_windowclass;
|
||||
typedef sint16 rct_windownumber;
|
||||
|
||||
typedef struct {
|
||||
rct_windowclass classification;
|
||||
rct_windownumber number;
|
||||
} window_identifier;
|
||||
|
||||
typedef struct {
|
||||
window_identifier window;
|
||||
int widget_index;
|
||||
} widget_identifier;
|
||||
|
||||
/**
|
||||
* Widget structure
|
||||
* size: 0x10
|
||||
@@ -44,19 +57,6 @@ typedef struct {
|
||||
uint16 tooltip; // 0x0E
|
||||
} rct_widget;
|
||||
|
||||
typedef sint8 rct_windowclass;
|
||||
typedef sint16 rct_windownumber;
|
||||
|
||||
typedef struct {
|
||||
rct_windowclass classification;
|
||||
rct_windownumber number;
|
||||
} window_identifier;
|
||||
|
||||
typedef struct {
|
||||
window_identifier window;
|
||||
int widget_index;
|
||||
} widget_identifier;
|
||||
|
||||
/**
|
||||
* Viewport structure
|
||||
* size: 0x14
|
||||
@@ -75,34 +75,6 @@ typedef struct {
|
||||
uint16 flags; // 0x12
|
||||
} rct_viewport;
|
||||
|
||||
enum {
|
||||
HSCROLLBAR_VISIBLE = (1 << 0),
|
||||
HSCROLLBAR_THUMB_PRESSED = (1 << 1),
|
||||
HSCROLLBAR_LEFT_PRESSED = (1 << 2),
|
||||
HSCROLLBAR_RIGHT_PRESSED = (1 << 3),
|
||||
VSCROLLBAR_VISIBLE = (1 << 4),
|
||||
VSCROLLBAR_THUMB_PRESSED = (1 << 5),
|
||||
VSCROLLBAR_UP_PRESSED = (1 << 6),
|
||||
VSCROLLBAR_DOWN_PRESSED = (1 << 7),
|
||||
};
|
||||
|
||||
#define SCROLLBAR_SIZE 16
|
||||
|
||||
enum {
|
||||
SCROLL_PART_NONE = -1,
|
||||
SCROLL_PART_VIEW = 0,
|
||||
SCROLL_PART_HSCROLLBAR_LEFT = 1,
|
||||
SCROLL_PART_HSCROLLBAR_RIGHT = 2,
|
||||
SCROLL_PART_HSCROLLBAR_LEFT_TROUGH = 3,
|
||||
SCROLL_PART_HSCROLLBAR_RIGHT_TROUGH = 4,
|
||||
SCROLL_PART_HSCROLLBAR_THUMB = 5,
|
||||
SCROLL_PART_VSCROLLBAR_TOP = 6,
|
||||
SCROLL_PART_VSCROLLBAR_BOTTOM = 7,
|
||||
SCROLL_PART_VSCROLLBAR_TOP_TROUGH = 8,
|
||||
SCROLL_PART_VSCROLLBAR_BOTTOM_TROUGH = 9,
|
||||
SCROLL_PART_VSCROLLBAR_THUMB = 10,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint16 flags; // 0x00
|
||||
sint16 h_left; // 0x02
|
||||
@@ -215,6 +187,34 @@ typedef enum {
|
||||
WF_WHITE_BORDER_MASK = (1 << 12) | (1 << 13),
|
||||
} WINDOW_FLAGS;
|
||||
|
||||
enum {
|
||||
HSCROLLBAR_VISIBLE = (1 << 0),
|
||||
HSCROLLBAR_THUMB_PRESSED = (1 << 1),
|
||||
HSCROLLBAR_LEFT_PRESSED = (1 << 2),
|
||||
HSCROLLBAR_RIGHT_PRESSED = (1 << 3),
|
||||
VSCROLLBAR_VISIBLE = (1 << 4),
|
||||
VSCROLLBAR_THUMB_PRESSED = (1 << 5),
|
||||
VSCROLLBAR_UP_PRESSED = (1 << 6),
|
||||
VSCROLLBAR_DOWN_PRESSED = (1 << 7),
|
||||
};
|
||||
|
||||
#define SCROLLBAR_SIZE 16
|
||||
|
||||
enum {
|
||||
SCROLL_PART_NONE = -1,
|
||||
SCROLL_PART_VIEW = 0,
|
||||
SCROLL_PART_HSCROLLBAR_LEFT = 1,
|
||||
SCROLL_PART_HSCROLLBAR_RIGHT = 2,
|
||||
SCROLL_PART_HSCROLLBAR_LEFT_TROUGH = 3,
|
||||
SCROLL_PART_HSCROLLBAR_RIGHT_TROUGH = 4,
|
||||
SCROLL_PART_HSCROLLBAR_THUMB = 5,
|
||||
SCROLL_PART_VSCROLLBAR_TOP = 6,
|
||||
SCROLL_PART_VSCROLLBAR_BOTTOM = 7,
|
||||
SCROLL_PART_VSCROLLBAR_TOP_TROUGH = 8,
|
||||
SCROLL_PART_VSCROLLBAR_BOTTOM_TROUGH = 9,
|
||||
SCROLL_PART_VSCROLLBAR_THUMB = 10,
|
||||
};
|
||||
|
||||
enum {
|
||||
INPUT_STATE_RESET = 0,
|
||||
INPUT_STATE_NORMAL = 1,
|
||||
@@ -283,6 +283,7 @@ rct_window *window_bring_to_front(rct_window *w);
|
||||
|
||||
rct_window *window_get_main();
|
||||
|
||||
void window_scroll_to_location(rct_window *w, int x, int y, int z);
|
||||
void window_rotate_camera(rct_window *w);
|
||||
|
||||
void window_draw(rct_window *w, int left, int top, int right, int bottom);
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "climate.h"
|
||||
#include "news_item.h"
|
||||
#include "park.h"
|
||||
#include "peep.h"
|
||||
#include "sprites.h"
|
||||
#include "strings.h"
|
||||
#include "widget.h"
|
||||
@@ -62,8 +63,7 @@ rct_widget window_game_bottom_toolbar_widgets[] = {
|
||||
|
||||
static void window_game_bottom_toolbar_emptysub() { }
|
||||
static void window_game_bottom_toolbar_mouseup();
|
||||
static void window_game_bottom_toolbar_mousedown();
|
||||
static void window_game_bottom_toolbar_dropdown();
|
||||
static void window_game_bottom_toolbar_tooltip();
|
||||
static void window_game_bottom_toolbar_invalidate();
|
||||
static void window_game_bottom_toolbar_paint();
|
||||
|
||||
@@ -77,8 +77,6 @@ static uint32 window_game_bottom_toolbar_events[] = {
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_mouseup,
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_mousedown,
|
||||
window_game_bottom_toolbar_dropdown,
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
@@ -98,6 +96,8 @@ static uint32 window_game_bottom_toolbar_events[] = {
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_tooltip,
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_emptysub,
|
||||
window_game_bottom_toolbar_invalidate,
|
||||
window_game_bottom_toolbar_paint,
|
||||
@@ -133,19 +133,92 @@ void window_game_bottom_toolbar_open()
|
||||
window->colours[2] = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C588
|
||||
*/
|
||||
static void window_game_bottom_toolbar_mouseup()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w, *mainWindow;
|
||||
rct_news_item *newsItem;
|
||||
|
||||
__asm mov widgetIndex, dx
|
||||
__asm mov w, esi
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_LEFT_OUTSET:
|
||||
case WIDX_MONEY:
|
||||
if (!(RCT2_GLOBAL(0x013573E4, uint32) & 0x800))
|
||||
RCT2_CALLPROC_EBPSAFE(0x0069DDF1);
|
||||
break;
|
||||
case WIDX_GUESTS:
|
||||
RCT2_CALLPROC_EBPSAFE(0x00667D35);
|
||||
break;
|
||||
case WIDX_PARK_RATING:
|
||||
RCT2_CALLPROC_EBPSAFE(0x00667CA4);
|
||||
break;
|
||||
case WIDX_MIDDLE_INSET:
|
||||
news_item_close_current();
|
||||
break;
|
||||
case WIDX_NEWS_SUBJECT:
|
||||
newsItem = &(RCT2_ADDRESS(RCT2_ADDRESS_NEWS_ITEM_LIST, rct_news_item)[0]);
|
||||
RCT2_CALLPROC_X(0x0066EBE6, 0, newsItem->type, newsItem->assoc, 0, 0, 0, 0);
|
||||
break;
|
||||
case WIDX_NEWS_LOCATE:
|
||||
newsItem = &(RCT2_ADDRESS(RCT2_ADDRESS_NEWS_ITEM_LIST, rct_news_item)[0]);
|
||||
if (newsItem->type == NEWS_ITEM_NULL)
|
||||
break;
|
||||
|
||||
{
|
||||
uint32 eax, ebx, ecx, edx, esi, edi, ebp;
|
||||
ecx = newsItem->assoc;
|
||||
edx = newsItem->type;
|
||||
RCT2_CALLFUNC_X(0x0066BA74, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||
if ((eax & 0xFFFF) == 0x8000)
|
||||
break;
|
||||
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_scroll_to_location(mainWindow, eax & 0xFFFF, ecx & 0xFFFF, edx & 0xFFFF);
|
||||
}
|
||||
break;
|
||||
case WIDX_RIGHT_OUTSET:
|
||||
case WIDX_DATE:
|
||||
RCT2_CALLPROC_EBPSAFE(0x0066E464);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void window_game_bottom_toolbar_mousedown()
|
||||
static void window_game_bottom_toolbar_tooltip()
|
||||
{
|
||||
int month, day;
|
||||
short widgetIndex;
|
||||
rct_window *w, *mainWindow;
|
||||
rct_news_item *newsItem;
|
||||
|
||||
}
|
||||
__asm mov widgetIndex, dx
|
||||
__asm mov w, esi
|
||||
|
||||
static void window_game_bottom_toolbar_dropdown()
|
||||
{
|
||||
switch (widgetIndex) {
|
||||
case WIDX_MONEY:
|
||||
*((int*)0x013CE952) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PROFIT, sint32);
|
||||
*((int*)0x013CE956) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_VALUE, sint32);
|
||||
widgetIndex = 0;
|
||||
break;
|
||||
case WIDX_PARK_RATING:
|
||||
*((short*)0x013CE952) = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PARK_RATING, sint16);
|
||||
widgetIndex = 0;
|
||||
break;
|
||||
case WIDX_DATE:
|
||||
month = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16) & 7;
|
||||
day = ((RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_DAY, sint16) * ((short*)0x00993988)[month]) >> 16) & 0xFF;
|
||||
*((short*)0x013CE952) = STR_DATE_DAY_1 + day;
|
||||
*((short*)0x013CE954) = STR_MONTH_MARCH + month;
|
||||
widgetIndex = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
__asm mov dx, widgetIndex
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -386,9 +459,138 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo *dpi,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066BFA5
|
||||
*/
|
||||
static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo *dpi, rct_window *w)
|
||||
{
|
||||
int x, y;
|
||||
rct_news_item *newsItem;
|
||||
|
||||
newsItem = &(RCT2_ADDRESS(RCT2_ADDRESS_NEWS_ITEM_LIST, rct_news_item)[0]);
|
||||
|
||||
// Current news item
|
||||
gfx_fill_rect_inset(
|
||||
dpi,
|
||||
w->x + window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].left + 1,
|
||||
w->y + window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].top + 1,
|
||||
w->x + window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].right - 1,
|
||||
w->y + window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].bottom - 1,
|
||||
w->colours[2],
|
||||
48
|
||||
);
|
||||
|
||||
// Text
|
||||
memcpy((void*)0x009B5F2C, &newsItem->colour, 256);
|
||||
RCT2_CALLPROC_X(
|
||||
0x006C1F57,
|
||||
14,
|
||||
1926,
|
||||
(window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].left + window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].right) / 2 + w->x,
|
||||
w->y + window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].top + 11,
|
||||
0,
|
||||
dpi,
|
||||
(newsItem->ticks << 16) | (window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].right - window_game_bottom_toolbar_widgets[WIDX_MIDDLE_OUTSET].left - 62)
|
||||
);
|
||||
|
||||
x = w->x + window_game_bottom_toolbar_widgets[WIDX_NEWS_SUBJECT].left;
|
||||
y = w->y + window_game_bottom_toolbar_widgets[WIDX_NEWS_SUBJECT].top;
|
||||
switch (newsItem->type) {
|
||||
case NEWS_ITEM_RIDE:
|
||||
gfx_draw_sprite(dpi, SPR_RIDE, x, y);
|
||||
break;
|
||||
case NEWS_ITEM_PEEP_1:
|
||||
case NEWS_ITEM_PEEP_2:
|
||||
if (newsItem->flags & 1)
|
||||
break;
|
||||
|
||||
/*
|
||||
_edi = (int)e->paint.dpi;
|
||||
_cx = x;
|
||||
_dx = y;
|
||||
__asm {
|
||||
mov cx, _cx
|
||||
mov dx, _dx
|
||||
mov esi, w
|
||||
mov edi, _edi
|
||||
push ebp
|
||||
mov ebp, 0066C3B8h
|
||||
push after
|
||||
push esi
|
||||
jmp ebp
|
||||
after:
|
||||
pop ebp
|
||||
}
|
||||
break;
|
||||
*/
|
||||
|
||||
//_ax = x + 1;
|
||||
//_cx = y + 1;
|
||||
//_edi = (int)dpi;
|
||||
//__asm {
|
||||
// mov edi, _edi
|
||||
// mov ax, _ax
|
||||
// mov cx, _cx
|
||||
// mov bx, 22
|
||||
// mov dx, 22
|
||||
// push ebp
|
||||
//}
|
||||
//sub_6EE53B();
|
||||
//__asm {
|
||||
// pop ebp
|
||||
// mov dpi, edi
|
||||
//}
|
||||
//if (dpi == NULL)
|
||||
// break;
|
||||
|
||||
//x = 10;
|
||||
//y = 19;
|
||||
|
||||
//peep = &rctmem->sprites[*((short*)&newsItem->assoc)].peep;
|
||||
//if (peep->type == PEEP_TYPE_STAFF && peep->var_2F == 3)
|
||||
// y += 3;
|
||||
|
||||
//_eax = *((int*)(0x00982708 + (peep->sprite_type * 8)));
|
||||
//_ebx = w->var_48E & 0xFFFFFFFC;
|
||||
//_ebx += *((int*)_eax);
|
||||
//_ebx++;
|
||||
|
||||
//gfx_draw_sprite(dpi, _ebx | (peep->var_30 << 19) | (peep->var_31 << 24) | 0xA0000000, x, y);
|
||||
|
||||
//if (_ebx >= 0x2A1D && _ebx >= 0x2A3D) {
|
||||
// _ebx += 32;
|
||||
// _ebx |= 0x20000000;
|
||||
// _ebx |= peep->balloon_colour << 19;
|
||||
// gfx_draw_sprite(dpi, _ebx, x, y);
|
||||
//} else if (_ebx >= 0x2BBD && _ebx >= 0x2BDD) {
|
||||
// _ebx += 32;
|
||||
// _ebx |= 0x20000000;
|
||||
// _ebx |= peep->umbrella_colour << 19;
|
||||
// gfx_draw_sprite(dpi, _ebx, x, y);
|
||||
//} else if (_ebx >= 0x29DD && _ebx >= 0x29FD) {
|
||||
// _ebx += 32;
|
||||
// _ebx |= 0x20000000;
|
||||
// _ebx |= peep->hat_colour << 19;
|
||||
// gfx_draw_sprite(dpi, _ebx, x, y);
|
||||
//} else {
|
||||
|
||||
//}
|
||||
|
||||
break;
|
||||
case NEWS_ITEM_MONEY:
|
||||
gfx_draw_sprite(dpi, SPR_FINANCE, x, y);
|
||||
case NEWS_ITEM_SCENERY:
|
||||
gfx_draw_sprite(dpi, (newsItem->assoc < 0x10000 ? SPR_NEW_RIDE : SPR_SCENERY), x, y);
|
||||
break;
|
||||
case NEWS_ITEM_PEEPS:
|
||||
gfx_draw_sprite(dpi, SPR_GUESTS, x, y);
|
||||
case NEWS_ITEM_AWARD:
|
||||
gfx_draw_sprite(dpi, SPR_AWARD, x, y);
|
||||
case NEWS_ITEM_GRAPH:
|
||||
gfx_draw_sprite(dpi, SPR_GRAPH, x, y);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void window_game_bottom_toolbar_draw_tutorial_text(rct_drawpixelinfo *dpi, rct_window *w)
|
||||
|
||||
Reference in New Issue
Block a user