From 2cb9fb153acddcf383ae0a54066a76fe1b88879a Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 26 Dec 2025 10:41:21 +0000 Subject: [PATCH] Add hacky block shadow to inventory items --- src/Dodge/Data/SelectionList.hs | 3 + src/Dodge/DisplayInventory.hs | 17 +- src/Dodge/Inventory/SelectionList.hs | 2 +- src/Picture/Base.hs | 6 + tags | 341 ++++++++++++++------------- 5 files changed, 188 insertions(+), 181 deletions(-) diff --git a/src/Dodge/Data/SelectionList.hs b/src/Dodge/Data/SelectionList.hs index 93aa7ee76..0b89155df 100644 --- a/src/Dodge/Data/SelectionList.hs +++ b/src/Dodge/Data/SelectionList.hs @@ -37,6 +37,8 @@ data SelSection a = SelSection type IMSS a = IntMap (SelSection a) +type IMSI a = IntMap (SelectionItem a) + data SelectionWidth = FixedSelectionWidth Int | UseItemWidth data SelectionItem a = SelItem @@ -53,6 +55,7 @@ data SelectionItem a = SelItem data SIDisplayMod = NoSIDisplayMod | HighlightSI + | DropShadowSI makeLenses ''LDParams makeLenses ''SelectionItem diff --git a/src/Dodge/DisplayInventory.hs b/src/Dodge/DisplayInventory.hs index 939ec8d81..0fbdf7173 100644 --- a/src/Dodge/DisplayInventory.hs +++ b/src/Dodge/DisplayInventory.hs @@ -259,13 +259,7 @@ updateSectionsPositioning h mselpos allavailablelines lsss sss = lk = mselpos ^.. _Just . slSec ssizes = sectionsSizes allavailablelines lk $ sectionsDesiredLines ls -updateSection :: - Int -> - Maybe Int -> - IM.IntMap (SelectionItem a) -> - Int -> - Int -> - SelSection a +updateSection :: Int -> Maybe Int -> IMSI a -> Int -> Int -> SelSection a updateSection indent mcsel sis availablelines oldoffset = SelSection { _ssItems = sis @@ -305,10 +299,11 @@ updateSection indent mcsel sis availablelines oldoffset = listSelectionColorPicture :: SelectionItem a -> ([Picture], Sum Int) listSelectionColorPicture si = (g <$> _siPictures si, Sum $ _siHeight si) where - textf = case si ^. siDisplayMod of - NoSIDisplayMod -> text - HighlightSI -> hackBoldText - g = translate lindent 0 . color (_siColor si) . textf + g = translate lindent 0 . case si ^. siDisplayMod of + NoSIDisplayMod -> docolor . text + HighlightSI -> docolor . hackBoldText + DropShadowSI -> hackDropShadow (si ^. siColor) black + docolor = color (si ^. siColor) lindent = 100 * fromIntegral (_siOffX si) regexList :: String -> [String] -> Bool diff --git a/src/Dodge/Inventory/SelectionList.hs b/src/Dodge/Inventory/SelectionList.hs index 170cfbdb8..797bed816 100644 --- a/src/Dodge/Inventory/SelectionList.hs +++ b/src/Dodge/Inventory/SelectionList.hs @@ -42,7 +42,7 @@ invSelectionItem w indent loc = , _siDisplayMod = dmod } where - dmod = maybe NoSIDisplayMod (const HighlightSI) + dmod = maybe DropShadowSI (const HighlightSI) $ w ^? cWorld . highlightItems . ix (a ^. itID . unNInt) ci = (a,b) (a,b,_) = loc ^. locDT . dtValue diff --git a/src/Picture/Base.hs b/src/Picture/Base.hs index 71c91d20b..c80ade3b5 100644 --- a/src/Picture/Base.hs +++ b/src/Picture/Base.hs @@ -26,6 +26,7 @@ module Picture.Base ( lineCol, text, hackBoldText, + hackDropShadow, textRight, textJustifyLeft, textJustifyRight, @@ -198,6 +199,11 @@ text = drawText 0 hackBoldText :: String -> Picture hackBoldText s = text s <> translate 10 0 (text s) +hackDropShadow :: Color -> Color -> String -> Picture +hackDropShadow c1 c2 s = color c2 (translate 10 (-10) (text s)) +-- <> color c2 (translate (-10) 10 (text s)) + <> color c1 (text s) + -- lines up the rightmost part of the last character with 0 textJustifyRight :: String -> Picture {-# INLINE textJustifyRight #-} diff --git a/tags b/tags index 218337b51..3ae8dea0e 100644 --- a/tags +++ b/tags @@ -42,7 +42,7 @@ ActionUpdate src/Dodge/Creature/Action.hs 49;" t AddGoal src/Dodge/Data/ActionPlan.hs 44;" C AimAt src/Dodge/Data/ActionPlan.hs 66;" C AimStance src/Dodge/Data/AimStance.hs 10;" t -Aiming src/Dodge/Data/Creature/Stance.hs 34;" C +Aiming src/Dodge/Data/Creature/Stance.hs 33;" C AirFiltrationSS src/Dodge/Data/Scenario.hs 95;" C AlienContact src/Dodge/Data/Scenario.hs 30;" C AllRoomClipBoundaries src/Dodge/Data/Config.hs 121;" C @@ -66,7 +66,7 @@ Arcing src/Dodge/Data/Item/Params.hs 15;" C ArmourySS src/Dodge/Data/Scenario.hs 112;" C Asleep src/Dodge/Data/Creature/Perception.hs 52;" C AsteroidStrike src/Dodge/Data/Scenario.hs 33;" C -AtEase src/Dodge/Data/Creature/Stance.hs 35;" C +AtEase src/Dodge/Data/Creature/Stance.hs 34;" C AtomicWaste src/Dodge/Data/Scenario.hs 26;" C AttachParams src/Dodge/Data/Item/Use.hs 43;" t AttachType src/Dodge/Data/Item/Combine.hs 90;" t @@ -134,7 +134,7 @@ BlockStatus src/Dodge/Data/Universe.hs 98;" t BlockedLink src/Dodge/Data/Room.hs 50;" C BloomLayer src/Picture/Data.hs 21;" C Blunt src/Dodge/Data/Damage.hs 17;" C -Boosting src/Dodge/Data/Creature/Stance.hs 27;" C +Boosting src/Dodge/Data/Creature/Stance.hs 26;" C BottomMenuOption src/Dodge/Data/Universe.hs 77;" C BounceBullet src/Dodge/Data/Bullet.hs 28;" C Bound_box_screen src/Dodge/Data/Config.hs 94;" C @@ -352,6 +352,7 @@ DrawForceField src/Dodge/Data/Wall.hs 37;" C DrawnWall src/Dodge/Data/Wall.hs 33;" C DroneAmmo src/Dodge/Data/AmmoType.hs 13;" C DropItem src/Dodge/Data/ActionPlan.hs 38;" C +DropShadowSI src/Dodge/Data/SelectionList.hs 58;" C DudPayload src/Dodge/Data/Payload.hs 11;" C Dungeon src/Dodge/Data/Scenario.hs 66;" C Dust src/Dodge/Data/Cloud.hs 26;" t @@ -416,7 +417,7 @@ FilterBySoundOrigin src/Dodge/Data/WorldEffect.hs 22;" C FireSpark src/Dodge/Data/Spark.hs 19;" C Fixated src/Dodge/Data/Creature/Perception.hs 60;" C FixedCoordLayer src/Picture/Data.hs 24;" C -FixedSelectionWidth src/Dodge/Data/SelectionList.hs 40;" C +FixedSelectionWidth src/Dodge/Data/SelectionList.hs 42;" C FlIt src/Dodge/Data/FloorItem.hs 11;" C Flame src/Dodge/Data/Flame.hs 11;" t FlameBeamCombine src/Dodge/Data/Beam.hs 37;" C @@ -442,13 +443,13 @@ FloatFOV src/Dodge/Data/FloatFunction.hs 11;" C FloatFloat src/Dodge/Data/FloatFunction.hs 9;" t FloatID src/Dodge/Data/FloatFunction.hs 10;" C FloatLessCheck src/Dodge/Data/FloatFunction.hs 12;" C -Floating src/Dodge/Data/Creature/Stance.hs 25;" C +Floating src/Dodge/Data/Creature/Stance.hs 24;" C FlockArmourChaseAI src/Dodge/Data/Creature/Misc.hs 46;" C Floor src/Data/Tile.hs 11;" t FloorItem src/Dodge/Data/FloorItem.hs 11;" t -Flying src/Dodge/Data/Creature/Stance.hs 26;" C +Flying src/Dodge/Data/Creature/Stance.hs 25;" C FollowImpulses src/Dodge/Data/ActionPlan.hs 134;" C -FootForward src/Dodge/Data/Creature/Stance.hs 30;" t +FootForward src/Dodge/Data/Creature/Stance.hs 29;" t FootstepSound src/Dodge/Data/SoundOrigin.hs 29;" C ForceField src/Dodge/Data/Material.hs 19;" C ForceFieldType src/Dodge/Data/Item/Use/Consumption/Ammo.hs 11;" t @@ -520,7 +521,7 @@ HeavySmokeFlare src/Dodge/Data/Muzzle.hs 33;" C HeldItemType src/Dodge/Data/Item/Combine.hs 138;" t HeldPlatformSF src/Dodge/Data/ComposedItem.hs 14;" C HiddenGoal src/Dodge/Data/Scenario.hs 14;" C -HighlightSI src/Dodge/Data/SelectionList.hs 55;" C +HighlightSI src/Dodge/Data/SelectionList.hs 57;" C HomeUsingRemoteScreen src/Dodge/Data/Projectile.hs 41;" C HomeUsingTargeting src/Dodge/Data/Projectile.hs 42;" C Hospital src/Dodge/Data/Scenario.hs 69;" C @@ -545,6 +546,7 @@ HotkeyZ src/Dodge/Data/Equipment/Misc.hs 35;" C Huge src/Shape/Data.hs 23;" C Humanoid src/Dodge/Data/Creature/Misc.hs 75;" C HumanoidAI src/Dodge/Data/Creature/Misc.hs 37;" t +IMSI src/Dodge/Data/SelectionList.hs 40;" t IMSS src/Dodge/Data/SelectionList.hs 38;" t INTROSCAN src/Dodge/Data/Item/Combine.hs 32;" C INVISIBILITYEQUIPMENT src/Dodge/Data/Item/Combine.hs 124;" C @@ -655,7 +657,7 @@ LayVars src/Dodge/Data/MetaTree.hs 29;" C Layer src/Picture/Data.hs 20;" t LayoutVars src/Dodge/Data/MetaTree.hs 29;" t LeadTarget src/Dodge/Data/ActionPlan.hs 115;" C -LeftForward src/Dodge/Data/Creature/Stance.hs 30;" C +LeftForward src/Dodge/Data/Creature/Stance.hs 29;" C LeftwardDT src/Dodge/Data/DoubleTree.hs 84;" C LeftwardLDT src/Dodge/Data/DoubleTree.hs 42;" C Lethargic src/Dodge/Data/Creature/Perception.hs 53;" C @@ -840,7 +842,7 @@ NoParams src/Dodge/Data/Item/Params.hs 13;" C NoRightButtonState src/Dodge/Data/RightButtonOptions.hs 14;" C NoRoomClipBoundaries src/Dodge/Data/Config.hs 121;" C NoSF src/Dodge/Data/ComposedItem.hs 29;" C -NoSIDisplayMod src/Dodge/Data/SelectionList.hs 54;" C +NoSIDisplayMod src/Dodge/Data/SelectionList.hs 56;" C NoShadowFidelity src/Shape/Data.hs 20;" C NoShadows src/Dodge/Data/Config.hs 117;" C NoSoundFilter src/Dodge/Data/WorldEffect.hs 23;" C @@ -1009,7 +1011,7 @@ Polyhedra src/Polyhedra/Data.hs 13;" t Polyhedron src/Polyhedra/Data.hs 13;" C PosInf src/Dodge/Data/CardinalPoint.hs 44;" C PosRooms src/Dodge/Tree/Shift.hs 28;" t -Posture src/Dodge/Data/Creature/Stance.hs 33;" t +Posture src/Dodge/Data/Creature/Stance.hs 32;" t PreloadData src/Data/Preload.hs 10;" t PrintMaterial src/Dodge/Data/AmmoType.hs 15;" C Prison src/Dodge/Data/Scenario.hs 65;" C @@ -1104,7 +1106,7 @@ Revenge src/Dodge/Data/Scenario.hs 6;" C RewindLeftClick src/Dodge/Data/World.hs 78;" C RezBaySS src/Dodge/Data/Scenario.hs 105;" C RightButtonState src/Dodge/Data/RightButtonOptions.hs 13;" t -RightForward src/Dodge/Data/Creature/Stance.hs 30;" C +RightForward src/Dodge/Data/Creature/Stance.hs 29;" C RightwardDT src/Dodge/Data/DoubleTree.hs 91;" C RightwardLDT src/Dodge/Data/DoubleTree.hs 50;" C Rocket src/Dodge/Data/Projectile.hs 32;" C @@ -1129,7 +1131,7 @@ SCRAPMETAL src/Dodge/Data/Item/Combine.hs 61;" C SHATTERGUN src/Dodge/Data/Item/Combine.hs 173;" C SHELLMAG src/Dodge/Data/Item/Combine.hs 109;" C SHELLPAYLOAD src/Dodge/Data/Item/Combine.hs 101;" C -SIDisplayMod src/Dodge/Data/SelectionList.hs 53;" t +SIDisplayMod src/Dodge/Data/SelectionList.hs 55;" t SMG src/Dodge/Data/Item/Combine.hs 146;" C SMOKEREDUCER src/Dodge/Data/Item/Combine.hs 99;" C SNIPERRIFLE src/Dodge/Data/Item/Combine.hs 160;" C @@ -1157,13 +1159,13 @@ SeeThrough src/Dodge/Data/Wall.hs 31;" C Sel src/Dodge/Data/HUD.hs 39;" C SelCloseButton src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 30;" C SelCloseItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 28;" C -SelItem src/Dodge/Data/SelectionList.hs 42;" C +SelItem src/Dodge/Data/SelectionList.hs 44;" C SelNothing src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 26;" C SelSection src/Dodge/Data/SelectionList.hs 30;" t SelectedItem src/Dodge/Data/Item/Use/Consumption/LoadAction.hs 21;" C Selection src/Dodge/Data/HUD.hs 39;" t -SelectionItem src/Dodge/Data/SelectionList.hs 42;" t -SelectionWidth src/Dodge/Data/SelectionList.hs 40;" t +SelectionItem src/Dodge/Data/SelectionList.hs 44;" t +SelectionWidth src/Dodge/Data/SelectionList.hs 42;" t SelfTree src/Dodge/Data/MetaTree.hs 20;" t SemiAutoTrigger src/Dodge/Data/TriggerType.hs 9;" C SensorType src/Dodge/Data/Machine/Sensor.hs 12;" t @@ -1251,7 +1253,6 @@ StabOrthReduce src/Dodge/Projectile/Create.hs 17;" C StabSpinIncrease src/Dodge/Projectile/Create.hs 18;" C Stance src/Dodge/Data/Creature/Stance.hs 15;" t StandaloneWall src/Dodge/Data/Wall/Structure.hs 11;" C -Standing src/Dodge/Data/Creature/Stance.hs 24;" C StartSentinelPost src/Dodge/Data/ActionPlan.hs 117;" C StayInArea src/Dodge/Data/Scenario.hs 13;" C Stone src/Dodge/Data/Material.hs 13;" C @@ -1398,7 +1399,7 @@ UseHeld src/Dodge/Data/Item/Use.hs 29;" C UseInt src/Dodge/Data/Item/Use.hs 31;" C UseInvItem src/Dodge/Data/WorldEffect.hs 39;" C UseItem src/Dodge/Data/ActionPlan.hs 36;" C -UseItemWidth src/Dodge/Data/SelectionList.hs 40;" C +UseItemWidth src/Dodge/Data/SelectionList.hs 42;" C UseMapper src/Dodge/Data/Item/Use.hs 37;" C UseNothing src/Dodge/Data/Item/Use.hs 32;" C UseScope src/Dodge/Data/Item/Use.hs 34;" C @@ -1497,7 +1498,7 @@ YELLOW src/Color/Data.hs 15;" C ZOOMSCOPE src/Dodge/Data/Item/Combine.hs 91;" C ZombieFaction src/Dodge/Data/Creature/State.hs 14;" C __Just' src/MaybeHelp.hs 11;" f -_aimStance src/Dodge/Data/Creature/Stance.hs 34;" f +_aimStance src/Dodge/Data/Creature/Stance.hs 33;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 19;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 25;" f _allocNewPos src/Dodge/Data/RightButtonOptions.hs 30;" f @@ -2269,14 +2270,14 @@ _shapeHalfSize src/Shape/Data.hs 13;" f _shapeShader src/Data/Preload/Render.hs 28;" f _shellPayload src/Dodge/Data/Item/Combine.hs 101;" f _shockwaves src/Dodge/Data/LWorld.hs 113;" f -_siColor src/Dodge/Data/SelectionList.hs 47;" f -_siDisplayMod src/Dodge/Data/SelectionList.hs 50;" f -_siHeight src/Dodge/Data/SelectionList.hs 44;" f -_siIsSelectable src/Dodge/Data/SelectionList.hs 46;" f -_siOffX src/Dodge/Data/SelectionList.hs 48;" f -_siPayload src/Dodge/Data/SelectionList.hs 49;" f -_siPictures src/Dodge/Data/SelectionList.hs 43;" f -_siWidth src/Dodge/Data/SelectionList.hs 45;" f +_siColor src/Dodge/Data/SelectionList.hs 49;" f +_siDisplayMod src/Dodge/Data/SelectionList.hs 52;" f +_siHeight src/Dodge/Data/SelectionList.hs 46;" f +_siIsSelectable src/Dodge/Data/SelectionList.hs 48;" f +_siOffX src/Dodge/Data/SelectionList.hs 50;" f +_siPayload src/Dodge/Data/SelectionList.hs 51;" f +_siPictures src/Dodge/Data/SelectionList.hs 45;" f +_siWidth src/Dodge/Data/SelectionList.hs 47;" f _sideEffect src/Loop/Data.hs 13;" f _sideImpulses src/Dodge/Data/ActionPlan.hs 122;" f _silhouetteEBO src/Data/Preload/Render.hs 30;" f @@ -2513,7 +2514,7 @@ addArmour src/Dodge/Creature.hs 82;" f addBranchAt src/Dodge/Tree/GenerateStructure.hs 18;" f addButtonSlowDoor src/Dodge/Room/LongDoor.hs 96;" f addCrGibs src/Dodge/Prop/Gib.hs 17;" f -addDepth src/Picture/Base.hs 134;" f +addDepth src/Picture/Base.hs 135;" f addDoorAtNthLinkToggleTerminal src/Dodge/Room/Warning.hs 40;" f addDoorToggleTerminal src/Dodge/Room/Warning.hs 37;" f addGib4 src/Dodge/Prop/Gib.hs 52;" f @@ -2541,12 +2542,11 @@ addSideEffect src/Dodge/Concurrent.hs 29;" f addSouthPillars src/Dodge/Room/LongDoor.hs 88;" f addTermSignal src/Dodge/Event/Input.hs 31;" f addToTrunk src/TreeHelp.hs 157;" f -addWarningTerminal src/Dodge/Room/Warning.hs 61;" f +addWarningTerminal src/Dodge/Room/Warning.hs 63;" f addZ src/Geometry/Vector3D.hs 89;" f adjustIMZone src/Dodge/Base.hs 81;" f -advanceScrollAmount src/Dodge/Update.hs 411;" f +advanceScrollAmount src/Dodge/Update.hs 422;" f advanceSmoothScroll src/Dodge/SmoothScroll.hs 33;" f -advanceStepCounter src/Dodge/Creature/Impulse/Movement.hs 60;" f aimDelaySweep src/Dodge/Render/Picture.hs 285;" f aimStanceInfo src/Dodge/Item/Info.hs 243;" f aimTurn src/Dodge/Creature/YourControl.hs 181;" f @@ -2600,10 +2600,10 @@ applyTorqueCME src/Dodge/HeldUse.hs 570;" f applyWorldConfig src/Dodge/Config.hs 55;" f aquamarine src/Color.hs 50;" f arHUD src/Dodge/Item/Scope.hs 134;" f -arc src/Picture/Base.hs 291;" f +arc src/Picture/Base.hs 295;" f arcFull src/Picture/Arc.hs 11;" f arcPart src/Picture/Arc.hs 24;" f -arcSolid src/Picture/Base.hs 280;" f +arcSolid src/Picture/Base.hs 284;" f arcStepwise src/Geometry.hs 326;" f arcStepwisePositive src/Geometry.hs 340;" f arcTest src/Picture/Test.hs 9;" f @@ -2687,7 +2687,7 @@ bgunSound src/Dodge/HeldUse.hs 514;" f bindFBO src/Render.hs 235;" f bingate src/Dodge/Item/Scope.hs 109;" f black src/Color.hs 54;" f -blank src/Picture/Base.hs 60;" f +blank src/Picture/Base.hs 61;" f blinkAcrossChallenge src/Dodge/Room/BlinkAcross.hs 14;" f blinkActionFail src/Dodge/Creature/Action/Blink.hs 87;" f blinkActionMousePos src/Dodge/Creature/Action/Blink.hs 24;" f @@ -2770,7 +2770,7 @@ cardinalVectors src/Dodge/FloorItem.hs 24;" f cdtPropagateFold src/Dodge/DoubleTree.hs 407;" f ceilingTo src/Geometry/Zone.hs 15;" f cenLasTur src/Dodge/Room/LasTurret.hs 34;" f -centerText src/Picture/Base.hs 185;" f +centerText src/Picture/Base.hs 186;" f centerVaultExplosiveExit src/Dodge/Room/NoNeedWeapon.hs 20;" f centerVaultRoom src/Dodge/Room/Procedural.hs 269;" f centroid src/Geometry/Polygon.hs 169;" f @@ -2779,7 +2779,7 @@ chainPairs src/Geometry.hs 360;" f changeSwapOther src/Dodge/Inventory.hs 141;" f changeSwapSel src/Dodge/Inventory.hs 134;" f changeSwapWith src/Dodge/Inventory.hs 175;" f -charToTuple src/Picture/Base.hs 321;" f +charToTuple src/Picture/Base.hs 325;" f charToTupleGrad src/Picture/Text.hs 18;" f chartreuse src/Color.hs 51;" f chaseCrit src/Dodge/Creature/ChaseCrit.hs 27;" f @@ -2795,13 +2795,13 @@ checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 66;" f checkDeath src/Dodge/Creature/Update.hs 70;" f checkDeath' src/Dodge/Creature/Update.hs 73;" f -checkEndGame src/Dodge/Update.hs 764;" f +checkEndGame src/Dodge/Update.hs 775;" f checkErrorGL src/Shader/Compile.hs 86;" f checkFBO src/Framebuffer/Check.hs 6;" f checkGLError src/GLHelp.hs 17;" f checkInvSlotsYou src/Dodge/Inventory/CheckSlots.hs 18;" f checkInventorySelectionExists src/Dodge/DisplayInventory.hs 93;" f -checkTermDist src/Dodge/Update.hs 323;" f +checkTermDist src/Dodge/Update.hs 334;" f checkWallLeft src/Dodge/LevelGen/StaticWalls/Deprecated.hs 29;" f checkWallRight src/Dodge/LevelGen/StaticWalls.hs 54;" f checkWallRight src/Dodge/LevelGen/StaticWalls/Deprecated.hs 59;" f @@ -2819,10 +2819,10 @@ circOnAnyCr src/Dodge/Base/Collide.hs 292;" f circOnSeg src/Geometry.hs 101;" f circOnSegNoEndpoints src/Geometry.hs 91;" f circOnSomeWall src/Dodge/Base/Collide.hs 286;" f -circle src/Picture/Base.hs 181;" f +circle src/Picture/Base.hs 182;" f circleDecoration src/Dodge/Placement/TopDecoration.hs 62;" f -circleSolid src/Picture/Base.hs 165;" f -circleSolidCol src/Picture/Base.hs 169;" f +circleSolid src/Picture/Base.hs 166;" f +circleSolidCol src/Picture/Base.hs 170;" f clAlt src/Dodge/Cloud.hs 5;" f clColor src/Shader/Poke/Cloud.hs 39;" f clZoneSize src/Dodge/Zoning/Cloud.hs 24;" f @@ -2873,7 +2873,7 @@ collideCircWalls src/Dodge/Base/Collide.hs 253;" f collidePoint src/Dodge/Base/Collide.hs 52;" f collidePointTestFilter src/Dodge/Base/Collide.hs 188;" f collidePointWallsFilter src/Dodge/Base/Collide.hs 202;" f -color src/Picture/Base.hs 109;" f +color src/Picture/Base.hs 110;" f colorLamp src/Dodge/Creature/Lamp.hs 10;" f colorSH src/Shape.hs 233;" f combinationsDotGraph src/Dodge/Combine/Graph.hs 93;" f @@ -2927,7 +2927,7 @@ crAwayFromPost src/Dodge/Creature/Test.hs 85;" f crBlips src/Dodge/RadarSweep.hs 88;" f crCamouflage src/Dodge/Creature/Picture.hs 33;" f crCanSeeCr src/Dodge/Creature/Test.hs 52;" f -crCrSpring src/Dodge/Update.hs 874;" f +crCrSpring src/Dodge/Update.hs 885;" f crCurrentEquipment src/Dodge/Creature/Statistics.hs 62;" f crDexterity src/Dodge/Creature/Statistics.hs 19;" f crDisplayAwareness src/Dodge/Creature/Picture/Awareness.hs 39;" f @@ -2958,7 +2958,7 @@ crRad src/Dodge/Creature/Radius.hs 7;" f crSafeDistFromTarg src/Dodge/Creature/Test.hs 74;" f crSetRoots src/Dodge/Inventory/Location.hs 55;" f crShape src/Dodge/Creature/Shape.hs 8;" f -crSpring src/Dodge/Update.hs 871;" f +crSpring src/Dodge/Update.hs 882;" f crStratConMatches src/Dodge/Creature/Test.hs 80;" f crStrength src/Dodge/Creature/Statistics.hs 29;" f crUpdate src/Dodge/Creature/Update.hs 63;" f @@ -2985,9 +2985,9 @@ createWall src/Dodge/Wall/Create.hs 8;" f creatureDisplayText src/Dodge/Creature/Picture/Awareness.hs 12;" f creatureShootLaser src/Dodge/HeldUse.hs 837;" f creatureShootPulseLaser src/Dodge/HeldUse.hs 868;" f -creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 68;" f -creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 89;" f -creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 78;" f +creatureTurnTo src/Dodge/Creature/Impulse/Movement.hs 60;" f +creatureTurnToward src/Dodge/Creature/Impulse/Movement.hs 81;" f +creatureTurnTowardDir src/Dodge/Creature/Impulse/Movement.hs 70;" f critInDeadEnd src/Dodge/Room/Room.hs 251;" f critsPillarRoom src/Dodge/Room/Room.hs 398;" f critsRoom src/Dodge/Room/Room.hs 406;" f @@ -3170,10 +3170,10 @@ disconnectItemS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 688;" f displayConfig src/Dodge/Menu.hs 225;" f displayControls src/Dodge/Menu.hs 241;" f displayFrameTicks src/Dodge/Render/Picture.hs 50;" f -displayFreeSlots src/Dodge/DisplayInventory.hs 193;" f +displayFreeSlots src/Dodge/DisplayInventory.hs 196;" f displayIndents src/Dodge/DisplayInventory.hs 110;" f displayPulse src/Dodge/Inventory/SelectionList.hs 182;" f -displayTerminalLineString src/Dodge/Update.hs 476;" f +displayTerminalLineString src/Dodge/Update.hs 487;" f dist src/Geometry/Vector.hs 185;" f dist3 src/Geometry/Vector3D.hs 101;" f distributeAmmoToItem src/Dodge/WorldEffect.hs 148;" f @@ -3225,7 +3225,7 @@ 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 38;" f -doItemTimeScroll src/Dodge/Update.hs 199;" f +doItemTimeScroll src/Dodge/Update.hs 200;" f doLoop src/Loop.hs 60;" f doMagnetBuBu src/Dodge/Bullet.hs 35;" f doModificationEffect src/Dodge/ModificationEffect.hs 7;" f @@ -3237,21 +3237,21 @@ doRegexInput src/Dodge/Update/Input/InGame.hs 453;" f doRoomPlacements src/Dodge/Layout.hs 104;" f doRoomShift src/Dodge/Room/Link.hs 33;" f doScopeZoom src/Dodge/Update/Scroll.hs 91;" f -doSectionSize src/Dodge/DisplayInventory.hs 212;" f +doSectionSize src/Dodge/DisplayInventory.hs 215;" f doSideEffects appDodge/Main.hs 117;" f doStrategyActions src/Dodge/Creature/ReaderUpdate.hs 172;" f doTestDrawing src/Dodge/Render.hs 40;" 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 129;" f -doTimeScroll src/Dodge/Update.hs 204;" f +doTimeScroll src/Dodge/Update.hs 205;" f doTmWdWd src/Dodge/WorldEffect.hs 101;" f doWallRotate src/Dodge/Update/Camera.hs 227;" f doWdBl src/Dodge/WorldBool.hs 10;" f doWdCrBl src/Dodge/CreatureEffect.hs 18;" f doWdP2f src/Dodge/WdP2f.hs 10;" f doWdWd src/Dodge/WorldEffect.hs 34;" f -doWorldEvents src/Dodge/Update.hs 420;" f +doWorldEvents src/Dodge/Update.hs 431;" f doWorldPos src/Dodge/WorldPos.hs 10;" f door src/Dodge/Room/Door.hs 13;" f doorBetween src/Dodge/Placement/Instance/Door.hs 38;" f @@ -3376,7 +3376,7 @@ drawTargetingAR src/Dodge/Targeting/Draw.hs 20;" f drawTerminalCursorLink src/Dodge/Render/HUD.hs 385;" f drawTerminalDisplay src/Dodge/Render/HUD.hs 351;" f drawTeslaArc src/Dodge/Tesla/Draw.hs 9;" f -drawText src/Picture/Base.hs 224;" f +drawText src/Picture/Base.hs 228;" f drawTitle src/Dodge/Render/MenuScreen.hs 49;" f drawTitleBackground src/Dodge/Render/List.hs 60;" f drawTractorBeam src/Dodge/TractorBeam/Draw.hs 7;" f @@ -3440,7 +3440,7 @@ endArcPos src/Dodge/Tesla.hs 87;" f endCombineRegex src/Dodge/Update/Input/InGame.hs 276;" f endRegex src/Dodge/Update/Input/InGame.hs 270;" f energyReleaseS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 624;" f -enterCombineInv src/Dodge/DisplayInventory.hs 320;" f +enterCombineInv src/Dodge/DisplayInventory.hs 318;" f enumOption src/Dodge/Menu/OptionType.hs 17;" f epText src/Dodge/Inventory/SelectionList.hs 79;" f eqConstr src/SameConstr.hs 17;" f @@ -3487,7 +3487,7 @@ farWallDistDirection src/Dodge/Update/Camera.hs 248;" f fdiv src/ShortShow.hs 41;" f feet src/Dodge/Creature/Picture.hs 51;" f filter3 src/FoldableHelp.hs 76;" f -filterSectionsPair src/Dodge/DisplayInventory.hs 157;" f +filterSectionsPair src/Dodge/DisplayInventory.hs 160;" f findBlips src/Dodge/RadarSweep.hs 63;" f findBoundDists src/Dodge/Update/Camera.hs 255;" f findClosePoint src/Dodge/LevelGen/StaticWalls.hs 155;" f @@ -3558,7 +3558,7 @@ fromV3 src/Geometry/Data.hs 63;" f frontArmour src/Dodge/Item/Equipment.hs 38;" f fstV2 src/Geometry/Data.hs 70;" f fuelPack src/Dodge/Item/Equipment.hs 53;" f -functionalUpdate src/Dodge/Update.hs 247;" f +functionalUpdate src/Dodge/Update.hs 248;" f fusePoint src/Dodge/LevelGen/StaticWalls.hs 158;" f fuseWall src/Dodge/LevelGen/StaticWalls.hs 165;" f fuseWallsWith src/Dodge/LevelGen/StaticWalls.hs 172;" f @@ -3572,7 +3572,7 @@ gameRoomViewpoints src/Dodge/Viewpoints.hs 35;" f gameRoomsFromRooms src/Dodge/Layout.hs 149;" f gameplayMenu src/Dodge/Menu.hs 154;" f gameplayMenuOptions src/Dodge/Menu.hs 157;" f -gasEffect src/Dodge/Update.hs 789;" f +gasEffect src/Dodge/Update.hs 800;" f gasType src/Dodge/HeldUse.hs 1107;" f gassesNearPoint src/Dodge/Zoning/Cloud.hs 12;" f generateGenParams src/Dodge/LevelGen/LevelStructure.hs 23;" f @@ -3598,7 +3598,7 @@ getCommands src/Dodge/Terminal.hs 49;" f getCrMoveSpeed src/Dodge/Creature/Statistics.hs 50;" f getCrsFromRooms src/Dodge/Room/Tutorial.hs 345;" f getCrsFromRooms' src/Dodge/Room/Tutorial.hs 332;" f -getDebugMouseOver src/Dodge/Update.hs 381;" f +getDebugMouseOver src/Dodge/Update.hs 392;" f getDistortions src/Dodge/Render.hs 441;" f getEdgesCrossing src/Dodge/Path.hs 37;" f getGrenadeHitEffect src/Dodge/HeldUse.hs 1256;" f @@ -3609,7 +3609,7 @@ getLaserDamage src/Dodge/HeldUse.hs 704;" f getLaserPhaseV src/Dodge/HeldUse.hs 701;" f getLinksOfType src/Dodge/RoomLink.hs 41;" f getMaxLinesTM src/Dodge/Terminal/Type.hs 6;" f -getMenuMouseContext src/Dodge/Update.hs 393;" f +getMenuMouseContext src/Dodge/Update.hs 404;" f getNodePos src/Dodge/Path.hs 34;" f getPJStabiliser src/Dodge/HeldUse.hs 1243;" f getPretty src/AesonHelp.hs 8;" f @@ -3666,7 +3666,8 @@ gut4S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 492;" f gut5S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 726;" f gut6S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 682;" f gyroscope src/Dodge/Item/Scope.hs 156;" f -hackBoldText src/Picture/Base.hs 198;" f +hackBoldText src/Picture/Base.hs 199;" f +hackDropShadow src/Picture/Base.hs 202;" f hackOutline src/Dodge/Render/Outline.hs 5;" f halfHeight src/Dodge/Base/Window.hs 49;" f halfWidth src/Dodge/Base/Window.hs 49;" f @@ -3803,7 +3804,7 @@ invCursorParams src/Dodge/ListDisplayParams.hs 34;" f invDP src/Dodge/ListDisplayParams.hs 31;" f invDT src/Dodge/Item/Grammar.hs 217;" f invDT' src/Dodge/Item/Grammar.hs 222;" f -invDimColor src/Dodge/DisplayInventory.hs 187;" f +invDimColor src/Dodge/DisplayInventory.hs 190;" f invHead src/Dodge/Render/HUD.hs 414;" f invIMDT src/Dodge/Item/Grammar.hs 246;" f invIndents src/Dodge/Item/Grammar.hs 253;" f @@ -3845,7 +3846,7 @@ isNHS src/Geometry/Intersect.hs 53;" f isNothing' src/MaybeHelp.hs 31;" f isOnSeg src/Geometry.hs 237;" f isOutLnk src/Dodge/PlacementSpot.hs 166;" f -isOverTerminalScreen src/Dodge/Update.hs 401;" f +isOverTerminalScreen src/Dodge/Update.hs 412;" f isPulseLaser src/Dodge/IsPulseLaser.hs 10;" f isPutID src/Dodge/Placement/Instance/Wall.hs 108;" f isRHS src/Geometry/LHS.hs 32;" f @@ -3982,14 +3983,14 @@ lightSensor src/Dodge/Placement/Instance/Sensor.hs 40;" f lightsToRender src/Dodge/Render/Lights.hs 14;" f lightx4 src/Color.hs 155;" f linGrad src/Geometry/Intersect.hs 241;" f -line src/Picture/Base.hs 230;" f -lineCol src/Picture/Base.hs 234;" f +line src/Picture/Base.hs 234;" f +lineCol src/Picture/Base.hs 238;" f lineGeom src/Dodge/Base.hs 32;" f lineOnScreenCone src/Dodge/Debug/Picture.hs 60;" f lineOrth src/Dodge/Creature/Boid.hs 128;" f -lineOutputTerminal src/Dodge/Room/Warning.hs 66;" f +lineOutputTerminal src/Dodge/Room/Warning.hs 68;" f lineSplit src/Justify.hs 26;" f -lineThick src/Picture/Base.hs 238;" f +lineThick src/Picture/Base.hs 242;" f lineUp src/Dodge/Creature/Boid.hs 150;" f linksDAGToPath src/Dodge/Room/Path.hs 13;" f linksOnPath src/Dodge/Room/CheckConsistency.hs 6;" f @@ -3997,7 +3998,7 @@ listConfig src/Dodge/Menu.hs 234;" f listControls src/Dodge/Menu.hs 246;" f listCursorChooseBorderScale src/Dodge/Render/List.hs 120;" f listGuard src/Dodge/Creature/ReaderUpdate.hs 196;" f -listSelectionColorPicture src/Dodge/DisplayInventory.hs 302;" f +listSelectionColorPicture src/Dodge/DisplayInventory.hs 299;" f litCorridor90 src/Dodge/Room/RoadBlock.hs 26;" f lmt src/MatrixHelper.hs 53;" f lnkMidPosInvSelsCol src/Dodge/Render/HUD.hs 403;" f @@ -4066,7 +4067,7 @@ magenta src/Color.hs 46;" f main appDodge/Main.hs 28;" f main bench/Bench.hs 15;" f main test/Spec.hs 12;" f -makeArc src/Picture/Base.hs 158;" f +makeArc src/Picture/Base.hs 159;" f makeAttach src/Dodge/Item/Attach.hs 10;" f makeBlip src/Dodge/RadarSweep.hs 70;" f makeBlockDebris src/Dodge/Block/Debris.hs 36;" f @@ -4128,7 +4129,7 @@ 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 568;" f -maybeOpenConsole src/Dodge/Update.hs 126;" f +maybeOpenConsole src/Dodge/Update.hs 127;" f maybeReadFile src/Dodge/LoadSeed.hs 10;" f maybeTakeOne src/RandomHelp.hs 116;" f maybeWarmupStatus src/Dodge/Item/Display.hs 45;" f @@ -4196,8 +4197,8 @@ miniS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 756;" f miniTree2 src/Dodge/Room/Room.hs 121;" f minimumOn src/FoldlHelp.hs 14;" f mirrorXAxis src/Geometry/Polygon.hs 68;" f -mirrorxz src/Picture/Base.hs 339;" f -mirroryz src/Picture/Base.hs 344;" f +mirrorxz src/Picture/Base.hs 343;" f +mirroryz src/Picture/Base.hs 348;" f missileLaunchS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 714;" f mixColors src/Color.hs 113;" f mixColorsFrac src/Color.hs 109;" f @@ -4225,7 +4226,7 @@ moveProjectile src/Dodge/Projectile/Update.hs 210;" f moveRoomBy src/Dodge/Room/Link.hs 53;" f moveShockwave src/Dodge/Shockwave/Update.hs 13;" f moveStuckGrenade src/Dodge/Projectile/Update.hs 197;" f -moveToSideNthOutLink src/Dodge/Room/Warning.hs 69;" f +moveToSideNthOutLink src/Dodge/Room/Warning.hs 71;" f moveWall src/Dodge/Wall/Move.hs 23;" f moveWallID src/Dodge/Wall/Move.hs 18;" f moveWallIDUnsafe src/Dodge/Wall/Move.hs 13;" f @@ -4245,7 +4246,7 @@ muzzleRandPos src/Dodge/HeldUse.hs 773;" f mvButton src/Dodge/Placement/PlaceSpot.hs 175;" f mvCr src/Dodge/Placement/PlaceSpot.hs 178;" f mvFS src/Dodge/Placement/PlaceSpot.hs 184;" f -mvGust src/Dodge/Update.hs 780;" f +mvGust src/Dodge/Update.hs 791;" f mvLS src/Dodge/Placement/PlaceSpot.hs 219;" f mvPointAlongAtSpeed src/Dodge/Base.hs 121;" f mvPointMeleeTarg src/Dodge/Creature/Boid.hs 327;" f @@ -4303,7 +4304,7 @@ onEquipWristShield src/Dodge/Equipment.hs 37;" f onRemoveWristShield src/Dodge/Equipment.hs 24;" f onXY src/Geometry/Vector3D.hs 130;" f oneH src/Dodge/Creature/Test.hs 96;" f -openConsole src/Dodge/Update.hs 131;" f +openConsole src/Dodge/Update.hs 132;" f optionMenu src/Dodge/Menu.hs 112;" f optionScreenDefaultEffect src/Dodge/Update/Input/ScreenLayer.hs 62;" f optionScreenUpdate src/Dodge/Update/Input/ScreenLayer.hs 53;" f @@ -4324,13 +4325,13 @@ orthogonalPointOnSeg src/Geometry/Intersect.hs 312;" f outLink src/Dodge/RoomLink.hs 120;" f outsideScreenPolygon src/Dodge/Debug/Picture.hs 44;" f outwardIntegers src/Dodge/Base.hs 181;" f -overCol src/Picture/Base.hs 312;" f +overCol src/Picture/Base.hs 316;" f overColObj src/Shape.hs 269;" f overColSH src/Shape.hs 237;" f overDebugEvent src/Dodge/Debug.hs 31;" f overLnkPosDir src/Dodge/RoomLink.hs 115;" f overLnkType src/Dodge/RoomLink.hs 105;" f -overPos src/Picture/Base.hs 307;" f +overPos src/Picture/Base.hs 311;" f overPosObj src/Shape.hs 273;" f overPosSH src/Shape.hs 257;" f overPosSP src/ShapePicture.hs 41;" f @@ -4358,8 +4359,8 @@ pauseGame src/Dodge/Update/Input/InGame.hs 531;" f pauseMenu src/Dodge/Menu.hs 59;" f pauseMenuOptions src/Dodge/Menu.hs 66;" f pauseSound src/Dodge/SoundLogic.hs 42;" f -pauseTime src/Dodge/Update.hs 188;" f -pbFlicker src/Dodge/Update.hs 461;" f +pauseTime src/Dodge/Update.hs 189;" f +pbFlicker src/Dodge/Update.hs 472;" 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 @@ -4373,7 +4374,7 @@ performPathTo src/Dodge/Creature/Action.hs 116;" f performTurnToA src/Dodge/Creature/Action.hs 128;" f perspectiveMatrixb src/MatrixHelper.hs 11;" f picFormat src/Polyhedra.hs 23;" f -picMap src/Picture/Base.hs 68;" f +picMap src/Picture/Base.hs 69;" f pickUpItem src/Dodge/Inventory/Add.hs 70;" f pickUpItemAt src/Dodge/Inventory/Add.hs 75;" f pickUpS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 660;" f @@ -4403,7 +4404,7 @@ placeSpotID src/Dodge/Placement/PlaceSpot.hs 103;" f placeSpotRoomRand src/Dodge/Placement/PlaceSpot.hs 88;" f placeSpotUsingLink src/Dodge/Placement/PlaceSpot.hs 66;" f placeWallPoly src/Dodge/Placement/PlaceSpot.hs 162;" f -plainRegex src/Dodge/DisplayInventory.hs 190;" f +plainRegex src/Dodge/DisplayInventory.hs 193;" f playIfFree src/Sound.hs 138;" f playPositionalSoundQueue src/Sound.hs 146;" f playSoundAndUpdate src/Sound.hs 54;" f @@ -4455,8 +4456,8 @@ pokeVerxs src/Shader/Poke.hs 32;" f pokeW src/Shader/Poke.hs 91;" f pokeWall src/Shader/Poke.hs 80;" f pokeWallsWindows src/Shader/Poke.hs 52;" f -poly3 src/Picture/Base.hs 85;" f -poly3Col src/Picture/Base.hs 89;" f +poly3 src/Picture/Base.hs 86;" f +poly3Col src/Picture/Base.hs 90;" f polyChasm src/Dodge/Room/Tutorial.hs 182;" f polyChasmC src/Dodge/Room/Tutorial.hs 191;" f polyCirc src/Shape.hs 47;" f @@ -4471,9 +4472,9 @@ polyToPics src/Polyhedra.hs 122;" f polyToTris src/Geometry/Triangulate.hs 7;" f polyToTris' src/Geometry.hs 172;" f polyToTris'' src/Geometry/Triangulate.hs 15;" f -polygon src/Picture/Base.hs 73;" f -polygonCol src/Picture/Base.hs 79;" f -polygonWire src/Picture/Base.hs 64;" f +polygon src/Picture/Base.hs 74;" f +polygonCol src/Picture/Base.hs 80;" f +polygonWire src/Picture/Base.hs 65;" f polysToPic src/Polyhedra.hs 130;" f popScreen src/Dodge/Menu/PushPop.hs 6;" f posRms src/Dodge/Tree/Shift.hs 44;" f @@ -4568,7 +4569,7 @@ rLauncher src/Dodge/Item/Held/Launcher.hs 14;" f rLauncherX src/Dodge/Item/Held/Launcher.hs 30;" f rToOnward src/Dodge/Cleat.hs 21;" f radToDeg src/Geometry/Vector.hs 123;" f -radiusSpring src/Dodge/Update.hs 860;" f +radiusSpring src/Dodge/Update.hs 871;" f randBlockBreakWeapon src/Dodge/Item/Random.hs 7;" f randC1 src/Dodge/Placement/Instance/Creature.hs 8;" f randDirPS src/Dodge/PlacementSpot.hs 56;" f @@ -4590,7 +4591,7 @@ randPeakedParam src/RandomHelp.hs 130;" f randProb src/RandomHelp.hs 68;" f randSpark src/Dodge/Spark.hs 69;" f randSparkExtraVel src/Dodge/Spark.hs 92;" f -randWallReflect src/Dodge/Update.hs 636;" f +randWallReflect src/Dodge/Update.hs 647;" f randomChallenges src/Dodge/Room/Start.hs 63;" f randomCompass src/Dodge/Layout.hs 60;" f randomFourCornerRoom src/Dodge/Room/Procedural.hs 246;" f @@ -4629,7 +4630,7 @@ reflectPulseLaserAlong src/Dodge/Item/Weapon/LaserPath.hs 65;" f refract src/Dodge/Item/Weapon/LaserPath.hs 39;" f refreshOptionsSelectionList src/Dodge/Menu/Option.hs 35;" f regexCombs src/Dodge/DisplayInventory.hs 71;" f -regexList src/Dodge/DisplayInventory.hs 311;" f +regexList src/Dodge/DisplayInventory.hs 309;" f reload1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 634;" f reloadLevelStart src/Dodge/Save.hs 71;" f reloadS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 632;" f @@ -4723,7 +4724,7 @@ rose src/Color.hs 47;" f rotD src/Padding.hs 44;" f rotMatr src/MatrixHelper.hs 79;" f rotU src/Padding.hs 39;" f -rotate src/Picture/Base.hs 154;" f +rotate src/Picture/Base.hs 155;" f rotate3 src/Geometry/Vector3D.hs 48;" f rotate3x src/Geometry/Vector3D.hs 60;" f rotate3y src/Geometry/Vector3D.hs 66;" f @@ -4772,8 +4773,8 @@ saveSlotPath src/Dodge/Save.hs 63;" f saveWorldInSlot src/Dodge/Save.hs 68;" f sawtoothFailS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 754;" f scToTS src/Dodge/Event/Input.hs 34;" f -scale src/Picture/Base.hs 150;" f -scale3 src/Picture/Base.hs 146;" f +scale src/Picture/Base.hs 151;" f +scale3 src/Picture/Base.hs 147;" f scaleMat src/MatrixHelper.hs 71;" f scaleMatrix src/MatrixHelper.hs 68;" f scaleSH src/Shape.hs 265;" f @@ -4790,8 +4791,8 @@ scrollAugInvSel src/Dodge/Inventory.hs 191;" f scrollAugNextInSection src/Dodge/Inventory.hs 204;" f scrollRBOption src/Dodge/Update/Scroll.hs 202;" f scrollSelectionSections src/Dodge/SelectionSections.hs 28;" f -scrollTimeBack src/Dodge/Update.hs 214;" f -scrollTimeForward src/Dodge/Update.hs 231;" f +scrollTimeBack src/Dodge/Update.hs 215;" f +scrollTimeForward src/Dodge/Update.hs 232;" f seagullBarkS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 600;" f seagullBarkTransformedS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 692;" f seagullChatter1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 706;" f @@ -4803,8 +4804,8 @@ seagullWhistle1S src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 526;" f seagullWhistleS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 758;" f searchIfDamaged src/Dodge/Creature/ReaderUpdate.hs 213;" f secondColumnLDP src/Dodge/ListDisplayParams.hs 41;" f -sectionsDesiredLines src/Dodge/DisplayInventory.hs 199;" f -sectionsSizes src/Dodge/DisplayInventory.hs 202;" f +sectionsDesiredLines src/Dodge/DisplayInventory.hs 202;" f +sectionsSizes src/Dodge/DisplayInventory.hs 205;" f seedStartMenu src/Dodge/Menu.hs 87;" f seedStartOptions src/Dodge/Menu.hs 90;" f segOnCirc src/Geometry.hs 113;" f @@ -4829,22 +4830,22 @@ sentinelExtraWatchUpdate src/Dodge/Creature/SentinelAI.hs 82;" f sentinelFireType src/Dodge/Creature/SentinelAI.hs 49;" f setAimPosture src/Dodge/Creature/YourControl.hs 145;" f setChannelPos src/Sound.hs 151;" f -setClickWorldPos src/Dodge/Update.hs 101;" f +setClickWorldPos src/Dodge/Update.hs 102;" f setClip src/Dodge/Debug.hs 193;" f setClusterID src/Dodge/Combine/Graph.hs 114;" f -setDepth src/Picture/Base.hs 129;" f +setDepth src/Picture/Base.hs 130;" f setDirPS src/Dodge/PlacementSpot.hs 49;" f setFallback src/Dodge/PlacementSpot.hs 125;" f setInLinks src/Dodge/RoomLink.hs 53;" f setInLinksByType src/Dodge/RoomLink.hs 72;" f setInLinksPD src/Dodge/RoomLink.hs 92;" f setInvPosFromSS src/Dodge/Inventory/Location.hs 92;" f -setLayer src/Picture/Base.hs 140;" f +setLayer src/Picture/Base.hs 141;" f setLinkType src/Dodge/RoomLink.hs 78;" f setLinkTypePD src/Dodge/RoomLink.hs 85;" f setMusicVolume src/Sound.hs 163;" f setMvPos src/Dodge/Creature/ReaderUpdate.hs 58;" f -setOldPos src/Dodge/Update.hs 495;" f +setOldPos src/Dodge/Update.hs 506;" f setOutLinks src/Dodge/RoomLink.hs 50;" f setOutLinksByType src/Dodge/RoomLink.hs 75;" f setOutLinksPD src/Dodge/RoomLink.hs 95;" f @@ -4944,7 +4945,7 @@ shuffleLinks src/Dodge/Room/Link.hs 30;" f shuffleRoomPos src/Dodge/Layout.hs 82;" f shuffleTail src/RandomHelp.hs 59;" f sigmoid src/Dodge/Base.hs 151;" f -simpleCrSprings src/Dodge/Update.hs 865;" f +simpleCrSprings src/Dodge/Update.hs 876;" f simpleTermMessage src/Dodge/Terminal.hs 173;" f sineRaisePitchOneSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 720;" f sineRaisePitchTwoSecS src/Dodge/SoundLogic/ExternallyGeneratedSounds.hs 496;" f @@ -5048,7 +5049,7 @@ ssSetCursor src/Dodge/SelectionSections.hs 59;" f ssfold src/FoldableHelp.hs 105;" f stackPicturesAt src/Dodge/Render/List.hs 95;" f stackPicturesAtOff src/Dodge/Render/List.hs 98;" f -stackText src/Picture/Base.hs 189;" f +stackText src/Picture/Base.hs 190;" f stackedInventory src/Dodge/Creature.hs 309;" f startCr src/Dodge/Creature.hs 90;" f startCrafts src/Dodge/Room/Start.hs 93;" f @@ -5078,7 +5079,7 @@ strFromHeldItem src/Dodge/Creature/Statistics.hs 67;" f strengthFactor src/Dodge/Creature/Impulse/Movement.hs 51;" f strictify src/MaybeHelp.hs 35;" f strideRot src/Dodge/Item/HeldOffset.hs 71;" f -stringToList src/Picture/Base.hs 317;" f +stringToList src/Picture/Base.hs 321;" f stringToListGrad src/Picture/Text.hs 12;" f stripZ src/Geometry/Vector3D.hs 97;" f subInvX src/Dodge/ListDisplayParams.hs 47;" f @@ -5138,26 +5139,26 @@ teslaParams src/Dodge/Item/Held/BatteryGuns.hs 25;" f testEvent src/Dodge/Event/Test.hs 11;" f testInventory src/Dodge/Creature.hs 290;" f testStringInit src/Dodge/TestString.hs 34;" f -text src/Picture/Base.hs 194;" f +text src/Picture/Base.hs 195;" f textGrad src/Picture/Text.hs 5;" f textInputBlurb src/Dodge/Terminal.hs 37;" f textInputFocus src/Dodge/InputFocus.hs 11;" f -textJustifyCenter src/Picture/Base.hs 216;" f -textJustifyLeft src/Picture/Base.hs 212;" f -textJustifyRight src/Picture/Base.hs 202;" f -textRight src/Picture/Base.hs 207;" f +textJustifyCenter src/Picture/Base.hs 220;" f +textJustifyLeft src/Picture/Base.hs 216;" f +textJustifyRight src/Picture/Base.hs 206;" f +textRight src/Picture/Base.hs 211;" f textTerminal src/Dodge/Terminal.hs 34;" f -textVMirror src/Picture/Base.hs 220;" f +textVMirror src/Picture/Base.hs 224;" f tflat2 src/Picture/Data.hs 56;" f tflat3 src/Picture/Data.hs 60;" f tflat4 src/Picture/Data.hs 64;" f theCleanup appDodge/Main.hs 65;" f theColumns src/Dodge/Tree/Shift.hs 146;" f theUpdateStep appDodge/Main.hs 101;" f -thickArc src/Picture/Base.hs 302;" f -thickCircle src/Picture/Base.hs 276;" f -thickLine src/Picture/Base.hs 248;" f -thickLineCol src/Picture/Base.hs 259;" f +thickArc src/Picture/Base.hs 306;" f +thickCircle src/Picture/Base.hs 280;" f +thickLine src/Picture/Base.hs 252;" f +thickLineCol src/Picture/Base.hs 263;" f thinHighBar src/Dodge/Room/Foreground.hs 77;" f thingHit src/Dodge/WorldEvent/ThingsHit.hs 118;" f thingHitFilt src/Dodge/WorldEvent/ThingsHit.hs 106;" f @@ -5170,7 +5171,7 @@ throwItem src/Dodge/Creature/Action.hs 191;" f tileTexCoords src/Tile.hs 11;" f tilesFromRooms src/Dodge/Layout.hs 196;" f tilesToLine src/Shader/AuxAddition.hs 66;" f -timeFlowUpdate src/Dodge/Update.hs 174;" f +timeFlowUpdate src/Dodge/Update.hs 175;" f timeScroller src/Dodge/Item/Held/Utility.hs 42;" f timeStopper src/Dodge/Item/Held/Utility.hs 39;" f tinMag src/Dodge/Item/Ammo.hs 28;" f @@ -5187,7 +5188,7 @@ tlDoEffect src/Dodge/Terminal.hs 109;" f tlSetStatus src/Dodge/Terminal.hs 106;" f tmDistributeAmmo src/Dodge/WorldEffect.hs 117;" f tmDistributeLines src/Dodge/Room/Room.hs 449;" f -tmUpdate src/Dodge/Update.hs 479;" f +tmUpdate src/Dodge/Update.hs 490;" f toBinary src/Dodge/Inventory/SelectionList.hs 144;" f toBothLnk src/Dodge/RoomLink.hs 136;" f toClosestMultiple src/HelpNum.hs 3;" f @@ -5200,7 +5201,7 @@ toTopLeft src/Dodge/Render/List.hs 212;" f toV2 src/Geometry/Data.hs 54;" f toV3 src/Geometry/Data.hs 57;" f toV4 src/Geometry/Data.hs 60;" f -toggleCombineInv src/Dodge/DisplayInventory.hs 314;" f +toggleCombineInv src/Dodge/DisplayInventory.hs 312;" f toggleCommands src/Dodge/Terminal.hs 81;" f toggleEquipmentAt src/Dodge/Creature/Impulse/UseItem.hs 67;" f toggleExamineInv src/Dodge/Creature/Impulse/UseItem.hs 105;" f @@ -5225,14 +5226,14 @@ tractorGun src/Dodge/Item/Held/BatteryGuns.hs 53;" f tractorGunPic src/Dodge/Item/Draw/SPic.hs 416;" f tractorPullPos src/Dodge/TractorBeam/Update.hs 33;" f tractorSPic src/Dodge/TractorBeam/Draw.hs 10;" f -tranRot src/Picture/Base.hs 125;" f +tranRot src/Picture/Base.hs 126;" f transMat src/MatrixHelper.hs 87;" f transToHandle src/Dodge/Item/HeldOffset.hs 26;" f -translate src/Picture/Base.hs 117;" f -translate3 src/Picture/Base.hs 121;" f +translate src/Picture/Base.hs 118;" f +translate3 src/Picture/Base.hs 122;" f translateFloatingCamera src/Dodge/Update/Camera.hs 48;" f translateFloatingCameraKeys src/Dodge/Update/Camera.hs 66;" f -translateH src/Picture/Base.hs 113;" f +translateH src/Picture/Base.hs 114;" f translatePointToLeftHand src/Dodge/Creature/HandPos.hs 75;" f translatePointToRightHand src/Dodge/Creature/HandPos.hs 36;" f translateSH src/Shape.hs 241;" f @@ -5322,7 +5323,7 @@ unusedOffPathAwayFromLink src/Dodge/PlacementSpot.hs 131;" f unusedSpotAwayFromInLink src/Dodge/PlacementSpot.hs 137;" f unusedSpotAwayFromLink src/Dodge/PlacementSpot.hs 119;" f unusedSpotNearInLink src/Dodge/PlacementSpot.hs 196;" f -updateAimPos src/Dodge/Update.hs 310;" f +updateAimPos src/Dodge/Update.hs 321;" f updateAllNodes src/TreeHelp.hs 86;" f updateArc src/Dodge/Tesla.hs 44;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 484;" f @@ -5332,46 +5333,48 @@ updateBaseWheelEvent src/Dodge/Update/Scroll.hs 34;" f updateBounds src/Dodge/Update/Camera.hs 265;" f updateBulVel src/Dodge/Bullet.hs 57;" f updateBullet src/Dodge/Bullet.hs 22;" f -updateBullets src/Dodge/Update.hs 558;" f +updateBullets src/Dodge/Update.hs 569;" f updateCamera src/Dodge/Update/Camera.hs 31;" f updateCloseObjects src/Dodge/Inventory.hs 115;" f -updateCloud src/Dodge/Update.hs 793;" f -updateClouds src/Dodge/Update.hs 662;" f +updateCloud src/Dodge/Update.hs 804;" f +updateClouds src/Dodge/Update.hs 673;" f updateCombinePositioning src/Dodge/DisplayInventory.hs 40;" f updateCombineSections src/Dodge/DisplayInventory.hs 47;" f updateCreature src/Dodge/Creature/Update.hs 32;" f updateCreature' src/Dodge/Creature/Update.hs 41;" f -updateCreatureGroups src/Dodge/Update.hs 530;" f -updateCreatureSoundPositions src/Dodge/Update.hs 509;" f -updateDebris src/Dodge/Update.hs 565;" f +updateCreatureGroups src/Dodge/Update.hs 541;" f +updateCreatureSoundPositions src/Dodge/Update.hs 520;" f +updateCreatureStride src/Dodge/Update.hs 315;" f +updateCreatureStrides src/Dodge/Update.hs 312;" f +updateDebris src/Dodge/Update.hs 576;" f updateDebrisChunk src/Dodge/Prop/Moving.hs 16;" f -updateDebugMessageOffset src/Dodge/Update.hs 95;" f -updateDelayedEvents src/Dodge/Update.hs 894;" f +updateDebugMessageOffset src/Dodge/Update.hs 96;" f +updateDelayedEvents src/Dodge/Update.hs 905;" f updateDisplaySections src/Dodge/DisplayInventory.hs 116;" f updateDistortion src/Dodge/Distortion.hs 8;" f -updateDistortions src/Dodge/Update.hs 551;" f +updateDistortions src/Dodge/Update.hs 562;" f updateDoor src/Dodge/Door.hs 22;" f -updateDoors src/Dodge/Update.hs 315;" f -updateDust src/Dodge/Update.hs 840;" f -updateDusts src/Dodge/Update.hs 668;" f +updateDoors src/Dodge/Update.hs 326;" f +updateDust src/Dodge/Update.hs 851;" f +updateDusts src/Dodge/Update.hs 679;" f updateEdge src/Dodge/Path.hs 43;" f updateEdgeWallObs src/Dodge/Update/WallDamage.hs 39;" f updateEdgesWall src/Dodge/Update/WallDamage.hs 23;" f updateEdgesWall' src/Dodge/Update/WallDamage.hs 36;" f updateEnergyBall src/Dodge/EnergyBall.hs 31;" f -updateEnergyBalls src/Dodge/Update.hs 653;" f +updateEnergyBalls src/Dodge/Update.hs 664;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 511;" f updateExpBarrel src/Dodge/Barreloid.hs 21;" f updateFlame src/Dodge/Flame.hs 19;" f -updateFlames src/Dodge/Update.hs 650;" f +updateFlames src/Dodge/Update.hs 661;" f updateFloatingCamera src/Dodge/Update/Camera.hs 36;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 368;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 364;" f -updateGas src/Dodge/Update.hs 815;" f -updateGasses src/Dodge/Update.hs 665;" f -updateGusts src/Dodge/Update.hs 777;" f -updateIMl src/Dodge/Update.hs 524;" f -updateIMl' src/Dodge/Update.hs 527;" f +updateGas src/Dodge/Update.hs 826;" f +updateGasses src/Dodge/Update.hs 676;" f +updateGusts src/Dodge/Update.hs 788;" f +updateIMl src/Dodge/Update.hs 535;" f +updateIMl' src/Dodge/Update.hs 538;" f updateInGameCamera src/Dodge/Update/Camera.hs 84;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 434;" f updateInt2Map src/Dodge/Zoning/Base.hs 94;" f @@ -5384,64 +5387,64 @@ updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 387;" f updateKeysTextInputTerminal src/Dodge/Update/Input/InGame.hs 410;" f updateLampoid src/Dodge/Lampoid.hs 13;" f updateLaser src/Dodge/Laser/Update.hs 11;" f -updateLasers src/Dodge/Update.hs 427;" f +updateLasers src/Dodge/Update.hs 438;" f updateLeftParentSF src/Dodge/Item/Grammar.hs 170;" f updateLinearShockwave src/Dodge/LinearShockwave/Update.hs 8;" f updateLongPressInGame src/Dodge/Update/Input/InGame.hs 447;" f updateMachine src/Dodge/Machine/Update.hs 24;" f -updateMagnets src/Dodge/Update.hs 318;" f +updateMagnets src/Dodge/Update.hs 329;" f updateMouseClickInGame src/Dodge/Update/Input/InGame.hs 204;" f -updateMouseContext src/Dodge/Update.hs 331;" f -updateMouseContextGame src/Dodge/Update.hs 336;" f +updateMouseContext src/Dodge/Update.hs 342;" f +updateMouseContextGame src/Dodge/Update.hs 347;" f updateMouseHeldInGame src/Dodge/Update/Input/InGame.hs 97;" f updateMouseInGame src/Dodge/Update/Input/InGame.hs 87;" f updateMouseReleaseInGame src/Dodge/Update/Input/InGame.hs 167;" f -updateObjCatMaybes src/Dodge/Update.hs 542;" f -updateObjMapMaybe src/Dodge/Update.hs 535;" f -updatePastWorlds src/Dodge/Update.hs 416;" f +updateObjCatMaybes src/Dodge/Update.hs 553;" f +updateObjMapMaybe src/Dodge/Update.hs 546;" f +updatePastWorlds src/Dodge/Update.hs 427;" f updatePreload src/Preload/Update.hs 21;" f updateProjectile src/Dodge/Projectile/Update.hs 26;" f updatePulse src/Dodge/Creature/Update.hs 123;" f -updatePulseBall src/Dodge/Update.hs 441;" f -updatePulseLaser src/Dodge/Update.hs 605;" f -updatePulseLasers src/Dodge/Update.hs 436;" f +updatePulseBall src/Dodge/Update.hs 452;" f +updatePulseLaser src/Dodge/Update.hs 616;" f +updatePulseLasers src/Dodge/Update.hs 447;" f updateRBList src/Dodge/Inventory/RBList.hs 22;" f updateRadarBlip src/Dodge/RadarBlip.hs 11;" f -updateRadarBlips src/Dodge/Update.hs 554;" f +updateRadarBlips src/Dodge/Update.hs 565;" f updateRadarSweep src/Dodge/RadarSweep.hs 40;" f -updateRadarSweeps src/Dodge/Update.hs 656;" f +updateRadarSweeps src/Dodge/Update.hs 667;" f updateRandNode src/TreeHelp.hs 109;" f updateRenderSplit appDodge/Main.hs 104;" f updateRightParentSF src/Dodge/Item/Grammar.hs 181;" f updateRootItemID src/Dodge/Inventory/Location.hs 41;" f updateScopeZoom src/Dodge/Update/Scroll.hs 79;" f updateScrollTestValue src/Dodge/ScrollValue.hs 6;" f -updateSection src/Dodge/DisplayInventory.hs 259;" f -updateSectionsPositioning src/Dodge/DisplayInventory.hs 238;" f +updateSection src/Dodge/DisplayInventory.hs 262;" f +updateSectionsPositioning src/Dodge/DisplayInventory.hs 241;" f updateShockwave src/Dodge/Shockwave/Update.hs 8;" f -updateShockwaves src/Dodge/Update.hs 647;" f +updateShockwaves src/Dodge/Update.hs 658;" f updateSingleNodes src/TreeHelp.hs 98;" f updateSound src/Sound.hs 72;" f updateSounds src/Sound.hs 67;" f updateSpark src/Dodge/Spark.hs 19;" f -updateSparks src/Dodge/Update.hs 659;" f -updateTeslaArc src/Dodge/Update.hs 575;" f -updateTeslaArcs src/Dodge/Update.hs 572;" f +updateSparks src/Dodge/Update.hs 670;" f +updateTeslaArc src/Dodge/Update.hs 586;" f +updateTeslaArcs src/Dodge/Update.hs 583;" f updateTractorBeam src/Dodge/TractorBeam/Update.hs 9;" f -updateTractorBeams src/Dodge/Update.hs 644;" f +updateTractorBeams src/Dodge/Update.hs 655;" f updateTurret src/Dodge/Machine/Update.hs 51;" f -updateUniverse src/Dodge/Update.hs 74;" f -updateUniverseFirst src/Dodge/Update.hs 85;" f -updateUniverseLast src/Dodge/Update.hs 136;" f -updateUniverseMid src/Dodge/Update.hs 156;" f +updateUniverse src/Dodge/Update.hs 75;" f +updateUniverseFirst src/Dodge/Update.hs 86;" f +updateUniverseLast src/Dodge/Update.hs 137;" f +updateUniverseMid src/Dodge/Update.hs 157;" f updateUseInputInGame src/Dodge/Update/Input/InGame.hs 46;" 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 -updateWheelEvents src/Dodge/Update.hs 406;" f -updateWorldEventFlag src/Dodge/Update.hs 120;" f -updateWorldEventFlags src/Dodge/Update.hs 108;" f +updateWheelEvents src/Dodge/Update.hs 417;" f +updateWorldEventFlag src/Dodge/Update.hs 121;" f +updateWorldEventFlags src/Dodge/Update.hs 109;" f upperBody src/Dodge/Creature/Picture.hs 121;" f upperBox src/Shape.hs 152;" f upperBoxHalf src/Shape.hs 218;" f @@ -5615,11 +5618,11 @@ zeroZ src/Geometry/Vector.hs 9;" f zipArcs src/Dodge/Tesla.hs 52;" f zipCount src/Dodge/Tree/Shift.hs 136;" f zoneCloud src/Dodge/Zoning/Cloud.hs 33;" f -zoneClouds src/Dodge/Update.hs 468;" f +zoneClouds src/Dodge/Update.hs 479;" f zoneCreature src/Dodge/Zoning/Creature.hs 56;" f -zoneCreatures src/Dodge/Update.hs 505;" f +zoneCreatures src/Dodge/Update.hs 516;" f zoneDust src/Dodge/Zoning/Cloud.hs 57;" f -zoneDusts src/Dodge/Update.hs 473;" f +zoneDusts src/Dodge/Update.hs 484;" f zoneExtract src/Dodge/Zoning/Base.hs 58;" f zoneGas src/Dodge/Zoning/Cloud.hs 36;" f zoneIncPe src/Dodge/Zoning/Pathing.hs 66;" f