XRWS           ™¨    —�ext_01.cat ext_01.dat md/kuertee_reset_mouse.xml 16630 1785890602 6661d81a8fe6e2762c220774aea525dc
md/kuertee_reset_mouse_config.xml 10841 1785391869 857e044fd7fe796765856ae51ce6f51a
t/0001-L007.xml 1083 1758763502 d4178388cb3299512cf88bd955fcf3a4
t/0001-l033.xml 779 1758285875 6163219a4bb8d5afab13aca807d719fd
t/0001-l049.xml 858 1758285893 078e05b430d198725156bb39eabf6c7a
t/0001.xml 840 1785391809 6df033a9ee4200e72040c5a24fa0cb5c
ui.xml 337 1740107020 a62c8b4f7f50d80dd0d17c68b6112e45
ui/menu_map_uix.lua 7431 1785382986 4486ee0d67ec31855dd80be4b7351c19
<?xml version="1.0" encoding="utf-8"?>
<mdscript name="kuertee_reset_mouse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="md.xsd">
	<cues>
		<cue name="ResetAll" namespace="this">
			<conditions>
				<event_cue_signalled />
			</conditions>
			<actions>
				<debug_text text="'reset_cue ' + ResetMouse" />
				<reset_cue cue="ResetMouse" />
			</actions>
			<cues>
				<cue name="ResetAll2">
					<actions>
						<debug_text text="'signal_cue ' + ResetMouse" />
						<signal_cue cue="ResetMouse" />
						<reset_cue cue="parent" />
						<cancel_cue cue="this" />
					</actions>
				</cue>
			</cues>
		</cue>
		<cue name="ResetMouse" namespace="this" version="4">
			<conditions>
				<check_any>
					<event_cue_signalled />
					<event_cue_signalled cue="md.Setup.Start" />
				</check_any>
				<!-- <check_value value="not @player.allmodules.{player.module}.isscenario" /> -->
			</conditions>
			<actions>
				<set_value name="$debugChance" exact="0" />
				<set_value name="$mouseDisablingEvents" exact="[]" />
				<set_value name="$userLocation" exact="'c'" />
				<set_value name="$userLocation_onGamepadStart" exact="'bl'" />
				<set_value name="$userLocation_onGamepadEnd" exact="'previous'" />
				<set_value name="$userLocation_onAutoPilotStop" exact="'c'" />
				<set_value name="$time_InteractMenu" exact="0" />
				<set_value name="$userIsLockSteeringOnRepair" exact="true" />
			</actions>
			<patches>
				<patch sinceversion="2" status="complete">
					<debug_text text="'patch sinceversion 2, state: ' + this.state" />
					<debug_text text="'signal_cue ' + ResetAll" />
					<signal_cue cue="ResetAll" />
				</patch>
				<patch sinceversion="3">
					<set_value name="$mouseDisablingEvents" exact="[]" />
					<debug_text text="'$activeEvents: ' + @$activeEvents" />
					<do_if value="$activeEvents?">
						<do_for_each name="$event" in="$activeEvents">
							<append_to_list name="$mouseDisablingEvents" exact="$event" />
						</do_for_each>
					</do_if>
					<debug_text text="'$mouseDisablingEvents: ' + $mouseDisablingEvents" />
				</patch>
				<patch sinceversion="4">
					<do_if value="not $userLocation?">
						<set_value name="$userLocation" exact="'c'" />
					</do_if>
					<do_if value="not $userLocation_onGamepadStart?">
						<set_value name="$userLocation_onGamepadStart" exact="'bl'" />
					</do_if>
					<do_if value="not $userLocation_onGamepadEnd?">
						<set_value name="$userLocation_onGamepadEnd" exact="'previous'" />
					</do_if>
					<do_if value="not $userLocation_onAutoPilotStop?">
						<set_value name="$userLocation_onAutoPilotStop" exact="'c'" />
					</do_if>
					<do_if value="not $time_InteractMenu?">
						<set_value name="$time_InteractMenu" exact="0" />
					</do_if>
					<set_value name="$userIsLockSteeringOnRepair" exact="true" />
					<remove_value name="$isDoDebug1" />
					<remove_value name="$isDoDebug2" />
				</patch>
			</patches>
			<cues>
				<cue name="Init">
					<conditions>
						<check_any>
							<event_cue_signalled />
							<event_cue_signalled cue="md.Setup.Start" />
						</check_any>
						<!-- <check_value value="not @player.allmodules.{player.module}.isscenario" /> -->
					</conditions>
					<actions>
						<do_if value="not $debugChance?">
							<set_value name="$debugChance" exact="0" />
						</do_if>
						<debug_text text="'event.name %s $mouseDisablingEvents %s'.[event.name, $mouseDisablingEvents]" />
						<set_value name="$mouseDisablingEvents" exact="[]" />
						<debug_text text="'$mouseDisablingEvents %s'.[$mouseDisablingEvents]" />
						<set_value name="$controllerType" exact="null" />
						<set_value name="$isInFullScreenMenu" exact="player.isinfullscreenmenu" />
					</actions>
					<cues>
						<cue name="Init2" checktime="player.age + 1s">
							<actions>
								<raise_lua_event name="'kuertee_reset_mouse.OnOptionChange_GamepadStart'" param="$userLocation_onGamepadStart" />
								<raise_lua_event name="'kuertee_reset_mouse.OnOptionChange_GamepadEnd'" param="$userLocation_onGamepadEnd" />
								<reset_cue cue="Init" />
								<reset_cue cue="Init2" />
							</actions>
						</cue>
					</cues>
				</cue>
				<library name="DisableMouseSteering" purpose="run_actions">
					<actions>
						<debug_text text="event.name" chance="ResetMouse.$debugChance" />
						<do_if value="not player.isinfullscreenmenu">
							<raise_lua_event name="'kuertee_reset_mouse.DisableMouseSteering'" param="1" />
						</do_if>
					</actions>
				</library>
				<library name="EnableMouseSteering" purpose="run_actions">
					<actions>
						<debug_text text="event.name" chance="ResetMouse.$debugChance" />
						<do_if value="not player.isinfullscreenmenu">
							<raise_lua_event name="'kuertee_reset_mouse.DisableMouseSteering'" param="0" />
						</do_if>
					</actions>
				</library>
				<cue name="DisableMouseSteeringTrigger" instantiate="true">
					<conditions>
						<check_any>
							<check_all>
								<event_cue_signalled />
								<check_value value="event.param.$trigger" />
								<set_value name="$disableTriggerEvent" exact="event.param.$trigger" />
							</check_all>
							<check_all>
								<event_ui_triggered screen="'InteractMenu'" />
								<check_value value="event.param2 == ''" comment="only listen for opening of menu. i.e. when param2 is empty" />
								<check_value value="not player.isinfullscreenmenu" />
								<set_value name="$disableTriggerEvent" exact="'InteractMenu'" />
								<debug_text text="event.name + ' event.param: ' + event.param + ' event.param2: ' + event.param2 + ' isinfullscreenmenu: ' + player.isinfullscreenmenu" debugchance="$debugChance" />
							</check_all>
							<check_all>
								<event_ui_triggered />
								<check_value value="event.param != 'Chat_Window_API'" />
								<check_value value="event.param != 'Hotkey'" />
								<check_value value="event.param != 'InteractMenu'" />
								<check_value value="event.param != 'Interact_Menu_API'" />
								<check_value value="event.param != 'Named_Pipes'" />
								<check_value value="event.param != 'Time'" />
								<check_value value="event.param2 != 'menu_close'" />
								<check_value value="player.isinfullscreenmenu" />
								<set_value name="$disableTriggerEvent" exact="'isinfullscreenmenu'" />
								<debug_text text="event.name + ' event.param: ' + event.param + ' isinfullscreenmenu: ' + player.isinfullscreenmenu" debugchance="$debugChance" />
							</check_all>
							<check_all>
								<event_conversation_started />
								<set_value name="$disableTriggerEvent" exact="event.name" />
							</check_all>
							<check_all>
								<event_autopilot_target_set />
								<set_value name="$disableTriggerEvent" exact="event.name" />
							</check_all>
						</check_any>
						<check_value value="not @$mouseDisablingEvents.indexof.{$disableTriggerEvent}" />
					</conditions>
					<actions>
						<debug_text text="'CONFIRMED $disableTriggerEvent %s'.[$disableTriggerEvent]" chance="$debugChance" />
						<do_if value="not $mouseDisablingEvents?">
							<set_value name="$mouseDisablingEvents" exact="[]" />
						</do_if>
						<debug_text text="'$mouseDisablingEvents %s (pre add)'.[$mouseDisablingEvents]" chance="$debugChance" />
						<do_if value="not $mouseDisablingEvents.count" comment="an event is going to be added to an empty list, so disable mouse steering now">
							<run_actions ref="DisableMouseSteering" />
						</do_if>
						<do_if value="not $mouseDisablingEvents.indexof.{$disableTriggerEvent}">
							<append_to_list name="$mouseDisablingEvents" exact="$disableTriggerEvent" />
						</do_if>
						<debug_text text="'$mouseDisablingEvents %s (post add)'.[$mouseDisablingEvents]" chance="$debugChance" />
						<do_if value="$disableTriggerEvent == 'isinfullscreenmenu'">
							<raise_lua_event name="'kuertee_reset_mouse.OnOpenFullScreenMenu'" />
						</do_if>
						<cancel_cue cue="DisableMouseSteeringTrigger" />
					</actions>
				</cue>
				<cue name="EnableMouseSteeringTrigger" instantiate="true">
					<conditions>
						<check_any>
							<check_all>
								<event_cue_signalled />
								<check_value value="event.param.$trigger" />
								<set_value name="$enableTriggerEvent" exact="event.param.$trigger" />
							</check_all>
							<check_all>
								<event_ui_triggered screen="'InteractMenu'" control="'menu_close'" />
								<check_value value="not player.isinfullscreenmenu" />
								<debug_text text="event.name + ' event.param: ' + event.param + ' event.param2: ' + event.param2" debugchance="$debugChance" />
								<set_value name="$enableTriggerEvent" exact="'InteractMenu'" />
							</check_all>
							<check_all>
								<event_ui_triggered control="'menu_close'" />
								<check_value value="event.param != 'Chat_Window_API'" />
								<check_value value="event.param != 'Hotkey'" />
								<check_value value="event.param != 'InteractMenu'" />
								<check_value value="event.param != 'Interact_Menu_API'" />
								<check_value value="event.param != 'Named_Pipes'" />
								<check_value value="event.param != 'Time'" />
								<check_value value="not player.isinfullscreenmenu" />
								<debug_text text="event.name + ' event.param: ' + event.param + ' isinfullscreenmenu: ' + player.isinfullscreenmenu" debugchance="$debugChance" />
								<set_value name="$enableTriggerEvent" exact="'isinfullscreenmenu'" />
							</check_all>
							<check_all>
								<event_conversation_finished />
								<set_value name="$enableTriggerEvent" exact="'event_conversation_started'" />
							</check_all>
							<check_all>
								<event_autopilot_deactivated />
								<set_value name="$enableTriggerEvent" exact="'event_autopilot_target_set'" />
							</check_all>
						</check_any>
						<check_value value="@$mouseDisablingEvents.indexof.{$enableTriggerEvent}" />
					</conditions>
					<actions>
						<debug_text text="'CONFIRMED $enableTriggerEvent %s'.[$enableTriggerEvent]" chance="$debugChance" />
						<do_if value="not $mouseDisablingEvents?">
							<set_value name="$mouseDisablingEvents" exact="[]" />
						</do_if>
						<set_value name="$isInFullScreenMenu" exact="$mouseDisablingEvents.indexof.{'isinfullscreenmenu'}" />
						<set_value name="$isOnAutopilot" exact="$mouseDisablingEvents.indexof.{'event_autopilot_target_set'}" />
						<remove_from_list name="$mouseDisablingEvents" exact="$enableTriggerEvent" />
						<debug_text text="'$mouseDisablingEvents %s'.[$mouseDisablingEvents]" chance="$debugChance" />
						<do_if value="not $mouseDisablingEvents.count">
							<run_actions ref="EnableMouseSteering" />
						</do_if>
						<do_if value="$isInFullScreenMenu and (not $mouseDisablingEvents.indexof.{'isinfullscreenmenu'})">
							<raise_lua_event name="'kuertee_reset_mouse.OnCloseFullScreenMenu'" param="$userLocation"/>
						</do_if>
						<do_if value="$isOnAutopilot and (not $mouseDisablingEvents.indexof.{'event_autopilot_target_set'})">
							<do_if value="not player.isinfullscreenmenu">
								<raise_lua_event name="'kuertee_reset_mouse.OnAutoPilotEnd'" param="$userLocation_onAutoPilotStop" />
							</do_if>
						</do_if>
						<cancel_cue cue="EnableMouseSteeringTrigger" />
					</actions>
				</cue>
				<cue name="PlayerRepair" namespace="this">
					<conditions>
						<event_player_repaired_object />
						<check_value value="ResetMouse.$userIsLockSteeringOnRepair" />
					</conditions>
					<actions>
						<set_value name="$repairTime" exact="player.age" />
						<set_value name="$repairTarget" exact="event.param" />
						<debug_text text="'$repairTarget %s %s'.[$repairTarget.name, $repairTarget.macro]" chance="ResetMouse.$debugChance" />
					</actions>
					<cues>
						<cue name="PlayerRepair_Continuing" instantiate="true">
							<conditions>
								<event_player_repaired_object />
							</conditions>
							<actions>
								<set_value name="$repairTime" exact="player.age" />
								<set_value name="$repairTarget" exact="event.param" />
								<debug_text text="'$repairTarget %s %s'.[$repairTarget.name, $repairTarget.macro]" chance="ResetMouse.$debugChance" />
								<signal_cue_instantly cue="DisableMouseSteeringTrigger" param="table[$trigger = PlayerRepair]" />
							</actions>
						</cue>
						<cue name="PlayerRepair_GetIsStillRepairing" checktime="player.age + 0.25s" checkinterval="0.25s" instantiate="true">
							<actions>
								<do_if value="player.age - $repairTime gt 0.25s">
									<!-- repairs stopped -->
									<signal_cue_instantly cue="EnableMouseSteeringTrigger" param="table[$trigger = PlayerRepair]" />
									<debug_text text="'reset_cue %s'.[PlayerRepair]" chance="ResetMouse.$debugChance" />
									<reset_cue cue="PlayerRepair" />
								</do_if>
								<do_else>
									<!-- still repairing -->
								</do_else>
							</actions>
						</cue>
					</cues>
				</cue>
				<cue name="OnModInstall">
					<actions>
						<debug_text text="'$debugChance: ' + $debugChance" />
						<signal_cue_instantly cue="Init" />
					</actions>
				</cue>
				<cue name="OnModInstallComplete" checktime="player.age + 1s">
					<actions>
						<debug_text text="'$debugChance: ' + $debugChance" />
					</actions>
				</cue>
				<cue name="OnOptionsMenuClose">
					<conditions>
						<event_ui_triggered screen="'OptionsMenu'" control="'menu_close'" />
					</conditions>
					<actions>
						<debug_text text="'$userLocation_onGamepadStart: ' + $userLocation_onGamepadStart" chance="ResetMouse.$debugChance" />
						<debug_text text="'$userLocation_onGamepadEnd: ' + $userLocation_onGamepadEnd" chance="ResetMouse.$debugChance" />
						<raise_lua_event name="'kuertee_reset_mouse.OnOptionChange_GamepadStart'" param="$userLocation_onGamepadStart" />
						<raise_lua_event name="'kuertee_reset_mouse.OnOptionChange_GamepadEnd'" param="$userLocation_onGamepadEnd" />
						<reset_cue cue="this" />
					</actions>
				</cue>
			</cues>
		</cue>
		<cue name="DeactivateMod">
			<conditions>
				<check_any>
					<event_cue_signalled />
					<check_all>
						<event_ui_triggered screen="'OptionsMenu'" control="'uix_deactivate_mod'" />
						<check_value value="event.param3 == 'kuerteeUIResetMouseOnMenuClose'" />
					</check_all>
				</check_any>
			</conditions>
			<actions>
				<debug_text text="event.name" />
				<cancel_cue cue="md.kuertee_reset_mouse.ResetAll" />
				<cancel_cue cue="md.kuertee_reset_mouse.ResetMouse" />
				<cancel_cue cue="md.kuertee_reset_mouse.DebugChat" />

				<cancel_cue cue="md.kuertee_reset_mouse_config.StartSMO" />
				<cancel_cue cue="md.kuertee_reset_mouse_config.BuildOptionsMenu" />
				<cancel_cue cue="md.kuertee_reset_mouse_config.OnSMOSliderChange" />
				<cancel_cue cue="md.kuertee_reset_mouse_config.OnSMOCheckboxChange" />
				<cancel_cue cue="md.kuertee_reset_mouse_config.onDropDownConfirmed" />
				<cancel_cue cue="DeactivateMod" />
			</actions>
		</cue>
		<cue name="DebugChat" namespace="this">
			<conditions>
				<event_ui_triggered screen="'Chat_Window_API'" control="'text_entered'" />
				<check_any>
					<check_value value="event.param3.$text == 'kuertee deactivate'" />
					<check_value value="event.param3.$text == 'debug kuertee interval'" />
					<check_value value="event.param3.$text == 'debug resetm repairs'" />
				</check_any>
			</conditions>
			<actions>
				<debug_text text="event.param3" />
				<do_if value="event.param3.$text == 'debug resetm repairs'">
					<debug_text text="'PlayerRepair.state %s'.[PlayerRepair.state]" />
				</do_if>
				<do_if value="event.param3.$text == 'kuertee deactivate'">
					<signal_cue cue="DeactivateMod" />
				</do_if>
				<do_if value="event.param3.$text == 'debug kuertee interval'">
					<do_if value="player.age - @md.$kuertee_interval_time gt 1s">
						<set_value name="md.$kuertee_interval_time" exact="player.age" />
						<do_if value="@md.$kuertee_interval">
							<remove_value name="md.$kuertee_interval" />
						</do_if>
						<do_else>
							<set_value name="md.$kuertee_interval" exact="100" />
						</do_else>
					</do_if>
					<debug_text text="'md.$kuertee_interval: ' + @md.$kuertee_interval" />
				</do_if>
				<reset_cue cue="this"/>
			</actions>
		</cue>
	</cues>
