This is a system for storing arbitrary data in the config file and then
easily retrieving it later on. This has full Lua support for exposing
the available options in a custom UI and changing the values of the
options. This ported some of the existing command line options over to
the new system which is opt-in for the moment by using a mod_table flag.
SDL_HapticStopAll stops all effects, including the spring effect so the
joystick goes limp after one mission (joy_ff_stop_effects gets called at
the end of each mission).
This restarts the spring effect which should fix that issue.
This fixes#1417.
SDL_HAPTIC_SQUARE was removed immediately before the SDL 2.0.0 release and replaced with SDL_HAPTIC_LEFTRIGHT, due to running out of bits. SDL_HAPTIC_SQUARE is a periodic effect. SDL_HAPTIC_LEFTRIGHT is for controller rumble. Just because the latter replaced the former doesn't mean they're equivalent (and in fact they are completely different, which results in a malformed effect that won't work right, if at all). As a result, I've replaced the effect with SDL_HAPTIC_SINE, since a sine wave is the closest periodic effect to a square wave. This allows the effect to actually work, although not in exactly the same way as it would if it were actually a square wave (SDL 2.1 is supposed to contain SDL_HAPTIC_SQUARE again and presumably the effect can be changed back to a square wave whenever that happens).
It turns out that SDL_HapticOpenFromJoystick() is currently bugged (I found the SDL bugzilla bug for it). SDL_HapticOpen() allows force feedback to work, with the caveat that it operates on indices and so anyone with multiple force feedback devices won't get the one matching their selected joystick. The only other alternatives are to add our own code to match the haptic device to the currently-selected joystick, to add a haptic device selector to the launcher, or to distribute a custom version of SDL that fixes SDL_HapticOpenFromJoystick(). This is the lowest-effort change (which can and should be reverted if SDL releases a new version that fixes it).