From aec56f4977ed5469c134d2f96b203d406c228647 Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 25 Dec 2024 10:14:13 +0000 Subject: [PATCH] Fix more edge cases in circle collision --- src/Dodge/Base/Collide.hs | 30 +++-- src/Dodge/Update/Input/DebugTest.hs | 17 +++ src/Dodge/Update/Input/InGame.hs | 2 + tags | 200 ++++++++++++++-------------- 4 files changed, 139 insertions(+), 110 deletions(-) diff --git a/src/Dodge/Base/Collide.hs b/src/Dodge/Base/Collide.hs index b898215c8..ec78d5cdc 100644 --- a/src/Dodge/Base/Collide.hs +++ b/src/Dodge/Base/Collide.hs @@ -18,7 +18,7 @@ module Dodge.Base.Collide ( collideCircWalls, overlapSegWalls, overlapSegCrs, - bounceBall, +-- bounceBall, bouncePoint, circOnSomeWall, circOnAnyCr, @@ -75,15 +75,15 @@ doBounce x sp ep (p, mwl) = , reflVelWallDamp x wl (ep -.- sp) ) -bounceBall :: - Float -> - Point2 -> - Point2 -> - Float -> - [Wall] -> - Maybe (Point2, Point2) -{-# INLINE bounceBall #-} -bounceBall x sp ep r = doBounce x sp ep . collideCircWalls sp ep r +--bounceBall :: +-- Float -> +-- Point2 -> +-- Point2 -> +-- Float -> +-- [Wall] -> +-- Maybe (Point2, Point2) +--{-# INLINE bounceBall #-} +--bounceBall x sp ep r = doBounce x sp ep . collideCircWalls sp ep r bouncePoint :: (Wall -> Bool) -> Float -> Point2 -> Point2 -> World -> Maybe (Point2, Point2) {-# INLINE bouncePoint #-} @@ -146,6 +146,11 @@ overlapCircWalls p r = mapMaybe dointersect dointersect wl = f (_wlLine wl) <&> (,wl) f (a, b) = intersectSegSeg p (p +.+ r *.* normalizeV ((0.5 *.* (a +.+ b)) -.- p)) a b +circHitWall :: Point2 -> Point2 -> Float -> World -> Bool +circHitWall sp ep r w = any (uncurry (intersectSegSegTest sp ep) . _wlLine) + (wlsNearSeg sp ep w) + || any (uncurry (circOnSeg ep r) . _wlLine) (wlsNearPoint ep w) + -- | note that this does not push the circle away from the wall at all collideCircWalls :: Point2 -> Point2 -> Float -> [Wall] -> (Point2, Maybe Wall) {-# INLINE collideCircWalls #-} @@ -241,7 +246,8 @@ canSeeIndirect i j w = hasLOSIndirect ipos jpos w jpos = w ^?! cWorld . lWorld . creatures . ix j . crPos anythingHitCirc :: Float -> Point2 -> Point2 -> World -> Bool -anythingHitCirc rad sp ep w = hitCr || isJust (sequence hitWl) +--anythingHitCirc rad sp ep w = hitCr || isJust (sequence hitWl) +anythingHitCirc rad sp ep w = hitCr || circHitWall sp ep rad w where x = rad *.* normalizeV (ep - sp) xsp = sp - x @@ -253,6 +259,6 @@ anythingHitCirc rad sp ep w = hitCr || isJust (sequence hitWl) (\cr -> null $ intersectCircSeg (_crPos cr) (rad + _crRad cr) sp ep) (w ^? cWorld . lWorld . creatures . ix cid) || bl - hitWl = collideCircWalls sp ep rad $ wlsNearSeg xsp xep w +-- hitWl = collideCircWalls sp ep rad $ wlsNearSeg xsp xep w -- this should probably be wallsOnLine or something diff --git a/src/Dodge/Update/Input/DebugTest.hs b/src/Dodge/Update/Input/DebugTest.hs index c96807332..e71b0a10d 100644 --- a/src/Dodge/Update/Input/DebugTest.hs +++ b/src/Dodge/Update/Input/DebugTest.hs @@ -1,6 +1,8 @@ module Dodge.Update.Input.DebugTest ( doDebugTest, doDebugTest2, + doDebugTestF6, + doDebugTestF7, ) where import Control.Lens @@ -26,3 +28,18 @@ doDebugTest uv = fromMaybe uv $ do doDebugTest2 :: Universe -> Universe doDebugTest2 = uvDebugFloat1 .~ 20 + +doDebugTestF6 :: Universe -> Universe +doDebugTestF6 = uvIOEffects %~ \f u -> do + writeFile "log/heldL" $ show $ u ^. uvWorld . input . heldWorldPos . at ButtonLeft + writeFile "log/heldR" $ show $ u ^. uvWorld . input . heldWorldPos . at ButtonRight + f u + +doDebugTestF7 :: Universe -> Universe +doDebugTestF7 = uvIOEffects %~ \f u -> do + l <- readFile "log/heldL" + r <- readFile "log/heldR" + f $ u + & uvWorld . input . heldWorldPos . at ButtonLeft .~ read l + & uvWorld . input . heldWorldPos . at ButtonRight .~ read r + diff --git a/src/Dodge/Update/Input/InGame.hs b/src/Dodge/Update/Input/InGame.hs index 8d7ce8cd1..dbb901932 100644 --- a/src/Dodge/Update/Input/InGame.hs +++ b/src/Dodge/Update/Input/InGame.hs @@ -350,6 +350,8 @@ updateFunctionKey uv sc InitialPress = case sc of ScancodeF2 -> pauseAndFloatCam uv ScancodeF5 -> doQuicksave uv ScancodeF9 -> doQuickload uv + ScancodeF6 -> doDebugTestF6 uv + ScancodeF7 -> doDebugTestF7 uv ScancodeEscape -> pauseGame uv _ -> uv updateFunctionKey uv ScancodeF3 _ = doDebugTest uv diff --git a/tags b/tags index a95d7d3cb..2987f3187 100644 --- a/tags +++ b/tags @@ -197,7 +197,7 @@ BoostPropIX src/Dodge/Data/Item/Params.hs 29;" C Booster src/Dodge/Item/Equipment/Booster.hs 1;" m Boosting src/Dodge/Data/Creature/Stance.hs 28;" C Boss src/Dodge/Room/Boss.hs 2;" m -BottomEscapeMenuOption src/Dodge/Data/Universe.hs 74;" C +BottomEscapeMenuOption src/Dodge/Data/Universe.hs 75;" C BounceBullet src/Dodge/Data/Bullet.hs 37;" C Bound src/Bound.hs 1;" m Bound_box_screen src/Dodge/Data/Config.hs 81;" C @@ -477,14 +477,14 @@ DeathTime src/Dodge/Data/World.hs 59;" C Debris src/Dodge/Block/Debris.hs 1;" m Debug src/Dodge/Debug.hs 2;" m DebugBool src/Dodge/Data/Config.hs 66;" t -DebugInfo src/Dodge/Data/Universe.hs 54;" t -DebugIntMInt src/Dodge/Data/Universe.hs 59;" C -DebugItem src/Dodge/Data/Universe.hs 48;" t +DebugInfo src/Dodge/Data/Universe.hs 55;" t +DebugIntMInt src/Dodge/Data/Universe.hs 60;" C +DebugItem src/Dodge/Data/Universe.hs 49;" t DebugLayer src/Picture/Data.hs 27;" C -DebugMInt src/Dodge/Data/Universe.hs 58;" C +DebugMInt src/Dodge/Data/Universe.hs 59;" C DebugTest src/Dodge/Update/Input/DebugTest.hs 1;" m -DebugV2 src/Dodge/Data/Universe.hs 57;" C -DebugV3 src/Dodge/Data/Universe.hs 56;" C +DebugV2 src/Dodge/Data/Universe.hs 58;" C +DebugV3 src/Dodge/Data/Universe.hs 57;" C DecorationShape src/Dodge/Data/GenParams.hs 20;" t Default src/Dodge/Default.hs 7;" m Default src/Dodge/Tesla/Arc/Default.hs 1;" m @@ -645,7 +645,7 @@ Equipment src/Dodge/Item/Equipment.hs 1;" m EquipmentAllocation src/Dodge/Data/RightButtonOptions.hs 18;" t EquipmentPlatformSF src/Dodge/Data/ComposedItem.hs 32;" C Escape src/Dodge/Data/Scenario.hs 10;" C -EscapeMenuOption src/Dodge/Data/Universe.hs 73;" t +EscapeMenuOption src/Dodge/Data/Universe.hs 74;" t Essential src/Shape/Data.hs 34;" C Euse src/Dodge/Data/Item/HeldUse.hs 19;" t Euse src/Dodge/Euse.hs 1;" m @@ -744,7 +744,7 @@ GLHelp src/GLHelp.hs 1;" m GRAPECANNON src/Dodge/Data/Item/Combine.hs 128;" C GREEN src/Color/Data.hs 16;" C GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 33;" C -GameOverOptions src/Dodge/Data/Universe.hs 69;" C +GameOverOptions src/Dodge/Data/Universe.hs 70;" C GameRoom src/Dodge/GameRoom.hs 15;" t GameRoom src/Dodge/GameRoom.hs 8;" m Gas src/Dodge/Gas.hs 1;" m @@ -814,7 +814,7 @@ HammerTrigger src/Dodge/Data/Item/Use.hs 68;" C HammerType src/Dodge/Data/Hammer.hs 12;" t HammerUp src/Dodge/Data/Hammer.hs 20;" C HandPos src/Dodge/Creature/HandPos.hs 1;" m -HardQuit src/Dodge/Data/Universe.hs 67;" C +HardQuit src/Dodge/Data/Universe.hs 68;" C HasHammer src/Dodge/Data/Hammer.hs 14;" C HeavySmokeFlare src/Dodge/Data/Item/Use.hs 136;" C Held src/Dodge/Item/Held.hs 1;" m @@ -891,14 +891,14 @@ Input src/Dodge/Data/Input.hs 6;" m Input src/Dodge/Event/Input.hs 3;" m Input src/Dodge/Update/Input.hs 1;" m InputFocus src/Dodge/InputFocus.hs 1;" m -InputScreen src/Dodge/Data/Universe.hs 90;" C +InputScreen src/Dodge/Data/Universe.hs 91;" C Inspect_wall src/Dodge/Data/Config.hs 91;" C Instance src/Dodge/Item/Instance.hs 1;" m Instance src/Dodge/Placement/Instance.hs 1;" m Institution src/Dodge/Data/Scenario.hs 42;" t Int2 src/Geometry/Data.hs 18;" t IntAnno src/Dodge/Annotation/Data.hs 17;" C -IntID src/Dodge/Data/Universe.hs 111;" t +IntID src/Dodge/Data/Universe.hs 112;" t IntImp src/Dodge/Data/CreatureEffect.hs 20;" t IntMapHelp src/IntMapHelp.hs 8;" m Intention src/Dodge/Data/Creature.hs 79;" t @@ -1043,7 +1043,7 @@ LoadSeed src/Dodge/LoadSeed.hs 1;" m LoadSound src/Dodge/SoundLogic/LoadSound.hs 1;" m Loading src/Dodge/Menu/Loading.hs 1;" m LoadingBaySS src/Dodge/Data/Scenario.hs 93;" C -LoadingScreen src/Dodge/Data/Universe.hs 70;" C +LoadingScreen src/Dodge/Data/Universe.hs 71;" C LocLDT src/Dodge/Data/DoubleTree.hs 67;" C Location src/Dodge/Data/Item/Location.hs 6;" m Location src/Dodge/Inventory/Location.hs 1;" m @@ -1077,9 +1077,9 @@ MICROCHIP src/Dodge/Data/Item/Combine.hs 49;" C MICROPHONE src/Dodge/Data/Item/Combine.hs 61;" C MINIDISPLAY src/Dodge/Data/Item/Combine.hs 54;" C MINIGUNX src/Dodge/Data/Item/Combine.hs 129;" C -MODBlockedString src/Dodge/Data/Universe.hs 97;" C -MODString src/Dodge/Data/Universe.hs 96;" C -MODStringOption src/Dodge/Data/Universe.hs 98;" C +MODBlockedString src/Dodge/Data/Universe.hs 98;" C +MODString src/Dodge/Data/Universe.hs 97;" C +MODStringOption src/Dodge/Data/Universe.hs 99;" C MOTOR src/Dodge/Data/Item/Combine.hs 41;" C MP2Ac src/Dodge/Data/CreatureEffect.hs 56;" t MP2NoAction src/Dodge/Data/CreatureEffect.hs 56;" C @@ -1142,8 +1142,8 @@ Memory src/Dodge/Data/Creature/Memory.hs 13;" t Memory src/Dodge/Creature/Memory.hs 1;" m Memory src/Dodge/Data/Creature/Memory.hs 6;" m Menu src/Dodge/Menu.hs 1;" m -MenuOption src/Dodge/Data/Universe.hs 100;" t -MenuOptionDisplay src/Dodge/Data/Universe.hs 95;" t +MenuOption src/Dodge/Data/Universe.hs 101;" t +MenuOptionDisplay src/Dodge/Data/Universe.hs 96;" t MenuScreen src/Dodge/Render/MenuScreen.hs 2;" m MetaBranch src/Dodge/Data/MetaTree.hs 16;" t MetaBranch src/Dodge/Tree/Compose/Data.hs 10;" t @@ -1225,7 +1225,7 @@ NewID src/Dodge/Base/NewID.hs 1;" m NewInt src/NewInt.hs 15;" t NewInt src/NewInt.hs 7;" m NewIntMap src/NewInt.hs 18;" t -NewSideEffect src/Dodge/Data/Universe.hs 62;" C +NewSideEffect src/Dodge/Data/Universe.hs 63;" C NextArcStep src/Dodge/Data/ArcStep.hs 21;" t Ngon src/Dodge/Room/Ngon.hs 1;" m NoAction src/Dodge/Data/ActionPlan.hs 152;" C @@ -1238,11 +1238,11 @@ NoCrImp src/Dodge/Data/CreatureEffect.hs 24;" C NoCrWdImp src/Dodge/Data/CreatureEffect.hs 14;" C NoCreatureEffect src/Dodge/Data/CreatureEffect.hs 11;" C NoDamageEffect src/Dodge/Data/Damage.hs 29;" C -NoDebugInfo src/Dodge/Data/Universe.hs 55;" C +NoDebugInfo src/Dodge/Data/Universe.hs 56;" C NoDelay src/Dodge/Data/Item/HeldDelay.hs 14;" C NoDropEffect src/Dodge/Data/Item/Effect.hs 28;" C NoEquipParams src/Dodge/Data/Item/Use/Equipment.hs 36;" C -NoEscapeMenuOption src/Dodge/Data/Universe.hs 76;" C +NoEscapeMenuOption src/Dodge/Data/Universe.hs 77;" C NoFaction src/Dodge/Data/Creature/State.hs 40;" C NoFlare src/Dodge/Data/Item/Use.hs 132;" C NoHammer src/Dodge/Data/Hammer.hs 13;" C @@ -1272,7 +1272,7 @@ NodeMTree src/Dodge/Tree/Compose/Data.hs 9;" C NodeTree src/Dodge/Data/MetaTree.hs 13;" C NodeTree src/Dodge/Tree/Compose/Data.hs 9;" C NonDrawnCreature src/Dodge/Data/Creature/Misc.hs 84;" C -NormalOptions src/Dodge/Data/Universe.hs 69;" C +NormalOptions src/Dodge/Data/Universe.hs 70;" C NormalTimeFlow src/Dodge/Data/World.hs 61;" C North src/Dodge/Data/CardinalPoint.hs 4;" C North8 src/Dodge/Data/CardinalPoint.hs 11;" C @@ -1338,8 +1338,8 @@ Opacity src/Dodge/Data/Wall.hs 38;" t Opaque src/Dodge/Data/Wall.hs 42;" C OpticScope src/Dodge/Data/Item/Scope.hs 14;" C Option src/Dodge/Menu/Option.hs 1;" m -OptionScreen src/Dodge/Data/Universe.hs 79;" C -OptionScreenFlag src/Dodge/Data/Universe.hs 69;" t +OptionScreen src/Dodge/Data/Universe.hs 80;" C +OptionScreenFlag src/Dodge/Data/Universe.hs 70;" t OptionType src/Dodge/Menu/OptionType.hs 2;" m Orientation src/Dodge/Item/Orientation.hs 1;" m OutAction src/Dodge/Creature/Action.hs 50;" t @@ -1629,7 +1629,7 @@ RoomType src/Dodge/Data/Room.hs 30;" t RoomWire src/Dodge/Data/Room.hs 51;" t RoundedFaces src/Shape/Data.hs 18;" C RunPast src/Dodge/Room/RunPast.hs 1;" m -RunningSideEffect src/Dodge/Data/Universe.hs 66;" C +RunningSideEffect src/Dodge/Data/Universe.hs 67;" C SCRAPMETAL src/Dodge/Data/Item/Combine.hs 39;" C SHATTERGUN src/Dodge/Data/Item/Combine.hs 152;" C SHATTERING src/Dodge/Data/Damage/Type.hs 17;" C @@ -1659,7 +1659,7 @@ ScodeToChar src/Dodge/ScodeToChar.hs 1;" m Scope src/Dodge/Data/Item/Scope.hs 13;" t Scope src/Dodge/Data/Item/Scope.hs 6;" m Scope src/Dodge/Item/Scope.hs 1;" m -ScreenLayer src/Dodge/Data/Universe.hs 78;" t +ScreenLayer src/Dodge/Data/Universe.hs 79;" t ScreenLayer src/Dodge/Update/Input/ScreenLayer.hs 1;" m ScreenPos src/Dodge/Data/ScreenPos.hs 12;" t ScreenPos src/Dodge/Data/ScreenPos.hs 3;" m @@ -1743,7 +1743,7 @@ ShrinkGunParams src/Dodge/Data/Item/Params.hs 17;" C ShrinkGunStatus src/Dodge/Data/Item/Params.hs 31;" t Shrunk src/Dodge/Data/Item/Params.hs 31;" C SideCluster src/Dodge/Data/RoomCluster.hs 14;" C -SideEffect src/Dodge/Data/Universe.hs 61;" t +SideEffect src/Dodge/Data/Universe.hs 62;" t SimpleTrie src/SimpleTrie.hs 4;" m SixteenthRes src/Dodge/Data/Config.hs 97;" C Size src/Shape/Data.hs 28;" t @@ -1789,7 +1789,7 @@ SpatialInfluence src/Dodge/Data/Scenario.hs 81;" t Spawn src/Dodge/Item/Weapon/Spawn.hs 1;" m SpawnParticle src/Dodge/WorldEvent/SpawnParticle.hs 2;" m SpawnedBy src/Dodge/Data/Creature/State.hs 39;" C -SplashOptions src/Dodge/Data/Universe.hs 69;" C +SplashOptions src/Dodge/Data/Universe.hs 70;" C SplitBeamCombine src/Dodge/Data/Beam.hs 42;" C SprayGuns src/Dodge/Item/Held/SprayGuns.hs 1;" m SpreadGunAI src/Dodge/Data/Creature/Misc.hs 51;" C @@ -1945,10 +1945,10 @@ ToContinueStart src/Sound/Data.hs 28;" C ToPlaySound src/Sound/Data.hs 39;" t ToStart src/Sound/Data.hs 27;" C ToStop src/Sound/Data.hs 29;" C -Toggle src/Dodge/Data/Universe.hs 101;" C -Toggle2 src/Dodge/Data/Universe.hs 105;" C +Toggle src/Dodge/Data/Universe.hs 102;" C +Toggle2 src/Dodge/Data/Universe.hs 106;" C TopDecoration src/Dodge/Placement/TopDecoration.hs 1;" m -TopEscapeMenuOption src/Dodge/Data/Universe.hs 75;" C +TopEscapeMenuOption src/Dodge/Data/Universe.hs 76;" C TopLDT src/Dodge/Data/DoubleTree.hs 49;" C TorpedoBaySS src/Dodge/Data/Scenario.hs 99;" C TorqueCr src/Dodge/Data/WorldEffect.hs 31;" C @@ -2273,8 +2273,8 @@ _carriage src/Dodge/Data/Creature/Stance.hs 14;" f _carteCenter src/Dodge/Data/HUD.hs 47;" f _carteRot src/Dodge/Data/HUD.hs 49;" f _carteZoom src/Dodge/Data/HUD.hs 48;" f -_ceSideEffect src/Dodge/Data/Universe.hs 63;" f -_ceString src/Dodge/Data/Universe.hs 64;" f +_ceSideEffect src/Dodge/Data/Universe.hs 64;" f +_ceString src/Dodge/Data/Universe.hs 65;" f _ciFilter src/Dodge/Data/HUD.hs 40;" f _ciInvIDs src/Dodge/Data/Combine.hs 6;" f _ciItem src/Dodge/Data/Combine.hs 7;" f @@ -2395,13 +2395,13 @@ _dePushExp src/Dodge/Data/Damage.hs 24;" f _dePushRadius src/Dodge/Data/Damage.hs 25;" f _deTorque src/Dodge/Data/Damage.hs 27;" f _deathDelay src/Dodge/Data/World.hs 60;" f -_debugInfo src/Dodge/Data/Universe.hs 51;" f -_debugInt src/Dodge/Data/Universe.hs 59;" f -_debugMInt src/Dodge/Data/Universe.hs 58;" f -_debugMessage src/Dodge/Data/Universe.hs 50;" f -_debugPic src/Dodge/Data/Universe.hs 49;" f -_debugV2 src/Dodge/Data/Universe.hs 57;" f -_debugV3 src/Dodge/Data/Universe.hs 56;" f +_debugInfo src/Dodge/Data/Universe.hs 52;" f +_debugInt src/Dodge/Data/Universe.hs 60;" f +_debugMInt src/Dodge/Data/Universe.hs 59;" f +_debugMessage src/Dodge/Data/Universe.hs 51;" f +_debugPic src/Dodge/Data/Universe.hs 50;" f +_debugV2 src/Dodge/Data/Universe.hs 58;" f +_debugV3 src/Dodge/Data/Universe.hs 57;" f _debug_booleans src/Dodge/Data/Config.hs 57;" f _debug_view_clip_bounds src/Dodge/Data/Config.hs 56;" f _delayedEvents src/Dodge/Data/LWorld.hs 133;" f @@ -2477,7 +2477,7 @@ _eeParams src/Dodge/Data/Item/Use/Equipment.hs 22;" f _eeType src/Dodge/Data/Item/Use/Equipment.hs 21;" f _eeUse src/Dodge/Data/Item/Use/Equipment.hs 18;" f _eeViewDist src/Dodge/Data/Item/Use/Equipment.hs 23;" f -_emoMenuOption src/Dodge/Data/Universe.hs 74;" f +_emoMenuOption src/Dodge/Data/Universe.hs 75;" f _energyBalls src/Dodge/Data/LWorld.hs 108;" f _eparamID src/Dodge/Data/Item/Use/Equipment.hs 37;" f _eparamInt src/Dodge/Data/Item/Use/Equipment.hs 38;" f @@ -2727,13 +2727,13 @@ _mdUpdate src/Dodge/Data/Modification.hs 27;" f _meleeTarget src/Dodge/Data/ActionPlan.hs 187;" f _mgField src/Dodge/Data/Magnet.hs 25;" f _mgPos src/Dodge/Data/Magnet.hs 24;" f -_moEff src/Dodge/Data/Universe.hs 102;" f -_moEff1 src/Dodge/Data/Universe.hs 106;" f -_moEff2 src/Dodge/Data/Universe.hs 107;" f -_moString src/Dodge/Data/Universe.hs 103;" f -_moString src/Dodge/Data/Universe.hs 108;" f -_modOption src/Dodge/Data/Universe.hs 98;" f -_modString src/Dodge/Data/Universe.hs 96;" f +_moEff src/Dodge/Data/Universe.hs 103;" f +_moEff1 src/Dodge/Data/Universe.hs 107;" f +_moEff2 src/Dodge/Data/Universe.hs 108;" f +_moString src/Dodge/Data/Universe.hs 104;" f +_moString src/Dodge/Data/Universe.hs 109;" f +_modOption src/Dodge/Data/Universe.hs 99;" f +_modString src/Dodge/Data/Universe.hs 97;" f _modifications src/Dodge/Data/LWorld.hs 131;" f _mouseButtons src/Dodge/Data/Input.hs 46;" f _mouseButtonsReleased src/Dodge/Data/Input.hs 47;" f @@ -2963,17 +2963,17 @@ _rsObject src/Dodge/Data/RadarSweep.hs 20;" f _rsPos src/Dodge/Data/RadarSweep.hs 18;" f _rsRad src/Dodge/Data/RadarSweep.hs 19;" f _rsTimer src/Dodge/Data/RadarSweep.hs 21;" f -_scAvailableLines src/Dodge/Data/Universe.hs 86;" f -_scDisplayTime src/Dodge/Data/Universe.hs 88;" f -_scFooter src/Dodge/Data/Universe.hs 92;" f -_scInput src/Dodge/Data/Universe.hs 91;" f -_scListDisplayParams src/Dodge/Data/Universe.hs 87;" f -_scOffset src/Dodge/Data/Universe.hs 82;" f -_scOptionFlag src/Dodge/Data/Universe.hs 84;" f -_scOptions src/Dodge/Data/Universe.hs 81;" f -_scPositionedMenuOption src/Dodge/Data/Universe.hs 83;" f -_scSelectionList src/Dodge/Data/Universe.hs 85;" f -_scTitle src/Dodge/Data/Universe.hs 80;" f +_scAvailableLines src/Dodge/Data/Universe.hs 87;" f +_scDisplayTime src/Dodge/Data/Universe.hs 89;" f +_scFooter src/Dodge/Data/Universe.hs 93;" f +_scInput src/Dodge/Data/Universe.hs 92;" f +_scListDisplayParams src/Dodge/Data/Universe.hs 88;" f +_scOffset src/Dodge/Data/Universe.hs 83;" f +_scOptionFlag src/Dodge/Data/Universe.hs 85;" f +_scOptions src/Dodge/Data/Universe.hs 82;" f +_scPositionedMenuOption src/Dodge/Data/Universe.hs 84;" f +_scSelectionList src/Dodge/Data/Universe.hs 86;" f +_scTitle src/Dodge/Data/Universe.hs 81;" f _screenTextureVAO src/Data/Preload/Render.hs 50;" f _scrollAmount src/Dodge/Data/Input.hs 48;" f _scrollItemID src/Dodge/Data/World.hs 66;" f @@ -3177,8 +3177,9 @@ _useUpTo src/Dodge/Data/Item/Use.hs 164;" f _uvCanContinue src/Dodge/Data/Universe.hs 38;" f _uvConfig src/Dodge/Data/Universe.hs 36;" f _uvDebug src/Dodge/Data/Universe.hs 43;" f -_uvDebugFloat src/Dodge/Data/Universe.hs 44;" f -_uvDebugMessageOffset src/Dodge/Data/Universe.hs 45;" f +_uvDebugFloat1 src/Dodge/Data/Universe.hs 44;" f +_uvDebugFloat2 src/Dodge/Data/Universe.hs 45;" f +_uvDebugMessageOffset src/Dodge/Data/Universe.hs 46;" f _uvFrameTicks src/Dodge/Data/Universe.hs 41;" f _uvIOEffects src/Dodge/Data/Universe.hs 34;" f _uvLastFrameTicks src/Dodge/Data/Universe.hs 40;" f @@ -3341,7 +3342,7 @@ angleVV src/Geometry/Vector.hs 57;" f angleVV3 src/Geometry/Vector3D.hs 122;" f annoToRoomTree src/Dodge/Annotation.hs 17;" f anyUnusedSpot src/Dodge/PlacementSpot.hs 66;" f -anythingHitCirc src/Dodge/Base/Collide.hs 243;" f +anythingHitCirc src/Dodge/Base/Collide.hs 248;" f applyCME src/Dodge/HeldUse.hs 126;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f applyDamageEffect src/Dodge/Creature/Damage.hs 31;" f @@ -3486,7 +3487,6 @@ blunderbuss src/Dodge/Item/Held/Cone.hs 27;" f boosterGun src/Dodge/Item/Equipment/Booster.hs 9;" f bossKeyItems src/Dodge/LockAndKey.hs 12;" f bossRoom src/Dodge/Room/Boss.hs 60;" f -bounceBall src/Dodge/Base/Collide.hs 78;" f bounceDir src/Dodge/Bullet.hs 113;" f bouncePoint src/Dodge/Base/Collide.hs 88;" f boundPoints src/Bound.hs 10;" f @@ -3518,8 +3518,8 @@ cFilledRect src/Dodge/CharacterEnums.hs 6;" f cWireRect src/Dodge/CharacterEnums.hs 10;" f calcSmoothScroll src/Dodge/SmoothScroll.hs 7;" f calcTexCoord src/Tile.hs 19;" f -canSee src/Dodge/Base/Collide.hs 229;" f -canSeeIndirect src/Dodge/Base/Collide.hs 236;" f +canSee src/Dodge/Base/Collide.hs 234;" f +canSeeIndirect src/Dodge/Base/Collide.hs 241;" f cardEightVec src/Dodge/Base/CardinalPoint.hs 16;" f cardList src/Dodge/Base/CardinalPoint.hs 6;" f cardVec src/Dodge/Base/CardinalPoint.hs 9;" f @@ -3568,10 +3568,11 @@ chooseMovementPistol src/Dodge/Humanoid.hs 202;" f chooseMovementPistol' src/Dodge/Humanoid.hs 207;" f chooseMovementSpreadGun src/Dodge/CreatureEffect.hs 88;" f circCollisionDebugItem src/Dodge/Debug.hs 63;" f -circOnAnyCr src/Dodge/Base/Collide.hs 193;" f +circHitWall src/Dodge/Base/Collide.hs 149;" f +circOnAnyCr src/Dodge/Base/Collide.hs 198;" f circOnSeg src/Geometry.hs 104;" f circOnSegNoEndpoints src/Geometry.hs 94;" f -circOnSomeWall src/Dodge/Base/Collide.hs 182;" f +circOnSomeWall src/Dodge/Base/Collide.hs 187;" f circle src/Picture/Base.hs 180;" f circleDecoration src/Dodge/Placement/TopDecoration.hs 56;" f circleSolid src/Picture/Base.hs 164;" f @@ -3616,7 +3617,7 @@ colSpark src/Dodge/Spark.hs 47;" f colSparkRandDir src/Dodge/Spark.hs 101;" f collectDamageTypes src/Dodge/Damage.hs 32;" f collectInvItems src/Dodge/Update/Input/InGame.hs 281;" f -collideCircWalls src/Dodge/Base/Collide.hs 150;" f +collideCircWalls src/Dodge/Base/Collide.hs 155;" f collidePoint src/Dodge/Base/Collide.hs 49;" f collidePointTestFilter src/Dodge/Base/Collide.hs 94;" f collidePointWallsFilter src/Dodge/Base/Collide.hs 108;" f @@ -3970,7 +3971,10 @@ doDamage src/Dodge/Creature/State.hs 139;" f doDamagesFL src/Dodge/Flame.hs 57;" f doDeathToggle src/Dodge/WorldEffect.hs 87;" f doDeathTriggers src/Dodge/WorldEffect.hs 82;" f -doDebugTest src/Dodge/Update/Input/DebugTest.hs 8;" f +doDebugTest src/Dodge/Update/Input/DebugTest.hs 14;" f +doDebugTest2 src/Dodge/Update/Input/DebugTest.hs 29;" f +doDebugTestF6 src/Dodge/Update/Input/DebugTest.hs 32;" f +doDebugTestF7 src/Dodge/Update/Input/DebugTest.hs 38;" f doDrWdWd src/Dodge/DrWdWd.hs 16;" f doDrag src/Dodge/Update/Input/InGame.hs 99;" f doDrawing src/Dodge/Render.hs 35;" f @@ -3997,20 +4001,20 @@ doOutPlacements src/Dodge/Layout.hs 102;" f doP2Ac src/Dodge/CreatureEffect.hs 69;" f doP2Imp src/Dodge/CreatureEffect.hs 33;" f doPrWdLsLs src/Dodge/PrWdLsLs.hs 8;" f -doPreload appDodge/Main.hs 132;" f +doPreload appDodge/Main.hs 133;" f doPressPlateEvent src/Dodge/PressPlate.hs 8;" f doPropUpdates src/Dodge/Prop/Update.hs 36;" f doQuickload src/Dodge/Save.hs 82;" f doQuicksave src/Dodge/Save.hs 77;" f doRandImpulse src/Dodge/RandImpulse.hs 7;" f -doRegexInput src/Dodge/Update/Input/InGame.hs 422;" f +doRegexInput src/Dodge/Update/Input/InGame.hs 425;" f doRoomInPlacements src/Dodge/Layout.hs 97;" f doRoomOutPlacements src/Dodge/Layout.hs 107;" f doRoomPlacements src/Dodge/Layout.hs 122;" f doRoomShift src/Dodge/Room/Link.hs 33;" f doScopeZoom src/Dodge/Update/Scroll.hs 90;" f doSectionSize src/Dodge/DisplayInventory.hs 248;" f -doSideEffects appDodge/Main.hs 119;" f +doSideEffects appDodge/Main.hs 120;" f doStep src/Dodge/ArcStep.hs 9;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 164;" f doTerminalBootProgram src/Dodge/WorldEffect.hs 96;" f @@ -4435,11 +4439,11 @@ handleResizeEvent src/Dodge/Event.hs 53;" f handleTextInput src/Dodge/Event/Input.hs 18;" f handleWindowMoveEvent src/Dodge/Event.hs 44;" f hardQuit src/Dodge/Concurrent.hs 33;" f -hasButtonLOS src/Dodge/Base/Collide.hs 207;" f +hasButtonLOS src/Dodge/Base/Collide.hs 212;" f hasCaneGunDim src/Dodge/Item/InvSize.hs 47;" f hasFrontArmour src/Dodge/Creature/Test.hs 110;" f -hasLOS src/Dodge/Base/Collide.hs 200;" f -hasLOSIndirect src/Dodge/Base/Collide.hs 215;" f +hasLOS src/Dodge/Base/Collide.hs 205;" f +hasLOSIndirect src/Dodge/Base/Collide.hs 220;" f hat src/Dodge/Item/Equipment.hs 134;" f head src/DoubleStack.hs 14;" f headLamp src/Dodge/Item/Equipment.hs 140;" f @@ -4593,7 +4597,7 @@ isUnusedLnkType src/Dodge/PlacementSpot.hs 186;" f isUsedLnkUnplaced src/Dodge/PlacementSpot.hs 172;" f isValidCommand src/Dodge/Debug/Terminal.hs 128;" f isVowel src/StringHelp.hs 8;" f -isWalkable src/Dodge/Base/Collide.hs 222;" f +isWalkable src/Dodge/Base/Collide.hs 227;" f isoMatrix src/MatrixHelper.hs 30;" f isotriBWH src/Geometry/Polygon.hs 20;" f itDim src/Dodge/Item/InvSize.hs 20;" f @@ -4846,7 +4850,7 @@ maybeClearPath src/Dodge/Block.hs 77;" f maybeClearPaths src/Dodge/Block.hs 74;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 26;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 31;" f -maybeExitCombine src/Dodge/Update/Input/InGame.hs 585;" f +maybeExitCombine src/Dodge/Update/Input/InGame.hs 588;" f maybeOpenTerminal src/Dodge/Update.hs 122;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f @@ -5052,7 +5056,7 @@ overPosObj src/Shape.hs 276;" f overPosSH src/Shape.hs 260;" f overPosSP src/ShapePicture.hs 41;" f overlapCircWalls src/Dodge/Base/Collide.hs 138;" f -overlapCircWallsClosest src/Dodge/Base/Collide.hs 168;" f +overlapCircWallsClosest src/Dodge/Base/Collide.hs 173;" f overlapSegCrs src/Dodge/Base/Collide.hs 59;" f overlapSegWalls src/Dodge/Base/Collide.hs 120;" f overrideInternal src/Dodge/Creature/ReaderUpdate.hs 172;" f @@ -5071,7 +5075,7 @@ parseNum src/Dodge/Debug/Terminal.hs 73;" f pathConnected src/Dodge/Room/CheckConsistency.hs 14;" f pathEdgeObstructed src/Dodge/Path.hs 43;" f pauseAndFloatCam src/Dodge/Camera.hs 10;" f -pauseGame src/Dodge/Update/Input/InGame.hs 505;" f +pauseGame src/Dodge/Update/Input/InGame.hs 508;" f pauseMenu src/Dodge/Menu.hs 53;" f pauseMenuOptions src/Dodge/Menu.hs 58;" f pauseSound src/Dodge/SoundLogic.hs 41;" f @@ -5133,7 +5137,7 @@ playIfFree src/Sound.hs 136;" f playPositionalSoundQueue src/Sound.hs 144;" f playSoundAndUpdate src/Sound.hs 54;" f playSoundQueue src/Sound.hs 131;" f -playSoundUnlessRewinding appDodge/Main.hs 112;" f +playSoundUnlessRewinding appDodge/Main.hs 113;" f plusDecoration src/Dodge/Placement/TopDecoration.hs 35;" f pmLineLoop src/Shader/Data.hs 107;" f pmLineStrip src/Shader/Data.hs 107;" f @@ -5537,7 +5541,7 @@ sectionsSizes src/Dodge/DisplayInventory.hs 237;" f seedStartMenu src/Dodge/Menu.hs 79;" f seedStartOptions src/Dodge/Menu.hs 82;" f segOnCirc src/Geometry.hs 116;" f -selCloseObj src/Dodge/Update/Input/InGame.hs 528;" f +selCloseObj src/Dodge/Update/Input/InGame.hs 531;" f selNumPos src/Dodge/Render/HUD.hs 440;" f selNumPosCardinal src/Dodge/Render/HUD.hs 463;" f selSecDrawCursor src/Dodge/Render/List.hs 126;" f @@ -5673,9 +5677,9 @@ showAttachItem src/Dodge/Item/Display.hs 64;" f showEquipItem src/Dodge/Item/Display.hs 78;" f showInt src/Dodge/Item/Info.hs 30;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f -showManObj src/Dodge/TestString.hs 75;" f +showManObj src/Dodge/TestString.hs 77;" f showTerminalError src/Dodge/Debug/Terminal.hs 76;" f -showTimeFlow src/Dodge/TestString.hs 124;" f +showTimeFlow src/Dodge/TestString.hs 126;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 136;" f shrinkVert src/Geometry/Polygon.hs 140;" f shuffle src/RandomHelp.hs 49;" f @@ -5731,7 +5735,7 @@ soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f soundWithStatus src/Dodge/SoundLogic.hs 98;" f soundWithStatusVolume src/Dodge/SoundLogic.hs 48;" f southPillarsRoom src/Dodge/Room/LongDoor.hs 85;" f -spaceAction src/Dodge/Update/Input/InGame.hs 508;" f +spaceAction src/Dodge/Update/Input/InGame.hs 511;" f spanColLightBlackI src/Dodge/Placement/Instance/LightSource.hs 190;" f spanColLightI src/Dodge/Placement/Instance/LightSource.hs 183;" f spanLS src/Dodge/Placement/Instance/LightSource.hs 175;" f @@ -5887,7 +5891,7 @@ tflat3 src/Picture/Data.hs 64;" f tflat4 src/Picture/Data.hs 68;" f theCleanup appDodge/Main.hs 75;" f theColumns src/Dodge/Tree/Shift.hs 139;" f -theUpdateStep appDodge/Main.hs 104;" f +theUpdateStep appDodge/Main.hs 105;" f thickArc src/Picture/Base.hs 298;" f thickCircle src/Picture/Base.hs 272;" f thickLine src/Picture/Base.hs 244;" f @@ -5928,8 +5932,8 @@ toggleCombineInv src/Dodge/DisplayInventory.hs 35;" f toggleCommand src/Dodge/Terminal.hs 196;" f toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 49;" f toggleJust src/MaybeHelp.hs 41;" f -toggleMap src/Dodge/Update/Input/InGame.hs 549;" f -toggleTweakInv src/Dodge/Update/Input/InGame.hs 562;" f +toggleMap src/Dodge/Update/Input/InGame.hs 552;" f +toggleTweakInv src/Dodge/Update/Input/InGame.hs 565;" f togglesToEffects src/Dodge/Terminal.hs 248;" f tone440S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 474;" f tone440sawtoothS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 444;" f @@ -5937,7 +5941,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 332;" f topInvW src/Dodge/ListDisplayParams.hs 51;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f -topTestPart src/Dodge/TestString.hs 71;" f +topTestPart src/Dodge/TestString.hs 73;" f torch src/Dodge/Item/Held/Utility.hs 33;" f torchShape src/Dodge/Item/Draw/SPic.hs 252;" f torqueCr src/Dodge/WorldEffect.hs 63;" f @@ -5999,7 +6003,7 @@ truncate src/Polyhedra/Geodesic.hs 38;" f trunkDepth src/TreeHelp.hs 161;" f tryAssignHotkey src/Dodge/Creature/YourControl.hs 94;" f tryAttachItems src/Dodge/Item/Grammar.hs 21;" f -tryCombine src/Dodge/Update/Input/InGame.hs 571;" f +tryCombine src/Dodge/Update/Input/InGame.hs 574;" f tryDropSelected src/Dodge/Update/Input/InGame.hs 115;" f tryGetChannel src/Sound.hs 96;" f tryGetRootAttachedFromInvID src/Dodge/Inventory/Location.hs 20;" f @@ -6051,7 +6055,7 @@ updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 91;" f updateArc src/Dodge/Tesla/Arc.hs 100;" f updateAttachedItems src/Dodge/Creature/State.hs 266;" f -updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 457;" f +updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 460;" f updateBarrel src/Dodge/Barreloid.hs 45;" f updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBounds src/Dodge/Update/Camera.hs 206;" f @@ -6074,7 +6078,7 @@ updateDistortion src/Dodge/Distortion.hs 5;" f updateDistortions src/Dodge/Update.hs 538;" f updateEnergyBall src/Dodge/EnergyBall.hs 45;" f updateEnergyBalls src/Dodge/Update.hs 564;" f -updateEnterRegex src/Dodge/Update/Input/InGame.hs 484;" f +updateEnterRegex src/Dodge/Update/Input/InGame.hs 487;" f updateExpBarrel src/Dodge/Barreloid.hs 19;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f @@ -6089,18 +6093,18 @@ updateHumanoid src/Dodge/Humanoid.hs 13;" f updateIMl src/Dodge/Update.hs 507;" f updateIMl' src/Dodge/Update.hs 512;" f updateInGameCamera src/Dodge/Update/Camera.hs 71;" f -updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 401;" f +updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 404;" f updateInv src/Dodge/Creature/State.hs 162;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 89;" f updateItemTargeting src/Dodge/Creature/State.hs 377;" f updateItemWithOrientation src/Dodge/Creature/State.hs 286;" f -updateKeyInGame src/Dodge/Update/Input/InGame.hs 395;" f -updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 383;" f +updateKeyInGame src/Dodge/Update/Input/InGame.hs 398;" f +updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 386;" f updateLampoid src/Dodge/Lampoid.hs 12;" f updateLaser src/Dodge/Laser/Update.hs 13;" f updateLasers src/Dodge/Update.hs 436;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f -updateLongPressInGame src/Dodge/Update/Input/InGame.hs 416;" f +updateLongPressInGame src/Dodge/Update/Input/InGame.hs 419;" f updateMachine src/Dodge/Machine/Update.hs 19;" f updateMagnets src/Dodge/Update.hs 307;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 176;" f @@ -6116,8 +6120,8 @@ updatePastWorlds src/Dodge/Update.hs 424;" f updatePosEvent src/Dodge/PosEvent.hs 11;" f updatePosEvents src/Dodge/Update.hs 573;" f updatePreload src/Preload/Update.hs 20;" f -updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 358;" f -updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 361;" f +updatePressedButtonsCarte src/Dodge/Update/Input/InGame.hs 361;" f +updatePressedButtonsCarte' src/Dodge/Update/Input/InGame.hs 364;" f updateProjectile src/Dodge/Projectile/Update.hs 23;" f updateProp src/Dodge/Prop/Update.hs 11;" f updatePulse src/Dodge/Creature/Update.hs 22;" f @@ -6127,7 +6131,7 @@ updateRadarBlips src/Dodge/Update.hs 541;" f updateRadarSweep src/Dodge/RadarSweep.hs 25;" f updateRadarSweeps src/Dodge/Update.hs 567;" f updateRandNode src/TreeHelp.hs 108;" f -updateRenderSplit appDodge/Main.hs 107;" f +updateRenderSplit appDodge/Main.hs 108;" f updateRootItemID src/Dodge/Inventory/Location.hs 35;" f updateScopeZoom src/Dodge/Update/Scroll.hs 76;" f updateScopeZoom' src/Dodge/Update/Scroll.hs 81;" f