mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-30 02:05:13 +01:00
Merge branch 'master' into gfx_unstable
This commit is contained in:
@@ -119,6 +119,9 @@
|
||||
|
||||
#define RCT2_ADDRESS_WINDOW_DPI 0x009DEA74
|
||||
|
||||
#define RCT2_ADDRESS_NUM_DSOUND_DEVICES 0x009E2B88
|
||||
#define RCT2_ADDRESS_DSOUND_DEVICES 0x009E2B8C
|
||||
|
||||
#define RCT2_ADDRESS_CMDLINE 0x009E2D98
|
||||
|
||||
#define RCT2_ADDRESS_LAND_RAISE_COST 0x009E2E1C
|
||||
|
||||
120
src/gfx.c
120
src/gfx.c
@@ -99,8 +99,53 @@ void gfx_draw_pixel(rct_drawpixelinfo *dpi, int x, int y, int colour)
|
||||
gfx_fill_rect(dpi, x, y, x, y, colour);
|
||||
}
|
||||
|
||||
/*
|
||||
* Draws a horizontal line of specified colour to a buffer.
|
||||
* rct2: 0x68474C
|
||||
*/
|
||||
void gfx_draw_line_on_buffer(rct_drawpixelinfo *dpi, char colour, int y, int x, int no_pixels)
|
||||
{
|
||||
y -= dpi->y;
|
||||
|
||||
//Check to make sure point is in the y range
|
||||
if (y < 0)return;
|
||||
if (y >= dpi->height)return;
|
||||
//Check to make sure we are drawing at least a pixel
|
||||
if (!no_pixels) return;
|
||||
|
||||
no_pixels++;
|
||||
x -= dpi->x;
|
||||
|
||||
//If x coord outside range leave
|
||||
if (x < 0){
|
||||
//Unless the number of pixels is enough to be in range
|
||||
no_pixels += x;
|
||||
if (no_pixels <= 0)return;
|
||||
//Resets starting point to 0 as we don't draw outside the range
|
||||
x = 0;
|
||||
}
|
||||
|
||||
//Ensure that the end point of the line is within range
|
||||
if (x + no_pixels - dpi->width > 0){
|
||||
//If the end point has any pixels outside range
|
||||
//cut them off. If there are now no pixels return.
|
||||
no_pixels -= x + no_pixels - dpi->width;
|
||||
if (no_pixels <= 0)return;
|
||||
}
|
||||
|
||||
char* bits_pointer;
|
||||
//Get the buffer we are drawing to and move to the first coordinate.
|
||||
bits_pointer = dpi->bits + y*(dpi->pitch + dpi->width) + x;
|
||||
|
||||
//Draw the line to the specified colour
|
||||
for (; no_pixels > 0; --no_pixels, ++bits_pointer){
|
||||
*((uint8*)bits_pointer) = colour;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Draws a line on dpi if within dpi boundaries
|
||||
* rct2: 0x00684466
|
||||
* dpi (edi)
|
||||
* x1 (ax)
|
||||
@@ -111,7 +156,78 @@ void gfx_draw_pixel(rct_drawpixelinfo *dpi, int x, int y, int colour)
|
||||
*/
|
||||
void gfx_draw_line(rct_drawpixelinfo *dpi, int x1, int y1, int x2, int y2, int colour)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x00684466, x1, y1, x2, y2, 0, dpi, colour);
|
||||
// Check to make sure the line is within the drawing area
|
||||
if ((x1 < dpi->x) && (x2 < dpi->x)){
|
||||
return;
|
||||
}
|
||||
|
||||
if ((y1 < dpi->y) && (y2 < dpi->y)){
|
||||
return;
|
||||
}
|
||||
|
||||
if ((x1 >(dpi->x + dpi->width)) && (x2 >(dpi->x + dpi->width))){
|
||||
return;
|
||||
}
|
||||
|
||||
if ((y1 > (dpi->y + dpi->height)) && (y2 > (dpi->y + dpi->height))){
|
||||
return;
|
||||
}
|
||||
|
||||
//Bresenhams algorithm
|
||||
|
||||
//If vertical plot points upwards
|
||||
int steep = abs(y2 - y1) > abs(x2 - x1);
|
||||
if (steep){
|
||||
int temp_y2 = y2;
|
||||
int temp_x2 = x2;
|
||||
y2 = x1;
|
||||
x2 = y1;
|
||||
y1 = temp_x2;
|
||||
x1 = temp_y2;
|
||||
}
|
||||
|
||||
//If line is right to left swap direction
|
||||
if (x1 > x2){
|
||||
int temp_y2 = y2;
|
||||
int temp_x2 = x2;
|
||||
y2 = y1;
|
||||
x2 = x1;
|
||||
y1 = temp_y2;
|
||||
x1 = temp_x2;
|
||||
}
|
||||
|
||||
int delta_x = x2 - x1;
|
||||
int delta_y = abs(y2 - y1);
|
||||
int error = delta_x / 2;
|
||||
int y_step;
|
||||
int y = y1;
|
||||
|
||||
//Direction of step
|
||||
if (y1 < y2)y_step = 1;
|
||||
else y_step = -1;
|
||||
|
||||
for (int x = x1, x_start = x1, no_pixels = 1; x < x2; ++x,++no_pixels){
|
||||
//Vertical lines are drawn 1 pixel at a time
|
||||
if (steep)gfx_draw_line_on_buffer(dpi, colour, x, y, 1);
|
||||
|
||||
error -= delta_y;
|
||||
if (error < 0){
|
||||
//Non vertical lines are drawn with as many pixels in a horizontal line as possible
|
||||
if (!steep)gfx_draw_line_on_buffer(dpi, colour, y, x_start, no_pixels);
|
||||
|
||||
//Reset non vertical line vars
|
||||
x_start = x + 1;
|
||||
no_pixels = 1;
|
||||
y += y_step;
|
||||
error += delta_x;
|
||||
}
|
||||
|
||||
//Catch the case of the last line
|
||||
if (x + 1 == x2 && !steep){
|
||||
gfx_draw_line_on_buffer(dpi, colour, y, x_start, no_pixels);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -217,6 +217,8 @@ enum {
|
||||
STR_PLACE_SCENERY_TIP = 1159,
|
||||
STR_ADJUST_WATER_TIP = 1160,
|
||||
|
||||
STR_OPTIONS = 1168,
|
||||
|
||||
STR_BUILD_FOOTPATH_TIP = 1173,
|
||||
STR_CANT_BUILD_FOOTPATH_HERE = 1176,
|
||||
STR_CANT_REMOVE_FOOTPATH_FROM_HERE = 1177,
|
||||
@@ -362,9 +364,14 @@ enum {
|
||||
STR_DISTANCE_AND_SPEED = 2329,
|
||||
STR_TEMPERATURE = 2330,
|
||||
STR_HEIGHT_LABELS = 2331,
|
||||
STR_UNITS = 2332,
|
||||
STR_SOUND = 2333,
|
||||
STR_DISPLAY = 2346,
|
||||
STR_DISPLAY_RESOLUTION = 2360,
|
||||
STR_TILE_EDGE_SMOOTHING_TIP = 2362,
|
||||
STR_TURN_GRIDLINES_ON_TIP = 2364,
|
||||
STR_TILE_SMOOTHING = 2361,
|
||||
STR_TILE_SMOOTHING_TIP = 2362,
|
||||
STR_GRIDLINES = 2363,
|
||||
STR_GRIDLINES_TIP = 2364,
|
||||
|
||||
//STR_NONE = 2368,
|
||||
STR_LOW = 2369,
|
||||
@@ -415,7 +422,11 @@ enum {
|
||||
|
||||
STR_PROFIT_PER_WEEK_AND_PARK_VALUE_TIP = 2482,
|
||||
|
||||
STR_REAL_NAME_TOGGLE_TIP = 2488,
|
||||
STR_CONTROLS = 2485,
|
||||
STR_GENERAL = 2486,
|
||||
STR_REAL_NAME = 2487,
|
||||
STR_REAL_NAME_TIP = 2488,
|
||||
STR_HOTKEY = 2489,
|
||||
|
||||
STR_ENTER_NAME_INTO_SCENARIO_CHART = 2790,
|
||||
|
||||
@@ -423,8 +434,9 @@ enum {
|
||||
STR_SORT = 2795,
|
||||
STR_RIDE_LIST_SORT_TIP = 2796,
|
||||
|
||||
STR_SCREEN_EDGE_SCROLL_TIP = 2798,
|
||||
STR_CHANGE_HOTKEY_TIP = 2799,
|
||||
STR_SCREEN_EDGE_SCROLLING = 2797,
|
||||
STR_SCREEN_EDGE_SCROLLING_TIP = 2798,
|
||||
STR_HOTKEY_TIP = 2799,
|
||||
|
||||
STR_TOTAL_ADMISSIONS = 2800,
|
||||
STR_INCOME_FROM_ADMISSIONS = 2801,
|
||||
@@ -512,6 +524,7 @@ enum {
|
||||
|
||||
STR_OBJECTIVE = 3322,
|
||||
|
||||
STR_SAVE_PLUGIN_DATA = 3333,
|
||||
STR_SAVE_PLUGIN_DATA_TIP = 3334,
|
||||
|
||||
STR_GAME_TOOLS = 3341,
|
||||
@@ -520,6 +533,7 @@ enum {
|
||||
STR_ROLLER_COASTER_DESIGNER = 3344,
|
||||
STR_TRACK_DESIGNS_MANAGER = 3345,
|
||||
|
||||
STR_SOUND_FORCED_SOFTWARE_BUFFER_MIXING = 3362,
|
||||
STR_SOUND_FORCED_SOFTWARE_BUFFER_MIXING_TIP = 3363,
|
||||
|
||||
STR_TUTORIAL_BEGINNERS = 3385,
|
||||
|
||||
@@ -158,6 +158,7 @@ void widget_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex)
|
||||
widget_checkbox_draw(dpi, w, widgetIndex);
|
||||
break;
|
||||
case WWT_24:
|
||||
widget_checkbox_draw(dpi, w, widgetIndex);
|
||||
break;
|
||||
case WWT_25:
|
||||
break;
|
||||
@@ -715,7 +716,7 @@ static void widget_closebox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widg
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* rct2: 0x006EBAD9
|
||||
*/
|
||||
static void widget_checkbox_draw(rct_drawpixelinfo *dpi, rct_window *w, int widgetIndex)
|
||||
|
||||
@@ -51,7 +51,7 @@ int _dropdown_item_height;
|
||||
int _dropdown_highlighted_index;
|
||||
|
||||
uint16 gDropdownItemsFormat[64];
|
||||
sint32 gDropdownItemsArgs[64];
|
||||
sint64 gDropdownItemsArgs[64];
|
||||
uint32 gDropdownItemsChecked;
|
||||
|
||||
static void window_dropdown_emptysub() { }
|
||||
@@ -134,8 +134,8 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo
|
||||
char buffer[256];
|
||||
|
||||
// Copy the formats and arguments until all use of it is decompiled
|
||||
memcpy(0x009DEBA4, gDropdownItemsFormat, 37 * 2);
|
||||
memcpy(0x009DEBF4, gDropdownItemsArgs, 80 * 4);
|
||||
memcpy(0x009DEBA4, gDropdownItemsFormat, 40 * 2);
|
||||
memcpy(0x009DEBF4, gDropdownItemsArgs, 40 * 8);
|
||||
|
||||
RCT2_GLOBAL(0x009DE518, uint32) &= ~(0x04 | 0x02);
|
||||
if (flags & 0x80)
|
||||
@@ -203,8 +203,8 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl
|
||||
rct_window* w;
|
||||
|
||||
// Copy the formats and arguments until all use of it is decompiled
|
||||
memcpy(0x009DEBA4, gDropdownItemsFormat, 37 * 2);
|
||||
memcpy(0x009DEBF4, gDropdownItemsArgs, 80 * 4);
|
||||
memcpy(0x009DEBA4, gDropdownItemsFormat, 40 * 2);
|
||||
memcpy(0x009DEBF4, gDropdownItemsArgs, 40 * 8);
|
||||
|
||||
RCT2_GLOBAL(0x009DE518, uint32) &= ~(0x04 | 0x02);
|
||||
if (flags & 0x80)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
extern int gAppropriateImageDropdownItemsPerRow[];
|
||||
|
||||
extern uint16 gDropdownItemsFormat[64];
|
||||
extern sint32 gDropdownItemsArgs[64];
|
||||
extern sint64 gDropdownItemsArgs[64];
|
||||
extern uint32 gDropdownItemsChecked;
|
||||
|
||||
void window_dropdown_show_text(int x, int y, int extray, uint8 colour, uint8 flags, int num_items);
|
||||
|
||||
@@ -377,8 +377,8 @@ static void window_game_top_toolbar_dropdown()
|
||||
window_about_open();
|
||||
break;
|
||||
case 4: // options
|
||||
//window_options_open();
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BAC5B);
|
||||
window_options_open();
|
||||
//RCT2_CALLPROC_EBPSAFE(0x006BAC5B);
|
||||
break;
|
||||
case 5: // screenshot
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREENSHOT_COUNTDOWN, sint8) = 10;
|
||||
|
||||
@@ -22,56 +22,78 @@
|
||||
#include "strings.h"
|
||||
#include "widget.h"
|
||||
#include "window.h"
|
||||
#include "window_dropdown.h"
|
||||
|
||||
static enum WINDOW_OPTIONS_WIDGET_IDX {
|
||||
WIDX_BACKGROUND,
|
||||
WIDX_TITLE,
|
||||
WIDX_CLOSE,
|
||||
WIDX_SOUND_DROPDOWN = 5,
|
||||
WIDX_MUSIC = 6,
|
||||
WIDX_SOUND_QUALITY = 8,
|
||||
WIDX_CURRENCY = 12,
|
||||
WIDX_DISTANCE = 14,
|
||||
WIDX_TEMPERATURE = 16,
|
||||
WIDX_HEIGHT_LABELS = 18,
|
||||
WIDX_RESOLUTION = 21,
|
||||
WIDX_CONSTRUCTION_MARKER = 25
|
||||
WIDX_SOUND_GROUP,
|
||||
WIDX_SOUND,
|
||||
WIDX_SOUND_DROPDOWN,
|
||||
WIDX_MUSIC,
|
||||
WIDX_MUSIC_DROPDOWN,
|
||||
WIDX_SOUND_QUALITY,
|
||||
WIDX_SOUND_QUALITY_DROPDOWN,
|
||||
WIDX_SOUND_SW_BUFFER_CHECKBOX,
|
||||
WIDX_UNITS_GROUP,
|
||||
WIDX_CURRENCY,
|
||||
WIDX_CURRENCY_DROPDOWN,
|
||||
WIDX_DISTANCE,
|
||||
WIDX_DISTANCE_DROPDOWN,
|
||||
WIDX_TEMPERATURE,
|
||||
WIDX_TEMPERATURE_DROPDOWN,
|
||||
WIDX_HEIGHT_LABELS,
|
||||
WIDX_HEIGHT_LABELS_DROPDOWN,
|
||||
WIDX_DISPLAY_GROUP,
|
||||
WIDX_RESOLUTION,
|
||||
WIDX_RESOLUTION_DROPDOWN,
|
||||
WIDX_TILE_SMOOTHING_CHECKBOX,
|
||||
WIDX_GRIDLINES_CHECKBOX,
|
||||
WIDX_CONSTRUCTION_MARKER,
|
||||
WIDX_CONSTRUCTION_MARKER_DROPDOWN,
|
||||
WIDX_CONTROLS_GROUP,
|
||||
WIDX_SCREEN_EDGE_SCROLLING,
|
||||
WIDX_HOTKEY_DROPDOWN,
|
||||
WIDX_GENERAL_GROUP,
|
||||
WIDX_REAL_NAME_CHECKBOX,
|
||||
WIDX_SAVE_PLUGIN_DATA_CHECKBOX
|
||||
};
|
||||
|
||||
static rct_widget window_options_widgets[] = {
|
||||
{ WWT_FRAME, 0, 0, 309, 0, 371, 0x0FFFFFFFF, STR_NONE },
|
||||
{ WWT_CAPTION, 0, 1, 308, 1, 14, 0x490, STR_WINDOW_TITLE_TIP },
|
||||
{ WWT_CLOSEBOX, 0, 297, 307, 2, 13, 0x338, STR_CLOSE_WINDOW_TIP },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 17, 93, 0x91D, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 10, 299, 31, 42, 0x361, STR_NONE },
|
||||
{ WWT_FRAME, 0, 0, 309, 0, 371, STR_NONE, STR_NONE },
|
||||
{ WWT_CAPTION, 0, 1, 308, 1, 14, STR_OPTIONS, STR_WINDOW_TITLE_TIP },
|
||||
{ WWT_CLOSEBOX, 0, 297, 307, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 17, 93, STR_SOUND, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 10, 299, 31, 42, 0x361, STR_NONE }, // sound
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 32, 41, 0x36C, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 46, 57, 0x365, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 46, 57, 0x365, STR_NONE }, // music
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 47, 56, 0x36C, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 61, 72, 0x366, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 61, 72, 0x366, STR_NONE }, // sound quality
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 62, 71, 0x36C, STR_NONE },
|
||||
{ WWT_CHECKBOX, 0, 10, 299, 76, 87, 0x0D22, STR_SOUND_FORCED_SOFTWARE_BUFFER_MIXING_TIP },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 100, 176, 0x91C, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 114, 125, 0x367, STR_NONE },
|
||||
{ WWT_CHECKBOX, 0, 10, 299, 76, 87, STR_SOUND_FORCED_SOFTWARE_BUFFER_MIXING, STR_SOUND_FORCED_SOFTWARE_BUFFER_MIXING_TIP },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 100, 176, STR_UNITS, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 114, 125, 0x367, STR_NONE }, // currency
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 115, 124, 0x36C, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 129, 140, 0x368, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 129, 140, 0x368, STR_NONE }, // distance
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 130, 139, 0x36C, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 144, 155, 0x36B, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 144, 155, 0x36B, STR_NONE }, // temperature
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 145, 154, 0x36C, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 159, 170, 0x364, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 159, 170, 0x364, STR_NONE }, // height labels
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 160, 169, 0x36C, STR_NONE },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 182, 258, 0x92A, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 196, 207, 0x348, STR_NONE },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 182, 258, STR_DISPLAY, STR_NONE },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 196, 207, 0x348, STR_NONE }, // resolution
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 197, 206, 0x36C, STR_NONE },
|
||||
{ WWT_CHECKBOX, 0, 10, 299, 212, 223, 0x939, STR_TILE_EDGE_SMOOTHING_TIP },
|
||||
{ WWT_CHECKBOX, 0, 10, 299, 227, 238, 0x93B, STR_TURN_GRIDLINES_ON_TIP },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 241, 252, 0x0FFFFFFFF, STR_NONE },
|
||||
{ WWT_CHECKBOX, 0, 10, 299, 212, 223, STR_TILE_SMOOTHING, STR_TILE_SMOOTHING_TIP },
|
||||
{ WWT_CHECKBOX, 0, 10, 299, 227, 238, STR_GRIDLINES, STR_GRIDLINES_TIP },
|
||||
{ WWT_DROPDOWN, 0, 155, 299, 241, 252, STR_NONE, STR_NONE }, // construction marker
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 288, 298, 242, 251, 0x36C, STR_NONE },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 264, 310, 0x9B5, STR_NONE },
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 279, 290, 0x0AED, STR_SCREEN_EDGE_SCROLL_TIP },
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 26, 185, 293, 304, 0x9B9, STR_CHANGE_HOTKEY_TIP },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 317, 365, 0x9B6, STR_NONE },
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 331, 342, 0x9B7, STR_REAL_NAME_TOGGLE_TIP },
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 346, 357, 0x0D05, STR_SAVE_PLUGIN_DATA_TIP },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 264, 310, STR_CONTROLS, STR_NONE },
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 279, 290, STR_SCREEN_EDGE_SCROLLING, STR_SCREEN_EDGE_SCROLLING_TIP },
|
||||
{ WWT_DROPDOWN_BUTTON, 0, 26, 185, 293, 304, STR_HOTKEY, STR_HOTKEY_TIP },
|
||||
{ WWT_GROUPBOX, 0, 3, 306, 317, 365, STR_GENERAL, STR_NONE },
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 331, 342, STR_REAL_NAME, STR_REAL_NAME_TIP },
|
||||
{ WWT_CHECKBOX, 2, 10, 299, 346, 357, STR_SAVE_PLUGIN_DATA, STR_SAVE_PLUGIN_DATA_TIP },
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
@@ -79,7 +101,6 @@ static void window_options_emptysub() { }
|
||||
static void window_options_mouseup();
|
||||
static void window_options_mousedown();
|
||||
static void window_options_dropdown();
|
||||
static void window_options_textinput();
|
||||
static void window_options_update();
|
||||
static void window_options_paint();
|
||||
|
||||
@@ -129,32 +150,32 @@ void window_options_open()
|
||||
|
||||
w = window_create_auto_pos(310, 372, window_options_events, WC_OPTIONS, 0);
|
||||
w->widgets = window_options_widgets;
|
||||
w->enabled_widgets =
|
||||
(1 << WIDX_CLOSE) |
|
||||
0x10 |
|
||||
w->enabled_widgets =
|
||||
(1 << WIDX_CLOSE) |
|
||||
(1 << WIDX_SOUND) |
|
||||
(1 << WIDX_SOUND_DROPDOWN) |
|
||||
0x40 |
|
||||
0x80 |
|
||||
0x100 |
|
||||
0x200 |
|
||||
0x1000 |
|
||||
0x2000 |
|
||||
0x4000 |
|
||||
0x8000 |
|
||||
0x200000 |
|
||||
0x400000 |
|
||||
0x10000 |
|
||||
0x20000 |
|
||||
0x20000000 |
|
||||
0x10000000 |
|
||||
0x80000000 |
|
||||
0x2000000 |
|
||||
0x4000000 |
|
||||
0x40000 |
|
||||
0x80000 |
|
||||
0x800000 |
|
||||
0x1000000 |
|
||||
0x400;
|
||||
(1 << WIDX_MUSIC) |
|
||||
(1 << WIDX_MUSIC_DROPDOWN) |
|
||||
(1 << WIDX_SOUND_QUALITY) |
|
||||
(1 << WIDX_SOUND_QUALITY_DROPDOWN) |
|
||||
(1 << WIDX_CURRENCY) |
|
||||
(1 << WIDX_CURRENCY_DROPDOWN) |
|
||||
(1 << WIDX_DISTANCE) |
|
||||
(1 << WIDX_DISTANCE_DROPDOWN) |
|
||||
(1 << WIDX_RESOLUTION) |
|
||||
(1 << WIDX_RESOLUTION_DROPDOWN) |
|
||||
(1 << WIDX_TEMPERATURE) |
|
||||
(1 << WIDX_TEMPERATURE_DROPDOWN) |
|
||||
(1 << WIDX_HOTKEY_DROPDOWN) |
|
||||
(1 << WIDX_SCREEN_EDGE_SCROLLING) |
|
||||
(1 << WIDX_REAL_NAME_CHECKBOX) |
|
||||
(1 << WIDX_CONSTRUCTION_MARKER) |
|
||||
(1 << WIDX_CONSTRUCTION_MARKER_DROPDOWN) |
|
||||
(1 << WIDX_HEIGHT_LABELS) |
|
||||
(1 << WIDX_HEIGHT_LABELS_DROPDOWN) |
|
||||
(1 << WIDX_TILE_SMOOTHING_CHECKBOX) |
|
||||
(1 << WIDX_GRIDLINES_CHECKBOX) |
|
||||
(1 << WIDX_SOUND_SW_BUFFER_CHECKBOX);
|
||||
// TODO: missing .text:006BAD22 or dword ptr [esi+0Ch], 1
|
||||
|
||||
window_init_scroll_widgets(w);
|
||||
@@ -178,7 +199,70 @@ static void window_options_mouseup()
|
||||
*/
|
||||
static void window_options_mousedown()
|
||||
{
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB01B);
|
||||
//RCT2_CALLPROC_EBPSAFE(0x006BB01B);
|
||||
int numItems, i;
|
||||
sint64 device;
|
||||
short widgetIndex;
|
||||
rct_window *w;
|
||||
rct_widget *widget;
|
||||
|
||||
__asm mov widgetIndex, dx
|
||||
__asm mov w, esi
|
||||
|
||||
widget = &w->widgets[widgetIndex - 1];
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_SOUND_DROPDOWN:
|
||||
numItems = RCT2_GLOBAL(RCT2_ADDRESS_NUM_DSOUND_DEVICES, uint32);
|
||||
if (numItems == 0)
|
||||
break;
|
||||
|
||||
window_dropdown_show_text_custom_width(
|
||||
w->x + widget->left,
|
||||
w->y + widget->top,
|
||||
widget->bottom - widget->top + 1,
|
||||
w->colours[1],
|
||||
0x80,
|
||||
numItems,
|
||||
widget->right - widget->left - 3
|
||||
);
|
||||
|
||||
// populate the list with the sound devices
|
||||
device = RCT2_GLOBAL(RCT2_ADDRESS_DSOUND_DEVICES, sint32) + 0x10;
|
||||
|
||||
for (i = 0; i < numItems; i++) {
|
||||
gDropdownItemsFormat[i] = 1142;
|
||||
gDropdownItemsArgs[i] = 1170 | (device << 16);
|
||||
device += 0x210;
|
||||
}
|
||||
gDropdownItemsChecked |= (1 << RCT2_GLOBAL(0x9AF280, uint32));
|
||||
|
||||
break;
|
||||
case WIDX_HEIGHT_LABELS_DROPDOWN:
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB517);
|
||||
break;
|
||||
case WIDX_MUSIC_DROPDOWN:
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB5A8);
|
||||
break;
|
||||
case WIDX_SOUND_QUALITY_DROPDOWN:
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB631);
|
||||
break;
|
||||
case WIDX_CURRENCY_DROPDOWN:
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB494);
|
||||
break;
|
||||
case WIDX_DISTANCE_DROPDOWN:
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB3E6);
|
||||
break;
|
||||
case WIDX_RESOLUTION_DROPDOWN:
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB2AF);
|
||||
break;
|
||||
case WIDX_TEMPERATURE_DROPDOWN:
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB21F);
|
||||
break;
|
||||
case WIDX_CONSTRUCTION_MARKER_DROPDOWN:
|
||||
RCT2_CALLPROC_EBPSAFE(0x006BB18F);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -245,4 +329,4 @@ static void window_options_paint()
|
||||
w->y + window_options_widgets[WIDX_MUSIC].top + 1);
|
||||
gfx_draw_string_left(dpi, STR_SOUND_QUALITY, w, 0, w->x + 10,
|
||||
w->y + window_options_widgets[WIDX_SOUND_QUALITY].top + 1);
|
||||
}
|
||||
}
|
||||
@@ -2139,7 +2139,6 @@ static void window_park_graph_draw_months(rct_drawpixelinfo *dpi, uint8 *history
|
||||
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--) {
|
||||
|
||||
Reference in New Issue
Block a user