Merge branch 'master' of https://github.com/duncanspumpkin/OpenRCT2 into duncanspumpkin-master

This commit is contained in:
IntelOrca 2014-05-02 13:46:04 +01:00
commit b60cee2d43
2 changed files with 130 additions and 14 deletions

View File

@ -87,7 +87,8 @@ typedef struct {
uint8 var_03D;
uint8 hunger; // 0x3E
uint8 thirst; // 0x3F
uint8 pad_040[0x28];
uint8 bathroom; // 0x40
uint8 pad_041[0x27];
uint8 current_ride; // 0x68
uint8 pad_6A; // 0x6A Part of current_ride?
uint8 current_train; // 0x6B

View File

@ -21,11 +21,14 @@
#include <string.h>
#include "addresses.h"
#include "park.h"
#include "peep.h"
#include "strings.h"
#include "sprite.h"
#include "sprites.h"
#include "widget.h"
#include "window.h"
#define WW 200
#define WH 128
@ -41,10 +44,11 @@ static enum WINDOW_CHEATS_WIDGET_IDX {
WIDX_PAGE_BACKGROUND,
WIDX_TAB_1,
WIDX_TAB_2,
WIDX_HIGH_MONEY
WIDX_HIGH_MONEY,
WIDX_HAPPY_GUESTS = 6 //Same as HIGH_MONEY as it is also the 6th widget but on a different page
};
static rct_widget window_cheats_widgets[] = {
static rct_widget window_cheats_money_widgets[] = {
{ WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, 0x0FFFFFFFF, 65535}, // panel / background
{ WWT_CAPTION, 0, 1, WW - 2, 1, 14, 3165, STR_WINDOW_TITLE_TIP}, // title bar
{ WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, 0x338, STR_CLOSE_WINDOW_TIP}, // close x button
@ -55,15 +59,33 @@ static rct_widget window_cheats_widgets[] = {
{ WIDGETS_END },
};
static rct_widget window_cheats_guests_widgets[] = {
{ WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, 0x0FFFFFFFF, 65535 }, // panel / background
{ WWT_CAPTION, 0, 1, WW - 2, 1, 14, 3165, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, 0x338, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_IMGBTN, 1, 0, WW - 1, 43, WH - 1, 0x0FFFFFFFF, 65535 }, // tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, 2462 }, // tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, 2462 }, // tab 2
{ WWT_CLOSEBOX, 1, 4, 74, 47, 63, 2376, 2376 }, // happy guests
{ WIDGETS_END },
};
static rct_widget *window_cheats_page_widgets[] = {
window_cheats_money_widgets,
window_cheats_guests_widgets
};
static void window_cheats_emptysub() { }
static void window_cheats_mouseup();
static void window_cheats_money_mouseup();
static void window_cheats_guests_mouseup();
static void window_cheats_update();
static void window_cheats_invalidate();
static void window_cheats_paint();
static void window_cheats_set_page(rct_window *w, int page);
static uint32 window_cheats_events[] = {
static uint32 window_cheats_money_events[] = {
window_cheats_emptysub,
window_cheats_mouseup,
window_cheats_money_mouseup,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
@ -92,6 +114,47 @@ static uint32 window_cheats_events[] = {
window_cheats_emptysub
};
static uint32 window_cheats_guests_events[] = {
window_cheats_emptysub,
window_cheats_guests_mouseup,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_update,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_emptysub,
window_cheats_invalidate,
window_cheats_paint,
window_cheats_emptysub
};
static uint32 *window_cheats_page_events[] = {
window_cheats_money_events,
window_cheats_guests_events,
};
static uint32 window_cheats_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | (1 << WIDX_HIGH_MONEY),
(1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | (1 << WIDX_HAPPY_GUESTS)
};
static void window_cheats_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w);
void window_cheats_open()
@ -103,18 +166,17 @@ void window_cheats_open()
if (window != NULL)
return;
window = window_create(32, 32, WW, WH, window_cheats_events, WC_CHEATS, 0);
window->widgets = window_cheats_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | (1 << WIDX_HIGH_MONEY);
window = window_create(32, 32, WW, WH, window_cheats_money_events, WC_CHEATS, 0);
window->widgets = window_cheats_money_widgets;
window->enabled_widgets = window_cheats_page_enabled_widgets[0];
window_init_scroll_widgets(window);
window->page = WINDOW_CHEATS_PAGE_MONEY;
window->colours[0] = 1;
window->colours[1] = 19;
window->colours[2] = 19;
}
static void window_cheats_mouseup()
static void window_cheats_money_mouseup()
{
int i;
short widgetIndex;
@ -127,11 +189,47 @@ static void window_cheats_mouseup()
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB_1:
case WIDX_TAB_2:
window_cheats_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_HIGH_MONEY:
i = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32));
i += 100000;
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32) = ENCRYPT_MONEY(i);
window_invalidate_by_id(0x40 | WC_BOTTOM_TOOLBAR, 0);
break;
}
}
static void window_cheats_guests_mouseup()
{
int i;
short widgetIndex;
rct_window *w;
__asm mov widgetIndex, dx
__asm mov w, esi
rct_peep* peep;
uint16 sprite_idx;
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB_1:
case WIDX_TAB_2:
window_cheats_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_HAPPY_GUESTS:
for (sprite_idx = RCT2_GLOBAL(RCT2_ADDRESS_SPRITES_START_PEEP, uint16); sprite_idx != SPRITE_INDEX_NULL; sprite_idx = peep->next) {
peep = &(RCT2_ADDRESS(RCT2_ADDRESS_SPRITE_LIST, rct_sprite)[sprite_idx].peep);
if (peep->type != PEEP_TYPE_GUEST)
continue;
if (peep->var_2A != 0)
continue;
peep->happiness = 255;
}
window_invalidate_by_id(0x40 | WC_BOTTOM_TOOLBAR, 0);
break;
}
@ -144,7 +242,7 @@ static void window_cheats_update()
__asm mov w, esi
w->var_48E++;
widget_invalidate(w->classification, w->number, WIDX_TAB_1);
widget_invalidate(w->classification, w->number, WIDX_TAB_1+w->page);
}
static void window_cheats_invalidate()
@ -153,9 +251,14 @@ static void window_cheats_invalidate()
rct_window *w;
__asm mov w, esi
strcpy((char*)0x009BC677, "Cheats");
rct_widget **widgets = window_cheats_page_widgets[w->page];
if (w->widgets != widgets) {
w->widgets = widgets;
window_init_scroll_widgets(w);
}
// Set correct active tab
for (i = 0; i < 7; i++)
w->pressed_widgets &= ~(1 << (WIDX_TAB_1 + i));
@ -190,7 +293,19 @@ static void window_cheats_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w)
if (!(w->disabled_widgets & (1 << WIDX_TAB_2))) {
sprite_idx = 5568;
if (w->page == WINDOW_CHEATS_PAGE_GUESTS)
sprite_idx += w->var_48E / 4;
sprite_idx += (w->var_48E / 2) % 8;
gfx_draw_sprite(dpi, sprite_idx, w->x + w->widgets[WIDX_TAB_2].left, w->y + w->widgets[WIDX_TAB_2].top);
}
}
static void window_cheats_set_page(rct_window *w, int page)
{
w->page = page;
w->enabled_widgets = window_cheats_page_enabled_widgets[page];
w->event_handlers = window_cheats_page_events[page];
w->widgets = window_cheats_page_widgets[page];
window_invalidate(w);
}