diff --git a/saveSlot/LevelStart0 b/saveSlot/LevelStart0 index 60beb04a4..038863308 100644 --- a/saveSlot/LevelStart0 +++ b/saveSlot/LevelStart0 @@ -1 +1 @@ -{"_lWorld":{"_creatures":[[0,{"_crPos":[20.0,20.0],"_crOldPos":[20.0,0.0],"_crZ":0.0,"_crZVel":0.0,"_crDir":1.5707964,"_crMvDir":1.5707964,"_crMvAim":1.5707964,"_crType":{"tag":"Avatar","_avatarPulse":{"_pulseRate":55,"_pulseProgress":0},"_avatarMaterial":"Flesh","_avStrength":50,"_avDexterity":50,"_avIntelligence":50,"_avMoveSpeed":3.0},"_crID":0,"_crHP":10000,"_crInv":{"_unNIntMap":[]},"_crManipulation":{"tag":"Manipulator","_manObject":{"tag":"SelNothing"}},"_crEquipment":[],"_crDamage":[],"_crPain":0,"_crStance":{"_carriage":{"tag":"Walking","_strideAmount":0.0,"_currentFoot":"LeftForward"},"_posture":"AtEase","_strideLength":40.0},"_crActionPlan":{"tag":"ActionPlan","_apImpulse":[],"_apAction":[],"_apStrategy":{"tag":"StrategyActions","contents":[{"tag":"WatchAndWait"},[{"tag":"StartSentinelPost"}]]},"_apGoal":[{"tag":"LiveLongAndProsper"}]},"_crPerception":{"_cpVigilance":"Lethargic","_cpAttention":{"tag":"AttentiveTo","_getAttentiveTo":[]},"_cpAwareness":[],"_cpVision":{"_viFOV":{"tag":"FloatFOV","contents":0.8},"_viDist":{"tag":"FloatDistLinearNearFar","contents":[500.0,10.0,1.0]}},"_cpAudition":{"_auDist":{"tag":"FloatID"}}},"_crMemory":{"_soundsToInvestigate":[],"_nodesSearched":[]},"_crVocalization":{"tag":"Mute"},"_crFaction":{"tag":"PlayerFaction"},"_crGroup":{"tag":"LoneWolf"},"_crIntention":{"_targetCr":null,"_mvToPoint":null,"_viewPoint":null},"_crName":"DEFAULTCRNAME","_crDeathTimer":0}]],"_creatureGroups":[],"_items":[],"_clouds":[],"_dusts":[],"_gusts":[],"_props":[],"_debris":[],"_projectiles":[],"_bullets":[],"_radarSweeps":[],"_energyBalls":[],"_flames":[],"_sparks":[],"_radarBlips":[],"_flares":[],"_teslaArcs":[],"_arcNode":[],"_shockwaves":[],"_lasers":[],"_pulseLasers":[],"_pulseBalls":[],"_linearShockwaves":[],"_tractorBeams":[],"_walls":[[0,{"_wlLine":[[40.0,80.0],[0.0,80.0]],"_wlID":0,"_wlColor":[0.6,0.6,0.6,1.0],"_wlOpacity":{"tag":"Opaque","_opTexture":11},"_wlPathable":false,"_wlPenetrable":false,"_wlBouncy":true,"_wlWalkable":false,"_wlTouchThrough":false,"_wlFireThrough":false,"_wlReflect":false,"_wlUnshadowed":true,"_wlRotateTo":true,"_wlStructure":{"tag":"StandaloneWall"},"_wlHeight":100.0,"_wlMaterial":"Stone"}],[1,{"_wlLine":[[0.0,80.0],[0.0,0.0]],"_wlID":1,"_wlColor":[0.6,0.6,0.6,1.0],"_wlOpacity":{"tag":"Opaque","_opTexture":11},"_wlPathable":false,"_wlPenetrable":false,"_wlBouncy":true,"_wlWalkable":false,"_wlTouchThrough":false,"_wlFireThrough":false,"_wlReflect":false,"_wlUnshadowed":true,"_wlRotateTo":true,"_wlStructure":{"tag":"StandaloneWall"},"_wlHeight":100.0,"_wlMaterial":"Stone"}],[2,{"_wlLine":[[0.0,0.0],[40.0,0.0]],"_wlID":2,"_wlColor":[0.6,0.6,0.6,1.0],"_wlOpacity":{"tag":"Opaque","_opTexture":11},"_wlPathable":false,"_wlPenetrable":false,"_wlBouncy":true,"_wlWalkable":false,"_wlTouchThrough":false,"_wlFireThrough":false,"_wlReflect":false,"_wlUnshadowed":true,"_wlRotateTo":true,"_wlStructure":{"tag":"StandaloneWall"},"_wlHeight":100.0,"_wlMaterial":"Stone"}],[3,{"_wlLine":[[40.0,0.0],[40.0,80.0]],"_wlID":3,"_wlColor":[0.6,0.6,0.6,1.0],"_wlOpacity":{"tag":"Opaque","_opTexture":11},"_wlPathable":false,"_wlPenetrable":false,"_wlBouncy":true,"_wlWalkable":false,"_wlTouchThrough":false,"_wlFireThrough":false,"_wlReflect":false,"_wlUnshadowed":true,"_wlRotateTo":true,"_wlStructure":{"tag":"StandaloneWall"},"_wlHeight":100.0,"_wlMaterial":"Stone"}]],"_wallDamages":[],"_doors":[],"_machines":[],"_terminals":[],"_oldMagnets":[],"_magnets":[],"_blocks":[],"_coordinates":[],"_triggers":[],"_floorItems":[],"_modifications":[],"_worldEvents":[],"_delayedEvents":[],"_pressPlates":[],"_buttons":[],"_foregroundShapes":[[0,{"_fsID":0,"_fsPos":[39.5,20.0],"_fsDir":0.0,"_fsRad":20.0,"_fsSPic":[[{"_sfType":{"tag":"FlatFaces","_topBoxSize":4},"_sfVs":[[-39.5,18.0,53.0],[-39.5,18.0,50.0],[0.5,18.0,53.0],[0.5,18.0,50.0],[0.5,21.0,53.0],[0.5,21.0,50.0],[-39.5,21.0,53.0],[-39.5,21.0,50.0]],"_sfColor":[1.0,0.5,0.0,1.0],"_sfShadowImportance":"Typical","_sfSize":"Medium"}],[]]}]],"_corpses":[],"_lightSources":[[0,{"_lsID":0,"_lsParam":{"_lsPos":[20.0,39.5,45.0],"_lsRad":450.0,"_lsCol":[0.75,0.75,0.75]}}]],"_lights":[],"_seenLocations":[[0,[{"tag":"WdYouPos"},"CURRENT POSITION"]],[1,[{"tag":"WdP2Const","contents":[0.0,0.0]},"START POSITION"]]],"_selLocation":0,"_distortions":[],"_lClock":0,"_lTestString":[],"_lTestInt":0,"_hotkeys":[],"_imHotkeys":{"_unNIntMap":[]},"_lAimPos":[0.0,0.0],"_lInvLock":false,"_respawnPos":[[20.0,20.0],1.5707964]},"_cwGen":{"_cwgParams":{"_sensorCoding":[["LaserSensor",["AZURE","SQUARE"]],["ElectricSensor",["RED","THREELINES"]],["ThermalSensor",["ORANGE","CIRCLE"]],["PhysicalSensor",["GREEN","PLUS"]]]},"_cwgWorldBounds":{"_bdMinX":0.0,"_bdMaxX":40.0,"_bdMinY":0.0,"_bdMaxY":80.0},"_cwgGameRooms":[{"_grViewpoints":[[40.0,80.0],[0.0,80.0],[0.0,0.0],[40.0,0.0],[20.0,70.0],[20.0,70.0],[20.0,10.0],[20.0,70.0]],"_grViewpointsEx":[],"_grBound":[[72.31875,-38.150997],[94.829636,25.875957],[94.829636,54.124043],[72.31875,118.151],[-32.31875,118.151],[-54.82963,54.124043],[-54.82963,25.875957],[-32.31875,-38.150997]],"_grDir":0.0,"_grLinkDirs":[],"_grName":"Corridor"}],"_cwgRoomClipping":[{"_cpPoints":[[-5.0,50.0],[-5.0,30.0],[45.0,30.0],[45.0,50.0]],"_cpCen":[20.0,40.0],"_cpRad":26.925823}],"_cwgSeed":7114951007332849727},"_cClock":0,"_cwTiles":[{"_tilePoly":[[0.0,80.0],[0.0,0.0],[40.0,0.0],[40.0,80.0]],"_tileZero":[0.0,80.0],"_tileTangentPos":[0.0,30.0],"_tileArrayZ":5.0}],"_pathGraph":[[0,[[[1,[{"_peStart":[20.0,60.0],"_peEnd":[20.0,10.0],"_peDist":50.0,"_peObstacles":[]}]]],[20.0,10.0],[[1,[{"_peStart":[20.0,10.0],"_peEnd":[20.0,60.0],"_peDist":50.0,"_peObstacles":[]}]]]]],[1,[[[0,[{"_peStart":[20.0,10.0],"_peEnd":[20.0,60.0],"_peDist":50.0,"_peObstacles":[]}]],[2,[{"_peStart":[20.0,70.0],"_peEnd":[20.0,60.0],"_peDist":10.0,"_peObstacles":[]}]]],[20.0,60.0],[[0,[{"_peStart":[20.0,60.0],"_peEnd":[20.0,10.0],"_peDist":50.0,"_peObstacles":[]}]],[2,[{"_peStart":[20.0,60.0],"_peEnd":[20.0,70.0],"_peDist":10.0,"_peObstacles":[]}]]]]],[2,[[[1,[{"_peStart":[20.0,60.0],"_peEnd":[20.0,70.0],"_peDist":10.0,"_peObstacles":[]}]]],[20.0,70.0],[[1,[{"_peStart":[20.0,70.0],"_peEnd":[20.0,60.0],"_peDist":10.0,"_peObstacles":[]}]]]]]],"_numberFloorVerxs":0,"_chasms":[],"_numberChasmVerxs":0} \ No newline at end of file +{"_lWorld":{"_creatures":[[0,{"_crPos":[20.0,20.0],"_crOldPos":[20.0,0.0],"_crZ":0.0,"_crZVel":0.0,"_crDir":1.5707964,"_crMvDir":1.5707964,"_crMvAim":1.5707964,"_crType":{"tag":"Avatar","_avatarPulse":{"_pulseRate":55,"_pulseProgress":0},"_avatarMaterial":"Flesh","_avStrength":50,"_avDexterity":50,"_avIntelligence":50,"_avMoveSpeed":3.0},"_crID":0,"_crHP":10000,"_crInv":{"_unNIntMap":[]},"_crManipulation":{"tag":"Manipulator","_manObject":{"tag":"SelNothing"}},"_crEquipment":[],"_crDamage":[],"_crPain":0,"_crStance":{"_carriage":{"tag":"Walking","_strideAmount":0.0,"_currentFoot":"LeftForward"},"_posture":{"tag":"AtEase"},"_strideLength":40.0},"_crActionPlan":{"tag":"ActionPlan","_apImpulse":[],"_apAction":[],"_apStrategy":{"tag":"StrategyActions","contents":[{"tag":"WatchAndWait"},[{"tag":"StartSentinelPost"}]]},"_apGoal":[{"tag":"LiveLongAndProsper"}]},"_crPerception":{"_cpVigilance":"Lethargic","_cpAttention":{"tag":"AttentiveTo","_getAttentiveTo":[]},"_cpAwareness":[],"_cpVision":{"_viFOV":{"tag":"FloatFOV","contents":0.8},"_viDist":{"tag":"FloatDistLinearNearFar","contents":[500.0,10.0,1.0]}},"_cpAudition":{"_auDist":{"tag":"FloatID"}}},"_crMemory":{"_soundsToInvestigate":[],"_nodesSearched":[]},"_crVocalization":{"tag":"Mute"},"_crFaction":{"tag":"PlayerFaction"},"_crGroup":{"tag":"LoneWolf"},"_crIntention":{"_targetCr":null,"_mvToPoint":null,"_viewPoint":null},"_crName":"DEFAULTCRNAME","_crDeathTimer":0}]],"_creatureGroups":[],"_items":[],"_clouds":[],"_dusts":[],"_gusts":[],"_props":[],"_debris":[],"_projectiles":[],"_bullets":[],"_radarSweeps":[],"_energyBalls":[],"_flames":[],"_sparks":[],"_radarBlips":[],"_flares":[],"_teslaArcs":[],"_arcNode":[],"_shockwaves":[],"_lasers":[],"_pulseLasers":[],"_pulseBalls":[],"_linearShockwaves":[],"_tractorBeams":[],"_walls":[[0,{"_wlLine":[[40.0,80.0],[0.0,80.0]],"_wlID":0,"_wlColor":[0.6,0.6,0.6,1.0],"_wlOpacity":{"tag":"Opaque","_opTexture":11},"_wlPathable":false,"_wlPenetrable":false,"_wlBouncy":true,"_wlWalkable":false,"_wlTouchThrough":false,"_wlFireThrough":false,"_wlReflect":false,"_wlUnshadowed":true,"_wlRotateTo":true,"_wlStructure":{"tag":"StandaloneWall"},"_wlHeight":100.0,"_wlMaterial":"Stone"}],[1,{"_wlLine":[[0.0,80.0],[0.0,0.0]],"_wlID":1,"_wlColor":[0.6,0.6,0.6,1.0],"_wlOpacity":{"tag":"Opaque","_opTexture":11},"_wlPathable":false,"_wlPenetrable":false,"_wlBouncy":true,"_wlWalkable":false,"_wlTouchThrough":false,"_wlFireThrough":false,"_wlReflect":false,"_wlUnshadowed":true,"_wlRotateTo":true,"_wlStructure":{"tag":"StandaloneWall"},"_wlHeight":100.0,"_wlMaterial":"Stone"}],[2,{"_wlLine":[[0.0,0.0],[40.0,0.0]],"_wlID":2,"_wlColor":[0.6,0.6,0.6,1.0],"_wlOpacity":{"tag":"Opaque","_opTexture":11},"_wlPathable":false,"_wlPenetrable":false,"_wlBouncy":true,"_wlWalkable":false,"_wlTouchThrough":false,"_wlFireThrough":false,"_wlReflect":false,"_wlUnshadowed":true,"_wlRotateTo":true,"_wlStructure":{"tag":"StandaloneWall"},"_wlHeight":100.0,"_wlMaterial":"Stone"}],[3,{"_wlLine":[[40.0,0.0],[40.0,80.0]],"_wlID":3,"_wlColor":[0.6,0.6,0.6,1.0],"_wlOpacity":{"tag":"Opaque","_opTexture":11},"_wlPathable":false,"_wlPenetrable":false,"_wlBouncy":true,"_wlWalkable":false,"_wlTouchThrough":false,"_wlFireThrough":false,"_wlReflect":false,"_wlUnshadowed":true,"_wlRotateTo":true,"_wlStructure":{"tag":"StandaloneWall"},"_wlHeight":100.0,"_wlMaterial":"Stone"}]],"_wallDamages":[],"_doors":[],"_machines":[],"_terminals":[],"_oldMagnets":[],"_magnets":[],"_blocks":[],"_coordinates":[],"_triggers":[],"_floorItems":[],"_modifications":[],"_worldEvents":[],"_delayedEvents":[],"_pressPlates":[],"_buttons":[],"_foregroundShapes":[[0,{"_fsID":0,"_fsPos":[39.5,20.0],"_fsDir":0.0,"_fsRad":20.0,"_fsSPic":[[{"_sfType":{"tag":"FlatFaces","_topBoxSize":4},"_sfVs":[[-39.5,18.0,53.0],[-39.5,18.0,50.0],[0.5,18.0,53.0],[0.5,18.0,50.0],[0.5,21.0,53.0],[0.5,21.0,50.0],[-39.5,21.0,53.0],[-39.5,21.0,50.0]],"_sfColor":[1.0,0.5,0.0,1.0],"_sfShadowImportance":"Typical","_sfSize":"Medium"}],[]]}]],"_corpses":[],"_lightSources":[[0,{"_lsID":0,"_lsParam":{"_lsPos":[20.0,39.5,45.0],"_lsRad":450.0,"_lsCol":[0.75,0.75,0.75]}}]],"_lights":[],"_seenLocations":[[0,[{"tag":"WdYouPos"},"CURRENT POSITION"]],[1,[{"tag":"WdP2Const","contents":[0.0,0.0]},"START POSITION"]]],"_selLocation":0,"_distortions":[],"_lClock":0,"_lTestString":[],"_lTestInt":0,"_hotkeys":[],"_imHotkeys":{"_unNIntMap":[]},"_lAimPos":[0.0,0.0],"_lInvLock":false,"_respawnPos":[[20.0,20.0],1.5707964]},"_cwGen":{"_cwgParams":{"_sensorCoding":[["LaserSensor",["AZURE","SQUARE"]],["ElectricSensor",["RED","THREELINES"]],["ThermalSensor",["ORANGE","CIRCLE"]],["PhysicalSensor",["GREEN","PLUS"]]]},"_cwgWorldBounds":{"_bdMinX":0.0,"_bdMaxX":40.0,"_bdMinY":0.0,"_bdMaxY":80.0},"_cwgGameRooms":[{"_grViewpoints":[[40.0,80.0],[0.0,80.0],[0.0,0.0],[40.0,0.0],[20.0,70.0],[20.0,70.0],[20.0,10.0],[20.0,70.0]],"_grViewpointsEx":[],"_grBound":[[72.31875,-38.150997],[94.829636,25.875957],[94.829636,54.124043],[72.31875,118.151],[-32.31875,118.151],[-54.82963,54.124043],[-54.82963,25.875957],[-32.31875,-38.150997]],"_grDir":0.0,"_grLinkDirs":[],"_grName":"Corridor"}],"_cwgRoomClipping":[{"_cpPoints":[[-5.0,50.0],[-5.0,30.0],[45.0,30.0],[45.0,50.0]],"_cpCen":[20.0,40.0],"_cpRad":26.925823}],"_cwgSeed":7114951007332849727},"_cClock":0,"_cwTiles":[{"_tilePoly":[[0.0,80.0],[0.0,0.0],[40.0,0.0],[40.0,80.0]],"_tileZero":[0.0,80.0],"_tileTangentPos":[0.0,30.0],"_tileArrayZ":5.0}],"_pathGraph":[[0,[[[1,[{"_peStart":[20.0,60.0],"_peEnd":[20.0,10.0],"_peDist":50.0,"_peObstacles":[]}]]],[20.0,10.0],[[1,[{"_peStart":[20.0,10.0],"_peEnd":[20.0,60.0],"_peDist":50.0,"_peObstacles":[]}]]]]],[1,[[[0,[{"_peStart":[20.0,10.0],"_peEnd":[20.0,60.0],"_peDist":50.0,"_peObstacles":[]}]],[2,[{"_peStart":[20.0,70.0],"_peEnd":[20.0,60.0],"_peDist":10.0,"_peObstacles":[]}]]],[20.0,60.0],[[0,[{"_peStart":[20.0,60.0],"_peEnd":[20.0,10.0],"_peDist":50.0,"_peObstacles":[]}]],[2,[{"_peStart":[20.0,60.0],"_peEnd":[20.0,70.0],"_peDist":10.0,"_peObstacles":[]}]]]]],[2,[[[1,[{"_peStart":[20.0,60.0],"_peEnd":[20.0,70.0],"_peDist":10.0,"_peObstacles":[]}]]],[20.0,70.0],[[1,[{"_peStart":[20.0,70.0],"_peEnd":[20.0,60.0],"_peDist":10.0,"_peObstacles":[]}]]]]]],"_numberFloorVerxs":0,"_chasms":[],"_numberChasmVerxs":0} \ No newline at end of file diff --git a/src/Dodge/Creature/HandPos.hs b/src/Dodge/Creature/HandPos.hs index b46b965aa..6d0f66d9a 100644 --- a/src/Dodge/Creature/HandPos.hs +++ b/src/Dodge/Creature/HandPos.hs @@ -13,9 +13,10 @@ module Dodge.Creature.HandPos ( translateToRightHand, backPQ, headPQ, + translateToES, ) where ---import Dodge.Data.Equipment.Misc +import Dodge.Data.Equipment.Misc import qualified Data.IntMap.Strict as IM import qualified Quaternion as Q import Control.Lens @@ -24,8 +25,24 @@ import Dodge.Data.Creature import Geometry import ShapePicture -translatePointToRightHand :: IM.IntMap Item -> Creature -> Point3 -> Point3 -translatePointToRightHand m cr p = fst (rightHandPQ m cr `Q.comp` (p,Q.qID)) +translateToES :: Creature -> EquipSite -> Point3 -> Point3 +translateToES cr es p = fst (equipSitePQ es cr `Q.comp` (p,Q.qID)) + +equipSitePQ :: EquipSite -> Creature -> Point3Q +equipSitePQ = \case + OnLeftWrist -> leftWristPQ + OnRightWrist -> rightWristPQ + OnHead -> headPQ + OnChest -> chestPQ + OnBack -> backPQ + OnLegs -> legsPQ + +legsPQ :: a +legsPQ = undefined + + +translatePointToRightHand :: Creature -> Point3 -> Point3 +translatePointToRightHand cr p = fst (rightHandPQ cr `Q.comp` (p,Q.qID)) --equipSitePQ :: EquipSite -> IM.IntMap Item -> Creature -> Point3Q --equipSitePQ = \case @@ -35,11 +52,11 @@ translatePointToRightHand m cr p = fst (rightHandPQ m cr `Q.comp` (p,Q.qID)) -- OnChest -> chestPQ -- _ -> undefined -rightHandPQ :: IM.IntMap Item -> Creature -> Point3Q -rightHandPQ m cr - | oneH m cr = (V3 11 (-3) 20, Q.qID) - | twists m cr = (V3 0 5 20, Q.qz (-1)) `Q.comp` (V3 4 (-10) 0,Q.qID) - | twoFlat m cr = (V3 4 (-8) 10, Q.qID) +rightHandPQ :: Creature -> Point3Q +rightHandPQ cr + | oneH cr = (V3 11 (-3) 20, Q.qID) + | twists cr = (V3 0 5 20, Q.qz (-1)) `Q.comp` (V3 4 (-10) 0,Q.qID) + | twoFlat cr = (V3 4 (-8) 10, Q.qID) | otherwise = case cr ^? crStance . carriage of Just (Walking sa LeftForward) -> (V3 (- f sa) (- off) 10, Q.qID) Just (Walking sa RightForward) -> (V3 (- g sa) (- off) 10, Q.qID) @@ -50,18 +67,21 @@ rightHandPQ m cr f i = negate 2 + negate 6 * (sLen - i) / sLen g i = negate 2 + negate 6 * i / sLen -translateToRightHand :: IM.IntMap Item -> Creature -> SPic -> SPic -translateToRightHand m = overPosSP . translatePointToRightHand m +translateToRightHand :: Creature -> SPic -> SPic +translateToRightHand = overPosSP . translatePointToRightHand -translateToRightWrist :: IM.IntMap Item -> Creature -> SPic -> SPic -translateToRightWrist m cr = overPosSP - (\p -> fst $ rightHandPQ m cr `Q.comp` (V3 0 (-4) (-4)+p, Q.qID)) +translateToRightWrist :: Creature -> SPic -> SPic +translateToRightWrist cr = overPosSP + (\p -> fst $ rightHandPQ cr `Q.comp` (V3 0 (-4) (-4)+p, Q.qID)) -leftHandPQ :: IM.IntMap Item -> Creature -> Point3Q -leftHandPQ m cr - | oneH m cr = (V3 0 off 10, Q.qz 0.4) - | twists m cr = (V3 0 5 20, Q.qz (-1)) `Q.comp` (V3 12 4 0, Q.qz 0.4) - | twoFlat m cr = (V3 4 8 10, Q.qID) +rightWristPQ :: Creature -> Point3Q +rightWristPQ cr = rightHandPQ cr `Q.comp` (V3 0 (-4) (-4), Q.qID) + +leftHandPQ :: Creature -> Point3Q +leftHandPQ cr + | oneH cr = (V3 0 off 10, Q.qz 0.4) + | twists cr = (V3 0 5 20, Q.qz (-1)) `Q.comp` (V3 12 4 0, Q.qz 0.4) + | twoFlat cr = (V3 4 8 10, Q.qID) | otherwise = case cr ^? crStance . carriage of Just (Walking sa RightForward) -> (V3 (- f sa) off 10 , Q.qID) Just (Walking sa LeftForward) -> (V3 (- g sa) off 10 , Q.qID) @@ -72,15 +92,17 @@ leftHandPQ m cr f i = negate 2 + negate 6 * (sLen - i) / sLen g i = negate 2 + negate 6 * i / sLen -translatePointToLeftHand :: IM.IntMap Item -> Creature -> Point3 -> Point3 -translatePointToLeftHand m cr p = fst (leftHandPQ m cr `Q.comp` (p,Q.qID)) +translatePointToLeftHand :: Creature -> Point3 -> Point3 +translatePointToLeftHand cr p = fst (leftHandPQ cr `Q.comp` (p,Q.qID)) translateToLeftHand :: IM.IntMap Item -> Creature -> SPic -> SPic -translateToLeftHand m = overPosSP . translatePointToLeftHand m +translateToLeftHand m = overPosSP . translatePointToLeftHand -translateToLeftWrist :: IM.IntMap Item -> Creature -> SPic -> SPic -translateToLeftWrist m cr = overPosSP - (\p -> fst $ leftHandPQ m cr `Q.comp` (V3 0 4 (-4)+p, Q.qID)) +translateToLeftWrist :: Creature -> SPic -> SPic +translateToLeftWrist cr = overPosSP + (\p -> fst $ leftHandPQ cr `Q.comp` (V3 0 4 (-4)+p, Q.qID)) + +leftWristPQ cr = leftHandPQ cr `Q.comp` (V3 0 4 (-4), Q.qID) leftLegPQ :: Creature -> Point3Q leftLegPQ cr = Q.comp (0,Q.qz (_crMvDir cr - _crDir cr)) @@ -114,25 +136,25 @@ translateToRightLeg :: Creature -> SPic -> SPic translateToRightLeg cr = overPosSP (\p -> fst (rightLegPQ cr `Q.comp` (p,Q.qID))) translateToHead :: IM.IntMap Item -> Creature -> SPic -> SPic -translateToHead m cr = overPosSP (\p -> fst (headPQ m cr `Q.comp` (p,Q.qID))) +translateToHead m cr = overPosSP (\p -> fst (headPQ cr `Q.comp` (p,Q.qID))) -headPQ :: IM.IntMap Item -> Creature -> Point3Q -headPQ m cr - | twists m cr = (V3 0 2 20, Q.qz (-1)) `Q.comp` (V3 (negate 2.5) 0.25 0, Q.qz 1) - | oneH m cr = (V3 0 0 20, Q.qz 0.5) `Q.comp` (V3 2.5 0 0, Q.qz (-0.5)) +headPQ :: Creature -> Point3Q +headPQ cr + | twists cr = (V3 0 2 20, Q.qz (-1)) `Q.comp` (V3 (negate 2.5) 0.25 0, Q.qz 1) + | oneH cr = (V3 0 0 20, Q.qz 0.5) `Q.comp` (V3 2.5 0 0, Q.qz (-0.5)) | otherwise = (V3 2.5 0 20, Q.qID) translatePointToHead :: IM.IntMap Item -> Creature -> Point3 -> Point3 -translatePointToHead m cr p = fst (headPQ m cr `Q.comp` (p,Q.qID)) +translatePointToHead m cr p = fst (headPQ cr `Q.comp` (p,Q.qID)) -chestPQ :: IM.IntMap Item -> Creature -> Point3Q -chestPQ m cr = backPQ m cr `Q.comp` (0,Q.qz pi) +chestPQ :: Creature -> Point3Q +chestPQ cr = backPQ cr `Q.comp` (0,Q.qz pi) translateToChest :: IM.IntMap Item -> Creature -> SPic -> SPic -translateToChest m cr = overPosSP (\p -> fst $ chestPQ m cr `Q.comp` (p,Q.qID)) +translateToChest m cr = overPosSP (\p -> fst $ chestPQ cr `Q.comp` (p,Q.qID)) -backPQ :: IM.IntMap Item -> Creature -> Point3Q -backPQ m cr - | oneH m cr = (V3 0 0 10, Q.qz 0.5) - | twists m cr = (V3 0 3 10, Q.qz (-1.5)) +backPQ :: Creature -> Point3Q +backPQ cr + | oneH cr = (V3 0 0 10, Q.qz 0.5) + | twists cr = (V3 0 3 10, Q.qz (-1.5)) | otherwise = (V3 0 0 10, Q.qz 0) diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index 93d6ea2da..00b2b6dab 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -72,7 +72,7 @@ arms :: IM.IntMap Item -> Creature -> Shape {-# INLINE arms #-} arms m cr = (^. _1) $ - translateToRightHand m cr aHand + translateToRightHand cr aHand <> translateToLeftHand m cr aHand where aHand = noPic $ translateSHz (-4) . upperPrismPolyHalfST 4 $ polyCirc 3 4 @@ -91,16 +91,16 @@ deadRot cr = overPosSH (Q.rotateToZ d) scalp :: IM.IntMap Item -> Creature -> Shape {-# INLINE scalp #-} -scalp m cr = overPosSH (\p -> fst (headPQ m cr `Q.comp` (p,Q.qID))) fhead +scalp m cr = overPosSH (\p -> fst (headPQ cr `Q.comp` (p,Q.qID))) fhead -- | twists cr = translateSHxy 0 5 . rotateSH (-1) $ translateSHxy (negate 2.5) 0.25 fhead -- | oneH cr = rotateSH 0.5 $ translateSHxy 2.5 0 fhead -- | otherwise = translateSHxy 2.5 0 fhead where fhead = colorSH (greyN 0.9) . upperPrismPolyHalfST 5 $ polyCirc 3 5 -torso :: IM.IntMap Item -> Creature -> Shape +torso :: Creature -> Shape {-# INLINE torso #-} -torso m cr = overPosSH (\p -> fst (backPQ m cr `Q.comp` (p,Q.qID))) tsh +torso cr = overPosSH (\p -> fst (backPQ cr `Q.comp` (p,Q.qID))) tsh -- | oneH cr = rotateSH 0.5 tsh -- | twists cr = -- translateSHxy 0 3 . rotateSH (-1.3) $ tsh @@ -126,7 +126,7 @@ baseShoulder = translateSHz (-20) . scaleSH (V3 0.5 1 1) . upperPrismPolyHalfMI upperBody :: IM.IntMap Item -> Creature -> Shape {-# INLINE upperBody #-} -upperBody m cr = arms m cr <> shoulderSH (torso m cr) +upperBody m cr = arms m cr <> shoulderSH (torso cr) shoulderSH :: Shape -> Shape shoulderSH = translateSHz 20 diff --git a/src/Dodge/Creature/Test.hs b/src/Dodge/Creature/Test.hs index d81edf136..fc3703892 100644 --- a/src/Dodge/Creature/Test.hs +++ b/src/Dodge/Creature/Test.hs @@ -92,24 +92,17 @@ crAwayFromPost cr = case find sentinelGoal . _apGoal $ _crActionPlan cr of --crCanShoot :: Creature -> Bool --crCanShoot cr = crIsAiming cr && crWeaponReady cr -crInAimStance :: AimStance -> IM.IntMap Item -> Creature -> Bool -crInAimStance as m cr = crIsAiming cr && mitstance == Just as - where - mitstance = do - i <- cr ^? crManipulation . manObject . imRootSelectedItem - --itm <- invRootTrees' (cr ^. crInv) ^? ix i - itm <- fmap (fmap (\(a,b,_) -> (a,b))) $ invIMDT (fmap (\k -> m ^?! ix k) (cr ^. crInv)) ^? ix (_unNInt i) - return $ itemAimStance itm - --cr ^? crInv . ix i . itUse . heldAim . aimStance +crInAimStance :: AimStance -> Creature -> Bool +crInAimStance as cr = cr ^? crStance . posture . aimStance == Just as -oneH :: IM.IntMap Item -> Creature -> Bool +oneH :: Creature -> Bool oneH = crInAimStance OneHand -twoFlat :: IM.IntMap Item -> Creature -> Bool +twoFlat :: Creature -> Bool twoFlat = crInAimStance TwoHandFlat -twists :: IM.IntMap Item -> Creature -> Bool -twists m cr = crInAimStance TwoHandUnder m cr || crInAimStance TwoHandOver m cr +twists :: Creature -> Bool +twists cr = crInAimStance TwoHandUnder cr || crInAimStance TwoHandOver cr -- the use of crOldPos is because the damage position is calculated on the -- previous frame @@ -124,11 +117,10 @@ crIsArmouredFrom m p cr = fromMaybe False $ do && angleVV (unitVectorAtAngle (_crDir cr + frontarmdirection)) (p -.- _crOldPos cr) < pi / 2 where -- even though angleVV can generate NaN, the comparison seems to deal with it - frontarmdirection - | crInAimStance OneHand m cr = 0.5 - | crInAimStance TwoHandUnder m cr = negate 1 - | crInAimStance TwoHandOver m cr = negate 1 + | crInAimStance OneHand cr = 0.5 + | crInAimStance TwoHandUnder cr = negate 1 + | crInAimStance TwoHandOver cr = negate 1 | otherwise = 0 --crOnSeg :: Point2 -> Point2 -> Creature -> Bool diff --git a/src/Dodge/Equipment.hs b/src/Dodge/Equipment.hs index a139bfc81..b68071b0a 100644 --- a/src/Dodge/Equipment.hs +++ b/src/Dodge/Equipment.hs @@ -54,9 +54,9 @@ setWristShieldPos itm cr w = w & moveWallIDUnsafe i wlline wlline = (f (V3 (-10) 7 0), f (V3 10 7 0)) invid = _ilInvID (_itLocation itm) handtrans = case cr ^? crInv . ix invid >>= \k -> w ^? cWorld . lWorld . items . ix k . itLocation . ilEquipSite . _Just of - Just OnLeftWrist -> \cr' -> translatePointToLeftHand m cr' . g - _ -> translatePointToRightHand m + Just OnLeftWrist -> \cr' -> translatePointToLeftHand cr' . g + _ -> translatePointToRightHand g - | twists m cr = (+.+.+ V3 (-5) 10 0) + | twists cr = (+.+.+ V3 (-5) 10 0) | otherwise = id f = (+.+ _crPos cr) . stripZ . rotate3 (_crDir cr) . handtrans cr diff --git a/src/Dodge/Euse.hs b/src/Dodge/Euse.hs index 320723b07..3f0c28e3e 100644 --- a/src/Dodge/Euse.hs +++ b/src/Dodge/Euse.hs @@ -39,10 +39,10 @@ setWristShieldPos itm cr x w = moveWallIDUnsafe i wlline w i = _itParamID $ _itParams itm wlline = (f (V3 (-10) 7 0), f (V3 10 7 0)) handtrans = case x of - OnLeftWrist -> \cr' -> translatePointToLeftHand m cr' . g - _ -> translatePointToRightHand m + OnLeftWrist -> \cr' -> translatePointToLeftHand cr' . g + _ -> translatePointToRightHand g - | twists m cr = (+.+.+ V3 (-5) 10 0) + | twists cr = (+.+.+ V3 (-5) 10 0) | otherwise = id f = (+.+ _crPos cr) . stripZ . rotate3 (_crDir cr) . handtrans cr diff --git a/src/Dodge/Item/Draw.hs b/src/Dodge/Item/Draw.hs index 098fa3a4d..b26093669 100644 --- a/src/Dodge/Item/Draw.hs +++ b/src/Dodge/Item/Draw.hs @@ -40,13 +40,13 @@ equipAttachPos = \case equipPosition :: EquipSite -> IM.IntMap Item -> Creature -> Point3 -> SPic -> SPic equipPosition epos m cr p sh = case epos of - OnLeftWrist -> translateToLeftWrist m cr sh - OnRightWrist -> translateToRightWrist m cr sh + OnLeftWrist -> translateToLeftWrist cr sh + OnRightWrist -> translateToRightWrist cr sh OnLegs -> translateToLeftLeg cr sh <> translateToRightLeg cr sh-- (mirrorSPxz sh) OnHead -> translateToHead m cr sh OnChest -> translateToChest m cr sh --OnBack -> translateToBack cr p sh - OnBack -> overPosSP (\x -> fst $ backPQ m cr `Q.comp` (p + x,Q.qID)) sh + OnBack -> overPosSP (\x -> fst $ backPQ cr `Q.comp` (p + x,Q.qID)) sh -- OnSpecial -> sh diff --git a/tags b/tags index 6fa266fb9..0a81d9b4d 100644 --- a/tags +++ b/tags @@ -41,8 +41,8 @@ ActionNothing src/Dodge/Data/ActionPlan.hs 83;" C ActionPlan src/Dodge/Data/ActionPlan.hs 16;" t AddGoal src/Dodge/Data/ActionPlan.hs 45;" C AimAt src/Dodge/Data/ActionPlan.hs 84;" C -AimStance src/Dodge/Data/AimStance.hs 5;" t -Aiming src/Dodge/Data/Creature/Stance.hs 35;" C +AimStance src/Dodge/Data/AimStance.hs 11;" t +Aiming src/Dodge/Data/Creature/Stance.hs 39;" C AirFiltrationSS src/Dodge/Data/Scenario.hs 95;" C AlienContact src/Dodge/Data/Scenario.hs 30;" C AllRoomClipBoundaries src/Dodge/Data/Config.hs 107;" C @@ -71,7 +71,7 @@ Arcing src/Dodge/Data/Item/Params.hs 17;" C ArmourySS src/Dodge/Data/Scenario.hs 112;" C Asleep src/Dodge/Data/Creature/Perception.hs 54;" C AsteroidStrike src/Dodge/Data/Scenario.hs 33;" C -AtEase src/Dodge/Data/Creature/Stance.hs 36;" C +AtEase src/Dodge/Data/Creature/Stance.hs 40;" C AtomicWaste src/Dodge/Data/Scenario.hs 26;" C AttachParams src/Dodge/Data/Item/Use.hs 45;" t AttachType src/Dodge/Data/Item/Combine.hs 92;" t @@ -149,7 +149,7 @@ BlockedLink src/Dodge/Data/Room.hs 48;" C BloomLayer src/Picture/Data.hs 25;" C BloomNoZWrite src/Picture/Data.hs 26;" C Blunt src/Dodge/Data/Damage.hs 21;" C -Boosting src/Dodge/Data/Creature/Stance.hs 28;" C +Boosting src/Dodge/Data/Creature/Stance.hs 32;" C BottomEscapeMenuOption src/Dodge/Data/Universe.hs 77;" C BounceBullet src/Dodge/Data/Bullet.hs 30;" C Bound_box_screen src/Dodge/Data/Config.hs 81;" C @@ -210,7 +210,7 @@ CapacitorSelf src/Dodge/Data/Muzzle.hs 24;" C CardinalCover src/Dodge/Data/CardinalPoint.hs 23;" t CardinalEightPoint src/Dodge/Data/CardinalPoint.hs 12;" t CardinalPoint src/Dodge/Data/CardinalPoint.hs 5;" t -Carriage src/Dodge/Data/Creature/Stance.hs 20;" t +Carriage src/Dodge/Data/Creature/Stance.hs 24;" t ChangePosture src/Dodge/Data/ActionPlan.hs 42;" C ChangeStrategy src/Dodge/Data/ActionPlan.hs 44;" C ChaseAI src/Dodge/Data/Creature/Misc.hs 40;" C @@ -468,13 +468,13 @@ FloatFOV src/Dodge/Data/FloatFunction.hs 13;" C FloatFloat src/Dodge/Data/FloatFunction.hs 11;" t FloatID src/Dodge/Data/FloatFunction.hs 12;" C FloatLessCheck src/Dodge/Data/FloatFunction.hs 14;" C -Floating src/Dodge/Data/Creature/Stance.hs 26;" C +Floating src/Dodge/Data/Creature/Stance.hs 30;" C FlockArmourChaseAI src/Dodge/Data/Creature/Misc.hs 48;" C Floor src/Data/Tile.hs 11;" t FloorItem src/Dodge/Data/FloorItem.hs 15;" t -Flying src/Dodge/Data/Creature/Stance.hs 27;" C +Flying src/Dodge/Data/Creature/Stance.hs 31;" C FollowImpulses src/Dodge/Data/ActionPlan.hs 182;" C -FootForward src/Dodge/Data/Creature/Stance.hs 31;" t +FootForward src/Dodge/Data/Creature/Stance.hs 35;" t FootstepSound src/Dodge/Data/SoundOrigin.hs 30;" C ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" t ForegroundShape src/Dodge/Data/ForegroundShape.hs 14;" t @@ -680,7 +680,7 @@ LayVars src/Dodge/Annotation/Data.hs 14;" C Layer src/Picture/Data.hs 22;" t LayoutVars src/Dodge/Annotation/Data.hs 14;" t LeadTarget src/Dodge/Data/ActionPlan.hs 149;" C -LeftForward src/Dodge/Data/Creature/Stance.hs 31;" C +LeftForward src/Dodge/Data/Creature/Stance.hs 35;" C LeftwardDT src/Dodge/Data/DoubleTree.hs 86;" C LeftwardLDT src/Dodge/Data/DoubleTree.hs 44;" C Lethargic src/Dodge/Data/Creature/Perception.hs 55;" C @@ -942,7 +942,7 @@ OnLegs src/Dodge/Data/Equipment/Misc.hs 27;" C OnRightWrist src/Dodge/Data/Equipment/Misc.hs 26;" C OnTurret src/Dodge/Data/Item/Location.hs 35;" C OnceSound src/Dodge/Data/SoundOrigin.hs 16;" C -OneHand src/Dodge/Data/AimStance.hs 9;" C +OneHand src/Dodge/Data/AimStance.hs 15;" C OnwardCluster src/Dodge/Data/RoomCluster.hs 13;" C OnwardList src/Dodge/Annotation/Data.hs 20;" C Opacity src/Dodge/Data/Wall.hs 40;" t @@ -1025,7 +1025,7 @@ Polyhedra src/Polyhedra/Data.hs 13;" t Polyhedron src/Polyhedra/Data.hs 13;" C PosInf src/Dodge/Data/CardinalPoint.hs 29;" C PosRooms src/Dodge/Tree/Shift.hs 28;" t -Posture src/Dodge/Data/Creature/Stance.hs 34;" t +Posture src/Dodge/Data/Creature/Stance.hs 38;" t PrWdLsId src/Dodge/Data/Prop.hs 83;" C PrWdLsLs src/Dodge/Data/Prop.hs 82;" t PrWdLsSetColor src/Dodge/Data/Prop.hs 85;" C @@ -1148,7 +1148,7 @@ Revenge src/Dodge/Data/Scenario.hs 6;" C RewindLeftClick src/Dodge/Data/World.hs 73;" C RezBaySS src/Dodge/Data/Scenario.hs 105;" C RightButtonState src/Dodge/Data/RightButtonOptions.hs 15;" t -RightForward src/Dodge/Data/Creature/Stance.hs 31;" C +RightForward src/Dodge/Data/Creature/Stance.hs 35;" C RightwardDT src/Dodge/Data/DoubleTree.hs 93;" C RightwardLDT src/Dodge/Data/DoubleTree.hs 52;" C Rocket src/Dodge/Data/Projectile.hs 34;" C @@ -1286,9 +1286,9 @@ SplitBeamCombine src/Dodge/Data/Beam.hs 42;" C SpreadGunAI src/Dodge/Data/Creature/Misc.hs 42;" C StabOrthReduce src/Dodge/Projectile/Create.hs 17;" C StabSpinIncrease src/Dodge/Projectile/Create.hs 18;" C -Stance src/Dodge/Data/Creature/Stance.hs 13;" t +Stance src/Dodge/Data/Creature/Stance.hs 17;" t StandaloneWall src/Dodge/Data/Wall/Structure.hs 13;" C -Standing src/Dodge/Data/Creature/Stance.hs 25;" C +Standing src/Dodge/Data/Creature/Stance.hs 29;" C StartSentinelPost src/Dodge/Data/ActionPlan.hs 153;" C StayInArea src/Dodge/Data/Scenario.hs 13;" C Stone src/Dodge/Data/Material.hs 11;" C @@ -1405,9 +1405,9 @@ TurnTowardCr src/Dodge/Data/CreatureEffect.hs 25;" C Turret src/Dodge/Data/Machine.hs 57;" t TurretInt src/Dodge/Data/Item/Location.hs 19;" t TwistGoal src/Dodge/Data/Scenario.hs 15;" C -TwoHandFlat src/Dodge/Data/AimStance.hs 8;" C -TwoHandOver src/Dodge/Data/AimStance.hs 7;" C -TwoHandUnder src/Dodge/Data/AimStance.hs 6;" C +TwoHandFlat src/Dodge/Data/AimStance.hs 14;" C +TwoHandOver src/Dodge/Data/AimStance.hs 13;" C +TwoHandUnder src/Dodge/Data/AimStance.hs 12;" C Typical src/Shape/Data.hs 36;" C UNDERBARRELSLOT src/Dodge/Data/Item/Combine.hs 99;" C UNIGATE src/Dodge/Data/Item/Combine.hs 31;" C @@ -1471,7 +1471,7 @@ WIRE src/Dodge/Data/Item/Combine.hs 87;" C WRISTARMOUR src/Dodge/Data/Item/Combine.hs 125;" C WRIST_ECG src/Dodge/Data/Item/Combine.hs 137;" C WaitThen src/Dodge/Data/ActionPlan.hs 103;" C -Walking src/Dodge/Data/Creature/Stance.hs 21;" C +Walking src/Dodge/Data/Creature/Stance.hs 25;" C Wall src/Dodge/Data/Wall.hs 20;" t WallArcNode src/Dodge/Data/LWorld.hs 165;" C WallDraw src/Dodge/Data/Wall.hs 47;" t @@ -1528,6 +1528,7 @@ ZombieFaction src/Dodge/Data/Creature/State.hs 16;" C __Just' src/MaybeHelp.hs 13;" f _actAction src/Dodge/Data/ActionPlan.hs 81;" f _actLabel src/Dodge/Data/ActionPlan.hs 80;" f +_aimStance src/Dodge/Data/Creature/Stance.hs 39;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 21;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 27;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 32;" f @@ -1635,7 +1636,7 @@ _camViewDistance src/Dodge/Data/Camera.hs 30;" f _camViewFrom src/Dodge/Data/Camera.hs 29;" f _camZoom src/Dodge/Data/Camera.hs 26;" f _canID src/Dodge/Data/LWorld.hs 170;" f -_carriage src/Dodge/Data/Creature/Stance.hs 14;" f +_carriage src/Dodge/Data/Creature/Stance.hs 18;" f _carteCenter src/Dodge/Data/HUD.hs 37;" f _carteRot src/Dodge/Data/HUD.hs 39;" f _carteZoom src/Dodge/Data/HUD.hs 38;" f @@ -1739,7 +1740,7 @@ _creatureGroups src/Dodge/Data/LWorld.hs 101;" f _creatures src/Dodge/Data/LWorld.hs 100;" f _csLinks src/Dodge/Data/RoomCluster.hs 10;" f _currentArc src/Dodge/Data/Item/Params.hs 17;" f -_currentFoot src/Dodge/Data/Creature/Stance.hs 23;" f +_currentFoot src/Dodge/Data/Creature/Stance.hs 27;" f _cursSides src/Dodge/Data/SelectionList.hs 20;" f _cwGen src/Dodge/Data/CWorld.hs 25;" f _cwTiles src/Dodge/Data/CWorld.hs 27;" f @@ -2153,7 +2154,7 @@ _plType src/Dodge/Data/GenWorld.hs 85;" f _playStatus src/Sound/Data.hs 17;" f _playingSounds src/Dodge/Data/World.hs 41;" f _pnZoning src/Dodge/Data/World.hs 51;" f -_posture src/Dodge/Data/Creature/Stance.hs 15;" f +_posture src/Dodge/Data/Creature/Stance.hs 19;" f _ppEvent src/Dodge/Data/PressPlate.hs 23;" f _ppID src/Dodge/Data/PressPlate.hs 24;" f _ppPict src/Dodge/Data/PressPlate.hs 20;" f @@ -2373,8 +2374,8 @@ _ssItems src/Dodge/Data/SelectionList.hs 30;" f _ssOffset src/Dodge/Data/SelectionList.hs 31;" f _ssShownItems src/Dodge/Data/SelectionList.hs 32;" f _ssShownLength src/Dodge/Data/SelectionList.hs 33;" f -_strideAmount src/Dodge/Data/Creature/Stance.hs 22;" f -_strideLength src/Dodge/Data/Creature/Stance.hs 16;" f +_strideAmount src/Dodge/Data/Creature/Stance.hs 26;" f +_strideLength src/Dodge/Data/Creature/Stance.hs 20;" f _stuckCrID src/Dodge/Data/Projectile.hs 50;" f _stuckCrOffset src/Dodge/Data/Projectile.hs 50;" f _stuckCrRot src/Dodge/Data/Projectile.hs 50;" f @@ -2613,9 +2614,8 @@ advanceScrollAmount src/Dodge/Update.hs 427;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f aimDelaySweep src/Dodge/Render/Picture.hs 288;" f -aimStance src/Dodge/Item/AimStance.hs 10;" f aimStanceInfo src/Dodge/Item/Info.hs 244;" f -aimTurn src/Dodge/Creature/YourControl.hs 174;" f +aimTurn src/Dodge/Creature/YourControl.hs 180;" f airlock src/Dodge/Room/Airlock.hs 21;" f airlock0 src/Dodge/Room/Airlock.hs 50;" f airlock90 src/Dodge/Room/Airlock.hs 147;" f @@ -2709,7 +2709,7 @@ axisInt src/Geometry/Intersect.hs 257;" f azure src/Color.hs 22;" f bQuadToF src/Geometry/Bezier.hs 37;" f bQuadToLine src/Geometry/Bezier.hs 30;" f -backPQ src/Dodge/Creature/HandPos.hs 134;" f +backPQ src/Dodge/Creature/HandPos.hs 153;" f backpackCombinations src/Dodge/Combine/Combinations.hs 27;" f backpackShape src/Dodge/Item/Draw/SPic.hs 200;" f backspaceInputted src/Dodge/Update/Input/Text.hs 25;" f @@ -2868,7 +2868,7 @@ checkWallLeft src/Dodge/LevelGen/StaticWalls/Deprecated.hs 29;" f checkWallRight src/Dodge/LevelGen/StaticWalls.hs 54;" f checkWallRight src/Dodge/LevelGen/StaticWalls/Deprecated.hs 59;" f chemFuelPouch src/Dodge/Item/Ammo.hs 75;" f -chestPQ src/Dodge/Creature/HandPos.hs 128;" f +chestPQ src/Dodge/Creature/HandPos.hs 147;" f chooseCursorBorders src/Dodge/Render/List.hs 156;" f chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 34;" f @@ -3000,8 +3000,8 @@ crBlips src/Dodge/RadarSweep.hs 87;" f crCamouflage src/Dodge/Creature/Picture.hs 32;" f crCanSeeCr src/Dodge/Creature/Test.hs 53;" f crCrSpring src/Dodge/Update.hs 886;" f -crCurrentEquipment src/Dodge/Creature/Statistics.hs 58;" f -crDexterity src/Dodge/Creature/Statistics.hs 15;" f +crCurrentEquipment src/Dodge/Creature/Statistics.hs 60;" f +crDexterity src/Dodge/Creature/Statistics.hs 17;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 38;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 52;" f crHasTarget src/Dodge/Creature/Test.hs 66;" f @@ -3010,9 +3010,9 @@ crHit src/Dodge/WorldEvent/ThingsHit.hs 86;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 32;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 14;" f crInAimStance src/Dodge/Creature/Test.hs 95;" f -crIntelligence src/Dodge/Creature/Statistics.hs 35;" f +crIntelligence src/Dodge/Creature/Statistics.hs 37;" f crIsAiming src/Dodge/Creature/Test.hs 61;" f -crIsArmouredFrom src/Dodge/Creature/Test.hs 117;" f +crIsArmouredFrom src/Dodge/Creature/Test.hs 110;" f crMass src/Dodge/Creature/Mass.hs 5;" f crMaterial src/Dodge/Creature/Material.hs 8;" f crMaxHP src/Dodge/Creature/MaxHP.hs 6;" f @@ -3020,7 +3020,7 @@ crMvAbsolute src/Dodge/Creature/Impulse/Movement.hs 28;" f crMvBy src/Dodge/Creature/Impulse/Movement.hs 20;" f crMvForward src/Dodge/Creature/Impulse/Movement.hs 42;" f crMvType src/Dodge/Creature/MoveType.hs 6;" f -crNearPoint src/Dodge/Creature/Test.hs 140;" f +crNearPoint src/Dodge/Creature/Test.hs 132;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f crOnWall src/Dodge/WallCreatureCollisions.hs 86;" f crRad src/Dodge/Creature/Radius.hs 7;" f @@ -3029,7 +3029,7 @@ crSetRoots src/Dodge/Inventory/Location.hs 55;" f crShape src/Dodge/Creature/Shape.hs 8;" f crSpring src/Dodge/Update.hs 881;" f crStratConMatches src/Dodge/Creature/Test.hs 79;" f -crStrength src/Dodge/Creature/Statistics.hs 25;" f +crStrength src/Dodge/Creature/Statistics.hs 27;" f crUpdate' src/Dodge/Creature/Update.hs 57;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 66;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 48;" f @@ -3258,7 +3258,7 @@ divideLineOddNumPoints src/Geometry.hs 264;" f dmType src/Dodge/Damage.hs 38;" f doAfterPlacement src/Dodge/Layout.hs 86;" f doAfterPlacements src/Dodge/Layout.hs 83;" f -doAimTwist src/Dodge/Creature/YourControl.hs 148;" f +doAimTwist src/Dodge/Creature/YourControl.hs 153;" f doAnyEquipmentEffect src/Dodge/Creature/State.hs 140;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f doBarrelSpin src/Dodge/Projectile/Update.hs 214;" f @@ -3479,7 +3479,7 @@ drawWallSearchRays src/Dodge/Debug/Picture.hs 300;" f drawWallsNearCursor src/Dodge/Debug/Picture.hs 221;" f drawWallsNearSegment src/Dodge/Debug/Picture.hs 128;" f drawWallsNearYou src/Dodge/Debug/Picture.hs 212;" f -drawWeapon src/Dodge/Creature/Volition.hs 14;" f +drawWeapon src/Dodge/Creature/Volition.hs 15;" f drawWlIDs src/Dodge/Debug/Picture.hs 372;" f drawZoneCol src/Dodge/Debug/Picture.hs 147;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 284;" f @@ -3543,9 +3543,10 @@ equipInfo src/Dodge/Item/Info.hs 141;" f equipItemSPic src/Dodge/Item/Draw/SPic.hs 171;" f equipPosition src/Dodge/Item/Draw.hs 41;" f equipSiteInfo src/Dodge/Item/Info.hs 254;" f +equipSitePQ src/Dodge/Creature/HandPos.hs 30;" f equipType src/Dodge/Data/EquipType.hs 10;" f equipmentDesignation src/Dodge/Inventory/RBList.hs 52;" f -equipmentStrValue src/Dodge/Creature/Statistics.hs 52;" f +equipmentStrValue src/Dodge/Creature/Statistics.hs 54;" f errorAngleVV src/Geometry.hs 60;" f errorClosestPointOnLine src/Geometry.hs 72;" f errorClosestPointOnLineParam src/Geometry.hs 78;" f @@ -3694,7 +3695,7 @@ getBulletType src/Dodge/HeldUse.hs 933;" f getCloseObj src/Dodge/Update/Input/InGame.hs 531;" f getCommand src/Dodge/Terminal.hs 58;" f getCommands src/Dodge/Terminal.hs 55;" f -getCrMoveSpeed src/Dodge/Creature/Statistics.hs 46;" f +getCrMoveSpeed src/Dodge/Creature/Statistics.hs 48;" f getDistortions src/Dodge/Render.hs 435;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1301;" f getInventoryPath src/Dodge/Inventory/Path.hs 9;" f @@ -3765,8 +3766,8 @@ halfHeight src/Dodge/Base/Window.hs 48;" f halfWidth src/Dodge/Base/Window.hs 48;" f haltSound src/Dodge/SoundLogic.hs 38;" f hammerCheck src/Dodge/HeldUse.hs 62;" f -handHandleOrient src/Dodge/Item/HeldOffset.hs 61;" f -handOrient src/Dodge/Item/HeldOffset.hs 37;" f +handHandleOrient src/Dodge/Item/HeldOffset.hs 62;" f +handOrient src/Dodge/Item/HeldOffset.hs 38;" f handleEvent src/Dodge/Event.hs 27;" f handleHotkeys src/Dodge/Creature/YourControl.hs 45;" f handleKeyboardEvent src/Dodge/Event/Input.hs 23;" f @@ -3774,7 +3775,7 @@ handleMouseButtonEvent src/Dodge/Event/Input.hs 61;" f handleMouseMotionEvent src/Dodge/Event/Input.hs 47;" f handleMouseWheelEvent src/Dodge/Event/Input.hs 56;" f handleOrient src/Dodge/Item/HeldOffset.hs 31;" f -handlePos src/Dodge/Item/HeldOffset.hs 83;" f +handlePos src/Dodge/Item/HeldOffset.hs 84;" f handleResizeEvent src/Dodge/Event.hs 53;" f handleTextInput src/Dodge/Event/Input.hs 19;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f @@ -3788,7 +3789,7 @@ head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 79;" f headLampShape src/Dodge/Item/Draw/SPic.hs 455;" f headMap src/Dodge/DoubleTree.hs 249;" f -headPQ src/Dodge/Creature/HandPos.hs 119;" f +headPQ src/Dodge/Creature/HandPos.hs 138;" f healS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 492;" f healthAnalyserByDoor src/Dodge/Room/LasTurret.hs 75;" f healthTest src/Dodge/Room/LasTurret.hs 96;" f @@ -3797,16 +3798,16 @@ heldAimStance src/Dodge/Item/AimStance.hs 24;" f heldAimZoom src/Dodge/Update/Camera.hs 147;" f heldEffect src/Dodge/HeldUse.hs 59;" f heldEffectMuzzles src/Dodge/HeldUse.hs 130;" f -heldHandlePos src/Dodge/Item/HeldOffset.hs 89;" f +heldHandlePos src/Dodge/Item/HeldOffset.hs 90;" f heldInfo src/Dodge/Item/Info.hs 92;" f heldItemAmmoSlots src/Dodge/Item/AmmoSlots.hs 19;" f -heldItemBulkiness src/Dodge/Creature/YourControl.hs 187;" f +heldItemBulkiness src/Dodge/Creature/YourControl.hs 193;" f heldItemInvLock src/Dodge/HeldUse.hs 434;" f heldItemMuzVel src/Dodge/HeldUse.hs 1030;" f heldItemMuzzles src/Dodge/HeldUse.hs 182;" f heldItemRifling src/Dodge/HeldUse.hs 1073;" f heldItemSPic src/Dodge/Item/Draw/SPic.hs 247;" f -heldItemWeight src/Dodge/Creature/Statistics.hs 76;" f +heldItemWeight src/Dodge/Creature/Statistics.hs 78;" f heldPositionInfo src/Dodge/Item/Info.hs 241;" f heldTorqueAmount src/Dodge/HeldUse.hs 578;" f heldTriggerType src/Dodge/BaseTriggerType.hs 27;" f @@ -3821,7 +3822,7 @@ hit1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 580;" f hitEffFromBul src/Dodge/Bullet.hs 153;" f hitS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 534;" f holdForm src/Dodge/Creature/Boid.hs 137;" f -holsterWeapon src/Dodge/Creature/Volition.hs 14;" f +holsterWeapon src/Dodge/Creature/Volition.hs 15;" f homingModule src/Dodge/Item/Scope.hs 48;" f horPipe src/Dodge/Placement/Instance/Pipe.hs 9;" f hotkeyToChar src/Dodge/Inventory/SelectionList.hs 188;" f @@ -3920,7 +3921,7 @@ invertInventoryToMap src/Dodge/Combine.hs 56;" f invisibleChaseCrit src/Dodge/Creature/ChaseCrit.hs 21;" f invisibleWall src/Dodge/Placement/Instance/Wall.hs 16;" f isAmmoIntLink src/Dodge/HeldUse.hs 710;" f -isAnimate src/Dodge/Creature/Test.hs 143;" f +isAnimate src/Dodge/Creature/Test.hs 135;" f isCognizant src/Dodge/Creature/Perception.hs 106;" f isConnected src/Dodge/Inventory/Swap.hs 76;" f isElectrical src/Dodge/Machine/Update.hs 80;" f @@ -3952,12 +3953,13 @@ itEffectOnPickup src/Dodge/Item/BackgroundEffect.hs 64;" f itInvHeight src/Dodge/Item/InvSize.hs 11;" f itUseCondition src/Dodge/ItemUseCondition.hs 6;" f itemAboveAttachables src/Dodge/Item/Grammar.hs 37;" f +itemAimStance src/Dodge/Item/AimStance.hs 10;" f itemAmmoSlots src/Dodge/Item/AmmoSlots.hs 12;" f itemBaseName src/Dodge/Item/Display.hs 60;" f itemBaseStance src/Dodge/Item/AimStance.hs 18;" f itemBelowAttachables src/Dodge/Item/Grammar.hs 50;" f itemBlips src/Dodge/RadarSweep.hs 93;" f -itemBulkiness src/Dodge/Creature/YourControl.hs 181;" f +itemBulkiness src/Dodge/Creature/YourControl.hs 187;" f itemCombinations src/Dodge/Combine/Combinations.hs 56;" f itemCombinationsEdges src/Dodge/Combine/Graph.hs 61;" f itemDetectorEffect src/Dodge/HeldUse.hs 764;" f @@ -3986,7 +3988,7 @@ itemString src/Dodge/Item/Display.hs 56;" f itemToFunction src/Dodge/Item/Grammar.hs 107;" f itemTreeSPic src/Dodge/Item/Draw/SPic.hs 24;" f itemTriggerType src/Dodge/BaseTriggerType.hs 16;" f -itemWeight src/Dodge/Creature/Statistics.hs 70;" f +itemWeight src/Dodge/Creature/Statistics.hs 72;" f iterateUntil src/MonadHelp.hs 23;" f iterateWhile src/MonadHelp.hs 30;" f itmBaseInfo src/Dodge/Item/Info.hs 30;" f @@ -4045,11 +4047,13 @@ ldtToIndentList src/Dodge/DoubleTree.hs 222;" f ldtToLoc src/Dodge/DoubleTree.hs 268;" f left src/DoubleStack.hs 16;" f leftChildList src/Dodge/Item/Grammar.hs 185;" f -leftHandPQ src/Dodge/Creature/HandPos.hs 60;" f +leftHandPQ src/Dodge/Creature/HandPos.hs 77;" f leftIsParentCombine src/Dodge/Item/Grammar.hs 163;" f -leftLegPQ src/Dodge/Creature/HandPos.hs 85;" f +leftLegPQ src/Dodge/Creature/HandPos.hs 104;" f leftPad src/Padding.hs 15;" f leftRightCombine src/Dodge/Item/Grammar.hs 197;" f +leftWristPQ src/Dodge/Creature/HandPos.hs 102;" f +legsPQ src/Dodge/Creature/HandPos.hs 39;" f legsSPic src/Dodge/Item/Draw/SPic.hs 480;" f liShape src/Dodge/Placement/Instance/LightSource.hs 98;" f light src/Color.hs 104;" f @@ -4101,7 +4105,7 @@ locGoRight src/Dodge/DoubleTree.hs 324;" f locLDTToLocDT src/Dodge/DoubleTree.hs 19;" f locLeftmost src/Dodge/DoubleTree.hs 306;" f locMuzzles src/Dodge/HeldUse.hs 144;" f -locOrient src/Dodge/Item/HeldOffset.hs 56;" f +locOrient src/Dodge/Item/HeldOffset.hs 57;" f locRightmost src/Dodge/DoubleTree.hs 309;" f locToTop src/Dodge/DoubleTree.hs 301;" f locUp src/Dodge/DoubleTree.hs 272;" f @@ -4378,7 +4382,7 @@ oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 698;" f onEquipWristShield src/Dodge/Equipment.hs 37;" f onRemoveWristShield src/Dodge/Equipment.hs 24;" f onXY src/Geometry/Vector3D.hs 130;" f -oneH src/Dodge/Creature/Test.hs 105;" f +oneH src/Dodge/Creature/Test.hs 98;" f openConsole src/Dodge/Update.hs 136;" f optionMenu src/Dodge/Menu.hs 108;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 52;" f @@ -4747,7 +4751,7 @@ reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 600;" f rememberSounds src/Dodge/Creature/Perception.hs 178;" f remoteDetonator src/Dodge/Item/Scope.hs 144;" f remoteScreen src/Dodge/Item/Scope.hs 139;" f -removeAimPosture src/Dodge/Creature/YourControl.hs 156;" f +removeAimPosture src/Dodge/Creature/YourControl.hs 158;" f removeAmmoFromMag src/Dodge/HeldUse.hs 922;" f removeDot src/ShortShow.hs 40;" f removeInverseWalls src/Dodge/LevelGen/StaticWalls.hs 25;" f @@ -4795,11 +4799,12 @@ rhombus src/Polyhedra.hs 72;" f rifle src/Dodge/Item/Held/Cane.hs 19;" f right src/DoubleStack.hs 16;" f rightChildList src/Dodge/Item/Grammar.hs 191;" f -rightHandPQ src/Dodge/Creature/HandPos.hs 38;" f +rightHandPQ src/Dodge/Creature/HandPos.hs 53;" f rightIsParentCombine src/Dodge/Item/Grammar.hs 174;" f -rightLegPQ src/Dodge/Creature/HandPos.hs 101;" f +rightLegPQ src/Dodge/Creature/HandPos.hs 120;" f rightPad src/Padding.hs 19;" f rightPadNoSquash src/Padding.hs 23;" f +rightWristPQ src/Dodge/Creature/HandPos.hs 75;" f rlPosDir src/Dodge/RoomLink.hs 94;" f rlauncherPic src/Dodge/Item/Draw/SPic.hs 409;" f rmInLinks src/Dodge/RoomLink.hs 138;" f @@ -4939,7 +4944,7 @@ sensorTypeDamages src/Dodge/Machine/Update.hs 180;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 83;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 50;" f -setAimPosture src/Dodge/Creature/YourControl.hs 145;" f +setAimPosture src/Dodge/Creature/YourControl.hs 144;" f setChannelPos src/Sound.hs 150;" f setClickWorldPos src/Dodge/Update.hs 106;" f setClusterID src/Dodge/Combine/Graph.hs 116;" f @@ -5033,13 +5038,13 @@ shineTargetLaser src/Dodge/Creature/State.hs 200;" f shineTorch src/Dodge/Creature/State.hs 237;" f shootBullet src/Dodge/HeldUse.hs 996;" f shootBullets src/Dodge/HeldUse.hs 986;" f -shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f +shootFirstMiss src/Dodge/Creature/Volition.hs 34;" f shootLaser src/Dodge/HeldUse.hs 839;" f shootPulseBall src/Dodge/HeldUse.hs 907;" f shootPulseLaser src/Dodge/HeldUse.hs 880;" f shootShatter src/Dodge/Item/Weapon/Shatter.hs 11;" f shootTeslaArc src/Dodge/HeldUse.hs 1216;" f -shootTillEmpty src/Dodge/Creature/Volition.hs 18;" f +shootTillEmpty src/Dodge/Creature/Volition.hs 19;" f shootTractorBeam src/Dodge/HeldUse.hs 795;" f shootersRoom src/Dodge/Room/Room.hs 315;" f shootersRoom' src/Dodge/Room/Room.hs 280;" f @@ -5048,7 +5053,7 @@ shootingRange src/Dodge/Room/Room.hs 332;" f shortPoint2 src/Dodge/ShortShow.hs 4;" f shortShow src/ShortShow.hs 7;" f shotgunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 708;" f -shoulderHeight src/Dodge/Item/HeldOffset.hs 68;" f +shoulderHeight src/Dodge/Item/HeldOffset.hs 69;" f shoulderSH src/Dodge/Creature/Picture.hs 131;" f showAttachItem src/Dodge/Item/Display.hs 92;" f showEquipItem src/Dodge/Item/Display.hs 107;" f @@ -5190,11 +5195,11 @@ stopAllSounds src/Sound.hs 125;" f stopBulletAt src/Dodge/Bullet.hs 197;" f stopPushing src/Dodge/Block.hs 105;" f stopSoundFrom src/Dodge/SoundLogic.hs 220;" f -strFromEquipment src/Dodge/Creature/Statistics.hs 49;" f -strFromHeldItem src/Dodge/Creature/Statistics.hs 63;" f +strFromEquipment src/Dodge/Creature/Statistics.hs 51;" f +strFromHeldItem src/Dodge/Creature/Statistics.hs 65;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 36;" f strictify src/MaybeHelp.hs 37;" f -strideRot src/Dodge/Item/HeldOffset.hs 71;" f +strideRot src/Dodge/Item/HeldOffset.hs 72;" f stringToList src/Picture/Base.hs 313;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f @@ -5349,9 +5354,10 @@ translate3 src/Picture/Base.hs 120;" f translateFloatingCamera src/Dodge/Update/Camera.hs 46;" f translateFloatingCameraKeys src/Dodge/Update/Camera.hs 63;" f translateH src/Picture/Base.hs 112;" f -translatePointToHead src/Dodge/Creature/HandPos.hs 125;" f -translatePointToLeftHand src/Dodge/Creature/HandPos.hs 75;" f -translatePointToRightHand src/Dodge/Creature/HandPos.hs 27;" f +translatePointToEquipSite src/Dodge/Creature/HandPos.hs 27;" f +translatePointToHead src/Dodge/Creature/HandPos.hs 144;" f +translatePointToLeftHand src/Dodge/Creature/HandPos.hs 92;" f +translatePointToRightHand src/Dodge/Creature/HandPos.hs 42;" f translateSH src/Shape.hs 245;" f translateSHxy src/Shape.hs 249;" f translateSHz src/Shape.hs 253;" f @@ -5359,14 +5365,14 @@ translateSP src/ShapePicture.hs 53;" f translateSPxy src/ShapePicture.hs 45;" f translateSPz src/ShapePicture.hs 49;" f translateScreenPos src/Dodge/ScreenPos.hs 12;" f -translateToChest src/Dodge/Creature/HandPos.hs 131;" f -translateToHead src/Dodge/Creature/HandPos.hs 116;" f -translateToLeftHand src/Dodge/Creature/HandPos.hs 78;" f -translateToLeftLeg src/Dodge/Creature/HandPos.hs 98;" f -translateToLeftWrist src/Dodge/Creature/HandPos.hs 81;" f -translateToRightHand src/Dodge/Creature/HandPos.hs 53;" f -translateToRightLeg src/Dodge/Creature/HandPos.hs 113;" f -translateToRightWrist src/Dodge/Creature/HandPos.hs 56;" f +translateToChest src/Dodge/Creature/HandPos.hs 150;" f +translateToHead src/Dodge/Creature/HandPos.hs 135;" f +translateToLeftHand src/Dodge/Creature/HandPos.hs 95;" f +translateToLeftLeg src/Dodge/Creature/HandPos.hs 117;" f +translateToLeftWrist src/Dodge/Creature/HandPos.hs 98;" f +translateToRightHand src/Dodge/Creature/HandPos.hs 68;" f +translateToRightLeg src/Dodge/Creature/HandPos.hs 132;" f +translateToRightWrist src/Dodge/Creature/HandPos.hs 71;" f translateWallID src/Dodge/Wall/Move.hs 37;" f translateXY src/Polyhedra.hs 26;" f trapezionBWHW src/Geometry/Polygon.hs 24;" f @@ -5387,7 +5393,7 @@ truncFaces src/Polyhedra/Geodesic.hs 53;" f truncate src/Polyhedra/Geodesic.hs 38;" f trunkDepth src/TreeHelp.hs 161;" f tryAttachItems src/Dodge/Item/Grammar.hs 34;" f -tryClickUse src/Dodge/Creature/YourControl.hs 230;" f +tryClickUse src/Dodge/Creature/YourControl.hs 236;" f tryCombine src/Dodge/Update/Input/InGame.hs 542;" f tryDrawToCapacitor src/Dodge/Creature/State.hs 150;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 137;" f @@ -5415,10 +5421,10 @@ tutorialMessage1 src/Dodge/Room/Tutorial.hs 95;" f tweenAngles src/Geometry/Vector.hs 195;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 80;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 28;" f -twists src/Dodge/Creature/Test.hs 111;" f -twoFlat src/Dodge/Creature/Test.hs 108;" f -twoFlatHRot src/Dodge/Item/HeldOffset.hs 80;" f -twoHandTwistAmount src/Dodge/Creature/YourControl.hs 159;" f +twists src/Dodge/Creature/Test.hs 104;" f +twoFlat src/Dodge/Creature/Test.hs 101;" f +twoFlatHRot src/Dodge/Item/HeldOffset.hs 81;" f +twoHandTwistAmount src/Dodge/Creature/YourControl.hs 165;" f twoRoomPoss src/Dodge/PlacementSpot.hs 154;" f twoStep1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 544;" f twoStepS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 596;" f @@ -5639,7 +5645,7 @@ warningRooms src/Dodge/Room/Warning.hs 26;" f wasdAim src/Dodge/Creature/YourControl.hs 132;" f wasdDir src/Dodge/WASD.hs 17;" f wasdM src/Dodge/WASD.hs 9;" f -wasdMovement src/Dodge/Creature/YourControl.hs 162;" f +wasdMovement src/Dodge/Creature/YourControl.hs 168;" f wasdWithAiming src/Dodge/Creature/YourControl.hs 125;" f watchCombinations src/Dodge/Combine/Combinations.hs 16;" f watchUpdateStrat src/Dodge/Creature/ReaderUpdate.hs 179;" f