mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-24 00:03:11 +01:00
Merge branch 'title-logo-paint' of https://github.com/benpye/OpenRCT2 into benpye-title-logo-paint
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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.
|
||||
@@ -29,6 +29,41 @@ static rct_widget window_title_exit_widgets[] = {
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
static void window_title_exit_emptysub() {}
|
||||
static void window_title_exit_paint();
|
||||
static void window_title_exit_mouseup();
|
||||
|
||||
static uint32 window_title_exit_events[] = {
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_mouseup,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_emptysub,
|
||||
window_title_exit_paint,
|
||||
window_title_exit_emptysub
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates the window containing the exit button on the title screen.
|
||||
* rct2: 0x0066B624 (part of 0x0066B3E8)
|
||||
@@ -40,7 +75,7 @@ void window_title_exit_open()
|
||||
window = window_create(
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16) - 40, RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, sint16) - 64,
|
||||
40, 64,
|
||||
0x0097BEFC,
|
||||
window_title_exit_events,
|
||||
WC_TITLE_EXIT,
|
||||
WF_STICK_TO_FRONT
|
||||
);
|
||||
@@ -52,3 +87,37 @@ void window_title_exit_open()
|
||||
window->colours[1] = 140;
|
||||
window->colours[2] = 140;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066B83C
|
||||
*/
|
||||
static void window_title_exit_mouseup()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w;
|
||||
|
||||
__asm mov widgetIndex, dx
|
||||
__asm mov w, esi
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_RUN_INTRO_TICK_PART, int) != 0)
|
||||
return;
|
||||
|
||||
if (widgetIndex == 0)
|
||||
RCT2_CALLPROC_X(0x006677F2, 0, 1, 0, 0, 5, 2, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066B836
|
||||
*/
|
||||
static void window_title_exit_paint()
|
||||
{
|
||||
rct_window *w;
|
||||
rct_drawpixelinfo *dpi;
|
||||
|
||||
__asm mov w, esi
|
||||
__asm mov dpi, edi
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
}
|
||||
@@ -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
|
||||
buffer[0] = '\n';
|
||||
buffer[1] = '\v';
|
||||
buffer[2] = FORMAT_YELLOW; // Colour of the text
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user