</mdscript>
<?xml version="1.0" encoding="utf-8"?>
<mdscript name="kuertee_reset_mouse_config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="md.xsd">
	<cues>
		<cue name="StartSMO" instantiate="true">
			<conditions>
				<event_cue_signalled cue="md.Simple_Menu_Options.Reloaded"/>
			</conditions>
			<actions>
				<!-- <debug_text text="'signal_cue_instantly ' + @md.Simple_Menu_API.Register_Options_Menu" /> -->
				<signal_cue_instantly cue="md.Simple_Menu_API.Register_Options_Menu"
					param="table[
						$id = 'kuertee_reset_mouse_extension_options_menu',
						$columns = 2,
						$title = {111813, 688900},
						$onOpen = BuildOptionsMenu
					]" />
				<cancel_cue cue="this" />
			</actions>
		</cue>
		<cue name="BuildOptionsMenu" instantiate="true">
			<conditions>
				<event_cue_signalled />
			</conditions>
			<actions>
				<signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Make_Text" param="table[$col=1, $text={111813, 688902}]"/>
				<signal_cue_instantly
				cue = "md.Simple_Menu_API.Make_Dropdown"
				param = "table[
					$id = 'userLocation',
					$col = 2,
					$options = [
						table[$text={1001, 8942}, $value='disabled'],
						table[$text={111813, 688903}, $value='c'],
						table[$text={111813, 688904}, $value='tl'],
						table[$text={111813, 688905}, $value='tr'],
						table[$text={111813, 688906}, $value='br'],
						table[$text={111813, 688907}, $value='bl']
					],
					$startOption = if md.kuertee_reset_mouse.ResetMouse.$userLocation == 'disabled' then 1 else (
						if md.kuertee_reset_mouse.ResetMouse.$userLocation == 'c' then 2 else (
							if md.kuertee_reset_mouse.ResetMouse.$userLocation == 'tl' then 3 else (
								if md.kuertee_reset_mouse.ResetMouse.$userLocation == 'tr' then 4 else (
									if md.kuertee_reset_mouse.ResetMouse.$userLocation == 'br' then 5 else (
										if md.kuertee_reset_mouse.ResetMouse.$userLocation == 'bl' then 6
									)
								)
							)
						)
					),
					$mouseOverText = {1001, 2661} + ': ' + {111813, 688903},
					$onDropDownConfirmed = onDropDownConfirmed
				]"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Make_Text" param="table[$col=1, $text={111813, 688908}]"/>
				<signal_cue_instantly
				cue = "md.Simple_Menu_API.Make_Dropdown"
				param = "table[
					$id = 'userLocation_onGamepadStart',
					$col = 2,
					$options = [
						table[$text={1001, 8942}, $value='disabled'],
						table[$text={111813, 688903}, $value='c'],
						table[$text={111813, 688904}, $value='tl'],
						table[$text={111813, 688905}, $value='tr'],
						table[$text={111813, 688906}, $value='br'],
						table[$text={111813, 688907}, $value='bl']
					],
					$startOption = if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadStart == 'disabled' then 1 else (
						if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadStart == 'c' then 2 else (
							if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadStart == 'tl' then 3 else (
								if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadStart == 'tr' then 4 else (
									if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadStart == 'br' then 5 else (
										if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadStart == 'bl' then 6
									)
								)
							)
						)
					),
					$mouseOverText = {1001, 2661} + ': ' + {111813, 688907},
					$onDropDownConfirmed = onDropDownConfirmed
				]"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Make_Text" param="table[$col=1, $text={111813, 688909}]"/>
				<signal_cue_instantly
				cue = "md.Simple_Menu_API.Make_Dropdown"
				param = "table[
					$id = 'userLocation_onGamepadEnd',
					$col = 2,
					$options = [
						table[$text={1001, 8942}, $value='disabled'],
						table[$text={111813, 688903}, $value='c'],
						table[$text={111813, 688904}, $value='tl'],
						table[$text={111813, 688905}, $value='tr'],
						table[$text={111813, 688906}, $value='br'],
						table[$text={111813, 688907}, $value='bl'],
						table[$text={111813, 688910}, $value='previous']
					],
					$startOption = if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadEnd == 'disabled' then 1 else (
						if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadEnd == 'c' then 2 else (
							if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadEnd == 'tl' then 3 else (
								if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadEnd == 'tr' then 4 else (
									if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadEnd == 'br' then 5 else (
										if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadEnd == 'bl' then 6 else (
											if md.kuertee_reset_mouse.ResetMouse.$userLocation_onGamepadEnd == 'previous' then 7
										)
									)
								)
							)
						)
					),
					$mouseOverText = {1001, 2661} + ': ' + {111813, 688903},
					$onDropDownConfirmed = onDropDownConfirmed
				]"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Make_Text" param="table[$col=1, $text={111813, 688911}]"/>
				<signal_cue_instantly
				cue = "md.Simple_Menu_API.Make_Dropdown"
				param = "table[
					$id = 'userLocation_onAutoPilotStop',
					$col = 2,
					$options = [
						table[$text={1001, 8942}, $value='disabled'],
						table[$text={111813, 688903}, $value='c'],
						table[$text={111813, 688904}, $value='tl'],
						table[$text={111813, 688905}, $value='tr'],
						table[$text={111813, 688906}, $value='br'],
						table[$text={111813, 688907}, $value='bl'],
						table[$text={111813, 688910}, $value='previous']
					],
					$startOption = if md.kuertee_reset_mouse.ResetMouse.$userLocation_onAutoPilotStop == 'disabled' then 1 else (
						if md.kuertee_reset_mouse.ResetMouse.$userLocation_onAutoPilotStop == 'c' then 2 else (
							if md.kuertee_reset_mouse.ResetMouse.$userLocation_onAutoPilotStop == 'tl' then 3 else (
								if md.kuertee_reset_mouse.ResetMouse.$userLocation_onAutoPilotStop == 'tr' then 4 else (
									if md.kuertee_reset_mouse.ResetMouse.$userLocation_onAutoPilotStop == 'br' then 5 else (
										if md.kuertee_reset_mouse.ResetMouse.$userLocation_onAutoPilotStop == 'bl' then 6 else (
											if md.kuertee_reset_mouse.ResetMouse.$userLocation_onAutoPilotStop == 'previous' then 7
										)
									)
								)
							)
						)
					),
					$mouseOverText = {1001, 2661} + ': ' + {111813, 688903},
					$onDropDownConfirmed = onDropDownConfirmed
				]"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Make_Text" param="table[$col=1, $text={111813, 688912}]"/>
				<signal_cue_instantly
					cue = "md.Simple_Menu_API.Make_CheckBox"
					param = "table[
						$id = 'userIsLockSteeringOnRepair',
						$checked = md.kuertee_reset_mouse.ResetMouse.$userIsLockSteeringOnRepair,
						$col = 2,
						$width = 'Helper.standardButtonHeight', $height = 'Helper.standardButtonHeight',
						$onClick = OnSMOCheckboxChange
					]"/>

				<signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Make_Text" param="table[$col=1, $text='']"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Add_Row"/>
				<signal_cue_instantly cue="md.Simple_Menu_API.Make_Text" param="table[$col=1, $text={111813, 688901}, $color='Helper.color.red']"/>
				<signal_cue_instantly
					cue = "md.Simple_Menu_API.Make_CheckBox"
					param = "table[
						$id = 'debugChance',
						$checked = if md.kuertee_reset_mouse.ResetMouse.$debugChance == 100 then true else false,
						$col = 2,
						$width = 'Helper.standardButtonHeight', $height = 'Helper.standardButtonHeight',
						$bgColor = 'Helper.color.red',
						$onClick = OnSMOCheckboxChange
					]"/>
			</actions>
		</cue>
		<cue name="OnSMOSliderChange" instantiate="true">
			<conditions>
				<event_cue_signalled />
			</conditions>
			<actions>
				<!-- <debug_text text="event.param.$id + ' to: ' + @event.param.$value + ' or ' + @event.param.$checked" /> -->
				<debug_text text="event.param.$id + ' pre: ' + md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" chance="md.kuertee_reset_mouse.ResetMouse.$debugChance"/>
				<set_value name="md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" exact="event.param.$value" />
				<debug_text text="event.param.$id + ' post: ' + md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" chance="md.kuertee_reset_mouse.ResetMouse.$debugChance"/>
				<cancel_cue cue = "this" />
			</actions>
		</cue>
		<cue name="OnSMOCheckboxChange" instantiate="true">
			<conditions>
				<event_cue_signalled />
			</conditions>
			<actions>
				<!-- <debug_text text="event.param.$id + ' to: ' + @event.param.$value + ' or ' + @event.param.$checked" /> -->
				<debug_text text="event.param.$id + ' pre: ' + md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" chance="md.kuertee_reset_mouse.ResetMouse.$debugChance"/>
				<do_if value="event.param.$id == 'debugChance'">
					<set_value name="md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" exact="if event.param.$checked then 100 else 0" />
					<signal_cue_instantly cue="md.Simple_Menu_API.Refresh_Menu"/>
				</do_if>
				<do_else>
					<set_value name="md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" exact="event.param.$checked" />
				</do_else>
				<debug_text text="event.param.$id + ' post: ' + md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" chance="md.kuertee_reset_mouse.ResetMouse.$debugChance"/>
				<cancel_cue cue = "this" />
			</actions>
		</cue>
		<cue name="onDropDownConfirmed" instantiate="true">
			<conditions>
				<event_cue_signalled />
			</conditions>
			<actions>
				<debug_text text="event.param.$id + ' to: ' + @event.param.$option.$text + ' value: ' + @event.param.$option.$value" chance="md.kuertee_reset_mouse.ResetMouse.$debugChance" />
				<debug_text text="event.param.$id + ' pre: ' + md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" chance="md.kuertee_reset_mouse.ResetMouse.$debugChance"/>
				<set_value name="md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" exact="(event.param.$option.$value)" />
				<debug_text text="event.param.$id + ' post: ' + md.kuertee_reset_mouse.ResetMouse.{'$' + event.param.$id}" chance="md.kuertee_reset_mouse.ResetMouse.$debugChance"/>
				<cancel_cue cue = "this" />
			</actions>
		</cue>
	</cues>
