From 12e4a278d061daad63c1a20d5136ba9163b133a4 Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 8 May 2026 23:44:28 +0100 Subject: [PATCH] Smooth out slime splitting There are probably possible errors from the use of cutPoly --- src/Dodge/Creature/ChaseCrit.hs | 2 +- src/Dodge/Creature/Picture.hs | 16 +- src/Dodge/Creature/Slime.hs | 16 ++ src/Dodge/Creature/Update.hs | 32 +-- src/Dodge/Data/Creature/Misc.hs | 3 +- src/Dodge/TestString.hs | 5 +- src/Dodge/Update.hs | 5 +- src/Geometry/Intersect.hs | 7 + src/Geometry/Polygon.hs | 8 +- tags | 353 ++++++++++++++++---------------- 10 files changed, 243 insertions(+), 204 deletions(-) create mode 100644 src/Dodge/Creature/Slime.hs diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index d4a7e5689..1fba238e1 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -70,7 +70,7 @@ slimeCrit = defaultCreature & crName .~ "slimeCrit" & crHP .~ HP 1000 -- & crType .~ SlimeCrit r 0 0 (V2 (slimeToRad r) 0) False 0 - & crType .~ SlimeCrit r 0 0 1 False 0 + & crType .~ SlimeCrit r 0 Nothing 1 False 0 & crFaction .~ ColorFaction (light green) & crPerception . cpVision . viFOV .~ FloatFOV pi & crActionPlan .~ SlimeIntelligence diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index 895507f2a..f08212106 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -7,6 +7,7 @@ module Dodge.Creature.Picture ( drawCreature, ) where +import Dodge.Creature.Slime import Geometry.Zone import Data.Foldable import qualified Data.Strict.Tuple as ST @@ -58,17 +59,14 @@ drawCreature w m cr = translateSP (_crPos cr) . fallrot . rotateSP (_crDir cr) $ drawSlimeCrit :: Creature -> Shape drawSlimeCrit cr = colorSH green - $ upperPrismPolyHalf Medium Typical (cr ^?! crType . slimeEngulfProgress + min 15 r) $ polyCirc 6 r - & each . _x *~ p - & each . _y %~ (/p) --- & each %~ scaleAlong d s --- & each %~ scaleAlong (vNormal d) (1 / s) --- & each %~ rotateV (-cr ^. crDir) + $ upperPrismPolyHalf Medium Typical (cr ^?! crType . slimeEngulfProgress + min 15 r) ps where r = slimeToRad $ cr ^?! crType . slimeSlime - cr ^?! crType . slimeSlimeChange - p = cr ^?! crType . slimeCompression --- d = normalize p --- s = norm p / r + so = slimeOutline cr + ps = fromMaybe so $ do + (x',qs) <- cr ^? crType . slimeSplitTimer . _Just + let x = fromIntegral x' + return $ zipWith (+) (fmap (0.1*(10 - x) *^) so) (fmap (0.1*x*^) qs) -- assumes d is a unit vector scaleAlong :: Point2 -> Float -> Point2 -> Point2 diff --git a/src/Dodge/Creature/Slime.hs b/src/Dodge/Creature/Slime.hs new file mode 100644 index 000000000..f3658c671 --- /dev/null +++ b/src/Dodge/Creature/Slime.hs @@ -0,0 +1,16 @@ +module Dodge.Creature.Slime (slimeOutline) where + +import Control.Lens +import Dodge.Data.Creature +import Geometry.Data +import Linear +import Shape + +slimeOutline :: Creature -> [Point2] +slimeOutline cr = + polyCirc 6 r + & each . _x *~ a + & each . _y %~ (/ a) + where + r = slimeToRad $ cr ^?! crType . slimeSlime - cr ^?! crType . slimeSlimeChange + a = cr ^?! crType . slimeCompression diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index 35cdb0bc9..f797bf175 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -3,6 +3,7 @@ module Dodge.Creature.Update (updateCreature) where --import Dodge.WorldEvent.ThingsHit +import Dodge.Creature.Slime import Dodge.Creature.Radius import Dodge.Creature.MoveType import Dodge.Base.Collide @@ -233,7 +234,7 @@ updateCalmBee cr cid w mountshakeoff mid = fromMaybe True $ do mcr <- w ^? cWorld . lWorld . creatures . ix mid SlimeCrit {_slimeSplitTimer = x} <- mcr ^? crType - return $ x > 0 + return $ isJust x --sspeed = 0.05 sspeed = 5 gettarg = do @@ -263,9 +264,13 @@ slimeCritUpdate cid w & cWorld . lWorld . creatures . ix cid .~ mvslime & cWorld . lWorld . creatures . ix cid . crDamage .~ [] & tocr %~ doSlimeRadChange - & tocr . crType . slimeSplitTimer %~ (max 0 . subtract 1) + & tocr . crType . slimeSplitTimer %~ fsst & tocr . crType . slimeEngulfProgress %~ (max 0 . subtract 0.5) where + fsst Nothing = Nothing + fsst (Just (x,ps)) + | x > 0 = Just (x-1,ps) + | otherwise = Nothing tocr = cWorld . lWorld . creatures . ix cid cr = w ^?! cWorld . lWorld . creatures . ix cid -- v = 0.1 *^ normalize p @@ -327,27 +332,30 @@ splitSlimeCrit p v cr = do mvdir | isLHS p (p+v) cxy = normalize (vNormal v) | otherwise = - normalize (vNormal v) - return (cr' & crPos . _xy .~ mp + (r1 + 0.51) *^ mvdir --- & crType . slimeRad .~ r1 + (ps',qs') + | isLHS p (p+v) cxy = (ps,qs) + | otherwise = (qs,ps) + c1 = cr' & crPos . _xy .~ mp + r1 *^ mvdir & crType . slimeSlime .~ round (r1 ^ (2 :: Int) * 100) - & crType . slimeCompression .~ 1 -- rotateV (argV mvdir) (V2 r1 0) - & crType . slimeIsCompressing .~ False & crDir .~ argV mvdir - ,cr' & crPos . _xy .~ mp - (r2 + 0.51) *^ mvdir --- & crType . slimeRad .~ r2 + c2 = cr' & crPos . _xy .~ mp - r2 *^ mvdir & crType . slimeSlime .~ round (r2^(2::Int) * 100) - & crType . slimeCompression .~ 1 -- rotateV (argV (-mvdir)) (V2 r2 0) - & crType . slimeIsCompressing .~ False & crDir .~ argV (-mvdir) - & crType . slimeEngulfProgress .~ 0 + c1ps = qs' & each +~ cxy - (mp + r1 *^ mvdir) & each %~ rotateV (- c1 ^. crDir) + c2ps = ps' & each +~ cxy - (mp - r2 *^ mvdir) & each %~ rotateV (- c2 ^. crDir) + return (c1 & crType . slimeSplitTimer . _Just . _2 .~ polyInPoly (centroid c1ps) c1ps (slimeOutline c1) + ,c2 & crType . slimeSplitTimer . _Just . _2 .~ polyInPoly (centroid c2ps) c2ps (slimeOutline c2) ) where cxy = cr ^. crPos . _xy r = cr ^?! crType . slimeSlime . to slimeToRad cr' = cr & crDamage .~ [] & crType . slimeSlimeChange .~ 0 - & crType . slimeSplitTimer .~ 10 + & crType . slimeSplitTimer .~ Just (10, mempty) & crType . slimeIsCompressing .~ False + & crType . slimeCompression .~ 1 -- rotateV (argV mvdir) (V2 r1 0) + (ps,qs) = cutPoly (p-cxy) (p+v-cxy) $ slimeOutline cr & each %~ rotateV (cr ^. crDir) + -- h is the height of the segment, ie r - distance to center segmentArea :: Float -> Float -> Float diff --git a/src/Dodge/Data/Creature/Misc.hs b/src/Dodge/Data/Creature/Misc.hs index 17aaf7e3c..26165157c 100644 --- a/src/Dodge/Data/Creature/Misc.hs +++ b/src/Dodge/Data/Creature/Misc.hs @@ -81,7 +81,8 @@ data CreatureType { _slimeSlime :: Int -- note multiplied by 100 , _slimeSlimeChange :: Int -- , _slimeRadWobble :: Float - , _slimeSplitTimer :: Int + --, _slimeSplitTimer :: Int + , _slimeSplitTimer :: Maybe (Int, [Point2]) , _slimeCompression :: Float , _slimeIsCompressing :: Bool , _slimeEngulfProgress :: Float diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index bcb236a14..13b15a85f 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -58,8 +58,9 @@ crs :: Universe -> [Creature] crs u = u ^.. uvWorld . cWorld . lWorld . creatures . each testStringInit :: Universe -> [String] -testStringInit u = -- [show . getSum $ foldMap (Sum . crslime) (crs u)] - u ^.. tocrs . each . crType . slimeSlimeChange . to show +testStringInit _ = mempty + --[show . getSum $ foldMap (Sum . crslime) (crs u)] +-- u ^.. tocrs . each . crType . slimeSplitTimer . to show -- u ^.. tocrs . ix 1 . crPos . _xy . to show -- <> u ^.. tocrs . ix 1 . crType . slimeCompression . to show -- <> u ^.. tocrs . ix 1 . crType . slimeCompression . to norm . to show diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 0833ff1f6..c63f190f5 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -1026,9 +1026,8 @@ crCrSpring c1 c2 , slimeFood c2 , distance xy1 xy2 < r1 - (r2 + 5) = feedSlime c1 c2 - | Just t <- c1 ^? crType . slimeSplitTimer - , slimeFood c2 - , t <= 0 = slimeSuck c1 c2 + | Just Nothing <- c1 ^? crType . slimeSplitTimer + , slimeFood c2 = slimeSuck c1 c2 | SlimeCrit{} <- c1 ^. crType = id | SlimeCrit{} <- c2 ^. crType = id | otherwise = cWorld . lWorld . creatures %~ ( olap c1 c2 . olap' c2 c1) diff --git a/src/Geometry/Intersect.hs b/src/Geometry/Intersect.hs index 95f19027c..199ff343e 100644 --- a/src/Geometry/Intersect.hs +++ b/src/Geometry/Intersect.hs @@ -4,6 +4,7 @@ {- Testing for and finding intersection points. -} module Geometry.Intersect where +import Data.Monoid import Data.List (sortOn) import Control.Applicative import Control.Lens @@ -272,6 +273,12 @@ intersectLinePoly a b (p:ps) = sortOn (dotV (b - a)) $ zipWith (\x y -> intersectSegLine x y a b) (p:ps) (ps ++[p]) intersectLinePoly _ _ [] = error "intersectLinePoly empty polygon" +intersectRayPoly :: Point2 -> Point2 -> [Point2] -> Maybe Point2 +intersectRayPoly a b (p:ps) = getFirst . mconcat $ zipWith f (p:ps) (ps++[p]) + where + f x y = First $ intersectSegRay x y a b +intersectRayPoly _ _ _ = error "intersectRayPoly: polygon too small" + {- | Given a line and a point return the point on the line closest to the point. diff --git a/src/Geometry/Polygon.hs b/src/Geometry/Polygon.hs index 4674c8c5e..db71e2e8e 100644 --- a/src/Geometry/Polygon.hs +++ b/src/Geometry/Polygon.hs @@ -188,7 +188,7 @@ grahamEliminate (x : y : z : xs) | not $ isLHS x y z = grahamEliminate (x : z : xs) grahamEliminate xs = xs --- this isn't the centroid of the polygon... +-- not sure what definition of centroid is applicable here centroid :: (Num (f a),Functor f, Fractional a,Foldable t) => t (f a) -> f a centroid = L.fold $ (^/) <$> L.Fold (+) 0 id <*> L.genericLength @@ -234,9 +234,15 @@ cutPolyR a b [] e x ls rs = case intersectSegLine x e a b of Nothing -> (reverse ls,reverse rs) Just p -> (reverse (p\:ls), reverse (p\:rs)) +polyInPoly :: Point2 -> [Point2] -> [Point2] -> [Point2] +polyInPoly p ps = mapMaybe f + where + f q = intersectRayPoly p q ps + infixr 5 \: (\:) :: Eq a => a -> [a] -> [a] (\:) x (y:ys) | x /= y = x:y:ys | otherwise = y:ys (\:) x [] = [x] + diff --git a/tags b/tags index 48e5d1252..0eb26933b 100644 --- a/tags +++ b/tags @@ -15,7 +15,7 @@ <$> src/Dodge/Data/ActionPlan.hs 165;" o <$> src/Dodge/Data/CWorld.hs 52;" o <$> src/Dodge/Data/Camera.hs 38;" o -<$> src/Dodge/Data/Creature.hs 93;" o +<$> src/Dodge/Data/Creature.hs 100;" o <$> src/Dodge/Data/LWorld.hs 180;" o <$> src/Dodge/Data/Terminal.hs 69;" o ABSOLUTE src/Dodge/Data/Item/Combine.hs 40;" C @@ -72,11 +72,12 @@ AttachType src/Dodge/Data/Item/Combine.hs 92;" t Attention src/Dodge/Data/Creature/Perception.hs 58;" t AttentiveTo src/Dodge/Data/Creature/Perception.hs 59;" C Audition src/Dodge/Data/Creature/Perception.hs 45;" t -AutoCrit src/Dodge/Data/Creature/Misc.hs 104;" C +AutoCrit src/Dodge/Data/Creature/Misc.hs 105;" C AutoTrigger src/Dodge/Data/TriggerType.hs 8;" C -AvPosture src/Dodge/Data/Creature/Misc.hs 111;" C +AvPosture src/Dodge/Data/Creature/Misc.hs 112;" C Avatar src/Dodge/Data/Creature/Misc.hs 53;" C -AvatarPosture src/Dodge/Data/Creature/Misc.hs 111;" t +AvatarDestroyed src/Dodge/Data/Creature.hs 66;" C +AvatarPosture src/Dodge/Data/Creature/Misc.hs 112;" t Awareness src/Dodge/Data/Creature/Perception.hs 63;" t BANGCONE src/Dodge/Data/Item/Combine.hs 150;" C BANGROD src/Dodge/Data/Item/Combine.hs 159;" C @@ -103,10 +104,10 @@ BURSTRIFLE src/Dodge/Data/Item/Combine.hs 158;" C BackdropCurs src/Dodge/Data/SelectionList.hs 23;" C BackgroundSound src/Dodge/Data/SoundOrigin.hs 13;" C Bark src/Dodge/Data/ActionPlan.hs 41;" C -BarrelCrit src/Dodge/Data/Creature/Misc.hs 105;" C +BarrelCrit src/Dodge/Data/Creature/Misc.hs 106;" C BarrelHiss src/Dodge/Data/SoundOrigin.hs 34;" C -BarrelType src/Dodge/Data/Creature/Misc.hs 123;" t -Barreloid src/Dodge/Data/Creature/Misc.hs 119;" C +BarrelType src/Dodge/Data/Creature/Misc.hs 124;" t +Barreloid src/Dodge/Data/Creature/Misc.hs 120;" C BasicBeamDraw src/Dodge/Data/Beam.hs 32;" C BasicBulletTrajectory src/Dodge/Data/Bullet.hs 42;" C BasicBulletTrajectoryType src/Dodge/Data/Bullet.hs 49;" C @@ -120,7 +121,7 @@ BeamSimple src/Dodge/Data/Beam.hs 48;" C BeamSplitterSF src/Dodge/Data/ComposedItem.hs 50;" C BeamType src/Dodge/Data/Beam.hs 44;" t BecomePowerful src/Dodge/Data/Scenario.hs 9;" C -BeeCrit src/Dodge/Data/Creature/Misc.hs 89;" C +BeeCrit src/Dodge/Data/Creature/Misc.hs 90;" C BeeMvType src/Dodge/Data/Creature/Misc.hs 39;" C BeePheremone src/Dodge/Data/Cloud.hs 47;" t BeltBulletAmmo src/Dodge/Data/AmmoType.hs 11;" C @@ -242,7 +243,7 @@ ContextDT src/Dodge/Data/DoubleTree.hs 25;" t ContinentalGovernment src/Dodge/Data/Scenario.hs 51;" C ControlDeckSS src/Dodge/Data/Scenario.hs 89;" C ConvexPoly src/Geometry/ConvexPoly.hs 25;" t -CookDeath src/Dodge/Data/Creature.hs 70;" C +CookDeath src/Dodge/Data/Creature.hs 77;" C CookingDamage src/Dodge/Data/Damage/Type.hs 5;" C Corporation src/Dodge/Data/Scenario.hs 46;" C Cosmic src/Dodge/Data/Scenario.hs 74;" C @@ -251,8 +252,7 @@ CrArcNode src/Dodge/Data/LWorld.hs 165;" C CrBl src/Dodge/Data/CreatureEffect.hs 20;" t CrCanShoot src/Dodge/Data/CreatureEffect.hs 20;" C CrChasm src/Dodge/Data/SoundOrigin.hs 18;" C -CrDestroyed src/Dodge/Data/Creature.hs 66;" C -CrDestructionType src/Dodge/Data/Creature.hs 68;" t +CrDestructionType src/Dodge/Data/Creature.hs 75;" t CrFootSound src/Dodge/Data/SoundOrigin.hs 16;" C CrGroup src/Dodge/Data/Creature/State.hs 23;" t CrGroupID src/Dodge/Data/Creature/State.hs 29;" C @@ -286,7 +286,7 @@ CreateFlame src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C CreatePoisonGas src/Dodge/Data/Item/Use/Consumption/Ammo.hs 17;" C Creature src/Dodge/Data/Creature.hs 35;" t CreaturePart src/Dodge/Data/Wall/Structure.hs 16;" C -CreatureShape src/Dodge/Data/Creature/Misc.hs 113;" t +CreatureShape src/Dodge/Data/Creature/Misc.hs 114;" t CreatureType src/Dodge/Data/Creature/Misc.hs 52;" t Crushing src/Dodge/Data/Damage.hs 19;" C CryoReleaseCloud src/Dodge/Data/Cloud.hs 24;" C @@ -314,7 +314,7 @@ DamageLaser src/Dodge/Data/Laser.hs 16;" C DamageOrigin src/Dodge/Data/Damage.hs 31;" t DamageSensor src/Dodge/Data/Machine/Sensor.hs 19;" t DamageType src/Dodge/Data/Damage/Type.hs 3;" t -DeathType src/Dodge/Data/Creature.hs 70;" t +DeathType src/Dodge/Data/Creature.hs 77;" t Debris src/Dodge/Data/Prop.hs 27;" t DebrisChunk src/Dodge/Data/Prop.hs 27;" C DebrisType src/Dodge/Data/Prop.hs 21;" t @@ -406,7 +406,7 @@ Explosion src/Dodge/Data/SoundOrigin.hs 39;" C ExplosionPayload src/Dodge/Data/Payload.hs 9;" C Explosive src/Dodge/Data/Damage.hs 25;" C ExplosiveBall src/Dodge/Data/EnergyBall/Type.hs 14;" C -ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 125;" C +ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 126;" C ExplosivePutty src/Dodge/Data/AmmoType.hs 16;" C ExtraMenuOption src/Dodge/Data/Universe.hs 76;" t Eyes src/Dodge/Data/Creature/Perception.hs 39;" C @@ -500,8 +500,8 @@ GeoObjShads src/Dodge/Data/Config.hs 119;" C GetTo src/Dodge/Data/ActionPlan.hs 148;" C GetToPoint src/Dodge/Data/Scenario.hs 12;" C Gib src/Dodge/Data/Prop.hs 22;" C -Gibbed src/Dodge/Data/Creature.hs 68;" C -GibsDeath src/Dodge/Data/Creature.hs 70;" C +Gibbed src/Dodge/Data/Creature.hs 75;" C +GibsDeath src/Dodge/Data/Creature.hs 77;" C Glass src/Dodge/Data/Material.hs 14;" C GlassBreakSound src/Dodge/Data/SoundOrigin.hs 35;" C GlassDebris src/Dodge/Data/Prop.hs 25;" C @@ -538,7 +538,7 @@ HeldItemType src/Dodge/Data/Item/Combine.hs 141;" t HeldPlatformSF src/Dodge/Data/ComposedItem.hs 15;" C HiddenGoal src/Dodge/Data/Scenario.hs 14;" C HighlightSI src/Dodge/Data/SelectionList.hs 58;" C -HiveCrit src/Dodge/Data/Creature/Misc.hs 98;" C +HiveCrit src/Dodge/Data/Creature/Misc.hs 99;" C HomeUsingRemoteScreen src/Dodge/Data/Projectile.hs 43;" C HomeUsingTargeting src/Dodge/Data/Projectile.hs 44;" C Hospital src/Dodge/Data/Scenario.hs 69;" C @@ -562,7 +562,7 @@ HotkeyX src/Dodge/Data/Equipment/Misc.hs 36;" C HotkeyZ src/Dodge/Data/Equipment/Misc.hs 35;" C HoverCrit src/Dodge/Data/Creature/Misc.hs 74;" C Huge src/Shape/Data.hs 24;" C -Humanoid src/Dodge/Data/Creature/Misc.hs 114;" C +Humanoid src/Dodge/Data/Creature/Misc.hs 115;" C IMSI src/Dodge/Data/SelectionList.hs 41;" t IMSS src/Dodge/Data/SelectionList.hs 39;" t INTROSCAN src/Dodge/Data/Item/Combine.hs 32;" C @@ -596,7 +596,7 @@ Inspect_wall src/Dodge/Data/Config.hs 106;" C Institution src/Dodge/Data/Scenario.hs 42;" t Int2 src/Geometry/Data.hs 21;" t IntID src/Dodge/Data/Universe.hs 120;" t -Intention src/Dodge/Data/Creature.hs 72;" t +Intention src/Dodge/Data/Creature.hs 79;" t IntersectingRoomClipBoundaries src/Dodge/Data/Config.hs 125;" C IntroScanSF src/Dodge/Data/ComposedItem.hs 22;" C IntroScanType src/Dodge/Data/Item/Combine.hs 45;" t @@ -651,7 +651,7 @@ LabLink src/Dodge/Data/Room.hs 50;" C LabSS src/Dodge/Data/Scenario.hs 97;" C LabelCluster src/Dodge/Data/RoomCluster.hs 13;" C Laboratory src/Dodge/Data/Scenario.hs 61;" C -LampCrit src/Dodge/Data/Creature/Misc.hs 106;" C +LampCrit src/Dodge/Data/Creature/Misc.hs 107;" C Large src/Shape/Data.hs 25;" C LasBeamCombine src/Dodge/Data/Beam.hs 38;" C LasGunFlare src/Dodge/Data/Muzzle.hs 34;" C @@ -761,7 +761,7 @@ Medium src/Shape/Data.hs 26;" C Melee src/Dodge/Data/ActionPlan.hs 42;" C MeleeL src/Dodge/Data/ActionPlan.hs 43;" C MeleeR src/Dodge/Data/ActionPlan.hs 44;" C -Memory src/Dodge/Data/Creature.hs 79;" t +Memory src/Dodge/Data/Creature.hs 86;" t MenuOption src/Dodge/Data/Universe.hs 109;" t MenuOptionDisplay src/Dodge/Data/Universe.hs 104;" t MetaBranch src/Dodge/Data/MetaTree.hs 19;" t @@ -837,7 +837,7 @@ NoAmmoRequired src/Dodge/Data/Muzzle.hs 25;" C NoBeamCombine src/Dodge/Data/Beam.hs 41;" C NoConcurrentEffect src/Loop/Data.hs 7;" C NoCrImp src/Dodge/Data/CreatureEffect.hs 9;" C -NoCreatureShape src/Dodge/Data/Creature/Misc.hs 120;" C +NoCreatureShape src/Dodge/Data/Creature/Misc.hs 121;" C NoExtraMenuOption src/Dodge/Data/Universe.hs 79;" C NoFaction src/Dodge/Data/Creature/State.hs 18;" C NoFlare src/Dodge/Data/Muzzle.hs 29;" C @@ -1004,11 +1004,11 @@ PhysicalSensor src/Dodge/Data/Machine/Sensor.hs 16;" C Picture src/Picture/Data.hs 41;" t Piercing src/Dodge/Data/Damage.hs 16;" C Piezoelectric src/Dodge/Data/Material.hs 23;" C -Pitted src/Dodge/Data/Creature.hs 68;" C +Pitted src/Dodge/Data/Creature.hs 75;" C Placement src/Dodge/Data/GenWorld.hs 113;" t PlacementSpot src/Dodge/Data/GenWorld.hs 97;" t -PlainBarrel src/Dodge/Data/Creature/Misc.hs 124;" C -PlainDeath src/Dodge/Data/Creature.hs 70;" C +PlainBarrel src/Dodge/Data/Creature/Misc.hs 125;" C +PlainDeath src/Dodge/Data/Creature.hs 77;" C PlantNurserySS src/Dodge/Data/Scenario.hs 96;" C PlasmaBall src/Dodge/Data/PlasmaBall.hs 12;" t PlasmaBallType src/Dodge/Data/PlasmaBall.hs 20;" t @@ -1024,7 +1024,7 @@ Point3Q src/Geometry/Data.hs 52;" t Point4 src/Geometry/Data.hs 41;" t Poison src/Dodge/Data/Damage.hs 26;" C PoisonDamage src/Dodge/Data/Damage/Type.hs 6;" C -PoisonDeath src/Dodge/Data/Creature.hs 70;" C +PoisonDeath src/Dodge/Data/Creature.hs 77;" C PoisonGas src/Dodge/Data/Cloud.hs 44;" C PolyEdge src/Dodge/Data/Room.hs 51;" C PolyShad src/Picture/Data.hs 31;" C @@ -1296,10 +1296,10 @@ Superfluous src/Shape/Data.hs 34;" C Surface src/Shape/Data.hs 38;" t Survive src/Dodge/Data/Scenario.hs 5;" C Suspicious src/Dodge/Data/Creature/Perception.hs 64;" C -Swallowed src/Dodge/Data/Creature.hs 68;" C +Swallowed src/Dodge/Data/Creature.hs 75;" C SwapEquipment src/Dodge/Data/RightButtonOptions.hs 24;" C Swarm src/Dodge/Data/Creature/State.hs 25;" C -SwarmCrit src/Dodge/Data/Creature/Misc.hs 103;" C +SwarmCrit src/Dodge/Data/Creature/Misc.hs 104;" C TAPE src/Dodge/Data/Item/Combine.hs 56;" C TARGETING src/Dodge/Data/Item/Combine.hs 21;" C TCBase src/Dodge/Data/Terminal.hs 49;" C @@ -1539,7 +1539,7 @@ XInfinity src/Dodge/Data/CardinalPoint.hs 44;" t YELLOW src/Color/Data.hs 15;" C ZOOMSCOPE src/Dodge/Data/Item/Combine.hs 93;" C ZombieFaction src/Dodge/Data/Creature/State.hs 14;" C -\: src/Geometry/Polygon.hs 238;" o +\: src/Geometry/Polygon.hs 243;" o __Just' src/MaybeHelp.hs 11;" f _acAction src/Dodge/Data/ActionPlan.hs 79;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 19;" f @@ -1576,7 +1576,7 @@ _avStrength src/Dodge/Data/Creature/Misc.hs 56;" f _avatarMaterial src/Dodge/Data/Creature/Misc.hs 55;" f _avatarPulse src/Dodge/Data/Creature/Misc.hs 54;" f _barrelShader src/Data/Preload/Render.hs 27;" f -_barrelType src/Dodge/Data/Creature/Misc.hs 105;" f +_barrelType src/Dodge/Data/Creature/Misc.hs 106;" f _bdColor src/Dodge/Data/Prop.hs 23;" f _bdMaxX src/Dodge/Data/Bounds.hs 12;" f _bdMaxY src/Dodge/Data/Bounds.hs 14;" f @@ -1584,12 +1584,12 @@ _bdMinX src/Dodge/Data/Bounds.hs 11;" f _bdMinY src/Dodge/Data/Bounds.hs 13;" f _bdsTrigger src/Dodge/Data/Button.hs 26;" f _beamCombine src/Dodge/Data/Beam.hs 46;" f -_beeAggro src/Dodge/Data/Creature/Misc.hs 93;" f -_beeHive src/Dodge/Data/Creature/Misc.hs 91;" f -_beeLifespan src/Dodge/Data/Creature/Misc.hs 96;" f +_beeAggro src/Dodge/Data/Creature/Misc.hs 94;" f +_beeHive src/Dodge/Data/Creature/Misc.hs 92;" f +_beeLifespan src/Dodge/Data/Creature/Misc.hs 97;" f _beePheremones src/Dodge/Data/LWorld.hs 99;" f -_beeRandomMovement src/Dodge/Data/Creature/Misc.hs 95;" f -_beeSlime src/Dodge/Data/Creature/Misc.hs 90;" f +_beeRandomMovement src/Dodge/Data/Creature/Misc.hs 96;" f +_beeSlime src/Dodge/Data/Creature/Misc.hs 91;" f _blDir src/Dodge/Data/Block.hs 27;" f _blDraw src/Dodge/Data/Block.hs 29;" f _blFootprint src/Dodge/Data/Block.hs 25;" f @@ -1925,9 +1925,9 @@ _harvestTarget src/Dodge/Data/ActionPlan.hs 153;" f _heldPos src/Dodge/Data/Input.hs 43;" f _heldWorldPos src/Dodge/Data/Input.hs 45;" f _highlightItems src/Dodge/Data/CWorld.hs 36;" f -_hiveChildren src/Dodge/Data/Creature/Misc.hs 99;" f -_hiveGestation src/Dodge/Data/Creature/Misc.hs 100;" f -_hiveSlime src/Dodge/Data/Creature/Misc.hs 101;" f +_hiveChildren src/Dodge/Data/Creature/Misc.hs 100;" f +_hiveGestation src/Dodge/Data/Creature/Misc.hs 101;" f +_hiveSlime src/Dodge/Data/Creature/Misc.hs 102;" f _hotkeys src/Dodge/Data/LWorld.hs 146;" f _hud src/Dodge/Data/World.hs 47;" f _ibtAmmoMag src/Dodge/Data/Item/Combine.hs 20;" f @@ -1991,9 +1991,9 @@ _lInvLock src/Dodge/Data/LWorld.hs 149;" f _lTestInt src/Dodge/Data/LWorld.hs 145;" f _lTestString src/Dodge/Data/LWorld.hs 144;" f _lWorld src/Dodge/Data/CWorld.hs 24;" f -_lampColor src/Dodge/Data/Creature/Misc.hs 106;" f -_lampHeight src/Dodge/Data/Creature/Misc.hs 106;" f -_lampLSID src/Dodge/Data/Creature/Misc.hs 106;" f +_lampColor src/Dodge/Data/Creature/Misc.hs 107;" f +_lampHeight src/Dodge/Data/Creature/Misc.hs 107;" f +_lampLSID src/Dodge/Data/Creature/Misc.hs 107;" f _lasWepXSF src/Dodge/Data/ComposedItem.hs 42;" f _laserEmmiter src/Dodge/Data/Laser.hs 17;" f _laserTypeDamage src/Dodge/Data/Laser.hs 16;" f @@ -2085,7 +2085,7 @@ _mdUpdate src/Dodge/Data/Modification.hs 16;" f _mdUpdate src/Dodge/Data/Modification.hs 25;" f _meleeCooldown src/Dodge/Data/Creature/Misc.hs 63;" f _meleeCooldown src/Dodge/Data/Creature/Misc.hs 74;" f -_meleeCooldown src/Dodge/Data/Creature/Misc.hs 94;" f +_meleeCooldown src/Dodge/Data/Creature/Misc.hs 95;" f _meleeCooldownL src/Dodge/Data/Creature/Misc.hs 68;" f _meleeCooldownR src/Dodge/Data/Creature/Misc.hs 69;" f _meleeTarget src/Dodge/Data/ActionPlan.hs 147;" f @@ -2116,7 +2116,7 @@ _mvSpeed src/Dodge/Data/Creature/Misc.hs 27;" f _mvSpeed src/Dodge/Data/Creature/Misc.hs 30;" f _mvSpeed src/Dodge/Data/Creature/Misc.hs 35;" f _mvSpeed src/Dodge/Data/Creature/Misc.hs 40;" f -_mvToPoint src/Dodge/Data/Creature.hs 74;" f +_mvToPoint src/Dodge/Data/Creature.hs 81;" f _mvTurnJit src/Dodge/Data/Creature/Misc.hs 32;" f _mvTurnRad src/Dodge/Data/Creature/Misc.hs 31;" f _mvTurnSpeed src/Dodge/Data/Creature/Misc.hs 36;" f @@ -2130,7 +2130,7 @@ _mzRandomOffset src/Dodge/Data/Muzzle.hs 17;" f _mzRot src/Dodge/Data/Muzzle.hs 11;" f _nodeMetaTree src/Dodge/Data/MetaTree.hs 17;" f _nodeTree src/Dodge/Data/MetaTree.hs 16;" f -_nodesSearched src/Dodge/Data/Creature.hs 81;" f +_nodesSearched src/Dodge/Data/Creature.hs 88;" f _nonInf src/Dodge/Data/CardinalPoint.hs 44;" f _numLinkEW src/Dodge/Data/Room.hs 34;" f _numLinkNS src/Dodge/Data/Room.hs 35;" f @@ -2164,7 +2164,7 @@ _phTargetingID src/Dodge/Data/Projectile.hs 44;" f _pickUpLevel src/Dodge/Layout/Generate.hs 15;" f _pickUps src/Dodge/Layout/Generate.hs 16;" f _pictureShaders src/Data/Preload/Render.hs 31;" f -_piercedPoints src/Dodge/Data/Creature/Misc.hs 125;" f +_piercedPoints src/Dodge/Data/Creature/Misc.hs 126;" f _pjBarrelSpin src/Dodge/Data/Projectile.hs 24;" f _pjDetonatorID src/Dodge/Data/Projectile.hs 26;" f _pjDir src/Dodge/Data/Projectile.hs 19;" f @@ -2379,18 +2379,18 @@ _skOldPos src/Dodge/Data/Spark.hs 14;" f _skPos src/Dodge/Data/Spark.hs 13;" f _skType src/Dodge/Data/Spark.hs 15;" f _skVel src/Dodge/Data/Spark.hs 12;" f -_skinHead src/Dodge/Data/Creature/Misc.hs 115;" f -_skinLower src/Dodge/Data/Creature/Misc.hs 117;" f -_skinUpper src/Dodge/Data/Creature/Misc.hs 116;" f +_skinHead src/Dodge/Data/Creature/Misc.hs 116;" f +_skinLower src/Dodge/Data/Creature/Misc.hs 118;" f +_skinUpper src/Dodge/Data/Creature/Misc.hs 117;" f _slInt src/Dodge/Data/HUD.hs 39;" f _slSec src/Dodge/Data/HUD.hs 39;" f _slSet src/Dodge/Data/HUD.hs 39;" f -_slimeCompression src/Dodge/Data/Creature/Misc.hs 85;" f -_slimeEngulfProgress src/Dodge/Data/Creature/Misc.hs 87;" f -_slimeIsCompressing src/Dodge/Data/Creature/Misc.hs 86;" f +_slimeCompression src/Dodge/Data/Creature/Misc.hs 86;" f +_slimeEngulfProgress src/Dodge/Data/Creature/Misc.hs 88;" f +_slimeIsCompressing src/Dodge/Data/Creature/Misc.hs 87;" f _slimeSlime src/Dodge/Data/Creature/Misc.hs 81;" f _slimeSlimeChange src/Dodge/Data/Creature/Misc.hs 82;" f -_slimeSplitTimer src/Dodge/Data/Creature/Misc.hs 84;" f +_slimeSplitTimer src/Dodge/Data/Creature/Misc.hs 85;" f _slinkHeadPos src/Dodge/Data/Creature/Misc.hs 78;" f _slinkSpine src/Dodge/Data/Creature/Misc.hs 77;" f _smoothScrollAmount src/Dodge/Data/Input.hs 41;" f @@ -2404,7 +2404,7 @@ _soundStatus src/Sound/Data.hs 45;" f _soundTime src/Sound/Data.hs 44;" f _soundVolume src/Sound/Data.hs 49;" f _soundVolumeFraction src/Sound/Data.hs 50;" f -_soundsToInvestigate src/Dodge/Data/Creature.hs 80;" f +_soundsToInvestigate src/Dodge/Data/Creature.hs 87;" f _spPixelOff src/Dodge/Data/ScreenPos.hs 14;" f _spScreenOff src/Dodge/Data/ScreenPos.hs 13;" f _sparks src/Dodge/Data/LWorld.hs 111;" f @@ -2416,7 +2416,7 @@ _ssShownItems src/Dodge/Data/SelectionList.hs 34;" f _ssShownLength src/Dodge/Data/SelectionList.hs 35;" f _ssboName src/Shader/Data.hs 97;" f _ssboPtr src/Shader/Data.hs 98;" f -_startStopMv src/Dodge/Data/Creature/Misc.hs 92;" f +_startStopMv src/Dodge/Data/Creature/Misc.hs 93;" f _strategyInt src/Dodge/Data/ActionPlan.hs 154;" f _strideAmount src/Dodge/Data/Creature/Misc.hs 61;" f _strideAmount src/Dodge/Data/Creature/Misc.hs 65;" f @@ -2440,7 +2440,7 @@ _taArcSteps src/Dodge/Data/TeslaArc.hs 18;" f _taColor src/Dodge/Data/TeslaArc.hs 19;" f _taOrigin src/Dodge/Data/TeslaArc.hs 20;" f _taTimer src/Dodge/Data/TeslaArc.hs 17;" f -_targetCr src/Dodge/Data/Creature.hs 73;" f +_targetCr src/Dodge/Data/Creature.hs 80;" f _targetID src/Dodge/Data/ActionPlan.hs 73;" f _targetSeenAt src/Dodge/Data/ActionPlan.hs 74;" f _tbPos src/Dodge/Data/TractorBeam.hs 12;" f @@ -2557,7 +2557,7 @@ _vcTime src/Dodge/Data/Creature/Misc.hs 21;" f _vertices src/Polyhedra/Data.hs 22;" f _viDist src/Dodge/Data/Creature/Perception.hs 41;" f _viFOV src/Dodge/Data/Creature/Perception.hs 40;" f -_viewPoint src/Dodge/Data/Creature.hs 75;" f +_viewPoint src/Dodge/Data/Creature.hs 82;" f _volleyNumBarrels src/Dodge/Data/TriggerType.hs 13;" f _volleyRate src/Dodge/Data/TriggerType.hs 13;" f _volume_master src/Dodge/Data/Config.hs 49;" f @@ -2724,7 +2724,7 @@ argV src/Geometry/Vector.hs 89;" f armourChaseCrit src/Dodge/Creature/ArmourChase.hs 34;" f armouredChasers src/Dodge/Room/Boss.hs 58;" f armouredCorridor src/Dodge/Room/RoadBlock.hs 20;" f -arms src/Dodge/Creature/Picture.hs 355;" f +arms src/Dodge/Creature/Picture.hs 348;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 9;" f @@ -2750,7 +2750,7 @@ autoGunS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 594;" f autoPistol src/Dodge/Item/Held/Stick.hs 21;" f autoRifle src/Dodge/Item/Held/Cane.hs 27;" f awakeLevelPerception src/Dodge/Creature/Perception.hs 167;" f -axisInt src/Geometry/Intersect.hs 247;" f +axisInt src/Geometry/Intersect.hs 248;" f azure src/Color.hs 49;" f bQuadToF src/Geometry/Bezier.hs 37;" f bQuadToLine src/Geometry/Bezier.hs 30;" f @@ -2767,7 +2767,7 @@ bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 890;" f bangStick src/Dodge/Item/Held/Stick.hs 15;" f barPP src/Dodge/Room/Foreground.hs 231;" f barrel src/Dodge/Creature/Inanimate.hs 17;" f -barrelShape src/Dodge/Creature/Picture.hs 406;" f +barrelShape src/Dodge/Creature/Picture.hs 399;" f baseAMRShape src/Dodge/Item/Draw/SPic.hs 411;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 76;" f baseCI src/Dodge/Item/Grammar.hs 167;" f @@ -2776,21 +2776,21 @@ baseItemTriggerType src/Dodge/BaseTriggerType.hs 21;" f baseRifleShape src/Dodge/Item/Draw/SPic.hs 325;" f baseRodShape src/Dodge/Item/Draw/SPic.hs 408;" f baseSMGShape src/Dodge/Item/Draw/SPic.hs 396;" f -baseShoulder src/Dodge/Creature/Picture.hs 393;" f +baseShoulder src/Dodge/Creature/Picture.hs 386;" f baseStickShape src/Dodge/Item/Draw/SPic.hs 302;" f baseStickShapeX src/Dodge/Item/Draw/SPic.hs 294;" f baseStickSpread src/Dodge/HeldUse.hs 346;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 138;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 31;" f -basicCrPict src/Dodge/Creature/Picture.hs 78;" f -basicCrShape src/Dodge/Creature/Picture.hs 84;" f +basicCrPict src/Dodge/Creature/Picture.hs 71;" f +basicCrShape src/Dodge/Creature/Picture.hs 77;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMuzFlare src/Dodge/HeldUse.hs 731;" f battery src/Dodge/Item/Ammo.hs 60;" f batteryPack src/Dodge/Item/Equipment.hs 38;" f beeCrit src/Dodge/Creature/ChaseCrit.hs 90;" f -beeLifespanCheck src/Dodge/Creature/Update.hs 119;" f +beeLifespanCheck src/Dodge/Creature/Update.hs 120;" f beep3QuickS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 710;" f beltMag src/Dodge/Item/Ammo.hs 38;" f bgateCalc src/Dodge/Inventory/SelectionList.hs 131;" f @@ -2875,7 +2875,7 @@ calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f calcTexCoord src/Tile.hs 19;" f canSee src/Dodge/Base/Collide.hs 343;" f canSeeIndirect src/Dodge/Base/Collide.hs 350;" f -canSpring src/Dodge/Update.hs 1003;" f +canSpring src/Dodge/Update.hs 1004;" f cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 23;" f capacitor src/Dodge/Item/Ammo.hs 67;" f card8Vec src/Dodge/Base/CardinalPoint.hs 32;" f @@ -2901,10 +2901,10 @@ changeSwapWith src/Dodge/Inventory.hs 283;" f charToTuple src/Picture/Base.hs 312;" f charToTupleGrad src/Picture/Text.hs 18;" f chartreuse src/Color.hs 51;" f -chaseCorpse src/Dodge/Creature/Picture.hs 304;" f +chaseCorpse src/Dodge/Creature/Picture.hs 297;" f chaseCrit src/Dodge/Creature/ChaseCrit.hs 35;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 193;" f -chaseUpperBody src/Dodge/Creature/Picture.hs 181;" f +chaseUpperBody src/Dodge/Creature/Picture.hs 174;" f chasmRotate src/Dodge/Creature/State/WalkCycle.hs 148;" f chasmSimpleMaze src/Dodge/Room/Tutorial.hs 417;" f chasmSpitTerminal src/Dodge/Room/Tutorial.hs 348;" f @@ -2914,7 +2914,7 @@ checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkDeath src/Dodge/Creature/Update.hs 401;" f checkDeath' src/Dodge/Creature/Update.hs 404;" f -checkEndGame src/Dodge/Update.hs 889;" f +checkEndGame src/Dodge/Update.hs 890;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f @@ -2968,9 +2968,9 @@ closeItemToSelectionItem src/Dodge/Inventory/SelectionList.hs 221;" f closeItemToTextPictures src/Dodge/Inventory/SelectionList.hs 260;" f closeObjectInfo src/Dodge/Render/HUD.hs 228;" f closestCrToMouse src/Dodge/Debug.hs 308;" f -closestPointOnLine src/Geometry/Intersect.hs 279;" f -closestPointOnLineParam src/Geometry/Intersect.hs 295;" f -closestPointOnSeg src/Geometry/Intersect.hs 310;" f +closestPointOnLine src/Geometry/Intersect.hs 286;" f +closestPointOnLineParam src/Geometry/Intersect.hs 302;" f +closestPointOnSeg src/Geometry/Intersect.hs 317;" f cloudPoisonDamage src/Dodge/Update/Cloud.hs 12;" f clsNearCirc src/Dodge/Zoning/Cloud.hs 21;" f clsNearPoint src/Dodge/Zoning/Cloud.hs 9;" f @@ -3048,9 +3048,9 @@ corridorWallN src/Dodge/Room/Corridor.hs 77;" f crAdd src/Dodge/Room/RezBox.hs 116;" f crAwayFromPost src/Dodge/Creature/Test.hs 82;" f crBlips src/Dodge/RadarSweep.hs 88;" f -crCamouflage src/Dodge/Creature/Picture.hs 81;" f +crCamouflage src/Dodge/Creature/Picture.hs 74;" f crCanSeeCr src/Dodge/Creature/Test.hs 49;" f -crCrSpring src/Dodge/Update.hs 1010;" f +crCrSpring src/Dodge/Update.hs 1011;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 68;" f crDeathEffects src/Dodge/Creature/Update.hs 425;" f crDeathSounds src/Dodge/Creature/Vocalization.hs 40;" f @@ -3090,7 +3090,7 @@ crRightHandWall src/Dodge/Creature/HandPos.hs 76;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 71;" f crSetRoots src/Dodge/Inventory/Location.hs 56;" f crShape src/Dodge/Creature/Shape.hs 8;" f -crSpring src/Dodge/Update.hs 998;" f +crSpring src/Dodge/Update.hs 999;" f crStratConMatches src/Dodge/Creature/Test.hs 77;" f crStrength src/Dodge/Creature/Statistics.hs 30;" f crUpdate src/Dodge/Creature/Update.hs 394;" f @@ -3104,12 +3104,12 @@ crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 71;" f crWlPbHitZ src/Dodge/WorldEvent/ThingsHit.hs 81;" f crZoneSize src/Dodge/Zoning/Creature.hs 43;" f crabActionUpdate src/Dodge/Creature/ReaderUpdate.hs 123;" f -crabCorpse src/Dodge/Creature/Picture.hs 323;" f +crabCorpse src/Dodge/Creature/Picture.hs 316;" f crabCrit src/Dodge/Creature/ChaseCrit.hs 42;" f crabCritInternal src/Dodge/Humanoid.hs 25;" f -crabFeet src/Dodge/Creature/Picture.hs 233;" f +crabFeet src/Dodge/Creature/Picture.hs 226;" f crabRoom src/Dodge/Room/Tutorial.hs 471;" f -crabUpperBody src/Dodge/Creature/Picture.hs 157;" f +crabUpperBody src/Dodge/Creature/Picture.hs 150;" f craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 41;" f crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 642;" f @@ -3137,7 +3137,7 @@ critsRoom src/Dodge/Room/Room.hs 425;" f crixsNearSeg src/Dodge/Zoning/Creature.hs 30;" f crossPic src/Dodge/Render/Label.hs 28;" f crossProd src/Geometry/Vector3D.hs 42;" f -crs src/Dodge/TestString.hs 58;" f +crs src/Dodge/TestString.hs 57;" f crsHit src/Dodge/WorldEvent/ThingsHit.hs 95;" f crsHitZ src/Dodge/WorldEvent/ThingsHit.hs 106;" f crsHitZ' src/Dodge/WorldEvent/ThingsHit.hs 126;" f @@ -3178,7 +3178,7 @@ damThingHitWith src/Dodge/Damage.hs 73;" f damToExpBarrel src/Dodge/Barreloid.hs 52;" f damageBlock src/Dodge/Wall/Damage.hs 121;" f damageCodeCommand src/Dodge/Terminal.hs 67;" f -damageCorpse src/Dodge/Creature/Update.hs 58;" f +damageCorpse src/Dodge/Creature/Update.hs 59;" f damageCrWl src/Dodge/Damage.hs 29;" f damageCrWlID src/Dodge/Damage.hs 23;" f damageCrystal src/Dodge/Material/Damage.hs 286;" f @@ -3211,10 +3211,10 @@ deZoneIX src/Dodge/Zoning/Base.hs 91;" f deZoneWall src/Dodge/Zoning/Wall.hs 69;" f deadEndPSType src/Dodge/Room/Room.hs 264;" f deadEndRoom src/Dodge/Room/Room.hs 267;" f -deadFeet src/Dodge/Creature/Picture.hs 351;" f -deadRot src/Dodge/Creature/Picture.hs 369;" f -deadScalp src/Dodge/Creature/Picture.hs 364;" f -deadUpperBody src/Dodge/Creature/Picture.hs 390;" f +deadFeet src/Dodge/Creature/Picture.hs 344;" f +deadRot src/Dodge/Creature/Picture.hs 362;" f +deadScalp src/Dodge/Creature/Picture.hs 357;" f +deadUpperBody src/Dodge/Creature/Picture.hs 383;" f debrisS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 778;" f debrisSPic src/Dodge/Prop/Draw.hs 17;" f debrisSize src/Dodge/Block/Debris.hs 131;" f @@ -3300,6 +3300,7 @@ deleteWallIDs src/Dodge/Wall/Delete.hs 27;" f denormalEdges src/Polyhedra.hs 128;" f destroyAllInvItems src/Dodge/Inventory.hs 62;" f destroyBlock src/Dodge/Block.hs 17;" f +destroyCreature src/Dodge/Data/Creature.hs 69;" f destroyDoor src/Dodge/Wall/Damage.hs 146;" f destroyInvItem src/Dodge/Inventory.hs 49;" f destroyItem src/Dodge/Inventory.hs 71;" f @@ -3396,7 +3397,7 @@ doRoomShift src/Dodge/Room/Link.hs 34;" f doScopeZoom src/Dodge/Update/Scroll.hs 89;" f doSectionSize src/Dodge/DisplayInventory.hs 215;" f doSideEffects appDodge/Main.hs 118;" f -doSlimeRadChange src/Dodge/Creature/Update.hs 300;" f +doSlimeRadChange src/Dodge/Creature/Update.hs 305;" f doTabComplete src/Dodge/Terminal.hs 241;" f doTestDrawing src/Dodge/Render.hs 40;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f @@ -3429,14 +3430,14 @@ drawAllShadows src/Dodge/Shadows.hs 5;" f drawAnySelectionBox src/Dodge/Render/Picture.hs 132;" f drawArrowDown src/Dodge/Render/Picture.hs 225;" f drawBaseMachine src/Dodge/Machine/Draw.hs 70;" f -drawBeeCrit src/Dodge/Creature/Picture.hs 124;" f +drawBeeCrit src/Dodge/Creature/Picture.hs 117;" f drawBlip src/Dodge/RadarBlip.hs 16;" f drawBlock src/Dodge/Render/ShapePicture.hs 81;" f drawBoundingBox src/Dodge/Debug/Picture.hs 368;" f drawBullet src/Dodge/Render/ShapePicture.hs 156;" f drawButton src/Dodge/Button/Draw.hs 11;" f drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f -drawChaseCrit src/Dodge/Creature/Picture.hs 148;" f +drawChaseCrit src/Dodge/Creature/Picture.hs 141;" f drawCircCollisionTest src/Dodge/Debug/Picture.hs 118;" f drawCliff src/Dodge/Render/ShapePicture.hs 87;" f drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f @@ -3447,8 +3448,8 @@ drawCoord src/Dodge/Debug/Picture.hs 396;" f drawCountMod src/Render.hs 231;" f drawCrInfo src/Dodge/Debug.hs 230;" f drawCrInfo' src/Dodge/Debug.hs 225;" f -drawCrabCrit src/Dodge/Creature/Picture.hs 140;" f -drawCreature src/Dodge/Creature/Picture.hs 37;" f +drawCrabCrit src/Dodge/Creature/Picture.hs 133;" f +drawCreature src/Dodge/Creature/Picture.hs 38;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 199;" f drawCreatureRad src/Dodge/Debug.hs 314;" f drawCross src/Dodge/Render/Label.hs 25;" f @@ -3467,7 +3468,7 @@ drawDragSelecting src/Dodge/Render/HUD.hs 162;" f drawDumbSwitch src/Dodge/Button/Draw.hs 31;" f drawEmptySet src/Dodge/Render/Picture.hs 153;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 7;" f -drawEquipment src/Dodge/Creature/Picture.hs 402;" f +drawEquipment src/Dodge/Creature/Picture.hs 395;" f drawExamineInventory src/Dodge/Render/HUD.hs 199;" f drawExplosiveBall src/Dodge/EnergyBall/Draw.hs 15;" f drawFarWallDetect src/Dodge/Debug/Picture.hs 271;" f @@ -3477,8 +3478,8 @@ drawForceField src/Dodge/Wall/Draw.hs 15;" f drawGapPlus src/Dodge/Render/Picture.hs 284;" f drawGib src/Dodge/Prop/Draw.hs 31;" f drawHUD src/Dodge/Render/HUD.hs 53;" f -drawHive src/Dodge/Creature/Picture.hs 121;" f -drawHoverCrit src/Dodge/Creature/Picture.hs 111;" f +drawHive src/Dodge/Creature/Picture.hs 114;" f +drawHoverCrit src/Dodge/Creature/Picture.hs 104;" f drawInputMenu src/Dodge/Render/MenuScreen.hs 33;" f drawInspectWall src/Dodge/Debug/Picture.hs 256;" f drawInspectWalls src/Dodge/Debug/Picture.hs 244;" f @@ -3531,8 +3532,8 @@ drawShaderLay src/Render.hs 218;" f drawShadowsByImportance src/Dodge/Shadows.hs 8;" f drawShell src/Dodge/Projectile/Draw.hs 22;" f drawShockwave src/Dodge/Shockwave/Draw.hs 6;" f -drawSlimeCrit src/Dodge/Creature/Picture.hs 59;" f -drawSlinkCrit src/Dodge/Creature/Picture.hs 99;" f +drawSlimeCrit src/Dodge/Creature/Picture.hs 60;" f +drawSlinkCrit src/Dodge/Creature/Picture.hs 92;" f drawSpark src/Dodge/Spark/Draw.hs 7;" f drawStaticBall src/Dodge/EnergyBall/Draw.hs 28;" f drawSubInventory src/Dodge/Render/HUD.hs 173;" f @@ -3651,7 +3652,7 @@ facesToVF src/Polyhedra/Geodesic.hs 70;" f farWallDistDirection src/Dodge/Update/Camera.hs 245;" f fdiv src/ShortShow.hs 41;" f feedSlime src/Dodge/Update.hs 1082;" f -feet src/Dodge/Creature/Picture.hs 219;" f +feet src/Dodge/Creature/Picture.hs 212;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f @@ -3741,7 +3742,7 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 170;" f gameplayMenu src/Dodge/Menu.hs 152;" f gameplayMenuOptions src/Dodge/Menu.hs 155;" f -gasEffect src/Dodge/Update.hs 914;" f +gasEffect src/Dodge/Update.hs 915;" f gasType src/Dodge/HeldUse.hs 1144;" f gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f @@ -3915,7 +3916,7 @@ iShape src/Dodge/Placement/Instance/LightSource.hs 58;" f icosahedronPoints src/Polyhedra/Geodesic.hs 12;" f icosohedronFaces src/Polyhedra/Geodesic.hs 19;" f inLink src/Dodge/RoomLink.hs 128;" f -inSegArea src/Geometry/Intersect.hs 326;" f +inSegArea src/Geometry/Intersect.hs 333;" f inSimplePoly src/Geometry/Polygon.hs 98;" f inTextInputFocus src/Dodge/InputFocus.hs 8;" f incidenceToFunction src/Dodge/Graph.hs 26;" f @@ -3948,28 +3949,29 @@ insertWithNewKeys src/IntMapHelp.hs 71;" f intAnno src/Dodge/Floor.hs 110;" f interactWithCloseObj src/Dodge/SelectedClose.hs 9;" f interpWith src/Dodge/Creature/Boid.hs 13;" f -intersectCircLine src/Geometry/Intersect.hs 361;" f -intersectCircLineAlong src/Geometry/Intersect.hs 352;" f -intersectCircSeg src/Geometry/Intersect.hs 331;" f -intersectCircSegFirst src/Geometry/Intersect.hs 402;" f -intersectCircSegTest src/Geometry/Intersect.hs 394;" f -intersectCylSeg src/Geometry/Intersect.hs 370;" f -intersectLineLine src/Geometry/Intersect.hs 19;" f -intersectLinePlaneAlong src/Geometry/Intersect.hs 28;" f -intersectLinePoly src/Geometry/Intersect.hs 269;" f +intersectCircLine src/Geometry/Intersect.hs 368;" f +intersectCircLineAlong src/Geometry/Intersect.hs 359;" f +intersectCircSeg src/Geometry/Intersect.hs 338;" f +intersectCircSegFirst src/Geometry/Intersect.hs 409;" f +intersectCircSegTest src/Geometry/Intersect.hs 401;" f +intersectCylSeg src/Geometry/Intersect.hs 377;" f +intersectLineLine src/Geometry/Intersect.hs 20;" f +intersectLinePlaneAlong src/Geometry/Intersect.hs 29;" f +intersectLinePoly src/Geometry/Intersect.hs 270;" f intersectLinefromScreen src/Dodge/Debug/Picture.hs 96;" f -intersectSegBezquad src/Geometry/Intersect.hs 256;" f -intersectSegLine src/Geometry/Intersect.hs 111;" f -intersectSegPlane src/Geometry/Intersect.hs 35;" f -intersectSegPolyFirst src/Geometry/Intersect.hs 263;" f -intersectSegRay src/Geometry/Intersect.hs 93;" f -intersectSegSeg src/Geometry/Intersect.hs 72;" f -intersectSegSegErrorTest src/Geometry/Intersect.hs 57;" f -intersectSegSegFullTest src/Geometry/Intersect.hs 125;" f -intersectSegSegPreTest src/Geometry/Intersect.hs 156;" f -intersectSegSegTest src/Geometry/Intersect.hs 145;" f -intersectSegSurface src/Geometry/Intersect.hs 41;" f -intersectSegsSeg src/Geometry/Intersect.hs 252;" f +intersectRayPoly src/Geometry/Intersect.hs 276;" f +intersectSegBezquad src/Geometry/Intersect.hs 257;" f +intersectSegLine src/Geometry/Intersect.hs 112;" f +intersectSegPlane src/Geometry/Intersect.hs 36;" f +intersectSegPolyFirst src/Geometry/Intersect.hs 264;" f +intersectSegRay src/Geometry/Intersect.hs 94;" f +intersectSegSeg src/Geometry/Intersect.hs 73;" f +intersectSegSegErrorTest src/Geometry/Intersect.hs 58;" f +intersectSegSegFullTest src/Geometry/Intersect.hs 126;" f +intersectSegSegPreTest src/Geometry/Intersect.hs 157;" f +intersectSegSegTest src/Geometry/Intersect.hs 146;" f +intersectSegSurface src/Geometry/Intersect.hs 42;" f +intersectSegsSeg src/Geometry/Intersect.hs 253;" f intervalList src/Geometry.hs 312;" f interweave src/Justify.hs 17;" f introScan src/Dodge/Item/Scope.hs 62;" f @@ -4018,7 +4020,7 @@ isLHS src/Geometry/LHS.hs 12;" f isLeftOf src/Geometry.hs 199;" f isLeftOfA src/Geometry.hs 193;" f isMidEdgeLink src/Dodge/RoomLink.hs 55;" f -isNHS src/Geometry/Intersect.hs 54;" f +isNHS src/Geometry/Intersect.hs 55;" f isNothing' src/MaybeHelp.hs 31;" f isOnSeg src/Geometry.hs 237;" f isOutLnk src/Dodge/PlacementSpot.hs 168;" f @@ -4112,7 +4114,7 @@ lConnectCol src/Dodge/Render/Connectors.hs 46;" f lConnectMulti src/Dodge/Render/Connectors.hs 51;" f lShape src/Dodge/Placement/Instance/LightSource.hs 61;" f lamp src/Dodge/Creature/Lamp.hs 18;" f -lampCrSPic src/Dodge/Creature/Picture.hs 411;" f +lampCrSPic src/Dodge/Creature/Picture.hs 404;" f lasCenRunClose' src/Dodge/Room/LasTurret.hs 308;" f lasCenRunClose1 src/Dodge/Room/LasTurret.hs 397;" f lasCenRunClose2 src/Dodge/Room/LasTurret.hs 470;" f @@ -4155,7 +4157,7 @@ lightSensInsideDoor src/Dodge/Room/LasTurret.hs 65;" f lightSensor src/Dodge/Placement/Instance/Sensor.hs 34;" f lightsToRender src/Dodge/Render/Lights.hs 12;" f lightx4 src/Color.hs 155;" f -linGrad src/Geometry/Intersect.hs 240;" f +linGrad src/Geometry/Intersect.hs 241;" f line src/Picture/Base.hs 230;" f lineCol src/Picture/Base.hs 234;" f lineGeom src/Dodge/Base.hs 32;" f @@ -4239,7 +4241,7 @@ makeButton src/Dodge/LevelGen/Switch.hs 16;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f makeColorTermLine src/Dodge/Terminal.hs 124;" f makeColorTermPara src/Dodge/Terminal.hs 121;" f -makeCorpse src/Dodge/Creature/Picture.hs 285;" f +makeCorpse src/Dodge/Creature/Picture.hs 278;" f makeCrGibs src/Dodge/Prop/Gib.hs 19;" f makeDebris src/Dodge/Block/Debris.hs 75;" f makeDebrisDirected src/Dodge/Block/Debris.hs 101;" f @@ -4429,7 +4431,7 @@ muzzleWallCheck src/Dodge/Update.hs 351;" f mvButton src/Dodge/Placement/PlaceSpot.hs 170;" f mvCr src/Dodge/Placement/PlaceSpot.hs 173;" f mvFS src/Dodge/Placement/PlaceSpot.hs 176;" f -mvGust src/Dodge/Update.hs 905;" f +mvGust src/Dodge/Update.hs 906;" f mvLS src/Dodge/Placement/PlaceSpot.hs 215;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f @@ -4437,8 +4439,8 @@ mvPointToward src/Dodge/Base.hs 136;" f mvPointTowardAtSpeed src/Dodge/Base.hs 105;" f mvProp src/Dodge/Placement/PlaceSpot.hs 167;" f mvTurnToward src/Dodge/Creature/Impulse/Movement.hs 125;" f -myIntersectLineLine src/Geometry/Intersect.hs 197;" f -myIntersectSegSeg src/Geometry/Intersect.hs 175;" f +myIntersectLineLine src/Geometry/Intersect.hs 198;" f +myIntersectSegSeg src/Geometry/Intersect.hs 176;" f nRays src/Geometry.hs 182;" f nRaysRad src/Geometry.hs 186;" f nearCollinear src/Dodge/LevelGen/StaticWalls/Deprecated.hs 19;" f @@ -4488,7 +4490,7 @@ oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 684;" f onEquipWristShield src/Dodge/Euse.hs 89;" f onRemoveWristShield src/Dodge/Euse.hs 79;" f oneH src/Dodge/Creature/Test.hs 91;" f -oneSmooth src/Dodge/Creature/Picture.hs 216;" f +oneSmooth src/Dodge/Creature/Picture.hs 209;" f openConsole src/Dodge/Update.hs 140;" f optionMenu src/Dodge/Menu.hs 110;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f @@ -4506,7 +4508,7 @@ orderPolygonAround src/Geometry/Polygon.hs 116;" f orientAttachment src/Dodge/Item/Orientation.hs 80;" f orientByParentChSF src/Dodge/Item/Orientation.hs 35;" f orientChild src/Dodge/Item/Orientation.hs 19;" f -orthogonalPointOnSeg src/Geometry/Intersect.hs 319;" f +orthogonalPointOnSeg src/Geometry/Intersect.hs 326;" f outLink src/Dodge/RoomLink.hs 120;" f outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f outwardIntegers src/Dodge/Base.hs 181;" f @@ -4650,6 +4652,7 @@ polyChasmC src/Dodge/Room/Tutorial.hs 407;" f polyCirc src/Shape.hs 48;" f polyCircx src/Shape.hs 53;" f polyCornerDist src/Geometry/Polygon.hs 69;" f +polyInPoly src/Geometry/Polygon.hs 237;" f polyOrthDist src/Geometry/Polygon.hs 59;" f polyPointsIntersect src/Geometry/ConvexPoly.hs 77;" f polyPointsIntersectWitness src/Geometry/ConvexPoly.hs 85;" f @@ -4766,7 +4769,7 @@ rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f rToOnward src/Dodge/Cleat.hs 21;" f radToCompass src/Dodge/Inventory/SelectionList.hs 111;" f radToDeg src/Geometry/Vector.hs 131;" f -radiusSpring src/Dodge/Update.hs 987;" f +radiusSpring src/Dodge/Update.hs 988;" f randBlockBreakWeapon src/Dodge/Item/Random.hs 7;" f randC1 src/Dodge/Placement/Instance/Creature.hs 8;" f randDirPS src/Dodge/PlacementSpot.hs 58;" f @@ -4788,7 +4791,7 @@ randPeakedParam src/RandomHelp.hs 149;" f randProb src/RandomHelp.hs 87;" f randSpark src/Dodge/Spark.hs 70;" f randSparkExtraVel src/Dodge/Spark.hs 93;" f -randWallReflect src/Dodge/Update.hs 756;" f +randWallReflect src/Dodge/Update.hs 757;" f randomChallenges src/Dodge/Room/Start.hs 64;" f randomCompass src/Dodge/Layout.hs 61;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 248;" f @@ -4803,7 +4806,7 @@ randomTank src/Dodge/Room/Tanks.hs 20;" f randomTreeStructure src/Dodge/Layout/Generate.hs 19;" f randsOnCirc src/RandomHelp.hs 146;" f randsSpread src/RandomHelp.hs 139;" f -ratIntersectLineLine src/Geometry/Intersect.hs 215;" f +ratIntersectLineLine src/Geometry/Intersect.hs 216;" f rdToVec2s src/Dodge/Render.hs 431;" f readSaveSlot src/Dodge/Save.hs 45;" f recComFindMax src/Dodge/Terminal.hs 174;" f @@ -4943,7 +4946,7 @@ rotateToZ src/Quaternion.hs 38;" f rotateV src/Geometry/Vector.hs 114;" f rotateVAround src/Geometry/Vector.hs 121;" f rotateXY src/Polyhedra.hs 28;" f -roundPoint2 src/Geometry/Intersect.hs 236;" f +roundPoint2 src/Geometry/Intersect.hs 237;" f roundTank src/Dodge/Placement/Instance/Tank.hs 26;" f roundTankCross src/Dodge/Placement/Instance/Tank.hs 32;" f rpIsOffGrid src/Dodge/PlacementSpot.hs 83;" f @@ -4977,11 +4980,11 @@ sawtoothFailS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 852;" f scToTS src/Dodge/Event/Input.hs 34;" f scale src/Picture/Base.hs 141;" f scale3 src/Picture/Base.hs 137;" f -scaleAlong src/Dodge/Creature/Picture.hs 74;" f +scaleAlong src/Dodge/Creature/Picture.hs 67;" f scaleMat src/MatrixHelper.hs 71;" f scaleMatrix src/MatrixHelper.hs 68;" f scaleSH src/Shape.hs 271;" f -scalp src/Dodge/Creature/Picture.hs 378;" f +scalp src/Dodge/Creature/Picture.hs 371;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f scorchSPic src/Dodge/Creature/Update.hs 481;" f @@ -5059,7 +5062,7 @@ setSelWhileDragging src/Dodge/Update/Input/InGame.hs 360;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 93;" f setShaderSource src/Shader/Compile.hs 121;" f setShadowLimits src/Dodge/Shadows.hs 11;" f -setSlimeDir src/Dodge/Creature/Update.hs 283;" f +setSlimeDir src/Dodge/Creature/Update.hs 288;" f setSoundVolume src/Sound.hs 159;" f setTile src/Dodge/Layout.hs 78;" f setTiles src/Dodge/Layout.hs 68;" f @@ -5153,7 +5156,7 @@ shufflePair src/RandomHelp.hs 166;" f shuffleRoomPos src/Dodge/Layout.hs 103;" f shuffleTail src/RandomHelp.hs 78;" f sigmoid src/Dodge/Base.hs 151;" f -simpleCrSprings src/Dodge/Update.hs 992;" f +simpleCrSprings src/Dodge/Update.hs 993;" f simpleTermMessage src/Dodge/Terminal.hs 275;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 816;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 854;" f @@ -5181,11 +5184,12 @@ slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 718;" f slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 676;" f slideWindow src/ListHelp.hs 81;" f slimeCrit src/Dodge/Creature/ChaseCrit.hs 68;" f -slimeCritUpdate src/Dodge/Creature/Update.hs 252;" f +slimeCritUpdate src/Dodge/Creature/Update.hs 253;" f slimeEatSound src/Dodge/Update.hs 1116;" f slimeFood src/Dodge/Update.hs 1074;" f +slimeOutline src/Dodge/Creature/Slime.hs 11;" f slimeSuck src/Dodge/Update.hs 1058;" f -slimeToRad src/Dodge/Data/Creature/Misc.hs 108;" f +slimeToRad src/Dodge/Data/Creature/Misc.hs 109;" f slinkCrit src/Dodge/Creature/ChaseCrit.hs 56;" f slinkCritUpdate src/Dodge/Creature/Update.hs 355;" f slowCrush90 src/Dodge/Room/LongDoor.hs 263;" f @@ -5247,15 +5251,15 @@ spawnAt src/Dodge/SpawnAt.hs 14;" f spawnerCrit src/Dodge/Creature.hs 47;" f spawnerRoom src/Dodge/Room/Room.hs 390;" f speedLegs src/Dodge/Item/Equipment.hs 74;" f -spiderJoint src/Dodge/Creature/Picture.hs 267;" f +spiderJoint src/Dodge/Creature/Picture.hs 260;" f splashMenu src/Dodge/Menu.hs 31;" f splashMenuOptions src/Dodge/Menu.hs 36;" f splashScreen src/Dodge/Initialisation.hs 10;" f splitBezierquad src/Geometry/Bezier.hs 15;" f splitExtra src/Justify.hs 21;" f splitLookupTrie src/SimpleTrie.hs 39;" f -splitSlimeCrit src/Dodge/Creature/Update.hs 317;" f -splitSlimeCrit' src/Dodge/Creature/Update.hs 307;" f +splitSlimeCrit src/Dodge/Creature/Update.hs 322;" f +splitSlimeCrit' src/Dodge/Creature/Update.hs 312;" f splitTrunk src/TreeHelp.hs 181;" f splitTrunkAt src/TreeHelp.hs 169;" f spreadAroundCenter src/Dodge/Base.hs 173;" f @@ -5387,7 +5391,7 @@ testEvent src/Dodge/Event/Test.hs 11;" f testInventory src/Dodge/Creature.hs 299;" f testPic src/Dodge/Render/ShapePicture.hs 57;" f testSPic src/Dodge/Render/ShapePicture.hs 54;" f -testStringInit src/Dodge/TestString.hs 61;" f +testStringInit src/Dodge/TestString.hs 60;" f text src/Picture/Base.hs 185;" f textGrad src/Picture/Text.hs 5;" f textInputBlurb src/Dodge/Terminal.hs 43;" f @@ -5473,7 +5477,7 @@ topTestPart src/Dodge/TestString.hs 122;" f torchShape src/Dodge/Item/Draw/SPic.hs 278;" f torqueAmount src/Dodge/HeldUse.hs 606;" f torqueCr src/Dodge/WorldEffect.hs 85;" f -torso src/Dodge/Creature/Picture.hs 383;" f +torso src/Dodge/Creature/Picture.hs 376;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 851;" f @@ -5579,7 +5583,7 @@ unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 133;" f unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 139;" f unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 121;" f unusedSpotNearInLink src/Dodge/PlacementSpot.hs 203;" f -updateAggroBee src/Dodge/Creature/Update.hs 128;" f +updateAggroBee src/Dodge/Creature/Update.hs 129;" f updateAimPos src/Dodge/Update.hs 400;" f updateAllNodes src/TreeHelp.hs 88;" f updateArc src/Dodge/Tesla.hs 44;" f @@ -5587,58 +5591,58 @@ updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 488;" f updateBarrel src/Dodge/Barreloid.hs 43;" f updateBarreloid src/Dodge/Barreloid.hs 16;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 30;" f -updateBeeCrit src/Dodge/Creature/Update.hs 114;" f -updateBeeFromPheremones src/Dodge/Creature/Update.hs 107;" f -updateBeePheremone src/Dodge/Update.hs 785;" f +updateBeeCrit src/Dodge/Creature/Update.hs 115;" f +updateBeeFromPheremones src/Dodge/Creature/Update.hs 108;" f +updateBeePheremone src/Dodge/Update.hs 786;" f updateBounds src/Dodge/Update/Camera.hs 262;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f -updateBullets src/Dodge/Update.hs 671;" f -updateCalmBee src/Dodge/Creature/Update.hs 169;" f +updateBullets src/Dodge/Update.hs 672;" f +updateCalmBee src/Dodge/Creature/Update.hs 170;" f updateCamera src/Dodge/Update/Camera.hs 33;" f updateCarriage src/Dodge/Creature/State/WalkCycle.hs 22;" f updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 27;" f updateChaseCrit src/Dodge/Humanoid.hs 11;" f updateCloseObjects src/Dodge/Inventory.hs 126;" f -updateCloud src/Dodge/Update.hs 918;" f -updateClouds src/Dodge/Update.hs 782;" f +updateCloud src/Dodge/Update.hs 919;" f +updateClouds src/Dodge/Update.hs 783;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f updateCreature src/Dodge/Creature/Update.hs 47;" f -updateCreatureGroups src/Dodge/Update.hs 643;" f -updateCreatureSoundPositions src/Dodge/Update.hs 622;" f +updateCreatureGroups src/Dodge/Update.hs 644;" f +updateCreatureSoundPositions src/Dodge/Update.hs 623;" f updateCreatureStride src/Dodge/Update.hs 379;" f updateCreatureStrides src/Dodge/Update.hs 376;" f -updateDebris src/Dodge/Update.hs 685;" f +updateDebris src/Dodge/Update.hs 686;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f updateDebugMessageOffset src/Dodge/Update.hs 104;" f updateDelayedEvents src/Dodge/Update.hs 1123;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 8;" f -updateDistortions src/Dodge/Update.hs 664;" f +updateDistortions src/Dodge/Update.hs 665;" f updateDoor src/Dodge/Door.hs 22;" f updateDoors src/Dodge/Update.hs 405;" f -updateDust src/Dodge/Update.hs 966;" f -updateDusts src/Dodge/Update.hs 793;" f +updateDust src/Dodge/Update.hs 967;" f +updateDusts src/Dodge/Update.hs 794;" f updateEdge src/Dodge/Path.hs 45;" f updateEdgeWallObs src/Dodge/Update/WallDamage.hs 39;" f updateEdgesWall src/Dodge/Update/WallDamage.hs 23;" f updateEdgesWall' src/Dodge/Update/WallDamage.hs 36;" f updateEnergyBall src/Dodge/EnergyBall.hs 32;" f -updateEnergyBalls src/Dodge/Update.hs 773;" f +updateEnergyBalls src/Dodge/Update.hs 774;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 515;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFlame src/Dodge/Flame.hs 19;" f -updateFlames src/Dodge/Update.hs 770;" f +updateFlames src/Dodge/Update.hs 771;" f updateFloatingCamera src/Dodge/Update/Camera.hs 38;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 372;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 368;" f -updateGas src/Dodge/Update.hs 940;" f -updateGusts src/Dodge/Update.hs 902;" f -updateHiveCrit src/Dodge/Creature/Update.hs 82;" f +updateGas src/Dodge/Update.hs 941;" f +updateGusts src/Dodge/Update.hs 903;" f +updateHiveCrit src/Dodge/Creature/Update.hs 83;" f updateHoverCrit src/Dodge/Humanoid.hs 39;" f -updateIMl src/Dodge/Update.hs 637;" f -updateIMl' src/Dodge/Update.hs 640;" f +updateIMl src/Dodge/Update.hs 638;" f +updateIMl' src/Dodge/Update.hs 641;" f updateInGameCamera src/Dodge/Update/Camera.hs 86;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 438;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f @@ -5654,7 +5658,7 @@ updateLaser src/Dodge/Laser/Update.hs 12;" f updateLasers src/Dodge/Update.hs 516;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 179;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLivingCreature src/Dodge/Creature/Update.hs 61;" f +updateLivingCreature src/Dodge/Creature/Update.hs 62;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 451;" f updateMachine src/Dodge/Machine/Update.hs 24;" f updateMagnets src/Dodge/Update.hs 408;" f @@ -5664,22 +5668,22 @@ updateMouseContextGame src/Dodge/Update.hs 426;" f updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 100;" f updateMouseInGame src/Dodge/Update/Input/InGame.hs 90;" f updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 201;" f -updateObjCatMaybes src/Dodge/Update.hs 655;" f -updateObjMapMaybe src/Dodge/Update.hs 648;" f +updateObjCatMaybes src/Dodge/Update.hs 656;" f +updateObjMapMaybe src/Dodge/Update.hs 649;" f updatePastWorlds src/Dodge/Update.hs 505;" f updatePlasmaBall src/Dodge/Update.hs 530;" f -updatePlasmaBalls src/Dodge/Update.hs 678;" f +updatePlasmaBalls src/Dodge/Update.hs 679;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f updatePulse src/Dodge/Creature/Update.hs 496;" f updatePulseBall src/Dodge/Update.hs 550;" f -updatePulseLaser src/Dodge/Update.hs 725;" f +updatePulseLaser src/Dodge/Update.hs 726;" f updatePulseLasers src/Dodge/Update.hs 525;" f updateRBList src/Dodge/Inventory/RBList.hs 22;" f updateRadarBlip src/Dodge/RadarBlip.hs 11;" f -updateRadarBlips src/Dodge/Update.hs 667;" f +updateRadarBlips src/Dodge/Update.hs 668;" f updateRadarSweep src/Dodge/RadarSweep.hs 40;" f -updateRadarSweeps src/Dodge/Update.hs 776;" f +updateRadarSweeps src/Dodge/Update.hs 777;" f updateRandNode src/TreeHelp.hs 111;" f updateRenderSplit appDodge/Main.hs 104;" f updateRightParentSF src/Dodge/Item/Grammar.hs 190;" f @@ -5689,17 +5693,17 @@ updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f updateSection src/Dodge/DisplayInventory.hs 262;" f updateSectionsPositioning src/Dodge/DisplayInventory.hs 241;" f updateShockwave src/Dodge/Shockwave/Update.hs 8;" f -updateShockwaves src/Dodge/Update.hs 767;" f +updateShockwaves src/Dodge/Update.hs 768;" f updateSingleNodes src/TreeHelp.hs 100;" f updateSound src/Sound.hs 73;" f updateSounds src/Sound.hs 68;" f updateSpark src/Dodge/Spark.hs 20;" f -updateSparks src/Dodge/Update.hs 779;" f +updateSparks src/Dodge/Update.hs 780;" f updateTerminal src/Dodge/Update.hs 588;" f -updateTeslaArc src/Dodge/Update.hs 695;" f -updateTeslaArcs src/Dodge/Update.hs 692;" f +updateTeslaArc src/Dodge/Update.hs 696;" f +updateTeslaArcs src/Dodge/Update.hs 693;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 764;" f +updateTractorBeams src/Dodge/Update.hs 765;" f updateTurret src/Dodge/Machine/Update.hs 55;" f updateUniverse src/Dodge/Update.hs 83;" f updateUniverseFirst src/Dodge/Update.hs 94;" f @@ -5713,7 +5717,7 @@ updateWheelEvent src/Dodge/Update/Scroll.hs 21;" f updateWheelEvents src/Dodge/Update.hs 495;" f updateWorldEventFlag src/Dodge/Update.hs 129;" f updateWorldEventFlags src/Dodge/Update.hs 117;" f -upperBody src/Dodge/Creature/Picture.hs 398;" f +upperBody src/Dodge/Creature/Picture.hs 391;" f upperBox src/Shape.hs 149;" f upperBoxHalf src/Shape.hs 224;" f upperBoxMT src/Shape.hs 140;" f @@ -5892,7 +5896,6 @@ zeroOneSmooth src/Dodge/Creature/HandPos.hs 61;" f zeroZ src/Geometry/Vector.hs 9;" f zipArcs src/Dodge/Tesla.hs 52;" f zipCount src/Dodge/Tree/Shift.hs 142;" f -zonableCreature src/Dodge/Update.hs 616;" f zoneCloud src/Dodge/Zoning/Cloud.hs 33;" f zoneClouds src/Dodge/Update.hs 577;" f zoneCreature src/Dodge/Zoning/Creature.hs 56;" f