diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index 9d2bfa15c..63093080c 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -174,20 +174,13 @@ collide3Wall sp wl (ep, mo) = maybe (ep, mo) (,Just (n, OWall wl)) $ intersectSe collide3Creature :: Point3 -> Creature -> (Point3, MPO) -> (Point3, MPO) collide3Creature sp cr (ep, m) = fromMaybe (ep, m) $ do - h <- crHeight cr - (p, n) <- - fst $ - intersectCylSeg - (cr ^. crPos) - (crRad $ cr ^. crType) - h - sp - ep + let h = crHeight cr + (p, n) <- fst $ intersectCylSeg (cr ^. crPos) (crRad $ cr ^. crType) h sp ep return (p, Just (n, OCreature cr)) -crHeight :: Creature -> Maybe Float +crHeight :: Creature -> Float crHeight cr = case cr ^. crHP of - HP{} -> Just $ case cr ^. crType of + HP{} -> case cr ^. crType of HoverCrit {} -> 10 ChaseCrit {} -> 25 Avatar {} -> 25 @@ -198,8 +191,8 @@ crHeight cr = case cr ^. crHP of HiveCrit {} -> 25 BarrelCrit{} -> 20 _ -> error $ "Need to define crHeight for this crType:\n" <> unlines (prettyShort (cr ^. crType)) - CrIsCorpse{} -> Just 5 - AvatarDestroyed{} -> Nothing + CrIsCorpse{} -> 5 + AvatarDestroyed{} -> 0 wallToSurface :: Wall -> (Point3, Point3, [(Point3, Point3)]) wallToSurface wl = (g x, g $ vNormal (x - y), [(g x, g (y - x)), (g y, g (x - y))]) diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index d6139712a..9bafc83db 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -247,35 +247,32 @@ updateCalmBee cr cid w updateSlimeCrit :: Int -> World -> World updateSlimeCrit cid w - | r < 5 = w & cWorld . lWorld . creatures . at cid .~ Nothing + | cr ^?! crType . slimeSlime < 2500 + = w & cWorld . lWorld . creatures . at cid .~ Nothing | Just hitp <- w ^? cWorld . lWorld . creatures . ix cid . crDamage . ix 0 . dmPos , Just hitv <- w ^? cWorld . lWorld . creatures . ix cid . crDamage . ix 0 . dmVector , Just w' <- splitSlimeCrit' hitp hitv cid cr w = w' | (cr ^?! crType . slimeIsCompressing) && 1 > p - = let (w',g) = runState (setSlimeDir cid (cr & crDamage .~ []) w) (w ^. randGen) + = let (w',g) = runState (setSlimeDir cid cr w) (w ^. randGen) in w' & randGen .~ g | otherwise = updateCarriage cid $ w - & cWorld . lWorld . creatures . ix cid .~ mvslime + & cWorld . lWorld . creatures . ix cid %~ mvslime & cWorld . lWorld . creatures . ix cid . crDamage .~ [] & tocr %~ doSlimeRadChange & 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 + fsst (Just (x,ps)) | x > 0 = Just (x-1,ps) + fsst _ = Nothing tocr = cWorld . lWorld . creatures . ix cid cr = w ^?! cWorld . lWorld . creatures . ix cid - v = 0.1 *^ unitVectorAtAngle (cr ^. crDir) - mvslime = cr & crType . slimeCompression +~ f (0.1/r) - & crPos . _xy +~ v + mvslime cr' = cr' & crType . slimeCompression +~ f (0.1/r) + & crPos . _xy +~ 0.1 *^ unitVectorAtAngle (cr' ^. crDir) & crType . slimeIsCompressing %~ f' - f | t = negate + f | cr ^?! crType . slimeIsCompressing = negate | otherwise = id f' | p > 1.5 = const True | otherwise = id - t = cr ^?! crType . slimeIsCompressing r = cr ^?! crType . slimeSlime . to slimeToRad p = cr ^?! crType . slimeCompression @@ -289,6 +286,7 @@ setSlimeDir cid cr w = do return $ fromMaybe w $ splitSlimeCrit' (x + cxy) (unitVectorAtAngle d) cid cr w else return $ w & tocr . crDir .~ d & tocr . crType . slimeIsCompressing .~ False + & tocr . crDamage .~ mempty where tocr = cWorld . lWorld . creatures . ix cid cxy = cr ^. crPos . _xy diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index 7e10e67cf..393fb492b 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -1033,11 +1033,8 @@ crCrSpring c1 c2 | otherwise = cWorld . lWorld . creatures %~ ( olap c1 c2 . olap' c2 c1) where z c = c ^. crPos . _z - h c = fmap (+ z c) (crHeight c) - diffheight = fromMaybe True $ do - h1 <- h c1 - h2 <- h c2 - return $ z c1 > h2 || z c2 > h1 + h c = crHeight c + z c + diffheight = z c1 > h c2 || z c2 > h c1 olap a b = ix (a ^. crID) . crPos . _xy +~ overlap b olap' a b = ix (a ^. crID) . crPos . _xy -~ overlap b id1 = _crID c1 @@ -1080,22 +1077,18 @@ slimeFood cr = case cr ^. crType of _ -> False feedSlime :: Creature -> Creature -> World -> World -feedSlime s c w = fromMaybe w $ do - ch <- crHeight c - return $ if min 10 r1 + s ^?! crType . slimeEngulfProgress < max 15 (ch + 2) +feedSlime s c w = if min 10 r1 + s ^?! crType . slimeEngulfProgress < max 15 (ch + 2) then w & cWorld.lWorld.creatures.ix (s^.crID).crType.slimeEngulfProgress%~ (min r1.(+0.7)) & slimeSuck s c - else - w + else w & cWorld . lWorld . creatures . at (c ^. crID) %~ destroyCreature - & cWorld . lWorld . creatures . ix (s ^. crID) %~ f + & cWorld . lWorld . creatures . ix (s ^. crID) . crType . slimeSlime +~ x + & cWorld . lWorld . creatures . ix (s ^. crID) . crType . slimeSlimeChange +~ x & slimeEatSound (s ^. crID) (s ^. crPos . _xy) where - f cr = cr - & crType . slimeSlime +~ round (r2^(2::Int) * 100) - & crType . slimeSlimeChange +~ round (r2^(2::Int) * 100) + ch = crHeight c + x = round $ (c^.crType.to crRad)^(2::Int) * 100 r1 = s ^?! crType . slimeSlime . to slimeToRad - r2 = c ^. crType . to crRad fuseSlimes :: Creature -> Creature -> World -> World fuseSlimes c1 c2 = (cWorld . lWorld . creatures . ix mini .~ c) diff --git a/src/Geometry/Intersect.hs b/src/Geometry/Intersect.hs index 199ff343e..e00117d1a 100644 --- a/src/Geometry/Intersect.hs +++ b/src/Geometry/Intersect.hs @@ -374,6 +374,7 @@ intersectCircLine c r x y = f :: Float -> Point2 f a = x + (a *.* (y - x)) +--I believe the Maybes are entry or exit points, and reflections in these points intersectCylSeg :: Point3 -> Float -> Float -> Point3 -> Point3 -> (Maybe (Point3, Point3), Maybe (Point3, Point3)) intersectCylSeg p r h s e = fromMaybe (Nothing, Nothing) $ do diff --git a/tags b/tags index dfd1cabb5..ddee3db4f 100644 --- a/tags +++ b/tags @@ -2721,7 +2721,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 385;" f +arms src/Dodge/Creature/Picture.hs 378;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 9;" f @@ -2764,7 +2764,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 437;" f +barrelShape src/Dodge/Creature/Picture.hs 430;" 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 @@ -2773,14 +2773,14 @@ 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 424;" f +baseShoulder src/Dodge/Creature/Picture.hs 417;" 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 74;" f -basicCrShape src/Dodge/Creature/Picture.hs 77;" f +basicCrPict src/Dodge/Creature/Picture.hs 70;" f +basicCrShape src/Dodge/Creature/Picture.hs 73;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMuzFlare src/Dodge/HeldUse.hs 731;" f @@ -2898,19 +2898,19 @@ 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 323;" f +chaseCorpse src/Dodge/Creature/Picture.hs 316;" f chaseCrit src/Dodge/Creature/ChaseCrit.hs 35;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 193;" f -chaseUpperBody src/Dodge/Creature/Picture.hs 188;" f -chasmRotate src/Dodge/Creature/State/WalkCycle.hs 148;" f +chaseUpperBody src/Dodge/Creature/Picture.hs 181;" f +chasmRotate src/Dodge/Creature/State/WalkCycle.hs 149;" f chasmSimpleMaze src/Dodge/Room/Tutorial.hs 417;" f chasmSpitTerminal src/Dodge/Room/Tutorial.hs 348;" f -chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 125;" 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 396;" f -checkDeath' src/Dodge/Creature/Update.hs 399;" f +checkDeath src/Dodge/Creature/Update.hs 393;" f +checkDeath' src/Dodge/Creature/Update.hs 396;" f checkEndGame src/Dodge/Update.hs 890;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -2925,7 +2925,7 @@ chemFuelPouch src/Dodge/Item/Ammo.hs 81;" f chestPQ src/Dodge/Creature/HandPos.hs 180;" f chooseCursorBorders src/Dodge/Render/List.hs 141;" f chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f -chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 177;" f +chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 178;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 69;" f circHitWall src/Dodge/Base/Collide.hs 262;" f @@ -2934,8 +2934,8 @@ circOnAnyCr src/Dodge/Base/Collide.hs 307;" f circOnSeg src/Geometry.hs 101;" f circOnSegNoEndpoints src/Geometry.hs 91;" f circOnSomeWall src/Dodge/Base/Collide.hs 301;" f -circSegsInside src/Dodge/Creature/State/WalkCycle.hs 111;" f -circSegsInside' src/Dodge/Creature/State/WalkCycle.hs 100;" f +circSegsInside src/Dodge/Creature/State/WalkCycle.hs 112;" f +circSegsInside' src/Dodge/Creature/State/WalkCycle.hs 101;" f circle src/Picture/Base.hs 172;" f circleDecoration src/Dodge/Placement/TopDecoration.hs 62;" f circleSolid src/Picture/Base.hs 156;" f @@ -3016,7 +3016,7 @@ compass src/Dodge/Item/Held/BatteryGuns.hs 38;" f compileAndCheckShader src/Shader/Compile.hs 108;" f composeNode src/Dodge/Tree/Compose.hs 77;" f composeTree src/Dodge/Tree/Compose.hs 48;" f -compressionScale src/Dodge/Creature/State/WalkCycle.hs 67;" f +compressionScale src/Dodge/Creature/State/WalkCycle.hs 69;" f compressor src/Dodge/Item/Ammo.hs 74;" f computerBeepingS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 716;" f conEffects src/Dodge/Concurrent.hs 12;" f @@ -3037,7 +3037,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 443;" f +corpseOrGib src/Dodge/Creature/Update.hs 440;" 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 +3048,7 @@ crBlips src/Dodge/RadarSweep.hs 88;" f crCanSeeCr src/Dodge/Creature/Test.hs 49;" f crCrSpring src/Dodge/Update.hs 1011;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 68;" f -crDeathEffects src/Dodge/Creature/Update.hs 418;" f +crDeathEffects src/Dodge/Creature/Update.hs 415;" 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 @@ -3078,7 +3078,7 @@ crMvType src/Dodge/Creature/MoveType.hs 7;" f crNearPoint src/Dodge/Creature/Test.hs 125;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f crOnSeg src/Dodge/WorldEvent/ThingsHit.hs 244;" f -crOnSeg' src/Dodge/Creature/State/WalkCycle.hs 144;" f +crOnSeg' src/Dodge/Creature/State/WalkCycle.hs 145;" f crPainEffect src/Dodge/Creature/State.hs 50;" f crPathing src/Dodge/Creature/Action.hs 128;" f crRad src/Dodge/Creature/Radius.hs 7;" f @@ -3089,7 +3089,7 @@ crShape src/Dodge/Creature/Shape.hs 8;" 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 389;" f +crUpdate src/Dodge/Creature/Update.hs 386;" 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 @@ -3100,12 +3100,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 345;" f +crabCorpse src/Dodge/Creature/Picture.hs 338;" f crabCrit src/Dodge/Creature/ChaseCrit.hs 42;" f crabCritInternal src/Dodge/Humanoid.hs 25;" f -crabFeet src/Dodge/Creature/Picture.hs 247;" f +crabFeet src/Dodge/Creature/Picture.hs 240;" f crabRoom src/Dodge/Room/Tutorial.hs 471;" f -crabUpperBody src/Dodge/Creature/Picture.hs 159;" f +crabUpperBody src/Dodge/Creature/Picture.hs 152;" 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 @@ -3206,10 +3206,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 381;" f -deadRot src/Dodge/Creature/Picture.hs 399;" f -deadScalp src/Dodge/Creature/Picture.hs 394;" f -deadUpperBody src/Dodge/Creature/Picture.hs 421;" f +deadFeet src/Dodge/Creature/Picture.hs 374;" f +deadRot src/Dodge/Creature/Picture.hs 392;" f +deadScalp src/Dodge/Creature/Picture.hs 387;" f +deadUpperBody src/Dodge/Creature/Picture.hs 414;" 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 @@ -3392,7 +3392,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 294;" f +doSlimeRadChange src/Dodge/Creature/Update.hs 297;" f doTabComplete src/Dodge/Terminal.hs 241;" f doTestDrawing src/Dodge/Render.hs 40;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f @@ -3425,14 +3425,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 120;" f +drawBeeCrit src/Dodge/Creature/Picture.hs 116;" 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 149;" f +drawChaseCrit src/Dodge/Creature/Picture.hs 142;" 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 @@ -3443,7 +3443,7 @@ 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 +drawCrabCrit src/Dodge/Creature/Picture.hs 133;" f drawCreature src/Dodge/Creature/Picture.hs 35;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 199;" f drawCreatureRad src/Dodge/Debug.hs 314;" f @@ -3463,7 +3463,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 433;" f +drawEquipment src/Dodge/Creature/Picture.hs 426;" 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 @@ -3473,8 +3473,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 117;" f -drawHoverCrit src/Dodge/Creature/Picture.hs 104;" f +drawHive src/Dodge/Creature/Picture.hs 113;" f +drawHoverCrit src/Dodge/Creature/Picture.hs 100;" 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 @@ -3528,7 +3528,7 @@ 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 57;" f -drawSlinkCrit src/Dodge/Creature/Picture.hs 90;" f +drawSlinkCrit src/Dodge/Creature/Picture.hs 86;" 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 @@ -3556,7 +3556,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 481;" f +dropAll src/Dodge/Creature/Update.hs 478;" f dropInventoryPath src/Dodge/HeldUse.hs 1380;" f dropItem src/Dodge/Creature/Action.hs 180;" f dropper src/Dodge/Item/Scope.hs 82;" f @@ -3647,7 +3647,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 233;" f +feet src/Dodge/Creature/Picture.hs 226;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f @@ -3693,7 +3693,7 @@ floorItemPickupInfo src/Dodge/Render/HUD.hs 233;" f floorItemSPic src/Dodge/Render/ShapePicture.hs 143;" f floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f -flyInertia src/Dodge/Creature/State/WalkCycle.hs 73;" f +flyInertia src/Dodge/Creature/State/WalkCycle.hs 75;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 836;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 886;" f foldMTRS src/Dodge/Room/Tutorial.hs 111;" f @@ -3820,7 +3820,7 @@ gridInPolygon src/Grid.hs 10;" f gridPoints' src/Grid.hs 37;" f gridPointsOff src/Grid.hs 32;" f gridRoomPos src/Dodge/Room/Procedural.hs 91;" f -groundCliffPush src/Dodge/Creature/State/WalkCycle.hs 91;" f +groundCliffPush src/Dodge/Creature/State/WalkCycle.hs 92;" f groupSplitItemAmounts src/Dodge/Combine.hs 52;" f gruntS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 560;" f gut1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 914;" f @@ -3903,7 +3903,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 81;" f -hoverCritHoverSound src/Dodge/Creature/Update.hs 366;" f +hoverCritHoverSound src/Dodge/Creature/Update.hs 369;" 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 @@ -4109,7 +4109,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 442;" f +lampCrSPic src/Dodge/Creature/Picture.hs 435;" 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 @@ -4236,7 +4236,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 304;" f +makeCorpse src/Dodge/Creature/Picture.hs 297;" 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 @@ -4301,7 +4301,7 @@ maybeExitCombine src/Dodge/Update/Input/InGame.hs 572;" f maybeOpenConsole src/Dodge/Update.hs 135;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 135;" f -maybeTakeStep src/Dodge/Creature/State/WalkCycle.hs 155;" f +maybeTakeStep src/Dodge/Creature/State/WalkCycle.hs 156;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f mcBackgroundSound src/Dodge/Machine/Update.hs 152;" f mcColor src/Dodge/Machine/Draw.hs 74;" f @@ -4460,7 +4460,7 @@ nodeNear src/Dodge/Path.hs 94;" f nodesNear src/Dodge/Path.hs 100;" f nonConvexChasm src/Dodge/Room/Tutorial.hs 306;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f -normalGait src/Dodge/Creature/State/WalkCycle.hs 172;" f +normalGait src/Dodge/Creature/State/WalkCycle.hs 173;" f normalTo8 src/Shader/Poke.hs 475;" f normalizeAngle src/Geometry/Vector.hs 136;" f normalizeAnglePi src/Dodge/Base.hs 154;" f @@ -4485,7 +4485,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 230;" f +oneSmooth src/Dodge/Creature/Picture.hs 223;" f openConsole src/Dodge/Update.hs 140;" f optionMenu src/Dodge/Menu.hs 110;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f @@ -4606,7 +4606,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 477;" f +poisonSPic src/Dodge/Creature/Update.hs 474;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 518;" f pokeArrayOff src/Shader/Poke.hs 530;" f @@ -4715,7 +4715,7 @@ psposAddLabel src/Dodge/PlacementSpot.hs 71;" f pt0 src/Dodge/LevelGen/PlacementHelper.hs 55;" f ptCont src/Dodge/LevelGen/PlacementHelper.hs 21;" f pulseChecker src/Dodge/Item/Equipment.hs 84;" f -pushAgainst src/Dodge/Creature/State/WalkCycle.hs 76;" f +pushAgainst src/Dodge/Creature/State/WalkCycle.hs 78;" f pushCaverns src/Dodge/Room/LongDoor.hs 192;" f pushCr src/Dodge/WallCreatureCollisions.hs 43;" f pushL src/DoubleStack.hs 20;" f @@ -4855,7 +4855,7 @@ renderShadows src/Render.hs 116;" f replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 73;" f resetPLUse src/Dodge/PlacementSpot.hs 94;" f -resetStride src/Dodge/Creature/State/WalkCycle.hs 167;" f +resetStride src/Dodge/Creature/State/WalkCycle.hs 168;" f resetTerminal src/Dodge/WorldEffect.hs 158;" f resizeFBOTO src/Framebuffer/Update.hs 185;" f resizeFBOTO' src/Framebuffer/Update.hs 197;" f @@ -4975,14 +4975,13 @@ 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 71;" 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 408;" f +scalp src/Dodge/Creature/Picture.hs 401;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/Update.hs 474;" f +scorchSPic src/Dodge/Creature/Update.hs 471;" 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 @@ -5010,7 +5009,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 350;" f +segmentArea src/Dodge/Creature/Update.hs 353;" 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 @@ -5057,7 +5056,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 279;" f +setSlimeDir src/Dodge/Creature/Update.hs 282;" f setSoundVolume src/Sound.hs 159;" f setTile src/Dodge/Layout.hs 78;" f setTiles src/Dodge/Layout.hs 68;" f @@ -5179,14 +5178,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 245;" f slimeEatSound src/Dodge/Update.hs 1116;" f slimeFood src/Dodge/Update.hs 1074;" f slimeOutline src/Dodge/Creature/Slime.hs 9;" f slimeSuck src/Dodge/Update.hs 1058;" f slimeToRad src/Dodge/Data/Creature/Misc.hs 105;" f slinkCrit src/Dodge/Creature/ChaseCrit.hs 56;" f -slinkCritUpdate src/Dodge/Creature/Update.hs 353;" f +slinkCritUpdate src/Dodge/Creature/Update.hs 356;" 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 @@ -5246,15 +5244,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 285;" f +spiderJoint src/Dodge/Creature/Picture.hs 278;" 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 311;" f -splitSlimeCrit' src/Dodge/Creature/Update.hs 301;" f +splitSlimeCrit src/Dodge/Creature/Update.hs 314;" f +splitSlimeCrit' src/Dodge/Creature/Update.hs 304;" f splitTrunk src/TreeHelp.hs 181;" f splitTrunkAt src/TreeHelp.hs 169;" f spreadAroundCenter src/Dodge/Base.hs 173;" f @@ -5292,7 +5290,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 430;" f +startDeathTimer src/Dodge/Creature/Update.hs 427;" f startDrag src/Dodge/Update/Input/InGame.hs 319;" f startInvList src/Dodge/Creature.hs 97;" f startInventory src/Dodge/Creature.hs 100;" f @@ -5444,7 +5442,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 436;" f +toDeathCarriage src/Dodge/Creature/Update.hs 433;" f toFloatVAs src/Shader/Compile.hs 66;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f @@ -5472,7 +5470,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 414;" f +torso src/Dodge/Creature/Picture.hs 407;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 851;" f @@ -5670,7 +5668,7 @@ updatePlasmaBall src/Dodge/Update.hs 530;" 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 484;" f +updatePulse src/Dodge/Creature/Update.hs 481;" f updatePulseBall src/Dodge/Update.hs 550;" f updatePulseLaser src/Dodge/Update.hs 726;" f updatePulseLasers src/Dodge/Update.hs 525;" f @@ -5690,6 +5688,7 @@ updateSectionsPositioning src/Dodge/DisplayInventory.hs 241;" f updateShockwave src/Dodge/Shockwave/Update.hs 8;" f updateShockwaves src/Dodge/Update.hs 768;" f updateSingleNodes src/TreeHelp.hs 100;" f +updateSlimeCrit src/Dodge/Creature/Update.hs 248;" f updateSound src/Sound.hs 73;" f updateSounds src/Sound.hs 68;" f updateSpark src/Dodge/Spark.hs 20;" f @@ -5712,7 +5711,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 429;" f +upperBody src/Dodge/Creature/Picture.hs 422;" f upperBox src/Shape.hs 149;" f upperBoxHalf src/Shape.hs 224;" f upperBoxMT src/Shape.hs 140;" f @@ -5780,7 +5779,7 @@ visibleWalls src/Dodge/Base/Collide.hs 240;" f visionCheck src/Dodge/Creature/Perception.hs 158;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 356;" f -walkCliffPush src/Dodge/Creature/State/WalkCycle.hs 85;" f +walkCliffPush src/Dodge/Creature/State/WalkCycle.hs 86;" f walkNozzle src/Dodge/HeldUse.hs 827;" f walkableNodeNear src/Dodge/Path.hs 90;" f wallBlips src/Dodge/RadarSweep.hs 99;" f