</mdscript>
<?xml version="1.0" encoding="UTF-8" ?>
<!--  translated into russian by Alex5Not   -->
<diff><add sel="/language">
	<!-- "kuertee reset mouse" = "krm" = "11 18 13" in https://www.boxentriq.com/code-breaking/letters-to-numbers -->
	<page id="111813" voice="no">
		<!-- config -->
		<t id="688900">kuertee: UI: Сброс курсора мыши</t>
		<t id="688901">Лог отладки</t>
		<t id="688902">При закрытии меню - сбросить курсор в </t>
		<t id="688903">Центр</t>
		<t id="688904">Верх-лево</t>
		<t id="688905">Верх-право</t>
		<t id="688906">Низ-право</t>
		<t id="688907">Низ-лево</t>
		<t id="688908">Контроллер включен - сбросить курсор в</t>
		<t id="688909">Движение мыши ПОСЛЕ контроллера - сбросить курсор в</t>
		<t id="688910">Вернуться к предыдущему</t>
		<t id="688911">Остановлен автопилот - сбросить курсор в</t>
	</page>
</add></diff>
<?xml version="1.0" encoding="UTF-8" ?>
<diff><add sel="/language">
	<!-- "kuertee reset mouse" = "krm" = "11 18 13" in https://www.boxentriq.com/code-breaking/letters-to-numbers -->
	<page id="111813" voice="no">
		<!-- config -->
		<t id="688900">kuertee: UI: Reset mouse</t>
		<t id="688901">Debug log</t>
		<t id="688902">On fullscreen menu close, reset mouse to</t>
		<t id="688903">Centre</t>
		<t id="688904">Top-left</t>
		<t id="688905">Top-right</t>
		<t id="688906">Bottom-right</t>
		<t id="688907">Bottom-left</t>
		<t id="688908">On controller, reset mouse to</t>
		<t id="688909">On mouse AFTER controller, reset mouse to</t>
		<t id="688910">Return to previous</t>
		<t id="688911">On auto-pilot stop, reset mouse to</t>
	</page>
