Skip to content

Commit

Permalink
FF8: Fix Voice simulate_OK_button behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
julianxhokaxhiu committed Jul 8, 2023
1 parent bb24015 commit 06216a6
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 27 deletions.
7 changes: 5 additions & 2 deletions src/ff8.h
Original file line number Diff line number Diff line change
Expand Up @@ -1071,8 +1071,11 @@ struct ff8_externals
uint32_t **worldmap_section38_position;
uint32_t (*worldmap_prepare_tim_for_upload)(uint8_t *, ff8_tim *);
uint32_t engine_eval_process_input;
uint32_t engine_eval_keyboard_gamepad_input;
uint32_t has_keyboard_gamepad_input;
void (*engine_eval_keyboard_gamepad_input)();
uint32_t engine_eval_is_button_pressed;
uint32_t *engine_input_confirmed_buttons;
uint32_t *engine_input_valid_buttons;
void (*has_keyboard_gamepad_input)();
uint32_t dinput_update_gamepad_status;
LPDIRECTINPUTDEVICE8A dinput_gamepad_device;
LPDIJOYSTATE2 dinput_gamepad_state;
Expand Down
17 changes: 10 additions & 7 deletions src/ff8_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -368,14 +368,17 @@ void ff8_find_externals()
ff8_externals.worldmap_sub_53F310 = get_relative_call(ff8_externals.worldmap_enter_main, 0xA7);

ff8_externals.engine_eval_process_input = get_relative_call(ff8_externals.pubintro_main_loop, 0x4);
ff8_externals.engine_eval_keyboard_gamepad_input = get_relative_call(ff8_externals.engine_eval_process_input, 0x16);
ff8_externals.has_keyboard_gamepad_input = get_relative_call(ff8_externals.engine_eval_process_input, 0x1B);
ff8_externals.engine_gamepad_button_pressed = (BYTE*)get_absolute_value(ff8_externals.has_keyboard_gamepad_input, 0x22);
ff8_externals.engine_mapped_buttons = (DWORD*)get_absolute_value(ff8_externals.engine_eval_keyboard_gamepad_input, 0xB9);

common_externals.get_keyboard_state = get_relative_call(ff8_externals.engine_eval_keyboard_gamepad_input, 0x11);
ff8_externals.engine_eval_keyboard_gamepad_input = (void (*)())get_relative_call(ff8_externals.engine_eval_process_input, 0x16);
ff8_externals.has_keyboard_gamepad_input = (void (*)())get_relative_call(ff8_externals.engine_eval_process_input, 0x1B);
ff8_externals.engine_eval_is_button_pressed = get_relative_call((uint32_t)ff8_externals.engine_eval_keyboard_gamepad_input, 0x4A6);
ff8_externals.engine_input_confirmed_buttons = (uint32_t*)get_absolute_value(ff8_externals.engine_eval_is_button_pressed, 0x62);
ff8_externals.engine_input_valid_buttons = (uint32_t*)get_absolute_value(ff8_externals.engine_eval_is_button_pressed, 0x3C);
ff8_externals.engine_gamepad_button_pressed = (BYTE*)get_absolute_value((uint32_t)ff8_externals.has_keyboard_gamepad_input, 0x22);
ff8_externals.engine_mapped_buttons = (DWORD*)get_absolute_value((uint32_t)ff8_externals.engine_eval_keyboard_gamepad_input, 0xB9);

common_externals.get_keyboard_state = get_relative_call((uint32_t)ff8_externals.engine_eval_keyboard_gamepad_input, 0x11);
ff8_externals.dinput_init_gamepad = get_relative_call(ff8_externals.sub_468810, 0xB4);
ff8_externals.dinput_update_gamepad_status = get_relative_call(ff8_externals.engine_eval_keyboard_gamepad_input, 0x1B);
ff8_externals.dinput_update_gamepad_status = get_relative_call((uint32_t)ff8_externals.engine_eval_keyboard_gamepad_input, 0x1B);
ff8_externals.dinput_gamepad_device = (LPDIRECTINPUTDEVICE8A)get_absolute_value(ff8_externals.dinput_update_gamepad_status, 0x16);
ff8_externals.dinput_gamepad_state = (LPDIJOYSTATE2)get_absolute_value(ff8_externals.dinput_update_gamepad_status, 0x1B);

Expand Down
30 changes: 12 additions & 18 deletions src/ff8_opengl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,7 @@ void swirl_sub_56D390(uint32_t x, uint32_t y, uint32_t w, uint32_t h)

int ff8_init_gamepad()
{
if (simulate_OK_button)
{
return TRUE;
}
else if (xinput_connected)
if (xinput_connected)
{
if (gamepad.Refresh())
return TRUE;
Expand Down Expand Up @@ -416,26 +412,24 @@ LPDIJOYSTATE2 ff8_update_gamepad_status()
ff8_externals.dinput_gamepad_state->rgbButtons[12] = joystick.GetState()->rgbButtons[12] & 0x80 ? 0x80 : 0; // PS Button
}

if (simulate_OK_button)
{
// Flag the button OK as pressed
ff8_externals.dinput_gamepad_state->rgbButtons[1] = 0x80;

// End simulation right here before we press this button by mistake in other windows
simulate_OK_button = false;
}

return ff8_externals.dinput_gamepad_state;
}

int ff8_is_window_active()
{
typedef void voidfn();

if (gameHwnd == GetActiveWindow())
{
((voidfn*)ff8_externals.engine_eval_keyboard_gamepad_input)();
((voidfn*)ff8_externals.has_keyboard_gamepad_input)();
ff8_externals.engine_eval_keyboard_gamepad_input();
ff8_externals.has_keyboard_gamepad_input();

if (simulate_OK_button)
{
// Flag the button OK as pressed
ff8_externals.engine_input_confirmed_buttons[1] = ff8_externals.engine_input_valid_buttons[1] = 0x40;

// End simulation right here before we press this button by mistake in other windows
simulate_OK_button = false;
}
}

return 0;
Expand Down

0 comments on commit 06216a6

Please sign in to comment.