From 752b568a86433ac83a50515535f715c0a225db1b Mon Sep 17 00:00:00 2001 From: justin Date: Mon, 30 Sep 2024 23:02:22 +0100 Subject: [PATCH] Work on orienting and drawing attachments --- ghcidOutput | 100 ++++++++++- src/Dodge/Creature/Impulse/UseItem.hs | 4 +- src/Dodge/Creature/State.hs | 142 +++++++++------- src/Dodge/Data/ComposedItem.hs | 2 +- src/Dodge/Data/Item/Use.hs | 2 +- src/Dodge/Item/Ammo.hs | 8 +- src/Dodge/Item/AmmoPosition.hs | 12 -- src/Dodge/Item/Display.hs | 2 +- src/Dodge/Item/Draw/SPic.hs | 25 ++- src/Dodge/Item/Grammar.hs | 13 +- src/Dodge/Item/Orientation.hs | 18 +- src/Dodge/Render/ShapePicture.hs | 5 - tags | 236 +++++++++++++------------- 13 files changed, 340 insertions(+), 229 deletions(-) delete mode 100644 src/Dodge/Item/AmmoPosition.hs diff --git a/ghcidOutput b/ghcidOutput index ebf654864..ee6d7066a 100644 --- a/ghcidOutput +++ b/ghcidOutput @@ -1 +1,99 @@ -All good (607 modules, at 21:29:51) +/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:11:1-39: warning: [-Wunused-imports] + The qualified import of ‘Linear.Quaternion’ is redundant + | +11 | import qualified Linear.Quaternion as Q + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:12:1-20: warning: [-Wunused-imports] + The import of ‘Geometry.Data’ is redundant + | +12 | import Geometry.Data + | ^^^^^^^^^^^^^^^^^^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Grammar.hs:65:5: warning: [-Wunused-local-binds] + Defined but not used: ‘c’ + | +65 | c x y _ _ _ = Just (x,y) + | ^ +/home/justin/Haskell/loop/src/Dodge/Item/Draw/SPic.hs:456:5-6: warning: [-Wunused-local-binds] + Defined but not used: ‘tx’ + | +456 | tx = 4 + | ^^ +/home/justin/Haskell/loop/src/Dodge/Item/Draw/SPic.hs:456:10: warning: [-Wtype-defaults] + • Defaulting the following constraint to type ‘Integer’ + Num p0 arising from the literal ‘4’ + • In the expression: 4 + In an equation for ‘tx’: tx = 4 + In an equation for ‘flamerPic’: + flamerPic _ + = (colorSH yellow $ xCylinderST 5 18, mempty) + where + tx = 4 + ty = - 6 + tz = 3 + r = 5 + | +456 | tx = 4 + | ^ +/home/justin/Haskell/loop/src/Dodge/Item/Draw/SPic.hs:457:5-6: warning: [-Wunused-local-binds] + Defined but not used: ‘ty’ + | +457 | ty = - 6 + | ^^ +/home/justin/Haskell/loop/src/Dodge/Item/Draw/SPic.hs:457:10-12: warning: [-Wtype-defaults] + • Defaulting the following constraint to type ‘Integer’ + Num a0 arising from a use of syntactic negation + • In the expression: - 6 + In an equation for ‘ty’: ty = - 6 + In an equation for ‘flamerPic’: + flamerPic _ + = (colorSH yellow $ xCylinderST 5 18, mempty) + where + tx = 4 + ty = - 6 + tz = 3 + r = 5 + | +457 | ty = - 6 + | ^^^ +/home/justin/Haskell/loop/src/Dodge/Item/Draw/SPic.hs:458:5-6: warning: [-Wunused-local-binds] + Defined but not used: ‘tz’ + | +458 | tz = 3 + | ^^ +/home/justin/Haskell/loop/src/Dodge/Item/Draw/SPic.hs:458:10: warning: [-Wtype-defaults] + • Defaulting the following constraint to type ‘Integer’ + Num p0 arising from the literal ‘3’ + • In the expression: 3 + In an equation for ‘tz’: tz = 3 + In an equation for ‘flamerPic’: + flamerPic _ + = (colorSH yellow $ xCylinderST 5 18, mempty) + where + tx = 4 + ty = - 6 + tz = 3 + r = 5 + | +458 | tz = 3 + | ^ +/home/justin/Haskell/loop/src/Dodge/Item/Draw/SPic.hs:459:5: warning: [-Wunused-local-binds] + Defined but not used: ‘r’ + | +459 | r = 5 + | ^ +/home/justin/Haskell/loop/src/Dodge/Item/Draw/SPic.hs:459:9: warning: [-Wtype-defaults] + • Defaulting the following constraint to type ‘Integer’ + Num p0 arising from the literal ‘5’ + • In the expression: 5 + In an equation for ‘r’: r = 5 + In an equation for ‘flamerPic’: + flamerPic _ + = (colorSH yellow $ xCylinderST 5 18, mempty) + where + tx = 4 + ty = - 6 + tz = 3 + r = 5 + | +459 | r = 5 + | ^ diff --git a/src/Dodge/Creature/Impulse/UseItem.hs b/src/Dodge/Creature/Impulse/UseItem.hs index f3eb4a31b..24575998a 100644 --- a/src/Dodge/Creature/Impulse/UseItem.hs +++ b/src/Dodge/Creature/Impulse/UseItem.hs @@ -42,7 +42,7 @@ itemUseEffect cr it w = case it ^. ldtValue . itUse of CraftUse{} -> w AttachUse{} -> selectUse it cr w TargetingUse {} -> w - AmmoMagUse{} -> w + UseAmmoMag{} -> w ScopeUse{} -> w BulletModUse{} -> w where @@ -107,7 +107,7 @@ useItemLeftClick cr w = fromMaybe w $ do ConsumeUse{} -> return $ useItemLeftClick' cr w EquipUse{} -> return $ useItemLeftClick' cr w UseHotkey{} -> return $ useItemLeftClick' cr w - AmmoMagUse{} -> return w + UseAmmoMag{} -> return w _ -> Nothing useItemLeftClick' :: Creature -> World -> World diff --git a/src/Dodge/Creature/State.hs b/src/Dodge/Creature/State.hs index bcc01bcaa..52d3d66b3 100644 --- a/src/Dodge/Creature/State.hs +++ b/src/Dodge/Creature/State.hs @@ -3,39 +3,32 @@ module Dodge.Creature.State ( doDamage, ) where -import Dodge.Zoning.Creature -import FoldableHelp -import Data.Maybe import qualified Data.Map.Strict as M -import qualified SDL -import Dodge.Creature.Test ---import Dodge.Item.Display -- this should not really be imported... TODO move canAttachTargetingBelow ---import Control.Applicative ---import Data.Foldable ---import Data.Maybe +import Data.Maybe +import Data.Monoid import Dodge.Base import Dodge.Corpse.Make import Dodge.Creature.Action import Dodge.Creature.Damage import Dodge.Creature.Impulse.Movement import Dodge.Creature.State.WalkCycle ---import Dodge.Creature.Test +import Dodge.Creature.Test import Dodge.Damage import Dodge.Data.World import Dodge.EnergyBall ---import Dodge.Equipment import Dodge.Euse import Dodge.Hammer import Dodge.ItEffect ---import Dodge.LightSource.Torch import Dodge.Prop.Gib import Dodge.SoundLogic ---import Dodge.Targeting +import Dodge.Zoning.Creature +import FoldableHelp import Geometry import qualified IntMapHelp as IM import LensHelp import Picture import RandomHelp +import qualified SDL import Shape import ShapePicture @@ -68,8 +61,8 @@ stateUpdate f = , updateInv -- upInv must be called before invSideEff 22.05.23 , invSideEff , equipmentEffects --- , heldItemEffects --- , heldAimEffects + -- , heldItemEffects + -- , heldAimEffects ] --heldItemEffects :: Creature -> World -> World @@ -85,8 +78,9 @@ stateUpdate f = checkDeath :: Creature -> World -> World checkDeath cr w - | _crHP cr > 0 = w - & cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .~ [] + | _crHP cr > 0 = + w + & cWorld . lWorld . creatures . ix (_crID cr) . crState . csDamage .~ [] | otherwise = w -- & creatures . at (_crID cr) .~ Nothing @@ -154,7 +148,7 @@ internalHammerUpdate :: Creature -> World -> World internalHammerUpdate cr = cWorld . lWorld . creatures . ix (_crID cr) %~ ( (crHammerPosition %~ moveHammerUp) --- . stepReloading + -- . stepReloading . updateMovement ) @@ -236,25 +230,23 @@ updateInv cr = cWorld . lWorld . creatures . ix (_crID cr) . crInv %~ IM.map ite -- a loop going over equipped items equipmentEffects :: Creature -> World -> World -equipmentEffects cr = flip (foldl' $ flip $ useEquipment cr) (IM.keys $ _crInvEquipped cr) +--equipmentEffects cr = flip (foldl' $ flip $ useEquipment cr) (IM.keys $ _crInvEquipped cr) +equipmentEffects cr = alaf Endo foldMap (useEquipment cr) (IM.keys $ _crInvEquipped cr) -- a loop going over all inventory items invSideEff :: Creature -> World -> World -invSideEff cr w = --- updateTargeting (crGetTargeting cr) cr $ --- weaponReloadSounds cr $ - IM.foldl' f w (_crInv cr) +invSideEff cr = alaf Endo foldMap f (_crInv cr) where -- be careful with side effects that affect creature targeting - f w' it = - itemInvSideEffect cr it $ - --doItemTargeting i cr w' & maybe id (\g -> doInvEffect g it cr) (it ^? itEffect . ieInv) - w' & maybe id (\g -> doInvEffect g it cr) (it ^? itEffect . ieInv) + f it = + itemInvSideEffect cr it + . maybe id (\g -> doInvEffect g it cr) (it ^? itEffect . ieInv) itemInvSideEffect :: Creature -> Item -> World -> World itemInvSideEffect cr itm = case _itType itm of TARGETING tt -> updateItemTargeting tt cr itm - _ -> id + _ -> id + --itemInvSideEffect cr it -- | hastorchattach = createAttachLight cr it -- | otherwise = id @@ -267,39 +259,57 @@ itemInvSideEffect cr itm = case _itType itm of -- attachoff = it ^?! itDimension . dimAttachPos updateItemTargeting :: TargetingType -> Creature -> Item -> World -> World -updateItemTargeting tt cr itm w = w & case tt of - _ | not isattached - -> cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm) . itUse %~ - ( (tgPos .~ Nothing) - . (tgActive .~ False) - ) - TARGETLASER | crIsAiming cr -> cWorld . lWorld . lasers - .:~ LaserStart - { _lpPhaseV = 1 - , _lpDir = _crDir cr - , _lpPos = sp - , _lpColor = col - , _lpType = TargetingLaser (_itID itm) - } - TARGETLASER -> cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm) - . itUse . tgPos .~ Nothing - TargetRBPress | rbpressed - -> cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm) . itUse %~ - ( (tgPos %~ maybe (Just $ mouseWorldPos (w ^. input) (w ^. wCam)) Just) - . (tgActive .~ True) - ) - TargetRBPress - -> cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm) . itUse %~ - ( (tgPos .~ Nothing) - . (tgActive .~ False) - ) - TargetRBCreature -> cWorld . lWorld . creatures . ix (_crID cr) - . crInv . ix (_ilInvID $ _itLocation itm) . itUse %~ setRBCreatureTargeting cr w - TargetCursor -> cWorld . lWorld . creatures . ix (_crID cr) - . crInv . ix (_ilInvID $ _itLocation itm) . itUse .~ TargetingUse - (Just (mouseWorldPos (w ^. input) (w ^. wCam))) Nothing True - where - isattached = itm ^?! itLocation . ilIsAttached +updateItemTargeting tt cr itm w = + w & case tt of + _ + | not isattached -> + cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm) . itUse + %~ ( (tgPos .~ Nothing) + . (tgActive .~ False) + ) + TARGETLASER + | crIsAiming cr -> + cWorld . lWorld . lasers + .:~ LaserStart + { _lpPhaseV = 1 + , _lpDir = _crDir cr + , _lpPos = sp + , _lpColor = col + , _lpType = TargetingLaser (_itID itm) + } + TARGETLASER -> + cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm) + . itUse + . tgPos + .~ Nothing + TargetRBPress + | rbpressed -> + cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm) . itUse + %~ ( (tgPos %~ maybe (Just $ mouseWorldPos (w ^. input) (w ^. wCam)) Just) + . (tgActive .~ True) + ) + TargetRBPress -> + cWorld . lWorld . creatures . ix (_crID cr) . crInv . ix (_ilInvID $ _itLocation itm) . itUse + %~ ( (tgPos .~ Nothing) + . (tgActive .~ False) + ) + TargetRBCreature -> + cWorld . lWorld . creatures . ix (_crID cr) + . crInv + . ix (_ilInvID $ _itLocation itm) + . itUse + %~ setRBCreatureTargeting cr w + TargetCursor -> + cWorld . lWorld . creatures . ix (_crID cr) + . crInv + . ix (_ilInvID $ _itLocation itm) + . itUse + .~ TargetingUse + (Just (mouseWorldPos (w ^. input) (w ^. wCam))) + Nothing + True + where + isattached = itm ^?! itLocation . ilIsAttached rbpressed = SDL.ButtonRight `M.member` _mouseButtons (_input w) sp = _crPos cr +.+ 15 *.* unitVectorAtAngle (_crDir cr) col = blue -- mixColors reloadFrac (1-reloadFrac) blue red @@ -307,7 +317,8 @@ updateItemTargeting tt cr itm w = w & case tt of setRBCreatureTargeting :: Creature -> World -> ItemUse -> ItemUse setRBCreatureTargeting cr w ituse | SDL.ButtonRight `M.member` _mouseButtons (_input w) && isJust (ituse ^? tgID . _Just) - && canSeeTarget = ituse & updatePos & tgActive .~ True + && canSeeTarget = + ituse & updatePos & tgActive .~ True | otherwise = ituse & tgID .~ fmap _crID newtarg & updatePos & tgActive .~ False where newtarg = @@ -328,6 +339,7 @@ itemUpdate :: Item -> Item itemUpdate = updateAutoRecharge . (itUse %~ useUpdate) + -- . (itLocation .~ InInv (_crID cr) i itmisselected itmisroot) -- where -- itmisroot = Just i == (cr ^? crManipulation . manObject . inInventory . imRootItem) @@ -340,7 +352,7 @@ updateAutoRecharge it = case it ^? itUse . leftConsumption of | l < m -> it & itUse . leftConsumption . arProgress -~ 1 _ -> it ---itemGetTargeting :: LabelDoubleTree ComposeLinkType Item +--itemGetTargeting :: LabelDoubleTree ComposeLinkType Item -- I feel like there should be a centralised function that supersumes this -- i.e. a function that deals with all states that depend upon item positioning @@ -352,11 +364,11 @@ updateAutoRecharge it = case it ^? itUse . leftConsumption of -- itm ^? itType . iyModules . ix ModTarget . imtTargetType -- <|> do -- tt <- cr ^? crInv . ix (i-1) . itType . iyBase . ibtTargeting --- guard (canAttachTargeting tt itm) +-- guard (canAttachTargeting tt itm) -- return tt -- <|> do -- tt <- cr ^? crInv . ix (i+1) . itUse . equipTargeting . _Just --- guard (canAttachTargeting tt itm) +-- guard (canAttachTargeting tt itm) -- return tt --weaponReloadSounds :: Creature -> World -> World diff --git a/src/Dodge/Data/ComposedItem.hs b/src/Dodge/Data/ComposedItem.hs index 95cfb31bc..9b1076c17 100644 --- a/src/Dodge/Data/ComposedItem.hs +++ b/src/Dodge/Data/ComposedItem.hs @@ -44,7 +44,7 @@ type ComposedItem = (Item, ItemStructuralFunction) data ItemLink = ILink { _iatType :: ComposeLinkType - , _iatOrient :: Item -> Item -> Maybe (Point3, Quaternion Float) + , _iatOrient :: Item -> ComposeLinkType -> Item -> Maybe (Point3, Quaternion Float) } data LinkTest lt = LTest diff --git a/src/Dodge/Data/Item/Use.hs b/src/Dodge/Data/Item/Use.hs index 811885f9c..feec6c2a8 100644 --- a/src/Dodge/Data/Item/Use.hs +++ b/src/Dodge/Data/Item/Use.hs @@ -62,7 +62,7 @@ data ItemUse AttachUse {_atLinkedProjectile :: Maybe Int} | -- {_attachParams :: AttachParams} - AmmoMagUse + UseAmmoMag { _amagLoadStatus :: ReloadStatus , _amagParams :: AmmoParams , _amagType :: AmmoType diff --git a/src/Dodge/Item/Ammo.hs b/src/Dodge/Item/Ammo.hs index 73145ecf5..aabb298e6 100644 --- a/src/Dodge/Item/Ammo.hs +++ b/src/Dodge/Item/Ammo.hs @@ -14,7 +14,7 @@ tinMag :: Item tinMag = defaultHeldItem & itType .~ AMMOMAG TINMAG & itUse - .~ AmmoMagUse + .~ UseAmmoMag { _amagParams = BulletParams defaultBullet , _amagType = BulletAmmo , _amagLoadStatus = @@ -53,7 +53,7 @@ shellMag :: Item shellMag = defaultHeldItem & itType .~ AMMOMAG SHELLMAG & itUse - .~ AmmoMagUse + .~ UseAmmoMag { _amagParams = ProjectileParams { _ampPayload = ExplosionPayload } @@ -73,7 +73,7 @@ battery :: Item battery = defaultHeldItem & itType .~ AMMOMAG BATTERY & itUse - .~ AmmoMagUse + .~ UseAmmoMag { _amagParams = BulletParams defaultBullet , _amagType = ElectricalAmmo , _amagLoadStatus = @@ -87,7 +87,7 @@ chemFuelPouch :: Item chemFuelPouch = defaultHeldItem & itType .~ AMMOMAG CHEMFUELPOUCH & itUse - .~ AmmoMagUse + .~ UseAmmoMag { _amagParams = GasParams ChemFuel , _amagType = GasAmmo , _amagLoadStatus = diff --git a/src/Dodge/Item/AmmoPosition.hs b/src/Dodge/Item/AmmoPosition.hs deleted file mode 100644 index 93279704f..000000000 --- a/src/Dodge/Item/AmmoPosition.hs +++ /dev/null @@ -1,12 +0,0 @@ -{-# LANGUAGE TemplateHaskell #-} -module Dodge.Item.AmmoPosition where - -import Linear.Quaternion (Quaternion (..)) -import Control.Lens -import Geometry.Data - -data AmmoPosition - = Magazine {_amposPos :: Point3, _amposDir :: Quaternion Float} - | Bullets {_amPosDirs :: [(Point3,Quaternion Float)]} - | NoAmmoPosition -makeLenses ''AmmoPosition diff --git a/src/Dodge/Item/Display.hs b/src/Dodge/Item/Display.hs index dfb2b7d75..f51a4c5a0 100644 --- a/src/Dodge/Item/Display.hs +++ b/src/Dodge/Item/Display.hs @@ -115,7 +115,7 @@ itemNumberDisplay cr itm = case iu of CraftUse -> [] ConsumeUse {} -> [] AttachUse {} -> [] - AmmoMagUse {} -> [maybe "" shortShow $ itm ^? itUse . amagLoadStatus . iaLoaded] + UseAmmoMag {} -> [maybe "" shortShow $ itm ^? itUse . amagLoadStatus . iaLoaded] ScopeUse OpticScope {_opticZoom = x} -> [shortShow x] ScopeUse {} -> [] TargetingUse {_tgPos = mp} -> [maybe "" shortShow mp] diff --git a/src/Dodge/Item/Draw/SPic.hs b/src/Dodge/Item/Draw/SPic.hs index 600ef4c29..ddb7cefef 100644 --- a/src/Dodge/Item/Draw/SPic.hs +++ b/src/Dodge/Item/Draw/SPic.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE LambdaCase #-} + module Dodge.Item.Draw.SPic ( itemSPic, itemTreeSPic, @@ -35,7 +37,7 @@ itemTreeSPic (LDT (itm,_) l r) = itemSPic itm itemRotTreeSPic :: Item -> (ItemLink,LabelDoubleTree ItemLink ComposedItem) -> SPic itemRotTreeSPic par (il,t) = fromMaybe mempty $ do - (p,q) <- _iatOrient il par itm + (p,q) <- _iatOrient il par (_iatType il) itm return $ (translateSP p $ overPosSP (Q.rotate q) $ itemTreeSPic t) where itm = t ^. ldtValue . _1 @@ -48,10 +50,21 @@ itemSPic it = case it ^. itType of EQUIP et -> equipItemSPic et it CONSUMABLE{} -> defSPic ATTACH {} -> defSPic - AMMOMAG {} -> defSPic + AMMOMAG amt -> ammoMagSPic it amt TARGETING {} -> defSPic BULLETMOD {} -> defSPic +ammoMagSPic :: Item -> AmmoMagType -> SPic +ammoMagSPic it = \case + TINMAG -> noPic $ upperPrismPolyTS 1 (reverse $ rectNSWE 0 (- y) (-1) 1) + DRUMMAG -> noPic $ upperPrismPolyTS 1 (reverse $ rectNSWE 0 (- y) (-1) 1) + CHEMFUELPOUCH -> (colorSH yellow (upperPrismPolyST 3 $ polyCirc 3 5) + , mempty) + _ -> noPic $ upperPrismPolyTS 1 (reverse $ rectNSWE 0 (- y) (-1) 1) + where + y = fromIntegral y' * 0.3 + y' = fromMaybe 0 $ it ^? itUse . amagLoadStatus . iaLoaded + equipItemSPic :: EquipItemType -> Item -> SPic equipItemSPic et _ = case et of MAGSHIELD -> defSPic @@ -432,10 +445,12 @@ flamerPic :: Item -> SPic --flamerPic it = flamerPic _ = ( colorSH yellow $ - translateSHxy tx ty (upperPrismPolyST tz $ polyCirc 3 r) - <> xCylinderST 5 18 +-- translateSHxy tx ty (upperPrismPolyST tz $ polyCirc 3 r) +-- <> + xCylinderST 5 18 + , mempty --, color black $ translate3 (V3 tx ty (tz + 0.01)) $ circleSolid (r * am) - , color black $ translate3 (V3 tx ty (tz + 0.01)) $ circleSolid (r * 0.5) +-- , color black $ translate3 (V3 tx ty (tz + 0.01)) $ circleSolid (r * 0.5) ) where tx = 4 diff --git a/src/Dodge/Item/Grammar.hs b/src/Dodge/Item/Grammar.hs index df774f58e..51a65eb91 100644 --- a/src/Dodge/Item/Grammar.hs +++ b/src/Dodge/Item/Grammar.hs @@ -7,6 +7,7 @@ module Dodge.Item.Grammar ( invRootMap, ) where +import Dodge.Item.Orientation import qualified Linear.Quaternion as Q import Geometry.Data import Control.Applicative @@ -38,8 +39,8 @@ useBreakListsLinkTest llist rlist = LTest ltest rtest basePartiallyComposedItem' :: Item -> PartiallyComposedItem ItemLink basePartiallyComposedItem' itm = case itm ^. itType of HELD _ -> (itm, WeaponPlatformSF, useBreakListsLinkTest - (map (\(i,a) -> (AmmoMagSF a, ILink (AmmoInLink i a) (c (V3 7 (-2) 0) rhs - ) + --(map (\(i,a) -> (AmmoMagSF a, ILink (AmmoInLink i a) (c (V3 7 (-2) 0) rhs + (map (\(i,a) -> (AmmoMagSF a, ILink (AmmoInLink i a) orientAttachment )) (IM.toList $ itm ^. itUse . heldAmmoTypes)) [noa WeaponTargetingSF WeaponTargetingLink, noa WeaponScopeSF WeaponScopeLink] @@ -60,9 +61,9 @@ basePartiallyComposedItem' itm = case itm ^. itType of CRAFT {} -> isolate -- _ -> where - noa x y = (x, ILink y (const (const Nothing))) - c x y _ _ = Just (x,y) - rhs = Q.axisAngle (V3 1 0 0) 0 + noa x y = (x, ILink y orientAttachment) + c x y _ _ _ = Just (x,y) +-- rhs = Q.axisAngle (V3 1 0 0) 0 nolinks x = (itm,x, LTest (const Nothing) (const Nothing)) isolate = (itm,UncomposableIsolateSF, LTest (const Nothing) (const Nothing)) @@ -81,7 +82,7 @@ ammoComposedItem' itm = fromMaybe (error "in ammoComposedItem, wrong item") $ do [] ) where - noa x y = (x, ILink y (const (const Nothing))) + noa x y = (x, ILink y orientAttachment) type LDTComb a b = LabelDoubleTree b a -> LabelDoubleTree b a -> Maybe (LabelDoubleTree b a) diff --git a/src/Dodge/Item/Orientation.hs b/src/Dodge/Item/Orientation.hs index 30f803f96..2fe09e233 100644 --- a/src/Dodge/Item/Orientation.hs +++ b/src/Dodge/Item/Orientation.hs @@ -8,9 +8,19 @@ import qualified Linear.Quaternion as Q orientChild :: Item -> (Point3, Q.Quaternion Float) orientChild itm = case _itType itm of - HELD {} -> (0,0) - _ -> (0,0) + HELD {} -> (0,Q.axisAngle (V3 1 0 0) 0) + _ -> (0,Q.axisAngle (V3 1 0 0) 0) orientByLink :: Item -> ComposeLinkType -> (Point3, Q.Quaternion Float) -orientByLink itm _ = case _itType itm of - _ -> (0,0) +orientByLink itm lt = case (_itType itm,lt) of + --(HELD FLAMETHROWER, AmmoInLink{}) -> undefined --(V3 4 (-6) 0,0) + (HELD FLAMETHROWER, AmmoInLink{}) -> (V3 4 (-6) 0, Q.axisAngle (V3 1 0 0) 0) + (HELD _,AmmoInLink{}) -> (V3 7 (-2) 0, Q.axisAngle (V3 1 0 0) 0) + _ -> (0,Q.axisAngle (V3 1 0 0) 0) + +orientAttachment :: Item -> ComposeLinkType -> Item -> Maybe (Point3, Q.Quaternion Float) +orientAttachment par lnk ch = Just (t1 + (Q.rotate q1 t2), q1 * q2) +--orientAttachment par lnk ch = Just (t1 , q1 ) + where + (t1,q1) = orientByLink par lnk + (t2,q2) = orientChild ch diff --git a/src/Dodge/Render/ShapePicture.hs b/src/Dodge/Render/ShapePicture.hs index 435967df5..ffcff1788 100644 --- a/src/Dodge/Render/ShapePicture.hs +++ b/src/Dodge/Render/ShapePicture.hs @@ -84,11 +84,6 @@ anyTargeting w = fromMaybe mempty $ do <|> lookup AugmentedHUDLink (ttree ^. ldtRight) return (mempty , drawTargeting (ttree ^. ldtValue) w) --- tt <- cr ^? crTargeting . ctType . _Just --- return $ noShape $ drawTargeting tt cr cfig w --- where --- cr = you w - drawCreature :: Creature -> SPic drawCreature cr = case _crType cr of Humanoid{} -> basicCrPict cr diff --git a/tags b/tags index 6032fe527..48086c3ee 100644 --- a/tags +++ b/tags @@ -77,7 +77,6 @@ AmmoEffectSF src/Dodge/Data/ComposedItem.hs 39;" C AmmoInLink src/Dodge/Data/ComposedItem.hs 17;" C AmmoMagSF src/Dodge/Data/ComposedItem.hs 33;" C AmmoMagType src/Dodge/Data/Item/Combine.hs 89;" t -AmmoMagUse src/Dodge/Data/Item/Use.hs 65;" C AmmoModLink src/Dodge/Data/ComposedItem.hs 18;" C AmmoModifierSF src/Dodge/Data/ComposedItem.hs 36;" C AmmoParams src/Dodge/Data/Item/Use.hs 122;" t @@ -104,7 +103,7 @@ ArbitraryImpulseEffect src/Dodge/Data/ActionPlan.hs 48;" C ArbitraryImpulseFunction src/Dodge/Data/ActionPlan.hs 46;" C Arc src/Dodge/Tesla/Arc.hs 1;" m Arc src/Picture/Arc.hs 1;" m -ArcShad src/Picture/Data.hs 40;" C +ArcShad src/Picture/Data.hs 37;" C ArcStep src/Dodge/Data/ArcStep.hs 14;" t ArcStep src/Dodge/ArcStep.hs 1;" m ArcStep src/Dodge/Data/ArcStep.hs 6;" m @@ -838,7 +837,7 @@ Either src/Dodge/Layout/Tree/Either.hs 4;" m Eldritch src/Dodge/Data/Scenario.hs 34;" C ElectricalAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 43;" C Electronics src/Dodge/Data/Material.hs 11;" C -EllShad src/Picture/Data.hs 41;" C +EllShad src/Picture/Data.hs 38;" C Enable_debug src/Dodge/Data/Config.hs 68;" C EncircleFlock src/Dodge/Creature/State/Data.hs 32;" C EncircleFlock src/Dodge/Data/Creature/State.hs 37;" C @@ -1338,7 +1337,7 @@ LBoost src/Dodge/Data/Item/HeldUse.hs 55;" C LBranches src/TreeExtra.hs 24;" C LDT src/Dodge/Data/DoubleTree.hs 39;" C LDTBottomNode src/Dodge/Data/DoubleTree.hs 27;" C -LDTComb src/Dodge/Item/Grammar.hs 87;" t +LDTComb src/Dodge/Item/Grammar.hs 86;" t LDTMidAboveNode src/Dodge/Data/DoubleTree.hs 25;" C LDTMidBelowNode src/Dodge/Data/DoubleTree.hs 26;" C LDTRootNode src/Dodge/Data/DoubleTree.hs 23;" C @@ -1826,6 +1825,7 @@ OptionScreen src/Dodge/Data/Universe.hs 78;" C OptionScreenFlag src/Dodge/Data/Universe.hs 68;" t OptionType src/Dodge/Menu/OptionType.hs 2;" m OrAno src/Dodge/Layout/Tree/Annotate.hs 22;" C +Orientation src/Dodge/Item/Orientation.hs 1;" m OutAction src/Dodge/Creature/Action.hs 51;" t OutLink src/Dodge/Data/Room.hs 43;" C OutLink src/Dodge/Room/Data.hs 43;" C @@ -1916,7 +1916,7 @@ PerturbTillBreakPreviousArc src/Dodge/Data/Item/Params.hs 61;" C Pic2d src/PolyPic.hs 17;" t PickOnePlacement src/Dodge/Data/GenWorld.hs 87;" C PickUp src/Dodge/Inventory/PickUp.hs 1;" m -Picture src/Picture/Data.hs 63;" t +Picture src/Picture/Data.hs 44;" t Picture src/Dodge/Creature/Picture.hs 5;" m Picture src/Dodge/Debug/Picture.hs 1;" m Picture src/Dodge/Picture.hs 4;" m @@ -1948,7 +1948,7 @@ Point3 src/Geometry/Data.hs 25;" t Point4 src/Geometry/Data.hs 29;" t Poke src/Shader/Poke.hs 1;" m PolyPic src/PolyPic.hs 2;" m -PolyShad src/Picture/Data.hs 38;" C +PolyShad src/Picture/Data.hs 35;" C Polygon src/Geometry/Polygon.hs 2;" m Polyhedra src/Polyhedra/Data.hs 13;" t Polyhedra src/Polyhedra.hs 1;" m @@ -2225,7 +2225,7 @@ SPLITLAS src/Dodge/Combine/Data.hs 214;" C SPRING src/Dodge/Combine/Data.hs 30;" C SPRING src/Dodge/Data/Item/Combine.hs 31;" C SPic src/ShapePicture/Data.hs 4;" t -SPic src/Dodge/Item/Draw/SPic.hs 1;" m +SPic src/Dodge/Item/Draw/SPic.hs 3;" m SQUARE src/Dodge/Data/GenParams.hs 20;" C SSSExtra src/Dodge/Data/SelectionList.hs 44;" t ST src/Dodge/Tree/Compose/Data.hs 12;" C @@ -2293,7 +2293,7 @@ SetLabel src/Dodge/Layout/Tree/Annotate.hs 26;" C SetTarget src/Dodge/Creature/SetTarget.hs 2;" m SetTrigger src/Dodge/Data/WorldEffect.hs 25;" C Setup src/Framebuffer/Setup.hs 2;" m -ShadNum src/Picture/Data.hs 37;" t +ShadNum src/Picture/Data.hs 34;" t Shader src/Shader/Data.hs 51;" t Shader src/Shader.hs 1;" m ShaderTexture src/Shader/Data.hs 94;" t @@ -2597,7 +2597,7 @@ TestString src/Dodge/TestString.hs 2;" m Text src/Dodge/Equipment/Text.hs 1;" m Text src/Dodge/Update/Input/Text.hs 1;" m Text src/Picture/Text.hs 1;" m -TextShad src/Picture/Data.hs 39;" C +TextShad src/Picture/Data.hs 36;" C ThingsHit src/Dodge/WorldEvent/ThingsHit.hs 6;" m ThirdPartyLens src/ThirdPartyLens.hs 2;" m ThrustPU src/Dodge/Data/Item/Use/Consumption/Ammo.hs 30;" C @@ -2726,6 +2726,7 @@ Use src/Dodge/Data/Item/Use.hs 6;" m Use src/Dodge/Default/Item/Use.hs 1;" m UseAheadPos src/Dodge/Data/ActionPlan.hs 160;" C UseAll src/Dodge/UseAll.hs 2;" m +UseAmmoMag src/Dodge/Data/Item/Use.hs 65;" C UseDelay src/Dodge/Data/Item/HeldDelay.hs 13;" t UseDelay src/Dodge/Data/Item/Use/Delay.hs 10;" t UseDelay src/Dodge/Data/Item/UseDelay.hs 10;" t @@ -4156,7 +4157,6 @@ _unPrimitiveMode src/Shader/Data.hs 99;" f _unPutCrit src/Dodge/Data/GenWorld.hs 32;" f _unRandomPlacement src/Dodge/Data/GenWorld.hs 86;" f _unST src/Dodge/Tree/Compose/Data.hs 12;" f -_unShadNum src/Picture/Data.hs 47;" f _unTO src/Shader/Data.hs 59;" f _unputTerminal src/Dodge/Data/GenWorld.hs 37;" f _useAheadPos src/Dodge/Data/ActionPlan.hs 161;" f @@ -4298,7 +4298,7 @@ aTreeStrut src/Dodge/Layout/Tree/GenerateStructure.hs 39;" f aTreeStrut src/Dodge/Tree/GenerateStructure.hs 37;" f aWallPulse src/Dodge/Item/Weapon/UseEffect.hs 21;" f accessTerminal src/Dodge/WorldEffect.hs 54;" f -activeTargetCursorPic src/Dodge/Targeting/Draw.hs 49;" f +activeTargetCursorPic src/Dodge/Targeting/Draw.hs 27;" f addArmour src/Dodge/Creature.hs 83;" f addBlock src/Dodge/LevelGen/Block.hs 20;" f addBoostShockwave src/Dodge/Item/Weapon/Booster.hs 56;" f @@ -4341,7 +4341,7 @@ addSideEffect src/Dodge/Concurrent.hs 32;" f addSouthPillars src/Dodge/Room/LongDoor.hs 87;" f addTermSignal src/Dodge/Event/Input.hs 34;" f addTile src/Dodge/Room/AddTile.hs 11;" f -addTinClip src/Dodge/Item/Draw/SPic.hs 316;" f +addTinClip src/Dodge/Item/Draw/SPic.hs 329;" f addToTrunk src/Dodge/Layout/Tree/Polymorphic.hs 116;" f addToTrunk src/Dodge/Tree/Polymorphic.hs 129;" f addToTrunk src/TreeHelp.hs 156;" f @@ -4352,7 +4352,7 @@ advanceScrollAmount src/Dodge/Update.hs 299;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 29;" f advanceStepCounter src/Dodge/Creature/Action/Movement.hs 56;" f advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 45;" f -aimDelaySweep src/Dodge/Render/ShapePicture.hs 47;" f +aimDelaySweep src/Dodge/Render/ShapePicture.hs 49;" f aimStanceInfo src/Dodge/Item/Info.hs 215;" f aimTurn src/Dodge/Creature/YourControl.hs 189;" f aimingMuzzleLength src/Dodge/Creature/HandPos.hs 46;" f @@ -4370,7 +4370,8 @@ airlockZ src/Dodge/Room/Airlock.hs 91;" f allHotkeys src/Dodge/Creature/YourControl.hs 52;" f allVisibleWalls src/Dodge/Base/Collide.hs 131;" f alongSegBy src/Geometry.hs 43;" f -ammoComposedItem' src/Dodge/Item/Grammar.hs 70;" f +ammoComposedItem' src/Dodge/Item/Grammar.hs 69;" f +ammoMagSPic src/Dodge/Item/Draw/SPic.hs 57;" f amr src/Dodge/Item/Held/Rod.hs 46;" f amr src/Dodge/Item/Weapon/BulletGun/Rod.hs 56;" f anItemFindPulse src/Dodge/Item/Weapon/UseEffect.hs 25;" f @@ -4382,7 +4383,7 @@ angleVV src/Geometry/Vector.hs 57;" f angleVV3 src/Geometry/Vector3D.hs 122;" f annoToRoomTree src/Dodge/Annotation.hs 17;" f anoToRoomTree src/Dodge/Layout/Tree/Annotate.hs 52;" f -anyTargeting src/Dodge/Render/ShapePicture.hs 73;" f +anyTargeting src/Dodge/Render/ShapePicture.hs 77;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f anythingHitCirc src/Dodge/Base/Collide.hs 242;" f appendEitherTree src/Dodge/Layout/Tree/Either.hs 29;" f @@ -4396,7 +4397,7 @@ applyInvLock src/Dodge/HeldUse.hs 77;" f applyMagnetsToBul src/Dodge/Bullet.hs 46;" f applyModules src/Dodge/Combine/Module.hs 52;" f applyNoDamage src/Dodge/Creature/Damage.hs 11;" f -applyPastDamages src/Dodge/Creature/State.hs 179;" f +applyPastDamages src/Dodge/Creature/State.hs 173;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 57;" f applyPosition src/Sound.hs 110;" f applyRecoil src/Dodge/HeldUse.hs 94;" f @@ -4423,7 +4424,6 @@ applyWorldConfig src/Dodge/Config/Update.hs 38;" f aquamarine src/Color.hs 23;" f arc src/Picture/Base.hs 287;" f arcFull src/Picture/Arc.hs 11;" f -arcNum src/Picture/Data.hs 53;" f arcPart src/Picture/Arc.hs 24;" f arcSolid src/Picture/Base.hs 276;" f arcStepwise src/Geometry.hs 329;" f @@ -4480,10 +4480,10 @@ azure src/Color.hs 22;" f bQuadToF src/Geometry/Bezier.hs 37;" f bQuadToLine src/Geometry/Bezier.hs 30;" f backpackCombinations src/Dodge/Combine/Combinations.hs 25;" f -backpackShape src/Dodge/Item/Draw/SPic.hs 85;" f +backpackShape src/Dodge/Item/Draw/SPic.hs 98;" f backspaceInputted src/Dodge/Update/Input/Text.hs 26;" f bangCone src/Dodge/Item/Held/Cone.hs 11;" f -bangConeShape src/Dodge/Item/Draw/SPic.hs 246;" f +bangConeShape src/Dodge/Item/Draw/SPic.hs 259;" f bangEchoS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 370;" f bangRod src/Dodge/Item/Held/Rod.hs 18;" f bangRod src/Dodge/Item/Weapon/BulletGun/Rod.hs 18;" f @@ -4493,20 +4493,20 @@ bangStick src/Dodge/Item/Weapon/BulletGun/Stick.hs 17;" f bangStickSoundChoice src/Dodge/HeldUse/BulletWeapon.hs 226;" f barPP src/Dodge/Room/Foreground.hs 236;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f -baseAMRShape src/Dodge/Item/Draw/SPic.hs 460;" f +baseAMRShape src/Dodge/Item/Draw/SPic.hs 473;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 86;" f baseBlockPane src/Dodge/Placements/Wall.hs 63;" f baseBlockPane src/Dodge/Room/Placement.hs 93;" f -baseCaneShape src/Dodge/Item/Draw/SPic.hs 266;" f +baseCaneShape src/Dodge/Item/Draw/SPic.hs 279;" f baseDebris src/Dodge/Block/Debris.hs 122;" f baseFloorTileSize src/Tile.hs 38;" f -basePartiallyComposedItem' src/Dodge/Item/Grammar.hs 40;" f -baseRifleShape src/Dodge/Item/Draw/SPic.hs 269;" f -baseRodShape src/Dodge/Item/Draw/SPic.hs 457;" f -baseSMGShape src/Dodge/Item/Draw/SPic.hs 428;" f +basePartiallyComposedItem' src/Dodge/Item/Grammar.hs 38;" f +baseRifleShape src/Dodge/Item/Draw/SPic.hs 282;" f +baseRodShape src/Dodge/Item/Draw/SPic.hs 470;" f +baseSMGShape src/Dodge/Item/Draw/SPic.hs 441;" f baseShoulder src/Dodge/Creature/Picture.hs 159;" f -baseStickShape src/Dodge/Item/Draw/SPic.hs 243;" f -baseStickShapeX src/Dodge/Item/Draw/SPic.hs 238;" f +baseStickShape src/Dodge/Item/Draw/SPic.hs 256;" f +baseStickShapeX src/Dodge/Item/Draw/SPic.hs 251;" f baseStickSpread src/Dodge/Item/Held/Stick.hs 32;" f baseStickSpread src/Dodge/Item/Weapon/BulletGun/Stick.hs 46;" f baseWindowPane src/Dodge/Placements/Wall.hs 73;" f @@ -4560,7 +4560,7 @@ blood5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 380;" f blood6S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 500;" f blood7S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 342;" f blood8S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 330;" f -bloodPuddleAt src/Dodge/Creature/State.hs 142;" f +bloodPuddleAt src/Dodge/Creature/State.hs 136;" f blowTorch src/Dodge/Item/Held/SprayGuns.hs 51;" f blowTorch src/Dodge/Item/Weapon/SprayGuns.hs 49;" f blue src/Color.hs 16;" f @@ -4591,7 +4591,7 @@ bres src/Dodge/Base/Zone.hs 80;" f bresx src/Dodge/Base/Zone.hs 83;" f bright src/Color.hs 116;" f brightX src/Color.hs 112;" f -btSPic src/Dodge/Render/ShapePicture.hs 169;" f +btSPic src/Dodge/Render/ShapePicture.hs 175;" f btShape src/Dodge/Render/Shape.hs 25;" f bufferEBO src/Shader/Bind.hs 27;" f bufferPokedVBO src/Shader/Bind.hs 18;" f @@ -4648,7 +4648,7 @@ chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 112;" f chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 30;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 46;" f checkBlockHP src/Dodge/Block.hs 46;" f -checkDeath src/Dodge/Creature/State.hs 86;" f +checkDeath src/Dodge/Creature/State.hs 79;" f checkEndGame src/Dodge/Update.hs 584;" f checkErrorGL src/Shader/Compile.hs 301;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -4777,7 +4777,7 @@ copyItemToFloor src/Dodge/FloorItem.hs 17;" f copyItemToFloorID src/Dodge/FloorItem.hs 21;" f corDoor src/Dodge/Room/Room.hs 378;" f cornerList src/Preload/Render.hs 194;" f -corpseOrGib src/Dodge/Creature/State.hs 105;" f +corpseOrGib src/Dodge/Creature/State.hs 99;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 140;" f corridorN src/Dodge/Room/Corridor.hs 52;" f @@ -4874,7 +4874,7 @@ crystalLine src/Dodge/Placements/Wall.hs 35;" f crystalLine src/Dodge/Room/Placement.hs 56;" f crystalWallDamage src/Dodge/Wall/DamageEffect.hs 79;" f cubeShape src/Dodge/Block/Debris.hs 196;" f -cullPoint src/Dodge/Render/ShapePicture.hs 119;" f +cullPoint src/Dodge/Render/ShapePicture.hs 125;" f cullPretty src/AesonHelp.hs 13;" f curveAroundField src/Dodge/Magnet.hs 18;" f curveLeftField src/Dodge/Magnet.hs 13;" f @@ -4968,7 +4968,7 @@ dededumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 448;" f dedumS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 316;" f defDamageMaterial src/Dodge/Material/Damage.hs 17;" f defLSPic src/Dodge/LightSource/Draw.hs 11;" f -defSPic src/Dodge/Item/Draw/SPic.hs 252;" f +defSPic src/Dodge/Item/Draw/SPic.hs 265;" f defaultAimMvType src/Dodge/Default/Creature.hs 122;" f defaultAimParams src/Dodge/Default/Item/Held/AimParams.hs 4;" f defaultAimParams src/Dodge/Default/Item/Use/AimParams.hs 6;" f @@ -5087,7 +5087,7 @@ destroyMount src/Dodge/Block.hs 98;" f destroyMounts src/Dodge/Block.hs 95;" f destroyProjectile src/Dodge/Projectile/Update.hs 62;" f detV src/Geometry/Vector.hs 93;" f -detectorColor src/Dodge/Item/Draw/SPic.hs 520;" f +detectorColor src/Dodge/Item/Draw/SPic.hs 533;" f detectorEffect src/Dodge/Item/Weapon/Radar.hs 19;" f detectorInfo src/Dodge/Item/Info.hs 195;" f determineInvSelCursorWidth src/Dodge/ListDisplayParams.hs 54;" f @@ -5139,7 +5139,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 170;" f +doDamage src/Dodge/Creature/State.hs 164;" f doDamages src/Dodge/Particle/HitEffect/ExpireAndDamage.hs 20;" f doDamagesFL src/Dodge/Flame.hs 58;" f doDeathToggle src/Dodge/WorldEffect.hs 95;" f @@ -5223,7 +5223,7 @@ doubleTreeToIndentList src/Dodge/DoubleTree.hs 19;" f doubleV2 src/Geometry.hs 156;" f downSize src/Dodge/DownscaleSize.hs 3;" f drawAllShadows src/Dodge/Shadows.hs 5;" f -drawBaseMachine src/Dodge/Machine/Draw.hs 54;" f +drawBaseMachine src/Dodge/Machine/Draw.hs 52;" f drawBeam src/Dodge/Beam/Draw.hs 6;" f drawBlip src/Dodge/RadarBlip.hs 13;" f drawBlock src/Dodge/Block/Draw.hs 7;" f @@ -5242,7 +5242,7 @@ drawCombineInventory src/Dodge/Render/HUD.hs 77;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 58;" f drawCorpse src/Dodge/Corpse/Draw.hs 6;" f drawCrInfo src/Dodge/Debug/Picture.hs 341;" f -drawCreature src/Dodge/Render/ShapePicture.hs 81;" f +drawCreature src/Dodge/Render/ShapePicture.hs 87;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 163;" f drawCross src/Dodge/Render/Label.hs 24;" f drawCrossCol src/Dodge/Render/Label.hs 21;" f @@ -5277,7 +5277,7 @@ drawList src/Dodge/Render/List.hs 175;" f drawListElement src/Dodge/Render/List.hs 155;" f drawListYgapScaleYoff src/Dodge/Render/List.hs 78;" f drawListYoff src/Dodge/Render/List.hs 75;" f -drawMachine src/Dodge/Machine/Draw.hs 16;" f +drawMachine src/Dodge/Machine/Draw.hs 14;" f drawMapWall src/Dodge/Render/HUD/Carte.hs 33;" f drawMenuOrHUD src/Dodge/Render/Picture.hs 53;" f drawMenuScreen src/Dodge/Render/MenuScreen.hs 12;" f @@ -5300,7 +5300,7 @@ drawRemoteShell src/Dodge/Projectile/Draw.hs 29;" f drawSelectionCursor src/Dodge/Render/List.hs 40;" f drawSelectionList src/Dodge/Render/List.hs 28;" f drawSelectionSections src/Dodge/SelectionSections/Draw.hs 10;" f -drawSensor src/Dodge/Machine/Draw.hs 23;" f +drawSensor src/Dodge/Machine/Draw.hs 21;" f drawShader src/Shader.hs 27;" f drawShaderLay src/Shader.hs 16;" f drawShadowsByImportance src/Dodge/Shadows.hs 8;" f @@ -5309,16 +5309,16 @@ drawShockwave src/Dodge/Shockwave/Draw.hs 7;" f drawSpark src/Dodge/Spark/Draw.hs 6;" f drawStaticBall src/Dodge/EnergyBall/Draw.hs 14;" f drawSubInventory src/Dodge/Render/HUD.hs 68;" f -drawSweep src/Dodge/Render/ShapePicture.hs 54;" f +drawSweep src/Dodge/Render/ShapePicture.hs 56;" f drawSwitch src/Dodge/Button/Draw.hs 15;" f drawSwitchWire src/Dodge/LevelGen/Switch.hs 28;" f drawTargetLaser src/Dodge/Particle/Draw.hs 6;" f -drawTargeting src/Dodge/Targeting/Draw.hs 14;" f +drawTargeting src/Dodge/Targeting/Draw.hs 16;" f drawTeslaArc src/Dodge/Tesla/Arc/Draw.hs 7;" f drawText src/Picture/Base.hs 220;" f drawTitle src/Dodge/Render/MenuScreen.hs 48;" f drawTractorBeam src/Dodge/TractorBeam/Draw.hs 7;" f -drawTurret src/Dodge/Machine/Draw.hs 62;" f +drawTurret src/Dodge/Machine/Draw.hs 60;" f drawTurret src/Dodge/Placements/Turret.hs 82;" f drawVerticalLampCover src/Dodge/LightSources/Lamp.hs 154;" f drawVerticalLampCover src/Dodge/Prop/Draw.hs 61;" f @@ -5333,7 +5333,7 @@ drawWlIDs src/Dodge/Debug/Picture.hs 327;" f drawZoneCol src/Dodge/Debug/Picture.hs 115;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 247;" f droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f -dropByState src/Dodge/Creature/State.hs 164;" f +dropByState src/Dodge/Creature/State.hs 158;" f dropExcept src/Dodge/Creature/Action.hs 172;" f dropItem src/Dodge/Creature/Action.hs 177;" f dropItemKey src/Dodge/Config/KeyConfig.hs 24;" f @@ -5355,7 +5355,6 @@ ejectS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 470;" f elecCrackleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 362;" f elephantGun src/Dodge/Item/Held/Rod.hs 38;" f elephantGun src/Dodge/Item/Weapon/BulletGun/Rod.hs 46;" f -ellNum src/Picture/Data.hs 53;" f emptyCorridor src/Dodge/Room/BlinkAcross.hs 22;" f emptyTrie src/SimpleTrie.hs 11;" f encircle src/Dodge/Creature/Boid.hs 115;" f @@ -5367,14 +5366,14 @@ eqConstr src/SameConstr.hs 17;" f eqPosText src/Dodge/Equipment/Text.hs 6;" f equipAimSpeed src/Dodge/Creature/Action/Movement.hs 109;" f equipInfo src/Dodge/Item/Info.hs 107;" f -equipItemSPic src/Dodge/Item/Draw/SPic.hs 55;" f +equipItemSPic src/Dodge/Item/Draw/SPic.hs 68;" f equipPosition src/Dodge/Item/Draw.hs 32;" f equipPosition src/Dodge/Item/Equipment/Shape.hs 15;" f equipSiteInfo src/Dodge/Item/Info.hs 225;" f equipSiteToPositions src/Dodge/Inventory/RBList.hs 77;" f equipSpeed src/Dodge/Creature/Action/Movement.hs 106;" f equipSpeed src/Dodge/Creature/Impulse/Movement.hs 99;" f -equipmentEffects src/Dodge/Creature/State.hs 238;" f +equipmentEffects src/Dodge/Creature/State.hs 232;" f equipmentStrValue src/Dodge/Creature/Statistics.hs 22;" f errorAngleVV src/Geometry.hs 62;" f errorClosestPointOnLine src/Geometry.hs 74;" f @@ -5407,7 +5406,7 @@ extendAway src/Dodge/LightSources/Fitting.hs 79;" f extendAway src/Dodge/Placement/Instance/LightSource.hs 196;" f extendAway src/Dodge/Placements/LightSource.hs 113;" f extendConeToScreenEdge src/Dodge/Debug/Picture.hs 82;" f -extraPics src/Dodge/Render/ShapePicture.hs 124;" f +extraPics src/Dodge/Render/ShapePicture.hs 130;" f extractFromZone src/Dodge/Zone.hs 35;" f extractRoomPos src/Dodge/RoomPos.hs 6;" f faceEdges src/Polyhedra.hs 64;" f @@ -5452,15 +5451,12 @@ flameTorrent src/Dodge/Item/Held/SprayGuns.hs 40;" f flameTorrent src/Dodge/Item/Weapon/SprayGuns.hs 38;" f flameWall src/Dodge/Item/Held/SprayGuns.hs 56;" f flameWall src/Dodge/Item/Weapon/SprayGuns.hs 54;" f -flamerPic src/Dodge/Item/Draw/SPic.hs 431;" f +flamerPic src/Dodge/Item/Draw/SPic.hs 444;" f flareCircleAt src/Dodge/WorldEvent/Flash.hs 46;" f flatItemCombinations src/Dodge/Combine/Combinations.hs 49;" f flatLookupItems src/Dodge/Combine.hs 29;" f flatShield src/Dodge/Item/Held/Utility.hs 9;" f -flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 504;" f -flatV2 src/Picture/Data.hs 65;" f -flatV3 src/Picture/Data.hs 68;" f -flatV4 src/Picture/Data.hs 71;" f +flatShieldEquipSPic src/Dodge/Item/Draw/SPic.hs 517;" f flattenIMIMIM src/Dodge/Base/Zone.hs 246;" f fleeFrom src/Dodge/CreatureEffect.hs 120;" f fleeFromTarget src/Dodge/CreatureEffect.hs 66;" f @@ -5480,13 +5476,13 @@ flockToPointUsing src/Dodge/Creature/Boid.hs 214;" f flockToPointUsing' src/Dodge/Creature/Boid.hs 227;" f floorHun src/Dodge/Base/Zone.hs 40;" f floorItemPickupInfo src/Dodge/Render/HUD.hs 148;" f -floorItemSPic src/Dodge/Render/ShapePicture.hs 163;" f +floorItemSPic src/Dodge/Render/ShapePicture.hs 169;" f floorWire src/Dodge/Wire.hs 13;" f foamSpray src/Dodge/SoundLogic/Synonyms.hs 27;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 398;" f foamSprayFadeOutSound src/Dodge/SoundLogic/Synonyms.hs 29;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 394;" f -foldCr src/Dodge/Creature/State.hs 42;" f +foldCr src/Dodge/Creature/State.hs 35;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 110;" f followImpulse src/Dodge/Creature/Impulse.hs 37;" f @@ -5649,7 +5645,7 @@ hasLOSIndirect src/Dodge/Base/Collide.hs 214;" f hat src/Dodge/Item/Equipment.hs 104;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 117;" f -headLampShape src/Dodge/Item/Draw/SPic.hs 510;" f +headLampShape src/Dodge/Item/Draw/SPic.hs 523;" f headMap src/Dodge/DoubleTree.hs 117;" f heal src/Dodge/Item/Consumable.hs 17;" f heal25 src/Dodge/Item/Consumable.hs 14;" f @@ -5664,7 +5660,7 @@ heldEffect src/Dodge/HeldUse.hs 45;" f heldEffectMuzzles src/Dodge/HeldUse.hs 48;" f heldInfo src/Dodge/Item/Info.hs 48;" f heldItemOffset src/Dodge/Item/HeldOffset.hs 24;" f -heldItemSPic src/Dodge/Item/Draw/SPic.hs 172;" f +heldItemSPic src/Dodge/Item/Draw/SPic.hs 185;" f heldPositionInfo src/Dodge/Item/Info.hs 212;" f helpCommand src/Dodge/Terminal.hs 64;" f helpPoly3D src/Polyhedra.hs 124;" f @@ -5750,7 +5746,7 @@ insertWallInZones src/Dodge/Wall/Zone.hs 20;" f insertWalls src/Dodge/Placement/PlaceSpot/Block.hs 117;" f insertWithNewKeys src/IntMapHelp.hs 69;" f intToBulAmmo src/Dodge/TweakBullet.hs 23;" f -internalHammerUpdate src/Dodge/Creature/State.hs 153;" f +internalHammerUpdate src/Dodge/Creature/State.hs 147;" f interpWith src/Dodge/Creature/Boid.hs 10;" f intersectBeamBeams src/Dodge/Update.hs 486;" f intersectCircSeg src/Geometry/Intersect.hs 303;" f @@ -5774,21 +5770,21 @@ intersectSegsSeg src/Geometry/Intersect.hs 232;" f intervalList src/Geometry.hs 315;" f interweave src/Justify.hs 17;" f intsToPos src/Dodge/Room/Modify/Girder.hs 160;" f -invAdj src/Dodge/Item/Grammar.hs 149;" f +invAdj src/Dodge/Item/Grammar.hs 148;" f invDimColor src/Dodge/DisplayInventory.hs 139;" f invDimColor src/Dodge/Inventory/Color.hs 4;" f invDisplayParams src/Dodge/ListDisplayParams.hs 29;" f invHead src/Dodge/Render/HUD.hs 314;" f -invIndentIM src/Dodge/Item/Grammar.hs 161;" f -invLDT' src/Dodge/Item/Grammar.hs 131;" f -invLDT'' src/Dodge/Item/Grammar.hs 126;" f -invRootMap src/Dodge/Item/Grammar.hs 138;" f +invIndentIM src/Dodge/Item/Grammar.hs 160;" f +invLDT' src/Dodge/Item/Grammar.hs 130;" f +invLDT'' src/Dodge/Item/Grammar.hs 125;" f +invRootMap src/Dodge/Item/Grammar.hs 137;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 34;" f invSelectionItem' src/Dodge/Inventory/SelectionList.hs 16;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f -invSideEff src/Dodge/Creature/State.hs 242;" f +invSideEff src/Dodge/Creature/State.hs 237;" f invSize src/Dodge/Inventory/CheckSlots.hs 41;" f -invTrees src/Dodge/Item/Grammar.hs 166;" f +invTrees src/Dodge/Item/Grammar.hs 165;" f inventoryExtra src/Dodge/Render/HUD.hs 218;" f inventoryExtraH src/Dodge/Render/HUD.hs 222;" f inventoryX src/Dodge/Creature.hs 115;" f @@ -5803,7 +5799,7 @@ isAnimate src/Dodge/Creature/Test.hs 138;" f isCognizant src/Dodge/Creature/Perception.hs 105;" f isElectrical src/Dodge/Data/Damage.hs 42;" f isElectrical src/Dodge/Data/DamageType.hs 44;" f -isFrictionless src/Dodge/Creature/State.hs 386;" f +isFrictionless src/Dodge/Creature/State.hs 398;" f isGas src/Dodge/Euse.hs 64;" f isInLnk src/Dodge/PlacementSpot.hs 160;" f isJust' src/MaybeHelp.hs 29;" f @@ -5850,14 +5846,14 @@ itemFromHeldType src/Dodge/Item/Held.hs 25;" f itemFromLeftType src/Dodge/Item.hs 77;" f itemInfo src/Dodge/Item/Info.hs 12;" f itemInvColor src/Dodge/Item/InventoryColor.hs 9;" f -itemInvSideEffect src/Dodge/Creature/State.hs 254;" f +itemInvSideEffect src/Dodge/Creature/State.hs 245;" f itemNumberDisplay src/Dodge/Item/Display.hs 110;" f itemRooms src/Dodge/LockAndKey.hs 39;" f -itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 35;" f -itemSPic src/Dodge/Item/Draw/SPic.hs 43;" f +itemRotTreeSPic src/Dodge/Item/Draw/SPic.hs 38;" f +itemSPic src/Dodge/Item/Draw/SPic.hs 45;" f itemString src/Dodge/Item/Display.hs 57;" f -itemTreeSPic src/Dodge/Item/Draw/SPic.hs 31;" f -itemUpdate src/Dodge/Creature/State.hs 327;" f +itemTreeSPic src/Dodge/Item/Draw/SPic.hs 34;" f +itemUpdate src/Dodge/Creature/State.hs 338;" f itemUseEffect src/Dodge/Creature/Impulse/UseItem.hs 35;" f iterateUntil src/MonadHelp.hs 23;" f iterateWhile src/MonadHelp.hs 30;" f @@ -5871,7 +5867,7 @@ jShape src/Dodge/Placement/Instance/LightSource.hs 86;" f jShape src/Dodge/Placements/LightSource.hs 43;" f jaggedShape src/Dodge/Block/Debris.hs 191;" f jetPack src/Dodge/Item/Equipment.hs 91;" f -joinItemsInList src/Dodge/Item/Grammar.hs 117;" f +joinItemsInList src/Dodge/Item/Grammar.hs 116;" f jps0' src/Dodge/LevelGen/Data.hs 60;" f jps0' src/Dodge/LevelGen/PlacementHelper.hs 60;" f jps0PushPS src/Dodge/LevelGen/Data.hs 63;" f @@ -5892,7 +5888,7 @@ keyCard src/Dodge/Item/PassKey.hs 8;" f keyCardAnalyserByDoor src/Dodge/Room/LasTurret.hs 69;" f keyCardRoomRunPast src/Dodge/Room/LasTurret.hs 57;" f keyCardRunPastRand src/Dodge/LockAndKey.hs 36;" f -keyPic src/Dodge/Item/Draw/SPic.hs 526;" f +keyPic src/Dodge/Item/Draw/SPic.hs 539;" f keyholeCorridor src/Dodge/Room/Corridor.hs 39;" f killBulletUpdate src/Dodge/WorldEvent/HitEffect.hs 30;" f killParticleUpdate src/Dodge/Particle/Update.hs 9;" f @@ -5907,12 +5903,12 @@ lampCover src/Dodge/LightSources/Lamp.hs 70;" f lampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 8;" f lampCoverWhen src/Dodge/LightSources/Lamp.hs 79;" f lampCoverWhen src/Dodge/Placement/Instance/LightSource/Cover.hs 19;" f -lampCrSPic src/Dodge/Render/ShapePicture.hs 97;" f +lampCrSPic src/Dodge/Render/ShapePicture.hs 103;" f lasBeamCombine src/Dodge/Beam.hs 31;" f lasCenSensEdge src/Dodge/Room/LasTurret.hs 112;" f lasDronesPic src/Dodge/Item/Weapon/Drone.hs 22;" f lasGun src/Dodge/Item/Held/BatteryGuns.hs 46;" f -lasGunPic src/Dodge/Item/Draw/SPic.hs 473;" f +lasGunPic src/Dodge/Item/Draw/SPic.hs 486;" f lasRayAt src/Dodge/Beam.hs 62;" f lasSensorTurretTest src/Dodge/Room/LasTurret.hs 105;" f lasTunnel src/Dodge/Room/LasTurret.hs 124;" f @@ -5924,10 +5920,9 @@ latchkey src/Dodge/Item/Held/Utility.hs 23;" f latchkey src/Dodge/Item/PassKey.hs 14;" f launcher src/Dodge/Item/Held/Launcher.hs 12;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f -launcherPic src/Dodge/Item/Draw/SPic.hs 447;" f +launcherPic src/Dodge/Item/Draw/SPic.hs 460;" f launcherSound src/Dodge/SoundLogic/Synonyms.hs 4;" f launcherX src/Dodge/Item/Held/Launcher.hs 38;" f -layerNum src/Picture/Data.hs 31;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 47;" f ldpVerticalSelection src/Dodge/Update/Input/ScreenLayer.hs 90;" f ldtIL src/Dodge/DoubleTree.hs 96;" f @@ -5936,11 +5931,11 @@ ldtToIM src/Dodge/DoubleTree.hs 90;" f ldtToIndentList src/Dodge/DoubleTree.hs 93;" f left src/DoubleStack.hs 16;" f leftInfo src/Dodge/Item/Info.hs 96;" f -leftIsParentCombine src/Dodge/Item/Grammar.hs 89;" f -leftItemSPic src/Dodge/Item/Draw/SPic.hs 88;" f +leftIsParentCombine src/Dodge/Item/Grammar.hs 88;" f +leftItemSPic src/Dodge/Item/Draw/SPic.hs 101;" f leftPad src/Padding.hs 14;" f -leftRightCombine src/Dodge/Item/Grammar.hs 101;" f -legsSPic src/Dodge/Item/Draw/SPic.hs 544;" f +leftRightCombine src/Dodge/Item/Grammar.hs 100;" f +legsSPic src/Dodge/Item/Draw/SPic.hs 557;" f liShape src/Dodge/Placement/Instance/LightSource.hs 99;" f liShape src/Dodge/Placements/LightSource.hs 55;" f light src/Color.hs 100;" f @@ -6130,7 +6125,7 @@ mcKillTerm src/Dodge/Machine/Destroy.hs 26;" f mcPlaySound src/Dodge/Machine/Update.hs 80;" f mcProxTest src/Dodge/Machine/Update.hs 126;" f mcProximitySensorUpdate src/Dodge/Machine/Update.hs 104;" f -mcSPic src/Dodge/Render/ShapePicture.hs 174;" f +mcSPic src/Dodge/Render/ShapePicture.hs 180;" f mcSensorTriggerUpdate src/Dodge/Machine/Update.hs 69;" f mcSensorUpdate src/Dodge/Machine/Update.hs 99;" f mcShootLaser src/Dodge/HeldUse.hs 403;" f @@ -6184,8 +6179,8 @@ miniGunCrit src/Dodge/Creature.hs 62;" f miniGunUse src/Dodge/Item/Weapon/BulletGun/Cane.hs 113;" f miniGunX src/Dodge/Item/Held/Cane.hs 83;" f miniGunX src/Dodge/Item/Weapon/BulletGun/Cane.hs 120;" f -miniGunXPict src/Dodge/Item/Draw/SPic.hs 407;" f -miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 401;" f +miniGunXPict src/Dodge/Item/Draw/SPic.hs 420;" f +miniGunXPictItem src/Dodge/Item/Draw/SPic.hs 414;" f miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 510;" f miniTree2 src/Dodge/Room/Room.hs 108;" f minimumOn src/FoldlHelp.hs 12;" f @@ -6258,7 +6253,7 @@ moveWallID src/Dodge/Wall/Move.hs 24;" f moveWallIDToward src/Dodge/Wall/Move.hs 47;" f moveWallIDUnsafe src/Dodge/Wall/Move.hs 19;" f moveZoomCamera src/Dodge/Update/Camera.hs 80;" f -movementSideEff src/Dodge/Creature/State.hs 195;" f +movementSideEff src/Dodge/Creature/State.hs 189;" f mtTopLabels src/Dodge/Tree/Compose.hs 49;" f mtUnderLabels src/Dodge/Tree/Compose.hs 52;" f muchWlDustAt src/Dodge/Wall/Dust.hs 15;" f @@ -6324,12 +6319,12 @@ nullCommand src/Dodge/Update/Scroll.hs 142;" f numColor src/Color.hs 124;" f numDrawableElements src/Shader/Parameters.hs 32;" f numGLushort src/Shader/Parameters.hs 28;" f -numLayers src/Picture/Data.hs 34;" f +numLayers src/Picture/Data.hs 31;" f numMetaTree src/Dodge/Tree/Compose.hs 119;" f numMetaTree' src/Dodge/Tree/Compose.hs 122;" f numSelfTree src/Dodge/Tree/Compose.hs 107;" f numSelfTree' src/Dodge/Tree/Compose.hs 110;" f -numShads src/Picture/Data.hs 44;" f +numShads src/Picture/Data.hs 41;" f numSubElements src/Shader/Parameters.hs 36;" f numTraversable src/TreeHelp.hs 183;" f obstacleColor src/Dodge/Debug/Picture.hs 225;" f @@ -6356,6 +6351,9 @@ orderAroundFirst src/Geometry/Polygon.hs 74;" f orderAroundFirstReverse src/Geometry/Polygon.hs 70;" f orderPolygon src/Geometry/Polygon.hs 78;" f orderPolygonAround src/Geometry/Polygon.hs 63;" f +orientAttachment src/Dodge/Item/Orientation.hs 19;" f +orientByLink src/Dodge/Item/Orientation.hs 14;" f +orientChild src/Dodge/Item/Orientation.hs 9;" f originIDsAt src/Dodge/WorldEvent/Sound.hs 18;" f originsIDsAt src/Dodge/WorldEvent/Sound.hs 13;" f orthogonalPointOnSeg src/Geometry/Intersect.hs 291;" f @@ -6423,7 +6421,7 @@ pesNearCirc src/Dodge/Zoning/Pathing.hs 43;" f pesNearPoint src/Dodge/Zoning/Pathing.hs 33;" f pesNearRect src/Dodge/Zoning/Pathing.hs 40;" f pesNearSeg src/Dodge/Zoning/Pathing.hs 37;" f -picAtCrPos1 src/Dodge/Render/ShapePicture.hs 103;" f +picAtCrPos1 src/Dodge/Render/ShapePicture.hs 109;" f picFormat src/Polyhedra.hs 22;" f picMap src/Picture/Base.hs 67;" f pickUpItem src/Dodge/Inventory/Add.hs 89;" f @@ -6505,7 +6503,7 @@ pointerToItemLocation src/Dodge/Item/Location.hs 25;" f pointerYourRootItem src/Dodge/Item/Location.hs 42;" f pointerYourSelectedItem src/Dodge/Item/Location.hs 36;" f pointsToPoly src/Geometry/ConvexPoly.hs 39;" f -poisonSPic src/Dodge/Creature/State.hs 130;" f +poisonSPic src/Dodge/Creature/State.hs 124;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poisonSprayer src/Dodge/Item/Weapon/SprayGuns.hs 16;" f poke34 src/Shader/Poke.hs 516;" f @@ -6542,7 +6540,6 @@ poly3 src/Picture/Base.hs 84;" f poly3Col src/Picture/Base.hs 88;" f polyCirc src/Shape.hs 46;" f polyCircx src/Shape.hs 51;" f -polyNum src/Picture/Data.hs 53;" f polyPointsIntersect src/Geometry/ConvexPoly.hs 74;" f polyPointsOverlap src/Geometry/ConvexPoly.hs 60;" f polyToEdges src/Polyhedra.hs 132;" f @@ -6573,7 +6570,7 @@ powlist src/Multiset.hs 55;" f powlistUpToN src/Multiset.hs 20;" f powlistUpToN' src/Multiset.hs 9;" f powlistUpToN'' src/Multiset.hs 27;" f -ppDraw src/Dodge/Render/ShapePicture.hs 160;" f +ppDraw src/Dodge/Render/ShapePicture.hs 166;" f ppEvents src/Dodge/Update.hs 563;" f ppLevelReset src/Dodge/PressPlate.hs 13;" f preCritStart src/Dodge/Room/Start.hs 92;" f @@ -6823,7 +6820,7 @@ rhombus src/Polyhedra.hs 71;" f rifle src/Dodge/Item/Held/Cane.hs 51;" f rifle src/Dodge/Item/Weapon/BulletGun/Cane.hs 77;" f right src/DoubleStack.hs 16;" f -rightIsParentCombine src/Dodge/Item/Grammar.hs 95;" f +rightIsParentCombine src/Dodge/Item/Grammar.hs 94;" f rightPad src/Padding.hs 22;" f rightPadNoSquash src/Padding.hs 26;" f rlPosDir src/Dodge/RoomLink.hs 94;" f @@ -6924,7 +6921,7 @@ scaleSH src/Shape.hs 265;" f scalp src/Dodge/Creature/Picture.hs 124;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 70;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/State.hs 125;" 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 @@ -6969,7 +6966,7 @@ sensorCommand src/Dodge/Terminal.hs 206;" f sensorInfoMap src/Dodge/Terminal.hs 178;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 48;" f -sensorSPic src/Dodge/Machine/Draw.hs 68;" f +sensorSPic src/Dodge/Machine/Draw.hs 65;" f sensorSPic src/Dodge/Machine/Sensor.hs 50;" f sensorSPic src/Dodge/Placements/Sensor.hs 49;" f sensorUpdate src/Dodge/Machine/Sensor.hs 35;" f @@ -7003,7 +7000,7 @@ setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f setPS src/Dodge/Placements/Spot.hs 9;" f -setRBCreatureTargeting src/Dodge/Creature/State.hs 307;" f +setRBCreatureTargeting src/Dodge/Creature/State.hs 317;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 121;" f setShaderSource src/Shader/Compile.hs 336;" f setShadowLimits src/Dodge/Shadows.hs 11;" f @@ -7046,7 +7043,7 @@ shapeVerxAttributes src/Shape/Parameters.hs 13;" f shapeVerxSize src/Shape/Parameters.hs 10;" f shardShape src/Dodge/Block/Debris.hs 181;" f shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f -shatterGunSPic src/Dodge/Item/Draw/SPic.hs 255;" f +shatterGunSPic src/Dodge/Item/Draw/SPic.hs 268;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f shellCollisionCheck src/Dodge/Projectile/Update.hs 51;" f shellCollisionEffect src/Dodge/Projectile/Update.hs 47;" f @@ -7057,8 +7054,8 @@ shieldWall src/Dodge/Euse.hs 114;" f shiftByV2 src/Dodge/PlacementSpot.hs 239;" f shiftChildren src/Dodge/Tree/Compose.hs 43;" f shiftDec src/Dodge/Placement/PlaceSpot.hs 136;" f -shiftDraw src/Dodge/Render/ShapePicture.hs 107;" f -shiftDraw' src/Dodge/Render/ShapePicture.hs 113;" f +shiftDraw src/Dodge/Render/ShapePicture.hs 113;" f +shiftDraw' src/Dodge/Render/ShapePicture.hs 119;" f shiftInBy src/Dodge/PlacementSpot.hs 236;" f shiftLinkBy src/Dodge/Room/Link.hs 87;" f shiftPSBy src/Dodge/Placement/Shift.hs 12;" f @@ -7272,7 +7269,7 @@ startNewGameInSlot src/Dodge/StartNewGame.hs 15;" f startRoom src/Dodge/Room/Start.hs 62;" f startSeedGame src/Dodge/StartNewGame.hs 20;" f startSeedGameConc src/Dodge/StartNewGame.hs 27;" f -stateUpdate src/Dodge/Creature/State.hs 60;" f +stateUpdate src/Dodge/Creature/State.hs 53;" f statsModifier src/Dodge/Creature/Info.hs 14;" f stepReloading src/Dodge/Reloading.hs 24;" f stone1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 386;" f @@ -7338,11 +7335,8 @@ tap3S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 434;" f tap4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 506;" f tapQuiet src/Dodge/SoundLogic/Synonyms.hs 4;" f tapQuietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 328;" f -targCorner src/Dodge/Targeting/Draw.hs 71;" f -targetCursorPic src/Dodge/Targeting/Draw.hs 77;" f -targetDraw src/Dodge/Targeting/Draw.hs 39;" f -targetRBCreatureDraw src/Dodge/Targeting/Draw.hs 63;" f -targetSimpleDraw src/Dodge/Targeting/Draw.hs 21;" f +targCorner src/Dodge/Targeting/Draw.hs 41;" f +targetCursorPic src/Dodge/Targeting/Draw.hs 47;" f targetYouCognizant src/Dodge/Creature/ChooseTarget.hs 13;" f targetYouLOS src/Dodge/Creature/ChooseTarget.hs 7;" f targetYouWhenCognizant src/Dodge/Creature/ReaderUpdate.hs 194;" f @@ -7357,30 +7351,29 @@ termSoundLine src/Dodge/Terminal.hs 109;" f termTextColor src/Dodge/Terminal.hs 112;" f terminalColor src/Dodge/Placement/Instance/Terminal.hs 66;" f terminalReturnEffect src/Dodge/Terminal/ReturnEffect.hs 10;" f -terminalSPic src/Dodge/Machine/Draw.hs 28;" f -terminalShape src/Dodge/Machine/Draw.hs 31;" f +terminalSPic src/Dodge/Machine/Draw.hs 26;" f +terminalShape src/Dodge/Machine/Draw.hs 29;" f terminalWheelEvent src/Dodge/Update/Scroll.hs 76;" f teslaBeamCombine src/Dodge/Beam.hs 48;" f teslaGun src/Dodge/Item/Held/BatteryGuns.hs 27;" f -teslaGunPic src/Dodge/Item/Draw/SPic.hs 463;" f +teslaGunPic src/Dodge/Item/Draw/SPic.hs 476;" f teslaParams src/Dodge/Tesla/ItemParams.hs 6;" f testCrossWalls src/Dodge/Room/Path.hs 47;" f testEvent src/Dodge/Event/Test.hs 10;" f testEventKey src/Dodge/Config/KeyConfig.hs 27;" f testInventory src/Dodge/Creature.hs 257;" f -testPic src/Dodge/Render/ShapePicture.hs 157;" f +testPic src/Dodge/Render/ShapePicture.hs 163;" f testStringInit src/Dodge/TestString.hs 22;" f text src/Picture/Base.hs 193;" f textGrad src/Picture/Text.hs 5;" f textJustifyCenter src/Picture/Base.hs 212;" f textJustifyLeft src/Picture/Base.hs 208;" f textJustifyRight src/Picture/Base.hs 198;" f -textNum src/Picture/Data.hs 53;" f textRight src/Picture/Base.hs 203;" f textVMirror src/Picture/Base.hs 216;" f -tflat2 src/Picture/Data.hs 80;" f -tflat3 src/Picture/Data.hs 83;" f -tflat4 src/Picture/Data.hs 86;" f +tflat2 src/Picture/Data.hs 58;" f +tflat3 src/Picture/Data.hs 62;" f +tflat4 src/Picture/Data.hs 66;" f theCleanup appDodge/Main.hs 74;" f theColumns src/Dodge/Tree/Shift.hs 139;" f theUpdateStep appDodge/Main.hs 102;" f @@ -7418,7 +7411,6 @@ toLabel src/Dodge/Cleat.hs 16;" f toLabel src/Dodge/UseAll.hs 16;" f toMultiset src/Multiset.hs 58;" f toOnward src/Dodge/Tree/Compose.hs 101;" f -toShadNum src/Picture/Data.hs 50;" f toTopLeft src/Dodge/Render/List.hs 185;" f toV2 src/Geometry/Data.hs 36;" f toV3 src/Geometry/Data.hs 38;" f @@ -7439,14 +7431,14 @@ topPrismEdgeIndices src/Shader/Poke.hs 327;" f topPrismIndices src/Shader/Poke.hs 402;" f topTestPart src/Dodge/TestString.hs 34;" f torch src/Dodge/Item/Held/Utility.hs 26;" f -torchShape src/Dodge/Item/Draw/SPic.hs 219;" f +torchShape src/Dodge/Item/Draw/SPic.hs 232;" f torqueCr src/Dodge/WorldEffect.hs 70;" f torso src/Dodge/Creature/Picture.hs 133;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 232;" f tractorGun src/Dodge/Item/Held/BatteryGuns.hs 73;" f -tractorGunPic src/Dodge/Item/Draw/SPic.hs 501;" f +tractorGunPic src/Dodge/Item/Draw/SPic.hs 514;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f tractorSPic src/Dodge/TractorBeam/Draw.hs 10;" f tranRot src/Picture/Base.hs 124;" f @@ -7576,7 +7568,7 @@ upHammer src/Dodge/Default.hs 77;" f upProjectile src/Dodge/Projectile/Update.hs 25;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla/Arc.hs 86;" f -updateAutoRecharge src/Dodge/Creature/State.hs 336;" f +updateAutoRecharge src/Dodge/Creature/State.hs 348;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 159;" f updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f @@ -7618,10 +7610,10 @@ updateIMl' src/Dodge/Update.hs 391;" f updateInGameCamera src/Dodge/Update/Camera.hs 71;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 108;" f updateInstantBullets src/Dodge/Update.hs 535;" f -updateInv src/Dodge/Creature/State.hs 234;" f +updateInv src/Dodge/Creature/State.hs 228;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 87;" f updateInventorySectionItems src/Dodge/DisplayInventory.hs 143;" f -updateItemTargeting src/Dodge/Creature/State.hs 269;" f +updateItemTargeting src/Dodge/Creature/State.hs 261;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 102;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 91;" f updateLampoid src/Dodge/Lampoid.hs 13;" f @@ -7633,7 +7625,7 @@ updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 128;" f updateMIM src/Dodge/Update.hs 548;" f updateMachine src/Dodge/Machine/Update.hs 16;" f -updateMovement src/Dodge/Creature/State.hs 375;" f +updateMovement src/Dodge/Creature/State.hs 387;" f updateObjCatMaybes src/Dodge/Update.hs 407;" f updateObjMapMaybe src/Dodge/Update.hs 400;" f updatePS src/Dodge/Placements/Spot.hs 26;" f @@ -7716,7 +7708,7 @@ useBulletPayload src/Dodge/Bullet.hs 105;" f useC src/Dodge/Cuse.hs 8;" f useC' src/Dodge/Cuse.hs 13;" f useE src/Dodge/Euse.hs 24;" f -useEquipment src/Dodge/Creature/State.hs 228;" f +useEquipment src/Dodge/Creature/State.hs 222;" f useForceFieldGun src/Dodge/HeldUse.hs 426;" f useGasParams src/Dodge/HeldUse.hs 355;" f useHotKey src/Dodge/Creature/YourControl.hs 49;" f @@ -7740,7 +7732,7 @@ useStopWatch src/Dodge/Luse.hs 24;" f useTimeCheck src/Dodge/Item/Weapon/TriggerType.hs 246;" f useTimeScrollGun src/Dodge/Luse.hs 32;" f useUnusedLnk src/Dodge/PlacementSpot.hs 169;" f -useUpdate src/Dodge/Creature/State.hs 220;" f +useUpdate src/Dodge/Creature/State.hs 214;" f usedRoomInLinkPoss src/Dodge/PlacementSpot.hs 196;" f usedRoomLinkPoss src/Dodge/PlacementSpot.hs 203;" f v2z src/Geometry/Vector3D.hs 93;" f @@ -7773,7 +7765,7 @@ visionCheck src/Dodge/Creature/Perception.hs 152;" f vocalizationTest src/Dodge/Creature/Vocalization.hs 8;" f volleyGun src/Dodge/Item/Held/Cane.hs 32;" f volleyGun src/Dodge/Item/Weapon/BulletGun/Cane.hs 43;" f -volleyGunShape src/Dodge/Item/Draw/SPic.hs 389;" f +volleyGunShape src/Dodge/Item/Draw/SPic.hs 402;" f waistSP src/Dodge/Creature/HandPos.hs 199;" f walkNozzle src/Dodge/HeldUse.hs 207;" f walkableNodeNear src/Dodge/Path.hs 48;" f @@ -7873,7 +7865,7 @@ wlsNearRect src/Dodge/Zoning/Wall.hs 46;" f wlsNearSeg src/Dodge/Zoning/Wall.hs 42;" f wordsBy src/ListHelp.hs 116;" f worldPosToScreen src/Dodge/Base/Coordinate.hs 28;" f -worldSPic src/Dodge/Render/ShapePicture.hs 27;" f +worldSPic src/Dodge/Render/ShapePicture.hs 29;" f worldShape src/Dodge/Render/Shape.hs 14;" f worldToGenWorld src/Dodge/LevelGen/LevelStructure.hs 14;" f wpAdd src/Dodge/Room/RezBox.hs 134;" f