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 var_03D;
uint8 hunger; // 0x3E uint8 hunger; // 0x3E
uint8 thirst; // 0x3F uint8 thirst; // 0x3F
uint8 pad_040[0x28]; uint8 bathroom; // 0x40
uint8 pad_041[0x27];
uint8 current_ride; // 0x68 uint8 current_ride; // 0x68
uint8 pad_6A; // 0x6A Part of current_ride? uint8 pad_6A; // 0x6A Part of current_ride?
uint8 current_train; // 0x6B uint8 current_train; // 0x6B

View File

@ -21,11 +21,14 @@
#include <string.h> #include <string.h>
#include "addresses.h" #include "addresses.h"
#include "park.h" #include "park.h"
#include "peep.h"
#include "strings.h" #include "strings.h"
#include "sprite.h"
#include "sprites.h" #include "sprites.h"
#include "widget.h" #include "widget.h"
#include "window.h" #include "window.h"
#define WW 200 #define WW 200
#define WH 128 #define WH 128
@ -41,10 +44,11 @@ static enum WINDOW_CHEATS_WIDGET_IDX {
WIDX_PAGE_BACKGROUND, WIDX_PAGE_BACKGROUND,
WIDX_TAB_1, WIDX_TAB_1,
WIDX_TAB_2, 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_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_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_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 }, { 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_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_update();
static void window_cheats_invalidate(); static void window_cheats_invalidate();
static void window_cheats_paint(); 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_emptysub,
window_cheats_mouseup, window_cheats_money_mouseup,
window_cheats_emptysub, window_cheats_emptysub,
window_cheats_emptysub, window_cheats_emptysub,
window_cheats_emptysub, window_cheats_emptysub,
@ -92,6 +114,47 @@ static uint32 window_cheats_events[] = {
window_cheats_emptysub 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); static void window_cheats_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w);
void window_cheats_open() void window_cheats_open()
@ -103,18 +166,17 @@ void window_cheats_open()
if (window != NULL) if (window != NULL)
return; return;
window = window_create(32, 32, WW, WH, window_cheats_events, WC_CHEATS, 0); window = window_create(32, 32, WW, WH, window_cheats_money_events, WC_CHEATS, 0);
window->widgets = window_cheats_widgets; window->widgets = window_cheats_money_widgets;
window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | (1 << WIDX_HIGH_MONEY); window->enabled_widgets = window_cheats_page_enabled_widgets[0];
window_init_scroll_widgets(window); window_init_scroll_widgets(window);
window->page = WINDOW_CHEATS_PAGE_MONEY; window->page = WINDOW_CHEATS_PAGE_MONEY;
window->colours[0] = 1; window->colours[0] = 1;
window->colours[1] = 19; window->colours[1] = 19;
window->colours[2] = 19; window->colours[2] = 19;
} }
static void window_cheats_mouseup() static void window_cheats_money_mouseup()
{ {
int i; int i;
short widgetIndex; short widgetIndex;
@ -127,11 +189,47 @@ static void window_cheats_mouseup()
case WIDX_CLOSE: case WIDX_CLOSE:
window_close(w); window_close(w);
break; break;
case WIDX_TAB_1:
case WIDX_TAB_2:
window_cheats_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_HIGH_MONEY: case WIDX_HIGH_MONEY:
i = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32)); i = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32));
i += 100000; i += 100000;
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32) = ENCRYPT_MONEY(i); 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); window_invalidate_by_id(0x40 | WC_BOTTOM_TOOLBAR, 0);
break; break;
} }
@ -144,7 +242,7 @@ static void window_cheats_update()
__asm mov w, esi __asm mov w, esi
w->var_48E++; 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() static void window_cheats_invalidate()
@ -153,9 +251,14 @@ static void window_cheats_invalidate()
rct_window *w; rct_window *w;
__asm mov w, esi __asm mov w, esi
strcpy((char*)0x009BC677, "Cheats"); 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 // Set correct active tab
for (i = 0; i < 7; i++) for (i = 0; i < 7; i++)
w->pressed_widgets &= ~(1 << (WIDX_TAB_1 + 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))) { if (!(w->disabled_widgets & (1 << WIDX_TAB_2))) {
sprite_idx = 5568; sprite_idx = 5568;
if (w->page == WINDOW_CHEATS_PAGE_GUESTS) 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); 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);
}