diff --git a/src/window_credits.c b/src/window_credits.c index 6de7f01d6f..1a839b74e6 100644 --- a/src/window_credits.c +++ b/src/window_credits.c @@ -26,11 +26,29 @@ #include "widget.h" #include "window.h" +enum WINDOW_MUSIC_CREDITS_WIDGET_IDX { + WIDX_BACKGROUND, + WIDX_TITLE, + WIDX_CLOSE +}; + +rct_widget window_music_credits_widgets[] = { + { WWT_FRAME, 0, 0, 509, 0, 313, 0x0FFFFFFFF, STR_NONE }, // panel / background + { WWT_CAPTION, 0, 1, 508, 1, 14, STR_MUSIC_ACKNOWLEDGEMENTS, STR_WINDOW_TITLE_TIP }, // title bar + { WWT_CLOSEBOX, 0, 497, 507, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button + { WWT_SCROLL, 0, 4, 505, 18, 309, 2, STR_NONE }, // scroll + { WIDGETS_END }, +}; + static void window_music_credits_emptysub() { } +static void window_music_credits_mouseup(); +static void window_music_credits_scrollgetsize(); +static void window_music_credits_paint(); +static void window_music_credits_scrollpaint(); static void* window_music_credits_events[] = { window_music_credits_emptysub, - (void*)0x0066DB2C, // onmouseup + window_music_credits_mouseup, window_music_credits_emptysub, window_music_credits_emptysub, window_music_credits_emptysub, @@ -44,7 +62,7 @@ static void* window_music_credits_events[] = { window_music_credits_emptysub, window_music_credits_emptysub, window_music_credits_emptysub, - (void*)0x0066DB37, //onscrollgetsize + window_music_credits_scrollgetsize, window_music_credits_emptysub, window_music_credits_emptysub, window_music_credits_emptysub, @@ -55,8 +73,8 @@ static void* window_music_credits_events[] = { window_music_credits_emptysub, window_music_credits_emptysub, window_music_credits_emptysub, - (void*)0x0066D7B9, // paint - (void*)0x0066D7BF //on scroll paint + window_music_credits_paint, + window_music_credits_scrollpaint }; /** @@ -82,12 +100,102 @@ void window_music_credits_open() 0 ); - window->widgets = (rct_widget*) 0x009A9704; - window->enabled_widgets = 0x4; + window->widgets = window_music_credits_widgets; + window->enabled_widgets = 1 << WIDX_CLOSE; window_init_scroll_widgets(window); window->colours[0] = 7; window->colours[1] = 7; window->colours[2] = 7; +} + +/** +* +* rct2: 0x0066DB2C +*/ +static void window_music_credits_mouseup() +{ + short widgetIndex; + rct_window *w; + + window_widget_get_registers(w, widgetIndex); + + switch (widgetIndex) { + case WIDX_CLOSE: + window_close(w); + break; + } +} + +/** + * + * rct2: 0x0066DB37 + */ +static void window_music_credits_scrollgetsize() +{ + int y = 560; + + #ifdef _MSC_VER + __asm mov edx, y + #else + __asm__("mov edx, %[y] " : [y] "+m" (y)); + #endif +} + +/** +* +* rct2: 0x0066D7B9 +*/ +static void window_music_credits_paint() +{ + rct_window *w; + rct_drawpixelinfo *dpi; + + window_paint_get_registers(w, dpi); + + window_draw_widgets(w, dpi); +} + +/** + * + * rct2: 0x0066D7BF + */ +static void window_music_credits_scrollpaint() +{ + rct_window *w; + rct_drawpixelinfo *dpi; + window_paint_get_registers(w, dpi); + + int x = 245; + + int y = 2; + int string = 0xB30; + for (int i = 0; i < 12; i++) { + gfx_draw_string_centred(dpi, string, x, y, 0, 0); + y += 10; + if (i == 10) { // Add 4 more space before "Original recordings ...". + y += 4; + } + string += 1; + } + + // Draw the separator + y += 5; + gfx_fill_rect_inset(dpi, 4, y, 484, y+1, w->colours[1], 0x20); + y += 11; + + for (int i = 0; i < 31; i++) { + if (i == 21) { // Move special courtesy to below Hypothermia. + gfx_draw_string_centred(dpi, string + 4, x, y, 0, 0); + y += 10; + continue; + } else if (i == 25) { // Remove special courtesy and blank line. + string += 2; + } + gfx_draw_string_centred(dpi, string, x, y, 0, 0); + y += 10; + string += 1; + } + } \ No newline at end of file