</add></diff>
<?xml version="1.0" encoding="UTF-8" ?>
<diff><add sel="/language">
	<!-- "kuertee reset mouse" = "krm" = "11 18 13" in https://www.boxentriq.com/code-breaking/letters-to-numbers -->
	<page id="111813" voice="no">
		<!-- config -->
		<t id="688900">kuertee: UI: Mausreset</t>
		<t id="688901">Debug-Protokoll</t>
		<t id="688902">Bei Vollbild-Menüschliessung, Maus zurücksetzen nach</t>
		<t id="688903">Zentrum</t>
		<t id="688904">Oben links</t>
		<t id="688905">Oben rechts</t>
		<t id="688906">Unten links</t>
		<t id="688907">Unten rechts</t>
		<t id="688908">Bei Controlleraktion, Maus zurücksetzen nach</t>
		<t id="688909">Bei Mausnutzung nach Controlleraktion, Maus zurücksetzen nach</t>
		<t id="688910">Zurück zu Vorherigem</t>
		<t id="688911">Bei Autopilot-Abschaltung, Maus zurücksetzen nach</t>
	</page>
</add></diff>
<?xml version="1.0" encoding="UTF-8" ?>
<diff><add sel="/language">
	<!-- "kuertee reset mouse" = "krm" = "11 18 13" in https://www.boxentriq.com/code-breaking/letters-to-numbers -->
	<page id="111813" voice="no">
		<!-- config -->
		<t id="688900">kuertee: UI: Reset mouse</t>
		<t id="688901">Debug log</t>
		<t id="688902">On fullscreen menu close, reset mouse to</t>
		<t id="688903">Centre</t>
		<t id="688904">Top-left</t>
		<t id="688905">Top-right</t>
		<t id="688906">Bottom-right</t>
		<t id="688907">Bottom-left</t>
		<t id="688908">On controller, reset mouse to</t>
		<t id="688909">On mouse AFTER controller, reset mouse to</t>
		<t id="688910">Return to previous</t>
		<t id="688911">On auto-pilot stop, reset mouse to</t>
		<t id="688912">Disable mouse steering while repairing</t>
	</page>
