diff --git a/src/Dodge/LevelGen/StaticWalls.hs b/src/Dodge/LevelGen/StaticWalls.hs index d868064db..db2c07f67 100644 --- a/src/Dodge/LevelGen/StaticWalls.hs +++ b/src/Dodge/LevelGen/StaticWalls.hs @@ -6,7 +6,7 @@ module Dodge.LevelGen.StaticWalls ( cutWalls , removeInverseWalls , expandPolyByFixed - , cutPoly + , carvePoly , expandPolyCorners ) where @@ -35,13 +35,13 @@ cutWalls ps wls = case mapMaybe (`checkWallRight` newWalls) newWalls of [] -> newWalls _ -> cutWallsRetry 0 ps wls where - newWalls = cutPoly ps wls + newWalls = carvePoly ps wls cutWallsRetry :: Int -> [Point2] -> [WallP] -> [WallP] cutWallsRetry i ps wls = case mapMaybe (`checkWallRight` newWalls) newWalls of [] -> newWalls _ -> cutWallsRetry (i+1) ps wls where - newWalls = cutPoly ps' wls + newWalls = carvePoly ps' wls ps' = map (rotateV a) $ expandPolyBy x ps x = fromIntegral i / 100 a | even i = 0.001 @@ -74,8 +74,8 @@ checkWallRight (x,y) wls -- wall may be added where it shouldn't because the wrong facing wall is -- collided with -- Be aware that we do not remove all colinear walls; this may still cause bugs -cutPoly :: [Point2] -> [WallP] -> [WallP] -cutPoly qs wls = nubOrd +carvePoly :: [Point2] -> [WallP] -> [WallP] +carvePoly qs wls = nubOrd . removeInverseWalls . filter (not . wallIsZeroLength) . fuseWallsWith zs diff --git a/src/Dodge/LevelGen/StaticWalls/Deprecated.hs b/src/Dodge/LevelGen/StaticWalls/Deprecated.hs index 193353410..a7176f4bd 100644 --- a/src/Dodge/LevelGen/StaticWalls/Deprecated.hs +++ b/src/Dodge/LevelGen/StaticWalls/Deprecated.hs @@ -49,7 +49,7 @@ cutWalls'' ps wls = case mapMaybe (`checkWallRight` newWalls) newWalls of ++ "\nWalls after cut:\n" ++ unlines (map show newWalls) where - newWalls = cutPoly ps wls + newWalls = carvePoly ps wls errsL = mapMaybe (`checkWallLeft` newWalls) newWalls -- | Given a specific wall and list of walls, checks that the number of walls leaving the -- second point is the same as the number of walls entering the second point of diff --git a/src/Dodge/Room/Tutorial.hs b/src/Dodge/Room/Tutorial.hs index 8203801cb..573b172f8 100644 --- a/src/Dodge/Room/Tutorial.hs +++ b/src/Dodge/Room/Tutorial.hs @@ -57,11 +57,12 @@ tutAnoTree = do foldMTRS [ tToBTree "TutStartRez" . return . cleatOnward <$> tutRezBox , corDoor + , tToBTree "" . return . cleatOnward <$> xChasm 200 200 -- , tToBTree "" . return . cleatOnward <$> (cChasm -- <&> rmPmnts .:~ (sps0 (PutCrit slimeCrit) & plSpot . psPos .~ V2 100 20)) -- , corDoor -- , loadAmmoTut --- , corDoor + , corDoor , chasmSpitTerminal , corDoor , tutHub @@ -141,6 +142,27 @@ tutDrop = do , makeTermLine "-------------------------------------------" ] +xChasm :: Float -> Float -> State LayoutVars Room +xChasm x y = shuffleLinks =<< putSingleLight (roomRect x y 2 2 + & rmLinks %~ (setOutLinks f . setInLinks f) + & rmPmnts <>~ fmap g [id,vNormal,vNormal.vNormal,vNormal.vNormal.vNormal] + ) + where + g g' = sps0 $ putConvexChasm (ps & each %~ g' + & each +~ V2 (x/2) (y/2)) + ps = fst (cutPoly (V2 x' (y'-10)) (V2 (x'-10) y') $ rectWH x' y') + & each -~ V2 (x/4+10) (y/4+10) + x' = x/4 - 10 + y' = y/4 - 10 + f rl = FromEdge North 1 `S.member` xs || FromEdge East 1 `S.member` xs + where + xs = rl ^. rlType +-- & rmLinks %~ setOutLinks (isCornerLink NorthWest) +-- <&> rmLinks +-- %~ setInLinks (isCornerLink SouthWest) +-- <&> rmPmnts +-- <>~ [sps0 $ putConvexChasm (rectNSWE (y - 50) 50 0 (x - 50))] + cChasm :: State LayoutVars Room cChasm = do x <- state $ randomR (150, 300) diff --git a/src/Geometry/Intersect.hs b/src/Geometry/Intersect.hs index b4f2ee038..95f19027c 100644 --- a/src/Geometry/Intersect.hs +++ b/src/Geometry/Intersect.hs @@ -4,6 +4,7 @@ {- Testing for and finding intersection points. -} module Geometry.Intersect where +import Data.List (sortOn) import Control.Applicative import Control.Lens import Control.Monad @@ -264,6 +265,14 @@ intersectSegPolyFirst a b xs = foldr (<|>) Nothing $ zipWith lineColl xs (tail x where lineColl = intersectSegSeg a b +-- orders intersecting points according to the line +intersectLinePoly :: Point2 -> Point2 -> [Point2] -> [Point2] +intersectLinePoly a b (p:ps) = sortOn (dotV (b - a)) + . catMaybes + $ zipWith (\x y -> intersectSegLine x y a b) (p:ps) (ps ++[p]) +intersectLinePoly _ _ [] = error "intersectLinePoly empty polygon" + + {- | Given a line and a point return the point on the line closest to the point. -} diff --git a/src/Geometry/Polygon.hs b/src/Geometry/Polygon.hs index 399125681..4674c8c5e 100644 --- a/src/Geometry/Polygon.hs +++ b/src/Geometry/Polygon.hs @@ -202,3 +202,41 @@ shrinkPolyOnEdges _ _ = error "too few vertices in polygon" shrinkVert :: Float -> [Point2] -> Point2 shrinkVert d [x, y, z] = x +.+ (d *.* normalizeV (x -.- y)) +.+ (d *.* normalizeV (z -.- y)) shrinkVert _ _ = error "wrong number of vertices" + +-- divide a polygon into two along a line +-- assumes the line intersects the polygon exactly twice, nocolinearity +-- this may duplicate points +-- this should be tested: there are many possible points of failure... +cutPoly :: Point2 -> Point2 -> [Point2] -> ([Point2],[Point2]) +cutPoly a b (p:ps) + | not (isLHS a b p) && not (isRHS a b p) = cutPolyL a b ps p p [p] [p] + | isLHS a b p = cutPolyL a b ps p p [p] [] + | otherwise = cutPolyR a b ps p p [] [p] +cutPoly _ _ [] = error "cutPoly empty poly" + +cutPolyL :: Point2 -> Point2 -> [Point2] -> Point2 -> Point2 -> [Point2] -> [Point2] -> ([Point2], [Point2]) +cutPolyL a b (p:ps) e x ls rs + | isLHS a b p = cutPolyL a b ps e p (p\:ls) rs + | otherwise = case intersectLineLine x p a b of + Nothing -> error "cutPolyL nonintersecting lines" + Just p' -> cutPolyR a b ps e p (p'\:ls) (p\:p'\:rs) +cutPolyL a b [] e x ls rs = case intersectSegLine x e a b of + Nothing -> (reverse ls,reverse rs) + Just p -> (reverse (p\:ls), reverse (p\:rs)) + +cutPolyR :: Point2 -> Point2 -> [Point2] -> Point2 -> Point2 -> [Point2] -> [Point2] -> ([Point2], [Point2]) +cutPolyR a b (p:ps) e x ls rs + | isRHS a b p = cutPolyR a b ps e p ls (p\:rs) + | otherwise = case intersectLineLine x p a b of + Nothing -> error "cutPolyR nonintersecting lines" + Just p' -> cutPolyL a b ps e p (p\:p'\:ls) (p'\:rs) +cutPolyR a b [] e x ls rs = case intersectSegLine x e a b of + Nothing -> (reverse ls,reverse rs) + Just p -> (reverse (p\:ls), reverse (p\:rs)) + +infixr 5 \: +(\:) :: Eq a => a -> [a] -> [a] +(\:) x (y:ys) + | x /= y = x:y:ys + | otherwise = y:ys +(\:) x [] = [x] diff --git a/tags b/tags index 3262294aa..4da74243d 100644 --- a/tags +++ b/tags @@ -74,11 +74,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 81;" C +AutoCrit src/Dodge/Data/Creature/Misc.hs 82;" C AutoTrigger src/Dodge/Data/TriggerType.hs 8;" C -AvPosture src/Dodge/Data/Creature/Misc.hs 85;" C +AvPosture src/Dodge/Data/Creature/Misc.hs 86;" C Avatar src/Dodge/Data/Creature/Misc.hs 47;" C -AvatarPosture src/Dodge/Data/Creature/Misc.hs 85;" t +AvatarPosture src/Dodge/Data/Creature/Misc.hs 86;" 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 @@ -104,10 +104,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 41;" C -BarrelCrit src/Dodge/Data/Creature/Misc.hs 82;" C +BarrelCrit src/Dodge/Data/Creature/Misc.hs 83;" C BarrelHiss src/Dodge/Data/SoundOrigin.hs 34;" C -BarrelType src/Dodge/Data/Creature/Misc.hs 97;" t -Barreloid src/Dodge/Data/Creature/Misc.hs 93;" C +BarrelType src/Dodge/Data/Creature/Misc.hs 98;" t +Barreloid src/Dodge/Data/Creature/Misc.hs 94;" 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 @@ -283,7 +283,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 87;" t +CreatureShape src/Dodge/Data/Creature/Misc.hs 88;" 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 @@ -402,7 +402,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 99;" C +ExplosiveBarrel src/Dodge/Data/Creature/Misc.hs 100;" 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 @@ -556,7 +556,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 88;" C +Humanoid src/Dodge/Data/Creature/Misc.hs 89;" 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 @@ -644,7 +644,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 83;" C +LampCrit src/Dodge/Data/Creature/Misc.hs 84;" C Large src/Shape/Data.hs 25;" C LasBeamCombine src/Dodge/Data/Beam.hs 38;" C LasGunFlare src/Dodge/Data/Muzzle.hs 34;" C @@ -701,7 +701,7 @@ MODBlockedString src/Dodge/Data/Universe.hs 106;" C MODString src/Dodge/Data/Universe.hs 105;" C MODStringOption src/Dodge/Data/Universe.hs 107;" C MOTOR src/Dodge/Data/Item/Combine.hs 63;" C -MPO src/Dodge/Base/Collide.hs 98;" t +MPO src/Dodge/Base/Collide.hs 109;" t MTRS src/Dodge/Data/MTRS.hs 6;" t MTree src/Dodge/Data/MetaTree.hs 12;" C Machine src/Dodge/Data/Machine.hs 30;" t @@ -852,7 +852,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 94;" C +NonDrawnCreature src/Dodge/Data/Creature/Misc.hs 95;" 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 @@ -996,7 +996,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 98;" C +PlainBarrel src/Dodge/Data/Creature/Misc.hs 99;" 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 @@ -1282,7 +1282,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 80;" C +SwarmCrit src/Dodge/Data/Creature/Misc.hs 81;" 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 @@ -1559,7 +1559,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 82;" f +_barrelType src/Dodge/Data/Creature/Misc.hs 83;" 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 @@ -1951,9 +1951,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 83;" f -_lampHeight src/Dodge/Data/Creature/Misc.hs 83;" f -_lampLSID src/Dodge/Data/Creature/Misc.hs 83;" f +_lampColor src/Dodge/Data/Creature/Misc.hs 84;" f +_lampHeight src/Dodge/Data/Creature/Misc.hs 84;" f +_lampLSID src/Dodge/Data/Creature/Misc.hs 84;" 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 @@ -2114,7 +2114,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 99;" f +_piercedPoints src/Dodge/Data/Creature/Misc.hs 100;" 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 @@ -2325,17 +2325,18 @@ _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 89;" f -_skinLower src/Dodge/Data/Creature/Misc.hs 91;" f -_skinUpper src/Dodge/Data/Creature/Misc.hs 90;" f +_skinHead src/Dodge/Data/Creature/Misc.hs 90;" f +_skinLower src/Dodge/Data/Creature/Misc.hs 92;" f +_skinUpper src/Dodge/Data/Creature/Misc.hs 91;" 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 76;" f -_slimeIsCompressing src/Dodge/Data/Creature/Misc.hs 77;" f +_slimeCompression src/Dodge/Data/Creature/Misc.hs 77;" f +_slimeIsCompressing src/Dodge/Data/Creature/Misc.hs 78;" f _slimeRad src/Dodge/Data/Creature/Misc.hs 74;" f -_slimeRadChange src/Dodge/Data/Creature/Misc.hs 75;" f -_slimeResetDir src/Dodge/Data/Creature/Misc.hs 78;" f +_slimeRadWobble src/Dodge/Data/Creature/Misc.hs 75;" f +_slimeResetDir src/Dodge/Data/Creature/Misc.hs 79;" f +_slimeSplitTimer src/Dodge/Data/Creature/Misc.hs 76;" f _slinkSpine src/Dodge/Data/Creature/Misc.hs 71;" f _smoothScrollAmount src/Dodge/Data/Input.hs 41;" f _soundAngDist src/Sound/Data.hs 47;" f @@ -2607,7 +2608,7 @@ airlockCrystal src/Dodge/Room/Airlock.hs 251;" f airlockDoubleDoor src/Dodge/Room/Airlock.hs 104;" f airlockSimple src/Dodge/Room/Airlock.hs 129;" f airlockZ src/Dodge/Room/Airlock.hs 166;" f -allVisibleWalls src/Dodge/Base/Collide.hs 234;" f +allVisibleWalls src/Dodge/Base/Collide.hs 245;" f alongSegBy src/Geometry.hs 40;" f alteRifle src/Dodge/Item/Held/Cane.hs 22;" f alteRifleAmmoOrient src/Dodge/Item/Orientation.hs 51;" f @@ -2625,7 +2626,7 @@ angleVV src/Geometry/Vector.hs 58;" f angleVV3 src/Geometry/Vector3D.hs 123;" f angleVVTests test/Spec.hs 67;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 68;" f -anythingHitCirc src/Dodge/Base/Collide.hs 342;" f +anythingHitCirc src/Dodge/Base/Collide.hs 353;" f apply src/Quaternion.hs 78;" f applyCME src/Dodge/HeldUse.hs 397;" f applyClip src/Dodge/Debug.hs 176;" f @@ -2666,7 +2667,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 325;" f +arms src/Dodge/Creature/Picture.hs 326;" f arrow src/Picture/Composite.hs 19;" f arrowPath src/Picture/Composite.hs 8;" f assignHotkey src/Dodge/AssignHotkey.hs 9;" f @@ -2709,7 +2710,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 376;" f +barrelShape src/Dodge/Creature/Picture.hs 377;" 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 @@ -2718,14 +2719,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 363;" f +baseShoulder src/Dodge/Creature/Picture.hs 364;" 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 72;" f -basicCrShape src/Dodge/Creature/Picture.hs 78;" f +basicCrPict src/Dodge/Creature/Picture.hs 73;" f +basicCrShape src/Dodge/Creature/Picture.hs 79;" f basicItemDisplay src/Dodge/Item/Display.hs 23;" f basicMachineApplyDamage src/Dodge/Machine/Damage.hs 6;" f basicMuzFlare src/Dodge/HeldUse.hs 731;" f @@ -2775,7 +2776,7 @@ boolOption src/Dodge/Menu/OptionType.hs 12;" f bossKeyItems src/Dodge/LockAndKey.hs 13;" f bossRoom src/Dodge/Room/Boss.hs 55;" f bounceDir src/Dodge/Bullet.hs 111;" f -bouncePoint src/Dodge/Base/Collide.hs 88;" f +bouncePoint src/Dodge/Base/Collide.hs 99;" f bounceSound src/Dodge/Projectile/Update.hs 74;" f boundPoints src/Bound.hs 9;" f boundPointsRect src/Bound.hs 23;" f @@ -2808,13 +2809,13 @@ buttonFlip src/Dodge/Button/Event.hs 18;" f buzz1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 847;" f buzzS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 605;" f byNthLink src/Dodge/Room/Warning.hs 44;" f -cChasm src/Dodge/Room/Tutorial.hs 142;" f +cChasm src/Dodge/Room/Tutorial.hs 161;" f cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 11;" f calcTexCoord src/Tile.hs 19;" f -canSee src/Dodge/Base/Collide.hs 328;" f -canSeeIndirect src/Dodge/Base/Collide.hs 335;" f +canSee src/Dodge/Base/Collide.hs 339;" f +canSeeIndirect src/Dodge/Base/Collide.hs 346;" f canSpring src/Dodge/Update.hs 989;" f cancelExamineInventory src/Dodge/Item/BackgroundEffect.hs 23;" f capacitor src/Dodge/Item/Ammo.hs 67;" f @@ -2824,6 +2825,7 @@ cardReverse src/Dodge/Base/CardinalPoint.hs 10;" f cardVec src/Dodge/Base/CardinalPoint.hs 17;" f cardinalBetweenAdj src/Dodge/Base/CardinalPoint.hs 43;" f cardinalVectors src/Dodge/FloorItem.hs 24;" f +carvePoly src/Dodge/LevelGen/StaticWalls.hs 77;" f cdtPropagateFold src/Dodge/DoubleTree.hs 189;" f ceilingTo src/Geometry/Zone.hs 15;" f cenLasTur src/Dodge/Room/LasTurret.hs 52;" f @@ -2840,20 +2842,20 @@ 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 274;" f +chaseCorpse src/Dodge/Creature/Picture.hs 275;" 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 152;" f +chaseUpperBody src/Dodge/Creature/Picture.hs 153;" f chasmRotate src/Dodge/Creature/State/WalkCycle.hs 124;" f -chasmSimpleMaze src/Dodge/Room/Tutorial.hs 379;" f -chasmSpitTerminal src/Dodge/Room/Tutorial.hs 312;" f +chasmSimpleMaze src/Dodge/Room/Tutorial.hs 398;" f +chasmSpitTerminal src/Dodge/Room/Tutorial.hs 331;" f chasmTestCliffPush src/Dodge/Creature/State/WalkCycle.hs 106;" f -chasmWallToSurface src/Dodge/Base/Collide.hs 121;" f +chasmWallToSurface src/Dodge/Base/Collide.hs 132;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f -checkDeath src/Dodge/Creature/Update.hs 209;" f -checkDeath' src/Dodge/Creature/Update.hs 212;" f +checkDeath src/Dodge/Creature/Update.hs 207;" f +checkDeath' src/Dodge/Creature/Update.hs 210;" f checkEndGame src/Dodge/Update.hs 875;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -2871,12 +2873,12 @@ chooseEquipPosition src/Dodge/Inventory/RBList.hs 41;" f chooseFootSound src/Dodge/Creature/State/WalkCycle.hs 153;" f chooseFreeSite src/Dodge/Inventory/RBList.hs 47;" f chooseMovementLtAuto src/Dodge/CreatureEffect.hs 78;" f -circHitWall src/Dodge/Base/Collide.hs 247;" f +circHitWall src/Dodge/Base/Collide.hs 258;" f circInPolygon src/Geometry/Polygon.hs 110;" f -circOnAnyCr src/Dodge/Base/Collide.hs 292;" f +circOnAnyCr src/Dodge/Base/Collide.hs 303;" f circOnSeg src/Geometry.hs 101;" f circOnSegNoEndpoints src/Geometry.hs 91;" f -circOnSomeWall src/Dodge/Base/Collide.hs 286;" f +circOnSomeWall src/Dodge/Base/Collide.hs 297;" f circSegsInside src/Dodge/Creature/State/WalkCycle.hs 92;" f circSegsInside' src/Dodge/Creature/State/WalkCycle.hs 81;" f circle src/Picture/Base.hs 172;" f @@ -2920,18 +2922,18 @@ colCrWall src/Dodge/WallCreatureCollisions.hs 27;" f colCrsWalls src/Dodge/WallCreatureCollisions.hs 19;" f collectDamageTypes src/Dodge/Damage.hs 54;" f collectInvItems src/Dodge/Inventory.hs 205;" f -collide3 src/Dodge/Base/Collide.hs 130;" f -collide3Chasm src/Dodge/Base/Collide.hs 114;" f -collide3Chasms src/Dodge/Base/Collide.hs 106;" f -collide3Creature src/Dodge/Base/Collide.hs 163;" f -collide3Floors src/Dodge/Base/Collide.hs 144;" f -collide3Wall src/Dodge/Base/Collide.hs 158;" f -collide3Walls src/Dodge/Base/Collide.hs 139;" f -collide3WallsFloor src/Dodge/Base/Collide.hs 100;" f -collideCircWalls src/Dodge/Base/Collide.hs 259;" f -collidePoint src/Dodge/Base/Collide.hs 54;" f -collidePointTestFilter src/Dodge/Base/Collide.hs 197;" f -collidePointWallsFilter src/Dodge/Base/Collide.hs 211;" f +collide3 src/Dodge/Base/Collide.hs 141;" f +collide3Chasm src/Dodge/Base/Collide.hs 125;" f +collide3Chasms src/Dodge/Base/Collide.hs 117;" f +collide3Creature src/Dodge/Base/Collide.hs 174;" f +collide3Floors src/Dodge/Base/Collide.hs 155;" f +collide3Wall src/Dodge/Base/Collide.hs 169;" f +collide3Walls src/Dodge/Base/Collide.hs 150;" f +collide3WallsFloor src/Dodge/Base/Collide.hs 111;" f +collideCircWalls src/Dodge/Base/Collide.hs 270;" f +collidePoint src/Dodge/Base/Collide.hs 56;" f +collidePointTestFilter src/Dodge/Base/Collide.hs 208;" f +collidePointWallsFilter src/Dodge/Base/Collide.hs 222;" f color src/Picture/Base.hs 100;" f colorLamp src/Dodge/Creature/Lamp.hs 10;" f colorSH src/Shape.hs 239;" f @@ -2976,7 +2978,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 258;" f +corpseOrGib src/Dodge/Creature/Update.hs 256;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 135;" f corridorN src/Dodge/Room/Corridor.hs 58;" f @@ -2984,7 +2986,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 75;" f +crCamouflage src/Dodge/Creature/Picture.hs 76;" f crCanSeeCr src/Dodge/Creature/Test.hs 50;" f crCrSpring src/Dodge/Update.hs 997;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 67;" f @@ -2994,8 +2996,8 @@ crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 39;" f crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 53;" f crHasTarget src/Dodge/Creature/Test.hs 63;" f crHasTargetLOS src/Dodge/Creature/Test.hs 66;" f -crHeight src/Dodge/Base/Collide.hs 176;" f -crHit src/Dodge/WorldEvent/ThingsHit.hs 138;" f +crHeight src/Dodge/Base/Collide.hs 187;" f +crHit src/Dodge/WorldEvent/ThingsHit.hs 167;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 33;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 15;" f crImpulsesOnCognizant src/Dodge/Creature/Perception.hs 58;" f @@ -3015,7 +3017,7 @@ crMvForward src/Dodge/Creature/Impulse/Movement.hs 75;" f crMvType src/Dodge/Creature/MoveType.hs 7;" f crNearPoint src/Dodge/Creature/Test.hs 129;" f crNumFreeSlots src/Dodge/Inventory/CheckSlots.hs 25;" f -crOnSeg src/Dodge/WorldEvent/ThingsHit.hs 206;" f +crOnSeg src/Dodge/WorldEvent/ThingsHit.hs 235;" f crPathing src/Dodge/Creature/Action.hs 125;" f crRad src/Dodge/Creature/Radius.hs 7;" f crRightHandWall src/Dodge/Creature/HandPos.hs 76;" f @@ -3025,23 +3027,23 @@ 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 202;" f +crUpdate src/Dodge/Creature/Update.hs 200;" 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 crWalk src/Dodge/Creature/Impulse/Movement.hs 31;" f crWalkAbsolute src/Dodge/Creature/Impulse/Movement.hs 55;" f crWarningSounds src/Dodge/Creature/Vocalization.hs 16;" f -crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 62;" f -crWlPbHitZ src/Dodge/WorldEvent/ThingsHit.hs 72;" f +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 124;" f -crabCorpse src/Dodge/Creature/Picture.hs 293;" f +crabCorpse src/Dodge/Creature/Picture.hs 294;" f crabCrit src/Dodge/Creature/ChaseCrit.hs 40;" f crabCritInternal src/Dodge/Humanoid.hs 29;" f -crabFeet src/Dodge/Creature/Picture.hs 204;" f -crabRoom src/Dodge/Room/Tutorial.hs 433;" f -crabUpperBody src/Dodge/Creature/Picture.hs 128;" f +crabFeet src/Dodge/Creature/Picture.hs 205;" f +crabRoom src/Dodge/Room/Tutorial.hs 452;" f +crabUpperBody src/Dodge/Creature/Picture.hs 129;" 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 @@ -3069,9 +3071,10 @@ critsRoom src/Dodge/Room/Room.hs 425;" f crixsNearSeg src/Dodge/Zoning/Creature.hs 30;" f crossPic src/Dodge/Render/Label.hs 28;" f crossProd src/Geometry/Vector3D.hs 42;" f -crsHit src/Dodge/WorldEvent/ThingsHit.hs 86;" f -crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 185;" f -crsHitZ src/Dodge/WorldEvent/ThingsHit.hs 97;" f +crsHit src/Dodge/WorldEvent/ThingsHit.hs 95;" f +crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 214;" f +crsHitZ src/Dodge/WorldEvent/ThingsHit.hs 106;" f +crsHitZ' src/Dodge/WorldEvent/ThingsHit.hs 126;" f crsItmsUnused src/Dodge/Room/Containing.hs 45;" f crsNearCirc src/Dodge/Zoning/Creature.hs 36;" f crsNearPoint src/Dodge/Zoning/Creature.hs 18;" f @@ -3081,7 +3084,6 @@ crystalLine src/Dodge/Placement/Instance/Wall.hs 58;" f cubeShape src/Dodge/Block/Debris.hs 162;" f cullPoint src/Dodge/Render/ShapePicture.hs 117;" f cullPretty src/AesonHelp.hs 14;" f -cutPoly src/Dodge/LevelGen/StaticWalls.hs 77;" f cutWall src/Dodge/LevelGen/StaticWalls.hs 124;" f cutWalls src/Dodge/LevelGen/StaticWalls.hs 33;" f cutWalls'' src/Dodge/LevelGen/StaticWalls/Deprecated.hs 39;" f @@ -3138,10 +3140,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 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 +deadFeet src/Dodge/Creature/Picture.hs 322;" f +deadRot src/Dodge/Creature/Picture.hs 340;" f +deadScalp src/Dodge/Creature/Picture.hs 335;" f +deadUpperBody src/Dodge/Creature/Picture.hs 361;" 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 @@ -3276,7 +3278,7 @@ doAnyEquipmentEffect src/Dodge/Creature/State.hs 146;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f doBarrelSpin src/Dodge/Projectile/Update.hs 168;" f doBlBl src/Dodge/BlBl.hs 5;" f -doBounce src/Dodge/Base/Collide.hs 69;" f +doBounce src/Dodge/Base/Collide.hs 80;" f doButtonEvent src/Dodge/Button/Event.hs 9;" f doConLoop src/Loop.hs 138;" f doConLoop' src/Loop.hs 230;" f @@ -3365,7 +3367,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 119;" f +drawChaseCrit src/Dodge/Creature/Picture.hs 120;" 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 @@ -3376,7 +3378,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 111;" f +drawCrabCrit src/Dodge/Creature/Picture.hs 112;" 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 @@ -3395,7 +3397,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 372;" f +drawEquipment src/Dodge/Creature/Picture.hs 373;" 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 @@ -3405,7 +3407,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 101;" f +drawHoverCrit src/Dodge/Creature/Picture.hs 102;" 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 @@ -3459,7 +3461,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 93;" f +drawSlinkCrit src/Dodge/Creature/Picture.hs 94;" 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 @@ -3487,7 +3489,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 296;" f +dropAll src/Dodge/Creature/Update.hs 294;" f dropInventoryPath src/Dodge/HeldUse.hs 1371;" f dropItem src/Dodge/Creature/Action.hs 169;" f dropper src/Dodge/Item/Scope.hs 82;" f @@ -3577,7 +3579,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 190;" f +feet src/Dodge/Creature/Picture.hs 191;" f filter3 src/FoldableHelp.hs 76;" f filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f @@ -3625,7 +3627,7 @@ floorTo src/Geometry/Zone.hs 12;" f floorWire src/Dodge/Wire.hs 13;" f foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 795;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 841;" f -foldMTRS src/Dodge/Room/Tutorial.hs 96;" f +foldMTRS src/Dodge/Room/Tutorial.hs 99;" f foldPairs src/ListHelp.hs 37;" f foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 24;" f @@ -3690,8 +3692,8 @@ getCloseObj src/Dodge/Update/Input/InGame.hs 543;" f getCommand src/Dodge/Terminal.hs 61;" f getCommands src/Dodge/Terminal.hs 58;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 55;" f -getCrsFromRooms src/Dodge/Room/Tutorial.hs 590;" f -getCrsFromRooms' src/Dodge/Room/Tutorial.hs 577;" f +getCrsFromRooms src/Dodge/Room/Tutorial.hs 609;" f +getCrsFromRooms' src/Dodge/Room/Tutorial.hs 596;" f getDebugMouseOver src/Dodge/Update.hs 472;" f getDistortions src/Dodge/Render.hs 443;" f getEdgesCrossing src/Dodge/Path.hs 39;" f @@ -3708,7 +3710,7 @@ getPJStabiliser src/Dodge/HeldUse.hs 1271;" f getPretty src/AesonHelp.hs 8;" f getPromptTM src/Dodge/Terminal/Type.hs 3;" f getRoomFromID src/Dodge/Room/Modify.hs 31;" f -getRoomsFromInts src/Dodge/Room/Tutorial.hs 573;" f +getRoomsFromInts src/Dodge/Room/Tutorial.hs 592;" f getRootItemBounds src/Dodge/Render/HUD.hs 106;" f getRootItemInvID src/Dodge/Inventory/Location.hs 36;" f getSelectedCloseObj src/Dodge/SelectedClose.hs 14;" f @@ -3784,10 +3786,10 @@ handleTextInput src/Dodge/Event/Input.hs 19;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f hardQuit src/Dodge/Concurrent.hs 32;" f hasAutoDoorBody src/Dodge/Creature/Test.hs 139;" f -hasButtonLOS src/Dodge/Base/Collide.hs 311;" f +hasButtonLOS src/Dodge/Base/Collide.hs 322;" f hasCaneGunDim src/Dodge/Item/InvSize.hs 48;" f -hasLOS src/Dodge/Base/Collide.hs 304;" f -hasLOSIndirect src/Dodge/Base/Collide.hs 320;" f +hasLOS src/Dodge/Base/Collide.hs 315;" f +hasLOSIndirect src/Dodge/Base/Collide.hs 331;" f hat src/Dodge/Item/Equipment.hs 65;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 68;" f @@ -3831,7 +3833,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 75;" f -hoverCritHoverSound src/Dodge/Creature/Update.hs 179;" f +hoverCritHoverSound src/Dodge/Creature/Update.hs 177;" f hoverCritInternal src/Dodge/Humanoid.hs 46;" f hoverCritMv src/Dodge/Creature/ReaderUpdate.hs 229;" f hoverDeathSounds src/Dodge/Creature/Vocalization.hs 58;" f @@ -3932,7 +3934,7 @@ isAnimate src/Dodge/Creature/Test.hs 132;" f isCognizant src/Dodge/Creature/Perception.hs 115;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f isCornerLink src/Dodge/RoomLink.hs 66;" f -isFlyable src/Dodge/WorldEvent/ThingsHit.hs 193;" f +isFlyable src/Dodge/WorldEvent/ThingsHit.hs 222;" f isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 232;" f isInLnk src/Dodge/PlacementSpot.hs 163;" f isJust' src/MaybeHelp.hs 27;" f @@ -3953,7 +3955,7 @@ isUnusedLnkType src/Dodge/PlacementSpot.hs 197;" f isUsedLnkUnplaced src/Dodge/PlacementSpot.hs 181;" f isValidCommand src/Dodge/Debug/Terminal.hs 134;" f isVowel src/StringHelp.hs 8;" f -isWalkable src/Dodge/WorldEvent/ThingsHit.hs 200;" f +isWalkable src/Dodge/WorldEvent/ThingsHit.hs 229;" f isoMatrix src/MatrixHelper.hs 35;" f isotriBWH src/Geometry/Polygon.hs 30;" f itDim src/Dodge/Item/InvSize.hs 21;" f @@ -4027,13 +4029,13 @@ keyCardRunPastRand src/Dodge/LockAndKey.hs 37;" f keyPic src/Dodge/Item/Draw/SPic.hs 441;" f keyholeCorridor src/Dodge/Room/Corridor.hs 45;" f knifeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 757;" f -lChasm src/Dodge/Room/Tutorial.hs 154;" f +lChasm src/Dodge/Room/Tutorial.hs 173;" f lConnect src/Dodge/Render/Connectors.hs 43;" f lConnectCol src/Dodge/Render/Connectors.hs 46;" f lConnectMulti src/Dodge/Render/Connectors.hs 51;" f lShape src/Dodge/Placement/Instance/LightSource.hs 61;" f lamp src/Dodge/Creature/Lamp.hs 18;" f -lampCrSPic src/Dodge/Creature/Picture.hs 381;" f +lampCrSPic src/Dodge/Creature/Picture.hs 382;" 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 @@ -4095,7 +4097,7 @@ listSelectionColorPicture src/Dodge/DisplayInventory.hs 299;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f lmt src/MatrixHelper.hs 53;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 415;" f -loadAmmoTut src/Dodge/Room/Tutorial.hs 437;" f +loadAmmoTut src/Dodge/Room/Tutorial.hs 456;" f loadDodgeConfig src/Dodge/Config.hs 30;" f loadMusic src/Dodge/SoundLogic/LoadSound.hs 30;" f loadMuzzle src/Dodge/HeldUse.hs 654;" f @@ -4161,7 +4163,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 256;" f +makeCorpse src/Dodge/Creature/Picture.hs 257;" 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 @@ -4275,9 +4277,9 @@ mglCreate src/GLHelp.hs 8;" f mglDelete src/GLHelp.hs 14;" f midBarDecoration src/Dodge/Placement/TopDecoration.hs 23;" f midBounds src/Dodge/Room/Foreground.hs 150;" f -midChasm src/Dodge/Room/Tutorial.hs 183;" f -midChasmPlatform src/Dodge/Room/Tutorial.hs 205;" f -midChasmSpit src/Dodge/Room/Tutorial.hs 273;" f +midChasm src/Dodge/Room/Tutorial.hs 202;" f +midChasmPlatform src/Dodge/Room/Tutorial.hs 224;" f +midChasmSpit src/Dodge/Room/Tutorial.hs 292;" f midPad src/Padding.hs 27;" f midPadL src/Padding.hs 33;" f midPoint src/Geometry.hs 83;" f @@ -4380,7 +4382,7 @@ noShape src/ShapePicture.hs 29;" f noclipCheck src/Dodge/WallCreatureCollisions.hs 22;" f nodeNear src/Dodge/Path.hs 94;" f nodesNear src/Dodge/Path.hs 100;" f -nonConvexChasm src/Dodge/Room/Tutorial.hs 270;" f +nonConvexChasm src/Dodge/Room/Tutorial.hs 289;" f nonCornerLinks src/Dodge/Room/SensorDoor.hs 53;" f normalGait src/Dodge/Creature/State/WalkCycle.hs 148;" f normalTo8 src/Shader/Poke.hs 475;" f @@ -4407,7 +4409,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 187;" f +oneSmooth src/Dodge/Creature/Picture.hs 188;" f openConsole src/Dodge/Update.hs 140;" f optionMenu src/Dodge/Menu.hs 110;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f @@ -4439,10 +4441,11 @@ overPos src/Picture/Base.hs 298;" f overPosObj src/Shape.hs 279;" f overPosSH src/Shape.hs 263;" f overPosSP src/ShapePicture.hs 41;" f -overlapCircWalls src/Dodge/Base/Collide.hs 240;" f -overlapCircWallsClosest src/Dodge/Base/Collide.hs 279;" f -overlapSegCrs src/Dodge/Base/Collide.hs 61;" f -overlapSegWalls src/Dodge/Base/Collide.hs 220;" f +overlapCircWalls src/Dodge/Base/Collide.hs 251;" f +overlapCircWallsClosest src/Dodge/Base/Collide.hs 290;" f +overlapSegCrs src/Dodge/Base/Collide.hs 63;" f +overlapSegCrs' src/Dodge/Base/Collide.hs 71;" f +overlapSegWalls src/Dodge/Base/Collide.hs 231;" f overrideInternal src/Dodge/Creature/ReaderUpdate.hs 281;" f overrideMeleeCloseTarget src/Dodge/Creature/ReaderUpdate.hs 38;" f overwriteLabel src/Dodge/Tree/Compose.hs 32;" f @@ -4456,7 +4459,7 @@ pairsToSCC src/Dodge/Graph.hs 32;" f paletteToColor src/Color.hs 85;" f parseItem src/Dodge/Debug/Terminal.hs 62;" f parseNum src/Dodge/Debug/Terminal.hs 77;" f -passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 655;" f +passthroughLockKeyLists src/Dodge/Room/Tutorial.hs 674;" f pathConnected src/Dodge/Room/CheckConsistency.hs 13;" f pathEdgeObstructed src/Dodge/Path.hs 87;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f @@ -4466,7 +4469,7 @@ pauseMenuOptions src/Dodge/Menu.hs 64;" f pauseSound src/Dodge/SoundLogic.hs 42;" f pauseTime src/Dodge/Update.hs 219;" f pbFlicker src/Dodge/Update.hs 567;" f -pbsHit src/Dodge/WorldEvent/ThingsHit.hs 114;" f +pbsHit src/Dodge/WorldEvent/ThingsHit.hs 143;" f peZoneSize src/Dodge/Zoning/Pathing.hs 49;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f penThing src/Dodge/Bullet.hs 215;" f @@ -4527,7 +4530,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 292;" f +poisonSPic src/Dodge/Creature/Update.hs 290;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 518;" f pokeArrayOff src/Shader/Poke.hs 530;" f @@ -4562,8 +4565,8 @@ pokeWall src/Shader/Poke.hs 80;" f pokeWallsWindows src/Shader/Poke.hs 52;" f poly3 src/Picture/Base.hs 76;" f poly3Col src/Picture/Base.hs 80;" f -polyChasm src/Dodge/Room/Tutorial.hs 357;" f -polyChasmC src/Dodge/Room/Tutorial.hs 369;" f +polyChasm src/Dodge/Room/Tutorial.hs 376;" f +polyChasmC src/Dodge/Room/Tutorial.hs 388;" f polyCirc src/Shape.hs 48;" f polyCircx src/Shape.hs 53;" f polyCornerDist src/Geometry/Polygon.hs 69;" f @@ -4655,7 +4658,7 @@ putLitButOnPosExtTrig src/Dodge/Placement/Instance/Button.hs 97;" f putLitButOnPosExtTrig' src/Dodge/Placement/Instance/Button.hs 100;" f putMessageTerminal src/Dodge/Placement/Instance/Terminal.hs 58;" f putShape src/Dodge/Room/Foreground.hs 134;" f -putSingleLight src/Dodge/Room/Tutorial.hs 471;" f +putSingleLight src/Dodge/Room/Tutorial.hs 490;" f putSlideDr src/Dodge/Door/PutSlideDoor.hs 12;" f putStrLnAppend src/Dodge/LevelGen.hs 84;" f putTerminal src/Dodge/Placement/Instance/Terminal.hs 52;" f @@ -4889,14 +4892,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 68;" f +scaleAlong src/Dodge/Creature/Picture.hs 69;" 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 348;" f +scalp src/Dodge/Creature/Picture.hs 349;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 82;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/Update.hs 289;" f +scorchSPic src/Dodge/Creature/Update.hs 287;" 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 @@ -4924,7 +4927,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 160;" f +segmentArea src/Dodge/Creature/Update.hs 158;" 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 @@ -4942,7 +4945,7 @@ sensorReqToString src/Dodge/Machine/Update.hs 240;" f sensorRoom src/Dodge/Room/SensorDoor.hs 27;" f sensorRoomRunPast src/Dodge/Room/SensorDoor.hs 59;" f sensorSPic src/Dodge/Machine/Draw.hs 89;" f -sensorTut src/Dodge/Room/Tutorial.hs 599;" f +sensorTut src/Dodge/Room/Tutorial.hs 618;" f sensorTypeDamages src/Dodge/Machine/Update.hs 286;" f sensorTypeDamages src/Dodge/Wall/Damage.hs 92;" f sentinelAI src/Dodge/Creature/SentinelAI.hs 20;" f @@ -4976,7 +4979,7 @@ setShadowLimits src/Dodge/Shadows.hs 11;" f setSoundVolume src/Sound.hs 159;" f setTile src/Dodge/Layout.hs 78;" f setTiles src/Dodge/Layout.hs 68;" f -setTreeInts src/Dodge/Room/Tutorial.hs 103;" f +setTreeInts src/Dodge/Room/Tutorial.hs 106;" f setViewDistance src/Dodge/Update/Camera.hs 240;" f setViewPos src/Dodge/Creature/ReaderUpdate.hs 71;" f setViewport src/Dodge/Render.hs 448;" f @@ -5054,10 +5057,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 107;" f +showManObj src/Dodge/TestString.hs 109;" f showMuzzlePositions src/Dodge/Debug.hs 292;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f -showTimeFlow src/Dodge/TestString.hs 124;" f +showTimeFlow src/Dodge/TestString.hs 126;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 198;" f shrinkVert src/Geometry/Polygon.hs 202;" f shuffle src/RandomHelp.hs 68;" f @@ -5094,9 +5097,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 72;" f +slimeCritUpdate src/Dodge/Creature/Update.hs 71;" f slinkCrit src/Dodge/Creature/ChaseCrit.hs 54;" f -slinkCritUpdate src/Dodge/Creature/Update.hs 163;" f +slinkCritUpdate src/Dodge/Creature/Update.hs 161;" 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 @@ -5151,14 +5154,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 238;" f +spiderJoint src/Dodge/Creature/Picture.hs 239;" 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 133;" f +splitSlimeCrit src/Dodge/Creature/Update.hs 130;" f splitTrunk src/TreeHelp.hs 181;" f splitTrunkAt src/TreeHelp.hs 169;" f spreadAroundCenter src/Dodge/Base.hs 173;" f @@ -5168,8 +5171,8 @@ spreadGunCrit src/Dodge/Creature/SpreadGunCrit.hs 11;" f spreadOut src/Dodge/Creature/Boid.hs 160;" f sps src/Dodge/LevelGen/PlacementHelper.hs 30;" f sps0 src/Dodge/LevelGen/PlacementHelper.hs 42;" f -sqPlatformChasm src/Dodge/Room/Tutorial.hs 234;" f -sqSpitChasm src/Dodge/Room/Tutorial.hs 249;" f +sqPlatformChasm src/Dodge/Room/Tutorial.hs 253;" f +sqSpitChasm src/Dodge/Room/Tutorial.hs 268;" f square src/Geometry/Polygon.hs 56;" f squareDecoration src/Dodge/Placement/TopDecoration.hs 48;" f squashIntersectCirclePoint src/Dodge/WallCreatureCollisions.hs 129;" f @@ -5196,7 +5199,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 243;" f +startDeathTimer src/Dodge/Creature/Update.hs 241;" f startDrag src/Dodge/Update/Input/InGame.hs 319;" f startInvList src/Dodge/Creature.hs 105;" f startInventory src/Dodge/Creature.hs 108;" f @@ -5312,11 +5315,12 @@ thickCircle src/Picture/Base.hs 267;" f thickLine src/Picture/Base.hs 238;" f thickLineCol src/Picture/Base.hs 250;" f thinHighBar src/Dodge/Room/Foreground.hs 77;" f -thingHit src/Dodge/WorldEvent/ThingsHit.hs 135;" f -thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 123;" f -thingsHit src/Dodge/WorldEvent/ThingsHit.hs 47;" f -thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 144;" f -thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 55;" f +thingHit src/Dodge/WorldEvent/ThingsHit.hs 164;" f +thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 152;" f +thingsHit src/Dodge/WorldEvent/ThingsHit.hs 48;" f +thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 173;" f +thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 56;" f +thingsHitZ' src/Dodge/WorldEvent/ThingsHit.hs 64;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 67;" f throb1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 819;" f throbC4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 779;" f @@ -5347,7 +5351,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 251;" f +toDeathCarriage src/Dodge/Creature/Update.hs 249;" f toFloatVAs src/Shader/Compile.hs 66;" f toLabel src/Dodge/Cleat.hs 16;" f toMultiset src/Multiset.hs 64;" f @@ -5371,11 +5375,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 102;" f +topTestPart src/Dodge/TestString.hs 104;" 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 353;" f +torso src/Dodge/Creature/Picture.hs 354;" f tractCr src/Dodge/TractorBeam/Update.hs 28;" f tractFlIt src/Dodge/TractorBeam/Update.hs 23;" f tractorBeamAt src/Dodge/HeldUse.hs 850;" f @@ -5444,12 +5448,12 @@ tryUseParent src/Dodge/Creature/State.hs 150;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 23;" f tutAnoTree src/Dodge/Room/Tutorial.hs 55;" f -tutDrop src/Dodge/Room/Tutorial.hs 108;" f -tutHub src/Dodge/Room/Tutorial.hs 497;" f -tutLight src/Dodge/Room/Tutorial.hs 401;" f -tutRezBox src/Dodge/Room/Tutorial.hs 610;" f +tutDrop src/Dodge/Room/Tutorial.hs 111;" f +tutHub src/Dodge/Room/Tutorial.hs 516;" f +tutLight src/Dodge/Room/Tutorial.hs 420;" f +tutRezBox src/Dodge/Room/Tutorial.hs 629;" f tutRoomTree src/Dodge/Floor.hs 20;" f -tutorialMessage1 src/Dodge/Room/Tutorial.hs 635;" f +tutorialMessage1 src/Dodge/Room/Tutorial.hs 654;" f tweenAngles src/Geometry/Vector.hs 198;" f twinSlowDoorChasers src/Dodge/Room/LongDoor.hs 83;" f twinSlowDoorRoom src/Dodge/Room/LongDoor.hs 39;" f @@ -5500,7 +5504,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 40;" f +updateCreature src/Dodge/Creature/Update.hs 39;" f updateCreatureGroups src/Dodge/Update.hs 634;" f updateCreatureSoundPositions src/Dodge/Update.hs 613;" f updateCreatureStride src/Dodge/Update.hs 376;" f @@ -5508,7 +5512,7 @@ updateCreatureStrides src/Dodge/Update.hs 373;" f updateDebris src/Dodge/Update.hs 676;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f updateDebugMessageOffset src/Dodge/Update.hs 104;" f -updateDelayedEvents src/Dodge/Update.hs 1058;" f +updateDelayedEvents src/Dodge/Update.hs 1059;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 8;" f updateDistortions src/Dodge/Update.hs 655;" f @@ -5549,7 +5553,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 49;" f +updateLivingCreature src/Dodge/Creature/Update.hs 48;" 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 @@ -5566,7 +5570,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 304;" f +updatePulse src/Dodge/Creature/Update.hs 302;" f updatePulseBall src/Dodge/Update.hs 547;" f updatePulseLaser src/Dodge/Update.hs 716;" f updatePulseLasers src/Dodge/Update.hs 522;" f @@ -5608,7 +5612,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 368;" f +upperBody src/Dodge/Creature/Picture.hs 369;" f upperBox src/Shape.hs 149;" f upperBoxHalf src/Shape.hs 224;" f upperBoxMT src/Shape.hs 140;" f @@ -5672,7 +5676,7 @@ viewGameRoomBoundaries src/Dodge/Debug/Picture.hs 332;" f viewRoomBoundaries src/Dodge/Debug/Picture.hs 341;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 254;" f violet src/Color.hs 48;" f -visibleWalls src/Dodge/Base/Collide.hs 225;" f +visibleWalls src/Dodge/Base/Collide.hs 236;" f visionCheck src/Dodge/Creature/Perception.hs 162;" f volleyGun src/Dodge/Item/Held/Cane.hs 15;" f volleyGunShape src/Dodge/Item/Draw/SPic.hs 355;" f @@ -5683,7 +5687,7 @@ wallBlips src/Dodge/RadarSweep.hs 99;" f wallBuffer src/Dodge/WallCreatureCollisions.hs 99;" f wallIsZeroLength src/Dodge/LevelGen/StaticWalls.hs 179;" f wallMovement src/Dodge/WallCreatureCollisions.hs 68;" f -wallToSurface src/Dodge/Base/Collide.hs 189;" f +wallToSurface src/Dodge/Base/Collide.hs 200;" f wallsFromRooms src/Dodge/Layout.hs 158;" f wallsToDraw src/Dodge/Render/Walls.hs 18;" f warmupSound src/Dodge/HeldUse.hs 1396;" f @@ -5727,7 +5731,7 @@ windowXFloat src/Dodge/Data/Config.hs 72;" f windowYFloat src/Dodge/Data/Config.hs 74;" f withAlpha src/Color.hs 37;" f withByteString src/Shader/Compile.hs 157;" f -wlHitPos src/Dodge/WorldEvent/ThingsHit.hs 162;" f +wlHitPos src/Dodge/WorldEvent/ThingsHit.hs 191;" f wlIXsNearCirc src/Dodge/Zoning/Wall.hs 31;" f wlIXsNearPoint src/Dodge/Zoning/Wall.hs 21;" f wlIXsNearRect src/Dodge/Zoning/Wall.hs 28;" f @@ -5740,9 +5744,9 @@ wlWlCrush' src/Dodge/WallCreatureCollisions.hs 89;" f wlZoneSize src/Dodge/Zoning/Wall.hs 51;" f wlsCrush' src/Dodge/WallCreatureCollisions.hs 80;" f wlsFromIXs src/Dodge/Zoning/Wall.hs 34;" f -wlsHit src/Dodge/WorldEvent/ThingsHit.hs 158;" f -wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 170;" f -wlsHitUnsorted src/Dodge/WorldEvent/ThingsHit.hs 165;" f +wlsHit src/Dodge/WorldEvent/ThingsHit.hs 187;" f +wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 199;" f +wlsHitUnsorted src/Dodge/WorldEvent/ThingsHit.hs 194;" f wlsNearCirc src/Dodge/Zoning/Wall.hs 48;" f wlsNearPoint src/Dodge/Zoning/Wall.hs 38;" f wlsNearRect src/Dodge/Zoning/Wall.hs 45;" f @@ -5758,6 +5762,7 @@ wristArmour src/Dodge/Item/Equipment.hs 35;" f wristInvisibility src/Dodge/Item/Equipment.hs 80;" f writeConfig src/Dodge/Menu.hs 180;" f writeSaveSlot src/Dodge/Save.hs 36;" f +xChasm src/Dodge/Room/Tutorial.hs 145;" f xCylinder src/Shape.hs 129;" f xCylinderST src/Shape.hs 126;" f xIntercepts src/Dodge/Zoning/Base.hs 66;" f @@ -5779,7 +5784,7 @@ yourRootItem src/Dodge/Base/You.hs 26;" f yourRootItemDT src/Dodge/Base/You.hs 32;" f yourSelectedItem src/Dodge/Base/You.hs 20;" f yourStatsInfo src/Dodge/Creature/Info.hs 27;" f -zChasm src/Dodge/Room/Tutorial.hs 167;" f +zChasm src/Dodge/Room/Tutorial.hs 186;" f zConnect src/Dodge/Render/Connectors.hs 18;" f zConnectCol src/Dodge/Render/Connectors.hs 29;" f zConnectColMidX src/Dodge/Render/Connectors.hs 32;" f