diff --git a/src/game.h b/src/game.h index 1f87d944c0..52046da7f2 100644 --- a/src/game.h +++ b/src/game.h @@ -32,7 +32,7 @@ enum GAME_COMMAND { GAME_COMMAND_7, GAME_COMMAND_SET_RIDE_OPEN, // 8 GAME_COMMAND_9, - GAME_COMMAND_10, + GAME_COMMAND_SET_RIDE_NAME, GAME_COMMAND_11, GAME_COMMAND_12, GAME_COMMAND_13, diff --git a/src/string_ids.h b/src/string_ids.h index cfd202d2a3..f642ba161f 100644 --- a/src/string_ids.h +++ b/src/string_ids.h @@ -283,6 +283,11 @@ enum { STR_RIDES_IN_PARK_TIP = 1053, STR_NAME_RIDE_TIP = 1054, + STR_RIDE_ATTRACTION_NAME = 1057, + STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION = 1058, + STR_CANT_RENAME_RIDE_ATTRACTION = 1059, + STR_INVALID_RIDE_ATTRACTION_NAME = 1060, + STR_PLACE_SCENERY_TIP = 1159, STR_ADJUST_WATER_TIP = 1160, diff --git a/src/window.h b/src/window.h index ae9b5ced2c..b7e129c043 100644 --- a/src/window.h +++ b/src/window.h @@ -497,6 +497,12 @@ void RCT2_CALLPROC_WE_MOUSE_DOWN(int address, int widgetIndex, rct_window*w, rct __asm mov widgetIndex, dx \ __asm mov w, esi + #define window_textinput_get_registers(w, widgetIndex, result, text) \ + __asm mov result, cl \ + __asm mov widgetIndex, dx \ + __asm mov w, esi \ + __asm mov text, edi + #define window_paint_get_registers(w, dpi) \ __asm mov w, esi \ __asm mov dpi, edi @@ -524,6 +530,12 @@ void RCT2_CALLPROC_WE_MOUSE_DOWN(int address, int widgetIndex, rct_window*w, rct __asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) ); \ __asm__ ( "mov %[w], esi " : [w] "+m" (w) ); + #define window_textinput_get_registers(w, widgetIndex, result, text) \ + __asm__ ( "mov %[result], cl " : [result] "+m" (result) ); \ + __asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) ); \ + __asm__ ( "mov %[w], esi " : [w] "+m" (w) ); \ + __asm__ ( "mov %[text], edi " : [text] "+m" (text) ); + #define window_paint_get_registers(w, dpi) \ __asm__ ( "mov %[w], esi " : [w] "+m" (w) ); \ __asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) ); diff --git a/src/window_park.c b/src/window_park.c index f32ecc823c..62abaec285 100644 --- a/src/window_park.c +++ b/src/window_park.c @@ -866,30 +866,7 @@ static void window_park_entrance_textinput() rct_window *w; char *text; - #ifdef _MSC_VER - __asm mov result, cl - #else - __asm__ ( "mov %[result], cl " : [result] "+m" (result) ); - #endif - - #ifdef _MSC_VER - __asm mov widgetIndex, dx - #else - __asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) ); - #endif - - #ifdef _MSC_VER - __asm mov w, esi - #else - __asm__ ( "mov %[w], esi " : [w] "+m" (w) ); - #endif - - #ifdef _MSC_VER - __asm mov text, edi - #else - __asm__ ( "mov %[text], edi " : [text] "+m" (text) ); - #endif - + window_textinput_get_registers(w, widgetIndex, result, text); if (widgetIndex == WIDX_RENAME) { if (result) { diff --git a/src/window_ride.c b/src/window_ride.c index cf5878b7ad..614d4f197d 100644 --- a/src/window_ride.c +++ b/src/window_ride.c @@ -407,25 +407,6 @@ static void window_ride_anchor_border_widgets(rct_window *w) w->widgets[WIDX_CLOSE].right = w->width - 3; } -/** - * - * rct2: 0x006AEC68 - */ -static void window_ride_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 & (1LL << (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; - } -} - #pragma region Main /** @@ -456,6 +437,19 @@ static void window_ride_construct(rct_window *w) } } +/** + * + * rct2: 0x006AF315 + */ +static void window_ride_rename(rct_window *w) +{ + rct_ride *ride; + + ride = GET_RIDE(w->number); + RCT2_GLOBAL(0x013CE962, uint32) = ride->var_04C; + window_show_textinput(w, WIDX_RENAME, STR_RIDE_ATTRACTION_NAME, STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION, ride->var_04A); +} + /** * * rct2: 0x006AF3B3 @@ -547,6 +541,7 @@ static void window_ride_main_mouseup() window_ride_construct(w); break; case WIDX_RENAME: + window_ride_rename(w); break; case WIDX_LOCATE: window_ride_locate(w); @@ -787,15 +782,20 @@ static void window_ride_main_update(rct_window *w) */ static void window_ride_main_textinput() { + uint8 result; short widgetIndex; rct_window *w; + char *text; - window_widget_get_registers(w, widgetIndex); + window_textinput_get_registers(w, widgetIndex, result, text); - if (widgetIndex != WIDX_RENAME) + if (widgetIndex != WIDX_RENAME || !result) return; - + RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_RENAME_RIDE_ATTRACTION; + game_do_command(1, (w->number << 8) | 1, 0, *((int*)(text + 0)), GAME_COMMAND_SET_RIDE_NAME, *((int*)(text + 8)), *((int*)(text + 4))); + game_do_command(2, (w->number << 8) | 1, 0, *((int*)(text + 12)), GAME_COMMAND_SET_RIDE_NAME, *((int*)(text + 20)), *((int*)(text + 16))); + game_do_command(0, (w->number << 8) | 1, 0, *((int*)(text + 24)), GAME_COMMAND_SET_RIDE_NAME, *((int*)(text + 32)), *((int*)(text + 28))); } /** @@ -846,7 +846,7 @@ static void window_ride_main_invalidate() window_ride_main_widgets[WIDX_VIEW_DROPDOWN].right = w->width - 61; window_ride_main_widgets[WIDX_VIEW_DROPDOWN].left = w->width - 71; - window_ride_align_tabs(w); + window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10); } /**