3 Angajamente 828ef94174 ... b6a0472b1e

Autor SHA1 Permisiunea de a trimite mesaje. Dacă este dezactivată, utilizatorul nu va putea trimite nici un fel de mesaj Data
  ZengGengSen b6a0472b1e 1. add 3s request 1 an în urmă
  ZengGengSen 474fb3f43e Merge remote-tracking branch 'origin/master' 1 an în urmă
  ZengGengSen 7b82813dfc remove the some not require file 1 an în urmă

+ 86 - 0
app/src/main/cpp/frontend/drivers/platform_unix.c

@@ -348,6 +348,7 @@ void android_environment_cb_native(unsigned cmd, void *data) {
             );
 
             (*env)->SetObjectArrayElement(env, array, i, bean);
+            (*env)->DeleteLocalRef(env, bean);
             (*env)->DeleteLocalRef(env, description);
          }
 
@@ -427,6 +428,76 @@ void android_environment_cb_native(unsigned cmd, void *data) {
             (*env)->DeleteLocalRef(env, jgeometry);
        }
            break;
+       /*
+       case RETRO_ENVIRONMENT_SET_AUTO_INPUT_BINDS:
+       case RETRO_ENVIRONMENT_SET_INPUT_BINDS: {
+            retro_keybind_set *binds = (retro_keybind_set *) data;
+            int j;
+
+            jobject bind = NULL;
+            jobject bind_set = NULL;
+            jobjectArray bind_array = NULL;
+            jobjectArray bind_set_array = NULL;
+            jstring joy_axis_label = NULL;
+            jstring joy_key_label = NULL;
+
+            bind_set_array = (*env)->NewObjectArray(
+                env, MAX_USERS,
+                app->beans.input_bind_set.clazz,
+                NULL
+            );
+            for (i = 0; i < MAX_USERS; ++i) {
+                bind_array = (*env)->NewObjectArray(
+                        env, RARCH_FIRST_CUSTOM_BIND,
+                        app->beans.input_bind.clazz,
+                        NULL
+                );
+
+                for (j = 0; j < RARCH_FIRST_CUSTOM_BIND; ++j) {
+                    joy_axis_label = (*env)->NewStringUTF(env, binds[i][j].joyaxis_label);
+                    joy_key_label = (*env)->NewStringUTF(env, binds[i][j].joykey_label);
+                    bind = (*env)->NewObject(
+                            env,
+                            app->beans.input_bind.clazz,
+                            app->beans.input_bind.constructor,
+                            joy_axis_label,
+                            binds[i][j].joyaxis,
+                            binds[i][j].def_joyaxis,
+                            binds[i][j].orig_joyaxis,
+                            joy_key_label,
+                            binds[i][j].joykey,
+                            binds[i][j].def_joykey
+                    );
+
+                    (*env)->SetObjectArrayElement(env, bind_array, j, bind);
+
+                    (*env)->DeleteLocalRef(env, bind);
+                    (*env)->DeleteLocalRef(env, joy_key_label);
+                    (*env)->DeleteLocalRef(env, joy_axis_label);
+                }
+
+                bind_set = (*env)->NewObject(
+                        env,
+                        app->beans.input_bind_set.clazz,
+                        app->beans.input_bind_set.constructor,
+                        bind_array
+                );
+                (*env)->SetObjectArrayElement(env, bind_set_array, i, bind_set);
+
+                (*env)->DeleteLocalRef(env, bind_array);
+                (*env)->DeleteLocalRef(env, bind_set);
+            }
+
+            CALL_VOID_METHOD_PARAM(
+                  env, app->activity->clazz,
+                  app->environmentCallback,
+                  cmd, bind_set_array
+            );
+
+           (*env)->DeleteLocalRef(env, bind_set_array);
+       }
+           break;
+       */
    }
 }
 
@@ -725,6 +796,10 @@ Java_com_retroarch_browser_retroactivity_RetroActivityCommon_registerBeans(
    GET_CONSTRUCTOR(system_av_info.game_geometry, "(IIIIF)V");
    CREATE_CLASS(system_av_info.system_timing, "com/xugame/bean/SystemAVInfo$SystemTiming");
    GET_CONSTRUCTOR(system_av_info.system_timing, "(DD)V");
+//   CREATE_CLASS(input_bind, "com/xugame/bean/InputBind");
+//   GET_CONSTRUCTOR(input_bind, "(Ljava/lang/String;IIILjava/lang/String;II)V");
+//   CREATE_CLASS(input_bind_set, "com/xugame/bean/InputBindSet");
+//   GET_CONSTRUCTOR(input_bind_set, "([Lcom/xugame/bean/InputBind;)V");
 #undef CREATE_CLASS
 }
 
@@ -741,6 +816,8 @@ Java_com_retroarch_browser_retroactivity_RetroActivityCommon_unregisterBeans(
    (*env)->DeleteGlobalRef(env, android_app->beans.system_av_info.clazz);
    (*env)->DeleteGlobalRef(env, android_app->beans.system_av_info.game_geometry.clazz);
    (*env)->DeleteGlobalRef(env, android_app->beans.system_av_info.system_timing.clazz);
+//   (*env)->DeleteGlobalRef(env, android_app->beans.input_bind.clazz);
+//   (*env)->DeleteGlobalRef(env, android_app->beans.input_bind_set.clazz);
 }
 
 JNIEXPORT void JNICALL
@@ -843,6 +920,14 @@ JNIEXPORT void JNICALL Java_com_retroarch_browser_retroactivity_RetroActivityCom
 //   command_event(CMD_EVENT_VIDEO_APPLY_STATE_CHANGES, NULL);
 }
 
+JNIEXPORT void JNICALL Java_com_retroarch_browser_retroactivity_RetroActivityCommon_setJoystickBindValidNative
+        (JNIEnv *env, jobject thiz, jint port, jint id, jboolean valid) {
+    input_config_binds[port][id].valid = valid;
+}
+JNIEXPORT void JNICALL Java_com_retroarch_browser_retroactivity_RetroActivityCommon_setJoystickBindJoyKeyNative
+        (JNIEnv *env, jobject thiz, jint port, jint id, jint joy_key) {
+    input_config_binds[port][id].joykey = joy_key;
+}
 /*
  * Native activity interaction (called from main thread)
  **/
@@ -3296,3 +3381,4 @@ frontend_ctx_driver_t frontend_ctx_unix = {
 
 
 
+

+ 4 - 0
app/src/main/cpp/griffin/griffin.c

@@ -1223,9 +1223,13 @@ DATA RUNLOOP
 #include "../tasks/task_patch.c"
 #endif
 #include "../tasks/task_save.c"
+#ifdef HAVE_BSV_MOVIE
 #include "../tasks/task_movie.c"
+#endif
+#ifdef HAVE_FILE_TRANSFER
 #include "../tasks/task_image.c"
 #include "../tasks/task_file_transfer.c"
+#endif
 #ifdef HAVE_PLAYLIST
 #include "../tasks/task_playlist_manager.c"
 #include "../tasks/task_manual_content_scan.c"

+ 13 - 6
app/src/main/cpp/input/drivers_joypad/android_joypad.c

@@ -526,19 +526,26 @@ static int16_t android_joypad_state(
    return ret;
 }
 
-// todo: add 3 second detect delay
+/**
+ * 每 3s 检查一次是否有手柄插入
+ */
 static void android_joypad_poll(void) {
+   static retro_time_t timeout = 0;
    struct android_app *android_app = (struct android_app*)g_android;
    JNIEnv                     *env  = jni_thread_getenv();
+   retro_time_t now = cpu_features_get_time_usec();
 
    if (!env)
       return;
 
-   CALL_VOID_STATIC_METHOD(
-           env,
-           android_app->beans.joypad_manager.clazz,
-           android_app->beans.joypad_manager.pollInputDevices
-   );
+   if (!timeout || now >= timeout) {
+      timeout = now + 3000000;
+      CALL_VOID_STATIC_METHOD(
+              env,
+              android_app->beans.joypad_manager.clazz,
+              android_app->beans.joypad_manager.pollInputDevices
+      );
+   }
 }
 
 static bool android_joypad_query_pad(unsigned pad)

+ 9 - 12
app/src/main/cpp/input/input_driver.h

@@ -180,21 +180,12 @@ struct remote_message
    uint16_t state;
 };
 
-struct input_remote
-{
 #if defined(HAVE_NETWORKING) && defined(HAVE_NETWORKGAMEPAD)
+typedef struct input_remote
+{
    int net_fd[MAX_USERS];
-#endif
    bool state[RARCH_BIND_LIST_END];
-};
-
-
-typedef struct
-{
-   char display_name[256];
-} input_mouse_info_t;
-
-typedef struct input_remote input_remote_t;
+} input_remote_t;
 
 typedef struct input_remote_state
 {
@@ -203,6 +194,12 @@ typedef struct input_remote_state
    /* Left X, Left Y, Right X, Right Y */
    int16_t analog[4][MAX_USERS];
 } input_remote_state_t;
