/** * * rct2: 0x006EA627 */ void game_handle_input() { for (rct_window *w = g_window_list; w < gWindowNextSlot; w++) { window_event_unknown_07_call(w); } sub_6EA73F(); sint32 x, y, state; while ((state = game_get_next_input(&x, &y)) != MOUSE_STATE_RELEASED) { game_handle_input_mouse(x, y, state & 0xFF); } if (_inputFlags & INPUT_FLAG_5) { game_handle_input_mouse(x, y, state); } else if (x != 0x80000000) { x = clamp(0, x, gScreenWidth - 1); y = clamp(0, y, gScreenHeight - 1); game_handle_input_mouse(x, y, state); process_mouse_over(x, y); process_mouse_tool(x, y); } for (rct_window *w = g_window_list; w < gWindowNextSlot; w++) { window_event_unknown_08_call(w); } }
/** * * rct2: 0x006EA627 */ void game_handle_input() { rct_window *w; if (RCT2_GLOBAL(0x009DEA64, uint16) & 2) { RCT2_GLOBAL(0x009DEA64, uint16) &= ~2; RCT2_CALLPROC_X(0x006677F2, 0, 1, 0, 0, 5, 2, 0); } if (RCT2_GLOBAL(0x009ABDF2, uint8) != 0) { for (w = RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_LIST, rct_window); w < RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*); w++) RCT2_CALLPROC_X(w->event_handlers[WE_UNKNOWN_07], 0, 0, 0, 0, (int)w, 0, 0); RCT2_CALLPROC_EBPSAFE(0x006EA73F); RCT2_CALLPROC_EBPSAFE(0x006E8346); // update_cursor_position { // int eax, ebx, ecx, edx, esi, edi, ebp; int eax, ebx, ecx; for (;;) { game_get_next_input(&eax, &ebx, &ecx); if (ecx == 0) break; game_handle_input_mouse(eax, ebx, ecx & 0xFF); // RCT2_CALLPROC_X(0x006E8655, eax, ebx, ecx, 0, 0, 0, 0); // window_process_mouse_input } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 5)) { game_handle_input_mouse(eax, ebx, ecx); // RCT2_CALLPROC_X(0x006E8655, eax, ebx, 0, 0, 0, 0, 0); // window_process_mouse_input } else if (eax != 0x80000000) { eax = clamp(0, eax, RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16) - 1); ebx = clamp(0, ebx, RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, sint16) - 1); game_handle_input_mouse(eax, ebx, ecx); // RCT2_CALLPROC_X(0x006E8655, eax, ebx, 0, 0, 0, 0, 0); // window_process_mouse_input RCT2_CALLPROC_X(0x006ED833, eax, ebx, 0, 0, 0, 0, 0); RCT2_CALLPROC_EBPSAFE(0x006ED801); } } } for (w = RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_LIST, rct_window); w < RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*); w++) RCT2_CALLPROC_X(w->event_handlers[WE_UNKNOWN_08], 0, 0, 0, 0, (int)w, 0, 0); }
/** * * rct2: 0x006EA627 */ void game_handle_input() { rct_window *w; int x, y, state; if (RCT2_GLOBAL(0x009DEA64, uint16) & 2) { RCT2_GLOBAL(0x009DEA64, uint16) &= ~2; game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 2, 0); } if (RCT2_GLOBAL(0x009ABDF2, uint8) != 0) { for (w = g_window_list; w < RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*); w++) window_event_unknown_07_call(w); sub_6EA73F(); for (;;) { game_get_next_input(&x, &y, &state); if (state == 0) { break; } game_handle_input_mouse(x, y, state & 0xFF); } if (gInputFlags & INPUT_FLAG_5) { game_handle_input_mouse(x, y, state); } else if (x != 0x80000000) { x = clamp(0, x, RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, uint16) - 1); y = clamp(0, y, RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, uint16) - 1); game_handle_input_mouse(x, y, state); process_mouse_over(x, y); process_mouse_tool(x, y); } } for (w = g_window_list; w < RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*); w++) window_event_unknown_08_call(w); }