diff --git a/src/Dodge/Creature.hs b/src/Dodge/Creature.hs index fa41e76ad..031793294 100644 --- a/src/Dodge/Creature.hs +++ b/src/Dodge/Creature.hs @@ -310,7 +310,16 @@ testInventory = stackedInventory :: [Item] stackedInventory = - [ torch + [ laser + , megaBattery + , burstRifle + , megaTinMag 1000 + , underBarrelSlot + , laser + , megaBattery + , gLauncher + , megaShellMag + , torch , magShield MagnetRepulse , bangCone , megaTinMag 1000 @@ -319,11 +328,6 @@ stackedInventory = , makeTypeCraft TRANSFORMER , remoteScreen , megaShellMag - , burstRifle - , megaTinMag 1000 - , underBarrelSlot - , gLauncher - , megaShellMag , laser , makeTypeCraft TRANSFORMER , teslaGun diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index 18acaec88..c0e4106a5 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -311,7 +311,7 @@ updateItemWithOrientation cr m loc@(LocLDT _ itmtree) w = case (ci ^. _1 . itType, ci ^. _2) of (HELD TORCH, _) -> shineTorch cr itmtree m w --(HELD LASER, WeaponTargetingSF) -> shineTargetLaser cr itmtree m w - (HELD LASER, WeaponTargetingSF) -> shineTargetLaser' cr loc w + (HELD LASER, WeaponTargetingSF) -> shineTargetLaser cr loc w (TARGETING tt, _) -> updateItemTargeting tt cr itm w (ARHUD, _) -> drawARHUD loc w _ -> w @@ -327,12 +327,8 @@ drawARHUD (LocLDT con _) w = fromMaybe w $ do <>~ fold (drawTargetingAR itm w <|> drawMapperAR itm w) -shineTargetLaser' :: - Creature -> - LocationLDT ItemLink CItem -> - World -> - World -shineTargetLaser' cr loc w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ do +shineTargetLaser :: Creature -> LocationLDT ItemLink CItem -> World -> World +shineTargetLaser cr loc w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ do guard (crIsAiming cr) (_, mag) <- find (isammolink . fst) (itmtree ^. ldtLeft) i <- mag ^. ldtValue . _1 . itConsumables @@ -357,11 +353,12 @@ shineTargetLaser' cr loc w = fromMaybe (w & pointittarg . itTgPos .~ Nothing) $ } where itmtree = loc ^. locLDT - (p,q) = orientLocation $ fmap fst loc + (p,q) = heldItemRelativeOrient (locToTop loc ^. locLDT . ldtValue . _1) cr + $ orientLocation (V3 0 0 0,Q.qID) (fmap fst loc) (V3 5 0 0,Q.qID) x = 1 isammolink AmmoInLink{} = True isammolink _ = False - pos = _crPos cr + xyV3 (rotate3 cdir (p + V3 5 0 0)) + pos = _crPos cr + xyV3 (rotate3 cdir p) cdir = _crDir cr itm = itmtree ^. ldtValue . _1 pointittarg = cWorld . lWorld . creatures . ix cid . crInv . ix invid . itTargeting diff --git a/src/Dodge/Data/DoubleTree.hs b/src/Dodge/Data/DoubleTree.hs index 870b25e44..7df898e10 100644 --- a/src/Dodge/Data/DoubleTree.hs +++ b/src/Dodge/Data/DoubleTree.hs @@ -114,7 +114,8 @@ instance Functor (LocationLDT b) where instance Functor (ContextLDT b) where fmap f = \case TopLDT -> TopLDT - LeftwardLDT u cl p l cr fr -> LeftwardLDT (fmap f u) + LeftwardLDT u cl p l cr fr -> LeftwardLDT + (fmap f u) (fmap (fmap (fmap f)) cl) (f p) l diff --git a/src/Dodge/Item/Orientation.hs b/src/Dodge/Item/Orientation.hs index b7a36a7a1..21bf503e2 100644 --- a/src/Dodge/Item/Orientation.hs +++ b/src/Dodge/Item/Orientation.hs @@ -1,19 +1,21 @@ {-# LANGUAGE LambdaCase #-} + module Dodge.Item.Orientation ( orientAttachment, orientLocation, ) where -import Dodge.DoubleTree -import Dodge.Data.DoubleTree import Dodge.Data.ComposedItem +import Dodge.Data.DoubleTree import Dodge.Data.Item +import Dodge.DoubleTree import Geometry.Data import qualified Quaternion as Q orientChild :: Item -> (Point3, Q.Quaternion Float) orientChild itm = case _itType itm of HELD TORCH -> (V3 0 5 0, Q.qID) + --HELD LASER -> (V3 15 (-5) 0, Q.qID) HELD LASER -> (V3 15 (-5) 0, Q.qID) ATTACH UNDERBARRELSLOT -> (V3 10 (-8) 0, Q.qID) _ -> (0, Q.qID) @@ -28,17 +30,27 @@ orientByLink itm lt = case (_itType itm, lt) of orientAttachment :: Item -> ItemLink -> Item -> (Point3, Q.Quaternion Float) orientAttachment par lnk ch = case (_itType par, lnk, _itType ch) of (ATTACH UNDERBARRELSLOT, _, _) -> (V3 (-5) (-8) 0, Q.qID) --- (HELD BURSTRIFLE, _, HELD TORCH) -> (V3 20 0 0, Q.axisAngle (V3 0 0 1) (pi/2)) --- (HELD LAUNCHER, _, HELD TORCH) -> (V3 0 20 0, Q.axisAngle (V3 0 0 1) (pi/4)) + -- (HELD BURSTRIFLE, _, HELD TORCH) -> (V3 20 0 0, Q.axisAngle (V3 0 0 1) (pi/2)) + -- (HELD LAUNCHER, _, HELD TORCH) -> (V3 0 20 0, Q.axisAngle (V3 0 0 1) (pi/4)) _ -> (t1 + Q.rotate q1 t2, q1 * q2) where (t1, q1) = orientByLink par lnk (t2, q2) = orientChild ch -orientLocation :: LocationLDT ItemLink Item -> (Point3, Q.Quaternion Float) -orientLocation = \case - (LocLDT TopLDT _) -> (0, Q.qID) +orientLocation' :: (Point3,Q.Quaternion Float) + -> LocationLDT ItemLink Item + -> (Point3, Q.Quaternion Float) +orientLocation' x = \case + (LocLDT TopLDT _) -> x (LocLDT c t) -> (p + Q.rotate q p1, q * q1) where - (p,q) = orientLocation (LocLDT (_cldtUp c) (singleLDT (_cldtParent c))) - (p1,q1) = orientAttachment (_cldtParent c) (_cldtLink c) (_ldtValue t) + (p, q) = orientLocation' x (LocLDT (_cldtUp c) (singleLDT (_cldtParent c))) + (p1, q1) = orientAttachment (_cldtParent c) (_cldtLink c) (_ldtValue t) + +orientLocation :: + (Point3, Q.Quaternion Float) -> + LocationLDT ItemLink Item + -> (Point3, Q.Quaternion Float) -> (Point3, Q.Quaternion Float) +orientLocation x loc (p1, q1) = (p + Q.rotate q p1, q * q1) + where + (p, q) = orientLocation' x loc diff --git a/tags b/tags index e22bb9539..4538c7cf1 100644 --- a/tags +++ b/tags @@ -356,8 +356,8 @@ ConsumableItemType src/Dodge/Data/Item/Combine.hs 114;" t Consumption src/Dodge/Data/Item/Use/Consumption.hs 8;" m Consumption src/Dodge/Default/Item/Use/Consumption.hs 1;" m Containing src/Dodge/Room/Containing.hs 2;" m -ContextDT src/Dodge/Data/DoubleTree.hs 82;" t -ContextLDT src/Dodge/Data/DoubleTree.hs 41;" t +ContextDT src/Dodge/Data/DoubleTree.hs 84;" t +ContextLDT src/Dodge/Data/DoubleTree.hs 42;" t ContinentalGovernment src/Dodge/Data/Scenario.hs 51;" C ControlDeckSS src/Dodge/Data/Scenario.hs 89;" C ConvexPoly src/Geometry/ConvexPoly.hs 27;" t @@ -439,12 +439,12 @@ DPoint2 src/Geometry/Data.hs 34;" t DROPPER src/Dodge/Data/Item/Combine.hs 27;" C DRUMMAG src/Dodge/Data/Item/Combine.hs 107;" C DS src/DoubleStack.hs 3;" t -DT src/Dodge/Data/DoubleTree.hs 30;" C -DTBottomNode src/Dodge/Data/DoubleTree.hs 20;" C -DTMidAboveNode src/Dodge/Data/DoubleTree.hs 18;" C -DTMidBelowNode src/Dodge/Data/DoubleTree.hs 19;" C -DTRootNode src/Dodge/Data/DoubleTree.hs 16;" C -DTTopNode src/Dodge/Data/DoubleTree.hs 17;" C +DT src/Dodge/Data/DoubleTree.hs 31;" C +DTBottomNode src/Dodge/Data/DoubleTree.hs 21;" C +DTMidAboveNode src/Dodge/Data/DoubleTree.hs 19;" C +DTMidBelowNode src/Dodge/Data/DoubleTree.hs 20;" C +DTRootNode src/Dodge/Data/DoubleTree.hs 17;" C +DTTopNode src/Dodge/Data/DoubleTree.hs 18;" C Damage src/Dodge/Data/Damage.hs 19;" t Damage src/Dodge/Creature/Damage.hs 1;" m Damage src/Dodge/Damage.hs 3;" m @@ -537,10 +537,10 @@ DoorPart src/Dodge/Data/Wall/Structure.hs 14;" C DoorStatus src/Dodge/Data/Door.hs 23;" t DoubleRes src/Dodge/Data/Config.hs 97;" C DoubleStack src/DoubleStack.hs 1;" m -DoubleTree src/Dodge/Data/DoubleTree.hs 30;" t -DoubleTree src/Dodge/Data/DoubleTree.hs 6;" m +DoubleTree src/Dodge/Data/DoubleTree.hs 31;" t +DoubleTree src/Dodge/Data/DoubleTree.hs 7;" m DoubleTree src/Dodge/DoubleTree.hs 1;" m -DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 15;" t +DoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 16;" t DrWdId src/Dodge/Data/WorldEffect.hs 67;" C DrWdMakeDoorDebris src/Dodge/Data/WorldEffect.hs 68;" C DrWdMechanismStepwise src/Dodge/Data/WorldEffect.hs 69;" C @@ -977,14 +977,14 @@ Justify src/Justify.hs 1;" m KEYCARD src/Dodge/Data/Item/Combine.hs 177;" C Kill src/Dodge/Data/ActionPlan.hs 198;" C LASER src/Dodge/Data/Item/Combine.hs 168;" C -LDT src/Dodge/Data/DoubleTree.hs 33;" C -LDTBottomNode src/Dodge/Data/DoubleTree.hs 28;" C +LDT src/Dodge/Data/DoubleTree.hs 34;" C +LDTBottomNode src/Dodge/Data/DoubleTree.hs 29;" C LDTComb src/Dodge/Item/Grammar.hs 162;" t -LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 26;" C -LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 27;" C -LDTRootNode src/Dodge/Data/DoubleTree.hs 24;" C -LDTTopNode src/Dodge/Data/DoubleTree.hs 25;" C -LDTree src/Dodge/Data/DoubleTree.hs 33;" t +LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 27;" C +LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 28;" C +LDTRootNode src/Dodge/Data/DoubleTree.hs 25;" C +LDTTopNode src/Dodge/Data/DoubleTree.hs 26;" C +LDTree src/Dodge/Data/DoubleTree.hs 34;" t LED src/Dodge/Data/Item/Combine.hs 77;" C LHS src/Geometry/LHS.hs 1;" m LIGHTER src/Dodge/Data/Item/Combine.hs 66;" C @@ -998,7 +998,7 @@ LabSS src/Dodge/Data/Scenario.hs 97;" C Label src/Dodge/Render/Label.hs 1;" m LabelAction src/Dodge/Data/ActionPlan.hs 79;" C LabelCluster src/Dodge/Data/RoomCluster.hs 14;" C -LabelDoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 23;" t +LabelDoubleTreeNodeType src/Dodge/Data/DoubleTree.hs 24;" t Laboratory src/Dodge/Data/Scenario.hs 61;" C Lamp src/Dodge/Creature/Lamp.hs 1;" m LampCrit src/Dodge/Data/Creature/Misc.hs 74;" C @@ -1025,8 +1025,8 @@ LeadTarget src/Dodge/Data/ActionPlan.hs 149;" C Left src/Dodge/Item/Left.hs 1;" m LeftConsumption src/Dodge/Data/Item/Use/Consumption.hs 25;" t LeftForward src/Dodge/Data/Creature/Stance.hs 32;" C -LeftwardDT src/Dodge/Data/DoubleTree.hs 84;" C -LeftwardLDT src/Dodge/Data/DoubleTree.hs 43;" C +LeftwardDT src/Dodge/Data/DoubleTree.hs 86;" C +LeftwardLDT src/Dodge/Data/DoubleTree.hs 44;" C LensHelp src/LensHelp.hs 1;" m Lethargic src/Dodge/Data/Creature/Perception.hs 55;" C LevelGen src/Dodge/LevelGen.hs 1;" m @@ -1062,13 +1062,13 @@ LoadSound src/Dodge/SoundLogic/LoadSound.hs 1;" m Loading src/Dodge/Menu/Loading.hs 1;" m LoadingBaySS src/Dodge/Data/Scenario.hs 93;" C LoadingScreen src/Dodge/Data/Universe.hs 73;" C -LocDT src/Dodge/Data/DoubleTree.hs 99;" C -LocLDT src/Dodge/Data/DoubleTree.hs 60;" C +LocDT src/Dodge/Data/DoubleTree.hs 101;" C +LocLDT src/Dodge/Data/DoubleTree.hs 61;" C Location src/Dodge/Data/Item/Location.hs 6;" m Location src/Dodge/Inventory/Location.hs 1;" m Location src/Dodge/Item/Location.hs 1;" m -LocationDT src/Dodge/Data/DoubleTree.hs 99;" t -LocationLDT src/Dodge/Data/DoubleTree.hs 60;" t +LocationDT src/Dodge/Data/DoubleTree.hs 101;" t +LocationLDT src/Dodge/Data/DoubleTree.hs 61;" t Lock src/Dodge/Inventory/Lock.hs 1;" m LockAndKey src/Dodge/LockAndKey.hs 1;" m LoneWolf src/Dodge/Data/Creature/State.hs 26;" C @@ -1371,7 +1371,7 @@ Option src/Dodge/Menu/Option.hs 1;" m OptionScreen src/Dodge/Data/Universe.hs 82;" C OptionScreenFlag src/Dodge/Data/Universe.hs 72;" t OptionType src/Dodge/Menu/OptionType.hs 2;" m -Orientation src/Dodge/Item/Orientation.hs 2;" m +Orientation src/Dodge/Item/Orientation.hs 3;" m OutAction src/Dodge/Creature/Action.hs 45;" t OutLink src/Dodge/Data/Room.hs 43;" C OutPlacement src/Dodge/Data/GenWorld.hs 126;" t @@ -1639,8 +1639,8 @@ RezBox src/Dodge/Room/RezBox.hs 1;" m RightButtonOptions src/Dodge/Data/RightButtonOptions.hs 13;" t RightButtonOptions src/Dodge/Data/RightButtonOptions.hs 6;" m RightForward src/Dodge/Data/Creature/Stance.hs 33;" C -RightwardDT src/Dodge/Data/DoubleTree.hs 91;" C -RightwardLDT src/Dodge/Data/DoubleTree.hs 51;" C +RightwardDT src/Dodge/Data/DoubleTree.hs 93;" C +RightwardLDT src/Dodge/Data/DoubleTree.hs 52;" C RoadBlock src/Dodge/Room/RoadBlock.hs 2;" m Rocket src/Dodge/Data/Projectile.hs 43;" C RocketHoming src/Dodge/Data/Projectile.hs 50;" t @@ -2003,10 +2003,10 @@ Toggle src/Dodge/Data/Universe.hs 103;" C Toggle2 src/Dodge/Data/Universe.hs 107;" C ToggleExamine src/Dodge/ToggleExamine.hs 1;" m ToggleSF src/Dodge/Data/ComposedItem.hs 61;" C -TopDT src/Dodge/Data/DoubleTree.hs 83;" C +TopDT src/Dodge/Data/DoubleTree.hs 85;" C TopDecoration src/Dodge/Placement/TopDecoration.hs 1;" m TopEscapeMenuOption src/Dodge/Data/Universe.hs 78;" C -TopLDT src/Dodge/Data/DoubleTree.hs 42;" C +TopLDT src/Dodge/Data/DoubleTree.hs 43;" C TorpedoBaySS src/Dodge/Data/Scenario.hs 99;" C TorqueCr src/Dodge/Data/WorldEffect.hs 30;" C TractorBeam src/Dodge/Data/TractorBeam.hs 13;" t @@ -2344,16 +2344,16 @@ _carriage src/Dodge/Data/Creature/Stance.hs 14;" f _carteCenter src/Dodge/Data/HUD.hs 46;" f _carteRot src/Dodge/Data/HUD.hs 48;" f _carteZoom src/Dodge/Data/HUD.hs 47;" f -_cdtCloseLeft src/Dodge/Data/DoubleTree.hs 86;" f -_cdtCloseLeft src/Dodge/Data/DoubleTree.hs 94;" f -_cdtCloseRight src/Dodge/Data/DoubleTree.hs 88;" f -_cdtCloseRight src/Dodge/Data/DoubleTree.hs 96;" f -_cdtFarLeft src/Dodge/Data/DoubleTree.hs 93;" f -_cdtFarRight src/Dodge/Data/DoubleTree.hs 89;" f -_cdtParent src/Dodge/Data/DoubleTree.hs 87;" f -_cdtParent src/Dodge/Data/DoubleTree.hs 95;" f -_cdtUp src/Dodge/Data/DoubleTree.hs 85;" f -_cdtUp src/Dodge/Data/DoubleTree.hs 92;" f +_cdtCloseLeft src/Dodge/Data/DoubleTree.hs 88;" f +_cdtCloseLeft src/Dodge/Data/DoubleTree.hs 96;" f +_cdtCloseRight src/Dodge/Data/DoubleTree.hs 90;" f +_cdtCloseRight src/Dodge/Data/DoubleTree.hs 98;" f +_cdtFarLeft src/Dodge/Data/DoubleTree.hs 95;" f +_cdtFarRight src/Dodge/Data/DoubleTree.hs 91;" f +_cdtParent src/Dodge/Data/DoubleTree.hs 89;" f +_cdtParent src/Dodge/Data/DoubleTree.hs 97;" f +_cdtUp src/Dodge/Data/DoubleTree.hs 87;" f +_cdtUp src/Dodge/Data/DoubleTree.hs 94;" f _ceSideEffect src/Dodge/Data/Universe.hs 66;" f _ceString src/Dodge/Data/Universe.hs 67;" f _ciFilter src/Dodge/Data/HUD.hs 39;" f @@ -2367,18 +2367,18 @@ _clTimer src/Dodge/Data/Cloud.hs 17;" f _clType src/Dodge/Data/Cloud.hs 18;" f _clVel src/Dodge/Data/Cloud.hs 16;" f _clZoning src/Dodge/Data/World.hs 48;" f -_cldtCloseLeft src/Dodge/Data/DoubleTree.hs 45;" f -_cldtCloseLeft src/Dodge/Data/DoubleTree.hs 54;" f -_cldtCloseRight src/Dodge/Data/DoubleTree.hs 48;" f -_cldtCloseRight src/Dodge/Data/DoubleTree.hs 57;" f -_cldtFarLeft src/Dodge/Data/DoubleTree.hs 53;" f -_cldtFarRight src/Dodge/Data/DoubleTree.hs 49;" f -_cldtLink src/Dodge/Data/DoubleTree.hs 47;" f -_cldtLink src/Dodge/Data/DoubleTree.hs 56;" f -_cldtParent src/Dodge/Data/DoubleTree.hs 46;" f -_cldtParent src/Dodge/Data/DoubleTree.hs 55;" f -_cldtUp src/Dodge/Data/DoubleTree.hs 44;" f -_cldtUp src/Dodge/Data/DoubleTree.hs 52;" f +_cldtCloseLeft src/Dodge/Data/DoubleTree.hs 46;" f +_cldtCloseLeft src/Dodge/Data/DoubleTree.hs 55;" f +_cldtCloseRight src/Dodge/Data/DoubleTree.hs 49;" f +_cldtCloseRight src/Dodge/Data/DoubleTree.hs 58;" f +_cldtFarLeft src/Dodge/Data/DoubleTree.hs 54;" f +_cldtFarRight src/Dodge/Data/DoubleTree.hs 50;" f +_cldtLink src/Dodge/Data/DoubleTree.hs 48;" f +_cldtLink src/Dodge/Data/DoubleTree.hs 57;" f +_cldtParent src/Dodge/Data/DoubleTree.hs 47;" f +_cldtParent src/Dodge/Data/DoubleTree.hs 56;" f +_cldtUp src/Dodge/Data/DoubleTree.hs 45;" f +_cldtUp src/Dodge/Data/DoubleTree.hs 53;" f _clickPos src/Dodge/Data/Input.hs 53;" f _clickWorldPos src/Dodge/Data/Input.hs 55;" f _closeButtons src/Dodge/Data/HUD.hs 50;" f @@ -2527,9 +2527,9 @@ _dsTimer src/Dodge/Data/Cloud.hs 32;" f _dsType src/Dodge/Data/Cloud.hs 33;" f _dsVel src/Dodge/Data/Cloud.hs 31;" f _dsZoning src/Dodge/Data/World.hs 49;" f -_dtLeft src/Dodge/Data/DoubleTree.hs 30;" f -_dtRight src/Dodge/Data/DoubleTree.hs 30;" f -_dtValue src/Dodge/Data/DoubleTree.hs 30;" f +_dtLeft src/Dodge/Data/DoubleTree.hs 31;" f +_dtRight src/Dodge/Data/DoubleTree.hs 31;" f +_dtValue src/Dodge/Data/DoubleTree.hs 31;" f _dusts src/Dodge/Data/LWorld.hs 102;" f _ebID src/Dodge/Data/EnergyBall/Type.hs 15;" f _ebPos src/Dodge/Data/EnergyBall.hs 19;" f @@ -2688,9 +2688,9 @@ _lasers src/Dodge/Data/LWorld.hs 116;" f _ldpPos src/Dodge/Data/SelectionList.hs 14;" f _ldpScale src/Dodge/Data/SelectionList.hs 15;" f _ldpVerticalGap src/Dodge/Data/SelectionList.hs 16;" f -_ldtLeft src/Dodge/Data/DoubleTree.hs 35;" f -_ldtRight src/Dodge/Data/DoubleTree.hs 36;" f -_ldtValue src/Dodge/Data/DoubleTree.hs 34;" f +_ldtLeft src/Dodge/Data/DoubleTree.hs 36;" f +_ldtRight src/Dodge/Data/DoubleTree.hs 37;" f +_ldtValue src/Dodge/Data/DoubleTree.hs 35;" f _leadTargetBy src/Dodge/Data/ActionPlan.hs 150;" f _lightSources src/Dodge/Data/LWorld.hs 137;" f _lightingCapShader src/Data/Preload/Render.hs 16;" f @@ -2703,10 +2703,10 @@ _linearShockwaves src/Dodge/Data/LWorld.hs 117;" f _linkGapEW src/Dodge/Data/Room.hs 35;" f _linkGapNS src/Dodge/Data/Room.hs 36;" f _loadedMusic src/Music.hs 8;" f -_locDT src/Dodge/Data/DoubleTree.hs 101;" f -_locDtContext src/Dodge/Data/DoubleTree.hs 100;" f -_locLDT src/Dodge/Data/DoubleTree.hs 62;" f -_locLdtContext src/Dodge/Data/DoubleTree.hs 61;" f +_locDT src/Dodge/Data/DoubleTree.hs 103;" f +_locDtContext src/Dodge/Data/DoubleTree.hs 102;" f +_locLDT src/Dodge/Data/DoubleTree.hs 63;" f +_locLdtContext src/Dodge/Data/DoubleTree.hs 62;" f _lpColor src/Dodge/Data/Laser.hs 25;" f _lpDir src/Dodge/Data/Laser.hs 24;" f _lpPhaseV src/Dodge/Data/Laser.hs 22;" f @@ -3384,7 +3384,7 @@ applyGravityPU src/Dodge/Projectile/Update.hs 56;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 16;" f applyInvLock src/Dodge/HeldUse.hs 476;" f applyMagnetsToBul src/Dodge/Bullet.hs 30;" f -applyPastDamages src/Dodge/Creature/State.hs 133;" f +applyPastDamages src/Dodge/Creature/State.hs 135;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 22;" f applyPosition src/Sound.hs 111;" f applyRecoil src/Dodge/HeldUse.hs 508;" f @@ -3580,7 +3580,7 @@ centerVaultRoom src/Dodge/Room/Procedural.hs 289;" f centroid src/Geometry/Polygon.hs 130;" f centroidNum src/Geometry/Polygon.hs 133;" f chainCreatureUpdates src/Dodge/Creature/ChainUpdates.hs 6;" f -chainLinkOrientation src/Dodge/Creature/State.hs 292;" f +chainLinkOrientation src/Dodge/Creature/State.hs 294;" f chainPairs src/Geometry.hs 359;" f changeSwapOther src/Dodge/Inventory.hs 144;" f changeSwapSel src/Dodge/Inventory.hs 137;" f @@ -3595,7 +3595,7 @@ chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 31;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 37;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 64;" f -checkDeath src/Dodge/Creature/State.hs 78;" f +checkDeath src/Dodge/Creature/State.hs 80;" f checkEndGame src/Dodge/Update.hs 717;" f checkErrorGL src/Shader/Compile.hs 255;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -3712,13 +3712,13 @@ convexHull src/Geometry/Polygon.hs 104;" f convexHullSafe src/Geometry/Polygon.hs 111;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 50;" f copier src/Dodge/Item/Scope.hs 88;" f -copierItemUpdate src/Dodge/Creature/State.hs 199;" f +copierItemUpdate src/Dodge/Creature/State.hs 201;" f copierItemUpdate src/Dodge/ItEffect.hs 37;" f copyItemToFloor src/Dodge/FloorItem.hs 18;" f copyItemToFloorID src/Dodge/FloorItem.hs 22;" f corDoor src/Dodge/Room/Room.hs 376;" f cornerList src/Preload/Render.hs 195;" f -corpseOrGib src/Dodge/Creature/State.hs 107;" f +corpseOrGib src/Dodge/Creature/State.hs 109;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 133;" f corridorN src/Dodge/Room/Corridor.hs 52;" f @@ -3759,7 +3759,7 @@ crShape src/Dodge/Creature/Shape.hs 8;" f crSpring src/Dodge/Update.hs 809;" f crStratConMatches src/Dodge/Creature/Test.hs 77;" f crStrength src/Dodge/Creature/Statistics.hs 24;" f -crUpdate src/Dodge/Creature/State.hs 64;" f +crUpdate src/Dodge/Creature/State.hs 66;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 61;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 42;" f crVocalizationSound src/Dodge/Creature/Vocalization.hs 13;" f @@ -4006,7 +4006,7 @@ 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 140;" f -doAnyEquipmentEffect src/Dodge/Creature/State.hs 209;" f +doAnyEquipmentEffect src/Dodge/Creature/State.hs 211;" f doArcStep src/Dodge/Tesla/Arc.hs 135;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f doBlBl src/Dodge/BlBl.hs 5;" f @@ -4022,7 +4022,7 @@ doCrImp src/Dodge/CreatureEffect.hs 28;" f doCrWdAc src/Dodge/CreatureEffect.hs 77;" f doCrWdImp src/Dodge/CreatureEffect.hs 16;" f doCrWdWd src/Dodge/CreatureEffect.hs 20;" f -doDamage src/Dodge/Creature/State.hs 129;" f +doDamage src/Dodge/Creature/State.hs 131;" f doDeathToggle src/Dodge/WorldEffect.hs 91;" f doDeathTriggers src/Dodge/WorldEffect.hs 86;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 22;" f @@ -4103,7 +4103,7 @@ doublePair src/Geometry.hs 161;" f doublePairSet src/Geometry.hs 165;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 80;" f doubleV2 src/Geometry.hs 168;" f -drawARHUD src/Dodge/Creature/State.hs 319;" f +drawARHUD src/Dodge/Creature/State.hs 322;" f drawAimSweep src/Dodge/Render/Picture.hs 271;" f drawAllShadows src/Dodge/Shadows.hs 5;" f drawBaseMachine src/Dodge/Machine/Draw.hs 57;" f @@ -4230,7 +4230,7 @@ drawWlIDs src/Dodge/Debug/Picture.hs 367;" f drawZoneCol src/Dodge/Debug/Picture.hs 142;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 279;" f droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f -dropAll src/Dodge/Creature/State.hs 126;" f +dropAll src/Dodge/Creature/State.hs 128;" f dropExcept src/Dodge/Creature/Action.hs 166;" f dropInventoryPath src/Dodge/HeldUse.hs 1396;" f dropItem src/Dodge/Creature/Action.hs 172;" f @@ -4379,7 +4379,7 @@ floorItemSPic src/Dodge/Render/ShapePicture.hs 99;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 547;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 543;" f -foldCr src/Dodge/Creature/State.hs 50;" f +foldCr src/Dodge/Creature/State.hs 52;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 110;" f followImpulse src/Dodge/Creature/Impulse.hs 38;" f @@ -4660,9 +4660,9 @@ invCursorParams src/Dodge/ListDisplayParams.hs 36;" f invDP src/Dodge/ListDisplayParams.hs 30;" f invDimColor src/Dodge/DisplayInventory.hs 192;" f invHead src/Dodge/Render/HUD.hs 405;" f -invItemLocUpdate src/Dodge/Creature/State.hs 154;" f +invItemLocUpdate src/Dodge/Creature/State.hs 156;" f invLDT src/Dodge/Item/Grammar.hs 216;" f -invRootItemEffs src/Dodge/Creature/State.hs 147;" f +invRootItemEffs src/Dodge/Creature/State.hs 149;" f invRootMap src/Dodge/Item/Grammar.hs 225;" f invRootTrees src/Dodge/Item/Grammar.hs 246;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f @@ -5153,10 +5153,11 @@ orderAroundFirst src/Geometry/Polygon.hs 82;" f orderAroundFirstReverse src/Geometry/Polygon.hs 78;" f orderPolygon src/Geometry/Polygon.hs 87;" f orderPolygonAround src/Geometry/Polygon.hs 70;" f -orientAttachment src/Dodge/Item/Orientation.hs 26;" f -orientByLink src/Dodge/Item/Orientation.hs 19;" f -orientChild src/Dodge/Item/Orientation.hs 12;" f -orientLocation src/Dodge/Item/Orientation.hs 36;" f +orientAttachment src/Dodge/Item/Orientation.hs 35;" f +orientByLink src/Dodge/Item/Orientation.hs 28;" f +orientChild src/Dodge/Item/Orientation.hs 15;" f +orientLocation src/Dodge/Item/Orientation.hs 53;" f +orientLocation' src/Dodge/Item/Orientation.hs 45;" f orthogonalPointOnSeg src/Geometry/Intersect.hs 291;" f outLink src/Dodge/RoomLink.hs 105;" f outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f @@ -5282,7 +5283,7 @@ pointerToItemLocation src/Dodge/Item/Location.hs 14;" f pointerYourRootItem src/Dodge/Item/Location.hs 31;" f pointerYourSelectedItem src/Dodge/Item/Location.hs 25;" f pointsToPoly src/Geometry/ConvexPoly.hs 39;" f -poisonSPic src/Dodge/Creature/State.hs 120;" f +poisonSPic src/Dodge/Creature/State.hs 122;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 506;" f pokeArrayOff src/Shader/Poke.hs 517;" f @@ -5636,7 +5637,7 @@ scaleSH src/Shape.hs 269;" f scalp src/Dodge/Creature/Picture.hs 90;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 95;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/State.hs 117;" f +scorchSPic src/Dodge/Creature/State.hs 119;" f screenBox src/Dodge/Base/Window.hs 53;" f screenPolygon src/Dodge/Base/Window.hs 17;" f screenPolygonBord src/Dodge/Base/Window.hs 27;" f @@ -5709,7 +5710,7 @@ setOldPos src/Dodge/Update.hs 475;" f setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f -setRBCreatureTargeting src/Dodge/Creature/State.hs 425;" f +setRBCreatureTargeting src/Dodge/Creature/State.hs 470;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 334;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f setShaderSource src/Shader/Compile.hs 290;" f @@ -5776,8 +5777,8 @@ shiftRoomBy src/Dodge/Room/Link.hs 37;" f shiftRoomShiftBy src/Dodge/Room/Link.hs 81;" f shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f shiftedGrid src/Grid.hs 25;" f -shineTargetLaser src/Dodge/Creature/State.hs 327;" f -shineTorch src/Dodge/Creature/State.hs 368;" f +shineTargetLaser src/Dodge/Creature/State.hs 330;" f +shineTorch src/Dodge/Creature/State.hs 413;" f shootBullet src/Dodge/HeldUse.hs 981;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f shootLaser src/Dodge/HeldUse.hs 895;" f @@ -6158,8 +6159,8 @@ tryPutItemInInvAt src/Dodge/Inventory/Add.hs 32;" f trySeedFromClipboard src/Dodge/Menu.hs 91;" f tryShellBounce src/Dodge/Projectile/Update.hs 103;" f trySpinByCID src/Dodge/Projectile/Update.hs 177;" f -trySynthBullet src/Dodge/Creature/State.hs 223;" f -tryUseParent src/Dodge/Creature/State.hs 216;" f +trySynthBullet src/Dodge/Creature/State.hs 225;" f +tryUseParent src/Dodge/Creature/State.hs 218;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turret src/Dodge/Placement/Instance/Turret.hs 35;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 19;" f @@ -6199,7 +6200,7 @@ updateAimPos src/Dodge/Update.hs 308;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 44;" f updateArc src/Dodge/Tesla/Arc.hs 100;" f -updateAttachedItems src/Dodge/Creature/State.hs 282;" f +updateAttachedItems src/Dodge/Creature/State.hs 284;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 453;" f updateBarrel src/Dodge/Barreloid.hs 41;" f updateBarreloid src/Dodge/Barreloid.hs 15;" f @@ -6237,7 +6238,7 @@ updateFloatingCamera src/Dodge/Update/Camera.hs 34;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 364;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 357;" f updateGusts src/Dodge/Update.hs 726;" f -updateHeldRootItem src/Dodge/Creature/State.hs 276;" f +updateHeldRootItem src/Dodge/Creature/State.hs 278;" f updateHumanoid src/Dodge/Humanoid.hs 13;" f updateIMl src/Dodge/Update.hs 510;" f updateIMl' src/Dodge/Update.hs 515;" f @@ -6245,8 +6246,8 @@ updateInGameCamera src/Dodge/Update/Camera.hs 78;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 400;" f updateInt2Map src/Dodge/Zoning/Base.hs 92;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f -updateItemTargeting src/Dodge/Creature/State.hs 394;" f -updateItemWithOrientation src/Dodge/Creature/State.hs 302;" f +updateItemTargeting src/Dodge/Creature/State.hs 439;" f +updateItemWithOrientation src/Dodge/Creature/State.hs 304;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 394;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 382;" f updateLampoid src/Dodge/Lampoid.hs 12;" f