+#endif
+
+typedef struct
+{
+   char display_name[256];
+} input_mouse_info_t;
 
 typedef struct input_list_element_t
 {

+ 0 - 3087
app/src/main/cpp/retroarch.cfg

@@ -1,3087 +0,0 @@
-accessibility_enable = "false"
-accessibility_narrator_speech_speed = "5"
-ai_service_enable = "false"
-ai_service_mode = "1"
-ai_service_pause = "false"
-ai_service_source_lang = "0"
-ai_service_target_lang = "0"
-ai_service_url = "http://localhost:4404/"
-all_users_control_menu = "false"
-android_input_disconnect_workaround = "false"
-apply_cheats_after_load = "false"
-apply_cheats_after_toggle = "false"
-aspect_ratio_index = "22"
-assets_directory = "/data/user/0/com.retroarch.aarch64/assets"
-audio_block_frames = "1024"
-audio_device = ""
-audio_driver = "opensl"
-audio_dsp_plugin = ""
-audio_enable = "true"
-audio_enable_menu = "false"
-audio_enable_menu_bgm = "false"
-audio_enable_menu_cancel = "false"
-audio_enable_menu_notice = "false"
-audio_enable_menu_ok = "false"
-audio_enable_menu_scroll = "false"
-audio_fastforward_mute = "false"
-audio_fastforward_speedup = "false"
-audio_filter_dir = "/data/user/0/com.retroarch.aarch64/filters/audio"
-audio_latency = "128"
-audio_max_timing_skew = "0.050000"
-audio_mixer_mute_enable = "false"
-audio_mixer_volume = "0.000000"
-audio_mute_enable = "false"
-audio_out_rate = "48000"
-audio_rate_control = "true"
-audio_rate_control_delta = "0.005000"
-audio_resampler = "sinc"
-audio_resampler_quality = "2"
-audio_sync = "true"
-audio_volume = "0.000000"
-auto_overrides_enable = "true"
-auto_remaps_enable = "true"
-auto_screenshot_filename = "true"
-auto_shaders_enable = "true"
-autosave_interval = "10"
-block_sram_overwrite = "false"
-bluetooth_driver = "null"
-builtin_imageviewer_enable = "true"
-builtin_mediaplayer_enable = "false"
-bundle_assets_dst_path = "/data/user/0/com.retroarch.aarch64"
-bundle_assets_dst_path_subdir = "assets"
-bundle_assets_extract_enable = "true"
-bundle_assets_extract_last_version = "1686211365"
-bundle_assets_extract_version_current = "1686211365"
-bundle_assets_src_path = "/data/app/com.retroarch.aarch64-kOkTGB1j0-mD4jf-gfAYZg==/base.apk"
-cache_directory = "/storage/emulated/0/RetroArch/temp"
-camera_allow = "false"
-camera_device = ""
-camera_driver = "android"
-cheat_database_path = "/storage/emulated/0/RetroArch/cheats"
-check_firmware_before_loading = "false"
-config_save_on_exit = "true"
-content_database_path = "/data/user/0/com.retroarch.aarch64/database/rdb"
-content_favorites_directory = "default"
-content_favorites_path = "/storage/emulated/0/Android/data/com.retroarch.aarch64/files/content_favorites.lpl"
-content_favorites_size = "200"
-content_history_directory = "default"
-content_history_path = "/storage/emulated/0/Android/data/com.retroarch.aarch64/files/content_history.lpl"
-content_history_size = "200"
-content_image_history_directory = "default"
-content_image_history_path = "/storage/emulated/0/Android/data/com.retroarch.aarch64/files/content_image_history.lpl"
-content_music_history_directory = "default"
-content_music_history_path = "/storage/emulated/0/Android/data/com.retroarch.aarch64/files/content_music_history.lpl"
-content_runtime_log = "true"
-content_runtime_log_aggregate = "false"
-content_show_add = "true"
-content_show_add_entry = "2"
-content_show_contentless_cores = "2"
-content_show_explore = "true"
-content_show_favorites = "true"
-content_show_history = "true"
-content_show_images = "true"
-content_show_music = "false"
-content_show_playlists = "true"
-content_show_settings = "true"
-content_show_settings_password = ""
-content_video_directory = "default"
-content_video_history_path = "/storage/emulated/0/Android/data/com.retroarch.aarch64/files/content_video_history.lpl"
-core_assets_directory = "/storage/emulated/0/RetroArch/downloads"
-core_info_cache_enable = "true"
-core_info_savestate_bypass = "false"
-core_option_category_enable = "true"
-core_options_path = ""
-core_set_supports_no_game_enable = "true"
-core_updater_auto_backup = "false"
-core_updater_auto_backup_history_size = "1"
-core_updater_auto_extract_archive = "true"
-core_updater_buildbot_assets_url = "http://buildbot.libretro.com/assets/"
-core_updater_buildbot_cores_url = "http://buildbot.libretro.com/nightly/android/latest/x86_64/"
-core_updater_show_experimental_cores = "false"
-crt_switch_center_adjust = "0"
-crt_switch_hires_menu = "false"
-crt_switch_porch_adjust = "0"
-crt_switch_resolution = "0"
-crt_switch_resolution_super = "2560"
-crt_switch_resolution_use_custom_refresh_rate = "false"
-crt_switch_timings = ""
-crt_video_refresh_rate = "60.000000"
-current_resolution_id = "0"
-custom_viewport_height = "900"
-custom_viewport_width = "1097"
-custom_viewport_x = "251"
-custom_viewport_y = "0"
-desktop_menu_enable = "true"
-discord_allow = "false"
-discord_app_id = "475456035851599874"
-driver_switch_enable = "true"
-dynamic_wallpapers_directory = "/data/user/0/com.retroarch.aarch64/assets/wallpapers"
-enable_device_vibration = "false"
-facebook_stream_key = ""
-fastforward_frameskip = "true"
-fastforward_ratio = "0.000000"
-filter_by_current_core = "false"
-flicker_filter_enable = "false"
-flicker_filter_index = "0"
-fps_show = "false"
-fps_update_interval = "256"
-frame_time_counter_reset_after_fastforwarding = "false"
-frame_time_counter_reset_after_load_state = "false"
-frame_time_counter_reset_after_save_state = "false"
-framecount_show = "false"
-frontend_log_level = "0"
-game_specific_options = "true"
-gamemode_enable = "true"
-gamma_correction = "0"
-global_core_options = "false"
-history_list_enable = "true"
-input_ai_service = "nul"
-input_ai_service_axis = "nul"
-input_ai_service_btn = "nul"
-input_ai_service_mbtn = "nul"
-input_analog_deadzone = "0.000000"
-input_analog_sensitivity = "1.000000"
-input_android_physical_keyboard = ""
-input_audio_mute = "f9"
-input_audio_mute_axis = "nul"
-input_audio_mute_btn = "nul"
-input_audio_mute_mbtn = "nul"
-input_auto_game_focus = "0"
-input_auto_mouse_grab = "false"
-input_autodetect_enable = "true"
-input_axis_threshold = "0.500000"
-input_bind_hold = "2"
-input_bind_timeout = "5"
-input_block_timeout = "0"
-input_cheat_index_minus = "t"
-input_cheat_index_minus_axis = "nul"
-input_cheat_index_minus_btn = "nul"
-input_cheat_index_minus_mbtn = "nul"
-input_cheat_index_plus = "y"
-input_cheat_index_plus_axis = "nul"
-input_cheat_index_plus_btn = "nul"
-input_cheat_index_plus_mbtn = "nul"
-input_cheat_toggle = "u"
-input_cheat_toggle_axis = "nul"
-input_cheat_toggle_btn = "nul"
-input_cheat_toggle_mbtn = "nul"
-input_close_content = "nul"
-input_close_content_axis = "nul"
-input_close_content_btn = "nul"
-input_close_content_mbtn = "nul"
-input_descriptor_hide_unbound = "false"
-input_descriptor_label_show = "true"
-input_desktop_menu_toggle = "f5"
-input_desktop_menu_toggle_axis = "nul"
-input_desktop_menu_toggle_btn = "nul"
-input_desktop_menu_toggle_mbtn = "nul"
-input_device_p1 = "0"
-input_device_p10 = "0"
-input_device_p11 = "0"
-input_device_p12 = "0"
-input_device_p13 = "0"
-input_device_p14 = "0"
-input_device_p15 = "0"
-input_device_p16 = "0"
-input_device_p2 = "0"
-input_device_p3 = "0"
-input_device_p4 = "0"
-input_device_p5 = "0"
-input_device_p6 = "0"
-input_device_p7 = "0"
-input_device_p8 = "0"
-input_device_p9 = "0"
-input_disk_eject_toggle = "nul"
-input_disk_eject_toggle_axis = "nul"
-input_disk_eject_toggle_btn = "nul"
-input_disk_eject_toggle_mbtn = "nul"
-input_disk_next = "nul"
-input_disk_next_axis = "nul"
-input_disk_next_btn = "nul"
-input_disk_next_mbtn = "nul"
-input_disk_prev = "nul"
-input_disk_prev_axis = "nul"
-input_disk_prev_btn = "nul"
-input_disk_prev_mbtn = "nul"
-input_driver = "android"
-input_duty_cycle = "3"
-input_enable_hotkey = "nul"
-input_enable_hotkey_axis = "nul"
-input_enable_hotkey_btn = "nul"
-input_enable_hotkey_mbtn = "nul"
-input_exit_emulator = "escape"
-input_exit_emulator_axis = "nul"
-input_exit_emulator_btn = "nul"
-input_exit_emulator_mbtn = "nul"
-input_fps_toggle = "f3"
-input_fps_toggle_axis = "nul"
-input_fps_toggle_btn = "nul"
-input_fps_toggle_mbtn = "nul"
-input_frame_advance = "k"
-input_frame_advance_axis = "nul"
-input_frame_advance_btn = "nul"
-input_frame_advance_mbtn = "nul"
-input_game_focus_toggle = "scroll_lock"
-input_game_focus_toggle_axis = "nul"
-input_game_focus_toggle_btn = "nul"
-input_game_focus_toggle_mbtn = "nul"
-input_grab_mouse_toggle = "f11"
-input_grab_mouse_toggle_axis = "nul"
-input_grab_mouse_toggle_btn = "nul"
-input_grab_mouse_toggle_mbtn = "nul"
-input_halt_replay = "nul"
-input_halt_replay_axis = "nul"
-input_halt_replay_btn = "nul"
-input_halt_replay_mbtn = "nul"
-input_hold_fast_forward = "l"
-input_hold_fast_forward_axis = "nul"
-input_hold_fast_forward_btn = "nul"
-input_hold_fast_forward_mbtn = "nul"
-input_hold_slowmotion = "e"
-input_hold_slowmotion_axis = "nul"
-input_hold_slowmotion_btn = "nul"
-input_hold_slowmotion_mbtn = "nul"
-input_hotkey_block_delay = "5"
-input_joypad_driver = "android"
-input_keyboard_layout = ""
-input_load_state = "f4"
-input_load_state_axis = "nul"
-input_load_state_btn = "nul"
-input_load_state_mbtn = "nul"
-input_max_users = "8"
-input_menu_toggle = "f1"
-input_menu_toggle_axis = "nul"
-input_menu_toggle_btn = "nul"
-input_menu_toggle_gamepad_combo = "0"
-input_menu_toggle_mbtn = "nul"
-input_netplay_fade_chat_toggle = "nul"
-input_netplay_fade_chat_toggle_axis = "nul"
-input_netplay_fade_chat_toggle_btn = "nul"
-input_netplay_fade_chat_toggle_mbtn = "nul"
-input_netplay_game_watch = "i"
-input_netplay_game_watch_axis = "nul"
-input_netplay_game_watch_btn = "nul"
-input_netplay_game_watch_mbtn = "nul"
-input_netplay_host_toggle = "nul"
-input_netplay_host_toggle_axis = "nul"
-input_netplay_host_toggle_btn = "nul"
-input_netplay_host_toggle_mbtn = "nul"
-input_netplay_ping_toggle = "nul"
-input_netplay_ping_toggle_axis = "nul"
-input_netplay_ping_toggle_btn = "nul"
-input_netplay_ping_toggle_mbtn = "nul"
-input_netplay_player_chat = "tilde"
-input_netplay_player_chat_axis = "nul"
-input_netplay_player_chat_btn = "nul"
-input_netplay_player_chat_mbtn = "nul"
-input_osk_toggle = "nul"
-input_osk_toggle_axis = "nul"
-input_osk_toggle_btn = "nul"
-input_osk_toggle_mbtn = "nul"
-input_overlay = "/data/user/0/com.retroarch.aarch64/overlays/gamepads/neo-retropad/neo-retropad.cfg"
-input_overlay_abxy_diagonal_sensitivity = "50"
-input_overlay_aspect_adjust_landscape = "0.000000"
-input_overlay_aspect_adjust_portrait = "0.000000"
-input_overlay_auto_rotate = "true"
-input_overlay_auto_scale = "true"
-input_overlay_behind_menu = "false"
-input_overlay_dpad_diagonal_sensitivity = "80"
-input_overlay_enable = "true"
-input_overlay_enable_autopreferred = "true"
-input_overlay_hide_in_menu = "true"
-input_overlay_hide_when_gamepad_connected = "false"
-input_overlay_next = "nul"
-input_overlay_next_axis = "nul"
-input_overlay_next_btn = "nul"
-input_overlay_next_mbtn = "nul"
-input_overlay_opacity = "0.700000"
-input_overlay_scale_landscape = "1.000000"
-input_overlay_scale_portrait = "1.000000"
-input_overlay_show_inputs = "1"
-input_overlay_show_inputs_port = "0"
-input_overlay_show_mouse_cursor = "true"
-input_overlay_x_offset_landscape = "0.000000"
-input_overlay_x_offset_portrait = "0.000000"
-input_overlay_x_separation_landscape = "0.000000"
-input_overlay_x_separation_portrait = "0.000000"
-input_overlay_y_offset_landscape = "0.000000"
-input_overlay_y_offset_portrait = "0.000000"
-input_overlay_y_separation_landscape = "0.000000"
-input_overlay_y_separation_portrait = "0.000000"
-input_pause_toggle = "p"
-input_pause_toggle_axis = "nul"
-input_pause_toggle_btn = "nul"
-input_pause_toggle_mbtn = "nul"
-input_play_replay = "nul"
-input_play_replay_axis = "nul"
-input_play_replay_btn = "nul"
-input_play_replay_mbtn = "nul"
-input_player10_a = "nul"
-input_player10_a_axis = "nul"
-input_player10_a_btn = "nul"
-input_player10_a_mbtn = "nul"
-input_player10_analog_dpad_mode = "0"
-input_player10_b = "nul"
-input_player10_b_axis = "nul"
-input_player10_b_btn = "nul"
-input_player10_b_mbtn = "nul"
-input_player10_down = "nul"
-input_player10_down_axis = "nul"
-input_player10_down_btn = "nul"
-input_player10_down_mbtn = "nul"
-input_player10_gun_aux_a = "nul"
-input_player10_gun_aux_a_axis = "nul"
-input_player10_gun_aux_a_btn = "nul"
-input_player10_gun_aux_a_mbtn = "nul"
-input_player10_gun_aux_b = "nul"
-input_player10_gun_aux_b_axis = "nul"
-input_player10_gun_aux_b_btn = "nul"
-input_player10_gun_aux_b_mbtn = "nul"
-input_player10_gun_aux_c = "nul"
-input_player10_gun_aux_c_axis = "nul"
-input_player10_gun_aux_c_btn = "nul"
-input_player10_gun_aux_c_mbtn = "nul"
-input_player10_gun_dpad_down = "nul"
-input_player10_gun_dpad_down_axis = "nul"
-input_player10_gun_dpad_down_btn = "nul"
-input_player10_gun_dpad_down_mbtn = "nul"
-input_player10_gun_dpad_left = "nul"
-input_player10_gun_dpad_left_axis = "nul"
-input_player10_gun_dpad_left_btn = "nul"
-input_player10_gun_dpad_left_mbtn = "nul"
-input_player10_gun_dpad_right = "nul"
-input_player10_gun_dpad_right_axis = "nul"
-input_player10_gun_dpad_right_btn = "nul"
-input_player10_gun_dpad_right_mbtn = "nul"
-input_player10_gun_dpad_up = "nul"
-input_player10_gun_dpad_up_axis = "nul"
-input_player10_gun_dpad_up_btn = "nul"
-input_player10_gun_dpad_up_mbtn = "nul"
-input_player10_gun_offscreen_shot = "nul"
-input_player10_gun_offscreen_shot_axis = "nul"
-input_player10_gun_offscreen_shot_btn = "nul"
-input_player10_gun_offscreen_shot_mbtn = "nul"
-input_player10_gun_select = "nul"
-input_player10_gun_select_axis = "nul"
-input_player10_gun_select_btn = "nul"
-input_player10_gun_select_mbtn = "nul"
-input_player10_gun_start = "nul"
-input_player10_gun_start_axis = "nul"
-input_player10_gun_start_btn = "nul"
-input_player10_gun_start_mbtn = "nul"
-input_player10_gun_trigger = "nul"
-input_player10_gun_trigger_axis = "nul"
-input_player10_gun_trigger_btn = "nul"
-input_player10_gun_trigger_mbtn = "1"
-input_player10_joypad_index = "9"
-input_player10_l = "nul"
-input_player10_l2 = "nul"
-input_player10_l2_axis = "nul"
-input_player10_l2_btn = "nul"
-input_player10_l2_mbtn = "nul"
-input_player10_l3 = "nul"
-input_player10_l3_axis = "nul"
-input_player10_l3_btn = "nul"
-input_player10_l3_mbtn = "nul"
-input_player10_l_axis = "nul"
-input_player10_l_btn = "nul"
-input_player10_l_mbtn = "nul"
-input_player10_l_x_minus = "nul"
-input_player10_l_x_minus_axis = "nul"
-input_player10_l_x_minus_btn = "nul"
-input_player10_l_x_minus_mbtn = "nul"
-input_player10_l_x_plus = "nul"
-input_player10_l_x_plus_axis = "nul"
-input_player10_l_x_plus_btn = "nul"
-input_player10_l_x_plus_mbtn = "nul"
-input_player10_l_y_minus = "nul"
-input_player10_l_y_minus_axis = "nul"
-input_player10_l_y_minus_btn = "nul"
-input_player10_l_y_minus_mbtn = "nul"
-input_player10_l_y_plus = "nul"
-input_player10_l_y_plus_axis = "nul"
-input_player10_l_y_plus_btn = "nul"
-input_player10_l_y_plus_mbtn = "nul"
-input_player10_left = "nul"
-input_player10_left_axis = "nul"
-input_player10_left_btn = "nul"
-input_player10_left_mbtn = "nul"
-input_player10_mouse_index = "9"
-input_player10_r = "nul"
-input_player10_r2 = "nul"
-input_player10_r2_axis = "nul"
-input_player10_r2_btn = "nul"
-input_player10_r2_mbtn = "nul"
-input_player10_r3 = "nul"
-input_player10_r3_axis = "nul"
-input_player10_r3_btn = "nul"
-input_player10_r3_mbtn = "nul"
-input_player10_r_axis = "nul"
-input_player10_r_btn = "nul"
-input_player10_r_mbtn = "nul"
-input_player10_r_x_minus = "nul"
-input_player10_r_x_minus_axis = "nul"
-input_player10_r_x_minus_btn = "nul"
-input_player10_r_x_minus_mbtn = "nul"
-input_player10_r_x_plus = "nul"
-input_player10_r_x_plus_axis = "nul"
-input_player10_r_x_plus_btn = "nul"
-input_player10_r_x_plus_mbtn = "nul"
-input_player10_r_y_minus = "nul"
-input_player10_r_y_minus_axis = "nul"
-input_player10_r_y_minus_btn = "nul"
-input_player10_r_y_minus_mbtn = "nul"
-input_player10_r_y_plus = "nul"
-input_player10_r_y_plus_axis = "nul"
-input_player10_r_y_plus_btn = "nul"
-input_player10_r_y_plus_mbtn = "nul"
-input_player10_right = "nul"
-input_player10_right_axis = "nul"
-input_player10_right_btn = "nul"
-input_player10_right_mbtn = "nul"
-input_player10_select = "nul"
-input_player10_select_axis = "nul"
-input_player10_select_btn = "nul"
-input_player10_select_mbtn = "nul"
-input_player10_start = "nul"
-input_player10_start_axis = "nul"
-input_player10_start_btn = "nul"
-input_player10_start_mbtn = "nul"
-input_player10_turbo = "nul"
-input_player10_turbo_axis = "nul"
-input_player10_turbo_btn = "nul"
-input_player10_turbo_mbtn = "nul"
-input_player10_up = "nul"
-input_player10_up_axis = "nul"
-input_player10_up_btn = "nul"
-input_player10_up_mbtn = "nul"
-input_player10_x = "nul"
-input_player10_x_axis = "nul"
-input_player10_x_btn = "nul"
-input_player10_x_mbtn = "nul"
-input_player10_y = "nul"
-input_player10_y_axis = "nul"
-input_player10_y_btn = "nul"
-input_player10_y_mbtn = "nul"
-input_player11_a = "nul"
-input_player11_a_axis = "nul"
-input_player11_a_btn = "nul"
-input_player11_a_mbtn = "nul"
-input_player11_analog_dpad_mode = "0"
-input_player11_b = "nul"
-input_player11_b_axis = "nul"
-input_player11_b_btn = "nul"
-input_player11_b_mbtn = "nul"
-input_player11_down = "nul"
-input_player11_down_axis = "nul"
-input_player11_down_btn = "nul"
-input_player11_down_mbtn = "nul"
-input_player11_gun_aux_a = "nul"
-input_player11_gun_aux_a_axis = "nul"
-input_player11_gun_aux_a_btn = "nul"
-input_player11_gun_aux_a_mbtn = "nul"
-input_player11_gun_aux_b = "nul"
-input_player11_gun_aux_b_axis = "nul"
-input_player11_gun_aux_b_btn = "nul"
-input_player11_gun_aux_b_mbtn = "nul"
-input_player11_gun_aux_c = "nul"
-input_player11_gun_aux_c_axis = "nul"
-input_player11_gun_aux_c_btn = "nul"
-input_player11_gun_aux_c_mbtn = "nul"
-input_player11_gun_dpad_down = "nul"
-input_player11_gun_dpad_down_axis = "nul"
-input_player11_gun_dpad_down_btn = "nul"
-input_player11_gun_dpad_down_mbtn = "nul"
-input_player11_gun_dpad_left = "nul"
-input_player11_gun_dpad_left_axis = "nul"
-input_player11_gun_dpad_left_btn = "nul"
-input_player11_gun_dpad_left_mbtn = "nul"
-input_player11_gun_dpad_right = "nul"
-input_player11_gun_dpad_right_axis = "nul"
-input_player11_gun_dpad_right_btn = "nul"
-input_player11_gun_dpad_right_mbtn = "nul"
-input_player11_gun_dpad_up = "nul"
-input_player11_gun_dpad_up_axis = "nul"
-input_player11_gun_dpad_up_btn = "nul"
-input_player11_gun_dpad_up_mbtn = "nul"
-input_player11_gun_offscreen_shot = "nul"
-input_player11_gun_offscreen_shot_axis = "nul"
-input_player11_gun_offscreen_shot_btn = "nul"
-input_player11_gun_offscreen_shot_mbtn = "nul"
-input_player11_gun_select = "nul"
-input_player11_gun_select_axis = "nul"
-input_player11_gun_select_btn = "nul"
-input_player11_gun_select_mbtn = "nul"
-input_player11_gun_start = "nul"
-input_player11_gun_start_axis = "nul"
-input_player11_gun_start_btn = "nul"
-input_player11_gun_start_mbtn = "nul"
-input_player11_gun_trigger = "nul"
-input_player11_gun_trigger_axis = "nul"
-input_player11_gun_trigger_btn = "nul"
-input_player11_gun_trigger_mbtn = "1"
-input_player11_joypad_index = "10"
-input_player11_l = "nul"
-input_player11_l2 = "nul"
-input_player11_l2_axis = "nul"
-input_player11_l2_btn = "nul"
-input_player11_l2_mbtn = "nul"
-input_player11_l3 = "nul"
-input_player11_l3_axis = "nul"
-input_player11_l3_btn = "nul"
-input_player11_l3_mbtn = "nul"
-input_player11_l_axis = "nul"
-input_player11_l_btn = "nul"
-input_player11_l_mbtn = "nul"
-input_player11_l_x_minus = "nul"
-input_player11_l_x_minus_axis = "nul"
-input_player11_l_x_minus_btn = "nul"
-input_player11_l_x_minus_mbtn = "nul"
-input_player11_l_x_plus = "nul"
-input_player11_l_x_plus_axis = "nul"
-input_player11_l_x_plus_btn = "nul"
-input_player11_l_x_plus_mbtn = "nul"
-input_player11_l_y_minus = "nul"
-input_player11_l_y_minus_axis = "nul"
-input_player11_l_y_minus_btn = "nul"
-input_player11_l_y_minus_mbtn = "nul"
-input_player11_l_y_plus = "nul"
-input_player11_l_y_plus_axis = "nul"
-input_player11_l_y_plus_btn = "nul"
-input_player11_l_y_plus_mbtn = "nul"
-input_player11_left = "nul"
-input_player11_left_axis = "nul"
-input_player11_left_btn = "nul"
-input_player11_left_mbtn = "nul"
-input_player11_mouse_index = "10"
-input_player11_r = "nul"
-input_player11_r2 = "nul"
-input_player11_r2_axis = "nul"
-input_player11_r2_btn = "nul"
-input_player11_r2_mbtn = "nul"
-input_player11_r3 = "nul"
-input_player11_r3_axis = "nul"
-input_player11_r3_btn = "nul"
-input_player11_r3_mbtn = "nul"
-input_player11_r_axis = "nul"
-input_player11_r_btn = "nul"
-input_player11_r_mbtn = "nul"
-input_player11_r_x_minus = "nul"
-input_player11_r_x_minus_axis = "nul"
-input_player11_r_x_minus_btn = "nul"
-input_player11_r_x_minus_mbtn = "nul"
-input_player11_r_x_plus = "nul"
-input_player11_r_x_plus_axis = "nul"
-input_player11_r_x_plus_btn = "nul"
-input_player11_r_x_plus_mbtn = "nul"
-input_player11_r_y_minus = "nul"
-input_player11_r_y_minus_axis = "nul"
-input_player11_r_y_minus_btn = "nul"
-input_player11_r_y_minus_mbtn = "nul"
-input_player11_r_y_plus = "nul"
-input_player11_r_y_plus_axis = "nul"
-input_player11_r_y_plus_btn = "nul"
-input_player11_r_y_plus_mbtn = "nul"
-input_player11_right = "nul"
-input_player11_right_axis = "nul"
-input_player11_right_btn = "nul"
-input_player11_right_mbtn = "nul"
-input_player11_select = "nul"
-input_player11_select_axis = "nul"
-input_player11_select_btn = "nul"
-input_player11_select_mbtn = "nul"
-input_player11_start = "nul"
-input_player11_start_axis = "nul"
-input_player11_start_btn = "nul"
-input_player11_start_mbtn = "nul"
-input_player11_turbo = "nul"
-input_player11_turbo_axis = "nul"
-input_player11_turbo_btn = "nul"
-input_player11_turbo_mbtn = "nul"
-input_player11_up = "nul"
-input_player11_up_axis = "nul"
-input_player11_up_btn = "nul"
-input_player11_up_mbtn = "nul"
-input_player11_x = "nul"
-input_player11_x_axis = "nul"
-input_player11_x_btn = "nul"
-input_player11_x_mbtn = "nul"
-input_player11_y = "nul"
-input_player11_y_axis = "nul"
-input_player11_y_btn = "nul"
-input_player11_y_mbtn = "nul"
-input_player12_a = "nul"
-input_player12_a_axis = "nul"
-input_player12_a_btn = "nul"
-input_player12_a_mbtn = "nul"
-input_player12_analog_dpad_mode = "0"
-input_player12_b = "nul"
-input_player12_b_axis = "nul"
-input_player12_b_btn = "nul"
-input_player12_b_mbtn = "nul"
-input_player12_down = "nul"
-input_player12_down_axis = "nul"
-input_player12_down_btn = "nul"
-input_player12_down_mbtn = "nul"
-input_player12_gun_aux_a = "nul"
-input_player12_gun_aux_a_axis = "nul"
-input_player12_gun_aux_a_btn = "nul"
-input_player12_gun_aux_a_mbtn = "nul"
-input_player12_gun_aux_b = "nul"
-input_player12_gun_aux_b_axis = "nul"
-input_player12_gun_aux_b_btn = "nul"
-input_player12_gun_aux_b_mbtn = "nul"
-input_player12_gun_aux_c = "nul"
-input_player12_gun_aux_c_axis = "nul"
-input_player12_gun_aux_c_btn = "nul"
-input_player12_gun_aux_c_mbtn = "nul"
-input_player12_gun_dpad_down = "nul"
-input_player12_gun_dpad_down_axis = "nul"
-input_player12_gun_dpad_down_btn = "nul"
-input_player12_gun_dpad_down_mbtn = "nul"
-input_player12_gun_dpad_left = "nul"
-input_player12_gun_dpad_left_axis = "nul"
-input_player12_gun_dpad_left_btn = "nul"
-input_player12_gun_dpad_left_mbtn = "nul"
-input_player12_gun_dpad_right = "nul"
-input_player12_gun_dpad_right_axis = "nul"
-input_player12_gun_dpad_right_btn = "nul"
-input_player12_gun_dpad_right_mbtn = "nul"
-input_player12_gun_dpad_up = "nul"
-input_player12_gun_dpad_up_axis = "nul"
-input_player12_gun_dpad_up_btn = "nul"
-input_player12_gun_dpad_up_mbtn = "nul"
-input_player12_gun_offscreen_shot = "nul"
-input_player12_gun_offscreen_shot_axis = "nul"
-input_player12_gun_offscreen_shot_btn = "nul"
-input_player12_gun_offscreen_shot_mbtn = "nul"
-input_player12_gun_select = "nul"
-input_player12_gun_select_axis = "nul"
-input_player12_gun_select_btn = "nul"
-input_player12_gun_select_mbtn = "nul"
-input_player12_gun_start = "nul"
-input_player12_gun_start_axis = "nul"
-input_player12_gun_start_btn = "nul"
-input_player12_gun_start_mbtn = "nul"
-input_player12_gun_trigger = "nul"
-input_player12_gun_trigger_axis = "nul"
-input_player12_gun_trigger_btn = "nul"
-input_player12_gun_trigger_mbtn = "1"
-input_player12_joypad_index = "11"
-input_player12_l = "nul"
-input_player12_l2 = "nul"
-input_player12_l2_axis = "nul"
-input_player12_l2_btn = "nul"
-input_player12_l2_mbtn = "nul"
-input_player12_l3 = "nul"
-input_player12_l3_axis = "nul"
-input_player12_l3_btn = "nul"
-input_player12_l3_mbtn = "nul"
-input_player12_l_axis = "nul"
-input_player12_l_btn = "nul"
-input_player12_l_mbtn = "nul"
-input_player12_l_x_minus = "nul"
-input_player12_l_x_minus_axis = "nul"
-input_player12_l_x_minus_btn = "nul"
-input_player12_l_x_minus_mbtn = "nul"
-input_player12_l_x_plus = "nul"
-input_player12_l_x_plus_axis = "nul"
-input_player12_l_x_plus_btn = "nul"
-input_player12_l_x_plus_mbtn = "nul"
-input_player12_l_y_minus = "nul"
-input_player12_l_y_minus_axis = "nul"
-input_player12_l_y_minus_btn = "nul"
-input_player12_l_y_minus_mbtn = "nul"
-input_player12_l_y_plus = "nul"
-input_player12_l_y_plus_axis = "nul"
-input_player12_l_y_plus_btn = "nul"
-input_player12_l_y_plus_mbtn = "nul"
-input_player12_left = "nul"
-input_player12_left_axis = "nul"
-input_player12_left_btn = "nul"
-input_player12_left_mbtn = "nul"
-input_player12_mouse_index = "11"
-input_player12_r = "nul"
-input_player12_r2 = "nul"
-input_player12_r2_axis = "nul"
-input_player12_r2_btn = "nul"
-input_player12_r2_mbtn = "nul"
-input_player12_r3 = "nul"
-input_player12_r3_axis = "nul"
-input_player12_r3_btn = "nul"
-input_player12_r3_mbtn = "nul"
-input_player12_r_axis = "nul"
-input_player12_r_btn = "nul"
-input_player12_r_mbtn = "nul"
-input_player12_r_x_minus = "nul"
-input_player12_r_x_minus_axis = "nul"
-input_player12_r_x_minus_btn = "nul"
-input_player12_r_x_minus_mbtn = "nul"
-input_player12_r_x_plus = "nul"
-input_player12_r_x_plus_axis = "nul"
-input_player12_r_x_plus_btn = "nul"
-input_player12_r_x_plus_mbtn = "nul"
-input_player12_r_y_minus = "nul"
-input_player12_r_y_minus_axis = "nul"
-input_player12_r_y_minus_btn = "nul"
-input_player12_r_y_minus_mbtn = "nul"
-input_player12_r_y_plus = "nul"
-input_player12_r_y_plus_axis = "nul"
-input_player12_r_y_plus_btn = "nul"
-input_player12_r_y_plus_mbtn = "nul"
-input_player12_right = "nul"
-input_player12_right_axis = "nul"
-input_player12_right_btn = "nul"
-input_player12_right_mbtn = "nul"
-input_player12_select = "nul"
-input_player12_select_axis = "nul"
-input_player12_select_btn = "nul"
-input_player12_select_mbtn = "nul"
-input_player12_start = "nul"
-input_player12_start_axis = "nul"
-input_player12_start_btn = "nul"
-input_player12_start_mbtn = "nul"
-input_player12_turbo = "nul"
-input_player12_turbo_axis = "nul"
-input_player12_turbo_btn = "nul"
-input_player12_turbo_mbtn = "nul"
-input_player12_up = "nul"
-input_player12_up_axis = "nul"
-input_player12_up_btn = "nul"
-input_player12_up_mbtn = "nul"
-input_player12_x = "nul"
-input_player12_x_axis = "nul"
-input_player12_x_btn = "nul"
-input_player12_x_mbtn = "nul"
-input_player12_y = "nul"
-input_player12_y_axis = "nul"
-input_player12_y_btn = "nul"
-input_player12_y_mbtn = "nul"
-input_player13_a = "nul"
-input_player13_a_axis = "nul"
-input_player13_a_btn = "nul"
-input_player13_a_mbtn = "nul"
-input_player13_analog_dpad_mode = "0"
-input_player13_b = "nul"
-input_player13_b_axis = "nul"
-input_player13_b_btn = "nul"
-input_player13_b_mbtn = "nul"
-input_player13_down = "nul"
-input_player13_down_axis = "nul"
-input_player13_down_btn = "nul"
-input_player13_down_mbtn = "nul"
-input_player13_gun_aux_a = "nul"
-input_player13_gun_aux_a_axis = "nul"
-input_player13_gun_aux_a_btn = "nul"
-input_player13_gun_aux_a_mbtn = "nul"
-input_player13_gun_aux_b = "nul"
-input_player13_gun_aux_b_axis = "nul"
-input_player13_gun_aux_b_btn = "nul"
-input_player13_gun_aux_b_mbtn = "nul"
-input_player13_gun_aux_c = "nul"
-input_player13_gun_aux_c_axis = "nul"
-input_player13_gun_aux_c_btn = "nul"
-input_player13_gun_aux_c_mbtn = "nul"
-input_player13_gun_dpad_down = "nul"
-input_player13_gun_dpad_down_axis = "nul"
-input_player13_gun_dpad_down_btn = "nul"
-input_player13_gun_dpad_down_mbtn = "nul"
-input_player13_gun_dpad_left = "nul"
-input_player13_gun_dpad_left_axis = "nul"
-input_player13_gun_dpad_left_btn = "nul"
-input_player13_gun_dpad_left_mbtn = "nul"
-input_player13_gun_dpad_right = "nul"
-input_player13_gun_dpad_right_axis = "nul"
-input_player13_gun_dpad_right_btn = "nul"
-input_player13_gun_dpad_right_mbtn = "nul"
-input_player13_gun_dpad_up = "nul"
-input_player13_gun_dpad_up_axis = "nul"
-input_player13_gun_dpad_up_btn = "nul"
-input_player13_gun_dpad_up_mbtn = "nul"
-input_player13_gun_offscreen_shot = "nul"
-input_player13_gun_offscreen_shot_axis = "nul"
-input_player13_gun_offscreen_shot_btn = "nul"
-input_player13_gun_offscreen_shot_mbtn = "nul"
-input_player13_gun_select = "nul"
-input_player13_gun_select_axis = "nul"
-input_player13_gun_select_btn = "nul"
-input_player13_gun_select_mbtn = "nul"
-input_player13_gun_start = "nul"
-input_player13_gun_start_axis = "nul"
-input_player13_gun_start_btn = "nul"
-input_player13_gun_start_mbtn = "nul"
-input_player13_gun_trigger = "nul"
-input_player13_gun_trigger_axis = "nul"
-input_player13_gun_trigger_btn = "nul"
-input_player13_gun_trigger_mbtn = "1"
-input_player13_joypad_index = "12"
-input_player13_l = "nul"
-input_player13_l2 = "nul"
-input_player13_l2_axis = "nul"
-input_player13_l2_btn = "nul"
-input_player13_l2_mbtn = "nul"
-input_player13_l3 = "nul"
-input_player13_l3_axis = "nul"
-input_player13_l3_btn = "nul"
-input_player13_l3_mbtn = "nul"
-input_player13_l_axis = "nul"
-input_player13_l_btn = "nul"
-input_player13_l_mbtn = "nul"
-input_player13_l_x_minus = "nul"
-input_player13_l_x_minus_axis = "nul"
-input_player13_l_x_minus_btn = "nul"
-input_player13_l_x_minus_mbtn = "nul"
-input_player13_l_x_plus = "nul"
-input_player13_l_x_plus_axis = "nul"
-input_player13_l_x_plus_btn = "nul"
-input_player13_l_x_plus_mbtn = "nul"
-input_player13_l_y_minus = "nul"
-input_player13_l_y_minus_axis = "nul"
-input_player13_l_y_minus_btn = "nul"
-input_player13_l_y_minus_mbtn = "nul"
-input_player13_l_y_plus = "nul"
-input_player13_l_y_plus_axis = "nul"
-input_player13_l_y_plus_btn = "nul"
-input_player13_l_y_plus_mbtn = "nul"
-input_player13_left = "nul"
-input_player13_left_axis = "nul"
-input_player13_left_btn = "nul"
-input_player13_left_mbtn = "nul"
-input_player13_mouse_index = "12"
-input_player13_r = "nul"
-input_player13_r2 = "nul"
-input_player13_r2_axis = "nul"
-input_player13_r2_btn = "nul"
-input_player13_r2_mbtn = "nul"
-input_player13_r3 = "nul"
-input_player13_r3_axis = "nul"
-input_player13_r3_btn = "nul"
-input_player13_r3_mbtn = "nul"
-input_player13_r_axis = "nul"
-input_player13_r_btn = "nul"
-input_player13_r_mbtn = "nul"
-input_player13_r_x_minus = "nul"
-input_player13_r_x_minus_axis = "nul"
-input_player13_r_x_minus_btn = "nul"
-input_player13_r_x_minus_mbtn = "nul"
-input_player13_r_x_plus = "nul"
-input_player13_r_x_plus_axis = "nul"
-input_player13_r_x_plus_btn = "nul"
-input_player13_r_x_plus_mbtn = "nul"
-input_player13_r_y_minus = "nul"
-input_player13_r_y_minus_axis = "nul"
-input_player13_r_y_minus_btn = "nul"
-input_player13_r_y_minus_mbtn = "nul"
-input_player13_r_y_plus = "nul"
-input_player13_r_y_plus_axis = "nul"
-input_player13_r_y_plus_btn = "nul"
-input_player13_r_y_plus_mbtn = "nul"
-input_player13_right = "nul"
-input_player13_right_axis = "nul"
-input_player13_right_btn = "nul"
-input_player13_right_mbtn = "nul"
-input_player13_select = "nul"
-input_player13_select_axis = "nul"
-input_player13_select_btn = "nul"
-input_player13_select_mbtn = "nul"
-input_player13_start = "nul"
-input_player13_start_axis = "nul"
-input_player13_start_btn = "nul"
-input_player13_start_mbtn = "nul"
-input_player13_turbo = "nul"
-input_player13_turbo_axis = "nul"
-input_player13_turbo_btn = "nul"
-input_player13_turbo_mbtn = "nul"
-input_player13_up = "nul"
-input_player13_up_axis = "nul"
-input_player13_up_btn = "nul"
-input_player13_up_mbtn = "nul"
-input_player13_x = "nul"
-input_player13_x_axis = "nul"
-input_player13_x_btn = "nul"
-input_player13_x_mbtn = "nul"
-input_player13_y = "nul"
-input_player13_y_axis = "nul"
-input_player13_y_btn = "nul"
-input_player13_y_mbtn = "nul"
-input_player14_a = "nul"
-input_player14_a_axis = "nul"
-input_player14_a_btn = "nul"
-input_player14_a_mbtn = "nul"
-input_player14_analog_dpad_mode = "0"
-input_player14_b = "nul"
-input_player14_b_axis = "nul"
-input_player14_b_btn = "nul"
-input_player14_b_mbtn = "nul"
-input_player14_down = "nul"
-input_player14_down_axis = "nul"
-input_player14_down_btn = "nul"
-input_player14_down_mbtn = "nul"
-input_player14_gun_aux_a = "nul"
-input_player14_gun_aux_a_axis = "nul"
-input_player14_gun_aux_a_btn = "nul"
-input_player14_gun_aux_a_mbtn = "nul"
-input_player14_gun_aux_b = "nul"
-input_player14_gun_aux_b_axis = "nul"
-input_player14_gun_aux_b_btn = "nul"
-input_player14_gun_aux_b_mbtn = "nul"
-input_player14_gun_aux_c = "nul"
-input_player14_gun_aux_c_axis = "nul"
-input_player14_gun_aux_c_btn = "nul"
-input_player14_gun_aux_c_mbtn = "nul"
-input_player14_gun_dpad_down = "nul"
-input_player14_gun_dpad_down_axis = "nul"
-input_player14_gun_dpad_down_btn = "nul"
-input_player14_gun_dpad_down_mbtn = "nul"
-input_player14_gun_dpad_left = "nul"
-input_player14_gun_dpad_left_axis = "nul"
-input_player14_gun_dpad_left_btn = "nul"
-input_player14_gun_dpad_left_mbtn = "nul"
-input_player14_gun_dpad_right = "nul"
-input_player14_gun_dpad_right_axis = "nul"
-input_player14_gun_dpad_right_btn = "nul"
-input_player14_gun_dpad_right_mbtn = "nul"
-input_player14_gun_dpad_up = "nul"
-input_player14_gun_dpad_up_axis = "nul"
-input_player14_gun_dpad_up_btn = "nul"
-input_player14_gun_dpad_up_mbtn = "nul"
-input_player14_gun_offscreen_shot = "nul"
-input_player14_gun_offscreen_shot_axis = "nul"
-input_player14_gun_offscreen_shot_btn = "nul"
-input_player14_gun_offscreen_shot_mbtn = "nul"
-input_player14_gun_select = "nul"
-input_player14_gun_select_axis = "nul"
-input_player14_gun_select_btn = "nul"
-input_player14_gun_select_mbtn = "nul"
-input_player14_gun_start = "nul"
-input_player14_gun_start_axis = "nul"
-input_player14_gun_start_btn = "nul"
-input_player14_gun_start_mbtn = "nul"
-input_player14_gun_trigger = "nul"
-input_player14_gun_trigger_axis = "nul"
-input_player14_gun_trigger_btn = "nul"
-input_player14_gun_trigger_mbtn = "1"
-input_player14_joypad_index = "13"
-input_player14_l = "nul"
-input_player14_l2 = "nul"
-input_player14_l2_axis = "nul"
-input_player14_l2_btn = "nul"
-input_player14_l2_mbtn = "nul"
-input_player14_l3 = "nul"
-input_player14_l3_axis = "nul"
-input_player14_l3_btn = "nul"
-input_player14_l3_mbtn = "nul"
-input_player14_l_axis = "nul"
-input_player14_l_btn = "nul"
-input_player14_l_mbtn = "nul"
-input_player14_l_x_minus = "nul"
-input_player14_l_x_minus_axis = "nul"
-input_player14_l_x_minus_btn = "nul"
-input_player14_l_x_minus_mbtn = "nul"
-input_player14_l_x_plus = "nul"
-input_player14_l_x_plus_axis = "nul"
-input_player14_l_x_plus_btn = "nul"
-input_player14_l_x_plus_mbtn = "nul"
-input_player14_l_y_minus = "nul"
-input_player14_l_y_minus_axis = "nul"
-input_player14_l_y_minus_btn = "nul"
-input_player14_l_y_minus_mbtn = "nul"
-input_player14_l_y_plus = "nul"
-input_player14_l_y_plus_axis = "nul"
-input_player14_l_y_plus_btn = "nul"
-input_player14_l_y_plus_mbtn = "nul"
-input_player14_left = "nul"
-input_player14_left_axis = "nul"
-input_player14_left_btn = "nul"
-input_player14_left_mbtn = "nul"
-input_player14_mouse_index = "13"
-input_player14_r = "nul"
-input_player14_r2 = "nul"
-input_player14_r2_axis = "nul"
-input_player14_r2_btn = "nul"
-input_player14_r2_mbtn = "nul"
-input_player14_r3 = "nul"
-input_player14_r3_axis = "nul"
-input_player14_r3_btn = "nul"
-input_player14_r3_mbtn = "nul"
-input_player14_r_axis = "nul"
-input_player14_r_btn = "nul"
-input_player14_r_mbtn = "nul"
-input_player14_r_x_minus = "nul"
-input_player14_r_x_minus_axis = "nul"
-input_player14_r_x_minus_btn = "nul"
-input_player14_r_x_minus_mbtn = "nul"
-input_player14_r_x_plus = "nul"
-input_player14_r_x_plus_axis = "nul"
-input_player14_r_x_plus_btn = "nul"
-input_player14_r_x_plus_mbtn = "nul"
-input_player14_r_y_minus = "nul"
-input_player14_r_y_minus_axis = "nul"
-input_player14_r_y_minus_btn = "nul"
-input_player14_r_y_minus_mbtn = "nul"
-input_player14_r_y_plus = "nul"
-input_player14_r_y_plus_axis = "nul"
-input_player14_r_y_plus_btn = "nul"
-input_player14_r_y_plus_mbtn = "nul"
-input_player14_right = "nul"
-input_player14_right_axis = "nul"
-input_player14_right_btn = "nul"
-input_player14_right_mbtn = "nul"
-input_player14_select = "nul"
-input_player14_select_axis = "nul"
-input_player14_select_btn = "nul"
-input_player14_select_mbtn = "nul"
-input_player14_start = "nul"
-input_player14_start_axis = "nul"
-input_player14_start_btn = "nul"
-input_player14_start_mbtn = "nul"
-input_player14_turbo = "nul"
-input_player14_turbo_axis = "nul"
-input_player14_turbo_btn = "nul"
-input_player14_turbo_mbtn = "nul"
-input_player14_up = "nul"
-input_player14_up_axis = "nul"
-input_player14_up_btn = "nul"
-input_player14_up_mbtn = "nul"
-input_player14_x = "nul"
-input_player14_x_axis = "nul"
-input_player14_x_btn = "nul"
-input_player14_x_mbtn = "nul"
-input_player14_y = "nul"
-input_player14_y_axis = "nul"
-input_player14_y_btn = "nul"
-input_player14_y_mbtn = "nul"
-input_player15_a = "nul"
-input_player15_a_axis = "nul"
-input_player15_a_btn = "nul"
-input_player15_a_mbtn = "nul"
-input_player15_analog_dpad_mode = "0"
-input_player15_b = "nul"
-input_player15_b_axis = "nul"
-input_player15_b_btn = "nul"
-input_player15_b_mbtn = "nul"
-input_player15_down = "nul"
-input_player15_down_axis = "nul"
-input_player15_down_btn = "nul"
-input_player15_down_mbtn = "nul"
-input_player15_gun_aux_a = "nul"
-input_player15_gun_aux_a_axis = "nul"
-input_player15_gun_aux_a_btn = "nul"
-input_player15_gun_aux_a_mbtn = "nul"
-input_player15_gun_aux_b = "nul"
-input_player15_gun_aux_b_axis = "nul"
-input_player15_gun_aux_b_btn = "nul"
-input_player15_gun_aux_b_mbtn = "nul"
-input_player15_gun_aux_c = "nul"
-input_player15_gun_aux_c_axis = "nul"
-input_player15_gun_aux_c_btn = "nul"
-input_player15_gun_aux_c_mbtn = "nul"
-input_player15_gun_dpad_down = "nul"
-input_player15_gun_dpad_down_axis = "nul"
-input_player15_gun_dpad_down_btn = "nul"
-input_player15_gun_dpad_down_mbtn = "nul"
-input_player15_gun_dpad_left = "nul"
-input_player15_gun_dpad_left_axis = "nul"
-input_player15_gun_dpad_left_btn = "nul"
-input_player15_gun_dpad_left_mbtn = "nul"
-input_player15_gun_dpad_right = "nul"
-input_player15_gun_dpad_right_axis = "nul"
-input_player15_gun_dpad_right_btn = "nul"
-input_player15_gun_dpad_right_mbtn = "nul"
-input_player15_gun_dpad_up = "nul"
-input_player15_gun_dpad_up_axis = "nul"
-input_player15_gun_dpad_up_btn = "nul"
-input_player15_gun_dpad_up_mbtn = "nul"
-input_player15_gun_offscreen_shot = "nul"
-input_player15_gun_offscreen_shot_axis = "nul"
-input_player15_gun_offscreen_shot_btn = "nul"
-input_player15_gun_offscreen_shot_mbtn = "nul"
-input_player15_gun_select = "nul"
-input_player15_gun_select_axis = "nul"
-input_player15_gun_select_btn = "nul"
-input_player15_gun_select_mbtn = "nul"
-input_player15_gun_start = "nul"
-input_player15_gun_start_axis = "nul"
-input_player15_gun_start_btn = "nul"
-input_player15_gun_start_mbtn = "nul"
-input_player15_gun_trigger = "nul"
-input_player15_gun_trigger_axis = "nul"
-input_player15_gun_trigger_btn = "nul"
-input_player15_gun_trigger_mbtn = "1"
-input_player15_joypad_index = "14"
-input_player15_l = "nul"
-input_player15_l2 = "nul"
-input_player15_l2_axis = "nul"
-input_player15_l2_btn = "nul"
-input_player15_l2_mbtn = "nul"
-input_player15_l3 = "nul"
-input_player15_l3_axis = "nul"
-input_player15_l3_btn = "nul"
-input_player15_l3_mbtn = "nul"
-input_player15_l_axis = "nul"
-input_player15_l_btn = "nul"
-input_player15_l_mbtn = "nul"
-input_player15_l_x_minus = "nul"
-input_player15_l_x_minus_axis = "nul"
-input_player15_l_x_minus_btn = "nul"
-input_player15_l_x_minus_mbtn = "nul"
-input_player15_l_x_plus = "nul"
-input_player15_l_x_plus_axis = "nul"
-input_player15_l_x_plus_btn = "nul"
-input_player15_l_x_plus_mbtn = "nul"
-input_player15_l_y_minus = "nul"
-input_player15_l_y_minus_axis = "nul"
-input_player15_l_y_minus_btn = "nul"
-input_player15_l_y_minus_mbtn = "nul"
-input_player15_l_y_plus = "nul"
-input_player15_l_y_plus_axis = "nul"
-input_player15_l_y_plus_btn = "nul"
-input_player15_l_y_plus_mbtn = "nul"
-input_player15_left = "nul"
-input_player15_left_axis = "nul"
-input_player15_left_btn = "nul"
-input_player15_left_mbtn = "nul"
-input_player15_mouse_index = "14"
-input_player15_r = "nul"
-input_player15_r2 = "nul"
-input_player15_r2_axis = "nul"
-input_player15_r2_btn = "nul"
-input_player15_r2_mbtn = "nul"
-input_player15_r3 = "nul"
-input_player15_r3_axis = "nul"
-input_player15_r3_btn = "nul"
-input_player15_r3_mbtn = "nul"
-input_player15_r_axis = "nul"
-input_player15_r_btn = "nul"
-input_player15_r_mbtn = "nul"
-input_player15_r_x_minus = "nul"
-input_player15_r_x_minus_axis = "nul"
-input_player15_r_x_minus_btn = "nul"
-input_player15_r_x_minus_mbtn = "nul"
-input_player15_r_x_plus = "nul"
-input_player15_r_x_plus_axis = "nul"
-input_player15_r_x_plus_btn = "nul"
-input_player15_r_x_plus_mbtn = "nul"
-input_player15_r_y_minus = "nul"
-input_player15_r_y_minus_axis = "nul"
-input_player15_r_y_minus_btn = "nul"
-input_player15_r_y_minus_mbtn = "nul"
-input_player15_r_y_plus = "nul"
-input_player15_r_y_plus_axis = "nul"
-input_player15_r_y_plus_btn = "nul"
-input_player15_r_y_plus_mbtn = "nul"
-input_player15_right = "nul"
-input_player15_right_axis = "nul"
-input_player15_right_btn = "nul"
-input_player15_right_mbtn = "nul"
-input_player15_select = "nul"
-input_player15_select_axis = "nul"
-input_player15_select_btn = "nul"
-input_player15_select_mbtn = "nul"
-input_player15_start = "nul"
-input_player15_start_axis = "nul"
-input_player15_start_btn = "nul"
-input_player15_start_mbtn = "nul"
-input_player15_turbo = "nul"
-input_player15_turbo_axis = "nul"
-input_player15_turbo_btn = "nul"
-input_player15_turbo_mbtn = "nul"
-input_player15_up = "nul"
-input_player15_up_axis = "nul"
-input_player15_up_btn = "nul"
-input_player15_up_mbtn = "nul"
-input_player15_x = "nul"
-input_player15_x_axis = "nul"
-input_player15_x_btn = "nul"
-input_player15_x_mbtn = "nul"
-input_player15_y = "nul"
-input_player15_y_axis = "nul"
-input_player15_y_btn = "nul"
-input_player15_y_mbtn = "nul"
-input_player16_a = "nul"
-input_player16_a_axis = "nul"
-input_player16_a_btn = "nul"
-input_player16_a_mbtn = "nul"
-input_player16_analog_dpad_mode = "0"
-input_player16_b = "nul"
-input_player16_b_axis = "nul"
-input_player16_b_btn = "nul"
-input_player16_b_mbtn = "nul"
-input_player16_down = "nul"
-input_player16_down_axis = "nul"
-input_player16_down_btn = "nul"
-input_player16_down_mbtn = "nul"
-input_player16_gun_aux_a = "nul"
-input_player16_gun_aux_a_axis = "nul"
-input_player16_gun_aux_a_btn = "nul"
-input_player16_gun_aux_a_mbtn = "nul"
-input_player16_gun_aux_b = "nul"
-input_player16_gun_aux_b_axis = "nul"
-input_player16_gun_aux_b_btn = "nul"
-input_player16_gun_aux_b_mbtn = "nul"
-input_player16_gun_aux_c = "nul"
-input_player16_gun_aux_c_axis = "nul"
-input_player16_gun_aux_c_btn = "nul"
-input_player16_gun_aux_c_mbtn = "nul"
-input_player16_gun_dpad_down = "nul"
-input_player16_gun_dpad_down_axis = "nul"
-input_player16_gun_dpad_down_btn = "nul"
-input_player16_gun_dpad_down_mbtn = "nul"
-input_player16_gun_dpad_left = "nul"
-input_player16_gun_dpad_left_axis = "nul"
-input_player16_gun_dpad_left_btn = "nul"
-input_player16_gun_dpad_left_mbtn = "nul"
-input_player16_gun_dpad_right = "nul"
-input_player16_gun_dpad_right_axis = "nul"
-input_player16_gun_dpad_right_btn = "nul"
-input_player16_gun_dpad_right_mbtn = "nul"
-input_player16_gun_dpad_up = "nul"
-input_player16_gun_dpad_up_axis = "nul"
-input_player16_gun_dpad_up_btn = "nul"
-input_player16_gun_dpad_up_mbtn = "nul"
-input_player16_gun_offscreen_shot = "nul"
-input_player16_gun_offscreen_shot_axis = "nul"
-input_player16_gun_offscreen_shot_btn = "nul"
-input_player16_gun_offscreen_shot_mbtn = "nul"
-input_player16_gun_select = "nul"
-input_player16_gun_select_axis = "nul"
-input_player16_gun_select_btn = "nul"
-input_player16_gun_select_mbtn = "nul"
-input_player16_gun_start = "nul"
-input_player16_gun_start_axis = "nul"
-input_player16_gun_start_btn = "nul"
-input_player16_gun_start_mbtn = "nul"
-input_player16_gun_trigger = "nul"
-input_player16_gun_trigger_axis = "nul"
-input_player16_gun_trigger_btn = "nul"
-input_player16_gun_trigger_mbtn = "1"
-input_player16_joypad_index = "15"
-input_player16_l = "nul"
-input_player16_l2 = "nul"
-input_player16_l2_axis = "nul"
-input_player16_l2_btn = "nul"
-input_player16_l2_mbtn = "nul"
-input_player16_l3 = "nul"
-input_player16_l3_axis = "nul"
-input_player16_l3_btn = "nul"
-input_player16_l3_mbtn = "nul"
-input_player16_l_axis = "nul"
-input_player16_l_btn = "nul"
-input_player16_l_mbtn = "nul"
-input_player16_l_x_minus = "nul"
-input_player16_l_x_minus_axis = "nul"
-input_player16_l_x_minus_btn = "nul"
-input_player16_l_x_minus_mbtn = "nul"
-input_player16_l_x_plus = "nul"
-input_player16_l_x_plus_axis = "nul"
-input_player16_l_x_plus_btn = "nul"
-input_player16_l_x_plus_mbtn = "nul"
-input_player16_l_y_minus = "nul"
-input_player16_l_y_minus_axis = "nul"
-input_player16_l_y_minus_btn = "nul"
-input_player16_l_y_minus_mbtn = "nul"
-input_player16_l_y_plus = "nul"
-input_player16_l_y_plus_axis = "nul"
-input_player16_l_y_plus_btn = "nul"
-input_player16_l_y_plus_mbtn = "nul"
-input_player16_left = "nul"
-input_player16_left_axis = "nul"
-input_player16_left_btn = "nul"
-input_player16_left_mbtn = "nul"
-input_player16_mouse_index = "15"
-input_player16_r = "nul"
-input_player16_r2 = "nul"
-input_player16_r2_axis = "nul"
-input_player16_r2_btn = "nul"
-input_player16_r2_mbtn = "nul"
-input_player16_r3 = "nul"
-input_player16_r3_axis = "nul"
-input_player16_r3_btn = "nul"
-input_player16_r3_mbtn = "nul"
-input_player16_r_axis = "nul"
-input_player16_r_btn = "nul"
-input_player16_r_mbtn = "nul"
-input_player16_r_x_minus = "nul"
-input_player16_r_x_minus_axis = "nul"
-input_player16_r_x_minus_btn = "nul"
-input_player16_r_x_minus_mbtn = "nul"
-input_player16_r_x_plus = "nul"
-input_player16_r_x_plus_axis = "nul"
-input_player16_r_x_plus_btn = "nul"
-input_player16_r_x_plus_mbtn = "nul"
-input_player16_r_y_minus = "nul"
-input_player16_r_y_minus_axis = "nul"
-input_player16_r_y_minus_btn = "nul"
-input_player16_r_y_minus_mbtn = "nul"
-input_player16_r_y_plus = "nul"
-input_player16_r_y_plus_axis = "nul"
-input_player16_r_y_plus_btn = "nul"
-input_player16_r_y_plus_mbtn = "nul"
-input_player16_right = "nul"
-input_player16_right_axis = "nul"
-input_player16_right_btn = "nul"
-input_player16_right_mbtn = "nul"
-input_player16_select = "nul"
-input_player16_select_axis = "nul"
-input_player16_select_btn = "nul"
-input_player16_select_mbtn = "nul"
-input_player16_start = "nul"
-input_player16_start_axis = "nul"
-input_player16_start_btn = "nul"
-input_player16_start_mbtn = "nul"
-input_player16_turbo = "nul"
-input_player16_turbo_axis = "nul"
-input_player16_turbo_btn = "nul"
-input_player16_turbo_mbtn = "nul"
-input_player16_up = "nul"
-input_player16_up_axis = "nul"
-input_player16_up_btn = "nul"
-input_player16_up_mbtn = "nul"
-input_player16_x = "nul"
-input_player16_x_axis = "nul"
-input_player16_x_btn = "nul"
-input_player16_x_mbtn = "nul"
-input_player16_y = "nul"
-input_player16_y_axis = "nul"
-input_player16_y_btn = "nul"
-input_player16_y_mbtn = "nul"
-input_player1_a = "x"
-input_player1_a_axis = "nul"
-input_player1_a_btn = "nul"
-input_player1_a_mbtn = "nul"
-input_player1_analog_dpad_mode = "0"
-input_player1_b = "z"
-input_player1_b_axis = "nul"
-input_player1_b_btn = "nul"
-input_player1_b_mbtn = "nul"
-input_player1_down = "down"
-input_player1_down_axis = "nul"
-input_player1_down_btn = "nul"
-input_player1_down_mbtn = "nul"
-input_player1_gun_aux_a = "nul"
-input_player1_gun_aux_a_axis = "nul"
-input_player1_gun_aux_a_btn = "nul"
-input_player1_gun_aux_a_mbtn = "nul"
-input_player1_gun_aux_b = "nul"
-input_player1_gun_aux_b_axis = "nul"
-input_player1_gun_aux_b_btn = "nul"
-input_player1_gun_aux_b_mbtn = "nul"
-input_player1_gun_aux_c = "nul"
-input_player1_gun_aux_c_axis = "nul"
-input_player1_gun_aux_c_btn = "nul"
-input_player1_gun_aux_c_mbtn = "nul"
-input_player1_gun_dpad_down = "nul"
-input_player1_gun_dpad_down_axis = "nul"
-input_player1_gun_dpad_down_btn = "nul"
-input_player1_gun_dpad_down_mbtn = "nul"
-input_player1_gun_dpad_left = "nul"
-input_player1_gun_dpad_left_axis = "nul"
-input_player1_gun_dpad_left_btn = "nul"
-input_player1_gun_dpad_left_mbtn = "nul"
-input_player1_gun_dpad_right = "nul"
-input_player1_gun_dpad_right_axis = "nul"
-input_player1_gun_dpad_right_btn = "nul"
-input_player1_gun_dpad_right_mbtn = "nul"
-input_player1_gun_dpad_up = "nul"
-input_player1_gun_dpad_up_axis = "nul"
-input_player1_gun_dpad_up_btn = "nul"
-input_player1_gun_dpad_up_mbtn = "nul"
-input_player1_gun_offscreen_shot = "nul"
-input_player1_gun_offscreen_shot_axis = "nul"
-input_player1_gun_offscreen_shot_btn = "nul"
-input_player1_gun_offscreen_shot_mbtn = "nul"
-input_player1_gun_select = "nul"
-input_player1_gun_select_axis = "nul"
-input_player1_gun_select_btn = "nul"
-input_player1_gun_select_mbtn = "nul"
-input_player1_gun_start = "nul"
-input_player1_gun_start_axis = "nul"
-input_player1_gun_start_btn = "nul"
-input_player1_gun_start_mbtn = "nul"
-input_player1_gun_trigger = "nul"
-input_player1_gun_trigger_axis = "nul"
-input_player1_gun_trigger_btn = "nul"
-input_player1_gun_trigger_mbtn = "1"
-input_player1_joypad_index = "0"
-input_player1_l = "q"
-input_player1_l2 = "nul"
-input_player1_l2_axis = "nul"
-input_player1_l2_btn = "nul"
-input_player1_l2_mbtn = "nul"
-input_player1_l3 = "nul"
-input_player1_l3_axis = "nul"
-input_player1_l3_btn = "nul"
-input_player1_l3_mbtn = "nul"
-input_player1_l_axis = "nul"
-input_player1_l_btn = "nul"
-input_player1_l_mbtn = "nul"
-input_player1_l_x_minus = "nul"
-input_player1_l_x_minus_axis = "nul"
-input_player1_l_x_minus_btn = "nul"
-input_player1_l_x_minus_mbtn = "nul"
-input_player1_l_x_plus = "nul"
-input_player1_l_x_plus_axis = "nul"
-input_player1_l_x_plus_btn = "nul"
-input_player1_l_x_plus_mbtn = "nul"
-input_player1_l_y_minus = "nul"
-input_player1_l_y_minus_axis = "nul"
-input_player1_l_y_minus_btn = "nul"
-input_player1_l_y_minus_mbtn = "nul"
-input_player1_l_y_plus = "nul"
-input_player1_l_y_plus_axis = "nul"
-input_player1_l_y_plus_btn = "nul"
-input_player1_l_y_plus_mbtn = "nul"
-input_player1_left = "left"
-input_player1_left_axis = "nul"
-input_player1_left_btn = "nul"
-input_player1_left_mbtn = "nul"
-input_player1_mouse_index = "0"
-input_player1_r = "w"
-input_player1_r2 = "nul"
-input_player1_r2_axis = "nul"
-input_player1_r2_btn = "nul"
-input_player1_r2_mbtn = "nul"
-input_player1_r3 = "nul"
-input_player1_r3_axis = "nul"
-input_player1_r3_btn = "nul"
-input_player1_r3_mbtn = "nul"
-input_player1_r_axis = "nul"
-input_player1_r_btn = "nul"
-input_player1_r_mbtn = "nul"
-input_player1_r_x_minus = "nul"
-input_player1_r_x_minus_axis = "nul"
-input_player1_r_x_minus_btn = "nul"
-input_player1_r_x_minus_mbtn = "nul"
-input_player1_r_x_plus = "nul"
-input_player1_r_x_plus_axis = "nul"
-input_player1_r_x_plus_btn = "nul"
-input_player1_r_x_plus_mbtn = "nul"
-input_player1_r_y_minus = "nul"
-input_player1_r_y_minus_axis = "nul"
-input_player1_r_y_minus_btn = "nul"
-input_player1_r_y_minus_mbtn = "nul"
-input_player1_r_y_plus = "nul"
-input_player1_r_y_plus_axis = "nul"
-input_player1_r_y_plus_btn = "nul"
-input_player1_r_y_plus_mbtn = "nul"
-input_player1_right = "right"
-input_player1_right_axis = "nul"
-input_player1_right_btn = "nul"
-input_player1_right_mbtn = "nul"
-input_player1_select = "rshift"
-input_player1_select_axis = "nul"
-input_player1_select_btn = "nul"
-input_player1_select_mbtn = "nul"
-input_player1_start = "enter"
-input_player1_start_axis = "nul"
-input_player1_start_btn = "nul"
-input_player1_start_mbtn = "nul"
-input_player1_turbo = "nul"
-input_player1_turbo_axis = "nul"
-input_player1_turbo_btn = "nul"
-input_player1_turbo_mbtn = "nul"
-input_player1_up = "up"
-input_player1_up_axis = "nul"
-input_player1_up_btn = "nul"
-input_player1_up_mbtn = "nul"
-input_player1_x = "s"
-input_player1_x_axis = "nul"
-input_player1_x_btn = "nul"
-input_player1_x_mbtn = "nul"
-input_player1_y = "a"
-input_player1_y_axis = "nul"
-input_player1_y_btn = "nul"
-input_player1_y_mbtn = "nul"
-input_player2_a = "nul"
-input_player2_a_axis = "nul"
-input_player2_a_btn = "nul"
-input_player2_a_mbtn = "nul"
-input_player2_analog_dpad_mode = "0"
-input_player2_b = "nul"
-input_player2_b_axis = "nul"
-input_player2_b_btn = "nul"
-input_player2_b_mbtn = "nul"
-input_player2_down = "nul"
-input_player2_down_axis = "nul"
-input_player2_down_btn = "nul"
-input_player2_down_mbtn = "nul"
-input_player2_gun_aux_a = "nul"
-input_player2_gun_aux_a_axis = "nul"
-input_player2_gun_aux_a_btn = "nul"
-input_player2_gun_aux_a_mbtn = "nul"
-input_player2_gun_aux_b = "nul"
-input_player2_gun_aux_b_axis = "nul"
-input_player2_gun_aux_b_btn = "nul"
-input_player2_gun_aux_b_mbtn = "nul"
-input_player2_gun_aux_c = "nul"
-input_player2_gun_aux_c_axis = "nul"
-input_player2_gun_aux_c_btn = "nul"
-input_player2_gun_aux_c_mbtn = "nul"
-input_player2_gun_dpad_down = "nul"
-input_player2_gun_dpad_down_axis = "nul"
-input_player2_gun_dpad_down_btn = "nul"
-input_player2_gun_dpad_down_mbtn = "nul"
-input_player2_gun_dpad_left = "nul"
-input_player2_gun_dpad_left_axis = "nul"
-input_player2_gun_dpad_left_btn = "nul"
-input_player2_gun_dpad_left_mbtn = "nul"
-input_player2_gun_dpad_right = "nul"
-input_player2_gun_dpad_right_axis = "nul"
-input_player2_gun_dpad_right_btn = "nul"
-input_player2_gun_dpad_right_mbtn = "nul"
-input_player2_gun_dpad_up = "nul"
-input_player2_gun_dpad_up_axis = "nul"
-input_player2_gun_dpad_up_btn = "nul"
-input_player2_gun_dpad_up_mbtn = "nul"
-input_player2_gun_offscreen_shot = "nul"
-input_player2_gun_offscreen_shot_axis = "nul"
-input_player2_gun_offscreen_shot_btn = "nul"
-input_player2_gun_offscreen_shot_mbtn = "nul"
-input_player2_gun_select = "nul"
-input_player2_gun_select_axis = "nul"
-input_player2_gun_select_btn = "nul"
-input_player2_gun_select_mbtn = "nul"
-input_player2_gun_start = "nul"
-input_player2_gun_start_axis = "nul"
-input_player2_gun_start_btn = "nul"
-input_player2_gun_start_mbtn = "nul"
-input_player2_gun_trigger = "nul"
-input_player2_gun_trigger_axis = "nul"
-input_player2_gun_trigger_btn = "nul"
-input_player2_gun_trigger_mbtn = "1"
-input_player2_joypad_index = "1"
-input_player2_l = "nul"
-input_player2_l2 = "nul"
-input_player2_l2_axis = "nul"
-input_player2_l2_btn = "nul"
-input_player2_l2_mbtn = "nul"
-input_player2_l3 = "nul"
-input_player2_l3_axis = "nul"
-input_player2_l3_btn = "nul"
-input_player2_l3_mbtn = "nul"
-input_player2_l_axis = "nul"
-input_player2_l_btn = "nul"
-input_player2_l_mbtn = "nul"
-input_player2_l_x_minus = "nul"
-input_player2_l_x_minus_axis = "nul"
-input_player2_l_x_minus_btn = "nul"
-input_player2_l_x_minus_mbtn = "nul"
-input_player2_l_x_plus = "nul"
-input_player2_l_x_plus_axis = "nul"
-input_player2_l_x_plus_btn = "nul"
-input_player2_l_x_plus_mbtn = "nul"
-input_player2_l_y_minus = "nul"
-input_player2_l_y_minus_axis = "nul"
-input_player2_l_y_minus_btn = "nul"
-input_player2_l_y_minus_mbtn = "nul"
-input_player2_l_y_plus = "nul"
-input_player2_l_y_plus_axis = "nul"
-input_player2_l_y_plus_btn = "nul"
-input_player2_l_y_plus_mbtn = "nul"
-input_player2_left = "nul"
-input_player2_left_axis = "nul"
-input_player2_left_btn = "nul"
-input_player2_left_mbtn = "nul"
-input_player2_mouse_index = "1"
-input_player2_r = "nul"
-input_player2_r2 = "nul"
-input_player2_r2_axis = "nul"
-input_player2_r2_btn = "nul"
-input_player2_r2_mbtn = "nul"
-input_player2_r3 = "nul"
-input_player2_r3_axis = "nul"
-input_player2_r3_btn = "nul"
-input_player2_r3_mbtn = "nul"
-input_player2_r_axis = "nul"
-input_player2_r_btn = "nul"
-input_player2_r_mbtn = "nul"
-input_player2_r_x_minus = "nul"
-input_player2_r_x_minus_axis = "nul"
-input_player2_r_x_minus_btn = "nul"
-input_player2_r_x_minus_mbtn = "nul"
-input_player2_r_x_plus = "nul"
-input_player2_r_x_plus_axis = "nul"
-input_player2_r_x_plus_btn = "nul"
-input_player2_r_x_plus_mbtn = "nul"
-input_player2_r_y_minus = "nul"
-input_player2_r_y_minus_axis = "nul"
-input_player2_r_y_minus_btn = "nul"
-input_player2_r_y_minus_mbtn = "nul"
-input_player2_r_y_plus = "nul"
-input_player2_r_y_plus_axis = "nul"
-input_player2_r_y_plus_btn = "nul"
-input_player2_r_y_plus_mbtn = "nul"
-input_player2_right = "nul"
-input_player2_right_axis = "nul"
-input_player2_right_btn = "nul"
-input_player2_right_mbtn = "nul"
-input_player2_select = "nul"
-input_player2_select_axis = "nul"
-input_player2_select_btn = "nul"
-input_player2_select_mbtn = "nul"
-input_player2_start = "nul"
-input_player2_start_axis = "nul"
-input_player2_start_btn = "nul"
-input_player2_start_mbtn = "nul"
-input_player2_turbo = "nul"
-input_player2_turbo_axis = "nul"
-input_player2_turbo_btn = "nul"
-input_player2_turbo_mbtn = "nul"
-input_player2_up = "nul"
-input_player2_up_axis = "nul"
-input_player2_up_btn = "nul"
-input_player2_up_mbtn = "nul"
-input_player2_x = "nul"
-input_player2_x_axis = "nul"
-input_player2_x_btn = "nul"
-input_player2_x_mbtn = "nul"
-input_player2_y = "nul"
-input_player2_y_axis = "nul"
-input_player2_y_btn = "nul"
-input_player2_y_mbtn = "nul"
-input_player3_a = "nul"
-input_player3_a_axis = "nul"
-input_player3_a_btn = "nul"
-input_player3_a_mbtn = "nul"
-input_player3_analog_dpad_mode = "0"
-input_player3_b = "nul"
-input_player3_b_axis = "nul"
-input_player3_b_btn = "nul"
-input_player3_b_mbtn = "nul"
-input_player3_down = "nul"
-input_player3_down_axis = "nul"
-input_player3_down_btn = "nul"
-input_player3_down_mbtn = "nul"
-input_player3_gun_aux_a = "nul"
-input_player3_gun_aux_a_axis = "nul"
-input_player3_gun_aux_a_btn = "nul"
-input_player3_gun_aux_a_mbtn = "nul"
-input_player3_gun_aux_b = "nul"
-input_player3_gun_aux_b_axis = "nul"
-input_player3_gun_aux_b_btn = "nul"
-input_player3_gun_aux_b_mbtn = "nul"
-input_player3_gun_aux_c = "nul"
-input_player3_gun_aux_c_axis = "nul"
-input_player3_gun_aux_c_btn = "nul"
-input_player3_gun_aux_c_mbtn = "nul"
-input_player3_gun_dpad_down = "nul"
-input_player3_gun_dpad_down_axis = "nul"
-input_player3_gun_dpad_down_btn = "nul"
-input_player3_gun_dpad_down_mbtn = "nul"
-input_player3_gun_dpad_left = "nul"
-input_player3_gun_dpad_left_axis = "nul"
-input_player3_gun_dpad_left_btn = "nul"
-input_player3_gun_dpad_left_mbtn = "nul"
-input_player3_gun_dpad_right = "nul"
-input_player3_gun_dpad_right_axis = "nul"
-input_player3_gun_dpad_right_btn = "nul"
-input_player3_gun_dpad_right_mbtn = "nul"
-input_player3_gun_dpad_up = "nul"
-input_player3_gun_dpad_up_axis = "nul"
-input_player3_gun_dpad_up_btn = "nul"
-input_player3_gun_dpad_up_mbtn = "nul"
-input_player3_gun_offscreen_shot = "nul"
-input_player3_gun_offscreen_shot_axis = "nul"
-input_player3_gun_offscreen_shot_btn = "nul"
-input_player3_gun_offscreen_shot_mbtn = "nul"
-input_player3_gun_select = "nul"
-input_player3_gun_select_axis = "nul"
-input_player3_gun_select_btn = "nul"
-input_player3_gun_select_mbtn = "nul"
-input_player3_gun_start = "nul"
-input_player3_gun_start_axis = "nul"
-input_player3_gun_start_btn = "nul"
-input_player3_gun_start_mbtn = "nul"
-input_player3_gun_trigger = "nul"
-input_player3_gun_trigger_axis = "nul"
-input_player3_gun_trigger_btn = "nul"
-input_player3_gun_trigger_mbtn = "1"
-input_player3_joypad_index = "2"
-input_player3_l = "nul"
-input_player3_l2 = "nul"
-input_player3_l2_axis = "nul"
-input_player3_l2_btn = "nul"
-input_player3_l2_mbtn = "nul"
-input_player3_l3 = "nul"
-input_player3_l3_axis = "nul"
-input_player3_l3_btn = "nul"
-input_player3_l3_mbtn = "nul"
-input_player3_l_axis = "nul"
-input_player3_l_btn = "nul"
-input_player3_l_mbtn = "nul"
-input_player3_l_x_minus = "nul"
-input_player3_l_x_minus_axis = "nul"
-input_player3_l_x_minus_btn = "nul"
-input_player3_l_x_minus_mbtn = "nul"
-input_player3_l_x_plus = "nul"
-input_player3_l_x_plus_axis = "nul"
-input_player3_l_x_plus_btn = "nul"
-input_player3_l_x_plus_mbtn = "nul"
-input_player3_l_y_minus = "nul"
-input_player3_l_y_minus_axis = "nul"
-input_player3_l_y_minus_btn = "nul"
-input_player3_l_y_minus_mbtn = "nul"
-input_player3_l_y_plus = "nul"
-input_player3_l_y_plus_axis = "nul"
-input_player3_l_y_plus_btn = "nul"
-input_player3_l_y_plus_mbtn = "nul"
-input_player3_left = "nul"
-input_player3_left_axis = "nul"
-input_player3_left_btn = "nul"
-input_player3_left_mbtn = "nul"
-input_player3_mouse_index = "2"
-input_player3_r = "nul"
-input_player3_r2 = "nul"
-input_player3_r2_axis = "nul"
-input_player3_r2_btn = "nul"
-input_player3_r2_mbtn = "nul"
-input_player3_r3 = "nul"
-input_player3_r3_axis = "nul"
-input_player3_r3_btn = "nul"
-input_player3_r3_mbtn = "nul"
-input_player3_r_axis = "nul"
-input_player3_r_btn = "nul"
-input_player3_r_mbtn = "nul"
-input_player3_r_x_minus = "nul"
-input_player3_r_x_minus_axis = "nul"
-input_player3_r_x_minus_btn = "nul"
-input_player3_r_x_minus_mbtn = "nul"
-input_player3_r_x_plus = "nul"
-input_player3_r_x_plus_axis = "nul"
-input_player3_r_x_plus_btn = "nul"
-input_player3_r_x_plus_mbtn = "nul"
-input_player3_r_y_minus = "nul"
-input_player3_r_y_minus_axis = "nul"
-input_player3_r_y_minus_btn = "nul"
-input_player3_r_y_minus_mbtn = "nul"
-input_player3_r_y_plus = "nul"
-input_player3_r_y_plus_axis = "nul"
-input_player3_r_y_plus_btn = "nul"
-input_player3_r_y_plus_mbtn = "nul"
-input_player3_right = "nul"
-input_player3_right_axis = "nul"
-input_player3_right_btn = "nul"
-input_player3_right_mbtn = "nul"
-input_player3_select = "nul"
-input_player3_select_axis = "nul"
-input_player3_select_btn = "nul"
-input_player3_select_mbtn = "nul"
-input_player3_start = "nul"
-input_player3_start_axis = "nul"
-input_player3_start_btn = "nul"
-input_player3_start_mbtn = "nul"
-input_player3_turbo = "nul"
-input_player3_turbo_axis = "nul"
-input_player3_turbo_btn = "nul"
-input_player3_turbo_mbtn = "nul"
-input_player3_up = "nul"
-input_player3_up_axis = "nul"
-input_player3_up_btn = "nul"
-input_player3_up_mbtn = "nul"
-input_player3_x = "nul"
-input_player3_x_axis = "nul"
-input_player3_x_btn = "nul"
-input_player3_x_mbtn = "nul"
-input_player3_y = "nul"
-input_player3_y_axis = "nul"
-input_player3_y_btn = "nul"
-input_player3_y_mbtn = "nul"
-input_player4_a = "nul"
-input_player4_a_axis = "nul"
-input_player4_a_btn = "nul"
-input_player4_a_mbtn = "nul"
-input_player4_analog_dpad_mode = "0"
-input_player4_b = "nul"
-input_player4_b_axis = "nul"
-input_player4_b_btn = "nul"
-input_player4_b_mbtn = "nul"
-input_player4_down = "nul"
-input_player4_down_axis = "nul"
-input_player4_down_btn = "nul"
-input_player4_down_mbtn = "nul"
-input_player4_gun_aux_a = "nul"
-input_player4_gun_aux_a_axis = "nul"
-input_player4_gun_aux_a_btn = "nul"
-input_player4_gun_aux_a_mbtn = "nul"
-input_player4_gun_aux_b = "nul"
-input_player4_gun_aux_b_axis = "nul"
-input_player4_gun_aux_b_btn = "nul"
-input_player4_gun_aux_b_mbtn = "nul"
-input_player4_gun_aux_c = "nul"
-input_player4_gun_aux_c_axis = "nul"
-input_player4_gun_aux_c_btn = "nul"
-input_player4_gun_aux_c_mbtn = "nul"
-input_player4_gun_dpad_down = "nul"
-input_player4_gun_dpad_down_axis = "nul"
-input_player4_gun_dpad_down_btn = "nul"
-input_player4_gun_dpad_down_mbtn = "nul"
-input_player4_gun_dpad_left = "nul"
-input_player4_gun_dpad_left_axis = "nul"
-input_player4_gun_dpad_left_btn = "nul"
-input_player4_gun_dpad_left_mbtn = "nul"
-input_player4_gun_dpad_right = "nul"
-input_player4_gun_dpad_right_axis = "nul"
-input_player4_gun_dpad_right_btn = "nul"
-input_player4_gun_dpad_right_mbtn = "nul"
-input_player4_gun_dpad_up = "nul"
-input_player4_gun_dpad_up_axis = "nul"
-input_player4_gun_dpad_up_btn = "nul"
-input_player4_gun_dpad_up_mbtn = "nul"
-input_player4_gun_offscreen_shot = "nul"
-input_player4_gun_offscreen_shot_axis = "nul"
-input_player4_gun_offscreen_shot_btn = "nul"
-input_player4_gun_offscreen_shot_mbtn = "nul"
-input_player4_gun_select = "nul"
-input_player4_gun_select_axis = "nul"
-input_player4_gun_select_btn = "nul"
-input_player4_gun_select_mbtn = "nul"
-input_player4_gun_start = "nul"
-input_player4_gun_start_axis = "nul"
-input_player4_gun_start_btn = "nul"
-input_player4_gun_start_mbtn = "nul"
-input_player4_gun_trigger = "nul"
-input_player4_gun_trigger_axis = "nul"
-input_player4_gun_trigger_btn = "nul"
-input_player4_gun_trigger_mbtn = "1"
-input_player4_joypad_index = "3"
-input_player4_l = "nul"
-input_player4_l2 = "nul"
-input_player4_l2_axis = "nul"
-input_player4_l2_btn = "nul"
-input_player4_l2_mbtn = "nul"
-input_player4_l3 = "nul"
-input_player4_l3_axis = "nul"
-input_player4_l3_btn = "nul"
-input_player4_l3_mbtn = "nul"
-input_player4_l_axis = "nul"
-input_player4_l_btn = "nul"
-input_player4_l_mbtn = "nul"
-input_player4_l_x_minus = "nul"
-input_player4_l_x_minus_axis = "nul"
-input_player4_l_x_minus_btn = "nul"
-input_player4_l_x_minus_mbtn = "nul"
-input_player4_l_x_plus = "nul"
-input_player4_l_x_plus_axis = "nul"
-input_player4_l_x_plus_btn = "nul"
-input_player4_l_x_plus_mbtn = "nul"
-input_player4_l_y_minus = "nul"
-input_player4_l_y_minus_axis = "nul"
-input_player4_l_y_minus_btn = "nul"
-input_player4_l_y_minus_mbtn = "nul"
-input_player4_l_y_plus = "nul"
-input_player4_l_y_plus_axis = "nul"
-input_player4_l_y_plus_btn = "nul"
-input_player4_l_y_plus_mbtn = "nul"
-input_player4_left = "nul"
-input_player4_left_axis = "nul"
-input_player4_left_btn = "nul"
-input_player4_left_mbtn = "nul"
-input_player4_mouse_index = "3"
-input_player4_r = "nul"
-input_player4_r2 = "nul"
-input_player4_r2_axis = "nul"
-input_player4_r2_btn = "nul"
-input_player4_r2_mbtn = "nul"
-input_player4_r3 = "nul"
-input_player4_r3_axis = "nul"
-input_player4_r3_btn = "nul"
-input_player4_r3_mbtn = "nul"
-input_player4_r_axis = "nul"
-input_player4_r_btn = "nul"
-input_player4_r_mbtn = "nul"
-input_player4_r_x_minus = "nul"
-input_player4_r_x_minus_axis = "nul"
-input_player4_r_x_minus_btn = "nul"
-input_player4_r_x_minus_mbtn = "nul"
-input_player4_r_x_plus = "nul"
-input_player4_r_x_plus_axis = "nul"
-input_player4_r_x_plus_btn = "nul"
-input_player4_r_x_plus_mbtn = "nul"
-input_player4_r_y_minus = "nul"
-input_player4_r_y_minus_axis = "nul"
-input_player4_r_y_minus_btn = "nul"
-input_player4_r_y_minus_mbtn = "nul"
-input_player4_r_y_plus = "nul"
-input_player4_r_y_plus_axis = "nul"
-input_player4_r_y_plus_btn = "nul"
-input_player4_r_y_plus_mbtn = "nul"
-input_player4_right = "nul"
-input_player4_right_axis = "nul"
-input_player4_right_btn = "nul"
-input_player4_right_mbtn = "nul"
-input_player4_select = "nul"
-input_player4_select_axis = "nul"
-input_player4_select_btn = "nul"
-input_player4_select_mbtn = "nul"
-input_player4_start = "nul"
-input_player4_start_axis = "nul"
-input_player4_start_btn = "nul"
-input_player4_start_mbtn = "nul"
-input_player4_turbo = "nul"
-input_player4_turbo_axis = "nul"
-input_player4_turbo_btn = "nul"
-input_player4_turbo_mbtn = "nul"
-input_player4_up = "nul"
-input_player4_up_axis = "nul"
-input_player4_up_btn = "nul"
-input_player4_up_mbtn = "nul"
-input_player4_x = "nul"
-input_player4_x_axis = "nul"
-input_player4_x_btn = "nul"
-input_player4_x_mbtn = "nul"
-input_player4_y = "nul"
-input_player4_y_axis = "nul"
-input_player4_y_btn = "nul"
-input_player4_y_mbtn = "nul"
-input_player5_a = "nul"
-input_player5_a_axis = "nul"
-input_player5_a_btn = "nul"
-input_player5_a_mbtn = "nul"
-input_player5_analog_dpad_mode = "0"
-input_player5_b = "nul"
-input_player5_b_axis = "nul"
-input_player5_b_btn = "nul"
-input_player5_b_mbtn = "nul"
-input_player5_down = "nul"
-input_player5_down_axis = "nul"
-input_player5_down_btn = "nul"
-input_player5_down_mbtn = "nul"
-input_player5_gun_aux_a = "nul"
-input_player5_gun_aux_a_axis = "nul"
-input_player5_gun_aux_a_btn = "nul"
-input_player5_gun_aux_a_mbtn = "nul"
-input_player5_gun_aux_b = "nul"
-input_player5_gun_aux_b_axis = "nul"
-input_player5_gun_aux_b_btn = "nul"
-input_player5_gun_aux_b_mbtn = "nul"
-input_player5_gun_aux_c = "nul"
-input_player5_gun_aux_c_axis = "nul"
-input_player5_gun_aux_c_btn = "nul"
-input_player5_gun_aux_c_mbtn = "nul"
-input_player5_gun_dpad_down = "nul"
-input_player5_gun_dpad_down_axis = "nul"
-input_player5_gun_dpad_down_btn = "nul"
-input_player5_gun_dpad_down_mbtn = "nul"
-input_player5_gun_dpad_left = "nul"
-input_player5_gun_dpad_left_axis = "nul"
-input_player5_gun_dpad_left_btn = "nul"
-input_player5_gun_dpad_left_mbtn = "nul"
-input_player5_gun_dpad_right = "nul"
-input_player5_gun_dpad_right_axis = "nul"
-input_player5_gun_dpad_right_btn = "nul"
-input_player5_gun_dpad_right_mbtn = "nul"
-input_player5_gun_dpad_up = "nul"
-input_player5_gun_dpad_up_axis = "nul"
-input_player5_gun_dpad_up_btn = "nul"
-input_player5_gun_dpad_up_mbtn = "nul"
-input_player5_gun_offscreen_shot = "nul"
-input_player5_gun_offscreen_shot_axis = "nul"
-input_player5_gun_offscreen_shot_btn = "nul"
-input_player5_gun_offscreen_shot_mbtn = "nul"
-input_player5_gun_select = "nul"
-input_player5_gun_select_axis = "nul"
-input_player5_gun_select_btn = "nul"
-input_player5_gun_select_mbtn = "nul"
-input_player5_gun_start = "nul"
-input_player5_gun_start_axis = "nul"
-input_player5_gun_start_btn = "nul"
-input_player5_gun_start_mbtn = "nul"
-input_player5_gun_trigger = "nul"
-input_player5_gun_trigger_axis = "nul"
-input_player5_gun_trigger_btn = "nul"
-input_player5_gun_trigger_mbtn = "1"
-input_player5_joypad_index = "4"
-input_player5_l = "nul"
-input_player5_l2 = "nul"
-input_player5_l2_axis = "nul"
-input_player5_l2_btn = "nul"
-input_player5_l2_mbtn = "nul"
-input_player5_l3 = "nul"
-input_player5_l3_axis = "nul"
-input_player5_l3_btn = "nul"
-input_player5_l3_mbtn = "nul"
-input_player5_l_axis = "nul"
-input_player5_l_btn = "nul"
-input_player5_l_mbtn = "nul"
-input_player5_l_x_minus = "nul"
-input_player5_l_x_minus_axis = "nul"
-input_player5_l_x_minus_btn = "nul"
-input_player5_l_x_minus_mbtn = "nul"
-input_player5_l_x_plus = "nul"
-input_player5_l_x_plus_axis = "nul"
-input_player5_l_x_plus_btn = "nul"
-input_player5_l_x_plus_mbtn = "nul"
-input_player5_l_y_minus = "nul"
-input_player5_l_y_minus_axis = "nul"
-input_player5_l_y_minus_btn = "nul"
-input_player5_l_y_minus_mbtn = "nul"
-input_player5_l_y_plus = "nul"
-input_player5_l_y_plus_axis = "nul"
-input_player5_l_y_plus_btn = "nul"
-input_player5_l_y_plus_mbtn = "nul"
-input_player5_left = "nul"
-input_player5_left_axis = "nul"
-input_player5_left_btn = "nul"
-input_player5_left_mbtn = "nul"
-input_player5_mouse_index = "4"
-input_player5_r = "nul"
-input_player5_r2 = "nul"
-input_player5_r2_axis = "nul"
-input_player5_r2_btn = "nul"
-input_player5_r2_mbtn = "nul"
-input_player5_r3 = "nul"
-input_player5_r3_axis = "nul"
-input_player5_r3_btn = "nul"
-input_player5_r3_mbtn = "nul"
-input_player5_r_axis = "nul"
-input_player5_r_btn = "nul"
-input_player5_r_mbtn = "nul"
-input_player5_r_x_minus = "nul"
-input_player5_r_x_minus_axis = "nul"
-input_player5_r_x_minus_btn = "nul"
-input_player5_r_x_minus_mbtn = "nul"
-input_player5_r_x_plus = "nul"
-input_player5_r_x_plus_axis = "nul"
-input_player5_r_x_plus_btn = "nul"
-input_player5_r_x_plus_mbtn = "nul"
-input_player5_r_y_minus = "nul"
-input_player5_r_y_minus_axis = "nul"
-input_player5_r_y_minus_btn = "nul"
-input_player5_r_y_minus_mbtn = "nul"
-input_player5_r_y_plus = "nul"
-input_player5_r_y_plus_axis = "nul"
-input_player5_r_y_plus_btn = "nul"
-input_player5_r_y_plus_mbtn = "nul"
-input_player5_right = "nul"
-input_player5_right_axis = "nul"
-input_player5_right_btn = "nul"
-input_player5_right_mbtn = "nul"
-input_player5_select = "nul"
-input_player5_select_axis = "nul"
-input_player5_select_btn = "nul"
-input_player5_select_mbtn = "nul"
-input_player5_start = "nul"
-input_player5_start_axis = "nul"
-input_player5_start_btn = "nul"
-input_player5_start_mbtn = "nul"
-input_player5_turbo = "nul"
-input_player5_turbo_axis = "nul"
-input_player5_turbo_btn = "nul"
-input_player5_turbo_mbtn = "nul"
-input_player5_up = "nul"
-input_player5_up_axis = "nul"
-input_player5_up_btn = "nul"
-input_player5_up_mbtn = "nul"
-input_player5_x = "nul"
-input_player5_x_axis = "nul"
-input_player5_x_btn = "nul"
-input_player5_x_mbtn = "nul"
-input_player5_y = "nul"
-input_player5_y_axis = "nul"
-input_player5_y_btn = "nul"
-input_player5_y_mbtn = "nul"
-input_player6_a = "nul"
-input_player6_a_axis = "nul"
-input_player6_a_btn = "nul"
-input_player6_a_mbtn = "nul"
-input_player6_analog_dpad_mode = "0"
-input_player6_b = "nul"
-input_player6_b_axis = "nul"
-input_player6_b_btn = "nul"
-input_player6_b_mbtn = "nul"
-input_player6_down = "nul"
-input_player6_down_axis = "nul"
-input_player6_down_btn = "nul"
-input_player6_down_mbtn = "nul"
-input_player6_gun_aux_a = "nul"
-input_player6_gun_aux_a_axis = "nul"
-input_player6_gun_aux_a_btn = "nul"
-input_player6_gun_aux_a_mbtn = "nul"
-input_player6_gun_aux_b = "nul"
-input_player6_gun_aux_b_axis = "nul"
-input_player6_gun_aux_b_btn = "nul"
-input_player6_gun_aux_b_mbtn = "nul"
-input_player6_gun_aux_c = "nul"
-input_player6_gun_aux_c_axis = "nul"
-input_player6_gun_aux_c_btn = "nul"
-input_player6_gun_aux_c_mbtn = "nul"
-input_player6_gun_dpad_down = "nul"
-input_player6_gun_dpad_down_axis = "nul"
-input_player6_gun_dpad_down_btn = "nul"
-input_player6_gun_dpad_down_mbtn = "nul"
-input_player6_gun_dpad_left = "nul"
-input_player6_gun_dpad_left_axis = "nul"
-input_player6_gun_dpad_left_btn = "nul"
-input_player6_gun_dpad_left_mbtn = "nul"
-input_player6_gun_dpad_right = "nul"
-input_player6_gun_dpad_right_axis = "nul"
-input_player6_gun_dpad_right_btn = "nul"
-input_player6_gun_dpad_right_mbtn = "nul"
-input_player6_gun_dpad_up = "nul"
-input_player6_gun_dpad_up_axis = "nul"
-input_player6_gun_dpad_up_btn = "nul"
-input_player6_gun_dpad_up_mbtn = "nul"
-input_player6_gun_offscreen_shot = "nul"
-input_player6_gun_offscreen_shot_axis = "nul"
-input_player6_gun_offscreen_shot_btn = "nul"
-input_player6_gun_offscreen_shot_mbtn = "nul"
-input_player6_gun_select = "nul"
-input_player6_gun_select_axis = "nul"
-input_player6_gun_select_btn = "nul"
-input_player6_gun_select_mbtn = "nul"
-input_player6_gun_start = "nul"
-input_player6_gun_start_axis = "nul"
-input_player6_gun_start_btn = "nul"
-input_player6_gun_start_mbtn = "nul"
-input_player6_gun_trigger = "nul"
-input_player6_gun_trigger_axis = "nul"
-input_player6_gun_trigger_btn = "nul"
-input_player6_gun_trigger_mbtn = "1"
-input_player6_joypad_index = "5"
-input_player6_l = "nul"
-input_player6_l2 = "nul"
-input_player6_l2_axis = "nul"
-input_player6_l2_btn = "nul"
-input_player6_l2_mbtn = "nul"
-input_player6_l3 = "nul"
-input_player6_l3_axis = "nul"
-input_player6_l3_btn = "nul"
-input_player6_l3_mbtn = "nul"
-input_player6_l_axis = "nul"
-input_player6_l_btn = "nul"
-input_player6_l_mbtn = "nul"
-input_player6_l_x_minus = "nul"
-input_player6_l_x_minus_axis = "nul"
-input_player6_l_x_minus_btn = "nul"
-input_player6_l_x_minus_mbtn = "nul"
-input_player6_l_x_plus = "nul"
-input_player6_l_x_plus_axis = "nul"
-input_player6_l_x_plus_btn = "nul"
-input_player6_l_x_plus_mbtn = "nul"
-input_player6_l_y_minus = "nul"
-input_player6_l_y_minus_axis = "nul"
-input_player6_l_y_minus_btn = "nul"
-input_player6_l_y_minus_mbtn = "nul"
-input_player6_l_y_plus = "nul"
-input_player6_l_y_plus_axis = "nul"
-input_player6_l_y_plus_btn = "nul"
-input_player6_l_y_plus_mbtn = "nul"
-input_player6_left = "nul"
-input_player6_left_axis = "nul"
-input_player6_left_btn = "nul"
-input_player6_left_mbtn = "nul"
-input_player6_mouse_index = "5"
-input_player6_r = "nul"
-input_player6_r2 = "nul"
-input_player6_r2_axis = "nul"
-input_player6_r2_btn = "nul"
-input_player6_r2_mbtn = "nul"
-input_player6_r3 = "nul"
-input_player6_r3_axis = "nul"
-input_player6_r3_btn = "nul"
-input_player6_r3_mbtn = "nul"
-input_player6_r_axis = "nul"
-input_player6_r_btn = "nul"
-input_player6_r_mbtn = "nul"
-input_player6_r_x_minus = "nul"
-input_player6_r_x_minus_axis = "nul"
-input_player6_r_x_minus_btn = "nul"
-input_player6_r_x_minus_mbtn = "nul"
-input_player6_r_x_plus = "nul"
-input_player6_r_x_plus_axis = "nul"
-input_player6_r_x_plus_btn = "nul"
-input_player6_r_x_plus_mbtn = "nul"
-input_player6_r_y_minus = "nul"
-input_player6_r_y_minus_axis = "nul"
-input_player6_r_y_minus_btn = "nul"
-input_player6_r_y_minus_mbtn = "nul"
-input_player6_r_y_plus = "nul"
-input_player6_r_y_plus_axis = "nul"
-input_player6_r_y_plus_btn = "nul"
-input_player6_r_y_plus_mbtn = "nul"
-input_player6_right = "nul"
-input_player6_right_axis = "nul"
-input_player6_right_btn = "nul"
-input_player6_right_mbtn = "nul"
-input_player6_select = "nul"
-input_player6_select_axis = "nul"
-input_player6_select_btn = "nul"
-input_player6_select_mbtn = "nul"
-input_player6_start = "nul"
-input_player6_start_axis = "nul"
-input_player6_start_btn = "nul"
-input_player6_start_mbtn = "nul"
-input_player6_turbo = "nul"
-input_player6_turbo_axis = "nul"
-input_player6_turbo_btn = "nul"
-input_player6_turbo_mbtn = "nul"
-input_player6_up = "nul"
-input_player6_up_axis = "nul"
-input_player6_up_btn = "nul"
-input_player6_up_mbtn = "nul"
-input_player6_x = "nul"
-input_player6_x_axis = "nul"
-input_player6_x_btn = "nul"
-input_player6_x_mbtn = "nul"
-input_player6_y = "nul"
-input_player6_y_axis = "nul"
-input_player6_y_btn = "nul"
-input_player6_y_mbtn = "nul"
-input_player7_a = "nul"
-input_player7_a_axis = "nul"
-input_player7_a_btn = "nul"
-input_player7_a_mbtn = "nul"
-input_player7_analog_dpad_mode = "0"
-input_player7_b = "nul"
-input_player7_b_axis = "nul"
-input_player7_b_btn = "nul"
-input_player7_b_mbtn = "nul"
-input_player7_down = "nul"
-input_player7_down_axis = "nul"
-input_player7_down_btn = "nul"
-input_player7_down_mbtn = "nul"
-input_player7_gun_aux_a = "nul"
-input_player7_gun_aux_a_axis = "nul"
-input_player7_gun_aux_a_btn = "nul"
-input_player7_gun_aux_a_mbtn = "nul"
-input_player7_gun_aux_b = "nul"
-input_player7_gun_aux_b_axis = "nul"
-input_player7_gun_aux_b_btn = "nul"
-input_player7_gun_aux_b_mbtn = "nul"
-input_player7_gun_aux_c = "nul"
-input_player7_gun_aux_c_axis = "nul"
-input_player7_gun_aux_c_btn = "nul"
-input_player7_gun_aux_c_mbtn = "nul"
-input_player7_gun_dpad_down = "nul"
-input_player7_gun_dpad_down_axis = "nul"
-input_player7_gun_dpad_down_btn = "nul"
-input_player7_gun_dpad_down_mbtn = "nul"
-input_player7_gun_dpad_left = "nul"
-input_player7_gun_dpad_left_axis = "nul"
-input_player7_gun_dpad_left_btn = "nul"
-input_player7_gun_dpad_left_mbtn = "nul"
-input_player7_gun_dpad_right = "nul"
-input_player7_gun_dpad_right_axis = "nul"
-input_player7_gun_dpad_right_btn = "nul"
-input_player7_gun_dpad_right_mbtn = "nul"
-input_player7_gun_dpad_up = "nul"
-input_player7_gun_dpad_up_axis = "nul"
-input_player7_gun_dpad_up_btn = "nul"
-input_player7_gun_dpad_up_mbtn = "nul"
-input_player7_gun_offscreen_shot = "nul"
-input_player7_gun_offscreen_shot_axis = "nul"
-input_player7_gun_offscreen_shot_btn = "nul"
-input_player7_gun_offscreen_shot_mbtn = "nul"
-input_player7_gun_select = "nul"
-input_player7_gun_select_axis = "nul"
-input_player7_gun_select_btn = "nul"
-input_player7_gun_select_mbtn = "nul"
-input_player7_gun_start = "nul"
-input_player7_gun_start_axis = "nul"
-input_player7_gun_start_btn = "nul"
-input_player7_gun_start_mbtn = "nul"
-input_player7_gun_trigger = "nul"
-input_player7_gun_trigger_axis = "nul"
-input_player7_gun_trigger_btn = "nul"
-input_player7_gun_trigger_mbtn = "1"
-input_player7_joypad_index = "6"
-input_player7_l = "nul"
-input_player7_l2 = "nul"
-input_player7_l2_axis = "nul"
-input_player7_l2_btn = "nul"
-input_player7_l2_mbtn = "nul"
-input_player7_l3 = "nul"
-input_player7_l3_axis = "nul"
-input_player7_l3_btn = "nul"
-input_player7_l3_mbtn = "nul"
-input_player7_l_axis = "nul"
-input_player7_l_btn = "nul"
-input_player7_l_mbtn = "nul"
-input_player7_l_x_minus = "nul"
-input_player7_l_x_minus_axis = "nul"
-input_player7_l_x_minus_btn = "nul"
-input_player7_l_x_minus_mbtn = "nul"
-input_player7_l_x_plus = "nul"
-input_player7_l_x_plus_axis = "nul"
-input_player7_l_x_plus_btn = "nul"
-input_player7_l_x_plus_mbtn = "nul"
-input_player7_l_y_minus = "nul"
-input_player7_l_y_minus_axis = "nul"
-input_player7_l_y_minus_btn = "nul"
-input_player7_l_y_minus_mbtn = "nul"
-input_player7_l_y_plus = "nul"
-input_player7_l_y_plus_axis = "nul"
-input_player7_l_y_plus_btn = "nul"
-input_player7_l_y_plus_mbtn = "nul"
-input_player7_left = "nul"
-input_player7_left_axis = "nul"
-input_player7_left_btn = "nul"
-input_player7_left_mbtn = "nul"
-input_player7_mouse_index = "6"
-input_player7_r = "nul"
-input_player7_r2 = "nul"
-input_player7_r2_axis = "nul"
-input_player7_r2_btn = "nul"
-input_player7_r2_mbtn = "nul"
-input_player7_r3 = "nul"
-input_player7_r3_axis = "nul"
-input_player7_r3_btn = "nul"
-input_player7_r3_mbtn = "nul"
-input_player7_r_axis = "nul"
-input_player7_r_btn = "nul"
-input_player7_r_mbtn = "nul"
-input_player7_r_x_minus = "nul"
-input_player7_r_x_minus_axis = "nul"
-input_player7_r_x_minus_btn = "nul"
-input_player7_r_x_minus_mbtn = "nul"
-input_player7_r_x_plus = "nul"
-input_player7_r_x_plus_axis = "nul"
-input_player7_r_x_plus_btn = "nul"
-input_player7_r_x_plus_mbtn = "nul"
-input_player7_r_y_minus = "nul"
-input_player7_r_y_minus_axis = "nul"
-input_player7_r_y_minus_btn = "nul"
-input_player7_r_y_minus_mbtn = "nul"
-input_player7_r_y_plus = "nul"
-input_player7_r_y_plus_axis = "nul"
-input_player7_r_y_plus_btn = "nul"
-input_player7_r_y_plus_mbtn = "nul"
-input_player7_right = "nul"
-input_player7_right_axis = "nul"
-input_player7_right_btn = "nul"
-input_player7_right_mbtn = "nul"
-input_player7_select = "nul"
-input_player7_select_axis = "nul"
-input_player7_select_btn = "nul"
-input_player7_select_mbtn = "nul"
-input_player7_start = "nul"
-input_player7_start_axis = "nul"
-input_player7_start_btn = "nul"
-input_player7_start_mbtn = "nul"
-input_player7_turbo = "nul"
-input_player7_turbo_axis = "nul"
-input_player7_turbo_btn = "nul"
-input_player7_turbo_mbtn = "nul"
-input_player7_up = "nul"
-input_player7_up_axis = "nul"
-input_player7_up_btn = "nul"
-input_player7_up_mbtn = "nul"
-input_player7_x = "nul"
-input_player7_x_axis = "nul"
-input_player7_x_btn = "nul"
-input_player7_x_mbtn = "nul"
-input_player7_y = "nul"
-input_player7_y_axis = "nul"
-input_player7_y_btn = "nul"
-input_player7_y_mbtn = "nul"
-input_player8_a = "nul"
-input_player8_a_axis = "nul"
-input_player8_a_btn = "nul"
-input_player8_a_mbtn = "nul"
-input_player8_analog_dpad_mode = "0"
-input_player8_b = "nul"
-input_player8_b_axis = "nul"
-input_player8_b_btn = "nul"
-input_player8_b_mbtn = "nul"
-input_player8_down = "nul"
-input_player8_down_axis = "nul"
-input_player8_down_btn = "nul"
-input_player8_down_mbtn = "nul"
-input_player8_gun_aux_a = "nul"
-input_player8_gun_aux_a_axis = "nul"
-input_player8_gun_aux_a_btn = "nul"
-input_player8_gun_aux_a_mbtn = "nul"
-input_player8_gun_aux_b = "nul"
-input_player8_gun_aux_b_axis = "nul"
-input_player8_gun_aux_b_btn = "nul"
-input_player8_gun_aux_b_mbtn = "nul"
-input_player8_gun_aux_c = "nul"
-input_player8_gun_aux_c_axis = "nul"
-input_player8_gun_aux_c_btn = "nul"
-input_player8_gun_aux_c_mbtn = "nul"
-input_player8_gun_dpad_down = "nul"
-input_player8_gun_dpad_down_axis = "nul"
-input_player8_gun_dpad_down_btn = "nul"
-input_player8_gun_dpad_down_mbtn = "nul"
-input_player8_gun_dpad_left = "nul"
-input_player8_gun_dpad_left_axis = "nul"
-input_player8_gun_dpad_left_btn = "nul"
-input_player8_gun_dpad_left_mbtn = "nul"
-input_player8_gun_dpad_right = "nul"
-input_player8_gun_dpad_right_axis = "nul"
-input_player8_gun_dpad_right_btn = "nul"
-input_player8_gun_dpad_right_mbtn = "nul"
-input_player8_gun_dpad_up = "nul"
-input_player8_gun_dpad_up_axis = "nul"
-input_player8_gun_dpad_up_btn = "nul"
-input_player8_gun_dpad_up_mbtn = "nul"
-input_player8_gun_offscreen_shot = "nul"
-input_player8_gun_offscreen_shot_axis = "nul"
-input_player8_gun_offscreen_shot_btn = "nul"
-input_player8_gun_offscreen_shot_mbtn = "nul"
-input_player8_gun_select = "nul"
-input_player8_gun_select_axis = "nul"
-input_player8_gun_select_btn = "nul"
-input_player8_gun_select_mbtn = "nul"
-input_player8_gun_start = "nul"
-input_player8_gun_start_axis = "nul"
-input_player8_gun_start_btn = "nul"
-input_player8_gun_start_mbtn = "nul"
-input_player8_gun_trigger = "nul"
-input_player8_gun_trigger_axis = "nul"
-input_player8_gun_trigger_btn = "nul"
-input_player8_gun_trigger_mbtn = "1"
-input_player8_joypad_index = "7"
-input_player8_l = "nul"
-input_player8_l2 = "nul"
-input_player8_l2_axis = "nul"
-input_player8_l2_btn = "nul"
-input_player8_l2_mbtn = "nul"
-input_player8_l3 = "nul"
-input_player8_l3_axis = "nul"
-input_player8_l3_btn = "nul"
-input_player8_l3_mbtn = "nul"
-input_player8_l_axis = "nul"
-input_player8_l_btn = "nul"
-input_player8_l_mbtn = "nul"
-input_player8_l_x_minus = "nul"
-input_player8_l_x_minus_axis = "nul"
-input_player8_l_x_minus_btn = "nul"
-input_player8_l_x_minus_mbtn = "nul"
-input_player8_l_x_plus = "nul"
-input_player8_l_x_plus_axis = "nul"
-input_player8_l_x_plus_btn = "nul"
-input_player8_l_x_plus_mbtn = "nul"
-input_player8_l_y_minus = "nul"
-input_player8_l_y_minus_axis = "nul"
-input_player8_l_y_minus_btn = "nul"
-input_player8_l_y_minus_mbtn = "nul"
-input_player8_l_y_plus = "nul"
-input_player8_l_y_plus_axis = "nul"
-input_player8_l_y_plus_btn = "nul"
-input_player8_l_y_plus_mbtn = "nul"
-input_player8_left = "nul"
-input_player8_left_axis = "nul"
-input_player8_left_btn = "nul"
-input_player8_left_mbtn = "nul"
-input_player8_mouse_index = "7"
-input_player8_r = "nul"
-input_player8_r2 = "nul"
-input_player8_r2_axis = "nul"
-input_player8_r2_btn = "nul"
-input_player8_r2_mbtn = "nul"
-input_player8_r3 = "nul"
-input_player8_r3_axis = "nul"
-input_player8_r3_btn = "nul"
-input_player8_r3_mbtn = "nul"
-input_player8_r_axis = "nul"
-input_player8_r_btn = "nul"
-input_player8_r_mbtn = "nul"
-input_player8_r_x_minus = "nul"
-input_player8_r_x_minus_axis = "nul"
-input_player8_r_x_minus_btn = "nul"
-input_player8_r_x_minus_mbtn = "nul"
-input_player8_r_x_plus = "nul"
-input_player8_r_x_plus_axis = "nul"
-input_player8_r_x_plus_btn = "nul"
-input_player8_r_x_plus_mbtn = "nul"
-input_player8_r_y_minus = "nul"
-input_player8_r_y_minus_axis = "nul"
-input_player8_r_y_minus_btn = "nul"
-input_player8_r_y_minus_mbtn = "nul"
-input_player8_r_y_plus = "nul"
-input_player8_r_y_plus_axis = "nul"
-input_player8_r_y_plus_btn = "nul"
-input_player8_r_y_plus_mbtn = "nul"
-input_player8_right = "nul"
-input_player8_right_axis = "nul"
-input_player8_right_btn = "nul"
-input_player8_right_mbtn = "nul"
-input_player8_select = "nul"
-input_player8_select_axis = "nul"
-input_player8_select_btn = "nul"
-input_player8_select_mbtn = "nul"
-input_player8_start = "nul"
-input_player8_start_axis = "nul"
-input_player8_start_btn = "nul"
-input_player8_start_mbtn = "nul"
-input_player8_turbo = "nul"
-input_player8_turbo_axis = "nul"
-input_player8_turbo_btn = "nul"
-input_player8_turbo_mbtn = "nul"
-input_player8_up = "nul"
-input_player8_up_axis = "nul"
-input_player8_up_btn = "nul"
-input_player8_up_mbtn = "nul"
-input_player8_x = "nul"
-input_player8_x_axis = "nul"
-input_player8_x_btn = "nul"
-input_player8_x_mbtn = "nul"
-input_player8_y = "nul"
-input_player8_y_axis = "nul"
-input_player8_y_btn = "nul"
-input_player8_y_mbtn = "nul"
-input_player9_a = "nul"
-input_player9_a_axis = "nul"
-input_player9_a_btn = "nul"
-input_player9_a_mbtn = "nul"
-input_player9_analog_dpad_mode = "0"
-input_player9_b = "nul"
-input_player9_b_axis = "nul"
-input_player9_b_btn = "nul"
-input_player9_b_mbtn = "nul"
-input_player9_down = "nul"
-input_player9_down_axis = "nul"
-input_player9_down_btn = "nul"
-input_player9_down_mbtn = "nul"
-input_player9_gun_aux_a = "nul"
-input_player9_gun_aux_a_axis = "nul"
-input_player9_gun_aux_a_btn = "nul"
-input_player9_gun_aux_a_mbtn = "nul"
-input_player9_gun_aux_b = "nul"
-input_player9_gun_aux_b_axis = "nul"
-input_player9_gun_aux_b_btn = "nul"
-input_player9_gun_aux_b_mbtn = "nul"
-input_player9_gun_aux_c = "nul"
-input_player9_gun_aux_c_axis = "nul"
-input_player9_gun_aux_c_btn = "nul"
-input_player9_gun_aux_c_mbtn = "nul"
-input_player9_gun_dpad_down = "nul"
-input_player9_gun_dpad_down_axis = "nul"
-input_player9_gun_dpad_down_btn = "nul"
-input_player9_gun_dpad_down_mbtn = "nul"
-input_player9_gun_dpad_left = "nul"
-input_player9_gun_dpad_left_axis = "nul"
-input_player9_gun_dpad_left_btn = "nul"
-input_player9_gun_dpad_left_mbtn = "nul"
-input_player9_gun_dpad_right = "nul"
-input_player9_gun_dpad_right_axis = "nul"
-input_player9_gun_dpad_right_btn = "nul"
-input_player9_gun_dpad_right_mbtn = "nul"
-input_player9_gun_dpad_up = "nul"
-input_player9_gun_dpad_up_axis = "nul"
-input_player9_gun_dpad_up_btn = "nul"
-input_player9_gun_dpad_up_mbtn = "nul"
-input_player9_gun_offscreen_shot = "nul"
-input_player9_gun_offscreen_shot_axis = "nul"
-input_player9_gun_offscreen_shot_btn = "nul"
-input_player9_gun_offscreen_shot_mbtn = "nul"
-input_player9_gun_select = "nul"
-input_player9_gun_select_axis = "nul"
-input_player9_gun_select_btn = "nul"
-input_player9_gun_select_mbtn = "nul"
-input_player9_gun_start = "nul"
-input_player9_gun_start_axis = "nul"
-input_player9_gun_start_btn = "nul"
-input_player9_gun_start_mbtn = "nul"
-input_player9_gun_trigger = "nul"
-input_player9_gun_trigger_axis = "nul"
-input_player9_gun_trigger_btn = "nul"
-input_player9_gun_trigger_mbtn = "1"
-input_player9_joypad_index = "8"
-input_player9_l = "nul"
-input_player9_l2 = "nul"
-input_player9_l2_axis = "nul"
-input_player9_l2_btn = "nul"
-input_player9_l2_mbtn = "nul"
-input_player9_l3 = "nul"
-input_player9_l3_axis = "nul"
-input_player9_l3_btn = "nul"
-input_player9_l3_mbtn = "nul"
-input_player9_l_axis = "nul"
-input_player9_l_btn = "nul"
-input_player9_l_mbtn = "nul"
-input_player9_l_x_minus = "nul"
-input_player9_l_x_minus_axis = "nul"
-input_player9_l_x_minus_btn = "nul"
-input_player9_l_x_minus_mbtn = "nul"
-input_player9_l_x_plus = "nul"
-input_player9_l_x_plus_axis = "nul"
-input_player9_l_x_plus_btn = "nul"
-input_player9_l_x_plus_mbtn = "nul"
-input_player9_l_y_minus = "nul"
-input_player9_l_y_minus_axis = "nul"
-input_player9_l_y_minus_btn = "nul"
-input_player9_l_y_minus_mbtn = "nul"
-input_player9_l_y_plus = "nul"
-input_player9_l_y_plus_axis = "nul"
-input_player9_l_y_plus_btn = "nul"
-input_player9_l_y_plus_mbtn = "nul"
-input_player9_left = "nul"
-input_player9_left_axis = "nul"
-input_player9_left_btn = "nul"
-input_player9_left_mbtn = "nul"
-input_player9_mouse_index = "8"
-input_player9_r = "nul"
-input_player9_r2 = "nul"
-input_player9_r2_axis = "nul"
-input_player9_r2_btn = "nul"
-input_player9_r2_mbtn = "nul"
-input_player9_r3 = "nul"
-input_player9_r3_axis = "nul"
-input_player9_r3_btn = "nul"
-input_player9_r3_mbtn = "nul"
-input_player9_r_axis = "nul"
-input_player9_r_btn = "nul"
-input_player9_r_mbtn = "nul"
-input_player9_r_x_minus = "nul"
-input_player9_r_x_minus_axis = "nul"
-input_player9_r_x_minus_btn = "nul"
-input_player9_r_x_minus_mbtn = "nul"
-input_player9_r_x_plus = "nul"
-input_player9_r_x_plus_axis = "nul"
-input_player9_r_x_plus_btn = "nul"
-input_player9_r_x_plus_mbtn = "nul"
-input_player9_r_y_minus = "nul"
-input_player9_r_y_minus_axis = "nul"
-input_player9_r_y_minus_btn = "nul"
-input_player9_r_y_minus_mbtn = "nul"
-input_player9_r_y_plus = "nul"
-input_player9_r_y_plus_axis = "nul"
-input_player9_r_y_plus_btn = "nul"
-input_player9_r_y_plus_mbtn = "nul"
-input_player9_right = "nul"
-input_player9_right_axis = "nul"
-input_player9_right_btn = "nul"
-input_player9_right_mbtn = "nul"
-input_player9_select = "nul"
-input_player9_select_axis = "nul"
-input_player9_select_btn = "nul"
-input_player9_select_mbtn = "nul"
-input_player9_start = "nul"
-input_player9_start_axis = "nul"
-input_player9_start_btn = "nul"
-input_player9_start_mbtn = "nul"
-input_player9_turbo = "nul"
-input_player9_turbo_axis = "nul"
-input_player9_turbo_btn = "nul"
-input_player9_turbo_mbtn = "nul"
-input_player9_up = "nul"
-input_player9_up_axis = "nul"
-input_player9_up_btn = "nul"
-input_player9_up_mbtn = "nul"
-input_player9_x = "nul"
-input_player9_x_axis = "nul"
-input_player9_x_btn = "nul"
-input_player9_x_mbtn = "nul"
-input_player9_y = "nul"
-input_player9_y_axis = "nul"
-input_player9_y_btn = "nul"
-input_player9_y_mbtn = "nul"
-input_poll_type_behavior = "2"
-input_preempt_toggle = "nul"
-input_preempt_toggle_axis = "nul"
-input_preempt_toggle_btn = "nul"
-input_preempt_toggle_mbtn = "nul"
-input_quit_gamepad_combo = "0"
-input_record_replay = "nul"
-input_record_replay_axis = "nul"
-input_record_replay_btn = "nul"
-input_record_replay_mbtn = "nul"
-input_recording_toggle = "nul"
-input_recording_toggle_axis = "nul"
-input_recording_toggle_btn = "nul"
-input_recording_toggle_mbtn = "nul"
-input_remap_binds_enable = "true"
-input_remapping_directory = "/storage/emulated/0/RetroArch/config/remaps"
-input_replay_slot_decrease = "nul"
-input_replay_slot_decrease_axis = "nul"
-input_replay_slot_decrease_btn = "nul"
-input_replay_slot_decrease_mbtn = "nul"
-input_replay_slot_increase = "nul"
-input_replay_slot_increase_axis = "nul"
-input_replay_slot_increase_btn = "nul"
-input_replay_slot_increase_mbtn = "nul"
-input_reset = "h"
-input_reset_axis = "nul"
-input_reset_btn = "nul"
-input_reset_mbtn = "nul"
-input_rewind = "r"
-input_rewind_axis = "nul"
-input_rewind_btn = "nul"
-input_rewind_mbtn = "nul"
-input_rumble_gain = "100"
-input_runahead_toggle = "nul"
-input_runahead_toggle_axis = "nul"
-input_runahead_toggle_btn = "nul"
-input_runahead_toggle_mbtn = "nul"
-input_save_state = "home"
-input_save_state_axis = "nul"
-input_save_state_btn = "nul"
-input_save_state_mbtn = "nul"
-input_screenshot = "f8"
-input_screenshot_axis = "nul"
-input_screenshot_btn = "nul"
-input_screenshot_mbtn = "nul"
-input_sensors_enable = "false"
-input_shader_next = "m"
-input_shader_next_axis = "nul"
-input_shader_next_btn = "nul"
-input_shader_next_mbtn = "nul"
-input_shader_prev = "n"
-input_shader_prev_axis = "nul"
-input_shader_prev_btn = "nul"
-input_shader_prev_mbtn = "nul"
-input_shader_toggle = "comma"
-input_shader_toggle_axis = "nul"
-input_shader_toggle_btn = "nul"
-input_shader_toggle_mbtn = "nul"
-input_state_slot_decrease = "f6"
-input_state_slot_decrease_axis = "nul"
-input_state_slot_decrease_btn = "nul"
-input_state_slot_decrease_mbtn = "nul"
-input_state_slot_increase = "f7"
-input_state_slot_increase_axis = "nul"
-input_state_slot_increase_btn = "nul"
-input_state_slot_increase_mbtn = "nul"
-input_streaming_toggle = "nul"
-input_streaming_toggle_axis = "nul"
-input_streaming_toggle_btn = "nul"
-input_streaming_toggle_mbtn = "nul"
-input_toggle_fast_forward = "space"
-input_toggle_fast_forward_axis = "nul"
-input_toggle_fast_forward_btn = "nul"
-input_toggle_fast_forward_mbtn = "nul"
-input_toggle_fullscreen = "f"
-input_toggle_fullscreen_axis = "nul"
-input_toggle_fullscreen_btn = "nul"
-input_toggle_fullscreen_mbtn = "nul"
-input_toggle_slowmotion = "nul"
-input_toggle_slowmotion_axis = "nul"
-input_toggle_slowmotion_btn = "nul"
-input_toggle_slowmotion_mbtn = "nul"
-input_toggle_statistics = "nul"
-input_toggle_statistics_axis = "nul"
-input_toggle_statistics_btn = "nul"
-input_toggle_statistics_mbtn = "nul"
-input_toggle_vrr_runloop = "nul"
-input_toggle_vrr_runloop_axis = "nul"
-input_toggle_vrr_runloop_btn = "nul"
-input_toggle_vrr_runloop_mbtn = "nul"
-input_touch_scale = "1"
-input_turbo_default_button = "0"
-input_turbo_mode = "0"
-input_turbo_period = "6"
-input_volume_down = "subtract"
-input_volume_down_axis = "nul"
-input_volume_down_btn = "nul"
-input_volume_down_mbtn = "nul"
-input_volume_up = "add"
-input_volume_up_axis = "nul"
-input_volume_up_btn = "nul"
-input_volume_up_mbtn = "nul"
-joypad_autoconfig_dir = "/data/user/0/com.retroarch.aarch64/autoconfig"
-keyboard_gamepad_enable = "true"
-keyboard_gamepad_mapping_type = "1"
-kiosk_mode_enable = "false"
-kiosk_mode_password = ""
-led_driver = "null"
-libretro_directory = "/data/user/0/com.retroarch.aarch64/cores/"
-libretro_info_path = "/data/user/0/com.retroarch.aarch64/info"
-libretro_log_level = "0"
-load_dummy_on_core_shutdown = "true"
-location_allow = "false"
-location_driver = "android"
-log_dir = "/storage/emulated/0/RetroArch/logs"
-log_to_file = "true"
-log_to_file_timestamp = "true"
-log_verbosity = "true"
-materialui_landscape_layout_optimization = "0"
-materialui_menu_color_theme = "9"
-materialui_menu_transition_animation = "0"
-materialui_thumbnail_view_landscape = "2"
-materialui_thumbnail_view_portrait = "1"
-memory_show = "false"
-memory_update_interval = "256"
-menu_battery_level_enable = "true"
-menu_core_enable = "true"
-menu_disable_info_button = "false"
-menu_disable_search_button = "false"
-menu_driver = "null"
-menu_dynamic_wallpaper_enable = "true"
-menu_enable_widgets = "true"
-menu_footer_opacity = "1.000000"
-menu_framebuffer_opacity = "0.900000"
-menu_header_opacity = "1.000000"
-menu_horizontal_animation = "true"
-menu_insert_disk_resume = "true"
-menu_left_thumbnails = "0"
-menu_linear_filter = "false"
-menu_mouse_enable = "false"
-menu_navigation_browser_filter_supported_extensions_enable = "true"
-menu_navigation_wraparound_enable = "true"
-menu_pause_libretro = "true"
-menu_pointer_enable = "true"
-menu_savestate_resume = "true"
-menu_scale_factor = "1.000000"
-menu_screensaver_timeout = "0"
-menu_scroll_delay = "256"
-menu_scroll_fast = "false"
-menu_shader_pipeline = "1"
-menu_show_advanced_settings = "true"
-menu_show_configurations = "true"
-menu_show_core_updater = "true"
-menu_show_help = "true"
-menu_show_information = "true"
-menu_show_latency = "true"
-menu_show_legacy_thumbnail_updater = "false"
-menu_show_load_content = "true"
-menu_show_load_content_animation = "true"
-menu_show_load_core = "true"
-menu_show_online_updater = "true"
-menu_show_overlays = "true"
-menu_show_quit_retroarch = "true"
-menu_show_reboot = "true"
-menu_show_restart_retroarch = "true"
-menu_show_rewind = "true"
-menu_show_shutdown = "true"
-menu_show_sublabels = "true"
-menu_swap_ok_cancel_buttons = "true"
-menu_swap_scroll_buttons = "false"
-menu_throttle_framerate = "true"
-menu_thumbnail_upscale_threshold = "0"
-menu_thumbnails = "3"
-menu_ticker_smooth = "true"
-menu_ticker_speed = "2.000000"
-menu_ticker_type = "1"
-menu_timedate_date_separator = "0"
-menu_timedate_enable = "true"
-menu_timedate_style = "11"
-menu_unified_controls = "false"
-menu_use_preferred_system_color_theme = "false"
-menu_wallpaper = ""
-menu_wallpaper_opacity = "0.300000"
-menu_widget_scale_auto = "true"
-menu_widget_scale_factor = "1.000000"
-midi_driver = "null"
-midi_input = "OFF"
-midi_output = "OFF"
-midi_volume = "100"
-netplay_mitm_server = "nyc"
-netplay_nickname = ""
-notification_show_autoconfig = "true"
-notification_show_cheats_applied = "true"
-notification_show_config_override_load = "true"
-notification_show_fast_forward = "true"
-notification_show_patch_applied = "true"
-notification_show_refresh_rate = "true"
-notification_show_remap_load = "true"
-notification_show_set_initial_disk = "true"
-notification_show_when_menu_is_alive = "false"
-overlay_directory = "/data/user/0/com.retroarch.aarch64/overlays"
-pause_nonactive = "true"
-pause_on_disconnect = "false"
-perfcnt_enable = "false"
-playlist_compression = "false"
-playlist_directory = "/storage/emulated/0/RetroArch/playlists"
-playlist_entry_remove_enable = "1"
-playlist_entry_rename = "true"
-playlist_fuzzy_archive_match = "false"
-playlist_portable_paths = "false"
-playlist_show_entry_idx = "true"
-playlist_show_history_icons = "0"
-playlist_show_inline_core_name = "0"
-playlist_show_sublabels = "true"
-playlist_sort_alphabetical = "true"
-playlist_sublabel_last_played_style = "0"
-playlist_sublabel_runtime_type = "0"
-playlist_use_old_format = "false"
-preemptive_frames_enable = "false"
-preemptive_frames_hide_warnings = "false"
-quick_menu_show_add_to_favorites = "true"
-quick_menu_show_cheats = "true"
-quick_menu_show_close_content = "true"
-quick_menu_show_controls = "true"
-quick_menu_show_core_options_flush = "false"
-quick_menu_show_information = "true"
-quick_menu_show_options = "true"
-quick_menu_show_replay = "false"
-quick_menu_show_reset_core_association = "true"
-quick_menu_show_restart_content = "true"
-quick_menu_show_resume_content = "true"
-quick_menu_show_save_content_dir_overrides = "true"
-quick_menu_show_save_core_overrides = "true"
-quick_menu_show_save_game_overrides = "true"
-quick_menu_show_save_load_state = "true"
-quick_menu_show_savestate_submenu = "true"
-quick_menu_show_set_core_association = "true"
-quick_menu_show_shaders = "true"
-quick_menu_show_start_recording = "true"
-quick_menu_show_start_streaming = "true"
-quick_menu_show_take_screenshot = "true"
-quick_menu_show_undo_save_load_state = "true"
-quit_on_close_content = "0"
-quit_press_twice = "true"
-record_driver = "null"
-recording_config_directory = ""
-recording_output_directory = ""
-remap_save_on_exit = "true"
-replay_auto_index = "true"
-replay_checkpoint_interval = "0"
-replay_max_keep = "0"
-replay_slot = "0"
-resampler_directory = ""
-rewind_buffer_size = "20971520"
-rewind_buffer_size_step = "10"
-rewind_enable = "false"
-rewind_granularity = "1"
-rgui_browser_directory = "default"
-rgui_config_directory = "/storage/emulated/0/RetroArch/config"
-rgui_menu_theme_preset = ""
-rgui_particle_effect_speed = "1.000000"
-rgui_show_start_screen = "false"
-run_ahead_enabled = "false"
-run_ahead_frames = "1"
-run_ahead_hide_warnings = "false"
-run_ahead_secondary_instance = "true"
-runtime_log_directory = "default"
-save_file_compression = "false"
-savefile_directory = "/storage/emulated/0/RetroArch/saves"
-savefiles_in_content_dir = "false"
-savestate_auto_index = "false"
-savestate_auto_load = "false"
-savestate_auto_save = "false"
-savestate_directory = "/storage/emulated/0/RetroArch/states"
-savestate_file_compression = "true"
-savestate_max_keep = "0"
-savestate_thumbnail_enable = "false"
-savestates_in_content_dir = "false"
-scan_without_core_match = "false"
-screen_brightness = "100"
-screen_orientation = "0"
-screenshot_directory = "/storage/emulated/0/RetroArch/screenshots"
-screenshots_in_content_dir = "false"
-settings_show_accessibility = "true"
-settings_show_achievements = "true"
-settings_show_ai_service = "true"
-settings_show_audio = "true"
-settings_show_configuration = "true"
-settings_show_core = "true"
-settings_show_directory = "true"
-settings_show_drivers = "true"
-settings_show_file_browser = "true"
-settings_show_frame_throttle = "true"
-settings_show_input = "true"
-settings_show_latency = "true"
-settings_show_logging = "true"
-settings_show_network = "true"
-settings_show_onscreen_display = "true"
-settings_show_playlists = "true"
-settings_show_power_management = "true"
-settings_show_recording = "true"
-settings_show_saving = "true"
-settings_show_user = "true"
-settings_show_user_interface = "true"
-settings_show_video = "true"
-show_hidden_files = "false"
-slowmotion_ratio = "3.000000"
-soft_filter_enable = "false"
-soft_filter_index = "0"
-sort_savefiles_by_content_enable = "false"
-sort_savefiles_enable = "false"
-sort_savestates_by_content_enable = "false"
-sort_savestates_enable = "false"
-sort_screenshots_by_content_enable = "false"
-state_slot = "0"
-statistics_show = "false"
-suspend_screensaver_enable = "true"
-sustained_performance_mode = "false"
-system_directory = "/storage/emulated/0/RetroArch/system"
-systemfiles_in_content_dir = "false"
-threaded_data_runloop_enable = "true"
-thumbnails_directory = "/storage/emulated/0/RetroArch/thumbnails"
-twitch_stream_key = ""
-ui_companion_enable = "false"
-ui_companion_start_on_boot = "true"
-ui_companion_toggle = "false"
-ui_menubar_enable = "true"
-use_last_start_directory = "false"
-vibrate_on_keypress = "true"
-video_adaptive_vsync = "false"
-video_allow_rotate = "true"
-video_aspect_ratio = "1.333300"
-video_aspect_ratio_auto = "false"
-video_autoswitch_refresh_rate = "0"
-video_black_frame_insertion = "0"
-video_context_driver = ""
-video_crop_overscan = "true"
-video_ctx_scaling = "false"
-video_disable_composition = "false"
-video_driver = "gl"
-video_filter = ""
-video_filter_dir = "/data/user/0/com.retroarch.aarch64/filters/video"
-video_font_enable = "true"
-video_font_path = ""
-video_font_size = "32.000000"
-video_force_aspect = "true"
-video_force_srgb_disable = "false"
-video_frame_delay = "0"
-video_frame_delay_auto = "false"
-video_fullscreen = "false"
-video_fullscreen_x = "0"
-video_fullscreen_y = "0"
-video_gpu_record = "false"
-video_gpu_screenshot = "true"
-video_hard_sync = "false"
-video_hard_sync_frames = "0"
-video_hdr_display_contrast = "5.000000"
-video_hdr_enable = "false"
-video_hdr_expand_gamut = "true"
-video_hdr_max_nits = "1000.000000"
-video_hdr_paper_white_nits = "200.000000"
-video_max_frame_latency = "1"
-video_max_swapchain_images = "3"
-video_message_color = "ffff00"
-video_message_pos_x = "0.050000"
-video_message_pos_y = "0.050000"
-video_monitor_index = "0"
-video_msg_bgcolor_blue = "0"
-video_msg_bgcolor_enable = "false"
-video_msg_bgcolor_green = "0"
-video_msg_bgcolor_opacity = "1.000000"
-video_msg_bgcolor_red = "0"
-video_notch_write_over_enable = "false"
-video_post_filter_record = "false"
-video_record_config = ""
-video_record_quality = "2"
-video_record_scale_factor = "1"
-video_record_threads = "2"
-video_refresh_rate = "60.000000"
-video_rotation = "0"
-video_scale = "3"
-video_scale_integer = "false"
-video_scale_integer_overscale = "false"
-video_shader_delay = "0"
-video_shader_dir = "/data/user/0/com.retroarch.aarch64/shaders"
-video_shader_enable = "false"
-video_shader_preset_save_reference_enable = "true"
-video_shader_remember_last_dir = "false"
-video_shader_watch_files = "false"
-video_shared_context = "false"
-video_smooth = "false"
-video_stream_config = ""
-video_stream_port = "56400"
-video_stream_quality = "11"
-video_stream_scale_factor = "1"
-video_stream_url = ""
-video_swap_interval = "1"
-video_threaded = "false"
-video_vsync = "true"
-video_waitable_swapchains = "true"
-video_window_auto_height_max = "1080"
-video_window_auto_width_max = "1920"
-video_window_custom_size_enable = "false"
-video_window_opacity = "100"
-video_window_save_positions = "false"
-video_window_show_decorations = "true"
-video_windowed_fullscreen = "true"
-video_windowed_position_height = "720"
-video_windowed_position_width = "1280"
-video_windowed_position_x = "0"
-video_windowed_position_y = "0"
-vrr_runloop_enable = "false"
-vulkan_gpu_index = "0"
-wifi_driver = "null"
-wifi_enabled = "true"
-xmb_font = ""
-youtube_stream_key = ""

+ 2 - 0
app/src/main/cpp/runloop.c

@@ -225,7 +225,9 @@
 #include "state_manager.h"
 #endif
 #include "tasks/task_content.h"
+#ifdef HAVE_FILE_TRANSFER
 #include "tasks/task_file_transfer.h"
+#endif
 #include "tasks/task_powerstate.h"
 #include "tasks/tasks_internal.h"
 #include "performance_counters.h"

+ 0 - 14
app/src/main/cpp/sync.sh

@@ -1,14 +0,0 @@
-# !/bin/bash
-
-current_directory=$(pwd)
-
-echo "当前目录:$current_directory" 
-while IFS= read -r file_path; do
-    if [ -e "$current_directory/$filename" ]; then
-        echo "文件存在!"
-    else
-        echo "文件不存在!"
-    fi
-done < "cmake-build-debug/deps.txt"
-
-

+ 5 - 0
app/src/main/cpp/tasks/task_autodetect.c

@@ -438,6 +438,11 @@ static void cb_input_autoconfigure_connect(
    if (autoconfig_handle->device_info.autoconfigured)
       input_config_set_autoconfig_binds(port,
             autoconfig_handle->autoconfig_file);
+
+   for (int i = 0; i < RARCH_FIRST_CUSTOM_BIND; ++i) {
+      RARCH_LOG("[Input]: valid %d", input_autoconf_binds[port][i].valid);
+      RARCH_LOG("[Input]: joykey %d", input_autoconf_binds[port][i].joykey);
+   }
 }
 
 static void input_autoconfigure_connect_handler(retro_task_t *task)

+ 0 - 131
app/src/main/cpp/tasks/task_file_transfer.c

@@ -1,131 +0,0 @@
-/*  RetroArch - A frontend for libretro.
- *  Copyright (C) 2011-2017 - Daniel De Matteis
- *
- *  RetroArch is free software: you can redistribute it and/or modify it under the terms
- *  of the GNU General Public License as published by the Free Software Found-
- *  ation, either version 3 of the License, or (at your option) any later version.
- *
- *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- *  PURPOSE.  See the GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along with RetroArch.
- *  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <string.h>
-#include <file/nbio.h>
-#include <compat/strl.h>
-#include <retro_miscellaneous.h>
-
-#include <string/stdstring.h>
-
-#ifdef HAVE_AUDIOMIXER
-#include "task_audio_mixer.h"
-#endif
-#include "task_file_transfer.h"
-#include "tasks_internal.h"
-
-bool task_image_load_handler(retro_task_t *task);
-
-static int task_file_transfer_iterate_transfer(nbio_handle_t *nbio)
-{
-   size_t i;
-
-   nbio->pos_increment = 5;
-
-   if (nbio->is_finished)
-      return 0;
-
-   for (i = 0; i < nbio->pos_increment; i++)
-   {
-      if (nbio_iterate(nbio->handle))
-         return -1;
-   }
-
-   return 0;
-}
-
-static int task_file_transfer_iterate_parse(nbio_handle_t *nbio)
-{
-   if (nbio->cb)
-   {
-      int len = 0;
-      if (nbio->cb(nbio, len) == -1)
-         return -1;
-   }
-
-   return 0;
-}
-
-void task_file_load_handler(retro_task_t *task)
-{
-   nbio_handle_t         *nbio  = (nbio_handle_t*)task->state;
-
-   if (nbio)
-   {
-      switch (nbio->status)
-      {
-         case NBIO_STATUS_INIT:
-            if (nbio && !string_is_empty(nbio->path))
-            {
-               struct nbio_t *handle = (struct nbio_t*)nbio_open(nbio->path, NBIO_READ);
-
-               if (handle)
-               {
-                  nbio->handle       = handle;
-                  nbio->status       = NBIO_STATUS_TRANSFER;
-
-                  nbio_begin_read(handle);
-                  return;
-               }
-
-               task_set_cancelled(task, true);
-            }
-            break;
-         case NBIO_STATUS_TRANSFER_PARSE:
-            if (!nbio || task_file_transfer_iterate_parse(nbio) == -1)
-               task_set_cancelled(task, true);
-            nbio->status = NBIO_STATUS_TRANSFER_FINISHED;
-            break;
-         case NBIO_STATUS_TRANSFER:
-            if (!nbio || task_file_transfer_iterate_transfer(nbio) == -1)
-               nbio->status = NBIO_STATUS_TRANSFER_PARSE;
-            break;
-         case NBIO_STATUS_TRANSFER_FINISHED:
-            break;
-      }
-
-      switch (nbio->type)
-      {
-         case NBIO_TYPE_PNG:
-         case NBIO_TYPE_JPEG:
-         case NBIO_TYPE_TGA:
-         case NBIO_TYPE_BMP:
-            if (!task_image_load_handler(task))
-               task_set_finished(task, true);
-            break;
-         case NBIO_TYPE_MP3:
-         case NBIO_TYPE_FLAC:
-         case NBIO_TYPE_OGG:
-         case NBIO_TYPE_MOD:
-         case NBIO_TYPE_WAV:
-#ifdef HAVE_AUDIOMIXER
-            if (!task_audio_mixer_load_handler(task))
-               task_set_finished(task, true);
-#endif
-            break;
-         case NBIO_TYPE_NONE:
-         default:
-            if (nbio->is_finished)
-               task_set_finished(task, true);
-            break;
-      }
-   }
-
-   if (task_get_cancelled(task))
-   {
-      task_set_error(task, strldup("Task canceled.", sizeof("Task canceled.")));
-      task_set_finished(task, true);
-   }
-}

+ 0 - 86
app/src/main/cpp/tasks/task_file_transfer.h

@@ -1,86 +0,0 @@
-/*  RetroArch - A frontend for libretro.
- *  Copyright (C) 2011-2017 - Daniel De Matteis
- *
- *  RetroArch is free software: you can redistribute it and/or modify it under the terms
- *  of the GNU General Public License as published by the Free Software Found-
- *  ation, either version 3 of the License, or (at your option) any later version.
- *
- *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- *  PURPOSE.  See the GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along with RetroArch.
- *  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef TASKS_FILE_TRANSFER_H
-#define TASKS_FILE_TRANSFER_H
-
-#include <boolean.h>
-#include <retro_common_api.h>
-#include <retro_miscellaneous.h>
-
-#include <queues/task_queue.h>
-
-#include "../msg_hash.h"
-
-RETRO_BEGIN_DECLS
-
-enum nbio_status_enum
-{
-   NBIO_STATUS_INIT = 0,
-   NBIO_STATUS_TRANSFER,
-   NBIO_STATUS_TRANSFER_PARSE,
-   NBIO_STATUS_TRANSFER_FINISHED
-};
-
-enum nbio_type
-{
-   NBIO_TYPE_NONE = 0,
-   NBIO_TYPE_JPEG,
-   NBIO_TYPE_PNG,
-   NBIO_TYPE_TGA,
-   NBIO_TYPE_BMP,
-   NBIO_TYPE_OGG,
-   NBIO_TYPE_FLAC,
-   NBIO_TYPE_MP3,
-   NBIO_TYPE_MOD,
-   NBIO_TYPE_WAV
-};
-
-enum nbio_status_flags
-{
-   NBIO_FLAG_NONE = 0,
-   NBIO_FLAG_IMAGE_SUPPORTS_RGBA
-};
-
-typedef int (*transfer_cb_t)(void *data, size_t len);
-
-typedef struct nbio_handle
-{
-   void *data;
-   char *path;
-   struct nbio_t *handle;
-   transfer_cb_t  cb;
-
-   unsigned status;
-   unsigned pos_increment;
-   uint32_t status_flags;
-
-   enum nbio_type type;
-   bool is_finished;
-} nbio_handle_t;
-
-typedef struct
-{
-   void *user_data;
-   enum msg_hash_enums enum_idx;
-   char path[PATH_MAX_LENGTH];
-} file_transfer_t;
-
-void* task_push_http_transfer_file(const char* url, bool mute, const char* type,
-      retro_task_callback_t cb, file_transfer_t* transfer_data);
-
-RETRO_END_DECLS
-
-#endif

+ 0 - 471
app/src/main/cpp/tasks/task_image.c

@@ -1,471 +0,0 @@
-/*  RetroArch - A frontend for libretro.
- *  Copyright (C) 2011-2017 - Daniel De Matteis
- *
- *  RetroArch is free software: you can redistribute it and/or modify it under the terms
- *  of the GNU General Public License as published by the Free Software Found-
- *  ation, either version 3 of the License, or (at your option) any later version.
- *
- *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- *  PURPOSE.  See the GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along with RetroArch.
- *  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <file/nbio.h>
-#include <formats/image.h>
-#include <compat/strl.h>
-#include <string/stdstring.h>
-#include <retro_miscellaneous.h>
-#include <features/features_cpu.h>
-
-#include "task_file_transfer.h"
-#include "tasks_internal.h"
-
-#include "../configuration.h"
-
-enum image_status_enum
-{
-   IMAGE_STATUS_WAIT = 0,
-   IMAGE_STATUS_TRANSFER,
-   IMAGE_STATUS_TRANSFER_PARSE,
-   IMAGE_STATUS_PROCESS_TRANSFER,
-   IMAGE_STATUS_PROCESS_TRANSFER_PARSE
-};
-
-enum image_flags_enum
-{
-   IMAGE_FLAG_IS_BLOCKING                = (1 << 0),
-   IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING  = (1 << 1),
-   IMAGE_FLAG_IS_FINISHED                = (1 << 2)
-};
-
-struct nbio_image_handle
-{
-   void *handle;
-   transfer_cb_t  cb;
-   struct texture_image ti; /* ptr alignment */
-   size_t size;
-   int processing_final_state;
-   unsigned frame_duration;
-   unsigned upscale_threshold;
-   enum image_type_enum type;
-   enum image_status_enum status;
-   uint8_t flags;
-};
-
-static int cb_image_upload_generic(void *data, size_t len)
-{
-   unsigned r_shift, g_shift, b_shift, a_shift;
-   nbio_handle_t             *nbio = (nbio_handle_t*)data;
-   struct nbio_image_handle *image = (struct nbio_image_handle*)nbio->data;
-
-   if (!image)
-      return -1;
-
-   switch (image->processing_final_state)
-   {
-      case IMAGE_PROCESS_ERROR:
-      case IMAGE_PROCESS_ERROR_END:
-         return -1;
-      default:
-         break;
-   }
-
-   image_texture_set_color_shifts(&r_shift, &g_shift, &b_shift,
-         &a_shift, &image->ti);
-
-   image_texture_color_convert(r_shift, g_shift, b_shift,
-         a_shift, &image->ti);
-
-   image->flags                   &= ~IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING;
-   image->flags                   |=  IMAGE_FLAG_IS_BLOCKING;
-   image->flags                   |=  IMAGE_FLAG_IS_FINISHED;
-   nbio->is_finished                        = true;
-
-   return 0;
-}
-
-static int task_image_process(
-      struct nbio_image_handle *image,
-      unsigned *width,
-      unsigned *height)
-{
-   int retval;
-
-   if (!image_transfer_is_valid(image->handle, image->type))
-      return IMAGE_PROCESS_ERROR;
-
-   if ((retval = image_transfer_process(
-         image->handle,
-         image->type,
-         &image->ti.pixels, image->size, width, height)) == IMAGE_PROCESS_ERROR)
-      return IMAGE_PROCESS_ERROR;
-
-   image->ti.width  = *width;
-   image->ti.height = *height;
-
-   return retval;
-}
-
-static int cb_image_thumbnail(void *data, size_t len)
-{
-   unsigned width                   = 0;
-   unsigned height                  = 0;
-   nbio_handle_t        *nbio       = (nbio_handle_t*)data;
-   struct nbio_image_handle *image  = (struct nbio_image_handle*)nbio->data;
-   int retval                       = image ? task_image_process(image, &width, &height) : IMAGE_PROCESS_ERROR;
-
-   if ((retval == IMAGE_PROCESS_ERROR)    ||
-       (retval == IMAGE_PROCESS_ERROR_END)
-      )
-      return -1;
-
-   if (retval != IMAGE_PROCESS_END)
-      image->flags                 |=  IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING;
-   else
-      image->flags                 &= ~IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING;
-   if (retval == IMAGE_PROCESS_END)
-      image->flags                 |=  IMAGE_FLAG_IS_FINISHED;
-   else
-      image->flags                 &= ~IMAGE_FLAG_IS_FINISHED;
-   image->cb                        = &cb_image_upload_generic;
-
-   return 0;
-}
-
-static int task_image_iterate_process_transfer(struct nbio_image_handle *image)
-{
-   int retval                      = 0;
-   unsigned width                  = 0;
-   unsigned height                 = 0;
-   retro_time_t start_time         = cpu_features_get_time_usec();
-
-   do
-   {
-      if ((retval = task_image_process(image, &width, &height)) != IMAGE_PROCESS_NEXT)
-         break;
-   }while (cpu_features_get_time_usec() - start_time 
-         < image->frame_duration);
-
-   if (retval == IMAGE_PROCESS_NEXT)
-      return 0;
-
-   image->processing_final_state = retval;
-   return -1;
-}
-
-static void task_image_cleanup(nbio_handle_t *nbio)
-{
-   struct nbio_image_handle *image = (struct nbio_image_handle*)nbio->data;
-
-   if (image)
-   {
-      image_transfer_free(image->handle, image->type);
-
-      image->handle  = NULL;
-      image->cb      = NULL;
-   }
-   if (!string_is_empty(nbio->path))
-      free(nbio->path);
-   if (nbio->data)
-      free(nbio->data);
-   nbio_free(nbio->handle);
-   nbio->path        = NULL;
-   nbio->data        = NULL;
-   nbio->handle      = NULL;
-}
-
-static void task_image_load_free(retro_task_t *task)
-{
-   nbio_handle_t *nbio  = task ? (nbio_handle_t*)task->state : NULL;
-
-   if (nbio)
-   {
-      task_image_cleanup(nbio);
-      free(nbio);
-   }
-}
-
-static int cb_nbio_image_thumbnail(void *data, size_t len)
-{
-   void *ptr                       = NULL;
-   nbio_handle_t *nbio             = (nbio_handle_t*)data;
-   struct nbio_image_handle *image = nbio  ? (struct nbio_image_handle*)nbio->data : NULL;
-   void *handle                    = image ? image_transfer_new(image->type)       : NULL;
-   settings_t *settings            = config_get_ptr();
-   float refresh_rate              = 0.0f;
-
-   if (!handle)
-      return -1;
-
-   image->status                   = IMAGE_STATUS_TRANSFER;
-   image->handle                   = handle;
-   image->cb                       = &cb_image_thumbnail;
-
-   ptr                             = nbio_get_ptr(nbio->handle, &len);
-
-   image_transfer_set_buffer_ptr(image->handle, image->type, ptr, len);
-
-   /* Set image size */
-   image->size                     = len;
-
-   /* Set task iteration duration */
-   if (settings)
-      refresh_rate = settings->floats.video_refresh_rate;
-
-   if (refresh_rate <= 0.0f)
-      refresh_rate = 60.0f;
-   image->frame_duration = (unsigned)((1.0 / refresh_rate) * 1000000.0f);
-
-   if (!image_transfer_start(image->handle, image->type))
-   {
-      task_image_cleanup(nbio);
-      return -1;
-   }
-
-   image->flags                   &= ~IMAGE_FLAG_IS_BLOCKING;
-   image->flags                   &= ~IMAGE_FLAG_IS_FINISHED;
-   nbio->is_finished               = true;
-
-   return 0;
-}
-
-static bool upscale_image(
-      unsigned scale_factor,
-      struct texture_image *image_src,
-      struct texture_image *image_dst)
-{
-   uint32_t x_ratio, y_ratio;
-   unsigned y_dst;
-
-   /* Sanity check */
-   if ((scale_factor < 1) || !image_src || !image_dst)
-      return false;
-
-   if (!image_src->pixels || (image_src->width < 1) || (image_src->height < 1))
-      return false;
-
-   /* Get output dimensions */
-   image_dst->width  = image_src->width * scale_factor;
-   image_dst->height = image_src->height * scale_factor;
-
-   /* Allocate pixel buffer */
-   if (!(image_dst->pixels = (uint32_t*)calloc(image_dst->width * image_dst->height, sizeof(uint32_t))))
-      return false;
-
-   /* Perform nearest neighbour resampling */
-   x_ratio = ((image_src->width  << 16) / image_dst->width);
-   y_ratio = ((image_src->height << 16) / image_dst->height);
-
-   for (y_dst = 0; y_dst < image_dst->height; y_dst++)
-   {
-      unsigned x_dst;
-      unsigned y_src = (y_dst * y_ratio) >> 16;
-      for (x_dst = 0; x_dst < image_dst->width; x_dst++)
-      {
-         unsigned x_src = (x_dst * x_ratio) >> 16;
-         image_dst->pixels[(y_dst * image_dst->width) + x_dst] = image_src->pixels[(y_src * image_src->width) + x_src];
-      }
-   }
-
-   return true;
-}
-
-bool task_image_load_handler(retro_task_t *task)
-{
-   nbio_handle_t            *nbio  = (nbio_handle_t*)task->state;
-   struct nbio_image_handle *image = (struct nbio_image_handle*)nbio->data;
-
-   if (image)
-   {
-      switch (image->status)
-      {
-         case IMAGE_STATUS_WAIT:
-            return true;
-         case IMAGE_STATUS_PROCESS_TRANSFER:
-            if (task_image_iterate_process_transfer(image) == -1)
-               image->status = IMAGE_STATUS_PROCESS_TRANSFER_PARSE;
-            break;
-         case IMAGE_STATUS_TRANSFER_PARSE:
-            if (image->handle && image->cb)
-            {
-               size_t len = 0;
-               if (image->cb(nbio, len) == -1)
-                  return false;
-            }
-            if (image->flags & IMAGE_FLAG_IS_BLOCKING_ON_PROCESSING)
-               image->status = IMAGE_STATUS_PROCESS_TRANSFER;
-            break;
-         case IMAGE_STATUS_TRANSFER:
-            if (     !(image->flags & IMAGE_FLAG_IS_BLOCKING) 
-                  && !(image->flags & IMAGE_FLAG_IS_FINISHED))
-            {
-               retro_time_t start_time = cpu_features_get_time_usec();
-               do
-               {
-                  if (!image_transfer_iterate(image->handle, image->type))
-                  {
-                     image->status = IMAGE_STATUS_TRANSFER_PARSE;
-                     break;
-                  }
-               }while (cpu_features_get_time_usec() - start_time 
-                     < image->frame_duration);
-            }
-            break;
-         case IMAGE_STATUS_PROCESS_TRANSFER_PARSE:
-            if (image->handle && image->cb)
-            {
-               size_t len = 0;
-               if (image->cb(nbio, len) == -1)
-                  return false;
-            }
-            if (!(image->flags & IMAGE_FLAG_IS_FINISHED))
-               break;
-      }
-   }
-
-   if (     nbio->is_finished
-         && (image && (image->flags & IMAGE_FLAG_IS_FINISHED))
-         && (!task_get_cancelled(task)))
-   {
-      struct texture_image *img = (struct texture_image*)malloc(sizeof(struct texture_image));
-
-      if (img)
-      {
-         /* Upscale image, if required */
-         if (image->upscale_threshold > 0)
-         {
-            if (((image->ti.width > 0) && (image->ti.height > 0)) &&
-                ((image->ti.width  < image->upscale_threshold) ||
-                 (image->ti.height < image->upscale_threshold)))
-            {
-               unsigned min_size                  = (image->ti.width < image->ti.height) ?
-                                                      image->ti.width : image->ti.height;
-               float scale_factor                 = (float)image->upscale_threshold /
-                                                      (float)min_size;
-               unsigned scale_factor_int          = (unsigned)scale_factor;
-               struct texture_image img_resampled = {
-                  NULL,
-                  0,
-                  0,
-                  false
-               };
-
-               if (scale_factor - (float)scale_factor_int > 0.0f)
-                  scale_factor_int += 1;
-
-               if (upscale_image(scale_factor_int, &image->ti, &img_resampled))
-               {
-                  image->ti.width  = img_resampled.width;
-                  image->ti.height = img_resampled.height;
-
-                  if (image->ti.pixels)
-                     free(image->ti.pixels);
-                  image->ti.pixels = img_resampled.pixels;
-               }
-            }
-         }
-
-         img->width         = image->ti.width;
-         img->height        = image->ti.height;
-         img->pixels        = image->ti.pixels;
-         img->supports_rgba = image->ti.supports_rgba;
-      }
-
-      task_set_data(task, img);
-
-      return false;
-   }
-
-   return true;
-}
-
-bool task_push_image_load(const char *fullpath, 
-      bool supports_rgba, unsigned upscale_threshold,
-      retro_task_callback_t cb, void *user_data)
-{
-   nbio_handle_t             *nbio   = NULL;
-   struct nbio_image_handle   *image = NULL;
-   retro_task_t                   *t = task_init();
-
-   if (!t)
-      return false;
-
-   if (!(nbio = (nbio_handle_t*)malloc(sizeof(*nbio))))
-   {
-      free(t);
-      return false;
-   }
-
-   nbio->type          = NBIO_TYPE_NONE;
-   nbio->is_finished   = false;
-   nbio->status        = NBIO_STATUS_INIT;
-   nbio->pos_increment = 0;
-   nbio->status_flags  = 0;
-   nbio->data          = NULL;
-   nbio->handle        = NULL;
-   nbio->cb            = &cb_nbio_image_thumbnail;
-
-   if (supports_rgba)
-      BIT32_SET(nbio->status_flags, NBIO_FLAG_IMAGE_SUPPORTS_RGBA);
-
-   if (!(image = (struct nbio_image_handle*)malloc(sizeof(*image))))
-   {
-      free(nbio);
-      free(t);
-      return false;
-   }
-
-   nbio->path                        = strdup(fullpath);
-
-   image->type                       = image_texture_get_type(fullpath);
-   image->status                     = IMAGE_STATUS_WAIT;
-   image->processing_final_state     = 0;
-   image->frame_duration             = 0;
-   image->size                       = 0;
-   image->upscale_threshold          = upscale_threshold;
-   image->handle                     = NULL;
-
-   image->ti.width                   = 0;
-   image->ti.height                  = 0;
-   image->ti.pixels                  = NULL;
-   /* TODO/FIXME - shouldn't we set this ? */
-   image->ti.supports_rgba           = false;
-
-   switch (image->type)
-   {
-      case IMAGE_TYPE_PNG:
-         nbio->type = NBIO_TYPE_PNG;
-         break;
-      case IMAGE_TYPE_JPEG:
-         nbio->type = NBIO_TYPE_JPEG;
-         break;
-      case IMAGE_TYPE_BMP:
-         nbio->type = NBIO_TYPE_BMP;
-         break;
-      case IMAGE_TYPE_TGA:
-         nbio->type = NBIO_TYPE_TGA;
-         break;
-      default:
-         nbio->type = NBIO_TYPE_NONE;
-         break;
-   }
-
-   nbio->data          = (struct nbio_image_handle*)image;
-
-   t->state           = nbio;
-   t->handler         = task_file_load_handler;
-   t->cleanup         = task_image_load_free;
-   t->callback        = cb;
-   t->user_data       = user_data;
-
-   task_queue_push(t);
-
-   return true;
-}

