diff --git a/src/Dodge/Base/CardinalPoint.hs b/src/Dodge/Base/CardinalPoint.hs index 06774d856..f47df7aa9 100644 --- a/src/Dodge/Base/CardinalPoint.hs +++ b/src/Dodge/Base/CardinalPoint.hs @@ -22,7 +22,12 @@ cardVec = \case West -> V2 (-1) 0 vecCard :: Point2 -> CardinalPoint -vecCard (V2 x y) = undefined +vecCard 0 = error "vecCard null" +vecCard (V2 x y) + | x > abs y = East + | -x > abs y = West + | y > 0 = North + | otherwise = South card8Vec :: Cardinal8 -> Point2 card8Vec cp = case cp of diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index c4bf2b2ba..ffa1a5d09 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -6,7 +6,7 @@ import Dodge.Base.Collide import Dodge.Creature.Radius import Color import Control.Monad -import qualified Data.IntMap.Strict as IM +import qualified IntMapHelp as IM import Data.Maybe import Dodge.Barreloid import Dodge.Base.You @@ -70,7 +70,15 @@ updateLivingCreature cr = case _crType cr of cid = cr ^. crID slimeCritUpdate :: Int -> World -> World -slimeCritUpdate cid w = w +slimeCritUpdate cid w + | 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 (cr1,cr2) <- splitSlimeCrit hitp hitv cr + = + let cid' = IM.newKey $ w ^. cWorld . lWorld . creatures + in w & cWorld . lWorld . creatures . ix cid .~ cr1 + & cWorld . lWorld . creatures . at cid' ?~ (cr2 & crID .~ cid') + | otherwise = w & cWorld . lWorld . creatures . ix cid .~ mvslime where txy = w ^?! cWorld . lWorld . creatures . ix 0 . crPos . _xy @@ -80,11 +88,12 @@ slimeCritUpdate cid w = w | hasLOS cxy txy w = mvslime' | otherwise = cr mvslime' = cr & crType . slimeCompression .~ p' + x - & crPos . _xy +~ g (0.5*x) + -- & crPos . _xy +~ g (x) + & crPos . _xy +~ 0.1 *^ normalize (txy-cxy) & crType . slimeIsCompressing %~ (f . f') & crDir .~ argV (txy-cxy) - g | cr ^?! crType . slimeIsCompressing = negate - | otherwise = id +-- g | cr ^?! crType . slimeIsCompressing = negate +-- | otherwise = id s | cr ^?! crType . slimeIsCompressing = 2/3 | otherwise = 1.5 f | abs (norm v - norm p') < 0.1 = not @@ -99,6 +108,33 @@ slimeCritUpdate cid w = w | otherwise = (-(r*r/norm p) *^ normalize (vNormal p), not) x = 0.1 *^ normalize (v - p') +splitSlimeCrit :: Point2 -> Point2 -> Creature -> Maybe (Creature, Creature) +splitSlimeCrit p v cr = do + let mp = closestPointOnLine p (p+v) cxy + h = r - distance mp cxy + nv = normalize v + guard $ h > 0 + let a1 = segmentArea r h + a2 = pi*r*r - a1 + r1 = sqrt (a1/pi) + r2 = sqrt (a2/pi) + guard $ r1 > 5 && r2 > 5 + return (cr' & crPos . _xy +~ r2 *^ vNormal nv + & crType . slimeRad .~ r1 + & crType . slimeCompression .~ V2 r1 0 + ,cr' & crPos . _xy -~ r1 *^ vNormal nv + & crType . slimeRad .~ r2 + & crType . slimeCompression .~ V2 r2 0 + ) + where + cxy = cr ^. crPos . _xy + r = cr ^?! crType . slimeRad + cr' = cr & crDamage .~ [] + +-- h is the height of the segment, ie r - distance to center +segmentArea :: Float -> Float -> Float +segmentArea r h = r*r*acos(1-h/r) - (r-h)*sqrt(h*(2*r-h)) + slinkCritUpdate :: Int -> World -> World slinkCritUpdate cid w = w diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 53283cbfc..9ad67bc6f 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -45,6 +45,8 @@ testStringInit u = u ^.. tocrs . ix 1 . crPos . _xy . to show <> u ^.. tocrs . ix 1 . crType . slimeCompression . to show <> u ^.. tocrs . ix 1 . crType . slimeIsCompressing . to show <> u ^.. tocrs . ix 1 . crDir . to show + <> u ^.. tocrs . ix 1 . crDamage . to show +-- <> u ^.. tocrs . each . crID . to show -- where -- tocr = uvWorld . cWorld . lWorld . creatures . ix 0 -- f = fromMaybe 0 diff --git a/tags b/tags index f290f6efc..f7a3c5956 100644 --- a/tags +++ b/tags @@ -73,11 +73,11 @@ AttachType src/Dodge/Data/Item/Combine.hs 91;" 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 78;" C +AutoCrit src/Dodge/Data/Creature/Misc.hs 79;" C AutoTrigger src/Dodge/Data/TriggerType.hs 8;" C -AvPosture src/Dodge/Data/Creature/Misc.hs 82;" C +AvPosture src/Dodge/Data/Creature/Misc.hs 83;" C Avatar src/Dodge/Data/Creature/Misc.hs 47;" C -AvatarPosture src/Dodge/Data/Creature/Misc.hs 82;" t +AvatarPosture src/Dodge/Data/Creature/Misc.hs 83;" t Awareness src/Dodge/Data/Creature/Perception.hs 63;" t BANGCONE src/Dodge/Data/Item/Combine.hs 149;" C BANGROD src/Dodge/Data/Item/Combine.hs 158;" C @@ -103,10 +103,10 @@ BURSTRIFLE src/Dodge/Data/Item/Combine.hs 157;" C BackdropCurs src/Dodge/Data/SelectionList.hs 23;" C BackgroundSound src/Dodge/Data/SoundOrigin.hs 13;" C Bark src/Dodge/Data/ActionPlan.hs 40;" C -BarrelCrit src/Dodge/Data/Creature/Misc.hs 79;" C +BarrelCrit src/Dodge/Data/Creature/Misc.hs 80;" C BarrelHiss src/Dodge/Data/SoundOrigin.hs 34;" C -BarrelType src/Dodge/Data/Creature/Misc.hs 94;" t -Barreloid src/Dodge/Data/Creature/Misc.hs 90;" C +BarrelType src/Dodge/Data/Creature/Misc.hs 95;" t +Barreloid src/Dodge/Data/Creature/Misc.hs 91;" C BasicBeamDraw src/Dodge/Data/Beam.hs 32;" C BasicBulletTrajectory src/Dodge/Data/Bullet.hs 41;" C BasicBulletTrajectoryType src/Dodge/Data/Bullet.hs 48;" C @@ -281,7 +281,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 84;" t +CreatureShape src/Dodge/Data/Creature/Misc.hs 85;" t CreatureType src/Dodge/Data/Creature/Misc.hs 46;" t Crushing src/Dodge/Data/Damage.hs 19;" C CryoReleaseCloud src/Dodge/Data/Cloud.hs 23;" C @@ -400,7 +400,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 96;" C +ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 97;" 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 @@ -554,7 +554,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 68;" C Huge src/Shape/Data.hs 24;" C -Humanoid src/Dodge/Data/Creature/Misc.hs 85;" C +Humanoid src/Dodge/Data/Creature/Misc.hs 86;" 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 @@ -642,7 +642,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 80;" C +LampCrit src/Dodge/Data/Creature/Misc.hs 81;" C Large src/Shape/Data.hs 25;" C LasBeamCombine src/Dodge/Data/Beam.hs 38;" C LasGunFlare src/Dodge/Data/Muzzle.hs 34;" C @@ -850,7 +850,7 @@ NoWorldEffect src/Dodge/Data/WorldEffect.hs 26;" C Noclip src/Dodge/Data/Config.hs 83;" C NodeMTree src/Dodge/Data/MetaTree.hs 17;" C NodeTree src/Dodge/Data/MetaTree.hs 16;" C -NonDrawnCreature src/Dodge/Data/Creature/Misc.hs 91;" C +NonDrawnCreature src/Dodge/Data/Creature/Misc.hs 92;" C NonInf src/Dodge/Data/CardinalPoint.hs 44;" C NormalOptions src/Dodge/Data/Universe.hs 71;" C NormalSpark src/Dodge/Data/Spark.hs 19;" C @@ -994,7 +994,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 95;" C +PlainBarrel src/Dodge/Data/Creature/Misc.hs 96;" C PlainDeath src/Dodge/Data/Creature.hs 70;" C PlantNurserySS src/Dodge/Data/Scenario.hs 96;" C PlasmaBall src/Dodge/Data/PlasmaBall.hs 13;" t @@ -1279,7 +1279,7 @@ Survive src/Dodge/Data/Scenario.hs 5;" C Suspicious src/Dodge/Data/Creature/Perception.hs 64;" 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 77;" C +SwarmCrit src/Dodge/Data/Creature/Misc.hs 78;" C TAPE src/Dodge/Data/Item/Combine.hs 55;" C TARGETING src/Dodge/Data/Item/Combine.hs 21;" C TCBase src/Dodge/Data/Terminal.hs 49;" C @@ -1556,7 +1556,7 @@ _avStrength src/Dodge/Data/Creature/Misc.hs 50;" f _avatarMaterial src/Dodge/Data/Creature/Misc.hs 49;" f _avatarPulse src/Dodge/Data/Creature/Misc.hs 48;" f _barrelShader src/Data/Preload/Render.hs 27;" f -_barrelType src/Dodge/Data/Creature/Misc.hs 79;" f +_barrelType src/Dodge/Data/Creature/Misc.hs 80;" 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 @@ -1948,9 +1948,9 @@ _lInvLock src/Dodge/Data/LWorld.hs 148;" f _lTestInt src/Dodge/Data/LWorld.hs 144;" f _lTestString src/Dodge/Data/LWorld.hs 143;" f _lWorld src/Dodge/Data/CWorld.hs 24;" f -_lampColor src/Dodge/Data/Creature/Misc.hs 80;" f -_lampHeight src/Dodge/Data/Creature/Misc.hs 80;" f -_lampLSID src/Dodge/Data/Creature/Misc.hs 80;" f +_lampColor src/Dodge/Data/Creature/Misc.hs 81;" f +_lampHeight src/Dodge/Data/Creature/Misc.hs 81;" f +_lampLSID src/Dodge/Data/Creature/Misc.hs 81;" f _lasWepXSF src/Dodge/Data/ComposedItem.hs 41;" f _laserEmmiter src/Dodge/Data/Laser.hs 16;" f _laserTypeDamage src/Dodge/Data/Laser.hs 15;" f @@ -2111,7 +2111,7 @@ _phTargetingID src/Dodge/Data/Projectile.hs 42;" 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 96;" f +_piercedPoints src/Dodge/Data/Creature/Misc.hs 97;" f _pjBarrelSpin src/Dodge/Data/Projectile.hs 23;" f _pjDetonatorID src/Dodge/Data/Projectile.hs 25;" f _pjDir src/Dodge/Data/Projectile.hs 18;" f @@ -2322,13 +2322,14 @@ _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 86;" f -_skinLower src/Dodge/Data/Creature/Misc.hs 88;" f -_skinUpper src/Dodge/Data/Creature/Misc.hs 87;" f +_skinHead src/Dodge/Data/Creature/Misc.hs 87;" f +_skinLower src/Dodge/Data/Creature/Misc.hs 89;" f +_skinUpper src/Dodge/Data/Creature/Misc.hs 88;" 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 75;" f +_slimeIsCompressing src/Dodge/Data/Creature/Misc.hs 76;" f _slimeRad src/Dodge/Data/Creature/Misc.hs 74;" f _slinkSpine src/Dodge/Data/Creature/Misc.hs 71;" f _smoothScrollAmount src/Dodge/Data/Input.hs 41;" f @@ -2660,7 +2661,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 321;" f +arms src/Dodge/Creature/Picture.hs 325;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 9;" f @@ -2703,7 +2704,7 @@ bangS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 845;" 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 372;" f +barrelShape src/Dodge/Creature/Picture.hs 376;" f baseAMRShape src/Dodge/Item/Draw/SPic.hs 410;" f baseBlockPane src/Dodge/Placement/Instance/Wall.hs 76;" f baseCI src/Dodge/Item/Grammar.hs 165;" f @@ -2712,14 +2713,14 @@ baseItemTriggerType src/Dodge/BaseTriggerType.hs 21;" f baseRifleShape src/Dodge/Item/Draw/SPic.hs 324;" f baseRodShape src/Dodge/Item/Draw/SPic.hs 407;" f baseSMGShape src/Dodge/Item/Draw/SPic.hs 395;" f -baseShoulder src/Dodge/Creature/Picture.hs 359;" f +baseShoulder src/Dodge/Creature/Picture.hs 363;" f baseStickShape src/Dodge/Item/Draw/SPic.hs 301;" f baseStickShapeX src/Dodge/Item/Draw/SPic.hs 293;" f baseStickSpread src/Dodge/HeldUse.hs 346;" f basicAttentionUpdate src/Dodge/Creature/Perception.hs 137;" f basicAwarenessUpdate src/Dodge/Creature/Perception.hs 31;" f -basicCrPict src/Dodge/Creature/Picture.hs 68;" f -basicCrShape src/Dodge/Creature/Picture.hs 74;" f +basicCrPict src/Dodge/Creature/Picture.hs 72;" f +basicCrShape src/Dodge/Creature/Picture.hs 78;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMuzFlare src/Dodge/HeldUse.hs 731;" f @@ -2812,11 +2813,11 @@ canSeeIndirect src/Dodge/Base/Collide.hs 335;" f canSpring src/Dodge/Update.hs 989;" f cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 23;" f capacitor src/Dodge/Item/Ammo.hs 67;" f -card8Vec src/Dodge/Base/CardinalPoint.hs 24;" f +card8Vec src/Dodge/Base/CardinalPoint.hs 32;" f cardList src/Dodge/Base/CardinalPoint.hs 7;" f cardReverse src/Dodge/Base/CardinalPoint.hs 10;" f cardVec src/Dodge/Base/CardinalPoint.hs 17;" f -cardinalBetweenAdj src/Dodge/Base/CardinalPoint.hs 35;" f +cardinalBetweenAdj src/Dodge/Base/CardinalPoint.hs 43;" f cardinalVectors src/Dodge/FloorItem.hs 24;" f cdtPropagateFold src/Dodge/DoubleTree.hs 189;" f ceilingTo src/Geometry/Zone.hs 15;" f @@ -2834,11 +2835,11 @@ 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 270;" f +chaseCorpse src/Dodge/Creature/Picture.hs 274;" f chaseCrit src/Dodge/Creature/ChaseCrit.hs 33;" f chaseCritInternal src/Dodge/Humanoid.hs 12;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 194;" f -chaseUpperBody src/Dodge/Creature/Picture.hs 148;" f +chaseUpperBody src/Dodge/Creature/Picture.hs 152;" f chasmRotate src/Dodge/Creature/State/WalkCycle.hs 123;" f chasmSimpleMaze src/Dodge/Room/Tutorial.hs 378;" f chasmSpitTerminal src/Dodge/Room/Tutorial.hs 311;" f @@ -2846,8 +2847,8 @@ chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 105;" f chasmWallToSurface src/Dodge/Base/Collide.hs 121;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f -checkDeath src/Dodge/Creature/Update.hs 119;" f -checkDeath' src/Dodge/Creature/Update.hs 122;" f +checkDeath src/Dodge/Creature/Update.hs 152;" f +checkDeath' src/Dodge/Creature/Update.hs 155;" f checkEndGame src/Dodge/Update.hs 875;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -2970,7 +2971,7 @@ copierItemUpdate src/Dodge/Creature/State.hs 136;" 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 168;" f +corpseOrGib src/Dodge/Creature/Update.hs 201;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f corridorN src/Dodge/Room/Corridor.hs 58;" f @@ -2978,7 +2979,7 @@ corridorWallN src/Dodge/Room/Corridor.hs 77;" f crAdd src/Dodge/Room/RezBox.hs 116;" f crAwayFromPost src/Dodge/Creature/Test.hs 83;" f crBlips src/Dodge/RadarSweep.hs 88;" f -crCamouflage src/Dodge/Creature/Picture.hs 71;" f +crCamouflage src/Dodge/Creature/Picture.hs 75;" f crCanSeeCr src/Dodge/Creature/Test.hs 50;" f crCrSpring src/Dodge/Update.hs 997;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 67;" f @@ -3019,7 +3020,7 @@ crShape src/Dodge/Creature/Shape.hs 8;" f crSpring src/Dodge/Update.hs 984;" f crStratConMatches src/Dodge/Creature/Test.hs 78;" f crStrength src/Dodge/Creature/Statistics.hs 30;" f -crUpdate src/Dodge/Creature/Update.hs 112;" f +crUpdate src/Dodge/Creature/Update.hs 145;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 67;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 49;" f crVocalResetTime src/Dodge/Creature/Vocalization.hs 65;" f @@ -3030,12 +3031,12 @@ crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 62;" f crWlPbHitZ src/Dodge/WorldEvent/ThingsHit.hs 72;" f crZoneSize src/Dodge/Zoning/Creature.hs 43;" f crabActionUpdate src/Dodge/Creature/ReaderUpdate.hs 124;" f -crabCorpse src/Dodge/Creature/Picture.hs 289;" f +crabCorpse src/Dodge/Creature/Picture.hs 293;" f crabCrit src/Dodge/Creature/ChaseCrit.hs 40;" f crabCritInternal src/Dodge/Humanoid.hs 29;" f -crabFeet src/Dodge/Creature/Picture.hs 200;" f +crabFeet src/Dodge/Creature/Picture.hs 204;" f crabRoom src/Dodge/Room/Tutorial.hs 432;" f -crabUpperBody src/Dodge/Creature/Picture.hs 124;" f +crabUpperBody src/Dodge/Creature/Picture.hs 128;" f craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 40;" f crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 609;" f @@ -3132,10 +3133,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 317;" f -deadRot src/Dodge/Creature/Picture.hs 335;" f -deadScalp src/Dodge/Creature/Picture.hs 330;" f -deadUpperBody src/Dodge/Creature/Picture.hs 356;" f +deadFeet src/Dodge/Creature/Picture.hs 321;" f +deadRot src/Dodge/Creature/Picture.hs 339;" f +deadScalp src/Dodge/Creature/Picture.hs 334;" f +deadUpperBody src/Dodge/Creature/Picture.hs 360;" f debrisS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 741;" f debrisSPic src/Dodge/Prop/Draw.hs 17;" f debrisSize src/Dodge/Block/Debris.hs 131;" f @@ -3358,7 +3359,7 @@ 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 115;" f +drawChaseCrit src/Dodge/Creature/Picture.hs 119;" 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 @@ -3369,7 +3370,7 @@ drawCoord src/Dodge/Debug/Picture.hs 396;" f drawCountMod src/Render.hs 231;" f drawCrInfo src/Dodge/Debug.hs 215;" f drawCrInfo' src/Dodge/Debug.hs 210;" f -drawCrabCrit src/Dodge/Creature/Picture.hs 107;" f +drawCrabCrit src/Dodge/Creature/Picture.hs 111;" f drawCreature src/Dodge/Creature/Picture.hs 36;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 199;" f drawCross src/Dodge/Render/Label.hs 25;" f @@ -3388,7 +3389,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 368;" f +drawEquipment src/Dodge/Creature/Picture.hs 372;" 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 @@ -3398,7 +3399,7 @@ 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 -drawHoverCrit src/Dodge/Creature/Picture.hs 97;" f +drawHoverCrit src/Dodge/Creature/Picture.hs 101;" 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 @@ -3452,7 +3453,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 56;" f -drawSlinkCrit src/Dodge/Creature/Picture.hs 89;" f +drawSlinkCrit src/Dodge/Creature/Picture.hs 93;" 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 @@ -3480,7 +3481,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 206;" f +dropAll src/Dodge/Creature/Update.hs 239;" f dropInventoryPath src/Dodge/HeldUse.hs 1371;" f dropItem src/Dodge/Creature/Action.hs 169;" f dropper src/Dodge/Item/Scope.hs 82;" f @@ -3570,7 +3571,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 -feet src/Dodge/Creature/Picture.hs 186;" f +feet src/Dodge/Creature/Picture.hs 190;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f @@ -3823,7 +3824,7 @@ hotkeyToChar src/Dodge/Inventory/SelectionList.hs 185;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 62;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f hoverCrit src/Dodge/Creature/ChaseCrit.hs 73;" f -hoverCritHoverSound src/Dodge/Creature/Update.hs 89;" f +hoverCritHoverSound src/Dodge/Creature/Update.hs 122;" f hoverCritInternal src/Dodge/Humanoid.hs 46;" f hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 229;" f hoverDeathSounds src/Dodge/Creature/Vocalization.hs 58;" f @@ -4025,7 +4026,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 377;" f +lampCrSPic src/Dodge/Creature/Picture.hs 381;" 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 @@ -4153,7 +4154,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 252;" f +makeCorpse src/Dodge/Creature/Picture.hs 256;" 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 @@ -4399,7 +4400,7 @@ oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 647;" f onEquipWristShield src/Dodge/Euse.hs 89;" f onRemoveWristShield src/Dodge/Euse.hs 79;" f oneH src/Dodge/Creature/Test.hs 95;" f -oneSmooth src/Dodge/Creature/Picture.hs 183;" f +oneSmooth src/Dodge/Creature/Picture.hs 187;" f openConsole src/Dodge/Update.hs 140;" f optionMenu src/Dodge/Menu.hs 110;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f @@ -4519,7 +4520,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 202;" f +poisonSPic src/Dodge/Creature/Update.hs 235;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 518;" f pokeArrayOff src/Shader/Poke.hs 530;" f @@ -4881,14 +4882,14 @@ sawtoothFailS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 809;" 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 64;" f +scaleAlong src/Dodge/Creature/Picture.hs 68;" 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 344;" f +scalp src/Dodge/Creature/Picture.hs 348;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/Update.hs 199;" f +scorchSPic src/Dodge/Creature/Update.hs 232;" 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 @@ -5045,10 +5046,10 @@ showEquipItem src/Dodge/Item/Display.hs 108;" f showInt src/Dodge/Item/Info.hs 75;" f showIntsString src/Dodge/Tree/Compose.hs 130;" f showInventoryPathing src/Dodge/Item/Display.hs 86;" f -showManObj src/Dodge/TestString.hs 101;" f +showManObj src/Dodge/TestString.hs 102;" f showMuzzlePositions src/Dodge/Debug.hs 292;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f -showTimeFlow src/Dodge/TestString.hs 118;" f +showTimeFlow src/Dodge/TestString.hs 119;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 198;" f shrinkVert src/Geometry/Polygon.hs 202;" f shuffle src/RandomHelp.hs 68;" f @@ -5085,9 +5086,9 @@ slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 681;" f slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 641;" f slideWindow src/ListHelp.hs 81;" f slimeCrit src/Dodge/Creature/ChaseCrit.hs 65;" f -slimeCritUpdate src/Dodge/Creature/Update.hs 70;" f +slimeCritUpdate src/Dodge/Creature/Update.hs 72;" f slinkCrit src/Dodge/Creature/ChaseCrit.hs 54;" f -slinkCritUpdate src/Dodge/Creature/Update.hs 73;" f +slinkCritUpdate src/Dodge/Creature/Update.hs 106;" 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 @@ -5142,13 +5143,14 @@ spawnAt src/Dodge/SpawnAt.hs 14;" f spawnerCrit src/Dodge/Creature.hs 54;" f spawnerRoom src/Dodge/Room/Room.hs 390;" f speedLegs src/Dodge/Item/Equipment.hs 74;" f -spiderJoint src/Dodge/Creature/Picture.hs 234;" f +spiderJoint src/Dodge/Creature/Picture.hs 238;" 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 103;" f splitTrunk src/TreeHelp.hs 181;" f splitTrunkAt src/TreeHelp.hs 169;" f spreadAroundCenter src/Dodge/Base.hs 173;" f @@ -5186,7 +5188,7 @@ stackText src/Picture/Base.hs 180;" f stackedInventory src/Dodge/Creature.hs 326;" f startCr src/Dodge/Creature.hs 90;" f startCrafts src/Dodge/Room/Start.hs 94;" f -startDeathTimer src/Dodge/Creature/Update.hs 153;" f +startDeathTimer src/Dodge/Creature/Update.hs 186;" f startDrag src/Dodge/Update/Input/InGame.hs 319;" f startInvList src/Dodge/Creature.hs 105;" f startInventory src/Dodge/Creature.hs 108;" f @@ -5337,7 +5339,7 @@ toBinary src/Dodge/Inventory/SelectionList.hs 138;" 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 161;" f +toDeathCarriage src/Dodge/Creature/Update.hs 194;" f toFloatVAs src/Shader/Compile.hs 66;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f @@ -5361,11 +5363,11 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 677;" 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 96;" f +topTestPart src/Dodge/TestString.hs 97;" f torchShape src/Dodge/Item/Draw/SPic.hs 277;" f torqueAmount src/Dodge/HeldUse.hs 606;" f torqueCr src/Dodge/WorldEffect.hs 85;" f -torso src/Dodge/Creature/Picture.hs 349;" f +torso src/Dodge/Creature/Picture.hs 353;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 850;" f @@ -5490,7 +5492,7 @@ updateCloud src/Dodge/Update.hs 904;" f updateClouds src/Dodge/Update.hs 773;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f -updateCreature src/Dodge/Creature/Update.hs 38;" f +updateCreature src/Dodge/Creature/Update.hs 40;" f updateCreatureGroups src/Dodge/Update.hs 634;" f updateCreatureSoundPositions src/Dodge/Update.hs 613;" f updateCreatureStride src/Dodge/Update.hs 376;" f @@ -5539,7 +5541,7 @@ updateLaser src/Dodge/Laser/Update.hs 12;" f updateLasers src/Dodge/Update.hs 513;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 177;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLivingCreature src/Dodge/Creature/Update.hs 47;" f +updateLivingCreature src/Dodge/Creature/Update.hs 49;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 451;" f updateMachine src/Dodge/Machine/Update.hs 24;" f updateMagnets src/Dodge/Update.hs 405;" f @@ -5556,7 +5558,7 @@ updatePlasmaBall src/Dodge/Update.hs 527;" f updatePlasmaBalls src/Dodge/Update.hs 669;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f -updatePulse src/Dodge/Creature/Update.hs 214;" f +updatePulse src/Dodge/Creature/Update.hs 247;" f updatePulseBall src/Dodge/Update.hs 547;" f updatePulseLaser src/Dodge/Update.hs 716;" f updatePulseLasers src/Dodge/Update.hs 522;" f @@ -5598,7 +5600,7 @@ updateWheelEvent src/Dodge/Update/Scroll.hs 21;" f updateWheelEvents src/Dodge/Update.hs 492;" f updateWorldEventFlag src/Dodge/Update.hs 129;" f updateWorldEventFlags src/Dodge/Update.hs 117;" f -upperBody src/Dodge/Creature/Picture.hs 364;" f +upperBody src/Dodge/Creature/Picture.hs 368;" f upperBox src/Shape.hs 149;" f upperBoxHalf src/Shape.hs 224;" f upperBoxMT src/Shape.hs 140;" f @@ -5647,6 +5649,7 @@ vToQuat src/Quaternion.hs 45;" f validTerminalCommands src/Dodge/Debug/Terminal.hs 137;" f vasTightStride src/Shader/Compile.hs 128;" f vecBetweenSpeed src/Dodge/Base.hs 146;" f +vecCard src/Dodge/Base/CardinalPoint.hs 24;" f vecTurnTo src/Dodge/Movement/Turn.hs 19;" f vert src/Shader/Data.hs 110;" f vertScale src/MatrixHelper.hs 95;" f