</add></diff>
<?xml version="1.0" encoding="UTF-8"?>
<addon name="kuertee_ui_reset_mouse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../ui/core/addon.xsd">
  <environment type="menus">
    <file name="ui/menu_map_uix.lua" />
    <dependency name="kuertee_ui_extensions" />
  </environment>
</addon>
local ffi = require ("ffi")
local C = ffi.C
ffi.cdef[[
	void ToggleMouseSteeringMode(void);
]]

local ModLua = {}

local topLevelMenu
local kuertee_reset_mouse = {}
local newFuncs = {}

function ModLua.init()
	RegisterEvent ("kuertee_reset_mouse.OnOpenFullScreenMenu", kuertee_reset_mouse.OnOpenFullScreenMenu)
	RegisterEvent ("kuertee_reset_mouse.OnCloseFullScreenMenu", kuertee_reset_mouse.OnCloseFullScreenMenu)
	topLevelMenu = Helper.getMenu ("TopLevelMenu")
	topLevelMenu.registerCallback ("onUpdate_before_frame_update", newFuncs.onUpdate_before_frame_update)
	RegisterEvent ("kuertee_reset_mouse.OnOptionChange_GamepadStart", kuertee_reset_mouse.OnOptionChange_GamepadStart)
	RegisterEvent ("kuertee_reset_mouse.OnOptionChange_GamepadEnd", kuertee_reset_mouse.OnOptionChange_GamepadEnd)
	RegisterEvent ("kuertee_reset_mouse.OnAutoPilotEnd", kuertee_reset_mouse.OnAutoPilotEnd)
	RegisterEvent ("kuertee_reset_mouse.DisableMouseSteering", kuertee_reset_mouse.DisableMouseSteering)
	RegisterEvent ("kuertee_reset_mouse.AutoCamCutscene_On", kuertee_reset_mouse.AutoCamCutscene_On)
	RegisterEvent ("kuertee_reset_mouse.AutoCamCutscene_Off", kuertee_reset_mouse.AutoCamCutscene_Off)
	local mode, angle = GetControllerInfo()
	Helper.debugText ("kuertee_reset_mouse.Init mode: " .. tostring (mode) .. " angle: " .. tostring (angle))
	newFuncs.lastUsedMode = mode
