From a29cb8565ac855fbc6e14933c797571757b7df2a Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 10 Apr 2026 09:48:06 +0100 Subject: [PATCH] Work on crab corpse --- src/Dodge/Corpse/Make.hs | 67 ------------------------------ src/Dodge/Creature/Picture.hs | 73 ++++++++++++++++++++++++++++++++- src/Dodge/Creature/Update.hs | 4 +- tags | 77 ++++++++++++++++++----------------- 4 files changed, 113 insertions(+), 108 deletions(-) delete mode 100644 src/Dodge/Corpse/Make.hs diff --git a/src/Dodge/Corpse/Make.hs b/src/Dodge/Corpse/Make.hs deleted file mode 100644 index c00afbde3..000000000 --- a/src/Dodge/Corpse/Make.hs +++ /dev/null @@ -1,67 +0,0 @@ -module Dodge.Corpse.Make (makeCorpse) where - -import qualified Quaternion as Q -import Linear -import Control.Lens -import Dodge.Creature.Picture -import Dodge.Creature.Radius -import Dodge.Creature.Shape ---import Dodge.Data.Corpse -import Dodge.Data.Creature -import Geometry -import Shape -import ShapePicture -import RandomHelp - -makeCorpse :: StdGen -> Creature -> SPic -makeCorpse g cr = case cr ^. crType of - HoverCrit{} -> noPic $ drawHoverCrit cr - ChaseCrit{} -> noPic $ chaseCorpse g cr - CrabCrit{} -> noPic $ crabCorpse g cr - _ -> - noPic - . scaleSH (V3 crsize crsize crsize) - $ mconcat - [ colorSH (_skinHead cskin) $ deadScalp cr - , colorSH (_skinUpper cskin) $ deadUpperBody cr - , rotmdir $ colorSH (_skinLower cskin) $ deadFeet cr - ] - where - cskin = crShape $ _crType cr -- this should be fixed - crsize = 0.1 * crRad (cr ^. crType) - rotmdir = rotateSH (_crMvDir cr - _crDir cr) - -chaseCorpse :: StdGen -> Creature -> Shape -chaseCorpse g cr = mconcat - [colorSH (_skinUpper cskin) . upperPrismPolyHalfMI 0 $ polyCirc 3 12 - & each %~ vNormal - & each . _y *~ 0.6 - , colorSH (_skinUpper cskin) . overPosSH (Q.apply neckq) $ - upperPrismPolyHalfMI 3 ((+ V2 8 0) . vNormal <$> trapTBH 2 5 8) - , colorSH (_skinHead cskin) - (overPosSH (Q.apply headq) (upperBox Medium Important 2 [V2 0 (-4), V2 9 0, V2 0 4])) - , rotmdir $ colorSH (_skinLower cskin) $ deadFeet cr - ] - where - neckq = (V3 6 0 0, Q.qz a) - (a,g') = randomR (-2,2) g - b = fst $ randomR (-2,2) g' - cskin = crShape $ _crType cr -- this should be fixed - rotmdir = rotateSH (_crMvDir cr - _crDir cr) - headq = neckq `Q.comp` (V3 16 0 0, Q.qz b ) - -crabCorpse :: StdGen -> Creature -> Shape -crabCorpse g cr = mconcat - [ colorSH (_skinUpper cskin) $ overPosSH (Q.apply torsoq) (upperPrismPolyHalfMI 5 $ polyCirc 4 10 - & each . _x *~ 0.6) - , colorSH (_skinUpper cskin) $ overPosSH (Q.apply lclawq) (upperPrismPolyHalfMI 4 $ rectNSWE 20 0 (-2) 2) - <> overPosSH (Q.apply rclawq) (upperPrismPolyHalfMI 4 $ rectNSWE 0 (-20) (-2) 2) - ] - where - torsoq = (V3 0 0 0,Q.qid) - -- not sure which rotation is done first - lclawq = torsoq `Q.comp` (V3 2 8 1, Q.axisAngle (V3 1 0 0) (-0.1) * Q.qz la) - (la,g') = randomR (-2,2) g - ra = fst $ randomR (-2,2) g' - rclawq = torsoq `Q.comp` (V3 2 (-8) 1, Q.axisAngle (V3 1 0 0) (0.1) * Q.qz ra) - cskin = crShape $ _crType cr -- this should be fixed diff --git a/src/Dodge/Creature/Picture.hs b/src/Dodge/Creature/Picture.hs index 01f2365c2..63986c806 100644 --- a/src/Dodge/Creature/Picture.hs +++ b/src/Dodge/Creature/Picture.hs @@ -10,8 +10,10 @@ module Dodge.Creature.Picture ( drawChaseCrit, drawHoverCrit, drawCrabCrit, + makeCorpse, ) where +import RandomHelp import Dodge.Base.Collide import Control.Monad import Data.Maybe @@ -107,7 +109,7 @@ crabUpperBody _ cr = colorSH (_skinUpper cskin) ratck = Q.axisAngle (V3 0 0 1) (0.5 * pi) rrest = Q.axisAngle (V3 1 0 0) (-1) rcool = 1 - min 10 (fromIntegral . _meleeCooldownR $ _crType cr) / 10 - headq = torsoq `Q.comp` (V3 0 0 5, Q.qid) + headq = torsoq `Q.comp` (V3 3 0 4, Q.qid) -- headq = torsoq `Q.comp` (V3 0 0 5, (Q.qz aimrot )) -- cxy = cr ^. crPos . _xy -- aimrot = fromMaybe pi $ do @@ -221,6 +223,75 @@ spiderJoint' p l1 l2 q = (f $ Q.axisAngle (V3 0 (-1) 0) (pi - (a+b)), f . Q.axis c = argV $ (p-q) ^. _xy f x = Q.qz c * x +makeCorpse :: StdGen -> Creature -> SPic +makeCorpse g cr = case cr ^. crType of + HoverCrit{} -> noPic $ drawHoverCrit cr + ChaseCrit{} -> noPic $ chaseCorpse g cr + CrabCrit{} -> noPic $ crabCorpse g cr + _ -> + noPic + . scaleSH (V3 crsize crsize crsize) + $ mconcat + [ colorSH (_skinHead cskin) $ deadScalp cr + , colorSH (_skinUpper cskin) $ deadUpperBody cr + , rotmdir $ colorSH (_skinLower cskin) $ deadFeet cr + ] + where + cskin = crShape $ _crType cr -- this should be fixed + crsize = 0.1 * crRad (cr ^. crType) + rotmdir = rotateSH (_crMvDir cr - _crDir cr) + +chaseCorpse :: StdGen -> Creature -> Shape +chaseCorpse g cr = mconcat + [colorSH (_skinUpper cskin) . upperPrismPolyHalfMI 0 $ polyCirc 3 12 + & each %~ vNormal + & each . _y *~ 0.6 + , colorSH (_skinUpper cskin) . overPosSH (Q.apply neckq) $ + upperPrismPolyHalfMI 3 ((+ V2 8 0) . vNormal <$> trapTBH 2 5 8) + , colorSH (_skinHead cskin) + (overPosSH (Q.apply headq) (upperBox Medium Important 2 [V2 0 (-4), V2 9 0, V2 0 4])) + , rotmdir $ colorSH (_skinLower cskin) $ deadFeet cr + ] + where + neckq = (V3 6 0 0, Q.qz a) + (a,g') = randomR (-2,2) g + b = fst $ randomR (-2,2) g' + cskin = crShape $ _crType cr -- this should be fixed + rotmdir = rotateSH (_crMvDir cr - _crDir cr) + headq = neckq `Q.comp` (V3 16 0 0, Q.qz b ) + +crabCorpse :: StdGen -> Creature -> Shape +crabCorpse g cr = mconcat + [ colorSH (_skinUpper cskin) $ overPosSH (Q.apply torsoq) (upperPrismPolyHalfMI 5 $ polyCirc 4 10 + & each . _x *~ 0.6) + , colorSH (_skinUpper cskin) $ overPosSH (Q.apply lclawq) (upperPrismPolyHalfMI 4 $ rectNSWE 20 0 (-2) 2) + <> overPosSH (Q.apply rclawq) (upperPrismPolyHalfMI 4 $ rectNSWE 0 (-20) (-2) 2) + , colorSH (cskin ^?! skinLower) $ + (foldMap (mkfoot 5) [p1,p2]) + <> (foldMap (mkfoot (-5)) [p3,p4]) + , colorSH (_skinHead cskin) + --(overPosSH (Q.apply headq) (upperPrismPolyHalfMI 2 $ [V2 0 (-4), V2 2 (-2), 2, V2 0 4])) + (overPosSH (Q.apply headq) (upperPrismPolyHalfMI 1 $ square 2)) + ] + where + headq = torsoq `Q.comp` (V3 3 0 4, Q.qid) + torsoq = (V3 0 0 0,Q.qid) + -- not sure which rotation is done first + lclawq = torsoq `Q.comp` (V3 2 8 1, Q.axisAngle (V3 1 0 0) (-0.1) * Q.qz la) + (la,g') = randomR (-2,2) g + ra = fst $ randomR (-2,2) g' + p1 = 0 & _xy .~ p1' + V2 0 15 + p2 = 0 & _xy .~ p2' + V2 0 15 + p3 = 0 & _xy .~ p3' - V2 0 15 + p4 = 0 & _xy .~ p4' - V2 0 15 + (p1':p2':p3':p4':_) = evalState (replicateM 4 (randInCirc 9)) g + mkfoot y p = let (q1,q2) = spiderJoint (V3 0 y 0) p + in (afoot & each . sfVs . each %~ Q.apply (V3 0 y 0, q1)) + <> (afoot & each . sfVs . each %~ Q.apply (p,q2)) + afoot = upperPrismPolyST 10 $ polyCirc 3 2 + rclawq = torsoq `Q.comp` (V3 2 (-8) 1, Q.axisAngle (V3 1 0 0) (0.1) * Q.qz ra) + cskin = crShape $ _crType cr -- this should be fixed + deadFeet :: Creature -> Shape {-# INLINE deadFeet #-} deadFeet = feet diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index def120299..548fbeee0 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -1,6 +1,7 @@ {-# LANGUAGE LambdaCase #-} module Dodge.Creature.Update (updateCreature) where +import Dodge.Creature.Picture import Dodge.Base.You import Control.Monad import Color @@ -8,7 +9,6 @@ import qualified Data.IntMap.Strict as IM import Data.Maybe import Dodge.Barreloid -- import Dodge.Base.NewID -import Dodge.Corpse.Make import Dodge.Creature.Action import Dodge.Creature.State import Dodge.Creature.State.WalkCycle @@ -56,7 +56,7 @@ updateLivingCreature cr = over (cWorld . lWorld . creatures . ix cid) (chaseCritInternal w) w CrabCrit{} -> \w -> crUpdate cid . performActions cid $ - (crabCritInternal cid) w + crabCritInternal cid w AutoCrit {} -> crUpdate cid SwarmCrit {} -> crUpdate cid HoverCrit {} -> \w -> diff --git a/tags b/tags index 8f58bf109..b95edcbd3 100644 --- a/tags +++ b/tags @@ -2651,7 +2651,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 219;" f +arms src/Dodge/Creature/Picture.hs 295;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 9;" f @@ -2703,14 +2703,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 257;" f +baseShoulder src/Dodge/Creature/Picture.hs 333;" 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 38;" f -basicCrShape src/Dodge/Creature/Picture.hs 44;" f +basicCrPict src/Dodge/Creature/Picture.hs 40;" f +basicCrShape src/Dodge/Creature/Picture.hs 46;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMuzFlare src/Dodge/HeldUse.hs 731;" f @@ -2825,11 +2825,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/Corpse/Make.hs 34;" f +chaseCorpse src/Dodge/Creature/Picture.hs 244;" f chaseCrit src/Dodge/Creature/ChaseCrit.hs 30;" f chaseCritInternal src/Dodge/Humanoid.hs 12;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 194;" f -chaseUpperBody src/Dodge/Creature/Picture.hs 120;" f +chaseUpperBody src/Dodge/Creature/Picture.hs 122;" f chasmRotate src/Dodge/Creature/State/WalkCycle.hs 117;" f chasmSimpleMaze src/Dodge/Room/Tutorial.hs 379;" f chasmSpitTerminal src/Dodge/Room/Tutorial.hs 311;" f @@ -2837,8 +2837,8 @@ chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 102;" 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 98;" f -checkDeath' src/Dodge/Creature/Update.hs 101;" f +checkDeath src/Dodge/Creature/Update.hs 99;" f +checkDeath' src/Dodge/Creature/Update.hs 102;" f checkEndGame src/Dodge/Update.hs 875;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -2961,7 +2961,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 135;" f +corpseOrGib src/Dodge/Creature/Update.hs 136;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f corridorN src/Dodge/Room/Corridor.hs 58;" f @@ -2969,7 +2969,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 41;" f +crCamouflage src/Dodge/Creature/Picture.hs 43;" f crCanSeeCr src/Dodge/Creature/Test.hs 50;" f crCrSpring src/Dodge/Update.hs 997;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 65;" f @@ -3010,7 +3010,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 91;" f +crUpdate src/Dodge/Creature/Update.hs 92;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 67;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 49;" f crVocalResetTime src/Dodge/Creature/Vocalization.hs 61;" f @@ -3021,12 +3021,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/Corpse/Make.hs 53;" f +crabCorpse src/Dodge/Creature/Picture.hs 263;" f crabCrit src/Dodge/Creature/ChaseCrit.hs 37;" f crabCritInternal src/Dodge/Humanoid.hs 29;" f -crabFeet src/Dodge/Creature/Picture.hs 172;" f +crabFeet src/Dodge/Creature/Picture.hs 174;" f crabRoom src/Dodge/Room/Tutorial.hs 433;" f -crabUpperBody src/Dodge/Creature/Picture.hs 86;" f +crabUpperBody src/Dodge/Creature/Picture.hs 88;" f craftInfo src/Dodge/Item/Info.hs 168;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 40;" f crankSlowS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 603;" f @@ -3123,10 +3123,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 215;" f -deadRot src/Dodge/Creature/Picture.hs 233;" f -deadScalp src/Dodge/Creature/Picture.hs 228;" f -deadUpperBody src/Dodge/Creature/Picture.hs 254;" f +deadFeet src/Dodge/Creature/Picture.hs 291;" f +deadRot src/Dodge/Creature/Picture.hs 309;" f +deadScalp src/Dodge/Creature/Picture.hs 304;" f +deadUpperBody src/Dodge/Creature/Picture.hs 330;" f debrisS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 733;" f debrisSPic src/Dodge/Prop/Draw.hs 17;" f debrisSize src/Dodge/Block/Debris.hs 131;" f @@ -3349,7 +3349,7 @@ drawBoundingBox src/Dodge/Debug/Picture.hs 368;" f drawBullet src/Dodge/Render/ShapePicture.hs 180;" f drawButton src/Dodge/Button/Draw.hs 11;" f drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f -drawChaseCrit src/Dodge/Creature/Picture.hs 77;" f +drawChaseCrit src/Dodge/Creature/Picture.hs 79;" 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 @@ -3360,7 +3360,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 69;" f +drawCrabCrit src/Dodge/Creature/Picture.hs 71;" f drawCreature src/Dodge/Render/ShapePicture.hs 111;" f drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 199;" f drawCross src/Dodge/Render/Label.hs 25;" f @@ -3379,7 +3379,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 266;" f +drawEquipment src/Dodge/Creature/Picture.hs 342;" 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 @@ -3389,7 +3389,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 59;" f +drawHoverCrit src/Dodge/Creature/Picture.hs 61;" 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 @@ -3469,7 +3469,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 171;" f +dropAll src/Dodge/Creature/Update.hs 172;" f dropInventoryPath src/Dodge/HeldUse.hs 1371;" f dropItem src/Dodge/Creature/Action.hs 169;" f dropper src/Dodge/Item/Scope.hs 82;" f @@ -3559,7 +3559,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 158;" f +feet src/Dodge/Creature/Picture.hs 160;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f @@ -3810,7 +3810,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 51;" f -hoverCritHoverSound src/Dodge/Creature/Update.hs 68;" f +hoverCritHoverSound src/Dodge/Creature/Update.hs 69;" f hoverCritInternal src/Dodge/Humanoid.hs 46;" f hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 229;" f hoverDeathSounds src/Dodge/Creature/Vocalization.hs 54;" f @@ -4140,7 +4140,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/Corpse/Make.hs 16;" f +makeCorpse src/Dodge/Creature/Picture.hs 226;" 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 @@ -4386,7 +4386,7 @@ oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 641;" 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 155;" f +oneSmooth src/Dodge/Creature/Picture.hs 157;" f openConsole src/Dodge/Update.hs 140;" f optionMenu src/Dodge/Menu.hs 110;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f @@ -4506,7 +4506,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 167;" f +poisonSPic src/Dodge/Creature/Update.hs 168;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 509;" f pokeArrayOff src/Shader/Poke.hs 521;" f @@ -4870,10 +4870,10 @@ scale3 src/Picture/Base.hs 137;" f scaleMat src/MatrixHelper.hs 71;" f scaleMatrix src/MatrixHelper.hs 68;" f scaleSH src/Shape.hs 266;" f -scalp src/Dodge/Creature/Picture.hs 242;" f +scalp src/Dodge/Creature/Picture.hs 318;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/Update.hs 164;" f +scorchSPic src/Dodge/Creature/Update.hs 165;" 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 @@ -5123,7 +5123,8 @@ 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 206;" f +spiderJoint src/Dodge/Creature/Picture.hs 208;" f +spiderJoint' src/Dodge/Creature/Picture.hs 217;" f splashMenu src/Dodge/Menu.hs 31;" f splashMenuOptions src/Dodge/Menu.hs 36;" f splashScreen src/Dodge/Initialisation.hs 10;" f @@ -5167,7 +5168,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 122;" f +startDeathTimer src/Dodge/Creature/Update.hs 123;" f startDrag src/Dodge/Update/Input/InGame.hs 319;" f startInvList src/Dodge/Creature.hs 105;" f startInventory src/Dodge/Creature.hs 108;" f @@ -5318,7 +5319,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 128;" f +toDeathCarriage src/Dodge/Creature/Update.hs 129;" f toFloatVAs src/Shader/Compile.hs 66;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f @@ -5346,7 +5347,7 @@ topTestPart src/Dodge/TestString.hs 96;" 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 247;" f +torso src/Dodge/Creature/Picture.hs 323;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 850;" f @@ -5471,7 +5472,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 36;" f +updateCreature src/Dodge/Creature/Update.hs 37;" f updateCreatureGroups src/Dodge/Update.hs 634;" f updateCreatureSoundPositions src/Dodge/Update.hs 613;" f updateCreatureStride src/Dodge/Update.hs 376;" f @@ -5520,7 +5521,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 45;" f +updateLivingCreature src/Dodge/Creature/Update.hs 46;" 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 @@ -5537,7 +5538,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 179;" f +updatePulse src/Dodge/Creature/Update.hs 180;" f updatePulseBall src/Dodge/Update.hs 547;" f updatePulseLaser src/Dodge/Update.hs 716;" f updatePulseLasers src/Dodge/Update.hs 522;" f @@ -5579,7 +5580,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 262;" f +upperBody src/Dodge/Creature/Picture.hs 338;" f upperBox src/Shape.hs 153;" f upperBoxHalf src/Shape.hs 219;" f upperBoxMT src/Shape.hs 144;" f