From b76148ae2ac1137606cf057fc2cf2e6417994e02 Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 6 May 2026 15:40:31 +0100 Subject: [PATCH] Track slime amount using ints --- src/Dodge/Base/Collide.hs | 2 +- src/Dodge/Creature/ChaseCrit.hs | 8 +- src/Dodge/Creature/Mass.hs | 4 +- src/Dodge/Creature/Picture.hs | 4 +- src/Dodge/Creature/Radius.hs | 4 +- src/Dodge/Creature/State/WalkCycle.hs | 2 +- src/Dodge/Creature/Update.hs | 63 +++++--- src/Dodge/Data/Creature/Misc.hs | 9 +- src/Dodge/Room/Tutorial.hs | 9 +- src/Dodge/TestString.hs | 12 +- src/Dodge/Update.hs | 18 ++- tags | 215 +++++++++++++------------- 12 files changed, 203 insertions(+), 147 deletions(-) diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index 449a4c373..799efdc0f 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -193,7 +193,7 @@ crHeight cr = case cr ^. crHP of Avatar {} -> 25 CrabCrit {} -> 25 SlinkCrit {} -> 25 - SlimeCrit {_slimeRad = r} -> min 15 r + SlimeCrit {_slimeSlime = r} -> min 15 $ slimeToRad r BeeCrit {} -> 10 HiveCrit {} -> 25 BarrelCrit{} -> 20 diff --git a/src/Dodge/Creature/ChaseCrit.hs b/src/Dodge/Creature/ChaseCrit.hs index 3059d6d92..e8e8c0863 100644 --- a/src/Dodge/Creature/ChaseCrit.hs +++ b/src/Dodge/Creature/ChaseCrit.hs @@ -69,13 +69,13 @@ slimeCrit :: Creature slimeCrit = defaultCreature & crName .~ "slimeCrit" & crHP .~ HP 1000 - & crType .~ SlimeCrit r 0 0 (V2 r 0) False 0 + & crType .~ SlimeCrit r 0 0 (V2 (slimeToRad r) 0) False 0 & crFaction .~ ColorFaction (light green) & crPerception . cpVision . viFOV .~ FloatFOV pi & crActionPlan .~ SlimeIntelligence & crStance . carriage .~ Crawling where - r = 50 + r = 250000 hoverCrit :: Creature hoverCrit = @@ -91,7 +91,7 @@ beeCrit = defaultCreature & crName .~ "beeCrit" & crHP .~ HP 100 - & crType .~ BeeCrit 0 Nothing 0 0 0 Nothing + & crType .~ BeeCrit 0 Nothing 0 0 0 Nothing 1 & crFaction .~ ColorFaction yellow & crStance . carriage .~ Flying 15 @@ -100,6 +100,6 @@ hiveCrit = defaultCreature & crName .~ "hiveCrit" & crHP .~ HP 100000 - & crType .~ HiveCrit mempty 0 + & crType .~ HiveCrit mempty 0 400 & crStance . carriage .~ Rooted & crFaction .~ ColorFaction yellow diff --git a/src/Dodge/Creature/Mass.hs b/src/Dodge/Creature/Mass.hs index 9fe3c83cf..6b077327f 100644 --- a/src/Dodge/Creature/Mass.hs +++ b/src/Dodge/Creature/Mass.hs @@ -13,6 +13,6 @@ crMass = \case BarrelCrit{} -> 10 SlinkCrit{} -> 100 LampCrit {} -> 3 - SlimeCrit {_slimeRad = r} -> r * r / 10 - BeeCrit {_beeSlime = x} -> 3 + x + SlimeCrit {_slimeSlime = r} -> fromIntegral r / 1000 + BeeCrit {_beeSlime = x} -> 3 + fromIntegral x / 100 HiveCrit {} -> 100 diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index b94b4c8a2..a66c9793f 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -64,7 +64,7 @@ drawSlimeCrit cr = colorSH green & each %~ rotateV (-cr ^. crDir) & each %~ (((r-cr^?!crType.slimeRadWobble)/r) *^) where - r = cr ^?! crType . slimeRad + r = cr ^?! crType . slimeSlime . to slimeToRad p = cr ^?! crType . slimeCompression d = normalize p s = norm p / r @@ -131,7 +131,7 @@ drawBeeCrit cr = colorSH col col | cr ^?! crType . beeAggro > 0 = red | otherwise = yellow f | Mounted {} <- cr ^. crStance . carriage - = each . sfVs . each . _xy %~ scaleAlong (V2 0 1) (1 + g ( modTo 1 (cr ^?! crType . beeSlime))) + = each . sfVs . each . _xy %~ scaleAlong (V2 0 1) (1 + g ( modTo 1 (cr ^?! crType . beeSlime . to ((/100) . fromIntegral)))) | otherwise = id g x | x > 0.5 = 1 - x | otherwise = x diff --git a/src/Dodge/Creature/Radius.hs b/src/Dodge/Creature/Radius.hs index ac278d586..cd78e651c 100644 --- a/src/Dodge/Creature/Radius.hs +++ b/src/Dodge/Creature/Radius.hs @@ -11,11 +11,11 @@ crRad = \case ChaseCrit {} -> 10 CrabCrit {} -> 10 HoverCrit {} -> 8 - BeeCrit {_beeSlime = x} -> sqrt $ 2^(2::Int) + x + BeeCrit {_beeSlime = x} -> sqrt $ 4 + (fromIntegral x / 100) SwarmCrit -> 2 AutoCrit -> 10 BarrelCrit{} -> 10 LampCrit {} -> 3 SlinkCrit {} -> 10 HiveCrit {} -> 20 - SlimeCrit {_slimeRad = r,_slimeRadWobble = x} -> r - x + SlimeCrit {_slimeSlime = r,_slimeRadWobble = x} -> slimeToRad r - x diff --git a/src/Dodge/Creature/State/WalkCycle.hs b/src/Dodge/Creature/State/WalkCycle.hs index 83844c75d..212dca266 100644 --- a/src/Dodge/Creature/State/WalkCycle.hs +++ b/src/Dodge/Creature/State/WalkCycle.hs @@ -57,7 +57,7 @@ updateCarriage' cid cr w = \case mcr <- w ^? cWorld . lWorld . creatures . ix mid mp <- mcr ^? crPos d <- mcr ^? crType . slimeCompression - r <- mcr ^? crType . slimeRad + r <- mcr ^? crType . slimeSlime . to slimeToRad return $ w & tocr . crPos .~ mp + (p & _xy %~ compressionScale ((1/r) *^ d)) where tocr = cWorld . lWorld . creatures . ix cid diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index d37b56e2d..4c9462245 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -84,16 +84,20 @@ updateHiveCrit cr cid w | Just x <- cr ^? crType . hiveChildren . to IS.size , x < nbees , Just y <- cr ^? crType . hiveGestation - , y == 0 = w + , y == 0 + , Just z <- cr ^? crType . hiveSlime + , z >= 400 + = w & tocr . crType . hiveChildren %~ IS.insert nid & tocr . crType . hiveGestation .~ 50 & cWorld . lWorld . creatures . at nid ?~ ncr + & tocr . crType . hiveSlime -~ 400 | Just x <- cr ^? crType . hiveChildren . to IS.size , x < nbees = w & tocr . crType . hiveGestation %~ (max 0 . subtract 1) | otherwise = w where - nbees = 25 + nbees = 15 tocr = cWorld . lWorld . creatures . ix cid nid = IM.newKey $ w ^. cWorld . lWorld . creatures ncr = beeCrit & crPos .~ (cr ^. crPos + (0 & _xy +~ 25)) @@ -108,9 +112,18 @@ updateBeeFromPheremones cr cid w f bp = distance (cr ^. crPos . _xy) (bp ^. bpPos . _xy) < 20 updateBeeCrit :: Creature -> Int -> World -> World -updateBeeCrit cr - | cr ^?! crType . beeAggro > 0 = updateAggroBee cr - | otherwise = updateCalmBee cr +updateBeeCrit cr cid + | cr ^?! crType . beeAggro > 0 = updateAggroBee cr cid + | otherwise = beeLifespanCheck cr cid . updateCalmBee cr cid + +beeLifespanCheck :: Creature -> Int -> World -> World +beeLifespanCheck cr cid + | Just ls <- cr ^? crType . beeLifespan + , Just x <- cr ^? crType . beeSlime + , ls < 1 + , x < 5 + = cWorld . lWorld . creatures . ix cid . crHP . _HP -~ 1 + | otherwise = id updateAggroBee :: Creature -> Int -> World -> World updateAggroBee cr cid w @@ -158,15 +171,19 @@ updateCalmBee cr cid w | Just hcr <- gethive , distance (cr ^. crPos . _xy) (hcr ^. crPos . _xy) < 30 , Just x <- cr ^? crType . beeSlime - , x >= 0.5 = w & tocr . crType . beeSlime -~ 0.5 + , x >= 50 = w + & tocr . crType . beeSlime -~ 50 + & cWorld . lWorld . creatures . ix (hcr ^. crID) . crType . hiveSlime +~ 50 | Just x <- cr ^? crType . beeSlime - , x < 0.5 + , x < 50 , Just hcr <- gethive , distance (cr ^. crPos . _xy) (hcr ^. crPos . _xy) < 30 , Just ReturnToHive <- cr ^? crActionPlan . apStrategy = startsearch | Just ReturnToHive <- cr ^? crActionPlan . apStrategy = w | Just x <- cr ^? crType . beeSlime - , x >= 15 = starthivereturn + , x >= 1500 = starthivereturn + & randGen .~ gsa + & tocr . crType . beeLifespan %~ max 0 . subtract sa | Just mid <- cr ^? crStance . carriage . mountID , mountshakeoff mid = startsearch | Nothing <- cr ^? crActionPlan . apStrategy . harvestTarget @@ -177,10 +194,11 @@ updateCalmBee cr cid w | Just tid <- cr ^? crStance . carriage . mountID , Just SlimeCrit{} <- w ^? cWorld . lWorld . creatures . ix tid . crType = w & tocr . crType . beeSlime +~ sspeed - & cWorld . lWorld . creatures . ix tid . crType . slimeRad %~ (sqrt . subtract sspeed . (^(2::Int))) + -- & cWorld . lWorld . creatures . ix tid . crType . slimeRad %~ (sqrt . subtract sspeed . (^(2::Int))) + & cWorld . lWorld . creatures . ix tid . crType . slimeSlime -~ sspeed | Just (tcr,ti) <- gettarg , distance (cr ^. crPos . _xy) (tcr ^. crPos . _xy) < 0.8*crRad (tcr ^. crType) - , Just r <- tcr ^? crType . slimeRad + , Just r <- tcr ^? crType . slimeSlime . to slimeToRad , Just d <- tcr ^? crType . slimeCompression = w & tocr . crStance . carriage .~ Mounted ti (cr ^. crPos - tcr ^. crPos & _xy %~ compressionScale (vNormal ((1/r) *^d))) @@ -193,6 +211,7 @@ updateCalmBee cr cid w & tocr . crActionPlan . apStrategy . searchTimer %~ (max 0 . subtract 1) | otherwise = startsearch where + (sa,gsa) = runState (takeOne [0,1]) (w ^. randGen) starthivereturn = fromMaybe w $ do hcr <- gethive return $ w @@ -213,11 +232,12 @@ updateCalmBee cr cid w mcr <- w ^? cWorld . lWorld . creatures . ix mid SlimeCrit {_slimeSplitTimer = x} <- mcr ^? crType return $ x > 0 - sspeed = 0.05 + --sspeed = 0.05 + sspeed = 5 gettarg = do i <- cr ^? crActionPlan . apStrategy . harvestTarget tcr <- w ^? cWorld . lWorld . creatures . ix i - x <- tcr ^? crType . slimeRad + x <- tcr ^? crType . slimeSlime . to slimeToRad guard $ x > 12 return (tcr,i) gethive = do @@ -225,7 +245,7 @@ updateCalmBee cr cid w w ^? cWorld . lWorld . creatures . ix i tocr = cWorld . lWorld . creatures . ix cid istarget tcr = fromMaybe False $ do - r <- tcr ^? crType . slimeRad + r <- tcr ^? crType . slimeSlime . to slimeToRad return $ r > 12 slimeCritUpdate :: Int -> World -> World @@ -260,7 +280,7 @@ slimeCritUpdate cid w f' | norm p > 3*r/2 = const True | otherwise = id t = cr ^?! crType . slimeIsCompressing - r = cr ^?! crType . slimeRad + r = cr ^?! crType . slimeSlime . to slimeToRad p = cr ^?! crType . slimeCompression setSlimeDir :: Int -> Creature -> World -> State StdGen World @@ -281,7 +301,7 @@ setSlimeDir cid cr w = do tocr = cWorld . lWorld . creatures . ix cid -- tocr' i = cWorld . lWorld . creatures . at i cxy = cr ^. crPos . _xy - r = cr ^?! crType . slimeRad + r = cr ^?! crType . slimeSlime . to slimeToRad doSlimeRadChange :: Creature -> Creature @@ -314,18 +334,20 @@ splitSlimeCrit p v cr = do | isLHS p (p+v) cxy = normalize (vNormal v) | otherwise = - normalize (vNormal v) return (cr' & crPos . _xy .~ mp + (r1 + 0.51) *^ mvdir - & crType . slimeRad .~ r1 +-- & crType . slimeRad .~ r1 + & crType . slimeSlime .~ round (r1 ^ (2 :: Int) * 100) & crType . slimeCompression .~ rotateV (argV mvdir) (V2 r1 0) & crDir .~ argV mvdir ,cr' & crPos . _xy .~ mp - (r2 + 0.51) *^ mvdir - & crType . slimeRad .~ r2 +-- & crType . slimeRad .~ r2 + & crType . slimeSlime .~ round (r2^(2::Int) * 100) & crType . slimeCompression .~ rotateV (argV (-mvdir)) (V2 r2 0) & crDir .~ argV (-mvdir) & crType . slimeEngulfProgress .~ 0 ) where cxy = cr ^. crPos . _xy - r = cr ^?! crType . slimeRad + r = cr ^?! crType . slimeSlime . to slimeToRad cr' = cr & crDamage .~ [] & crType . slimeRadWobble .~ 0 & crType . slimeSplitTimer .~ 10 @@ -412,7 +434,10 @@ crDeathEffects cr w = case cr ^. crType of return $ w & cWorld . lWorld . creatures . ix hid . crType . hiveChildren %~ IS.delete (cr ^. crID) _ -> w where - beepheremone = cWorld . lWorld . beePheremones .:~ BPheremone (cr ^. crPos) (cr ^. crPos - cr ^. crOldPos) 200 + beepheremone + | Just x <- cr ^? crType . beeLifespan + , x < 1 = id + | otherwise = cWorld . lWorld . beePheremones .:~ BPheremone (cr ^. crPos) (cr ^. crPos - cr ^. crOldPos) 200 startDeathTimer :: Creature -> Creature startDeathTimer cr = cr & crDeathTimer ?~ case cr ^. crType of diff --git a/src/Dodge/Data/Creature/Misc.hs b/src/Dodge/Data/Creature/Misc.hs index 936b6dfa1..f67f19a16 100644 --- a/src/Dodge/Data/Creature/Misc.hs +++ b/src/Dodge/Data/Creature/Misc.hs @@ -78,7 +78,7 @@ data CreatureType , _slinkHeadPos :: Point3Q } | SlimeCrit - { _slimeRad :: Float + { _slimeSlime :: Int -- note multiplied by 100 , _slimeRadWobble :: Float , _slimeSplitTimer :: Int , _slimeCompression :: Point2 @@ -86,22 +86,27 @@ data CreatureType , _slimeEngulfProgress :: Float } | BeeCrit - { _beeSlime :: Float + { _beeSlime :: Int , _beeHive :: Maybe Int , _startStopMv :: Int , _beeAggro :: Int , _meleeCooldown :: Int , _beeRandomMovement :: Maybe FootForward + , _beeLifespan :: Int } | HiveCrit { _hiveChildren :: IS.IntSet , _hiveGestation :: Int + , _hiveSlime :: Int } | SwarmCrit | AutoCrit | BarrelCrit {_barrelType :: BarrelType} | LampCrit {_lampHeight :: Float, _lampColor :: Point3, _lampLSID :: Maybe Int} +slimeToRad :: Int -> Float +slimeToRad x = sqrt $ fromIntegral x * 0.01 + data AvatarPosture = AvPosture data CreatureShape diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 44c18d094..6d0e4e5f6 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -56,13 +56,16 @@ tutAnoTree :: State LayoutVars MTRS tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox - , corDoor - , chasmSpitTerminal +-- , corDoor +-- , chasmSpitTerminal -- , tToBTree "" . return . cleatOnward <$> slowDoorRoom , corDoor --, tToBTree "" . return . cleatOnward <$> (xChasm 200 200 , tToBTree "" . return . cleatOnward <$> ((putSingleLight =<< roomRectAutoLights 300 300) - <&> rmPmnts <>~ [sps0 (PutCrit slimeCrit) & plSpot . psPos .~ V2 150 100 + <&> rmPmnts <>~ + [sps0 (PutCrit slimeCrit) & plSpot . psPos .~ V2 150 100 + ,sps0 (PutCrit slimeCrit) & plSpot . psPos .~ V2 50 50 + ,sps0 (PutCrit slimeCrit) & plSpot . psPos .~ V2 50 150 , sps0 (PutCrit hiveCrit) & plSpot . psPos .~ V2 250 50 , sps0 (PutCrit chaseCrit) & plSpot . psPos .~ V2 250 100 ] diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index b20178c8f..8d7aaeb87 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -47,8 +47,18 @@ isBee cr = case cr ^. crType of BeeCrit{} -> True _ -> False +crslime :: Creature -> Int +crslime cr = case cr ^. crType of + SlimeCrit {_slimeSlime=r} | HP{} <- cr ^. crHP -> r -- r ^ (2::Int) + HiveCrit {_hiveSlime=x} -> x + BeeCrit {_beeSlime=x} -> 400 + x + _ -> 0 + +crs :: Universe -> [Creature] +crs u = u ^.. uvWorld . cWorld . lWorld . creatures . each + testStringInit :: Universe -> [String] -testStringInit _ = mempty +testStringInit u = [show . getSum $ foldMap (Sum . crslime) (crs u)] --u = u ^.. tocrs . each . filtered isBee . crActionPlan . apStrategy . to show -- u ^.. tocrs . ix 1 . crPos . _xy . to show -- <> u ^.. tocrs . ix 1 . crType . slimeCompression . to show diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 86d5d7db0..fb9152922 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -1076,6 +1076,7 @@ slimeFood cr = case cr ^. crType of Avatar{} -> True ChaseCrit{} -> True CrabCrit {} -> True + BeeCrit{} | CrIsCorpse{} <- cr ^. crHP -> True _ -> False feedSlime :: Creature -> Creature -> World -> World @@ -1090,10 +1091,12 @@ feedSlime s c w = fromMaybe w $ do & cWorld . lWorld . creatures . ix (s ^. crID) %~ f & slimeEatSound (s ^. crID) (s ^. crPos . _xy) where - f cr = cr & crType . slimeRad .~ r + f cr = cr -- & crType . slimeRad .~ r + & crType . slimeSlime .~ round (r^(2::Int) * 100) & crType . slimeRadWobble +~ r - r1 & crType . slimeCompression %~ ((r/r1) *^) - r1 = s ^?! crType . slimeRad + --r1 = s ^?! crType . slimeRad + r1 = s ^?! crType . slimeSlime . to slimeToRad r2 = c ^. crType . to crRad r = sqrt (r1*r1 + r2*r2) @@ -1102,18 +1105,21 @@ fuseSlimes c1 c2 = (cWorld . lWorld . creatures . ix mini .~ c) . (cWorld . lWorld . creatures . at maxi .~ Nothing) . slimeEatSound i1 (c ^. crPos . _xy) where - c' | c1 ^?! crType . slimeRad > c2 ^?! crType . slimeRad = c1 + --c' | c1 ^?! crType . slimeRad > c2 ^?! crType . slimeRad = c1 + c' | c1 ^?! crType . slimeSlime > c2 ^?! crType . slimeSlime = c1 | otherwise = c2 mini = min i1 i2 maxi = max i1 i2 i1 = c1 ^. crID i2 = c2 ^. crID - c = c' & crType . slimeRad .~ r + c = c' & crType . slimeSlime .~ round (r^(2::Int) * 100) & crType . slimeRadWobble +~ r - max r1 r2 & crType . slimeCompression %~ ((r/max r1 r2) *^) & crID .~ mini - r1 = c1 ^?! crType . slimeRad - r2 = c2 ^?! crType . slimeRad +-- r1 = c1 ^?! crType . slimeRad +-- r2 = c2 ^?! crType . slimeRad + r1 = c1 ^?! crType . slimeSlime . to slimeToRad + r2 = c2 ^?! crType . slimeSlime . to slimeToRad r = sqrt (r1*r1 + r2*r2) slimeEatSound :: Int -> Point2 -> World -> World diff --git a/tags b/tags index 8763f6b13..1b02b2f35 100644 --- a/tags +++ b/tags @@ -72,11 +72,11 @@ 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 101;" C +AutoCrit src/Dodge/Data/Creature/Misc.hs 103;" C AutoTrigger src/Dodge/Data/TriggerType.hs 8;" C -AvPosture src/Dodge/Data/Creature/Misc.hs 105;" C +AvPosture src/Dodge/Data/Creature/Misc.hs 110;" C Avatar src/Dodge/Data/Creature/Misc.hs 53;" C -AvatarPosture src/Dodge/Data/Creature/Misc.hs 105;" t +AvatarPosture src/Dodge/Data/Creature/Misc.hs 110;" 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 +103,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 102;" C +BarrelCrit src/Dodge/Data/Creature/Misc.hs 104;" C BarrelHiss src/Dodge/Data/SoundOrigin.hs 34;" C -BarrelType src/Dodge/Data/Creature/Misc.hs 117;" t -Barreloid src/Dodge/Data/Creature/Misc.hs 113;" C +BarrelType src/Dodge/Data/Creature/Misc.hs 122;" t +Barreloid src/Dodge/Data/Creature/Misc.hs 118;" 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 @@ -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 107;" t +CreatureShape src/Dodge/Data/Creature/Misc.hs 112;" 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 @@ -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 119;" C +ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 124;" 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 @@ -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 96;" C +HiveCrit src/Dodge/Data/Creature/Misc.hs 97;" 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 108;" C +Humanoid src/Dodge/Data/Creature/Misc.hs 113;" 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 @@ -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 103;" C +LampCrit src/Dodge/Data/Creature/Misc.hs 105;" C Large src/Shape/Data.hs 25;" C LasBeamCombine src/Dodge/Data/Beam.hs 38;" C LasGunFlare src/Dodge/Data/Muzzle.hs 34;" C @@ -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 114;" C +NoCreatureShape src/Dodge/Data/Creature/Misc.hs 119;" 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 @@ -1007,7 +1007,7 @@ Piezoelectric src/Dodge/Data/Material.hs 23;" C Pitted src/Dodge/Data/Creature.hs 68;" C Placement src/Dodge/Data/GenWorld.hs 113;" t PlacementSpot src/Dodge/Data/GenWorld.hs 97;" t -PlainBarrel src/Dodge/Data/Creature/Misc.hs 118;" C +PlainBarrel src/Dodge/Data/Creature/Misc.hs 123;" C PlainDeath src/Dodge/Data/Creature.hs 70;" C PlantNurserySS src/Dodge/Data/Scenario.hs 96;" C PlasmaBall src/Dodge/Data/PlasmaBall.hs 12;" t @@ -1299,7 +1299,7 @@ Suspicious src/Dodge/Data/Creature/Perception.hs 64;" C Swallowed src/Dodge/Data/Creature.hs 68;" 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 100;" C +SwarmCrit src/Dodge/Data/Creature/Misc.hs 102;" 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 @@ -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 102;" f +_barrelType src/Dodge/Data/Creature/Misc.hs 104;" 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 @@ -1586,6 +1586,7 @@ _bdsTrigger src/Dodge/Data/Button.hs 26;" f _beamCombine src/Dodge/Data/Beam.hs 46;" f _beeAggro src/Dodge/Data/Creature/Misc.hs 92;" f _beeHive src/Dodge/Data/Creature/Misc.hs 90;" f +_beeLifespan src/Dodge/Data/Creature/Misc.hs 95;" f _beePheremones src/Dodge/Data/LWorld.hs 99;" f _beeRandomMovement src/Dodge/Data/Creature/Misc.hs 94;" f _beeSlime src/Dodge/Data/Creature/Misc.hs 89;" f @@ -1924,8 +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 97;" f -_hiveGestation src/Dodge/Data/Creature/Misc.hs 98;" f +_hiveChildren src/Dodge/Data/Creature/Misc.hs 98;" f +_hiveGestation src/Dodge/Data/Creature/Misc.hs 99;" f +_hiveSlime src/Dodge/Data/Creature/Misc.hs 100;" 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 @@ -1989,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 103;" f -_lampHeight src/Dodge/Data/Creature/Misc.hs 103;" f -_lampLSID src/Dodge/Data/Creature/Misc.hs 103;" f +_lampColor src/Dodge/Data/Creature/Misc.hs 105;" f +_lampHeight src/Dodge/Data/Creature/Misc.hs 105;" f +_lampLSID src/Dodge/Data/Creature/Misc.hs 105;" 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 @@ -2162,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 119;" f +_piercedPoints src/Dodge/Data/Creature/Misc.hs 124;" 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 @@ -2377,17 +2379,17 @@ _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 109;" f -_skinLower src/Dodge/Data/Creature/Misc.hs 111;" f -_skinUpper src/Dodge/Data/Creature/Misc.hs 110;" f +_skinHead src/Dodge/Data/Creature/Misc.hs 114;" f +_skinLower src/Dodge/Data/Creature/Misc.hs 116;" f +_skinUpper src/Dodge/Data/Creature/Misc.hs 115;" 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 84;" f _slimeEngulfProgress src/Dodge/Data/Creature/Misc.hs 86;" f _slimeIsCompressing src/Dodge/Data/Creature/Misc.hs 85;" f -_slimeRad src/Dodge/Data/Creature/Misc.hs 81;" f _slimeRadWobble src/Dodge/Data/Creature/Misc.hs 82;" f +_slimeSlime src/Dodge/Data/Creature/Misc.hs 81;" f _slimeSplitTimer src/Dodge/Data/Creature/Misc.hs 83;" f _slinkHeadPos src/Dodge/Data/Creature/Misc.hs 78;" f _slinkSpine src/Dodge/Data/Creature/Misc.hs 77;" f @@ -2685,7 +2687,7 @@ anyUnusedSpot src/Dodge/PlacementSpot.hs 68;" f anythingHitCirc src/Dodge/Base/Collide.hs 357;" f apply src/Quaternion.hs 78;" f applyCME src/Dodge/HeldUse.hs 397;" f -applyClip src/Dodge/Debug.hs 184;" f +applyClip src/Dodge/Debug.hs 191;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 15;" f applyEventIO src/Loop.hs 90;" f applyGravityPU src/Dodge/Projectile/Update.hs 41;" f @@ -2788,6 +2790,7 @@ 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 89;" f +beeLifespanCheck src/Dodge/Creature/Update.hs 119;" 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 @@ -2865,7 +2868,7 @@ buttonFlip src/Dodge/Button/Event.hs 18;" f buzz1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 892;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 638;" f byNthLink src/Dodge/Room/Warning.hs 44;" f -cChasm src/Dodge/Room/Tutorial.hs 175;" f +cChasm src/Dodge/Room/Tutorial.hs 178;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f @@ -2903,14 +2906,14 @@ chaseCrit src/Dodge/Creature/ChaseCrit.hs 35;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 193;" f chaseUpperBody src/Dodge/Creature/Picture.hs 180;" f chasmRotate src/Dodge/Creature/State/WalkCycle.hs 149;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 414;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 345;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 417;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 348;" f chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 126;" f chasmWallToSurface src/Dodge/Base/Collide.hs 133;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f -checkDeath src/Dodge/Creature/Update.hs 386;" f -checkDeath' src/Dodge/Creature/Update.hs 389;" f +checkDeath src/Dodge/Creature/Update.hs 406;" f +checkDeath' src/Dodge/Creature/Update.hs 409;" f checkEndGame src/Dodge/Update.hs 889;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -2957,13 +2960,14 @@ click1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 844;" f clicker src/Dodge/Item/Scope.hs 88;" f clipV src/Geometry/Vector.hs 48;" f clipZoom src/Dodge/Update/Camera.hs 234;" f +clipboardCr src/Dodge/Debug.hs 91;" f clockCycle src/Dodge/Clock.hs 7;" f closeButtonToSelectionItem src/Dodge/Inventory/SelectionList.hs 237;" f closeItemDist src/Dodge/Inventory.hs 149;" f 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 301;" 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 @@ -3036,7 +3040,7 @@ copierItemUpdate src/Dodge/Creature/State.hs 159;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f corDoor src/Dodge/Room/Room.hs 411;" f cornerList src/Preload/Render.hs 236;" f -corpseOrGib src/Dodge/Creature/Update.hs 432;" f +corpseOrGib src/Dodge/Creature/Update.hs 455;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f corridorN src/Dodge/Room/Corridor.hs 58;" f @@ -3048,7 +3052,7 @@ crCamouflage src/Dodge/Creature/Picture.hs 80;" f crCanSeeCr src/Dodge/Creature/Test.hs 49;" f crCrSpring src/Dodge/Update.hs 1010;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 68;" f -crDeathEffects src/Dodge/Creature/Update.hs 410;" f +crDeathEffects src/Dodge/Creature/Update.hs 430;" f crDeathSounds src/Dodge/Creature/Vocalization.hs 40;" f crDexterity src/Dodge/Creature/Statistics.hs 19;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 39;" f @@ -3089,7 +3093,7 @@ crShape src/Dodge/Creature/Shape.hs 8;" f crSpring src/Dodge/Update.hs 998;" f crStratConMatches src/Dodge/Creature/Test.hs 77;" f crStrength src/Dodge/Creature/Statistics.hs 30;" f -crUpdate src/Dodge/Creature/Update.hs 379;" f +crUpdate src/Dodge/Creature/Update.hs 399;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 67;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 49;" f crVocalResetTime src/Dodge/Creature/Vocalization.hs 69;" f @@ -3104,7 +3108,7 @@ crabCorpse src/Dodge/Creature/Picture.hs 322;" f crabCrit src/Dodge/Creature/ChaseCrit.hs 42;" f crabCritInternal src/Dodge/Humanoid.hs 25;" f crabFeet src/Dodge/Creature/Picture.hs 232;" f -crabRoom src/Dodge/Room/Tutorial.hs 468;" f +crabRoom src/Dodge/Room/Tutorial.hs 471;" f crabUpperBody src/Dodge/Creature/Picture.hs 156;" f craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 41;" f @@ -3133,6 +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 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 @@ -3141,6 +3146,7 @@ crsNearCirc src/Dodge/Zoning/Creature.hs 36;" f crsNearPoint src/Dodge/Zoning/Creature.hs 18;" f crsNearRect src/Dodge/Zoning/Creature.hs 40;" f crsNearSeg src/Dodge/Zoning/Creature.hs 24;" f +crslime src/Dodge/TestString.hs 50;" f crystalLine src/Dodge/Placement/Instance/Wall.hs 58;" f cubeShape src/Dodge/Block/Debris.hs 162;" f cullPoint src/Dodge/Render/ShapePicture.hs 117;" f @@ -3215,17 +3221,17 @@ debrisSize src/Dodge/Block/Debris.hs 131;" f debugEvent src/Dodge/Debug.hs 47;" f debugEvent' src/Dodge/Debug.hs 53;" f debugEvents src/Dodge/Debug.hs 32;" f -debugGet src/Dodge/Debug.hs 129;" f -debugItem src/Dodge/Debug.hs 91;" f +debugGet src/Dodge/Debug.hs 136;" f +debugItem src/Dodge/Debug.hs 98;" f debugMenu src/Dodge/Menu.hs 122;" f debugMenuOptions src/Dodge/Menu.hs 128;" f -debugMouseClickPos src/Dodge/Debug.hs 199;" f +debugMouseClickPos src/Dodge/Debug.hs 206;" f debugOn src/Dodge/Data/Config.hs 179;" f -debugPutDraw src/Dodge/Debug.hs 150;" f -debugPutItems src/Dodge/Debug.hs 133;" f -debugPutN src/Dodge/Debug.hs 139;" f -debugShowPath src/Dodge/Debug.hs 159;" f -debugWritableValues src/Dodge/Debug.hs 172;" f +debugPutDraw src/Dodge/Debug.hs 157;" f +debugPutItems src/Dodge/Debug.hs 140;" f +debugPutN src/Dodge/Debug.hs 146;" f +debugShowPath src/Dodge/Debug.hs 166;" f +debugWritableValues src/Dodge/Debug.hs 179;" f decodeSensorType src/Dodge/Terminal.hs 81;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 62;" f decomposeTree src/Dodge/Tree/Compose.hs 59;" f @@ -3353,8 +3359,8 @@ doCrImp src/Dodge/CreatureEffect.hs 13;" f doDamage src/Dodge/Creature/State.hs 44;" f doDeathToggle src/Dodge/WorldEffect.hs 99;" f doDeathTriggers src/Dodge/WorldEffect.hs 92;" f -doDebugGet src/Dodge/Debug.hs 153;" f -doDebugPut src/Dodge/Debug.hs 142;" f +doDebugGet src/Dodge/Debug.hs 160;" f +doDebugPut src/Dodge/Debug.hs 149;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 23;" f doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 38;" f doDebugTestF10 src/Dodge/Update/Input/DebugTest.hs 66;" f @@ -3390,7 +3396,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 289;" f +doSlimeRadChange src/Dodge/Creature/Update.hs 307;" f doTabComplete src/Dodge/Terminal.hs 241;" f doTestDrawing src/Dodge/Render.hs 40;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f @@ -3439,19 +3445,19 @@ drawCombineInventory src/Dodge/Render/HUD.hs 190;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 72;" f drawCoord src/Dodge/Debug/Picture.hs 396;" f drawCountMod src/Render.hs 231;" f -drawCrInfo src/Dodge/Debug.hs 223;" f -drawCrInfo' src/Dodge/Debug.hs 218;" f +drawCrInfo src/Dodge/Debug.hs 230;" f +drawCrInfo' src/Dodge/Debug.hs 225;" f drawCrabCrit src/Dodge/Creature/Picture.hs 139;" f drawCreature src/Dodge/Creature/Picture.hs 37;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 199;" f -drawCreatureRad src/Dodge/Debug.hs 307;" f +drawCreatureRad src/Dodge/Debug.hs 314;" f drawCross src/Dodge/Render/Label.hs 25;" f drawCrossCol src/Dodge/Render/Label.hs 21;" f drawCursorAt src/Dodge/Render/List.hs 73;" f drawCursorByTerminalStatus src/Dodge/Render/Picture.hs 139;" f drawDDATest src/Dodge/Debug/Picture.hs 304;" f drawDamSensor src/Dodge/Machine/Draw.hs 38;" f -drawDebug src/Dodge/Debug.hs 261;" f +drawDebug src/Dodge/Debug.hs 268;" f drawDrag src/Dodge/Render/Picture.hs 204;" f drawDragDrop src/Dodge/Render/Picture.hs 233;" f drawDragPickup src/Dodge/Render/Picture.hs 242;" f @@ -3554,7 +3560,7 @@ drawZone src/Dodge/Debug/Picture.hs 152;" f drawZoneCirc src/Dodge/Debug/Picture.hs 293;" f drawZoneCol src/Dodge/Debug/Picture.hs 149;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 286;" f -dropAll src/Dodge/Creature/Update.hs 470;" f +dropAll src/Dodge/Creature/Update.hs 493;" f dropInventoryPath src/Dodge/HeldUse.hs 1380;" f dropItem src/Dodge/Creature/Action.hs 180;" f dropper src/Dodge/Item/Scope.hs 82;" f @@ -3644,7 +3650,7 @@ faceEdges src/Polyhedra.hs 62;" f 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 1081;" f +feedSlime src/Dodge/Update.hs 1082;" f feet src/Dodge/Creature/Picture.hs 218;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f @@ -3694,7 +3700,7 @@ floorWire src/Dodge/Wire.hs 13;" f flyInertia src/Dodge/Creature/State/WalkCycle.hs 74;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 836;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 886;" f -foldMTRS src/Dodge/Room/Tutorial.hs 108;" f +foldMTRS src/Dodge/Room/Tutorial.hs 111;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 26;" f @@ -3722,7 +3728,7 @@ fstV2 src/Geometry/Data.hs 70;" f fuelPack src/Dodge/Item/Equipment.hs 44;" f functionalUpdate src/Dodge/Update.hs 278;" f fusePoint src/Dodge/LevelGen/StaticWalls.hs 158;" f -fuseSlimes src/Dodge/Update.hs 1100;" f +fuseSlimes src/Dodge/Update.hs 1103;" f fuseWall src/Dodge/LevelGen/StaticWalls.hs 165;" f fuseWallsWith src/Dodge/LevelGen/StaticWalls.hs 172;" f g src/ShortShow.hs 48;" f @@ -3759,8 +3765,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 543;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 56;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 625;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 612;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 628;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 615;" f getDebugMouseOver src/Dodge/Update.hs 475;" f getDistortions src/Dodge/Render.hs 448;" f getEdgesCrossing src/Dodge/Path.hs 39;" f @@ -3777,7 +3783,7 @@ getPJStabiliser src/Dodge/HeldUse.hs 1280;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 608;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 611;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 36;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3901,7 +3907,7 @@ hotkeyToChar src/Dodge/Inventory/SelectionList.hs 201;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 62;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 198;" f hoverCrit src/Dodge/Creature/ChaseCrit.hs 80;" f -hoverCritHoverSound src/Dodge/Creature/Update.hs 356;" f +hoverCritHoverSound src/Dodge/Creature/Update.hs 376;" f hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 228;" f hoverDeathSounds src/Dodge/Creature/Vocalization.hs 62;" f hoverPainEffect src/Dodge/Creature/State.hs 57;" f @@ -4100,7 +4106,7 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f keyPic src/Dodge/Item/Draw/SPic.hs 442;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 798;" f -lChasm src/Dodge/Room/Tutorial.hs 187;" f +lChasm src/Dodge/Room/Tutorial.hs 190;" f lConnect src/Dodge/Render/Connectors.hs 43;" f lConnectCol src/Dodge/Render/Connectors.hs 46;" f lConnectMulti src/Dodge/Render/Connectors.hs 51;" f @@ -4168,7 +4174,7 @@ listSelectionColorPicture src/Dodge/DisplayInventory.hs 299;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f lmt src/MatrixHelper.hs 53;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 415;" f -loadAmmoTut src/Dodge/Room/Tutorial.hs 472;" f +loadAmmoTut src/Dodge/Room/Tutorial.hs 475;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f loadMuzzle src/Dodge/HeldUse.hs 654;" f @@ -4348,9 +4354,9 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 23;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 216;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 238;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 306;" f +midChasm src/Dodge/Room/Tutorial.hs 219;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 241;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 309;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4455,7 +4461,7 @@ noShape src/ShapePicture.hs 29;" f noclipCheck src/Dodge/WallCreatureCollisions.hs 22;" f nodeNear src/Dodge/Path.hs 94;" f nodesNear src/Dodge/Path.hs 100;" f -nonConvexChasm src/Dodge/Room/Tutorial.hs 303;" f +nonConvexChasm src/Dodge/Room/Tutorial.hs 306;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 173;" f normalTo8 src/Shader/Poke.hs 475;" f @@ -4532,7 +4538,7 @@ pairsToSCC src/Dodge/Graph.hs 32;" f paletteToColor src/Color.hs 85;" f parseItem src/Dodge/Debug/Terminal.hs 62;" f parseNum src/Dodge/Debug/Terminal.hs 77;" f -passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 690;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 693;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 87;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f @@ -4603,7 +4609,7 @@ pointerToItemID src/Dodge/Item/Location.hs 42;" f pointerYourRootItem src/Dodge/Item/Location.hs 33;" f pointerYourSelectedItem src/Dodge/Item/Location.hs 26;" f pointsToPoly src/Geometry/ConvexPoly.hs 37;" f -poisonSPic src/Dodge/Creature/Update.hs 466;" f +poisonSPic src/Dodge/Creature/Update.hs 489;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 518;" f pokeArrayOff src/Shader/Poke.hs 530;" f @@ -4639,8 +4645,8 @@ pokeWall src/Shader/Poke.hs 80;" f pokeWallsWindows src/Shader/Poke.hs 52;" f poly3 src/Picture/Base.hs 76;" f poly3Col src/Picture/Base.hs 80;" f -polyChasm src/Dodge/Room/Tutorial.hs 392;" f -polyChasmC src/Dodge/Room/Tutorial.hs 404;" f +polyChasm src/Dodge/Room/Tutorial.hs 395;" f +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 @@ -4736,7 +4742,7 @@ putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 97;" f putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 100;" f putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 58;" f putShape src/Dodge/Room/Foreground.hs 134;" f -putSingleLight src/Dodge/Room/Tutorial.hs 506;" f +putSingleLight src/Dodge/Room/Tutorial.hs 509;" f putSlideDr src/Dodge/Door/PutSlideDoor.hs 12;" f putStrLnAppend src/Dodge/LevelGen.hs 84;" f putTerminal src/Dodge/Placement/Instance/Terminal.hs 52;" f @@ -4978,7 +4984,7 @@ scaleSH src/Shape.hs 271;" f scalp src/Dodge/Creature/Picture.hs 377;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/Update.hs 463;" f +scorchSPic src/Dodge/Creature/Update.hs 486;" f screenBox src/Dodge/Base/Window.hs 54;" f screenPolygon src/Dodge/Base/Window.hs 18;" f screenPolygonBord src/Dodge/Base/Window.hs 28;" f @@ -5006,7 +5012,7 @@ sectionsSizes src/Dodge/DisplayInventory.hs 205;" f seedStartMenu src/Dodge/Menu.hs 85;" f seedStartOptions src/Dodge/Menu.hs 88;" f segOnCirc src/Geometry.hs 113;" f -segmentArea src/Dodge/Creature/Update.hs 337;" f +segmentArea src/Dodge/Creature/Update.hs 357;" f selNumPos src/Dodge/Render/HUD.hs 475;" f selNumPosCardinal src/Dodge/Render/HUD.hs 492;" f selSecDrawCursor src/Dodge/Render/List.hs 101;" f @@ -5024,13 +5030,13 @@ sensorReqToString src/Dodge/Machine/Update.hs 240;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 59;" f sensorSPic src/Dodge/Machine/Draw.hs 89;" f -sensorTut src/Dodge/Room/Tutorial.hs 634;" f +sensorTut src/Dodge/Room/Tutorial.hs 637;" f sensorTypeDamages src/Dodge/Machine/Update.hs 286;" f sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f setBeeRandomMovement src/Dodge/Creature/Impulse.hs 110;" f setChannelPos src/Sound.hs 152;" f setClickWorldPos src/Dodge/Update.hs 110;" f -setClip src/Dodge/Debug.hs 247;" f +setClip src/Dodge/Debug.hs 254;" f setDepth src/Picture/Base.hs 120;" f setDirPS src/Dodge/PlacementSpot.hs 51;" f setFallback src/Dodge/PlacementSpot.hs 127;" f @@ -5053,11 +5059,11 @@ 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 268;" f +setSlimeDir src/Dodge/Creature/Update.hs 286;" f setSoundVolume src/Sound.hs 159;" f setTile src/Dodge/Layout.hs 78;" f setTiles src/Dodge/Layout.hs 68;" f -setTreeInts src/Dodge/Room/Tutorial.hs 115;" f +setTreeInts src/Dodge/Room/Tutorial.hs 118;" f setViewDistance src/Dodge/Update/Camera.hs 240;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 70;" f setViewport src/Dodge/Render.hs 453;" f @@ -5135,10 +5141,10 @@ showEquipItem src/Dodge/Item/Display.hs 109;" f showInt src/Dodge/Item/Info.hs 75;" f showIntsString src/Dodge/Tree/Compose.hs 130;" f showInventoryPathing src/Dodge/Item/Display.hs 87;" f -showManObj src/Dodge/TestString.hs 115;" f -showMuzzlePositions src/Dodge/Debug.hs 313;" f +showManObj src/Dodge/TestString.hs 126;" f +showMuzzlePositions src/Dodge/Debug.hs 320;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f -showTimeFlow src/Dodge/TestString.hs 132;" f +showTimeFlow src/Dodge/TestString.hs 143;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 198;" f shrinkVert src/Geometry/Polygon.hs 202;" f shuffle src/RandomHelp.hs 68;" f @@ -5175,12 +5181,13 @@ 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 233;" f -slimeEatSound src/Dodge/Update.hs 1119;" f +slimeCritUpdate src/Dodge/Creature/Update.hs 251;" f +slimeEatSound src/Dodge/Update.hs 1125;" f slimeFood src/Dodge/Update.hs 1074;" f slimeSuck src/Dodge/Update.hs 1058;" f +slimeToRad src/Dodge/Data/Creature/Misc.hs 107;" f slinkCrit src/Dodge/Creature/ChaseCrit.hs 56;" f -slinkCritUpdate src/Dodge/Creature/Update.hs 340;" f +slinkCritUpdate src/Dodge/Creature/Update.hs 360;" f slowCrush90 src/Dodge/Room/LongDoor.hs 263;" f slowCrushRoom src/Dodge/Room/LongDoor.hs 148;" f slowDoorRoom src/Dodge/Room/LongDoor.hs 309;" f @@ -5247,8 +5254,8 @@ 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 306;" f -splitSlimeCrit' src/Dodge/Creature/Update.hs 296;" f +splitSlimeCrit src/Dodge/Creature/Update.hs 324;" f +splitSlimeCrit' src/Dodge/Creature/Update.hs 314;" f splitTrunk src/TreeHelp.hs 181;" f splitTrunkAt src/TreeHelp.hs 169;" f spreadAroundCenter src/Dodge/Base.hs 173;" f @@ -5258,8 +5265,8 @@ spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 11;" f spreadOut src/Dodge/Creature/Boid.hs 160;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f -sqPlatformChasm src/Dodge/Room/Tutorial.hs 267;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 282;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 270;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 285;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 127;" f @@ -5286,7 +5293,7 @@ stackText src/Picture/Base.hs 180;" f stackedInventory src/Dodge/Creature.hs 318;" f startCr src/Dodge/Creature.hs 83;" f startCrafts src/Dodge/Room/Start.hs 94;" f -startDeathTimer src/Dodge/Creature/Update.hs 419;" f +startDeathTimer src/Dodge/Creature/Update.hs 442;" f startDrag src/Dodge/Update/Input/InGame.hs 319;" f startInvList src/Dodge/Creature.hs 97;" f startInventory src/Dodge/Creature.hs 100;" f @@ -5322,7 +5329,7 @@ subInvX src/Dodge/ListDisplayParams.hs 53;" f subMap src/TreeHelp.hs 121;" f subZipWith src/Dodge/Placement/Instance/Wall.hs 94;" f subtree src/TreeHelp.hs 72;" f -succB src/Dodge/Debug.hs 167;" f +succB src/Dodge/Debug.hs 174;" f swapAnyExtraSelection src/Dodge/Inventory/Swap.hs 57;" f swapInOutLinks src/Dodge/RoomLink.hs 99;" f swapIndices src/ListHelp.hs 50;" f @@ -5380,7 +5387,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 50;" 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 @@ -5438,7 +5445,7 @@ toBinary src/Dodge/Inventory/SelectionList.hs 154;" f toBothLnk src/Dodge/RoomLink.hs 136;" f toClosestMultiple src/HelpNum.hs 3;" f toColor8 src/Color.hs 158;" f -toDeathCarriage src/Dodge/Creature/Update.hs 425;" f +toDeathCarriage src/Dodge/Creature/Update.hs 448;" f toFloatVAs src/Shader/Compile.hs 66;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f @@ -5462,7 +5469,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 714;" f topInvW src/Dodge/ListDisplayParams.hs 56;" f topPrismEdgeIndices src/Shader/Poke.hs 344;" f topPrismIndices src/Shader/Poke.hs 419;" f -topTestPart src/Dodge/TestString.hs 110;" f +topTestPart src/Dodge/TestString.hs 121;" f torchShape src/Dodge/Item/Draw/SPic.hs 278;" f torqueAmount src/Dodge/HeldUse.hs 606;" f torqueCr src/Dodge/WorldEffect.hs 85;" f @@ -5535,12 +5542,12 @@ tryUseParent src/Dodge/Creature/State.hs 173;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 23;" f tutAnoTree src/Dodge/Room/Tutorial.hs 55;" f -tutDrop src/Dodge/Room/Tutorial.hs 120;" f -tutHub src/Dodge/Room/Tutorial.hs 532;" f -tutLight src/Dodge/Room/Tutorial.hs 436;" f -tutRezBox src/Dodge/Room/Tutorial.hs 645;" f +tutDrop src/Dodge/Room/Tutorial.hs 123;" f +tutHub src/Dodge/Room/Tutorial.hs 535;" f +tutLight src/Dodge/Room/Tutorial.hs 439;" f +tutRezBox src/Dodge/Room/Tutorial.hs 648;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 670;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 673;" f tweenAngles src/Geometry/Vector.hs 198;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 83;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 39;" f @@ -5572,7 +5579,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 115;" f +updateAggroBee src/Dodge/Creature/Update.hs 128;" f updateAimPos src/Dodge/Update.hs 400;" f updateAllNodes src/TreeHelp.hs 88;" f updateArc src/Dodge/Tesla.hs 44;" f @@ -5580,14 +5587,14 @@ 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 110;" f -updateBeeFromPheremones src/Dodge/Creature/Update.hs 103;" f +updateBeeCrit src/Dodge/Creature/Update.hs 114;" f +updateBeeFromPheremones src/Dodge/Creature/Update.hs 107;" f updateBeePheremone src/Dodge/Update.hs 785;" 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 156;" f +updateCalmBee src/Dodge/Creature/Update.hs 169;" 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 @@ -5605,7 +5612,7 @@ updateCreatureStrides src/Dodge/Update.hs 376;" f updateDebris src/Dodge/Update.hs 685;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f updateDebugMessageOffset src/Dodge/Update.hs 104;" f -updateDelayedEvents src/Dodge/Update.hs 1126;" f +updateDelayedEvents src/Dodge/Update.hs 1132;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 8;" f updateDistortions src/Dodge/Update.hs 664;" f @@ -5664,7 +5671,7 @@ updatePlasmaBall src/Dodge/Update.hs 530;" f updatePlasmaBalls src/Dodge/Update.hs 678;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f -updatePulse src/Dodge/Creature/Update.hs 478;" f +updatePulse src/Dodge/Creature/Update.hs 501;" f updatePulseBall src/Dodge/Update.hs 550;" f updatePulseLaser src/Dodge/Update.hs 725;" f updatePulseLasers src/Dodge/Update.hs 525;" f @@ -5855,7 +5862,7 @@ wristArmour src/Dodge/Item/Equipment.hs 35;" f wristInvisibility src/Dodge/Item/Equipment.hs 80;" f writeConfig src/Dodge/Menu.hs 180;" f writeSaveSlot src/Dodge/Save.hs 36;" f -xChasm src/Dodge/Room/Tutorial.hs 154;" f +xChasm src/Dodge/Room/Tutorial.hs 157;" f xCylinder src/Shape.hs 129;" f xCylinderST src/Shape.hs 126;" f xIntercepts src/Dodge/Zoning/Base.hs 66;" f @@ -5877,7 +5884,7 @@ yourRootItem src/Dodge/Base/You.hs 26;" f yourRootItemDT src/Dodge/Base/You.hs 32;" f yourSelectedItem src/Dodge/Base/You.hs 20;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 200;" f +zChasm src/Dodge/Room/Tutorial.hs 203;" f zConnect src/Dodge/Render/Connectors.hs 18;" f zConnectCol src/Dodge/Render/Connectors.hs 29;" f zConnectColMidX src/Dodge/Render/Connectors.hs 32;" f