end
function kuertee_reset_mouse.OnOpenFullScreenMenu ()
	Helper.debugText ("kuertee_reset_mouse.OnOpenFullScreenMenu")
	if newFuncs.isAnalog (newFuncs.lastUsedMode) then
		if newFuncs.resetGamepadEnd and newFuncs.resetGamepadEnd ~= "disabled" then
			newFuncs.setMouseCursorPosition (newFuncs.resetGamepadEnd, "resetGamepadEnd")
		elseif newFuncs.x and newFuncs.y then
			-- C.SetMouseCursorPosition (newFuncs.x, newFuncs.y)
			newFuncs.setMouseCursorPosition ("previous", "previous")
		end
	elseif newFuncs.x and newFuncs.y then
		-- C.SetMouseCursorPosition (newFuncs.x, newFuncs.y)
		newFuncs.setMouseCursorPosition ("previous", "previous")
	end
end
function kuertee_reset_mouse.OnCloseFullScreenMenu (_, location)
	Helper.debugText ("kuertee_reset_mouse.OnCloseFullScreenMenu location: " .. tostring (location))
	local mousepos = C.GetCenteredMousePos()
	local x = mousepos.x
	local y = mousepos.y
	Helper.debugText ("kuertee_reset_mouse.OnCloseFullScreenMenu x: " .. tostring (x) .. " y: " .. tostring (y))
	newFuncs.x = x
	newFuncs.y = y
	if location and location ~= "disabled" then
		newFuncs.setMouseCursorPosition (location, "menuClose")
	end