+ 0 - 254
app/src/main/cpp/tasks/task_menu_explore.c

@@ -1,254 +0,0 @@
-/*  RetroArch - A frontend for libretro.
- *  Copyright (C) 2010-2021 - Hans-Kristian Arntzen
- *  Copyright (C) 2011-2021 - Daniel De Matteis
- *  Copyright (C) 2019-2021 - James Leaver
- *
- *  RetroArch is free software: you can redistribute it and/or modify it under the terms
- *  of the GNU General Public License as published by the Free Software Found-
- *  ation, either version 3 of the License, or (at your option) any later version.
- *
- *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- *  PURPOSE.  See the GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along with RetroArch.
- *  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <string/stdstring.h>
-
-#include "tasks_internal.h"
-
-#include "../menu/menu_entries.h"
-#include "../menu/menu_driver.h"
-
-typedef struct menu_explore_init_handle
-{
-   explore_state_t *state;
-   char *directory_playlist;
-   char *directory_database;
-} menu_explore_init_handle_t;
-
-/*********************/
-/* Utility Functions */
-/*********************/
-
-static void free_menu_explore_init_handle(
-      menu_explore_init_handle_t *menu_explore)
-{
-   if (!menu_explore)
-      return;
-
-   if (menu_explore->directory_playlist)
-   {
-      free(menu_explore->directory_playlist);
-      menu_explore->directory_playlist = NULL;
-   }
-
-   if (menu_explore->directory_database)
-   {
-      free(menu_explore->directory_database);
-      menu_explore->directory_database = NULL;
-   }
-
-   if (menu_explore->state)
-   {
-      menu_explore_free_state(menu_explore->state);
-      free(menu_explore->state);
-      menu_explore->state = NULL;
-   }
-
-   free(menu_explore);
-   menu_explore = NULL;
-}
-
-static void cb_task_menu_explore_init(
-      retro_task_t *task, void *task_data,
-      void *user_data, const char *err)
-{
-   menu_explore_init_handle_t *menu_explore = NULL;
-   unsigned menu_type                       = 0;
-
-   if (!task)
-      return;
-
-   menu_explore = (menu_explore_init_handle_t*)task->state;
-
-   if (!menu_explore)
-      return;
-
-   /* Assign global menu explore state object */
-   menu_explore_set_state(menu_explore->state);
-   menu_explore->state = NULL;
-
-   /* If the explore menu is currently displayed,
-    * it must be refreshed */
-   menu_entries_get_last_stack(NULL, NULL, &menu_type, NULL, NULL);
-
-   /* check if we are opening a saved view from the horizontal/tabs menu */
-   if (menu_type == MENU_SETTING_HORIZONTAL_MENU)
-   {
-      size_t selection = menu_driver_list_get_selection();
-      size_t size      = menu_driver_list_get_size(MENU_LIST_TABS);
-      if (selection > 0 && size > 0)
-      {
-         menu_ctx_list_t horizontal;
-         horizontal.type = MENU_LIST_HORIZONTAL;
-         horizontal.idx  = selection - (size + 1);
-         if (menu_driver_list_get_entry(&horizontal))
-            menu_type = ((struct item_file*)horizontal.entry)->type;
-      }
-   }
-
-   if (menu_type == MENU_EXPLORE_TAB)
-   {
-      struct menu_state *menu_st = menu_state_get_ptr();
-      menu_st->flags            |=  MENU_ST_FLAG_ENTRIES_NEED_REFRESH
-                                 |  MENU_ST_FLAG_PREVENT_POPULATE;
-   }
-}
-
-static void task_menu_explore_init_free(retro_task_t *task)
-{
-   menu_explore_init_handle_t *menu_explore = NULL;
-
-   if (!task)
-      return;
-
-   menu_explore = (menu_explore_init_handle_t*)task->state;
-
-   free_menu_explore_init_handle(menu_explore);
-}
-
-/*******************************/
-/* Explore Menu Initialisation */
-/*******************************/
-
-static void task_menu_explore_init_handler(retro_task_t *task)
-{
-   menu_explore_init_handle_t *menu_explore = NULL;
-
-   if (!task)
-      goto task_finished;
-
-   menu_explore = (menu_explore_init_handle_t*)task->state;
-
-   if (!menu_explore)
-      goto task_finished;
-
-   if (task_get_cancelled(task))
-      goto task_finished;
-
-   /* TODO/FIXME: It could be beneficial to
-    * initialise the explore menu iteratively,
-    * but this would require a non-trivial rewrite
-    * of the menu_explore code. For now, we will
-    * do it in a single shot (the most important
-    * consideration here is to place this
-    * initialisation on a background thread) */
-   menu_explore->state = menu_explore_build_list(
-         menu_explore->directory_playlist,
-         menu_explore->directory_database);
-
-   task_set_progress(task, 100);
-
-task_finished:
-
-   if (task)
-      task_set_finished(task, true);
-}
-
-static bool task_menu_explore_init_finder(
-      retro_task_t *task, void *user_data)
-{
-   if (!task)
-      return false;
-
-   if (task->handler == task_menu_explore_init_handler)
-      return true;
-
-   return false;
-}
-
-bool task_push_menu_explore_init(const char *directory_playlist,
-      const char *directory_database)
-{
-   task_finder_data_t find_data;
-   retro_task_t *task                       = NULL;
-   menu_explore_init_handle_t *menu_explore = NULL;
-
-   if (string_is_empty(directory_playlist) ||
-       string_is_empty(directory_database))
-      goto error;
-
-   task         = task_init();
-   menu_explore = (menu_explore_init_handle_t*)calloc(1,
-         sizeof(menu_explore_init_handle_t));
-
-   if (!task || !menu_explore)
-      goto error;
-
-   /* Explore menu is singular - cannot perform
-    * multiple initialisations simultaneously */
-   find_data.func     = task_menu_explore_init_finder;
-   find_data.userdata = NULL;
-
-   if (task_queue_find(&find_data))
-      goto error;
-
-   /* Configure handle */
-   menu_explore->state              = NULL;
-   menu_explore->directory_playlist = strdup(directory_playlist);
-   menu_explore->directory_database = strdup(directory_database);
-
-   /* Configure task
-    * > Note: This is silent task, with no title
-    *   and no user notification messages */
-   task->handler  = task_menu_explore_init_handler;
-   task->state    = menu_explore;
-   task->mute     = true;
-   task->title    = NULL;
-   task->progress = 0;
-   task->callback = cb_task_menu_explore_init;
-   task->cleanup  = task_menu_explore_init_free;
-
-   task_queue_push(task);
-
-   return true;
-
-error:
-
-   if (task)
-   {
-      free(task);
-      task = NULL;
-   }
-
-   free_menu_explore_init_handle(menu_explore);
-   menu_explore = NULL;
-
-   return false;
-}
-
-bool menu_explore_init_in_progress(void *data)
-{
-   task_finder_data_t find_data;
-
-   find_data.func     = task_menu_explore_init_finder;
-   find_data.userdata = NULL;
-
-   if (task_queue_find(&find_data))
-      return true;
-
-   return false;
-}
-
-void menu_explore_wait_for_init_task(void)
-{
-   task_queue_wait(menu_explore_init_in_progress, NULL);
-}

