Tweak creature cliff interaction, using updateCarriage

This commit is contained in:
2026-04-05 15:14:50 +01:00
parent 22a1162e14
commit d5c98f7c4e
4 changed files with 130 additions and 100 deletions
+1 -1
View File
@@ -35,7 +35,7 @@ chaseCorpse cr = mconcat
& each %~ vNormal & each %~ vNormal
& each . _y *~ 0.6 & each . _y *~ 0.6
, colorSH (_skinUpper cskin) . overPosSH (Q.apply neckq) $ , colorSH (_skinUpper cskin) . overPosSH (Q.apply neckq) $
(upperPrismPolyHalfMI 3 $ (+ V2 8 0) . vNormal <$> trapTBH 2 5 8) upperPrismPolyHalfMI 3 ((+ V2 8 0) . vNormal <$> trapTBH 2 5 8)
, colorSH (_skinHead cskin) , colorSH (_skinHead cskin)
(overPosSH (Q.apply headq) (upperBox Medium Important 2 [V2 0 (-4), V2 9 0, V2 0 4])) (overPosSH (Q.apply headq) (upperBox Medium Important 2 [V2 0 (-4), V2 9 0, V2 0 4]))
, rotmdir $ colorSH (_skinLower cskin) $ deadFeet cr , rotmdir $ colorSH (_skinLower cskin) $ deadFeet cr
+91 -11
View File
@@ -2,8 +2,11 @@
module Dodge.Creature.State.WalkCycle (updateCarriage) where module Dodge.Creature.State.WalkCycle (updateCarriage) where
import Dodge.Creature.Radius
import Geometry
import Dodge.Update.Camera.Rotate
import qualified SDL
import Dodge.WorldEvent.ThingsHit import Dodge.WorldEvent.ThingsHit
import Geometry.Polygon
import Data.Maybe import Data.Maybe
import Dodge.Creature.HandPos import Dodge.Creature.HandPos
import Linear import Linear
@@ -19,16 +22,9 @@ updateCarriage cid w = fromMaybe w $ do
updateCarriage' :: Int -> Creature -> World -> Carriage -> World updateCarriage' :: Int -> Creature -> World -> Carriage -> World
updateCarriage' cid cr w = \case updateCarriage' cid cr w = \case
Walking -> case (cr ^? crType . strideAmount,cr ^? crType . footForward) of Walking -> maybeTakeStep cid cr w
(Just x,Just ff) | x >= strideLength cr -> w & tocr . crPos . _xy +~ 0.5 *^ (cr ^. crOldPos - oop) ^. _xy
& soundMultiFrom & chasmTestCliffPush walkCliffPush cr
[FootstepSound i | i <- [0 .. 10]]
(cr ^. crPos . _xy)
(chooseFootSound ff)
Nothing
& over (cWorld . lWorld . creatures . ix cid . crType) resetStride
& tocr . crPos . _xy +~ 0.5 *^ (cr ^. crOldPos - oop) ^. _xy
_ -> w & tocr . crPos . _xy +~ 0.5 *^ (cr ^. crOldPos - oop) ^. _xy
Floating -> w Floating -> w
Flying {_zSpeed = dz, _flyInertia = x} -> Flying {_zSpeed = dz, _flyInertia = x} ->
w & tocr . crPos . _xy +~ x *^ f (cr ^. crOldPos . _xy - oop ^. _xy) w & tocr . crPos . _xy +~ x *^ f (cr ^. crOldPos . _xy - oop ^. _xy)
@@ -47,12 +43,96 @@ updateCarriage' cid cr w = \case
else w & cWorld . lWorld . creatures . ix cid . crPos .~ ep else w & cWorld . lWorld . creatures . ix cid . crPos .~ ep
OnGround {} -> w OnGround {} -> w
& tocr . crPos . _xy +~ 0.8 *^ (cr ^. crOldPos . _xy - oop ^. _xy) & tocr . crPos . _xy +~ 0.8 *^ (cr ^. crOldPos . _xy - oop ^. _xy)
& chasmTestCliffPush groundCliffPush cr
where where
tocr = cWorld . lWorld . creatures . ix cid tocr = cWorld . lWorld . creatures . ix cid
oop = cr ^. crOldOldPos oop = cr ^. crOldOldPos
f v | norm v > 10 = 10 *^ signorm v f v | norm v > 10 = 10 *^ signorm v
| otherwise = v | otherwise = v
pushAgainst :: Point2 -> Point2 -> Point2
pushAgainst x y
| a > norm y = 0
| a > 0 = y - project y x
| otherwise = y
where
-- project y x is the projection of x onto y
a = dotV (normalize y) (project y x)
walkCliffPush :: Creature -> [(Point2,Point2)] -> Point2
walkCliffPush cr xs = pushAgainst (cr ^. crOldPos . _xy - cr ^. crOldOldPos . _xy) (-h xs)
where
cxy = cr ^. crPos . _xy
h = circSegsInside cxy (cr ^. crType . to crRad)
groundCliffPush :: Creature -> [(Point2,Point2)] -> Point2
groundCliffPush cr xs = x *^ h xs
where
--x = max 0.05 $ 0.05 + 0.05 * (1 - dist cxy p / (2*r))
x = max 0 $ 0.25 * (1 - dist cxy p / (2*r)) ** 2
cxy = cr ^. crPos . _xy
r = cr ^. crType . to crRad
h = circSegsInside cxy r
p = circSegsInside' cxy r xs
circSegsInside' :: Point2 -> Float -> [(Point2,Point2)] -> Point2
circSegsInside' p r = \case
[x,y] -> fromJust (uncurry (uncurry intersectLineLine (f x)) (f y))
((x,y):_) -> closestPointOnLine x y p + r *^ normalizeV (vNormal (x-y))
_ -> error "circSegsInside"
where
r' = r+0.5
f (x,y) = (x+r'*^n,y+r'*^n)
where
n = normalizeV (vNormal (x-y))
circSegsInside :: Point2 -> Float -> [(Point2,Point2)] -> Point2
circSegsInside p r = \case
[x,y] -> normalize $ fromJust (uncurry (uncurry intersectLineLine (f x)) (f y)) - p
((x,y):_) -> normalizeV (vNormal (x-y))
_ -> error "circSegsInside"
where
r' = r+0.5
f (x,y) = (x+r'*^n,y+r'*^n)
where
n = normalizeV (vNormal (x-y))
--circTwoLineCorner :: Float -> Point2 -> Point2 -> Point2 -> Point2 -> Maybe Point2
--circTwoLineCorner r x y a b = intersectLineLine x y a b
chasmTestCliffPush :: (Creature -> [(Point2,Point2)] -> Point2) -> Creature -> World -> World
chasmTestCliffPush f' cr w
| (xy:xys) <- filter g (w ^. cWorld . cliffs) =
w
& soundContinue (CrChasm (_crID cr)) (cr ^. crPos . _xy) debrisS (Just 100)
& tocr . crPos . _xy +~ f' cr (xy:xys) -- (f cr (xy:xys)) *^ h xy xys
& chasmRotate cr (uncurry (-) xy)
| any f (w ^. cWorld . chasms) = w & tocr . crStance . carriage .~ Falling -- %~ startFalling
| otherwise = w
where
cxy = cr ^. crPos . _xy
tocr = cWorld . lWorld . creatures . ix (_crID cr)
g = uncurry $ crOnSeg cr
f = pointInPoly cxy
chasmRotate :: Creature -> Point2 -> World -> World
chasmRotate cr v w
| t = rotateTo8 (argV v) w
| otherwise = w
where
t = cr ^. crID == 0 && null (w ^? input . mouseButtons . ix SDL.ButtonRight)
maybeTakeStep :: Int -> Creature -> World -> World
maybeTakeStep cid cr = case (cr ^? crType . strideAmount,cr ^? crType . footForward) of
(Just x,Just ff) | x >= strideLength cr ->
soundMultiFrom
[FootstepSound i | i <- [0 .. 10]]
(cr ^. crPos . _xy)
(chooseFootSound ff)
Nothing
. over (cWorld . lWorld . creatures . ix cid . crType) resetStride
_ -> id
resetStride :: CreatureType -> CreatureType resetStride :: CreatureType -> CreatureType
resetStride ct = case ct ^? footForward of resetStride ct = case ct ^? footForward of
+9 -62
View File
@@ -1,18 +1,15 @@
{-# LANGUAGE LambdaCase #-} {-# LANGUAGE LambdaCase #-}
module Dodge.Creature.Update (updateCreature) where module Dodge.Creature.Update (updateCreature) where
import Dodge.WorldEvent.ThingsHit
import Dodge.Base.You import Dodge.Base.You
import Control.Monad import Control.Monad
import Color import Color
import qualified Data.IntMap.Strict as IM import qualified Data.IntMap.Strict as IM
import qualified Data.List as List
import Data.Maybe import Data.Maybe
import Dodge.Barreloid import Dodge.Barreloid
-- import Dodge.Base.NewID -- import Dodge.Base.NewID
import Dodge.Corpse.Make import Dodge.Corpse.Make
import Dodge.Creature.Action import Dodge.Creature.Action
import Dodge.Creature.Radius
import Dodge.Creature.State import Dodge.Creature.State
import Dodge.Creature.State.WalkCycle import Dodge.Creature.State.WalkCycle
import Dodge.Creature.Vocalization import Dodge.Creature.Vocalization
@@ -25,14 +22,12 @@ import Dodge.Inventory
import Dodge.Lampoid import Dodge.Lampoid
import Dodge.Prop.Gib import Dodge.Prop.Gib
import Dodge.SoundLogic import Dodge.SoundLogic
import Dodge.Update.Camera.Rotate
import FoldableHelp import FoldableHelp
import Geometry import Geometry
import LensHelp import LensHelp
import Linear import Linear
import NewInt import NewInt
import RandomHelp import RandomHelp
import SDL (MouseButton (..))
import Shape import Shape
import ShapePicture.Data import ShapePicture.Data
@@ -41,7 +36,7 @@ import ShapePicture.Data
updateCreature :: Creature -> World -> World updateCreature :: Creature -> World -> World
updateCreature cr updateCreature cr
| cr ^. crPos . _z < negate 300 = (tocr . crHP .~ CrDestroyed Pitted) . destroyAllInvItems cr | cr ^. crPos . _z < negate 300 = (tocr . crHP .~ CrDestroyed Pitted) . destroyAllInvItems cr
| CrIsCorpse _ <- cr ^. crHP = updateCarriage (_crID cr) . chasmTestCorpse cr | CrIsCorpse _ <- cr ^. crHP = updateCarriage (_crID cr)
| null (cr ^? crHP . _HP) = id | null (cr ^? crHP . _HP) = id
| otherwise = updateLivingCreature cr | otherwise = updateLivingCreature cr
where where
@@ -49,7 +44,7 @@ updateCreature cr
updateLivingCreature :: Creature -> World -> World updateLivingCreature :: Creature -> World -> World
updateLivingCreature cr = updateLivingCreature cr =
chasmTestLiving cr . case _crType cr of case _crType cr of
Avatar{} -> Avatar{} ->
(cWorld . lWorld . creatures . ix 0 . crType . avatarPulse %~ updatePulse) (cWorld . lWorld . creatures . ix 0 . crType . avatarPulse %~ updatePulse)
. crUpdate cid . crUpdate cid
@@ -130,7 +125,8 @@ startDeathTimer cr = cr
toDeathCarriage :: Carriage -> Carriage toDeathCarriage :: Carriage -> Carriage
toDeathCarriage = \case toDeathCarriage = \case
Flying {} -> Falling Flying {} -> Falling
x -> x Walking -> OnGround
_ -> Falling
-- could look at the amount of damage here (given by maxDamage) too -- could look at the amount of damage here (given by maxDamage) too
corpseOrGib :: Creature -> World -> World corpseOrGib :: Creature -> World -> World
@@ -142,7 +138,7 @@ corpseOrGib cr = case cr ^? crDamage . to maxDamageType . _Just . _1 of
sethp (CrIsCorpse $ poisonSPic thecorpse) sethp (CrIsCorpse $ poisonSPic thecorpse)
. dodeathsound PoisonDeath . dodeathsound PoisonDeath
Just PhysicalDamage Just PhysicalDamage
| _crPain cr > 200 -> | _crPain cr > 300 ->
makeCrGibs cr makeCrGibs cr
. sethp (CrDestroyed Gibbed) . sethp (CrDestroyed Gibbed)
. dodeathsound GibsDeath . dodeathsound GibsDeath
@@ -172,59 +168,10 @@ poisonSPic = _1 %~ overColSH (mixColors 0.5 0.5 green . normalizeColor)
dropAll :: Creature -> World -> World dropAll :: Creature -> World -> World
dropAll cr w = foldl' (flip (dropItem cr)) w . reverse . IM.keys . _unNIntMap $ _crInv cr dropAll cr w = foldl' (flip (dropItem cr)) w . reverse . IM.keys . _unNIntMap $ _crInv cr
chasmTestLiving :: Creature -> World -> World --startFalling :: Creature -> Creature
chasmTestLiving cr w --startFalling cr = case cr ^. crStance . carriage of
| Flying {} <- cr ^. crStance . carriage = w -- Walking -> cr & crStance . carriage .~ Falling
| Falling {} <- cr ^. crStance . carriage = w -- _ -> cr & crStance . carriage .~ Falling
| Just (x, y) <- List.find g (w ^. cWorld . cliffs) =
w
& soundContinue (CrChasm (_crID cr)) (cr ^. crPos . _xy) debrisS (Just 100)
& tocr . crPos . _xy -~ normalizeV (vNormal (x - y))
& chasmRotate cr (x - y)
| any f (w ^. cWorld . chasms) = w & tocr %~ startFalling
| otherwise = w
where
tocr = cWorld . lWorld . creatures . ix (_crID cr)
g = uncurry $ crOnSeg cr
f = pointInPoly (cr ^. crPos . _xy)
startFalling :: Creature -> Creature
startFalling cr = case cr ^. crStance . carriage of
Walking -> cr & crStance . carriage .~ Falling
_ -> cr & crStance . carriage .~ Falling
chasmTestCorpse :: Creature -> World -> World
chasmTestCorpse cr w
| (xy:xys) <- filter g (w ^. cWorld . cliffs) =
w
& soundContinue (CrChasm (_crID cr)) (cr ^. crPos . _xy) debrisS (Just 100)
& tocr . crPos . _xy +~ h xy xys
| any f (w ^. cWorld . chasms) = w & tocr %~ startFalling
| otherwise = w
where
h :: (Point2,Point2) -> [(Point2,Point2)] -> Point2
h (x,y) [] = normalizeV (vNormal (x-y))
h x (y:_) = unitVectorAtAngle $ tweenAngles (d1/(d1+d2)) (h' x) (h' y)
where
h' :: (Point2,Point2) -> Float
h' = argV . vNormal . uncurry (-)
d a = uncurry closestPointOnLine a (cr ^. crPos . _xy)
d1 :: Float
d1 = norm (cxy - d x)
d2 :: Float
d2 = norm (cxy - d y)
cxy = cr ^. crPos . _xy
tocr = cWorld . lWorld . creatures . ix (_crID cr)
g = uncurry $ circOnSeg cxy (crRad $ cr ^. crType)
f = pointInPoly cxy
chasmRotate :: Creature -> Point2 -> World -> World
chasmRotate cr v w
| t = rotateTo8 (argV v) w
| otherwise = w
where
t = cr ^. crID == 0 && null (w ^? input . mouseButtons . ix SDL.ButtonRight)
updatePulse :: Pulse -> Pulse updatePulse :: Pulse -> Pulse
updatePulse p updatePulse p
+29 -26
View File
@@ -2814,20 +2814,22 @@ changeSwapWith src/Dodge/Inventory.hs 283;" f
charToTuple src/Picture/Base.hs 312;" f charToTuple src/Picture/Base.hs 312;" f
charToTupleGrad src/Picture/Text.hs 18;" f charToTupleGrad src/Picture/Text.hs 18;" f
chartreuse src/Color.hs 51;" f chartreuse src/Color.hs 51;" f
chaseCorpse src/Dodge/Corpse/Make.hs 32;" f
chaseCrit src/Dodge/Creature/ChaseCrit.hs 28;" f chaseCrit src/Dodge/Creature/ChaseCrit.hs 28;" f
chaseCritInternal src/Dodge/Humanoid.hs 11;" f chaseCritInternal src/Dodge/Humanoid.hs 11;" f
chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 123;" f chaseCritMv src/Dodge/Creature/ReaderUpdate.hs 123;" f
chaseUpperBody src/Dodge/Creature/Picture.hs 77;" f chaseUpperBody src/Dodge/Creature/Picture.hs 77;" f
chasmRotate src/Dodge/Creature/Update.hs 221;" f chasmRotate src/Dodge/Creature/State/WalkCycle.hs 99;" f
chasmSimpleMaze src/Dodge/Room/Tutorial.hs 375;" f chasmSimpleMaze src/Dodge/Room/Tutorial.hs 375;" f
chasmSpitTerminal src/Dodge/Room/Tutorial.hs 307;" f chasmSpitTerminal src/Dodge/Room/Tutorial.hs 307;" f
chasmTestCorpse src/Dodge/Creature/Update.hs 195;" f chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 70;" f
chasmTestLiving src/Dodge/Creature/Update.hs 174;" f chasmTestLiving src/Dodge/Creature/State/WalkCycle.hs 85;" f
chasmTestOnGround src/Dodge/Creature/State/WalkCycle.hs 106;" f
chasmWallToSurface src/Dodge/Base/Collide.hs 121;" f chasmWallToSurface src/Dodge/Base/Collide.hs 121;" f
checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f
checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f
checkDeath src/Dodge/Creature/Update.hs 99;" f checkDeath src/Dodge/Creature/Update.hs 95;" f
checkDeath' src/Dodge/Creature/Update.hs 102;" f checkDeath' src/Dodge/Creature/Update.hs 98;" f
checkEndGame src/Dodge/Update.hs 859;" f checkEndGame src/Dodge/Update.hs 859;" f
checkErrorGL src/Shader/Compile.hs 86;" f checkErrorGL src/Shader/Compile.hs 86;" f
checkFBO src/Framebuffer/Check.hs 6;" f checkFBO src/Framebuffer/Check.hs 6;" f
@@ -2842,7 +2844,7 @@ chemFuelPouch src/Dodge/Item/Ammo.hs 81;" f
chestPQ src/Dodge/Creature/HandPos.hs 180;" f chestPQ src/Dodge/Creature/HandPos.hs 180;" f
chooseCursorBorders src/Dodge/Render/List.hs 141;" f chooseCursorBorders src/Dodge/Render/List.hs 141;" f
chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f
chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 64;" f chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 155;" f
chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f
chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f
circHitWall src/Dodge/Base/Collide.hs 244;" f circHitWall src/Dodge/Base/Collide.hs 244;" f
@@ -2948,7 +2950,7 @@ copierItemUpdate src/Dodge/Creature/State.hs 136;" f
copyItemToFloor src/Dodge/FloorItem.hs 14;" f copyItemToFloor src/Dodge/FloorItem.hs 14;" f
corDoor src/Dodge/Room/Room.hs 411;" f corDoor src/Dodge/Room/Room.hs 411;" f
cornerList src/Preload/Render.hs 236;" f cornerList src/Preload/Render.hs 236;" f
corpseOrGib src/Dodge/Creature/Update.hs 135;" f corpseOrGib src/Dodge/Creature/Update.hs 132;" f
corridor src/Dodge/Room/Corridor.hs 17;" f corridor src/Dodge/Room/Corridor.hs 17;" f
corridorBoss src/Dodge/LockAndKey.hs 135;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f
corridorN src/Dodge/Room/Corridor.hs 58;" f corridorN src/Dodge/Room/Corridor.hs 58;" f
@@ -2997,7 +2999,7 @@ crShape src/Dodge/Creature/Shape.hs 8;" f
crSpring src/Dodge/Update.hs 968;" f crSpring src/Dodge/Update.hs 968;" f
crStratConMatches src/Dodge/Creature/Test.hs 78;" f crStratConMatches src/Dodge/Creature/Test.hs 78;" f
crStrength src/Dodge/Creature/Statistics.hs 29;" f crStrength src/Dodge/Creature/Statistics.hs 29;" f
crUpdate src/Dodge/Creature/Update.hs 92;" f crUpdate src/Dodge/Creature/Update.hs 88;" f
crUpdateInvidLocations src/Dodge/Inventory/Location.hs 67;" f crUpdateInvidLocations src/Dodge/Inventory/Location.hs 67;" f
crUpdateItemLocations src/Dodge/Inventory/Location.hs 49;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 49;" f
crVocalResetTime src/Dodge/Creature/Vocalization.hs 59;" f crVocalResetTime src/Dodge/Creature/Vocalization.hs 59;" f
@@ -3446,7 +3448,7 @@ drawZone src/Dodge/Debug/Picture.hs 152;" f
drawZoneCirc src/Dodge/Debug/Picture.hs 293;" f drawZoneCirc src/Dodge/Debug/Picture.hs 293;" f
drawZoneCol src/Dodge/Debug/Picture.hs 149;" f drawZoneCol src/Dodge/Debug/Picture.hs 149;" f
drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 286;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 286;" f
dropAll src/Dodge/Creature/Update.hs 171;" f dropAll src/Dodge/Creature/Update.hs 168;" f
dropInventoryPath src/Dodge/HeldUse.hs 1371;" f dropInventoryPath src/Dodge/HeldUse.hs 1371;" f
dropItem src/Dodge/Creature/Action.hs 161;" f dropItem src/Dodge/Creature/Action.hs 161;" f
dropper src/Dodge/Item/Scope.hs 82;" f dropper src/Dodge/Item/Scope.hs 82;" f
@@ -3786,7 +3788,7 @@ hotkeyToChar src/Dodge/Inventory/SelectionList.hs 185;" f
hotkeyToScancode src/Dodge/Creature/YourControl.hs 62;" f hotkeyToScancode src/Dodge/Creature/YourControl.hs 62;" f
hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f hotkeyToString src/Dodge/Inventory/SelectionList.hs 182;" f
hoverCrit src/Dodge/Creature/ChaseCrit.hs 35;" f hoverCrit src/Dodge/Creature/ChaseCrit.hs 35;" f
hoverCritHoverSound src/Dodge/Creature/Update.hs 69;" f hoverCritHoverSound src/Dodge/Creature/Update.hs 65;" f
hoverCritInternal src/Dodge/Humanoid.hs 28;" f hoverCritInternal src/Dodge/Humanoid.hs 28;" f
hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 152;" f hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 152;" f
hoverDeathSounds src/Dodge/Creature/Vocalization.hs 52;" f hoverDeathSounds src/Dodge/Creature/Vocalization.hs 52;" f
@@ -4117,7 +4119,7 @@ makeButton src/Dodge/LevelGen/Switch.hs 16;" f
makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f makeCloudAt src/Dodge/WorldEvent/Cloud.hs 7;" f
makeColorTermLine src/Dodge/Terminal.hs 124;" f makeColorTermLine src/Dodge/Terminal.hs 124;" f
makeColorTermPara src/Dodge/Terminal.hs 121;" f makeColorTermPara src/Dodge/Terminal.hs 121;" f
makeCorpse src/Dodge/Corpse/Make.hs 13;" f makeCorpse src/Dodge/Corpse/Make.hs 15;" f
makeCrGibs src/Dodge/Prop/Gib.hs 19;" f makeCrGibs src/Dodge/Prop/Gib.hs 19;" f
makeDebris src/Dodge/Block/Debris.hs 75;" f makeDebris src/Dodge/Block/Debris.hs 75;" f
makeDebrisDirected src/Dodge/Block/Debris.hs 101;" f makeDebrisDirected src/Dodge/Block/Debris.hs 101;" f
@@ -4182,6 +4184,7 @@ maybeExitCombine src/Dodge/Update/Input/InGame.hs 538;" f
maybeOpenConsole src/Dodge/Update.hs 133;" f maybeOpenConsole src/Dodge/Update.hs 133;" f
maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f
maybeTakeOne src/RandomHelp.hs 135;" f maybeTakeOne src/RandomHelp.hs 135;" f
maybeTakeStep src/Dodge/Creature/State/WalkCycle.hs 133;" f
maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f
mcBackgroundSound src/Dodge/Machine/Update.hs 152;" f mcBackgroundSound src/Dodge/Machine/Update.hs 152;" f
mcColor src/Dodge/Machine/Draw.hs 82;" f mcColor src/Dodge/Machine/Draw.hs 82;" f
@@ -4337,7 +4340,7 @@ nodeNear src/Dodge/Path.hs 94;" f
nodesNear src/Dodge/Path.hs 100;" f nodesNear src/Dodge/Path.hs 100;" f
nonConvexChasm src/Dodge/Room/Tutorial.hs 265;" f nonConvexChasm src/Dodge/Room/Tutorial.hs 265;" f
nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f
normalGait src/Dodge/Creature/State/WalkCycle.hs 59;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 150;" f
normalTo8 src/Shader/Poke.hs 466;" f normalTo8 src/Shader/Poke.hs 466;" f
normalizeAngle src/Geometry/Vector.hs 130;" f normalizeAngle src/Geometry/Vector.hs 130;" f
normalizeAnglePi src/Dodge/Base.hs 154;" f normalizeAnglePi src/Dodge/Base.hs 154;" f
@@ -4482,7 +4485,7 @@ pointerToItemID src/Dodge/Item/Location.hs 42;" f
pointerYourRootItem src/Dodge/Item/Location.hs 33;" f pointerYourRootItem src/Dodge/Item/Location.hs 33;" f
pointerYourSelectedItem src/Dodge/Item/Location.hs 26;" f pointerYourSelectedItem src/Dodge/Item/Location.hs 26;" f
pointsToPoly src/Geometry/ConvexPoly.hs 37;" f pointsToPoly src/Geometry/ConvexPoly.hs 37;" f
poisonSPic src/Dodge/Creature/Update.hs 167;" f poisonSPic src/Dodge/Creature/Update.hs 164;" f
poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f
poke34 src/Shader/Poke.hs 509;" f poke34 src/Shader/Poke.hs 509;" f
pokeArrayOff src/Shader/Poke.hs 521;" f pokeArrayOff src/Shader/Poke.hs 521;" f
@@ -4723,7 +4726,7 @@ replaceNullWith src/Dodge/Creature/ReaderUpdate.hs 184;" f
replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f replacePutID src/Dodge/Placement/Instance/Wall.hs 81;" f
resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 63;" f resetCrVocCoolDown src/Dodge/Creature/Vocalization.hs 63;" f
resetPLUse src/Dodge/PlacementSpot.hs 94;" f resetPLUse src/Dodge/PlacementSpot.hs 94;" f
resetStride src/Dodge/Creature/State/WalkCycle.hs 54;" f resetStride src/Dodge/Creature/State/WalkCycle.hs 145;" f
resetTerminal src/Dodge/WorldEffect.hs 158;" f resetTerminal src/Dodge/WorldEffect.hs 158;" f
resizeFBOTO src/Framebuffer/Update.hs 185;" f resizeFBOTO src/Framebuffer/Update.hs 185;" f
resizeFBOTO' src/Framebuffer/Update.hs 197;" f resizeFBOTO' src/Framebuffer/Update.hs 197;" f
@@ -4849,7 +4852,7 @@ scaleSH src/Shape.hs 266;" f
scalp src/Dodge/Creature/Picture.hs 156;" f scalp src/Dodge/Creature/Picture.hs 156;" f
scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f
scodeToChar src/Dodge/ScodeToChar.hs 6;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f
scorchSPic src/Dodge/Creature/Update.hs 164;" f scorchSPic src/Dodge/Creature/Update.hs 161;" f
screenBox src/Dodge/Base/Window.hs 54;" f screenBox src/Dodge/Base/Window.hs 54;" f
screenPolygon src/Dodge/Base/Window.hs 18;" f screenPolygon src/Dodge/Base/Window.hs 18;" f
screenPolygonBord src/Dodge/Base/Window.hs 28;" f screenPolygonBord src/Dodge/Base/Window.hs 28;" f
@@ -5005,10 +5008,10 @@ showEquipItem src/Dodge/Item/Display.hs 108;" f
showInt src/Dodge/Item/Info.hs 75;" f showInt src/Dodge/Item/Info.hs 75;" f
showIntsString src/Dodge/Tree/Compose.hs 130;" f showIntsString src/Dodge/Tree/Compose.hs 130;" f
showInventoryPathing src/Dodge/Item/Display.hs 86;" f showInventoryPathing src/Dodge/Item/Display.hs 86;" f
showManObj src/Dodge/TestString.hs 97;" f showManObj src/Dodge/TestString.hs 98;" f
showMuzzlePositions src/Dodge/Debug.hs 292;" f showMuzzlePositions src/Dodge/Debug.hs 292;" f
showTerminalError src/Dodge/Debug/Terminal.hs 80;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f
showTimeFlow src/Dodge/TestString.hs 114;" f showTimeFlow src/Dodge/TestString.hs 115;" f
shrinkPolyOnEdges src/Geometry/Polygon.hs 198;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 198;" f
shrinkVert src/Geometry/Polygon.hs 202;" f shrinkVert src/Geometry/Polygon.hs 202;" f
shuffle src/RandomHelp.hs 68;" f shuffle src/RandomHelp.hs 68;" f
@@ -5141,9 +5144,8 @@ stackText src/Picture/Base.hs 180;" f
stackedInventory src/Dodge/Creature.hs 326;" f stackedInventory src/Dodge/Creature.hs 326;" f
startCr src/Dodge/Creature.hs 90;" f startCr src/Dodge/Creature.hs 90;" f
startCrafts src/Dodge/Room/Start.hs 94;" f startCrafts src/Dodge/Room/Start.hs 94;" f
startDeathTimer src/Dodge/Creature/Update.hs 123;" f startDeathTimer src/Dodge/Creature/Update.hs 119;" f
startDrag src/Dodge/Update/Input/InGame.hs 286;" f startDrag src/Dodge/Update/Input/InGame.hs 286;" f
startFalling src/Dodge/Creature/Update.hs 190;" f
startInvList src/Dodge/Creature.hs 105;" f startInvList src/Dodge/Creature.hs 105;" f
startInventory src/Dodge/Creature.hs 108;" f startInventory src/Dodge/Creature.hs 108;" f
startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f
@@ -5292,7 +5294,7 @@ toBinary src/Dodge/Inventory/SelectionList.hs 138;" f
toBothLnk src/Dodge/RoomLink.hs 136;" f toBothLnk src/Dodge/RoomLink.hs 136;" f
toClosestMultiple src/HelpNum.hs 3;" f toClosestMultiple src/HelpNum.hs 3;" f
toColor8 src/Color.hs 158;" f toColor8 src/Color.hs 158;" f
toDeathCarriage src/Dodge/Creature/Update.hs 129;" f toDeathCarriage src/Dodge/Creature/Update.hs 125;" f
toFloatVAs src/Shader/Compile.hs 66;" f toFloatVAs src/Shader/Compile.hs 66;" f
toLabel src/Dodge/Cleat.hs 16;" f toLabel src/Dodge/Cleat.hs 16;" f
toMultiset src/Multiset.hs 64;" f toMultiset src/Multiset.hs 64;" f
@@ -5316,7 +5318,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 671;" f
topInvW src/Dodge/ListDisplayParams.hs 54;" f topInvW src/Dodge/ListDisplayParams.hs 54;" f
topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f
topPrismIndices src/Shader/Poke.hs 410;" f topPrismIndices src/Shader/Poke.hs 410;" f
topTestPart src/Dodge/TestString.hs 92;" f topTestPart src/Dodge/TestString.hs 93;" f
torchShape src/Dodge/Item/Draw/SPic.hs 277;" f torchShape src/Dodge/Item/Draw/SPic.hs 277;" f
torqueAmount src/Dodge/HeldUse.hs 606;" f torqueAmount src/Dodge/HeldUse.hs 606;" f
torqueCr src/Dodge/WorldEffect.hs 85;" f torqueCr src/Dodge/WorldEffect.hs 85;" f
@@ -5437,14 +5439,14 @@ updateBulVel src/Dodge/Bullet.hs 57;" f
updateBullet src/Dodge/Bullet.hs 22;" f updateBullet src/Dodge/Bullet.hs 22;" f
updateBullets src/Dodge/Update.hs 646;" f updateBullets src/Dodge/Update.hs 646;" f
updateCamera src/Dodge/Update/Camera.hs 33;" f updateCamera src/Dodge/Update/Camera.hs 33;" f
updateCarriage src/Dodge/Creature/State/WalkCycle.hs 14;" f updateCarriage src/Dodge/Creature/State/WalkCycle.hs 18;" f
updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 19;" f updateCarriage' src/Dodge/Creature/State/WalkCycle.hs 23;" f
updateCloseObjects src/Dodge/Inventory.hs 126;" f updateCloseObjects src/Dodge/Inventory.hs 126;" f
updateCloud src/Dodge/Update.hs 888;" f updateCloud src/Dodge/Update.hs 888;" f
updateClouds src/Dodge/Update.hs 757;" f updateClouds src/Dodge/Update.hs 757;" f
updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f
updateCombineSections src/Dodge/DisplayInventory.hs 47;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f
updateCreature src/Dodge/Creature/Update.hs 40;" f updateCreature src/Dodge/Creature/Update.hs 36;" f
updateCreatureGroups src/Dodge/Update.hs 618;" f updateCreatureGroups src/Dodge/Update.hs 618;" f
updateCreatureSoundPositions src/Dodge/Update.hs 597;" f updateCreatureSoundPositions src/Dodge/Update.hs 597;" f
updateCreatureStride src/Dodge/Update.hs 374;" f updateCreatureStride src/Dodge/Update.hs 374;" f
@@ -5493,7 +5495,7 @@ updateLaser src/Dodge/Laser/Update.hs 12;" f
updateLasers src/Dodge/Update.hs 497;" f updateLasers src/Dodge/Update.hs 497;" f
updateLeftParentSF src/Dodge/Item/Grammar.hs 177;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 177;" f
updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f
updateLivingCreature src/Dodge/Creature/Update.hs 49;" f updateLivingCreature src/Dodge/Creature/Update.hs 45;" f
updateLongPressInGame src/Dodge/Update/Input/InGame.hs 417;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 417;" f
updateMachine src/Dodge/Machine/Update.hs 24;" f updateMachine src/Dodge/Machine/Update.hs 24;" f
updateMagnets src/Dodge/Update.hs 391;" f updateMagnets src/Dodge/Update.hs 391;" f
@@ -5510,7 +5512,7 @@ updatePlasmaBall src/Dodge/Update.hs 511;" f
updatePlasmaBalls src/Dodge/Update.hs 653;" f updatePlasmaBalls src/Dodge/Update.hs 653;" f
updatePreload src/Preload/Update.hs 21;" f updatePreload src/Preload/Update.hs 21;" f
updateProjectile src/Dodge/Projectile/Update.hs 26;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f
updatePulse src/Dodge/Creature/Update.hs 228;" f updatePulse src/Dodge/Creature/Update.hs 176;" f
updatePulseBall src/Dodge/Update.hs 531;" f updatePulseBall src/Dodge/Update.hs 531;" f
updatePulseLaser src/Dodge/Update.hs 700;" f updatePulseLaser src/Dodge/Update.hs 700;" f
updatePulseLasers src/Dodge/Update.hs 506;" f updatePulseLasers src/Dodge/Update.hs 506;" f
@@ -5618,6 +5620,7 @@ visibleWalls src/Dodge/Base/Collide.hs 222;" f
visionCheck src/Dodge/Creature/Perception.hs 165;" f visionCheck src/Dodge/Creature/Perception.hs 165;" f
volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f
volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f
walkCliffPush src/Dodge/Creature/State/WalkCycle.hs 54;" f
walkNozzle src/Dodge/HeldUse.hs 826;" f walkNozzle src/Dodge/HeldUse.hs 826;" f
walkableNodeNear src/Dodge/Path.hs 90;" f walkableNodeNear src/Dodge/Path.hs 90;" f
wallBlips src/Dodge/RadarSweep.hs 99;" f wallBlips src/Dodge/RadarSweep.hs 99;" f