1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-23 15:52:55 +01:00

Merge pull request #264 from qcz/wip-stafflist-cleanup

Enum for the game command table; cleanup warnings and comments from window_staff.c
This commit is contained in:
Ted John
2014-08-06 23:38:16 +01:00
7 changed files with 178 additions and 73 deletions

View File

@@ -495,7 +495,7 @@ void game_handle_input()
if (RCT2_GLOBAL(0x009DEA64, uint16) & 2) {
RCT2_GLOBAL(0x009DEA64, uint16) &= ~2;
game_do_command(0, 1, 0, 0, 5, 2, 0);
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 2, 0);
}
if (RCT2_GLOBAL(0x009ABDF2, uint8) != 0) {
@@ -2096,11 +2096,12 @@ int game_do_command(int eax, int ebx, int ecx, int edx, int esi, int edi, int eb
* @param flags (ebx)
* @param command (esi)
*/
int game_do_command_p(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp)
int game_do_command_p(int command, int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp)
{
int cost, flags, insufficientFunds;
int original_ebx, original_edx, original_esi, original_edi, original_ebp;
*esi = command;
original_ebx = *ebx;
original_edx = *edx;
original_esi = *esi;
@@ -2116,7 +2117,7 @@ int game_do_command_p(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi
*ebx &= ~1;
// Primary command
RCT2_CALLFUNC_X(game_do_command_table[*esi], eax, ebx, ecx, edx, esi, edi, ebp);
RCT2_CALLFUNC_X(game_do_command_table[command], eax, ebx, ecx, edx, esi, edi, ebp);
cost = *ebx;
if (cost != 0x80000000) {
@@ -2139,7 +2140,7 @@ int game_do_command_p(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi
}
// Secondary command
RCT2_CALLFUNC_X(game_do_command_table[*esi], eax, ebx, ecx, edx, esi, edi, ebp);
RCT2_CALLFUNC_X(game_do_command_table[command], eax, ebx, ecx, edx, esi, edi, ebp);
*edx = *ebx;
if (*edx != 0x80000000 && *edx < cost)
@@ -2262,6 +2263,54 @@ static void game_load_or_quit()
}
/**
*
* rct2: 0x00669E55
*/
static void game_update_staff_colour()
{
byte tabIndex, colour, _bl;
int spriteIndex;
rct_peep *peep;
#ifdef _MSC_VER
__asm mov _bl, bl
#else
__asm__("mov %[_bl], bl " : [_bl] "+m" (_bl));
#endif
#ifdef _MSC_VER
__asm mov tabIndex, bh
#else
__asm__("mov %[tabIndex], bh " : [tabIndex] "+m" (tabIndex));
#endif
#ifdef _MSC_VER
__asm mov colour, dh
#else
__asm__("mov %[colour], bh " : [colour] "+m" (colour));
#endif
if (_bl & 1) {
RCT2_ADDRESS(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8)[tabIndex] = colour;
FOR_ALL_PEEPS(spriteIndex, peep) {
if (peep->type == PEEP_TYPE_STAFF && peep->staff_type == tabIndex) {
peep->tshirt_colour = colour;
peep->trousers_colour = colour;
}
}
}
gfx_invalidate_screen();
#ifdef _MSC_VER
__asm mov ebx, 0
#else
__asm__("mov ebx, 0 ");
#endif
}
/**
*
* rct2: 0x00674F40
@@ -2521,14 +2570,14 @@ void rct2_exit()
void game_load_or_quit_no_save_prompt()
{
if (RCT2_GLOBAL(RCT2_ADDRESS_SAVE_PROMPT_MODE, uint16) < 1) {
game_do_command(0, 1, 0, 1, 5, 0, 0);
game_do_command(0, 1, 0, 1, GAME_COMMAND_LOAD_OR_QUIT, 0, 0);
tool_cancel();
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2)
load_landscape();
else
load_game();
} else if (RCT2_GLOBAL(RCT2_ADDRESS_SAVE_PROMPT_MODE, uint16) == 1) {
game_do_command(0, 1, 0, 1, 5, 0, 0);
game_do_command(0, 1, 0, 1, GAME_COMMAND_LOAD_OR_QUIT, 0, 0);
if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 5)) {
RCT2_CALLPROC_EBPSAFE(0x0040705E);
RCT2_GLOBAL(0x009DE518, uint32) &= ~(1 << 5);
@@ -2553,7 +2602,7 @@ static uint32 game_do_command_table[58] = {
0x006B49D9,
0x006B4EA6,
0x006B52D4,
0x006B578B,
0x006B578B, // 10
0x006B5559,
0x006660A8,
0x0066640B,
@@ -2563,7 +2612,7 @@ static uint32 game_do_command_table[58] = {
0x006A61DE,
0x006A68AE,
0x006A67C0,
0x00663CCD,
0x00663CCD, // 20
0x006B53E9,
0x00698D6C,
0x0068C542,
@@ -2573,7 +2622,7 @@ static uint32 game_do_command_table[58] = {
0x006E6878,
0x006C5AE9,
0x006BEFA1,
0x006C09D1,
0x006C09D1, // 30
0x006C0B83,
0x006C0BB5,
0x00669C6D,
@@ -2583,7 +2632,7 @@ static uint32 game_do_command_table[58] = {
0x00666A63,
0x006CD8CE,
0x00669E30,
0x00669E55, // updating the color of staff after setting a new one
(uint32)game_update_staff_colour, // 40
0x006E519A,
0x006E5597,
0x006B893C,
@@ -2593,7 +2642,7 @@ static uint32 game_do_command_table[58] = {
0x006D13FE,
0x0069E73C,
0x006CDEE4,
0x006B9E6D,
0x006B9E6D, // 50
0x006BA058,
0x006E0F26,
0x006E56B5,

View File

@@ -21,6 +21,67 @@
#ifndef _GAME_H_
#define _GAME_H_
enum GAME_COMMAND {
GAME_COMMAND_0,
GAME_COMMAND_1,
GAME_COMMAND_TOGGLE_PAUSE, // 2
GAME_COMMAND_3,
GAME_COMMAND_4,
GAME_COMMAND_LOAD_OR_QUIT, // 5
GAME_COMMAND_6,
GAME_COMMAND_7,
GAME_COMMAND_8,
GAME_COMMAND_9,
GAME_COMMAND_10,
GAME_COMMAND_11,
GAME_COMMAND_12,
GAME_COMMAND_13,
GAME_COMMAND_14,
GAME_COMMAND_15,
GAME_COMMAND_16,
GAME_COMMAND_17,
GAME_COMMAND_18,
GAME_COMMAND_19,
GAME_COMMAND_20,
GAME_COMMAND_21,
GAME_COMMAND_22,
GAME_COMMAND_23,
GAME_COMMAND_24,
GAME_COMMAND_25,
GAME_COMMAND_26,
GAME_COMMAND_27,
GAME_COMMAND_28,
GAME_COMMAND_HIRE_NEW_STAFF_MEMBER,
GAME_COMMAND_30,
GAME_COMMAND_31,
GAME_COMMAND_32,
GAME_COMMAND_33,
GAME_COMMAND_34,
GAME_COMMAND_35,
GAME_COMMAND_36,
GAME_COMMAND_37,
GAME_COMMAND_38,
GAME_COMMAND_39,
GAME_COMMAND_UPDATE_STAFF_COLOUR,
GAME_COMMAND_41,
GAME_COMMAND_42,
GAME_COMMAND_43,
GAME_COMMAND_44,
GAME_COMMAND_45,
GAME_COMMAND_46,
GAME_COMMAND_47,
GAME_COMMAND_48,
GAME_COMMAND_49,
GAME_COMMAND_50,
GAME_COMMAND_51,
GAME_COMMAND_52,
GAME_COMMAND_53,
GAME_COMMAND_54,
GAME_COMMAND_55,
GAME_COMMAND_56,
GAME_COMMAND_57
};
void game_create_windows();
void game_update();
void game_logic_update();
@@ -29,7 +90,7 @@ void update_rain_animation();
void update_water_animation();
int game_do_command(int eax, int ebx, int ecx, int edx, int esi, int edi, int ebp);
int game_do_command_p(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp);
int game_do_command_p(int command, int *eax, int *ebx, int *ecx, int *edx, int *edi, int *esi, int *ebp);
void game_increase_game_speed();
void game_reduce_game_speed();

View File

@@ -357,8 +357,8 @@ enum {
STR_ON = 1776,
STR_MUSIC = 1777,
STR_STAFF_LIST_COLORBTN = 1790,
STR_UNIFORM_COLOR = 1791,
STR_UNIFORM_COLOUR_TIP = 1790,
STR_UNIFORM_COLOUR = 1791,
STR_RESPONDING_TO_RIDE_BREAKDOWN_CALL = 1792,
STR_HEADING_TO_RIDE_FOR_INSPECTION = 1793,
STR_FIXING_RIDE = 1794,
@@ -417,7 +417,7 @@ enum {
STR_SHOW_SUBJECT_TIP = 1937,
STR_SHOW_PATROL_AREA_TIP = 1947,
STR_STAFF_LIST_DROPDOWNBUTTON_TIP = 1948,
STR_HIRE_STAFF_TIP = 1948,
STR_FINANCIAL_SUMMARY = 1949,
STR_FINANCIAL_GRAPH = 1950,
STR_PARK_VALUE_GRAPH = 1951,

View File

@@ -163,7 +163,7 @@ static void window_game_top_toolbar_mouseup()
switch (widgetIndex) {
case WIDX_PAUSE:
game_do_command(0, 1, 0, 0, 2, 0, 0);
game_do_command(0, 1, 0, 0, GAME_COMMAND_TOGGLE_PAUSE, 0, 0);
break;
case WIDX_FASTFORWARD:
// This is an excellent place to add in debugging statements and
@@ -364,7 +364,7 @@ static void window_game_top_toolbar_dropdown()
if (widgetIndex == WIDX_FILE_MENU) {
switch (dropdownIndex) {
case 0: // load game
game_do_command(0, 1, 0, 0, 5, 0, 0);
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0);
break;
case 1: // save game
tool_cancel();
@@ -381,7 +381,7 @@ static void window_game_top_toolbar_dropdown()
RCT2_GLOBAL(RCT2_ADDRESS_SCREENSHOT_COUNTDOWN, sint8) = 10;
break;
case 7: // quit game
game_do_command(0, 1, 0, 0, 5, 1, 0);
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 1, 0);
break;
}
} else if (widgetIndex == WIDX_VIEW_MENU) {

View File

@@ -182,7 +182,7 @@ void window_staff_peep_open(rct_peep* peep)
{
rct_window* w = window_bring_to_front_by_id(WC_PEEP, peep->sprite_index);
if (!w) {
int eax, ebx, ecx, edx, esi, edi, ebp;
int eax, ebx, ecx, edx, esi, edi;
eax = peep->sprite_index;
ecx = WC_PEEP;
@@ -196,7 +196,7 @@ void window_staff_peep_open(rct_peep* peep)
w->widgets = RCT2_GLOBAL(0x992998, rct_widget*);
w->enabled_widgets = RCT2_GLOBAL(0x9929B0, uint32);
w->var_020 = RCT2_GLOBAL(0x9929BC, uint32);
w->event_handlers = RCT2_GLOBAL(0x9929A4, uint32);
w->event_handlers = (uint32*)RCT2_GLOBAL(0x9929A4, uint32);
w->pressed_widgets = 0;
RCT2_CALLPROC_X(0x006BED21, 0, 0, 0, 0, (int)w, 0, 0);
window_init_scroll_widgets(w);

View File

@@ -54,66 +54,66 @@ static void window_staff_paint();
static void window_staff_scrollpaint();
static void* window_staff_events[] = {
window_staff_close, //(void*)0x006BD9B1,
window_staff_mouseup, //(void*)0x006BD94C,
window_staff_resize, //(void*)0x006BDD5D,
window_staff_mousedown, //(void*)0x006BD971,
window_staff_dropdown, //(void*)0x006BD9A6,
window_staff_close,
window_staff_mouseup,
window_staff_resize,
window_staff_mousedown,
window_staff_dropdown,
window_staff_emptysub,
window_staff_update, // (void*)0x006BDCEA,
window_staff_update,
window_staff_emptysub,
window_staff_emptysub,
window_staff_emptysub,
(void*)0x006BD990, // window_staff_tooldown
window_staff_emptysub,
window_staff_emptysub,
window_staff_toolabort, // (void*)0x006BD99B,
window_staff_toolabort,
window_staff_emptysub,
window_staff_scrollgetsize, // (void*)0x006BDBE6,
window_staff_scrollmousedown, // (void*)0x006BDC9A,
window_staff_scrollgetsize,
window_staff_scrollmousedown,
window_staff_emptysub,
window_staff_scrollmouseover, // (void*)0x006BDC6B,
window_staff_scrollmouseover,
window_staff_emptysub,
window_staff_emptysub,
window_staff_emptysub,
window_staff_tooltip, // (void*)0x006BDC90,
window_staff_tooltip,
window_staff_emptysub,
window_staff_emptysub,
window_staff_invalidate, // (void*)0x006BD477,
window_staff_paint, // (void*)0x006BD533,
window_staff_scrollpaint, // (void*)0x006BD785,
window_staff_invalidate,
window_staff_paint,
window_staff_scrollpaint,
};
enum WINDOW_STAFF_LIST_WIDGET_IDX {
WIDX_STAFF_BACKGROUND, // 0,1
WIDX_STAFF_TITLE, // 1,2
WIDX_STAFF_CLOSE, // 2,4
WIDX_STAFF_TAB_CONTENT_PANEL, // 3,8
WIDX_STAFF_HANDYMEN_TAB, // 4,10
WIDX_STAFF_MECHANICS_TAB, // 5,20
WIDX_STAFF_SECURITY_TAB, // 6,40
WIDX_STAFF_ENTERTAINERS_TAB, // 7,80
WIDX_STAFF_LIST, // 8,100
WIDX_STAFF_UNIFORM_COLOR_PICKER, // 9,200
WIDX_STAFF_HIRE_BUTTON, // A,400
WIDX_STAFF_SHOW_PATROL_AREA_BUTTON, // B,800
WIDX_STAFF_MAP, // C,1000
WIDX_STAFF_BACKGROUND,
WIDX_STAFF_TITLE,
WIDX_STAFF_CLOSE,
WIDX_STAFF_TAB_CONTENT_PANEL,
WIDX_STAFF_HANDYMEN_TAB,
WIDX_STAFF_MECHANICS_TAB,
WIDX_STAFF_SECURITY_TAB,
WIDX_STAFF_ENTERTAINERS_TAB,
WIDX_STAFF_LIST,
WIDX_STAFF_UNIFORM_COLOR_PICKER,
WIDX_STAFF_HIRE_BUTTON,
WIDX_STAFF_SHOW_PATROL_AREA_BUTTON,
WIDX_STAFF_MAP,
};
static rct_widget window_staff_widgets[] = {
{ WWT_FRAME, 0, 0, 319, 0, 269, 0x0FFFFFFFF, STR_NONE }, // 0,1: panel / background
{ WWT_CAPTION, 0, 1, 318, 1, 14, STR_STAFF, STR_WINDOW_TITLE_TIP }, // 1,2: title bar
{ WWT_CLOSEBOX, 0, 307, 317, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // 2,4: close x button
{ WWT_RESIZE, 1, 0, 319, 43, 269, 0x0FFFFFFFF, STR_NONE }, // 3,8: tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_STAFF_HANDYMEN_TAB_TIP }, // 4,10: tab 1
{ WWT_TAB, 1, 34, 64, 17, 43, 0x02000144E, STR_STAFF_MECHANICS_TAB_TIP }, // 5,20: tab 2
{ WWT_TAB, 1, 65, 95, 17, 43, 0x02000144E, STR_STAFF_SECURITY_TAB_TIP }, // 6,40: tab 3
{ WWT_TAB, 1, 96, 126, 17, 43, 0x02000144E, STR_STAFF_ENTERTAINERS_TAB_TIP }, // 7,80: tab 4
{ WWT_SCROLL, 1, 3, 316, 72, 266, 3, STR_NONE }, // 8,100: staff list
{ WWT_COLORBTN, 1, 130, 141, 58, 69, STR_NONE, STR_STAFF_LIST_COLORBTN }, // 9,200: uniform color picker
{ WWT_DROPDOWN_BUTTON, 0, 165, 309, 17, 29, STR_NONE, STR_STAFF_LIST_DROPDOWNBUTTON_TIP }, // 10,400: hire button
{ WWT_FLATBTN, 1, 267, 290, 46, 69, 5175, STR_SHOW_PATROL_AREA_TIP }, // 11,800: show staff patrol area
{ WWT_FLATBTN, 1, 291, 314, 46, 69, 5192, STR_SHOW_STAFF_ON_MAP_TIP }, // 12,1000: map
{ WWT_FRAME, 0, 0, 319, 0, 269, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 318, 1, 14, STR_STAFF, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 307, 317, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close button
{ WWT_RESIZE, 1, 0, 319, 43, 269, 0x0FFFFFFFF, STR_NONE }, // tab content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_STAFF_HANDYMEN_TAB_TIP }, // handymen tab
{ WWT_TAB, 1, 34, 64, 17, 43, 0x02000144E, STR_STAFF_MECHANICS_TAB_TIP }, // mechanics tab
{ WWT_TAB, 1, 65, 95, 17, 43, 0x02000144E, STR_STAFF_SECURITY_TAB_TIP }, // security guards tab
{ WWT_TAB, 1, 96, 126, 17, 43, 0x02000144E, STR_STAFF_ENTERTAINERS_TAB_TIP }, // entertainers tab
{ WWT_SCROLL, 1, 3, 316, 72, 266, 3, STR_NONE }, // staff list
{ WWT_COLORBTN, 1, 130, 141, 58, 69, STR_NONE, STR_UNIFORM_COLOUR_TIP }, // uniform color picker
{ WWT_DROPDOWN_BUTTON, 0, 165, 309, 17, 29, STR_NONE, STR_HIRE_STAFF_TIP }, // hire button
{ WWT_FLATBTN, 1, 267, 290, 46, 69, 5175, STR_SHOW_PATROL_AREA_TIP }, // show staff patrol area tool
{ WWT_FLATBTN, 1, 291, 314, 46, 69, 5192, STR_SHOW_STAFF_ON_MAP_TIP }, // show staff on map button
{ WIDGETS_END },
};
@@ -208,9 +208,8 @@ void window_staff_hire_new() {
eax = 0x8000;
ebx = RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8) << 8 | bl;
esi = 0x1D;
int result = game_do_command_p(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
int result = game_do_command_p(GAME_COMMAND_HIRE_NEW_STAFF_MEMBER, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
if (result == 0x80000000) {
rct_window* window = window_find_by_id(WC_STAFF_LIST, 0);
@@ -300,7 +299,7 @@ static void window_staff_resize()
static void window_staff_mousedown(int widgetIndex, rct_window*w, rct_widget* widget)
{
short newSelectedTab;
int eax, ebx, ecx, edx;
int eax;
switch (widgetIndex) {
case WIDX_STAFF_HANDYMEN_TAB:
@@ -317,11 +316,7 @@ static void window_staff_mousedown(int widgetIndex, rct_window*w, rct_widget* wi
break;
case WIDX_STAFF_UNIFORM_COLOR_PICKER:
eax = (RCT2_ADDRESS(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8)[RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8)] << 8) + 0x80 + w->colours[1];
ebx = 0;
ecx = 0;
edx = widgetIndex;
RCT2_CALLPROC_X(0x006ED43D, eax, &ebx, &ecx, &edx, (int)w, (int)widget, 0xFFFFFFFF);
RCT2_CALLPROC_X(0x006ED43D, eax, 0, 0, widgetIndex, (int)w, (int)widget, 0xFFFFFFFF);
break;
}
@@ -354,7 +349,7 @@ static void window_staff_dropdown()
(RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8) << 8) + 1,
0,
(dropdownIndex << 8) + 4,
0x28,
GAME_COMMAND_UPDATE_STAFF_COLOUR,
0,
0);
}
@@ -587,7 +582,7 @@ void window_staff_invalidate()
* rct2: 0x006BD533
*/
void window_staff_paint() {
int i, x, y, format;
int i;
uint8 selectedTab;
rct_window *w;
rct_drawpixelinfo *dpi;
@@ -674,7 +669,7 @@ void window_staff_paint() {
}
if (selectedTab < 3) {
gfx_draw_string_left(dpi, STR_UNIFORM_COLOR, w, 0, w->x + 6, window_staff_widgets[WIDX_STAFF_UNIFORM_COLOR_PICKER].top + w->y + 1);
gfx_draw_string_left(dpi, STR_UNIFORM_COLOUR, w, 0, w->x + 6, window_staff_widgets[WIDX_STAFF_UNIFORM_COLOR_PICKER].top + w->y + 1);
}
int staffTypeStringId = 1859 + selectedTab;
@@ -753,7 +748,7 @@ void window_staff_scrollpaint()
staffOrderSprite = RCT2_ADDRESS(0x00992A08, uint32)[selectedTab];
while (staffOrders != 0) {
if (staffOrders & 1 != 0) {
if (staffOrders & 1) {
gfx_draw_sprite(dpi, staffOrderSprite, staffOrderIcon_x, y - 1);
}
staffOrders = staffOrders >> 1;

View File

@@ -118,7 +118,7 @@ static void window_title_menu_mouseup()
if (widgetIndex == WIDX_START_NEW_GAME) {
window_scenarioselect_open();
} else if (widgetIndex == WIDX_CONTINUE_SAVED_GAME) {
game_do_command(0, 1, 0, 0, 5, 0, 0);
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0);
}
}