+ 0 - 484
app/src/main/cpp/tasks/task_movie.c

@@ -1,484 +0,0 @@
-/*  RetroArch - A frontend for libretro.
- *  Copyright (C) 2011-2017 - Daniel De Matteis
- *  Copyright (C) 2016-2019 - Brad Parker
- *
- *  RetroArch is free software: you can redistribute it and/or modify it under the terms
- *  of the GNU General Public License as published by the Free Software Found-
- *  ation, either version 3 of the License, or (at your option) any later version.
- *
- *  RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- *  PURPOSE.  See the GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License along with RetroArch.
- *  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_BSV_MOVIE
-#include <stdint.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <string.h>
-#include <time.h>
-#include <time/rtime.h>
-#include <compat/strl.h>
-#include <file/file_path.h>
-#include <streams/file_stream.h>
-
-#ifdef _WIN32
-#include <direct.h>
-#else
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "../config.h"
-#endif
-
-#include "../msg_hash.h"
-#include "../verbosity.h"
-#include "../core.h"
-#include "../content.h"
-#include "../runloop.h"
-#include "tasks_internal.h"
-#include "../input/input_driver.h"
-
-#define MAGIC_INDEX        0
-#define VERSION_INDEX      1
-#define CRC_INDEX          2
-#define STATE_SIZE_INDEX   3
-/* Identifier is int64_t, so takes up two slots */
-#define IDENTIFIER_INDEX   4
-#define HEADER_LEN         6
-
-#define REPLAY_FORMAT_VERSION 0
-#define REPLAY_MAGIC       0x42535632
-
-/* Forward declaration */
-bool content_load_state_in_progress(void* data);
-
-/* Private functions */
-
-static bool bsv_movie_init_playback(
-      bsv_movie_t *handle, const char *path)
-{
-   int64_t *identifier_loc;
-   uint32_t state_size         = 0;
-   uint32_t header[HEADER_LEN] = {0};
-   intfstream_t *file          = intfstream_open_file(path,
-         RETRO_VFS_FILE_ACCESS_READ,
-         RETRO_VFS_FILE_ACCESS_HINT_NONE);
-
-   if (!file)
-   {
-      RARCH_ERR("Could not open replay file for playback, path : \"%s\".\n", path);
-      return false;
-   }
-
-   handle->file              = file;
-   handle->playback          = true;
-
-   intfstream_read(handle->file, header, sizeof(uint32_t) * HEADER_LEN);
-   if (swap_if_big32(header[MAGIC_INDEX]) != REPLAY_MAGIC)
-   {
-      RARCH_ERR("%s\n", msg_hash_to_str(MSG_MOVIE_FILE_IS_NOT_A_VALID_REPLAY_FILE));
-      return false;
-   }
-#if 0
-   if (swap_if_big32(header[VERSION_INDEX]) > REPLAY_FORMAT_VERSION)
-   {
-      RARCH_ERR("%s\n", msg_hash_to_str(MSG_MOVIE_FILE_IS_NOT_A_VALID_REPLAY_FILE));
-      return false;
-   }
-#endif
-
-   state_size         = swap_if_big32(header[STATE_SIZE_INDEX]);
-   identifier_loc     = (int64_t *)(header+IDENTIFIER_INDEX);
-   handle->identifier = swap_if_big64(*identifier_loc);
-
-#if 0
-   RARCH_ERR("----- debug %u -----\n", header[0]);
-   RARCH_ERR("----- debug %u -----\n", header[1]);
-   RARCH_ERR("----- debug %u -----\n", header[2]);
-   RARCH_ERR("----- debug %u -----\n", header[3]);
-   RARCH_ERR("----- debug %u -----\n", header[4]);
-   RARCH_ERR("----- debug %u -----\n", header[5]);
-#endif
-
-   if (state_size)
-   {
-      retro_ctx_size_info_t info;
-      retro_ctx_serialize_info_t serial_info;
-      uint8_t *buf       = (uint8_t*)malloc(state_size);
-
-      if (!buf)
-         return false;
-
-      handle->state      = buf;
-      handle->state_size = state_size;
-      if (intfstream_read(handle->file,
-               handle->state, state_size) != state_size)
-      {
-         RARCH_ERR("%s\n", msg_hash_to_str(MSG_COULD_NOT_READ_STATE_FROM_MOVIE));
-         return false;
-      }
-      core_serialize_size( &info);
-      /* For cores like dosbox, the reported size is not always
-         correct. So we just give a warning if they don't match up. */
-      serial_info.data_const = handle->state;
-      serial_info.size       = state_size;
-      core_unserialize(&serial_info);
-      if (info.size != state_size)
-      {
-         RARCH_WARN("%s\n",
-               msg_hash_to_str(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION));
-      }
-   }
-
-   handle->min_file_pos = sizeof(header) + state_size;
-
-   return true;
-}
-
-static bool bsv_movie_init_record(
-      bsv_movie_t *handle, const char *path)
-{
-   retro_ctx_size_info_t info;
-   time_t t                     = time(NULL);
-   time_t time_lil              = swap_if_big64(t);
-   uint32_t state_size          = 0;
-   uint32_t content_crc         = 0;
-   uint32_t header[HEADER_LEN] = {0};
-   intfstream_t *file           = intfstream_open_file(path,
-         RETRO_VFS_FILE_ACCESS_WRITE | RETRO_VFS_FILE_ACCESS_READ,
-         RETRO_VFS_FILE_ACCESS_HINT_NONE);
-
-   if (!file)
-   {
-      RARCH_ERR("Could not open replay file for recording, path : \"%s\".\n", path);
-      return false;
-   }
-
-   handle->file             = file;
-
-   content_crc              = content_get_crc();
-
-   header[MAGIC_INDEX]      = swap_if_big32(REPLAY_MAGIC);
-   header[VERSION_INDEX]    = REPLAY_FORMAT_VERSION;
-   header[CRC_INDEX]        = swap_if_big32(content_crc);
-
-   core_serialize_size(&info);
-
-   state_size               = (unsigned)info.size;
-
-   header[STATE_SIZE_INDEX] = swap_if_big32(state_size);
-   handle->identifier = (int64_t)t;
-   *((int64_t *)(header+IDENTIFIER_INDEX)) = time_lil;
-   intfstream_write(handle->file, header, HEADER_LEN * sizeof(uint32_t));
-
-   handle->min_file_pos     = sizeof(header) + state_size;
-   handle->state_size       = state_size;
-
-   if (state_size)
-   {
-      retro_ctx_serialize_info_t serial_info;
-      uint8_t *st      = (uint8_t*)malloc(state_size);
-
-      if (!st)
-         return false;
-
-      handle->state    = st;
-
-      serial_info.data = handle->state;
-      serial_info.size = state_size;
-
-      core_serialize(&serial_info);
-
-      intfstream_write(handle->file,
-            handle->state, state_size);
-   }
-
-   return true;
-}
-
-void bsv_movie_free(bsv_movie_t *handle)
-{
-   intfstream_close(handle->file);
-   free(handle->file);
-
-   free(handle->state);
-   free(handle->frame_pos);
-   free(handle);
-}
-
-static bsv_movie_t *bsv_movie_init_internal(const char *path, enum rarch_movie_type type)
-{
-   size_t *frame_pos   = NULL;
-   bsv_movie_t *handle = (bsv_movie_t*)calloc(1, sizeof(*handle));
-
-   if (!handle)
-      return NULL;
-
-   if (type == RARCH_MOVIE_PLAYBACK)
-   {
-      if (!bsv_movie_init_playback(handle, path))
-         goto error;
-   }
-   else if (!bsv_movie_init_record(handle, path))
-      goto error;
-
-   /* Just pick something really large
-    * ~1 million frames rewind should do the trick. */
-   if (!(frame_pos = (size_t*)calloc((1 << 20), sizeof(size_t))))
-      goto error;
-
-   handle->frame_pos       = frame_pos;
-
-   handle->frame_pos[0]    = handle->min_file_pos;
-   handle->frame_mask      = (1 << 20) - 1;
-
-   return handle;
-
-error:
-   if (handle)
-      bsv_movie_free(handle);
-   return NULL;
-}
-
-static bool bsv_movie_start_record(input_driver_state_t * input_st, char *path)
-{
-   size_t _len;
-   char msg[8192];
-   bsv_movie_t *state                       = NULL;
-   const char *movie_rec_str                = NULL;
-
-   /* this should trigger a start recording task which on failure or
-      success prints a message and on success sets the
-      input_st->bsv_movie_state_handle. */
-   if (!(state = bsv_movie_init_internal(path, RARCH_MOVIE_RECORD)))
-   {
-      const char *movie_rec_fail_str        =
-         msg_hash_to_str(MSG_FAILED_TO_START_MOVIE_RECORD);
-      runloop_msg_queue_push(movie_rec_fail_str,
-            1, 180, true,
-            NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
-      RARCH_ERR("%s.\n", movie_rec_fail_str);
-      return false;
-   }
-
-   input_st->bsv_movie_state_handle         = state;
-   input_st->bsv_movie_state.flags         |= BSV_FLAG_MOVIE_RECORDING;
-   movie_rec_str                            = msg_hash_to_str(MSG_STARTING_MOVIE_RECORD_TO);
-   _len = strlcpy(msg, movie_rec_str, sizeof(msg));
-   snprintf(msg + _len, sizeof(msg) - _len, " \"%s\".", path);
-   runloop_msg_queue_push(msg, 2, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
-   RARCH_LOG("%s \"%s\".\n", movie_rec_str, path);
-
-   return true;
-}
-
-static bool bsv_movie_start_playback(input_driver_state_t *input_st, char *path)
-{
-   bsv_movie_t *state                       = NULL;
-   const char *starting_movie_str           = NULL;
-   /* This should trigger a start playback task which on failure or
-      success prints a message and on success sets the
-      input_st->bsv_movie_state_handle. */
-   if (!(state = bsv_movie_init_internal(path, RARCH_MOVIE_PLAYBACK)))
-   {
-      RARCH_ERR("%s: \"%s\".\n",
-            msg_hash_to_str(MSG_FAILED_TO_LOAD_MOVIE_FILE),
-            path);
-      return false;
-   }
-
-   input_st->bsv_movie_state_handle         = state;
-   input_st->bsv_movie_state.flags         |= BSV_FLAG_MOVIE_PLAYBACK;
-   starting_movie_str                       =
-      msg_hash_to_str(MSG_STARTING_MOVIE_PLAYBACK);
-
-   runloop_msg_queue_push(starting_movie_str,
-         2, 180, false,
-         NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
-   RARCH_LOG("%s.\n", starting_movie_str);
-
-   return true;
-}
-
-
-/* Task infrastructure (also private) */
-
-/* Future: replace stop functions with tasks that do the same. then
-   later we can replace the start_record/start_playback flags and
-   remove the entirety of input_driver_st bsv_state, which is only
-   needed due to mixing sync and async during initialization. */
-typedef struct bsv_state moviectl_task_state_t;
-
-static void task_moviectl_playback_handler(retro_task_t *task)
-{
-  /* trivial handler */
-  task_set_finished(task, true);
-  if (!task_get_error(task) && task_get_cancelled(task))
-    task_set_error(task, strdup("Task canceled"));
-
-  task_set_data(task, task->state);
-  task->state = NULL;
-  /* no need to free state here since I'm recycling it as data */
-}
-
-static void moviectl_start_playback_cb(retro_task_t *task,
-      void *task_data,
-      void *user_data, const char *error)
-{
-  struct bsv_state *state        = (struct bsv_state *)task_data;
-  input_driver_state_t *input_st = input_state_get_ptr();
-  input_st->bsv_movie_state      = *state;
-  bsv_movie_start_playback(input_st, state->movie_start_path);
-  free(state);
-}
-
-static void task_moviectl_record_handler(retro_task_t *task)
-{
-   /* Hang on until the state is loaded */
-   if (content_load_state_in_progress(NULL))
-      return;
-
-   /* trivial handler */
-   task_set_finished(task, true);
-   if (!task_get_error(task) && task_get_cancelled(task))
-      task_set_error(task, strdup("Task canceled"));
-
-   task_set_data(task, task->state);
-   task->state = NULL;
-   /* no need to free state here since I'm recycling it as data */
-}
-
-static void moviectl_start_record_cb(retro_task_t *task,
-      void *task_data,
-      void *user_data, const char *error)
-{
-  struct bsv_state *state        = (struct bsv_state *)task_data;
-  input_driver_state_t *input_st = input_state_get_ptr();
-  input_st->bsv_movie_state      = *state;
-  bsv_movie_start_record(input_st, state->movie_start_path);
-  free(state);
-}
-
-/* Public functions */
-
-/* In the future this should probably be a deferred task as well */
-bool movie_stop_playback(input_driver_state_t *input_st)
-{
-   const char *movie_playback_end_str = NULL;
-   /* Checks if movie is being played back. */
-   if (!(input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_PLAYBACK))
-      return false;
-   movie_playback_end_str = msg_hash_to_str(MSG_MOVIE_PLAYBACK_ENDED);
-   runloop_msg_queue_push(
-         movie_playback_end_str, 2, 180, false,
-         NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
-   RARCH_LOG("%s\n", movie_playback_end_str);
-
-   bsv_movie_deinit(input_st);
-
-   input_st->bsv_movie_state.flags &= ~(
-         BSV_FLAG_MOVIE_END
-         | BSV_FLAG_MOVIE_PLAYBACK);
-   return true;
-}
-/* in the future this should probably be a deferred task as well */
-bool movie_stop_record(input_driver_state_t *input_st)
-{
-   const char *movie_rec_stopped_str = msg_hash_to_str(MSG_MOVIE_RECORD_STOPPED);
-   if (!(input_st->bsv_movie_state_handle))
-      return false;
-   runloop_msg_queue_push(movie_rec_stopped_str,
-         2, 180, true,
-         NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
-   RARCH_LOG("%s\n", movie_rec_stopped_str);
-   bsv_movie_deinit(input_st);
-   input_st->bsv_movie_state.flags &= ~(
-         BSV_FLAG_MOVIE_END
-         | BSV_FLAG_MOVIE_RECORDING);
-   return true;
-
-}
-
-bool movie_stop(input_driver_state_t *input_st)
-{
-   if (input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_PLAYBACK)
-      return movie_stop_playback(input_st);
-   else if (input_st->bsv_movie_state.flags & BSV_FLAG_MOVIE_RECORDING)
-      return movie_stop_record(input_st);
-   if(input_st->bsv_movie_state_handle)
-      RARCH_ERR("Didn't really stop movie!\n");
-   return true;
-}
-
-bool movie_start_playback(input_driver_state_t *input_st, char *path)
-{
-  retro_task_t       *task      = task_init();
-  moviectl_task_state_t *state  = (moviectl_task_state_t *)calloc(1, sizeof(*state));
-  bool file_exists              = filestream_exists(path);
-
-  if (!task || !state || !file_exists)
-    goto error;
-
-  *state                        = input_st->bsv_movie_state;
-  strlcpy(state->movie_start_path, path, sizeof(state->movie_start_path));
-  task->type                    = TASK_TYPE_NONE;
-  task->state                   = state;
-  task->handler                 = task_moviectl_playback_handler;
-  task->callback                = moviectl_start_playback_cb;
-  task->title                   = strdup(msg_hash_to_str(MSG_STARTING_MOVIE_PLAYBACK));
-
-  if (task_queue_push(task))
-     return true;
-
-error:
-   if (state)
-      free(state);
-   if (task)
-      free(task);
-
-   return false;
-}
-
-bool movie_start_record(input_driver_state_t *input_st, char*path)
-{
-   size_t _len;
-   char msg[8192];
-   const char *movie_rec_str     = msg_hash_to_str(MSG_STARTING_MOVIE_RECORD_TO);
-   retro_task_t       *task      = task_init();
-   moviectl_task_state_t *state  = (moviectl_task_state_t *)calloc(1, sizeof(*state));
-
-   if (!task || !state)
-      goto error;
-
-   *state                        = input_st->bsv_movie_state;
-   strlcpy(state->movie_start_path, path, sizeof(state->movie_start_path));
-
-   _len                          = strlcpy(msg, movie_rec_str, sizeof(msg));
-   snprintf(msg + _len, sizeof(msg) - _len, " \"%s\".", path);
-
-   task->type                    = TASK_TYPE_NONE;
-   task->state                   = state;
-   task->handler                 = task_moviectl_record_handler;
-   task->callback                = moviectl_start_record_cb;
-
-   task->title                   = strdup(msg);
-
-   if (!task_queue_push(task))
-      goto error;
-
-   return true;
-
-error:
-   if (state)
-      free(state);
-   if (task)
-      free(task);
-
-   return false;
-}
-#endif

+ 6 - 0
app/src/main/cpp/tasks/tasks_internal.h

@@ -148,6 +148,7 @@ bool task_push_pl_thumbnail_download(
 
 /* Core backup/restore tasks */
 
+#ifdef HAVE_CORE_BACKUP
 /* NOTE 1: If CRC is set to 0, CRC of core_path file will
  * be calculated automatically
  * NOTE 2: If core_display_name is set to NULL, display
@@ -166,15 +167,18 @@ void *task_push_core_backup(
 bool task_push_core_restore(const char *backup_path,
       const char *dir_libretro,
       bool *core_loaded);
+#endif
 
 #ifdef HAVE_PLAYLIST
 bool task_push_pl_manager_reset_cores(const playlist_config_t *playlist_config);
 bool task_push_pl_manager_clean_playlist(const playlist_config_t *playlist_config);
 #endif
 
+#ifdef HAVE_FILE_TRANSFER
 bool task_push_image_load(const char *fullpath,
       bool supports_rgba, unsigned upscale_threshold,
       retro_task_callback_t cb, void *userdata);
+#endif
 
 #ifdef HAVE_LIBRETRODB
 bool task_push_dbscan(
@@ -226,7 +230,9 @@ void *task_push_decompress(
       void *frontend_userdata,
       bool mute);
 
+#ifdef HAVE_FILE_TRANSFER
 void task_file_load_handler(retro_task_t *task);
+#endif
 
 typedef struct screenshot_task_state screenshot_task_state_t;
 

+ 3 - 0
app/src/main/java/com/retroarch/browser/retroactivity/RetroActivityCommon.java

@@ -577,6 +577,9 @@ DebugUtil.i(TAG,"onTick"+millisUntilFinished);
 
   public native void gameDialogClosed();
 
+  public native void setJoystickBindValidNative(int port, int id, boolean valid);
+  public native void setJoystickBindJoyKeyNative(int port, int id, int joyKey);
+
   /////////////// Private methods ///////////////
   /**
    * Sanitizes a core name so that it can be used when dealing with

+ 0 - 1
app/src/main/java/com/xugame/app/AppSystem.java

@@ -1,7 +1,6 @@
 package com.xugame.app;
 
 import com.xugame.bean.InputCode;
-import com.xugame.bean.InputDescriptorBean;
 import com.xugame.bean.SystemAVInfo;
 
 public class AppSystem {

+ 0 - 4
app/src/main/java/com/xugame/app/EnvironmentCallback.java

@@ -1,12 +1,8 @@
 package com.xugame.app;
 
-import android.util.Log;
-
 import com.xugame.bean.InputDescriptorBean;
 import com.xugame.bean.SystemAVInfo;
 
-import java.util.Arrays;
-
 public interface EnvironmentCallback {
     void setInputDescriptors(InputDescriptorBean[] descriptors);
     void setSystemAVInfo(SystemAVInfo systemAVInfo);

+ 12 - 0
app/src/main/java/com/xugame/bean/InputCode.java

@@ -18,6 +18,18 @@ public class InputCode {
     public static final int JOYPAD_L3 = 14;      
     public static final int JOYPAD_R3 = 15;
 
+    public static final int JOYPAD_BASE_BIND_END = 16;
+
+    public static final int JOYPAD_NO_KEY = 0xFFFF;
+    public static final int JOYPAD_HAT_UP_SHIFT = 15;
+    public static final int JOYPAD_HAT_DOWN_SHIFT = 14;
+    public static final int JOYPAD_HAT_LEFT_SHIFT = 13;
+    public static final int JOYPAD_HAT_RIGHT_SHIFT = 12;
+    public static final int JOYPAD_HAT_UP_MASK = 1 << JOYPAD_HAT_UP_SHIFT;
+    public static final int JOYPAD_HAT_DOWN_MASK = 1 << JOYPAD_HAT_DOWN_SHIFT;
+    public static final int JOYPAD_HAT_LEFT_MASK = 1 << JOYPAD_HAT_LEFT_SHIFT;
+    public static final int JOYPAD_HAT_RIGHT_MASK = 1 << JOYPAD_HAT_RIGHT_SHIFT;
+
     public static final int ANALOG_LEFT_X_PLUS = 16;
     public static final int ANALOG_LEFT_X_MINUS = 17;
     public static final int ANALOG_LEFT_Y_PLUS = 18;

+ 2 - 0
app/src/main/java/com/xugame/gameconsole/emulator/RetroArchEmulatorActivity.java

@@ -26,8 +26,10 @@ import com.xugame.gameconsole.util.DebugUtil;
 import com.xugame.gameconsole.util.Util;
 
 import java.io.File;
+import java.lang.reflect.Array;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.Arrays;
 
 //private void parserIntent() {
 //        Intent intent = getIntent();