From 511e765e3a65acfb828695951a23313d60e1c5b1 Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 1 Jan 2025 17:44:00 +0000 Subject: [PATCH] Allow grenades to stick to creatures --- src/Dodge/Block.hs | 2 - src/Dodge/Data/Projectile.hs | 5 +- src/Dodge/Data/Wall.hs | 16 +-- src/Dodge/Debug/Picture.hs | 20 ++- src/Dodge/Projectile/Update.hs | 58 +++++--- tags | 240 +++++++++++++++++---------------- 6 files changed, 178 insertions(+), 163 deletions(-) diff --git a/src/Dodge/Block.hs b/src/Dodge/Block.hs index ce05a9621..be646dcb7 100644 --- a/src/Dodge/Block.hs +++ b/src/Dodge/Block.hs @@ -61,11 +61,9 @@ destroyBlock bl w = & deleteWallIDs wlids & maybeClearPaths (_blObstructs bl) -- must happen after the walls are deleted & cWorld . lWorld . blocks %~ IM.delete (_blID bl) - -- & matDesSound (_blMaterial bl) pos & flip (foldl' $ flip (wlDustAt awl)) (map (pos +.+) ps) where wlids = _blWallIDs bl - --awl = _walls (_cWorld w) IM.! IS.findMin wlids awl = w ^?! cWorld . lWorld . walls . ix (IS.findMin wlids) pos = fst . _wlLine $ awl ps = replicateM 25 (randInCirc 20) & evalState $ _randGen w diff --git a/src/Dodge/Data/Projectile.hs b/src/Dodge/Data/Projectile.hs index cfaca81cd..d25ecf6df 100644 --- a/src/Dodge/Data/Projectile.hs +++ b/src/Dodge/Data/Projectile.hs @@ -5,6 +5,7 @@ module Dodge.Data.Projectile where +import Dodge.Data.Wall.Structure import Dodge.Data.Item.Location import NewInt import Control.Lens @@ -51,8 +52,8 @@ data RocketHoming data GrenadeHitEffect = GBounce {_bounceTolerance :: Float} | GStick - | GStuckCreature {_stuckCrID :: Int, _stuckCrOffset :: Point2} - | GStuckWall {_stuckWlID :: Int} + | GStuckCreature {_stuckCrID :: Int, _stuckCrOffset :: Point2, _stuckCrRot :: Float} + | GStuckWall {_stuckWlID :: WallStructure} deriving (Show, Eq, Ord, Read) --Generic, Flat) data RocketSmoke diff --git a/src/Dodge/Data/Wall.hs b/src/Dodge/Data/Wall.hs index 47d085d17..265a9720b 100644 --- a/src/Dodge/Data/Wall.hs +++ b/src/Dodge/Data/Wall.hs @@ -1,10 +1,11 @@ -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Wall ( module Dodge.Data.Wall, + module Dodge.Data.Wall.Structure, module Dodge.Data.Material, ) where @@ -13,6 +14,7 @@ import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.Material +import Dodge.Data.Wall.Structure import Geometry data Wall = Wall @@ -45,20 +47,8 @@ data Opacity data WallDraw = DrawForceField deriving (Eq, Ord, Show, Enum, Bounded, Read) --Generic, Flat) -data WallStructure - = StandaloneWall - | DoorPart {_wsDoor :: Int} - | MachinePart {_wsMachine :: Int} - | BlockPart {_wsBlock :: Int} - | CreaturePart - { _wlStCreature :: Int - } - deriving (Eq, Ord, Show, Read) --Generic, Flat) - makeLenses ''Wall makeLenses ''Opacity -makeLenses ''WallStructure deriveJSON defaultOptions ''WallDraw deriveJSON defaultOptions ''Opacity -deriveJSON defaultOptions ''WallStructure deriveJSON defaultOptions ''Wall diff --git a/src/Dodge/Debug/Picture.hs b/src/Dodge/Debug/Picture.hs index c4324f917..9083e53b3 100644 --- a/src/Dodge/Debug/Picture.hs +++ b/src/Dodge/Debug/Picture.hs @@ -112,11 +112,13 @@ drawCircCollisionTest :: World -> Picture drawCircCollisionTest w = concat $ do a <- w ^. input . heldWorldPos . at ButtonLeft b <- w ^. input . heldWorldPos . at ButtonRight - let col | anythingHitCirc 2 a b w = red + let col + | anythingHitCirc 2 a b w = red | otherwise = green return $ setLayer DebugLayer (color col $ line [a, b]) - <> drawCoord a w <> drawCoord b w + <> drawCoord a w + <> drawCoord b w drawWallsNearSegment :: World -> Picture drawWallsNearSegment w = concat $ do @@ -124,8 +126,10 @@ drawWallsNearSegment w = concat $ do b <- w ^. input . heldWorldPos . at ButtonRight return . foldMap f $ wlsNearSeg a b w where - f wl = setLayer DebugLayer (color rose $ thickLine 3 [a, b]) - <> drawCoord a w <> drawCoord b w + f wl = + setLayer DebugLayer (color rose $ thickLine 3 [a, b]) + <> drawCoord a w + <> drawCoord b w where (a, b) = _wlLine wl @@ -213,8 +217,10 @@ drawWallsNearCursor :: World -> Picture drawWallsNearCursor w = foldMap f $ wlsNearPoint (mouseWorldPos (_input w) (_wCam w)) w where - f wl = setLayer DebugLayer (color rose $ thickLine 3 [a, b]) - <> drawCoord a w <> drawCoord b w + f wl = + setLayer DebugLayer (color rose $ thickLine 3 [a, b]) + <> drawCoord a w + <> drawCoord b w where (a, b) = _wlLine wl @@ -351,7 +357,7 @@ drawMousePosition w = mwp = mouseWorldPos (w ^. input) (w ^. wCam) drawCoord :: Point2 -> World -> Picture -drawCoord p w = +drawCoord p w = setLayer FixedCoordLayer . uncurryV translate (worldPosToScreen (w ^. wCam) p) . scale 0.1 0.1 diff --git a/src/Dodge/Projectile/Update.hs b/src/Dodge/Projectile/Update.hs index eee251788..1b4c5eb15 100644 --- a/src/Dodge/Projectile/Update.hs +++ b/src/Dodge/Projectile/Update.hs @@ -24,9 +24,8 @@ import RandomHelp updateProjectile :: Projectile -> World -> World updateProjectile pj w = - ( cWorld . lWorld . projectiles . ix (pj ^. pjID) - %~ decTimMvVel - ) + (cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjTimer -~ 1) + . pjMovement pj . shellCollisionCheck pj $ foldl' (flip $ upProjectile pj) w (_pjUpdates pj) @@ -99,24 +98,36 @@ shellCollisionCheck pj w -- bouncing in some way tryShellBounce :: (Point2, Either Creature Wall) -> Projectile -> World -> World tryShellBounce (p, Right wl) pj w + | Just GStuckCreature{} <- pj ^? pjType . gnHitEffect = w | Just GStuckWall{} <- pj ^? pjType . gnHitEffect = w - | Just GStick <- pj ^? pjType . gnHitEffect = - w & cWorld . lWorld . projectiles . ix (_pjID pj) . pjType .~ Grenade - (GStuckWall (wl ^. wlID)) - & cWorld . lWorld . projectiles . ix (_pjID pj) . pjUpdates %~ delete ApplyGravityPU - & soundOriginIDsAt (ShellSound (pj ^. pjID)) [slapS, slap1S] (pj ^. pjPos) + | Just GStick <- pj ^? pjType . gnHitEffect = w + & cWorld . lWorld . projectiles . ix (_pjID pj) . pjType + .~ Grenade (GStuckWall (wl ^. wlStructure)) + & cWorld . lWorld . projectiles . ix (_pjID pj) . pjUpdates %~ delete ApplyGravityPU + & soundOriginIDsAt (ShellSound (pj ^. pjID)) [slapS, slap1S] (pj ^. pjPos) | Just x <- pj ^? pjType . gnHitEffect . bounceTolerance = if abs (dotV (pj ^. pjVel) (vNormal hitline)) < x - then - w + then w & cWorld . lWorld . projectiles . ix (_pjID pj) . pjVel - %~ reflectIn - hitline + %~ reflectIn hitline & cWorld . lWorld . projectiles . ix (_pjID pj) . pjPos .~ p & soundStart (ShellSound (pj ^. pjID)) (pj ^. pjPos) click1S Nothing else explodeShell pj w where hitline = normalizeV $ uncurry (-) $ _wlLine wl +tryShellBounce (p, Left cr) pj w + | Just GStuckCreature{} <- pj ^? pjType . gnHitEffect = w + | Just GStuckWall{} <- pj ^? pjType . gnHitEffect = w + | Just GStick <- pj ^? pjType . gnHitEffect = w + & cWorld . lWorld . projectiles . ix (_pjID pj) . pjType + .~ Grenade + (GStuckCreature + (cr ^. crID) + (rotateV (- cr ^. crDir) (p - cr ^. crPos)) + (pj ^. pjDir - cr ^. crDir) + ) + & cWorld . lWorld . projectiles . ix (_pjID pj) . pjUpdates %~ delete ApplyGravityPU + & soundOriginIDsAt (ShellSound (pj ^. pjID)) [slapS, slap1S] (pj ^. pjPos) tryShellBounce _ pj w = explodeShell pj w destroyProjectile :: Maybe (NewInt ItmInt) -> Int -> World -> World @@ -189,15 +200,22 @@ pjRemoteSetDirection ph pj w = case ph of where lw = w ^. cWorld . lWorld -decTimMvVel :: Projectile -> Projectile -decTimMvVel pj - | Just GStuckWall{} <- pj ^? pjType . gnHitEffect = pj & pjTimer -~ 1 +pjMovement :: Projectile -> World -> World +pjMovement pj w + | Just GStuckWall{} <- pj ^? pjType . gnHitEffect = w + | Just (GStuckCreature crid p d) <- pj ^? pjType . gnHitEffect = fromMaybe w $ do + cpos <- w ^? cWorld . lWorld . creatures . ix crid . crPos + cdir <- w ^? cWorld . lWorld . creatures . ix crid . crDir + return $ + w & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjPos + .~ cpos + rotateV cdir p + & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjDir + .~ d + cdir | otherwise = - pj - & pjSpin *~ 0.99 - & pjTimer -~ 1 - & pjPos +~ _pjVel pj - & pjDir +~ _pjSpin pj + w + & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjSpin *~ 0.99 + & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjPos +~ _pjVel pj + & cWorld . lWorld . projectiles . ix (pj ^. pjID) . pjDir +~ _pjSpin pj explodeShell :: Projectile -> diff --git a/tags b/tags index 81d78167d..5047b5e35 100644 --- a/tags +++ b/tags @@ -188,7 +188,7 @@ BlockDrawColHeightPoss src/Dodge/Data/Block.hs 42;" C BlockDrawMempty src/Dodge/Data/Block.hs 39;" C BlockDraws src/Dodge/Data/Block.hs 41;" C BlockObstacle src/Dodge/Data/PathGraph.hs 49;" C -BlockPart src/Dodge/Data/Wall.hs 52;" C +BlockPart src/Dodge/Data/Wall/Structure.hs 16;" C BlockedLink src/Dodge/Data/Room.hs 48;" C BloomLayer src/Picture/Data.hs 25;" C BloomNoZWrite src/Picture/Data.hs 26;" C @@ -424,7 +424,7 @@ CreatureCorpse src/Dodge/Data/Creature.hs 72;" t CreatureDropType src/Dodge/Data/Creature/State.hs 23;" t CreatureEffect src/Dodge/CreatureEffect.hs 1;" m CreatureEffect src/Dodge/Data/CreatureEffect.hs 6;" m -CreaturePart src/Dodge/Data/Wall.hs 53;" C +CreaturePart src/Dodge/Data/Wall/Structure.hs 17;" C CreatureState src/Dodge/Data/Creature/State.hs 16;" t CreatureStatistics src/Dodge/Data/Creature/Misc.hs 20;" t CreatureType src/Dodge/Data/Creature/Misc.hs 69;" t @@ -539,7 +539,7 @@ DoorMechanism src/Dodge/Data/WorldEffect.hs 69;" C DoorObstacle src/Dodge/Data/PathGraph.hs 50;" C DoorOpen src/Dodge/Data/Door.hs 23;" C DoorPane src/Dodge/LevelGen/DoorPane.hs 1;" m -DoorPart src/Dodge/Data/Wall.hs 50;" C +DoorPart src/Dodge/Data/Wall/Structure.hs 14;" C DoorStatus src/Dodge/Data/Door.hs 23;" t DoubleRes src/Dodge/Data/Config.hs 97;" C DoubleStack src/DoubleStack.hs 1;" m @@ -576,9 +576,9 @@ Draw src/Dodge/Tesla/Arc/Draw.hs 1;" m Draw src/Dodge/Tesla/Draw.hs 1;" m Draw src/Dodge/TractorBeam/Draw.hs 1;" m Draw src/Dodge/Wall/Draw.hs 1;" m -DrawForceField src/Dodge/Data/Wall.hs 45;" C +DrawForceField src/Dodge/Data/Wall.hs 47;" C DrawNoButton src/Dodge/Data/Button.hs 19;" C -DrawnWall src/Dodge/Data/Wall.hs 41;" C +DrawnWall src/Dodge/Data/Wall.hs 43;" C Drone src/Dodge/Item/Weapon/Drone.hs 1;" m DroneAmmo src/Dodge/Data/Item/Use/Consumption/Ammo.hs 30;" C DropAll src/Dodge/Data/Creature/State.hs 24;" C @@ -732,7 +732,7 @@ FullSize src/Dodge/Data/Item/Params.hs 31;" C FullyVisible src/Dodge/Data/CamouflageStatus.hs 12;" C FunctionChangeLink src/Dodge/Data/ComposedItem.hs 30;" C FunctionChangeSF src/Dodge/Data/ComposedItem.hs 60;" C -GBounce src/Dodge/Data/Projectile.hs 52;" C +GBounce src/Dodge/Data/Projectile.hs 53;" C GEqC src/SameConstr.hs 20;" c GIMBAL src/Dodge/Data/Item/Combine.hs 80;" C GLASSSHARD src/Dodge/Data/Item/Combine.hs 44;" C @@ -740,9 +740,9 @@ GLAUNCHER src/Dodge/Data/Item/Combine.hs 157;" C GLHelp src/GLHelp.hs 1;" m GRAPECANNON src/Dodge/Data/Item/Combine.hs 134;" C GREEN src/Color/Data.hs 16;" C -GStick src/Dodge/Data/Projectile.hs 53;" C -GStuckCreature src/Dodge/Data/Projectile.hs 54;" C -GStuckWall src/Dodge/Data/Projectile.hs 55;" C +GStick src/Dodge/Data/Projectile.hs 54;" C +GStuckCreature src/Dodge/Data/Projectile.hs 55;" C +GStuckWall src/Dodge/Data/Projectile.hs 56;" C GYROSCOPE src/Dodge/Data/Item/Combine.hs 81;" C GadgetPlatformSF src/Dodge/Data/ComposedItem.hs 44;" C GameOverOptions src/Dodge/Data/Universe.hs 70;" C @@ -789,8 +789,8 @@ Graph src/Dodge/Combine/Graph.hs 3;" m Graph src/Dodge/Graph.hs 2;" m GraphHelp src/GraphHelp.hs 1;" m GraphVizHelp src/GraphVizHelp.hs 2;" m -Grenade src/Dodge/Data/Projectile.hs 35;" C -GrenadeHitEffect src/Dodge/Data/Projectile.hs 51;" t +Grenade src/Dodge/Data/Projectile.hs 36;" C +GrenadeHitEffect src/Dodge/Data/Projectile.hs 52;" t GrenadeHitEffectLink src/Dodge/Data/ComposedItem.hs 35;" C GrenadeHitEffectSF src/Dodge/Data/ComposedItem.hs 63;" C Grid src/Grid.hs 1;" m @@ -835,8 +835,8 @@ HeldUse src/Dodge/HeldUse.hs 4;" m HeldUseEffect src/Dodge/Data/Item/Use.hs 48;" t HelpNum src/HelpNum.hs 1;" m HiddenGoal src/Dodge/Data/Scenario.hs 14;" C -HomeUsingRemoteScreen src/Dodge/Data/Projectile.hs 47;" C -HomeUsingTargeting src/Dodge/Data/Projectile.hs 48;" C +HomeUsingRemoteScreen src/Dodge/Data/Projectile.hs 48;" C +HomeUsingTargeting src/Dodge/Data/Projectile.hs 49;" C Hospital src/Dodge/Data/Scenario.hs 69;" C Hotkey src/Dodge/Data/Equipment/Misc.hs 32;" t Hotkey src/Dodge/Hotkey.hs 1;" m @@ -1102,7 +1102,7 @@ Machine src/Dodge/Data/Machine.hs 31;" t Machine src/Dodge/Data/Machine.hs 6;" m Machine src/Dodge/Machine.hs 1;" m MachineAltSound src/Dodge/Data/SoundOrigin.hs 22;" C -MachinePart src/Dodge/Data/Wall.hs 51;" C +MachinePart src/Dodge/Data/Wall/Structure.hs 15;" C MachineSound src/Dodge/Data/SoundOrigin.hs 21;" C MachineType src/Dodge/Data/Machine.hs 49;" t MagShieldParams src/Dodge/Data/Item/Params.hs 15;" C @@ -1259,7 +1259,7 @@ NoFaction src/Dodge/Data/Creature/State.hs 40;" C NoFlare src/Dodge/Data/Item/Use.hs 126;" C NoHammer src/Dodge/Data/Hammer.hs 13;" C NoHeldUseEffect src/Dodge/Data/Item/Use.hs 49;" C -NoHoming src/Dodge/Data/Projectile.hs 46;" C +NoHoming src/Dodge/Data/Projectile.hs 47;" C NoIntImp src/Dodge/Data/CreatureEffect.hs 20;" C NoInvEffect src/Dodge/Data/Item/Effect.hs 20;" C NoItTargeting src/Dodge/Data/Item.hs 54;" C @@ -1347,8 +1347,8 @@ OneArgument src/Dodge/Data/Terminal.hs 96;" C OneHand src/Dodge/Data/Item/Use.hs 187;" C OnwardCluster src/Dodge/Data/RoomCluster.hs 14;" C OnwardList src/Dodge/Annotation/Data.hs 16;" C -Opacity src/Dodge/Data/Wall.hs 38;" t -Opaque src/Dodge/Data/Wall.hs 42;" C +Opacity src/Dodge/Data/Wall.hs 40;" t +Opaque src/Dodge/Data/Wall.hs 44;" C OpticScope src/Dodge/Data/Item/Scope.hs 14;" C Option src/Dodge/Menu/Option.hs 1;" m OptionScreen src/Dodge/Data/Universe.hs 80;" C @@ -1480,13 +1480,13 @@ PrimitiveMode src/Shader/Data.hs 99;" t PrintMaterial src/Dodge/Data/Item/Use/Consumption/Ammo.hs 32;" C Prison src/Dodge/Data/Scenario.hs 65;" C Procedural src/Dodge/Room/Procedural.hs 2;" m -Projectile src/Dodge/Data/Projectile.hs 16;" t +Projectile src/Dodge/Data/Projectile.hs 17;" t Projectile src/Dodge/Data/Projectile.hs 6;" m Projectile src/Dodge/Projectile.hs 1;" m ProjectileParams src/Dodge/Data/Item/Use.hs 109;" C ProjectileStabiliserLink src/Dodge/Data/ComposedItem.hs 32;" C ProjectileStabiliserSF src/Dodge/Data/ComposedItem.hs 62;" C -ProjectileType src/Dodge/Data/Projectile.hs 34;" t +ProjectileType src/Dodge/Data/Projectile.hs 35;" t ProjectileUpdate src/Dodge/Data/Item/Use/Consumption/Ammo.hs 18;" t Prop src/Dodge/Data/Prop.hs 18;" t Prop src/Dodge/Data/Prop.hs 6;" m @@ -1588,7 +1588,7 @@ ReactorSS src/Dodge/Data/Scenario.hs 111;" C ReaderUpdate src/Dodge/Creature/ReaderUpdate.hs 1;" m RecRoomSS src/Dodge/Data/Scenario.hs 103;" C RectRoomType src/Dodge/Data/Room.hs 32;" C -ReducedRocketSmoke src/Dodge/Data/Projectile.hs 59;" C +ReducedRocketSmoke src/Dodge/Data/Projectile.hs 60;" C ReigonalGovernment src/Dodge/Data/Scenario.hs 50;" C Religion src/Dodge/Data/Scenario.hs 47;" C Reload src/Dodge/Data/ActionPlan.hs 190;" C @@ -1614,7 +1614,7 @@ ResFactor src/Dodge/Data/Config.hs 97;" t ResearchFacility src/Dodge/Data/Scenario.hs 62;" C ResourceFailure src/Dodge/Data/Scenario.hs 29;" C RetailFacility src/Dodge/Data/Scenario.hs 67;" C -RetiredProjectile src/Dodge/Data/Projectile.hs 42;" C +RetiredProjectile src/Dodge/Data/Projectile.hs 43;" C Revenge src/Dodge/Data/Scenario.hs 6;" C RewindLeftClick src/Dodge/Data/World.hs 71;" C RezBaySS src/Dodge/Data/Scenario.hs 105;" C @@ -1624,9 +1624,9 @@ RightButtonOptions src/Dodge/Data/RightButtonOptions.hs 6;" m RightForward src/Dodge/Data/Creature/Stance.hs 33;" C RightwardLDT src/Dodge/Data/DoubleTree.hs 58;" C RoadBlock src/Dodge/Room/RoadBlock.hs 2;" m -Rocket src/Dodge/Data/Projectile.hs 38;" C -RocketHoming src/Dodge/Data/Projectile.hs 45;" t -RocketSmoke src/Dodge/Data/Projectile.hs 58;" t +Rocket src/Dodge/Data/Projectile.hs 39;" C +RocketHoming src/Dodge/Data/Projectile.hs 46;" t +RocketSmoke src/Dodge/Data/Projectile.hs 59;" t Rod src/Dodge/Item/Held/Rod.hs 1;" m Room src/Dodge/Data/GenWorld.hs 94;" t Room src/Dodge/Data/Room.hs 4;" m @@ -1694,8 +1694,8 @@ Scroll src/Dodge/Update/Scroll.hs 1;" m ScrollValue src/Dodge/ScrollValue.hs 1;" m SecretCabal src/Dodge/Data/Scenario.hs 44;" C SectionCursor src/Dodge/Data/SelectionList.hs 23;" t -SeeAbove src/Dodge/Data/Wall.hs 40;" C -SeeThrough src/Dodge/Data/Wall.hs 39;" C +SeeAbove src/Dodge/Data/Wall.hs 42;" C +SeeThrough src/Dodge/Data/Wall.hs 41;" C SelCloseButton src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 31;" C SelCloseItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 29;" C SelNothing src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 27;" C @@ -1737,7 +1737,7 @@ ShapePicture src/ShapePicture.hs 1;" m ShapeProp src/Dodge/Data/Prop.hs 33;" C ShapeType src/Shape/Data.hs 16;" t Shatter src/Dodge/Item/Weapon/Shatter.hs 1;" m -Shell src/Dodge/Data/Projectile.hs 17;" C +Shell src/Dodge/Data/Projectile.hs 18;" C ShellSound src/Dodge/Data/SoundOrigin.hs 26;" C ShieldGroup src/Dodge/Data/Creature/State.hs 52;" C Shift src/Dodge/Placement/Shift.hs 1;" m @@ -1826,7 +1826,7 @@ StabOrthReduce src/Dodge/Projectile/Create.hs 17;" C StabSpinIncrease src/Dodge/Projectile/Create.hs 18;" C Stance src/Dodge/Data/Creature/Stance.hs 13;" t Stance src/Dodge/Data/Creature/Stance.hs 6;" m -StandaloneWall src/Dodge/Data/Wall.hs 49;" C +StandaloneWall src/Dodge/Data/Wall/Structure.hs 13;" C Standing src/Dodge/Data/Creature/Stance.hs 25;" C Start src/Dodge/Room/Start.hs 3;" m StartNewGame src/Dodge/StartNewGame.hs 1;" m @@ -1846,6 +1846,7 @@ Strategy src/Dodge/Creature/Strategy.hs 1;" m StrategyActions src/Dodge/Data/ActionPlan.hs 188;" C StrictHelp src/StrictHelp.hs 1;" m StringHelp src/StringHelp.hs 1;" m +Structure src/Dodge/Data/Wall/Structure.hs 6;" m SubInventory src/Dodge/Data/HUD.hs 34;" t Superfluous src/Shape/Data.hs 38;" C Surface src/Shape/Data.hs 41;" t @@ -2099,7 +2100,7 @@ WRIST_ECG src/Dodge/Data/Item/Combine.hs 120;" C WaitThen src/Dodge/Data/ActionPlan.hs 103;" C WalkCycle src/Dodge/Creature/State/WalkCycle.hs 1;" m Walking src/Dodge/Data/Creature/Stance.hs 21;" C -Wall src/Dodge/Data/Wall.hs 18;" t +Wall src/Dodge/Data/Wall.hs 20;" t Wall src/Dodge/Base/Wall.hs 1;" m Wall src/Dodge/Data/Wall.hs 6;" m Wall src/Dodge/Default/Wall.hs 1;" m @@ -2108,12 +2109,12 @@ Wall src/Dodge/Wall.hs 1;" m Wall src/Dodge/Zoning/Wall.hs 1;" m WallCreatureCollisions src/Dodge/WallCreatureCollisions.hs 2;" m WallDamage src/Dodge/Update/WallDamage.hs 1;" m -WallDraw src/Dodge/Data/Wall.hs 45;" t +WallDraw src/Dodge/Data/Wall.hs 47;" t WallObstacle src/Dodge/Data/PathGraph.hs 52;" C WallP src/Dodge/LevelGen/StaticWalls.hs 23;" t WallP src/Dodge/LevelGen/StaticWalls/Deprecated.hs 11;" t WallSound src/Dodge/Data/SoundOrigin.hs 24;" C -WallStructure src/Dodge/Data/Wall.hs 48;" t +WallStructure src/Dodge/Data/Wall/Structure.hs 12;" t WallWire src/Dodge/Data/Room.hs 53;" C Walls src/Dodge/Render/Walls.hs 1;" m Walls_info src/Dodge/Data/Config.hs 75;" C @@ -2264,7 +2265,7 @@ _bmType src/Dodge/Data/Beam.hs 29;" f _boffEff src/Dodge/Data/Button.hs 42;" f _bonEff src/Dodge/Data/Button.hs 41;" f _boostPropIX src/Dodge/Data/Item/Params.hs 29;" f -_bounceTolerance src/Dodge/Data/Projectile.hs 52;" f +_bounceTolerance src/Dodge/Data/Projectile.hs 53;" f _bpEff src/Dodge/Data/Button.hs 28;" f _bpEvent src/Dodge/Data/Button.hs 26;" f _bpSound src/Dodge/Data/Button.hs 27;" f @@ -2562,7 +2563,7 @@ _getSoundID src/Sound/Data.hs 32;" f _gfConstant src/Dodge/Data/GenFloat.hs 11;" f _gfMax src/Dodge/Data/GenFloat.hs 12;" f _gfMin src/Dodge/Data/GenFloat.hs 12;" f -_gnHitEffect src/Dodge/Data/Projectile.hs 36;" f +_gnHitEffect src/Dodge/Data/Projectile.hs 37;" f _grBound src/Dodge/GameRoom.hs 18;" f _grDir src/Dodge/GameRoom.hs 20;" f _grLinkDirs src/Dodge/GameRoom.hs 21;" f @@ -2811,11 +2812,11 @@ _nzWalkSpeed src/Dodge/Data/Item/Use.hs 146;" f _offPathFromEdges src/Dodge/Data/Room.hs 74;" f _oldMagnets src/Dodge/Data/LWorld.hs 125;" f _onPathFromEdges src/Dodge/Data/Room.hs 73;" f -_opDraw src/Dodge/Data/Wall.hs 41;" f +_opDraw src/Dodge/Data/Wall.hs 43;" f _opPlacement src/Dodge/Data/GenWorld.hs 127;" f _opPlacementID src/Dodge/Data/GenWorld.hs 128;" f _opSel src/Dodge/Data/RightButtonOptions.hs 15;" f -_opTexture src/Dodge/Data/Wall.hs 42;" f +_opTexture src/Dodge/Data/Wall.hs 44;" f _opticDefaultZoom src/Dodge/Data/Item/Scope.hs 20;" f _opticPos src/Dodge/Data/Item/Scope.hs 16;" f _opticZoom src/Dodge/Data/Item/Scope.hs 19;" f @@ -2832,25 +2833,25 @@ _peZoning src/Dodge/Data/World.hs 51;" f _penEnd src/Dodge/Data/PathGraph.hs 35;" f _penPathEdge src/Dodge/Data/PathGraph.hs 36;" f _penStart src/Dodge/Data/PathGraph.hs 34;" f -_phRemoteID src/Dodge/Data/Projectile.hs 47;" f -_phTargetingID src/Dodge/Data/Projectile.hs 48;" f +_phRemoteID src/Dodge/Data/Projectile.hs 48;" f +_phTargetingID src/Dodge/Data/Projectile.hs 49;" f _pickUpLevel src/Dodge/Layout/Generate.hs 14;" f _pickUps src/Dodge/Layout/Generate.hs 15;" f _pictureShaders src/Data/Preload/Render.hs 28;" f _piercedPoints src/Dodge/Data/Creature/State.hs 30;" f -_pjDetonatorID src/Dodge/Data/Projectile.hs 29;" f -_pjDir src/Dodge/Data/Projectile.hs 20;" f -_pjID src/Dodge/Data/Projectile.hs 22;" f -_pjPayload src/Dodge/Data/Projectile.hs 23;" f -_pjPos src/Dodge/Data/Projectile.hs 18;" f -_pjScreenID src/Dodge/Data/Projectile.hs 30;" f -_pjSpin src/Dodge/Data/Projectile.hs 21;" f -_pjTimer src/Dodge/Data/Projectile.hs 24;" f -_pjType src/Dodge/Data/Projectile.hs 28;" f -_pjUpdates src/Dodge/Data/Projectile.hs 27;" f -_pjVel src/Dodge/Data/Projectile.hs 19;" f -_pjZ src/Dodge/Data/Projectile.hs 25;" f -_pjZVel src/Dodge/Data/Projectile.hs 26;" f +_pjDetonatorID src/Dodge/Data/Projectile.hs 30;" f +_pjDir src/Dodge/Data/Projectile.hs 21;" f +_pjID src/Dodge/Data/Projectile.hs 23;" f +_pjPayload src/Dodge/Data/Projectile.hs 24;" f +_pjPos src/Dodge/Data/Projectile.hs 19;" f +_pjScreenID src/Dodge/Data/Projectile.hs 31;" f +_pjSpin src/Dodge/Data/Projectile.hs 22;" f +_pjTimer src/Dodge/Data/Projectile.hs 25;" f +_pjType src/Dodge/Data/Projectile.hs 29;" f +_pjUpdates src/Dodge/Data/Projectile.hs 28;" f +_pjVel src/Dodge/Data/Projectile.hs 20;" f +_pjZ src/Dodge/Data/Projectile.hs 26;" f +_pjZVel src/Dodge/Data/Projectile.hs 27;" f _pjuCID src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" f _pjuEnd src/Dodge/Data/Item/Use/Consumption/Ammo.hs 19;" f _pjuSpinAmound src/Dodge/Data/Item/Use/Consumption/Ammo.hs 20;" f @@ -2952,8 +2953,8 @@ _reverseAmount src/Dodge/Data/World.hs 62;" f _reverseAmount src/Dodge/Data/World.hs 68;" f _reverseAmount src/Dodge/Data/World.hs 72;" f _rifling src/Dodge/Data/Item/Use.hs 94;" f -_rkHoming src/Dodge/Data/Projectile.hs 39;" f -_rkSmoke src/Dodge/Data/Projectile.hs 40;" f +_rkHoming src/Dodge/Data/Projectile.hs 40;" f +_rkSmoke src/Dodge/Data/Projectile.hs 41;" f _rlDir src/Dodge/Data/Room.hs 26;" f _rlPos src/Dodge/Data/Room.hs 25;" f _rlType src/Dodge/Data/Room.hs 24;" f @@ -3097,8 +3098,9 @@ _ssShownItems src/Dodge/Data/SelectionList.hs 32;" f _strength src/Dodge/Data/Creature/Misc.hs 21;" f _strideAmount src/Dodge/Data/Creature/Stance.hs 22;" f _strideLength src/Dodge/Data/Creature/Stance.hs 16;" f -_stuckCrID src/Dodge/Data/Projectile.hs 54;" f -_stuckCrOffset src/Dodge/Data/Projectile.hs 54;" f +_stuckCrID src/Dodge/Data/Projectile.hs 55;" f +_stuckCrOffset src/Dodge/Data/Projectile.hs 55;" f +_stuckWlID src/Dodge/Data/Projectile.hs 56;" f _subInventory src/Dodge/Data/HUD.hs 20;" f _swColor src/Dodge/Data/Shockwave.hs 18;" f _swDam src/Dodge/Data/Shockwave.hs 23;" f @@ -3269,31 +3271,31 @@ _windowPosY src/Dodge/Data/Config.hs 54;" f _windowShader src/Data/Preload/Render.hs 19;" f _windowX src/Dodge/Data/Config.hs 51;" f _windowY src/Dodge/Data/Config.hs 52;" f -_wlBouncy src/Dodge/Data/Wall.hs 25;" f -_wlColor src/Dodge/Data/Wall.hs 21;" f -_wlFireThrough src/Dodge/Data/Wall.hs 28;" f -_wlHeight src/Dodge/Data/Wall.hs 33;" f -_wlID src/Dodge/Data/Wall.hs 20;" f -_wlLine src/Dodge/Data/Wall.hs 19;" f -_wlMaterial src/Dodge/Data/Wall.hs 34;" f -_wlOpacity src/Dodge/Data/Wall.hs 22;" f -_wlPathable src/Dodge/Data/Wall.hs 23;" f -_wlPenetrable src/Dodge/Data/Wall.hs 24;" f -_wlReflect src/Dodge/Data/Wall.hs 29;" f -_wlRotateTo src/Dodge/Data/Wall.hs 31;" f -_wlStCreature src/Dodge/Data/Wall.hs 54;" f -_wlStructure src/Dodge/Data/Wall.hs 32;" f -_wlTouchThrough src/Dodge/Data/Wall.hs 27;" f -_wlUnshadowed src/Dodge/Data/Wall.hs 30;" f -_wlWalkable src/Dodge/Data/Wall.hs 26;" f +_wlBouncy src/Dodge/Data/Wall.hs 27;" f +_wlColor src/Dodge/Data/Wall.hs 23;" f +_wlFireThrough src/Dodge/Data/Wall.hs 30;" f +_wlHeight src/Dodge/Data/Wall.hs 35;" f +_wlID src/Dodge/Data/Wall.hs 22;" f +_wlLine src/Dodge/Data/Wall.hs 21;" f +_wlMaterial src/Dodge/Data/Wall.hs 36;" f +_wlOpacity src/Dodge/Data/Wall.hs 24;" f +_wlPathable src/Dodge/Data/Wall.hs 25;" f +_wlPenetrable src/Dodge/Data/Wall.hs 26;" f +_wlReflect src/Dodge/Data/Wall.hs 31;" f +_wlRotateTo src/Dodge/Data/Wall.hs 33;" f +_wlStCreature src/Dodge/Data/Wall/Structure.hs 17;" f +_wlStructure src/Dodge/Data/Wall.hs 34;" f +_wlTouchThrough src/Dodge/Data/Wall.hs 29;" f +_wlUnshadowed src/Dodge/Data/Wall.hs 32;" f +_wlWalkable src/Dodge/Data/Wall.hs 28;" f _wlZoning src/Dodge/Data/World.hs 49;" f _worldEventFlags src/Dodge/Data/World.hs 46;" f _worldEvents src/Dodge/Data/LWorld.hs 132;" f _wpCharge src/Dodge/Data/Item/Use/Consumption.hs 35;" f _wpMaxCharge src/Dodge/Data/Item/Use/Consumption.hs 34;" f -_wsBlock src/Dodge/Data/Wall.hs 52;" f -_wsDoor src/Dodge/Data/Wall.hs 50;" f -_wsMachine src/Dodge/Data/Wall.hs 51;" f +_wsBlock src/Dodge/Data/Wall/Structure.hs 16;" f +_wsDoor src/Dodge/Data/Wall/Structure.hs 14;" f +_wsMachine src/Dodge/Data/Wall/Structure.hs 15;" f _xNum src/Dodge/Data/Item/Combine.hs 124;" f _xNum src/Dodge/Data/Item/Combine.hs 134;" f _xNum src/Dodge/Data/Item/Combine.hs 156;" f @@ -3382,7 +3384,7 @@ applyCME src/Dodge/HeldUse.hs 145;" f applyCreatureDamage src/Dodge/Creature/Damage.hs 14;" f applyDamageEffect src/Dodge/Creature/Damage.hs 31;" f applyEventIO src/Loop.hs 89;" f -applyGravityPU src/Dodge/Projectile/Update.hs 51;" f +applyGravityPU src/Dodge/Projectile/Update.hs 50;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 49;" f applyIndividualDamage' src/Dodge/Creature/Damage.hs 52;" f applyInvLock src/Dodge/HeldUse.hs 160;" f @@ -3833,8 +3835,8 @@ deadRot src/Dodge/Creature/Picture.hs 87;" f deadScalp src/Dodge/Creature/Picture.hs 84;" f deadUpperBody src/Dodge/Creature/Picture.hs 128;" f debrisSize src/Dodge/Block/Debris.hs 111;" f -debugDraw src/Dodge/Debug/Picture.hs 145;" f -debugDraw' src/Dodge/Debug/Picture.hs 156;" f +debugDraw src/Dodge/Debug/Picture.hs 149;" f +debugDraw' src/Dodge/Debug/Picture.hs 160;" f debugEvent src/Dodge/Debug.hs 26;" f debugEvent' src/Dodge/Debug.hs 34;" f debugEvents src/Dodge/Debug.hs 19;" f @@ -3844,7 +3846,6 @@ debugMenuOptions src/Dodge/Menu.hs 119;" f debugOn src/Dodge/Data/Config.hs 151;" f debugSelectCreatureList src/Dodge/Debug.hs 86;" f debugSelectCreatureMessage src/Dodge/Debug.hs 77;" f -decTimMvVel src/Dodge/Projectile/Update.hs 191;" f decodedtmap src/Dodge/Terminal.hs 205;" f decomposeSelfTree src/Dodge/Tree/Compose.hs 60;" f decomposeTree src/Dodge/Tree/Compose.hs 57;" f @@ -3938,16 +3939,16 @@ deleteWallIDs src/Dodge/Wall/Delete.hs 28;" f denormalEdges src/Polyhedra.hs 136;" f destroyAt src/Dodge/Bullet.hs 211;" f destroyBlock src/Dodge/Block.hs 56;" f -destroyDoor src/Dodge/Block.hs 85;" f +destroyDoor src/Dodge/Block.hs 83;" f destroyInvItem src/Dodge/Inventory.hs 40;" f destroyLS src/Dodge/LightSource.hs 32;" f destroyLSFlashAt src/Dodge/LightSource.hs 42;" f destroyMachine src/Dodge/Machine/Destroy.hs 12;" f destroyMatS src/Dodge/Material/Sound.hs 7;" f destroyMcType src/Dodge/Machine/Destroy.hs 21;" f -destroyMount src/Dodge/Block.hs 104;" f -destroyMounts src/Dodge/Block.hs 101;" f -destroyProjectile src/Dodge/Projectile/Update.hs 121;" f +destroyMount src/Dodge/Block.hs 102;" f +destroyMounts src/Dodge/Block.hs 99;" f +destroyProjectile src/Dodge/Projectile/Update.hs 128;" f detV src/Geometry/Vector.hs 93;" f detector src/Dodge/Item/Held/Utility.hs 41;" f detectorColor src/Dodge/Item/Draw/SPic.hs 437;" f @@ -4061,7 +4062,7 @@ doTerminalCommandEffect src/Dodge/Terminal.hs 135;" f doTestDrawing src/Dodge/Render.hs 42;" f doTextInputOver src/Dodge/Update/Input/Text.hs 15;" f doTextInputOverUniverse src/Dodge/Update/Input/Text.hs 12;" f -doThrust src/Dodge/Projectile/Update.hs 131;" f +doThrust src/Dodge/Projectile/Update.hs 138;" f doTimeScroll src/Dodge/Update.hs 205;" f doTmTm src/Dodge/TmTm.hs 6;" f doTmWdWd src/Dodge/WorldEffect.hs 102;" f @@ -4092,7 +4093,7 @@ drawBaseMachine src/Dodge/Machine/Draw.hs 57;" f drawBeam src/Dodge/Beam/Draw.hs 6;" f drawBlip src/Dodge/RadarBlip.hs 13;" f drawBlock src/Dodge/Block/Draw.hs 7;" f -drawBoundingBox src/Dodge/Debug/Picture.hs 325;" f +drawBoundingBox src/Dodge/Debug/Picture.hs 331;" f drawBul src/Dodge/Bullet/Draw.hs 9;" f drawButton src/Dodge/Button/Draw.hs 9;" f drawCPUShadows src/Dodge/Render/Shadow.hs 19;" f @@ -4102,16 +4103,16 @@ drawCollisionTest src/Dodge/Debug/Picture.hs 103;" f drawCombFilter src/Dodge/Render/Picture.hs 220;" f drawCombineInventory src/Dodge/Render/HUD.hs 167;" f drawConcurrentMessage src/Dodge/Render/Picture.hs 62;" f -drawCoord src/Dodge/Debug/Picture.hs 353;" f +drawCoord src/Dodge/Debug/Picture.hs 359;" f drawCorpse src/Dodge/Corpse/Draw.hs 6;" f -drawCrInfo src/Dodge/Debug/Picture.hs 374;" f +drawCrInfo src/Dodge/Debug/Picture.hs 380;" f drawCreature src/Dodge/Render/ShapePicture.hs 41;" f -drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 188;" f +drawCreatureDisplayTexts src/Dodge/Debug/Picture.hs 192;" f drawCross src/Dodge/Render/Label.hs 24;" f drawCrossCol src/Dodge/Render/Label.hs 21;" f drawCursorAt src/Dodge/Render/List.hs 71;" f -drawDDATest src/Dodge/Debug/Picture.hs 280;" f -drawDoorPaths src/Dodge/Debug/Picture.hs 241;" f +drawDDATest src/Dodge/Debug/Picture.hs 286;" f +drawDoorPaths src/Dodge/Debug/Picture.hs 247;" f drawDoubleLampCover src/Dodge/Prop/Draw.hs 81;" f drawDrag src/Dodge/Render/Picture.hs 170;" f drawDragDrop src/Dodge/Render/Picture.hs 181;" f @@ -4123,7 +4124,7 @@ drawEmptySet src/Dodge/Render/Picture.hs 117;" f drawEnergyBall src/Dodge/EnergyBall/Draw.hs 10;" f drawEquipment src/Dodge/Creature/Picture.hs 142;" f drawExamineInventory src/Dodge/Render/HUD.hs 183;" f -drawFarWallDetect src/Dodge/Debug/Picture.hs 258;" f +drawFarWallDetect src/Dodge/Debug/Picture.hs 264;" f drawFlame src/Dodge/Flame/Draw.hs 7;" f drawFlamelet src/Dodge/EnergyBall/Draw.hs 26;" f drawFooterText src/Dodge/Render/MenuScreen.hs 75;" f @@ -4132,8 +4133,8 @@ drawGapPlus src/Dodge/Render/Picture.hs 230;" f drawGib src/Dodge/Prop/Draw.hs 28;" f drawHUD src/Dodge/Render/HUD.hs 47;" f drawInputMenu src/Dodge/Render/MenuScreen.hs 21;" f -drawInspectWall src/Dodge/Debug/Picture.hs 233;" f -drawInspectWalls src/Dodge/Debug/Picture.hs 221;" f +drawInspectWall src/Dodge/Debug/Picture.hs 239;" f +drawInspectWalls src/Dodge/Debug/Picture.hs 227;" f drawInventory src/Dodge/Render/HUD.hs 54;" f drawItemChildrenConnect src/Dodge/Render/HUD.hs 314;" f drawItemConnections src/Dodge/Render/HUD.hs 304;" f @@ -4155,13 +4156,13 @@ drawMenuOrHUD src/Dodge/Render/Picture.hs 57;" f drawMenuScreen src/Dodge/Render/MenuScreen.hs 15;" f drawMouseCursor src/Dodge/Render/Picture.hs 73;" f drawMouseOver src/Dodge/Render/HUD.hs 102;" f -drawMousePosition src/Dodge/Debug/Picture.hs 343;" f +drawMousePosition src/Dodge/Debug/Picture.hs 349;" f drawMovingShape src/Dodge/Prop/Draw.hs 67;" f drawMovingShapeCol src/Dodge/Prop/Draw.hs 73;" f drawOptions src/Dodge/Render/MenuScreen.hs 35;" f -drawPathBetween src/Dodge/Debug/Picture.hs 191;" f -drawPathEdge src/Dodge/Debug/Picture.hs 246;" f -drawPathing src/Dodge/Debug/Picture.hs 416;" f +drawPathBetween src/Dodge/Debug/Picture.hs 195;" f +drawPathEdge src/Dodge/Debug/Picture.hs 252;" f +drawPathing src/Dodge/Debug/Picture.hs 422;" f drawPlus src/Dodge/Render/Picture.hs 134;" f drawPointLabel src/Dodge/Render/Label.hs 13;" f drawProjectile src/Dodge/Projectile/Draw.hs 13;" f @@ -4202,14 +4203,14 @@ drawTurret src/Dodge/Machine/Draw.hs 65;" f drawVerticalLampCover src/Dodge/Prop/Draw.hs 59;" f drawWall src/Dodge/Wall/Draw.hs 7;" f drawWallFace src/Dodge/Debug/Picture.hs 73;" f -drawWallSearchRays src/Dodge/Debug/Picture.hs 289;" f -drawWallsNearCursor src/Dodge/Debug/Picture.hs 212;" f -drawWallsNearSegment src/Dodge/Debug/Picture.hs 121;" f -drawWallsNearYou src/Dodge/Debug/Picture.hs 203;" f +drawWallSearchRays src/Dodge/Debug/Picture.hs 295;" f +drawWallsNearCursor src/Dodge/Debug/Picture.hs 216;" f +drawWallsNearSegment src/Dodge/Debug/Picture.hs 123;" f +drawWallsNearYou src/Dodge/Debug/Picture.hs 207;" f drawWeapon src/Dodge/Creature/Volition.hs 14;" f -drawWlIDs src/Dodge/Debug/Picture.hs 361;" f -drawZoneCol src/Dodge/Debug/Picture.hs 138;" f -drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 273;" f +drawWlIDs src/Dodge/Debug/Picture.hs 367;" f +drawZoneCol src/Dodge/Debug/Picture.hs 142;" f +drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 279;" f droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f dropByState src/Dodge/Creature/State.hs 130;" f dropExcept src/Dodge/Creature/Action.hs 171;" f @@ -4227,7 +4228,7 @@ dtToUpDownAdj src/Dodge/DoubleTree.hs 96;" f dummyMenuOption src/Dodge/Menu/Option.hs 75;" f ebFlicker src/Dodge/EnergyBall.hs 98;" f edgeFormatting src/Dodge/Combine/Graph.hs 130;" f -edgeToPic src/Dodge/Debug/Picture.hs 425;" f +edgeToPic src/Dodge/Debug/Picture.hs 431;" f effectWhileAttached src/Dodge/ItEffect.hs 24;" f ejectS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 496;" f elecCrackleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 380;" f @@ -4268,7 +4269,7 @@ expandPolyCorners src/Dodge/LevelGen/StaticWalls.hs 103;" f expandToSquare src/Dodge/LevelGen/StaticWalls/Deprecated.hs 83;" f expireAndDamage src/Dodge/Bullet.hs 195;" f expireAndDamageFL src/Dodge/Flame.hs 47;" f -explodeShell src/Dodge/Projectile/Update.hs 201;" f +explodeShell src/Dodge/Projectile/Update.hs 211;" f explosionS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 416;" f explosiveBarrel src/Dodge/Creature/Inanimate.hs 29;" f extTrigLitPos src/Dodge/Placement/Instance/Button.hs 84;" f @@ -4895,8 +4896,8 @@ maxViewDistance src/Dodge/Viewpoints.hs 26;" f maybeBlockedPassage src/Dodge/Room/RezBox.hs 69;" f maybeClearDoorPath src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 71;" f maybeClearDoorPaths src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 68;" f -maybeClearPath src/Dodge/Block.hs 77;" f -maybeClearPaths src/Dodge/Block.hs 74;" f +maybeClearPath src/Dodge/Block.hs 75;" f +maybeClearPaths src/Dodge/Block.hs 72;" f maybeDestroyBlock src/Dodge/Wall/Damage.hs 26;" f maybeDestroyDoor src/Dodge/Wall/Damage.hs 31;" f maybeExitCombine src/Dodge/Update/Input/InGame.hs 618;" f @@ -5061,7 +5062,7 @@ numSelfTree' src/Dodge/Tree/Compose.hs 110;" f numShads src/Picture/Data.hs 42;" f numSubElements src/Shader/Parameters.hs 39;" f numTraversable src/TreeHelp.hs 183;" f -obstacleColor src/Dodge/Debug/Picture.hs 251;" f +obstacleColor src/Dodge/Debug/Picture.hs 257;" f obstructPathsCrossing src/Dodge/Path.hs 138;" f oldMachineBootS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f onEquipWristShield src/Dodge/Euse.hs 56;" f @@ -5086,8 +5087,6 @@ orderPolygonAround src/Geometry/Polygon.hs 70;" f orientAttachment src/Dodge/Item/Orientation.hs 23;" f orientByLink src/Dodge/Item/Orientation.hs 16;" f orientChild src/Dodge/Item/Orientation.hs 10;" f -originIDsAt src/Dodge/WorldEvent/Sound.hs 18;" f -originsIDsAt src/Dodge/WorldEvent/Sound.hs 13;" f orthogonalPointOnSeg src/Geometry/Intersect.hs 291;" f outLink src/Dodge/RoomLink.hs 105;" f outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f @@ -5156,7 +5155,8 @@ pipe src/Dodge/Item/Craftable.hs 32;" f pistol src/Dodge/Item/Held/Stick.hs 42;" f pistolCrit src/Dodge/Creature/PistolCrit.hs 12;" f pistolerRoom src/Dodge/Room/Room.hs 321;" f -pjRemoteSetDirection src/Dodge/Projectile/Update.hs 176;" f +pjMovement src/Dodge/Projectile/Update.hs 198;" f +pjRemoteSetDirection src/Dodge/Projectile/Update.hs 183;" f plBlock src/Dodge/Placement/PlaceSpot/Block.hs 18;" f plDoor src/Dodge/Placement/PlaceSpot/TriggerDoor.hs 22;" f plLineBlock src/Dodge/Placement/PlaceSpot/Block.hs 50;" f @@ -5671,7 +5671,7 @@ shardShape src/Dodge/Block/Debris.hs 181;" f shatterGun src/Dodge/Item/Held/Weapons.hs 8;" f shatterGunSPic src/Dodge/Item/Draw/SPic.hs 287;" f shatterWall src/Dodge/Item/Weapon/Shatter.hs 26;" f -shellCollisionCheck src/Dodge/Projectile/Update.hs 80;" f +shellCollisionCheck src/Dodge/Projectile/Update.hs 79;" f shellMag src/Dodge/Item/Ammo.hs 61;" f shellModule src/Dodge/Item/Scope.hs 70;" f shellShape src/Dodge/Projectile/Draw.hs 34;" f @@ -5774,8 +5774,10 @@ soundIsClose src/Dodge/Creature/Perception.hs 183;" f soundMenu src/Dodge/Menu.hs 137;" f soundMenuOptions src/Dodge/Menu.hs 140;" f soundMultiFrom src/Dodge/SoundLogic.hs 173;" f +soundOriginIDsAt src/Dodge/WorldEvent/Sound.hs 18;" f +soundOriginsIDsAt src/Dodge/WorldEvent/Sound.hs 13;" f soundPathList src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 224;" f -soundPic src/Dodge/Debug/Picture.hs 330;" f +soundPic src/Dodge/Debug/Picture.hs 336;" f soundStart src/Dodge/SoundLogic.hs 112;" f soundToOnomato src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 114;" f soundToVol src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 4;" f @@ -5856,7 +5858,7 @@ stone5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 468;" f stoneDebris src/Dodge/Block/Debris.hs 137;" f stoneWallDamage src/Dodge/Wall/DamageEffect.hs 24;" f stopAllSounds src/Sound.hs 124;" f -stopPushing src/Dodge/Block.hs 109;" f +stopPushing src/Dodge/Block.hs 107;" f stopSoundFrom src/Dodge/SoundLogic.hs 206;" f strFromEquipment src/Dodge/Creature/Statistics.hs 17;" f strFromHeldItem src/Dodge/Creature/Statistics.hs 29;" f @@ -6065,8 +6067,8 @@ tryPutFloorItemIDInInv src/Dodge/Inventory/Add.hs 26;" f tryPutItemInInv src/Dodge/Inventory/Add.hs 42;" f tryPutItemInInvAt src/Dodge/Inventory/Add.hs 32;" f trySeedFromClipboard src/Dodge/Menu.hs 88;" f -tryShellBounce src/Dodge/Projectile/Update.hs 100;" f -trySpinByCID src/Dodge/Projectile/Update.hs 158;" f +tryShellBounce src/Dodge/Projectile/Update.hs 99;" f +trySpinByCID src/Dodge/Projectile/Update.hs 165;" f trySynthBullet src/Dodge/Creature/State.hs 201;" f tryUseParent src/Dodge/Creature/State.hs 194;" f turnTo src/Dodge/Movement/Turn.hs 4;" f @@ -6101,7 +6103,7 @@ unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 133;" f unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 139;" f unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 122;" f unusedSpotNearInLink src/Dodge/PlacementSpot.hs 191;" f -upProjectile src/Dodge/Projectile/Update.hs 34;" f +upProjectile src/Dodge/Projectile/Update.hs 33;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 91;" f updateArc src/Dodge/Tesla/Arc.hs 100;" f @@ -6283,8 +6285,8 @@ verticalLampCover src/Dodge/Placement/Instance/LightSource/Cover.hs 38;" f verticalPipe src/Dodge/Picture.hs 19;" f verticalPipe src/Dodge/Placement/Instance/Pipe.hs 6;" f verticalWire src/Dodge/Wire.hs 24;" f -viewBoundaries src/Dodge/Debug/Picture.hs 298;" f -viewClipBounds src/Dodge/Debug/Picture.hs 307;" f +viewBoundaries src/Dodge/Debug/Picture.hs 304;" f +viewClipBounds src/Dodge/Debug/Picture.hs 313;" f viewDistanceFromItems src/Dodge/Update/Camera.hs 135;" f viewTarget src/Dodge/Creature/ReaderUpdate.hs 144;" f violet src/Color.hs 21;" f