diff --git a/files/data/l10n/OMWControls/en.yaml b/files/data/l10n/OMWControls/en.yaml index 1be6da6baf..dfb78c0717 100644 --- a/files/data/l10n/OMWControls/en.yaml +++ b/files/data/l10n/OMWControls/en.yaml @@ -17,6 +17,14 @@ smoothControllerMovement: "Smooth Controller Movement" smoothControllerMovementDescription: | Enables smooth controller stick movement. This makes the transition from walking to running less abrupt. +oneHandedControls: "One Handed Controls" +oneHandedControlsDescription: | + Changes the controls so the normal A and D controls will instead move the camera left and right. + +automaticWeaponHit: "Automatic Weapon Hit" +automaticWeaponHitDescription: | + Will cause the weapon swing to be held for a moment and swing automatically, so holding the key isn't necessary. + TogglePOV_name: "Toggle POV" TogglePOV_description: "Toggle between first and third person view. Hold to enter preview mode." diff --git a/files/data/scripts/omw/input/playercontrols.lua b/files/data/scripts/omw/input/playercontrols.lua index 862fa33452..4cb9e9e134 100644 --- a/files/data/scripts/omw/input/playercontrols.lua +++ b/files/data/scripts/omw/input/playercontrols.lua @@ -84,7 +84,7 @@ local movementControlsOverridden = false local autoMove = false local attemptToJump = false -local function processMovement() +local function processMovement(dt) local movement = input.getRangeActionValue('MoveForward') - input.getRangeActionValue('MoveBackward') local sideMovement = input.getRangeActionValue('MoveRight') - input.getRangeActionValue('MoveLeft') local run = input.getBooleanActionValue('Run') ~= settings:get('alwaysRun') @@ -94,9 +94,15 @@ local function processMovement() elseif autoMove then movement = 1 end - + local turnSpeed = 4--to be replaced with setting + if settings:get("oneHandedControls") then + if sideMovement ~= 0 then + self.controls.yawChange = (sideMovement * dt) * turnSpeed + end + else + self.controls.sideMovement = sideMovement + end self.controls.movement = movement - self.controls.sideMovement = sideMovement self.controls.run = run self.controls.jump = attemptToJump @@ -167,13 +173,23 @@ local startUse = false input.registerActionHandler('Use', async:callback(function(value) if value and combatAllowed() then startUse = true end end)) -local function processAttacking() +local swingStart = 0 +local swingLength = 0.3 +local function processAttacking(dt) -- for spell-casting, set controls.use to true for exactly one frame -- otherwise spell casting is attempted every frame while Use is true if Actor.getStance(self) == Actor.STANCE.Spell then self.controls.use = startUse and 1 or 0 elseif Actor.getStance(self) == Actor.STANCE.Weapon and input.getBooleanActionValue('Use') then self.controls.use = 1 + if settings:get("automaticWeaponHit") then + swingStart = swingLength + end + end + + if swingStart > 0 and Actor.getStance(self) == Actor.STANCE.Weapon then + swingStart = swingStart - dt + self.controls.use = 1 else self.controls.use = 0 end @@ -216,16 +232,16 @@ input.registerTriggerHandler('QuickKeysMenu', async:callback(function() end end)) -local function onFrame(_) +local function onFrame(dt) if movementAllowed() then - processMovement() + processMovement(dt) elseif not movementControlsOverridden then self.controls.movement = 0 self.controls.sideMovement = 0 self.controls.jump = false end if combatAllowed() then - processAttacking() + processAttacking(dt) end attemptToJump = false end diff --git a/files/data/scripts/omw/input/settings.lua b/files/data/scripts/omw/input/settings.lua index 83a862b2d2..1516a3cba9 100644 --- a/files/data/scripts/omw/input/settings.lua +++ b/files/data/scripts/omw/input/settings.lua @@ -35,6 +35,9 @@ I.Settings.registerGroup({ boolSetting('alwaysRun', false), boolSetting('toggleSneak', false), -- TODO: consider removing this setting when we have the advanced binding UI boolSetting('smoothControllerMovement', true), + --should probably be in an accessibility section + boolSetting('oneHandedControls', false), + boolSetting('automaticWeaponHit', false), }, })