end
function kuertee_reset_mouse.OnAutoPilotEnd (_, location)
	Helper.debugText ("kuertee_reset_mouse.OnAutoPilotEnd location: " .. tostring (location))
	if location and location ~= "disabled" then
		newFuncs.setMouseCursorPosition (location, "autopilotEnd")
	end
end
function kuertee_reset_mouse.DisableMouseSteering (_, isDisable)
	local time = C.GetCurrentGameTime()
	Helper.debugText ("kuertee_reset_mouse.DisableMouseSteering isDisable: " .. tostring (isDisable))
	local mode, angle = GetControllerInfo()
	Helper.debugText ("kuertee_reset_mouse.DisableMouseSteering mode: " .. tostring (mode) .. " angle: " .. tostring (angle))
	Helper.debugText ("kuertee_reset_mouse.DisableMouseSteering wasMouseSteering: " .. tostring (kuertee_reset_mouse.wasMouseSteering))
	if isDisable == 1 or isDisable == true then
		if mode == "mouseSteering" then
			kuertee_reset_mouse.wasMouseSteering = true
			if (not kuertee_reset_mouse.time_lastToggledOff) or time - kuertee_reset_mouse.time_lastToggledOff > 1 then
				C.ToggleMouseSteeringMode ()
			end
		end
		kuertee_reset_mouse.time_lastToggledOff = time
	else
		if kuertee_reset_mouse.wasMouseSteering == true then
			if mode ~= "mouseSteering" then
				kuertee_reset_mouse.wasMouseSteering = false
				if (not kuertee_reset_mouse.time_lastToggledOn) or time - kuertee_reset_mouse.time_lastToggledOn > 1 then
					C.SetMouseCursorPosition (0, 0)
					C.ToggleMouseSteeringMode ()
				end
			end
		end
		kuertee_reset_mouse.time_lastToggledOn = time
	end
