From a4f8369420c07e4d7b6504292bff03de11b88f20 Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 5 Dec 2025 12:05:30 +0000 Subject: [PATCH] Simplify explosions --- src/Dodge/WorldEvent/Explosion.hs | 17 +--- src/Dodge/WorldEvent/ThingsHit.hs | 8 +- src/ListHelp.hs | 1 + tags | 135 ++++++++++++++++-------------- 4 files changed, 83 insertions(+), 78 deletions(-) diff --git a/src/Dodge/WorldEvent/Explosion.hs b/src/Dodge/WorldEvent/Explosion.hs index 00f1d3705..f50decd3b 100644 --- a/src/Dodge/WorldEvent/Explosion.hs +++ b/src/Dodge/WorldEvent/Explosion.hs @@ -53,7 +53,6 @@ makeTeslaExplosionAt = undefined -- [1 .. 29] makeFlameExplosionAt :: - -- | Position Point2 -> World -> World @@ -66,9 +65,6 @@ makeFlameExplosionAt p w = velocities = replicateM 15 (randInCirc 1) & evalState $ _randGen w timers = randomRs (80, 100) $ _randGen w --- the ( Nthing :: Maybe Int ) here is "maybe" a creature id that the --- particle passes through for the first frame of its existence - makeExplosionAt :: Point3 -> Point3 -> World -> World makeExplosionAt p vel w = w @@ -78,15 +74,10 @@ makeExplosionAt p vel w = .:~ MakeTempLight (LSParam p 150 (V3 1 0.5 0)) 20 & makeShockwaveAt [] p 50 100 1 white where - fVs = fmap (`v2z` 0) $ replicateM 100 (randInCirc 1) & evalState $ _randGen w - fPs' = fmap (`v2z` 0) $ replicateM 100 (randInCirc 5) & evalState $ _randGen w + fVs = fmap (`v2z` 0) $ replicateM 100 (randInCirc 8) & evalState $ _randGen w fdamps = replicateM 100 (state $ randomR (0,1)) & evalState $ _randGen w - inversePushOut v = (15 - norm v) * 0.01 *^ v - fVs' = zipWith (+.+.+) fVs $ map inversePushOut fPs' sizes = randomRs (2, 9) $ _randGen w times = randomRs (15, 20) $ _randGen w - mF q v damp size time = makeFlamelet - --(q - (2*v + 2* vel)) (v + damp *.*.* vel) size time - (q - (2*v )) (v + damp *.*.* vel) size time - newFs = zipWith4 (mF p) (zipWith (+) fPs' (fmap (3 *.*.*) fVs')) fdamps sizes times - addFlames w' = foldl' (flip ($)) w' newFs + mF v damp size time = makeFlamelet p (v + damp *^ vel) size time + newFs = zipWith4 mF fVs fdamps sizes times + addFlames w' = foldl' (&) w' newFs diff --git a/src/Dodge/WorldEvent/ThingsHit.hs b/src/Dodge/WorldEvent/ThingsHit.hs index 1204928f7..782f176c8 100644 --- a/src/Dodge/WorldEvent/ThingsHit.hs +++ b/src/Dodge/WorldEvent/ThingsHit.hs @@ -11,12 +11,14 @@ module Dodge.WorldEvent.ThingsHit ( thingsHitExceptCr, crsHitRadial, wlsHitRadial, + wlHitPos, crHit, crWlPbHit, wlsHitUnsorted, isWalkable, ) where +import ListHelp import Control.Applicative import Dodge.Wall.Pathing import Data.Monoid @@ -28,7 +30,7 @@ import Control.Monad import Control.Lens import Data.Bifunctor import qualified Data.IntSet as IS -import Data.List (sortOn) +--import Data.List (sortOn) import Data.Maybe import Dodge.Base import Dodge.Data.World @@ -139,6 +141,10 @@ thingsHitExceptCr (Just cid) sp ep = filter t . thingsHit sp ep wlsHit :: Point2 -> Point2 -> World -> [(Point2, Wall)] wlsHit sp ep = sortOn (dist sp . fst) . wlsHitUnsorted sp ep +---- pushes out any hit point by one +wlHitPos :: Point2 -> Point2 -> World -> Point2 +wlHitPos sp ep = maybe ep ((+ normalize (ep - sp)) . fst) . safeHead . wlsHit sp ep + wlsHitUnsorted :: Point2 -> Point2 -> World -> [(Point2, Wall)] wlsHitUnsorted sp ep | sp == ep = const mempty diff --git a/src/ListHelp.hs b/src/ListHelp.hs index b45f70200..7369297d1 100644 --- a/src/ListHelp.hs +++ b/src/ListHelp.hs @@ -66,6 +66,7 @@ xs !? n {-# INLINABLE (!?) #-} safeHead :: [a] -> Maybe a +{-# INLINE safeHead #-} safeHead (x:_) = Just x safeHead _ = Nothing diff --git a/tags b/tags index 38f01b8ea..54b5e5766 100644 --- a/tags +++ b/tags @@ -130,6 +130,7 @@ Block src/Dodge/Data/Block.hs 20;" t BlockDebris src/Dodge/Data/Prop.hs 23;" C BlockDegradeSound src/Dodge/Data/SoundOrigin.hs 30;" C BlockPart src/Dodge/Data/Wall/Structure.hs 14;" C +BlockStatus src/Dodge/Data/Universe.hs 101;" t BlockedLink src/Dodge/Data/Room.hs 50;" C BloomLayer src/Picture/Data.hs 21;" C Blunt src/Dodge/Data/Damage.hs 17;" C @@ -572,7 +573,7 @@ InputScreen src/Dodge/Data/Universe.hs 95;" C Inspect_wall src/Dodge/Data/Config.hs 105;" C Institution src/Dodge/Data/Scenario.hs 42;" t Int2 src/Geometry/Data.hs 21;" t -IntID src/Dodge/Data/Universe.hs 117;" t +IntID src/Dodge/Data/Universe.hs 123;" t Intention src/Dodge/Data/Creature.hs 68;" t IntersectingRoomClipBoundaries src/Dodge/Data/Config.hs 121;" C IntroScanSF src/Dodge/Data/ComposedItem.hs 21;" C @@ -666,6 +667,9 @@ LinearShockwave src/Dodge/Data/LinearShockwave.hs 11;" t ListDisplayParams src/Dodge/Data/SelectionList.hs 13;" t LiveLongAndProsper src/Dodge/Data/ActionPlan.hs 150;" C LivingComplex src/Dodge/Data/Scenario.hs 68;" C +LoadReady src/Dodge/Data/Universe.hs 104;" C +LoadWaiting src/Dodge/Data/Universe.hs 103;" C +LoadWaitingClicked src/Dodge/Data/Universe.hs 102;" C LoadingBaySS src/Dodge/Data/Scenario.hs 93;" C LoadingScreen src/Dodge/Data/Universe.hs 96;" C LocDT src/Dodge/Data/DoubleTree.hs 99;" C @@ -689,9 +693,9 @@ MICROCHIP src/Dodge/Data/Item/Combine.hs 71;" C MICROPHONE src/Dodge/Data/Item/Combine.hs 82;" C MINIDISPLAY src/Dodge/Data/Item/Combine.hs 76;" C MINIGUNX src/Dodge/Data/Item/Combine.hs 150;" C -MODBlockedString src/Dodge/Data/Universe.hs 103;" C -MODString src/Dodge/Data/Universe.hs 102;" C -MODStringOption src/Dodge/Data/Universe.hs 104;" C +MODBlockedString src/Dodge/Data/Universe.hs 109;" C +MODString src/Dodge/Data/Universe.hs 108;" C +MODStringOption src/Dodge/Data/Universe.hs 110;" C MOTOR src/Dodge/Data/Item/Combine.hs 63;" C MPO src/Dodge/Base/Collide.hs 96;" t MTRS src/Dodge/Data/MTRS.hs 6;" t @@ -740,8 +744,8 @@ Medium src/Shape/Data.hs 25;" C Melee src/Dodge/Data/ActionPlan.hs 40;" C MeleeStrike src/Dodge/Data/ActionPlan.hs 144;" C Memory src/Dodge/Data/Creature.hs 75;" t -MenuOption src/Dodge/Data/Universe.hs 106;" t -MenuOptionDisplay src/Dodge/Data/Universe.hs 101;" t +MenuOption src/Dodge/Data/Universe.hs 112;" t +MenuOptionDisplay src/Dodge/Data/Universe.hs 107;" t MetaBranch src/Dodge/Data/MetaTree.hs 18;" t MetaNode src/Dodge/Data/MetaTree.hs 14;" t MetaTree src/Dodge/Data/MetaTree.hs 11;" t @@ -1328,8 +1332,8 @@ ToPlaySound src/Sound/Data.hs 33;" t ToStart src/Sound/Data.hs 24;" C ToStartMenu src/Sound/Data.hs 27;" C ToStop src/Sound/Data.hs 26;" C -Toggle src/Dodge/Data/Universe.hs 107;" C -Toggle2 src/Dodge/Data/Universe.hs 111;" C +Toggle src/Dodge/Data/Universe.hs 113;" C +Toggle2 src/Dodge/Data/Universe.hs 117;" C ToggleSF src/Dodge/Data/ComposedItem.hs 38;" C TopDT src/Dodge/Data/DoubleTree.hs 83;" C TopLDT src/Dodge/Data/DoubleTree.hs 41;" C @@ -1999,13 +2003,13 @@ _meleeCooldown src/Dodge/Data/Creature/Misc.hs 68;" f _meleeTarget src/Dodge/Data/ActionPlan.hs 139;" f _mgField src/Dodge/Data/Magnet.hs 23;" f _mgPos src/Dodge/Data/Magnet.hs 22;" f -_moEff src/Dodge/Data/Universe.hs 108;" f -_moEff1 src/Dodge/Data/Universe.hs 112;" f -_moEff2 src/Dodge/Data/Universe.hs 113;" f -_moString src/Dodge/Data/Universe.hs 109;" f -_moString src/Dodge/Data/Universe.hs 114;" f -_modOption src/Dodge/Data/Universe.hs 104;" f -_modString src/Dodge/Data/Universe.hs 102;" f +_moEff src/Dodge/Data/Universe.hs 114;" f +_moEff1 src/Dodge/Data/Universe.hs 118;" f +_moEff2 src/Dodge/Data/Universe.hs 119;" f +_moString src/Dodge/Data/Universe.hs 115;" f +_moString src/Dodge/Data/Universe.hs 120;" f +_modOption src/Dodge/Data/Universe.hs 110;" f +_modString src/Dodge/Data/Universe.hs 108;" f _modifications src/Dodge/Data/LWorld.hs 129;" f _mouseButtons src/Dodge/Data/Input.hs 38;" f _mouseButtonsReleased src/Dodge/Data/Input.hs 39;" f @@ -2206,7 +2210,7 @@ _rsRad src/Dodge/Data/RadarSweep.hs 19;" f _rsSource src/Dodge/Data/RadarSweep.hs 24;" f _rsTimer src/Dodge/Data/RadarSweep.hs 21;" f _scAvailableLines src/Dodge/Data/Universe.hs 92;" f -_scContinue src/Dodge/Data/Universe.hs 98;" f +_scBlockStatus src/Dodge/Data/Universe.hs 98;" f _scDisplayTime src/Dodge/Data/Universe.hs 93;" f _scInput src/Dodge/Data/Universe.hs 95;" f _scOffset src/Dodge/Data/Universe.hs 88;" f @@ -2917,7 +2921,7 @@ crDisplayVigilance src/Dodge/Creature/Picture/Awareness.hs 53;" f crHasTarget src/Dodge/Creature/Test.hs 65;" f crHasTargetLOS src/Dodge/Creature/Test.hs 68;" f crHeight src/Dodge/Base/Collide.hs 173;" f -crHit src/Dodge/WorldEvent/ThingsHit.hs 119;" f +crHit src/Dodge/WorldEvent/ThingsHit.hs 121;" f crIXsNearCirc src/Dodge/Zoning/Creature.hs 33;" f crIXsNearPoint src/Dodge/Zoning/Creature.hs 15;" f crInAimStance src/Dodge/Creature/Test.hs 93;" f @@ -2948,7 +2952,7 @@ crUpdateInvidLocations src/Dodge/Inventory/Location.hs 66;" f crUpdateItemLocations src/Dodge/Inventory/Location.hs 48;" f crVocalizationSound src/Dodge/Creature/Vocalization.hs 13;" f crWarningSounds src/Dodge/Creature/Vocalization.hs 23;" f -crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 57;" f +crWlPbHit src/Dodge/WorldEvent/ThingsHit.hs 59;" f crZoneSize src/Dodge/Zoning/Creature.hs 43;" f craftInfo src/Dodge/Item/Info.hs 169;" f craftItemSPic src/Dodge/Item/Draw/SPic.hs 40;" f @@ -2976,9 +2980,9 @@ critsRoom src/Dodge/Room/Room.hs 398;" f crixsNearSeg src/Dodge/Zoning/Creature.hs 30;" f crossPic src/Dodge/Render/Label.hs 27;" f crossProd src/Geometry/Vector3D.hs 41;" f -crsHit src/Dodge/WorldEvent/ThingsHit.hs 67;" f -crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 162;" f -crsHitZ src/Dodge/WorldEvent/ThingsHit.hs 78;" f +crsHit src/Dodge/WorldEvent/ThingsHit.hs 69;" f +crsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 168;" f +crsHitZ src/Dodge/WorldEvent/ThingsHit.hs 80;" 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 @@ -3031,7 +3035,7 @@ damageTypeThreshold src/Dodge/Placement/Instance/Sensor.hs 34;" f damageWall src/Dodge/Wall/Damage.hs 29;" f damsToExpBarrel src/Dodge/Barreloid.hs 50;" f dark src/Color.hs 108;" f -darkenBackground src/Dodge/Render/MenuScreen.hs 40;" f +darkenBackground src/Dodge/Render/MenuScreen.hs 44;" f dbArg src/Dodge/Base.hs 165;" f dbArgChain src/Dodge/Base.hs 170;" f dbwMuzzles src/Dodge/HeldUse.hs 322;" f @@ -3203,7 +3207,7 @@ doGravityPU src/Dodge/Projectile/Update.hs 35;" f doHeldUseEffect src/Dodge/HeldUse.hs 351;" f doInPlacements src/Dodge/Layout.hs 87;" f doIndividualPlacements src/Dodge/Layout.hs 101;" f -doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 29;" f +doInputScreenInput src/Dodge/Update/Input/ScreenLayer.hs 38;" f doItemTimeScroll src/Dodge/Update.hs 193;" f doLoop src/Loop.hs 60;" f doMagnetBuBu src/Dodge/Bullet.hs 35;" f @@ -3296,7 +3300,7 @@ drawForceField src/Dodge/Wall/Draw.hs 15;" f drawGapPlus src/Dodge/Render/Picture.hs 278;" f drawGib src/Dodge/Prop/Draw.hs 26;" f drawHUD src/Dodge/Render/HUD.hs 52;" f -drawInputMenu src/Dodge/Render/MenuScreen.hs 27;" f +drawInputMenu src/Dodge/Render/MenuScreen.hs 31;" f drawInspectWall src/Dodge/Debug/Picture.hs 255;" f drawInspectWalls src/Dodge/Debug/Picture.hs 243;" f drawInventory src/Dodge/Render/HUD.hs 59;" f @@ -3312,18 +3316,18 @@ drawList src/Dodge/Render/List.hs 209;" f drawListElement src/Dodge/Render/List.hs 187;" f drawListYgapScaleYoff src/Dodge/Render/List.hs 96;" f drawListYoff src/Dodge/Render/List.hs 93;" f -drawLoadingScreen src/Dodge/Render/MenuScreen.hs 22;" f +drawLoadingScreen src/Dodge/Render/MenuScreen.hs 23;" f drawMachine src/Dodge/Machine/Draw.hs 16;" f drawMapperAR src/Dodge/Targeting/Draw.hs 12;" f drawMapperInventory src/Dodge/Render/HUD.hs 174;" f drawMenuClick src/Dodge/Render/Picture.hs 166;" f drawMenuCursor src/Dodge/Render/Picture.hs 178;" f drawMenuOrHUD src/Dodge/Render/Picture.hs 67;" f -drawMenuScreen src/Dodge/Render/MenuScreen.hs 16;" f +drawMenuScreen src/Dodge/Render/MenuScreen.hs 17;" f drawMouseCursor src/Dodge/Render/Picture.hs 83;" f drawMouseOver src/Dodge/Render/HUD.hs 110;" f drawMousePosition src/Dodge/Debug/Picture.hs 376;" f -drawOptions src/Dodge/Render/MenuScreen.hs 30;" f +drawOptions src/Dodge/Render/MenuScreen.hs 34;" f drawPathBetween src/Dodge/Debug/Picture.hs 202;" f drawPathEdge src/Dodge/Debug/Picture.hs 260;" f drawPathing src/Dodge/Debug/Picture.hs 407;" f @@ -3357,7 +3361,7 @@ drawTargetingAR src/Dodge/Targeting/Draw.hs 20;" f drawTerminalDisplay src/Dodge/Render/HUD.hs 361;" f drawTeslaArc src/Dodge/Tesla/Draw.hs 9;" f drawText src/Picture/Base.hs 220;" f -drawTitle src/Dodge/Render/MenuScreen.hs 43;" f +drawTitle src/Dodge/Render/MenuScreen.hs 47;" f drawTitleBackground src/Dodge/Render/List.hs 45;" f drawTractorBeam src/Dodge/TractorBeam/Draw.hs 7;" f drawTurret src/Dodge/Machine/Draw.hs 76;" f @@ -3440,7 +3444,7 @@ equipmentStrValue src/Dodge/Creature/Statistics.hs 56;" f errorAngleVV src/Geometry.hs 59;" f errorClosestPointOnLine src/Geometry.hs 71;" f errorClosestPointOnLineParam src/Geometry.hs 77;" f -errorHead src/ListHelp.hs 76;" f +errorHead src/ListHelp.hs 77;" f errorIsLHS src/Geometry.hs 65;" f errorNormalizeV src/Geometry.hs 54;" f errorPointInPolygon src/Geometry.hs 46;" f @@ -3477,7 +3481,7 @@ findReverseEdge src/Polyhedra.hs 50;" f findReverseEdgeList src/Polyhedra.hs 57;" f findWallFreeDropPoint src/Dodge/FloorItem.hs 27;" f findWallsInPolygon src/Dodge/LevelGen/StaticWalls/Deprecated.hs 78;" f -findWithIx src/ListHelp.hs 123;" f +findWithIx src/ListHelp.hs 124;" f fireFadeS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 564;" f fireLoudS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 724;" f fireS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 476;" f @@ -3516,7 +3520,7 @@ foamSprayFadeOutS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 570;" f foamSprayLoopS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 566;" f foldMTRS src/Dodge/Room/Tutorial.hs 65;" f foldPairs src/ListHelp.hs 37;" f -foldrWhileArb src/ListHelp.hs 110;" f +foldrWhileArb src/ListHelp.hs 111;" f followImpulse src/Dodge/Creature/Impulse.hs 24;" f foot1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 498;" f foot2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 522;" f @@ -3812,7 +3816,7 @@ isCognizant src/Dodge/Creature/Perception.hs 105;" f isConnected src/Dodge/Inventory/Swap.hs 77;" f isCornerLink src/Dodge/RoomLink.hs 65;" f isElectrical src/Dodge/Machine/Update.hs 84;" f -isFlyable src/Dodge/WorldEvent/ThingsHit.hs 170;" f +isFlyable src/Dodge/WorldEvent/ThingsHit.hs 176;" f isGroupSelectableSection src/Dodge/Update/Input/InGame.hs 197;" f isInLnk src/Dodge/PlacementSpot.hs 161;" f isJust' src/MaybeHelp.hs 27;" f @@ -3833,7 +3837,7 @@ isUnusedLnkType src/Dodge/PlacementSpot.hs 190;" f isUsedLnkUnplaced src/Dodge/PlacementSpot.hs 174;" f isValidCommand src/Dodge/Debug/Terminal.hs 134;" f isVowel src/StringHelp.hs 8;" f -isWalkable src/Dodge/WorldEvent/ThingsHit.hs 177;" f +isWalkable src/Dodge/WorldEvent/ThingsHit.hs 183;" f isoMatrix src/MatrixHelper.hs 35;" f isotriBWH src/Geometry/Polygon.hs 22;" f itDim src/Dodge/Item/InvSize.hs 21;" f @@ -3927,7 +3931,7 @@ lastMap src/Dodge/DoubleTree.hs 253;" f latticeXsYs src/Grid.hs 24;" f launcherCrit src/Dodge/Creature/LauncherCrit.hs 12;" f layoutLevelFromSeed src/Dodge/LevelGen.hs 40;" f -ldpSelection src/Dodge/Update/Input/ScreenLayer.hs 75;" f +ldpSelection src/Dodge/Update/Input/ScreenLayer.hs 84;" f ldtIL src/Dodge/DoubleTree.hs 225;" f ldtPropagate src/Dodge/DoubleTree.hs 69;" f ldtPropagate' src/Dodge/DoubleTree.hs 60;" f @@ -3985,6 +3989,7 @@ loadSaveSlot src/Dodge/Save.hs 74;" f loadSeed src/Dodge/LoadSeed.hs 7;" f loadSound src/Dodge/SoundLogic/LoadSound.hs 11;" f loadSounds src/Dodge/SoundLogic/LoadSound.hs 18;" f +loadingScreenUpdate src/Dodge/Update/Input/ScreenLayer.hs 30;" f loadme src/Dodge/Debug/Terminal.hs 142;" f locDTGoHelp src/Dodge/DoubleTree.hs 348;" f locDTGoLeft src/Dodge/DoubleTree.hs 329;" f @@ -4055,7 +4060,7 @@ makeDebris src/Dodge/Block/Debris.hs 48;" f makeDebrisDirected src/Dodge/Block/Debris.hs 51;" f makeDoorDebris src/Dodge/Block/Debris.hs 26;" f makeDustAt src/Dodge/WorldEvent/Cloud.hs 17;" f -makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 72;" f +makeExplosionAt src/Dodge/WorldEvent/Explosion.hs 68;" f makeFlak src/Dodge/Bullet.hs 146;" f makeFlame src/Dodge/Flame.hs 46;" f makeFlameExplosionAt src/Dodge/WorldEvent/Explosion.hs 55;" f @@ -4099,6 +4104,7 @@ maxInvSlots src/Dodge/Inventory/CheckSlots.hs 30;" f maxShowX src/Dodge/Combine/Graph.hs 48;" f maxViewDistance src/Dodge/Viewpoints.hs 26;" f maybeBlockedPassage src/Dodge/Room/RezBox.hs 80;" f +maybeClearLoadingScreen src/Dodge/StartNewGame.hs 58;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 59;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 64;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 562;" f @@ -4136,9 +4142,9 @@ memoTopPrismEdgeIndices src/Shader/Poke.hs 329;" f memoTopPrismIndices src/Shader/Poke.hs 317;" f menuLDP src/Dodge/ListDisplayParams.hs 52;" f menuOptionToSelectionItem src/Dodge/Menu/Option.hs 91;" f -merge src/ListHelp.hs 83;" f -mergeBy src/ListHelp.hs 86;" f -mergeOn src/ListHelp.hs 93;" f +merge src/ListHelp.hs 84;" f +mergeBy src/ListHelp.hs 87;" f +mergeOn src/ListHelp.hs 94;" f mergeSound src/Sound.hs 59;" f metal1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 634;" f metal2S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 702;" f @@ -4187,7 +4193,7 @@ mntLSOn src/Dodge/Placement/Instance/LightSource.hs 31;" f mntLightLnkCond src/Dodge/Placement/Instance/LightSource.hs 143;" f mntLightLnkCond' src/Dodge/Placement/Instance/LightSource.hs 148;" f modTo src/Geometry/Zone.hs 18;" f -mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 61;" f +mouseClickOptionsList src/Dodge/Update/Input/ScreenLayer.hs 70;" f mouseCursorType src/Dodge/Render/Picture.hs 90;" f mouseWorldPos src/Dodge/Base/Coordinate.hs 37;" f moveBullet src/Dodge/Bullet.hs 197;" f @@ -4278,8 +4284,8 @@ onXY src/Geometry/Vector3D.hs 130;" f oneH src/Dodge/Creature/Test.hs 96;" f openConsole src/Dodge/Update.hs 131;" f optionMenu src/Dodge/Menu.hs 112;" f -optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 53;" f -optionScreenUpdate src/Dodge/Update/Input/ScreenLayer.hs 44;" f +optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f +optionScreenUpdate src/Dodge/Update/Input/ScreenLayer.hs 53;" f optionValueOffset src/Dodge/Menu/Option.hs 86;" f optionsOptions src/Dodge/Menu.hs 115;" f optionsToSelections src/Dodge/Menu/Option.hs 47;" f @@ -4333,7 +4339,7 @@ pauseMenuOptions src/Dodge/Menu.hs 66;" f pauseSound src/Dodge/SoundLogic.hs 42;" f pauseTime src/Dodge/Update.hs 182;" f pbFlicker src/Dodge/Update.hs 465;" f -pbsHit src/Dodge/WorldEvent/ThingsHit.hs 95;" f +pbsHit src/Dodge/WorldEvent/ThingsHit.hs 97;" f peZoneSize src/Dodge/Zoning/Pathing.hs 49;" f pedestalRoom src/Dodge/Room/Containing.hs 50;" f penThing src/Dodge/Bullet.hs 214;" f @@ -4736,7 +4742,7 @@ safeMinimumOnMaybeF src/FoldableHelp.hs 39;" f safeMinimumOnMaybeL src/FoldableHelp.hs 57;" f safeNormalizeV src/Geometry/Vector.hs 165;" f safeSwapKeys src/IntMapHelp.hs 78;" f -safeUncons src/ListHelp.hs 72;" f +safeUncons src/ListHelp.hs 73;" f safeUpdateSingleNode src/TreeHelp.hs 116;" f saveConfig src/Dodge/Config.hs 23;" f saveQuit src/Dodge/Menu.hs 79;" f @@ -4825,7 +4831,7 @@ setOutLinksPD src/Dodge/RoomLink.hs 95;" f setRBCreatureTargeting src/Dodge/Creature/State.hs 290;" f setRoomInt src/Dodge/Room/Tutorial.hs 72;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 337;" f -setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 88;" f +setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 97;" f setShaderSource src/Shader/Compile.hs 121;" f setShadowLimits src/Dodge/Shadows.hs 11;" f setSoundVolume src/Sound.hs 157;" f @@ -4908,9 +4914,9 @@ showEquipItem src/Dodge/Item/Display.hs 107;" f showInt src/Dodge/Item/Info.hs 75;" f showIntsString src/Dodge/Tree/Compose.hs 129;" f showInventoryPathing src/Dodge/Item/Display.hs 86;" f -showManObj src/Dodge/TestString.hs 53;" f +showManObj src/Dodge/TestString.hs 48;" f showTerminalError src/Dodge/Debug/Terminal.hs 80;" f -showTimeFlow src/Dodge/TestString.hs 76;" f +showTimeFlow src/Dodge/TestString.hs 71;" f shrinkPolyOnEdges src/Geometry/Polygon.hs 175;" f shrinkVert src/Geometry/Polygon.hs 179;" f shuffle src/RandomHelp.hs 49;" f @@ -4933,7 +4939,7 @@ skwareFadeTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 524;" f slap1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 690;" f slapS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 618;" f slideDoorS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 708;" f -slideWindow src/ListHelp.hs 80;" f +slideWindow src/ListHelp.hs 81;" f slowDoorRoom src/Dodge/Room/LongDoor.hs 140;" f slowDoorRoomRunPast src/Dodge/Room/LongDoor.hs 157;" f smallBattery src/Dodge/Item/Ammo.hs 60;" f @@ -5029,11 +5035,11 @@ startCrafts src/Dodge/Room/Start.hs 93;" f startDrag src/Dodge/Update/Input/InGame.hs 280;" f startInvList src/Dodge/Creature.hs 105;" f startInventory src/Dodge/Creature.hs 108;" f -startNewGameInSlot src/Dodge/StartNewGame.hs 17;" f -startPara src/Dodge/StartNewGame.hs 30;" f +startNewGameInSlot src/Dodge/StartNewGame.hs 16;" f +startPara src/Dodge/StartNewGame.hs 29;" f startRoom src/Dodge/Room/Start.hs 53;" f -startSeedGame src/Dodge/StartNewGame.hs 22;" f -startSeedGameConc src/Dodge/StartNewGame.hs 38;" f +startSeedGame src/Dodge/StartNewGame.hs 21;" f +startSeedGameConc src/Dodge/StartNewGame.hs 46;" f statsModifier src/Dodge/Creature/Info.hs 16;" f stickHitSound src/Dodge/Projectile/Update.hs 77;" f stickyMod src/Dodge/Item/Scope.hs 51;" f @@ -5077,8 +5083,8 @@ takeOne src/RandomHelp.hs 22;" f takeOneMore src/RandomHelp.hs 34;" f takeOneWeighted src/RandomHelp.hs 25;" f takeUntil src/FoldableHelp.hs 99;" f -takeWhileArb src/ListHelp.hs 99;" f -takeWhileArb' src/ListHelp.hs 107;" f +takeWhileArb src/ListHelp.hs 100;" f +takeWhileArb' src/ListHelp.hs 108;" f tankShape src/Dodge/Placement/Instance/Tank.hs 22;" f tankSquareDec src/Dodge/Placement/Instance/Tank.hs 15;" f tanksPipesRoom src/Dodge/Room/Tanks.hs 69;" f @@ -5132,11 +5138,11 @@ thickCircle src/Picture/Base.hs 272;" f thickLine src/Picture/Base.hs 244;" f thickLineCol src/Picture/Base.hs 255;" f thinHighBar src/Dodge/Room/Foreground.hs 77;" f -thingHit src/Dodge/WorldEvent/ThingsHit.hs 116;" f -thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 104;" f -thingsHit src/Dodge/WorldEvent/ThingsHit.hs 42;" f -thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 125;" f -thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 50;" f +thingHit src/Dodge/WorldEvent/ThingsHit.hs 118;" f +thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 106;" f +thingsHit src/Dodge/WorldEvent/ThingsHit.hs 44;" f +thingsHitExceptCr src/Dodge/WorldEvent/ThingsHit.hs 127;" f +thingsHitZ src/Dodge/WorldEvent/ThingsHit.hs 52;" f threeLineDecoration src/Dodge/Placement/TopDecoration.hs 61;" f throwItem src/Dodge/Creature/Action.hs 191;" f tileTexCoords src/Tile.hs 11;" f @@ -5183,7 +5189,7 @@ tone440sawtoothquietS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 460;" f topInvW src/Dodge/ListDisplayParams.hs 49;" f topPrismEdgeIndices src/Shader/Poke.hs 335;" f topPrismIndices src/Shader/Poke.hs 410;" f -topTestPart src/Dodge/TestString.hs 49;" f +topTestPart src/Dodge/TestString.hs 44;" f torchShape src/Dodge/Item/Draw/SPic.hs 277;" f torqueAmount src/Dodge/HeldUse.hs 581;" f torqueCr src/Dodge/WorldEffect.hs 77;" f @@ -5406,7 +5412,7 @@ updateUniverseFirst src/Dodge/Update.hs 85;" f updateUniverseLast src/Dodge/Update.hs 136;" f updateUniverseMid src/Dodge/Update.hs 156;" f updateUseInputInGame src/Dodge/Update/Input/InGame.hs 45;" f -updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 23;" f +updateUseInputOnScreen src/Dodge/Update/Input/ScreenLayer.hs 24;" f updateWalkCycle src/Dodge/Creature/State/WalkCycle.hs 11;" f updateWallDamages src/Dodge/Update/WallDamage.hs 15;" f updateWheelEvent src/Dodge/Update/Scroll.hs 25;" f @@ -5528,6 +5534,7 @@ windowXFloat src/Dodge/Data/Config.hs 72;" f windowYFloat src/Dodge/Data/Config.hs 74;" f withAlpha src/Color.hs 10;" f withByteString src/Shader/Compile.hs 157;" f +wlHitPos src/Dodge/WorldEvent/ThingsHit.hs 145;" f wlIXsNearCirc src/Dodge/Zoning/Wall.hs 32;" f wlIXsNearPoint src/Dodge/Zoning/Wall.hs 22;" f wlIXsNearRect src/Dodge/Zoning/Wall.hs 29;" f @@ -5538,14 +5545,14 @@ wlOpaqueDraw src/Dodge/Render/Walls.hs 53;" f wlSeeThroughDraw src/Dodge/Render/Walls.hs 56;" f wlZoneSize src/Dodge/Zoning/Wall.hs 52;" f wlsFromIXs src/Dodge/Zoning/Wall.hs 35;" f -wlsHit src/Dodge/WorldEvent/ThingsHit.hs 139;" f -wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 147;" f -wlsHitUnsorted src/Dodge/WorldEvent/ThingsHit.hs 142;" f +wlsHit src/Dodge/WorldEvent/ThingsHit.hs 141;" f +wlsHitRadial src/Dodge/WorldEvent/ThingsHit.hs 153;" f +wlsHitUnsorted src/Dodge/WorldEvent/ThingsHit.hs 148;" f wlsNearCirc src/Dodge/Zoning/Wall.hs 49;" f wlsNearPoint src/Dodge/Zoning/Wall.hs 39;" f wlsNearRect src/Dodge/Zoning/Wall.hs 46;" f wlsNearSeg src/Dodge/Zoning/Wall.hs 42;" f -wordsBy src/ListHelp.hs 116;" f +wordsBy src/ListHelp.hs 117;" f worldPosToResOffset src/Dodge/Base/Coordinate.hs 29;" f worldPosToScreen src/Dodge/Base/Coordinate.hs 22;" f worldSPic src/Dodge/Render/ShapePicture.hs 22;" f