From 7c79d25c97584eec7603c96ef91ff45fc52c7341 Mon Sep 17 00:00:00 2001 From: Ben Pye Date: Tue, 29 Apr 2014 20:10:23 +0100 Subject: [PATCH] Add the logo window paint function and move some constants to addresses --- src/addresses.h | 2 + src/window_title_logo.c | 95 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 94 insertions(+), 3 deletions(-) diff --git a/src/addresses.h b/src/addresses.h index c59bb061a4..347adaccfd 100644 --- a/src/addresses.h +++ b/src/addresses.h @@ -214,6 +214,8 @@ #define RCT2_ADDRESS_MEM_TOTAL_PAGEFILE 0x01423B60 #define RCT2_ADDRESS_MEM_TOTAL_VIRTUAL 0x01423B64 +#define RCT2_ADDRESS_EXPANSION_FLAGS 0x009AB4C0 +#define RCT2_ADDRESS_EXPANSION_NAMES 0x009AACC0 static void RCT2_CALLPROC_EBPSAFE(int address) { diff --git a/src/window_title_logo.c b/src/window_title_logo.c index 2fde8c1fc6..aced1e0edf 100644 --- a/src/window_title_logo.c +++ b/src/window_title_logo.c @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (c) 2014 Ted John + * Copyright (c) 2014 Ted John, Ben Pye * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. * * This file is part of OpenRCT2. @@ -20,6 +20,7 @@ #include "addresses.h" #include "strings.h" +#include "sprites.h" #include "widget.h" #include "window.h" @@ -28,6 +29,40 @@ static rct_widget window_title_logo_widgets[] = { { WIDGETS_END }, }; +static void window_title_logo_emptysub() {} +static void window_title_logo_paint(); + +static uint32 window_title_logo_events[] = { + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_emptysub, + window_title_logo_paint, + window_title_logo_emptysub +}; + /** * Creates the window containing the logo and the expansion packs on the title screen. * rct2: 0x0066B679 (part of 0x0066B3E8) @@ -40,11 +75,11 @@ void window_title_logo_open() // Count number of expansion packs packs = 0; for (i = 0; i < 16; i++) - if (RCT2_GLOBAL(0x009AB4C0, uint16) & (1 << i)) + if (RCT2_GLOBAL(RCT2_ADDRESS_EXPANSION_FLAGS, uint16) & (1 << i)) packs++; // Create the window - window = window_create(0, 0, 200, 106 + (10 * packs), 0x0097BF6C, WC_TITLE_LOGO, WF_STICK_TO_FRONT); + window = window_create(0, 0, 200, 106 + (10 * packs), window_title_logo_events, WC_TITLE_LOGO, WF_STICK_TO_FRONT); window->widgets = 0x009A9658; // mouse move bug in original game, keep this address and no crash happens window_init_scroll_widgets(window); window->flags |= 16; @@ -52,3 +87,57 @@ void window_title_logo_open() window->colours[1] = 129; window->colours[2] = 129; } + +/** +* +* rct2: 0x0066B872 +*/ +static void window_title_logo_paint() +{ + int packs, x, y, i; + char *buffer, *names; + rct_window *w; + rct_drawpixelinfo *dpi; + + __asm mov w, esi + __asm mov dpi, edi + + gfx_draw_sprite(dpi, SPR_MENU_LOGO, w->x, w->y); + + x = 0; + y = 105; + + packs = RCT2_GLOBAL(RCT2_ADDRESS_EXPANSION_FLAGS, uint16); + names = RCT2_ADDRESS(RCT2_ADDRESS_EXPANSION_NAMES, char); + + buffer = (char*) 0x0141ED68; + + while (packs != 0) { + if (packs & 1) { + // Prefix for expansion name, not sure what 0x93 is + buffer[0] = '\n'; + buffer[1] = '\v'; + buffer[2] = 0x93; + buffer[3] = '+'; + buffer[4] = ' '; + + i = 0; + + // Copies the expansion name to the buffer, offset by 5 + do { + buffer[5 + i] = names[i]; + i++; + } while (names[i - 1] != 0); + + RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint32) = 0; + + gfx_draw_string(dpi, buffer, 0, x, y); + + y += 10; + } + + packs = packs >> 1; + + names += 128; + } +} \ No newline at end of file