end
function kuertee_reset_mouse.AutoCamCutscene_On (_)
	newFuncs.setMouseCursorPosition ("br", "autocam_cutscene_on")
end
function kuertee_reset_mouse.AutoCamCutscene_Off (_)
	newFuncs.setMouseCursorPosition ("c", "autocam_cutscene_off")
end
newFuncs.mouseCursorPositionId = "none"
function newFuncs.setMouseCursorPosition (location, id)
	if (id ~= newFuncs.mouseCursorPositionId or id == 'menuClose' or id == "autopilotEnd") then
		local mousepos = C.GetCenteredMousePos()
		local x = mousepos.x
		local y = mousepos.y
		if location == "c" then
			newFuncs.x = x
			newFuncs.y = y
			C.SetMouseCursorPosition (0, 0)
		elseif location == "tl" then
			newFuncs.x = x
			newFuncs.y = y
			C.SetMouseCursorPosition (-1000000, -1000000)
		elseif location == "tr" then
			newFuncs.x = x
			newFuncs.y = y
			C.SetMouseCursorPosition (1000000, -1000000)
		elseif location == "br" then
			newFuncs.x = x
			newFuncs.y = y
			C.SetMouseCursorPosition (1000000, 1000000)
		elseif location == "bl" then
			newFuncs.x = x
			newFuncs.y = y
			C.SetMouseCursorPosition (-1000000, 1000000)
		elseif location == "previous" then
			if newFuncs.x and newFuncs.y then
				C.SetMouseCursorPosition (newFuncs.x, newFuncs.y)
				newFuncs.x = nil
				newFuncs.y = nil
			end
		end
	end
	newFuncs.mouseCursorPositionId = id
end
function newFuncs.isAnalog(mode)
	return mode == "gamepad" or mode == "joystick" or mode == "touch"
end
function kuertee_reset_mouse.OnOptionChange_GamepadStart (_, location)
	Helper.debugText ("kuertee_reset_mouse.lua: OnOptionChange_GamepadStart: " .. tostring(location))
	newFuncs.resetGamepadStart = location
end
function kuertee_reset_mouse.OnOptionChange_GamepadEnd (_, location)
	Helper.debugText ("kuertee_reset_mouse.lua: OnOptionChange_GamepadEnd: " .. tostring(location))
	newFuncs.resetGamepadEnd = location
end
function newFuncs.onUpdate_before_frame_update (frame)
	-- mode, angle = GetControllerInfo()
	-- Returns the current input mode ("mouseSteering"|"mouseCursor"|"gamepad"|"touch"|"joystick") and the joystick input angle (only reasonable in "touch", "joystick", or "gamepad" mode).
	-- The angle value will be -1, if the joystick is in its safe area. Otherwise it returns the angle in radian [0..2π] (with 0 corresponding to the joystick pointing upwards - rotation is clockwise).
	local mode, angle
	mode, angle = GetControllerInfo()
	Helper.debugText ("kuertee_reset_mouse " .. mode .. " angle " .. angle)
	Helper.debugText ("isAnalog", isAnalog)
	Helper.debugText ("newFuncs.lastUsedMode", newFuncs.lastUsedMode)
	-- start: Mycu code
	if newFuncs.lastUsedMode ~= mode then
		if newFuncs.isAnalog(mode) and newFuncs.lastUsedMode ~= "mouseSteering" then
			-- C.SetMouseCursorPosition (1000000, -1000000)
			if newFuncs.resetGamepadStart and newFuncs.resetGamepadStart ~= "disabled" then
				newFuncs.setMouseCursorPosition (newFuncs.resetGamepadStart, "resetGamepadStart")
			end
		elseif newFuncs.isAnalog(newFuncs.lastUsedMode) then
			-- C.SetMouseCursorPosition (0, 0)
			if newFuncs.resetGamepadEnd and newFuncs.resetGamepadEnd ~= "disabled" then
				newFuncs.setMouseCursorPosition (newFuncs.resetGamepadEnd, "resetGamepadEnd")
			end
		end
	end
	newFuncs.lastUsedMode = mode
	-- end: Mycu code
end

ModLua.init()
<?xml version="1.0" encoding="utf-8"?>
<content id="" name="" author="kuertee, Mycu" version="901" date="2026-10-03" save="false" description="" lastupdate="">
  <text language="" description="UI: Reset mouse on menu and game controller&#13;&#10; https://www.nexusmods.com/x4foundations/mods/542&#13;&#10; by kuertee&#13;&#10; &#13;&#10; Mod effects:&#13;&#10; ============&#13;&#10; 1. auto-pilot disengage: mouse to the centre,&#13;&#10; 2. close of menu: mouse to the centre,&#13;&#10; 3. open of menu: mouse to the previous mouse position,&#13;&#10; 4. game controller move: hide mouse,&#13;&#10; 5. mouse move after game controller move: show mouse,&#13;&#10; 6. interact menu or conversation menu: disable mouse steering&#13;&#10; "/>
</content>
